Jane Austen's peculiarity

Richmond richmondmathewson at gmail.com
Mon Aug 10 21:53:10 CEST 2015

On 10/08/15 22:19, hh wrote:
> Hi all,
> Richmond, you could give this a try in your fine prepared stack:
> The following uses
> = an array [one of the proposals above]
> = trueWords [one of the proposals, needs LC 7]
> = multichar-itemDelimiters [one of the proposals above, needs LC 7]
> It outputs for each of your 6 opening words
> "were ,was ,is ,are ,has ,have ".
> the frequency counts of words 1 and lists the item numbers of these
> occurences, for each of the 6 words as itemdelimiter (actually word & space).
> For example in fld "COOKED were" (by script created) we get:
> were by        3 122 375 413
> what means there are 3 occurrences of "were by" and these
> are at trueword 1 of items 122, 375 and 413 if "were " is
> the itemdelimiter.
> [Use of trueWord collects for example "by " and "by? " and "by, " and "by! "
> in one categorie "by".]
> *** This takes < 1 sec, in sum for all 6 opening words from above! ***
> *** So this is TMHO a true demo of the power of some LC 7 features ***
> A click on a line of one of the 6 output fields colourizes (yellow backColour)
> exactly the occurrences in fld "TEKST" and cycles finding these by hitting the
> enterKey.
> What to do?
> [1} Make a new button with the following script part 1.
> [2] Add the last part of the script to your card script part 2.
> Have fun, it takes 5 minutes to test all this with your stack ...
> Hermann
> ## part 1 for button
> on mouseUp
>   put the millisecs into strt
>   put "started : " & the long time into fld "STARTT"
>   put empty into fld "STOPT"
>   lock screen; lock messages --> speeds up
>   set cursor to watch
>   put 1 into KTEKST; put 1 into KCOOK
>   put fld "WERBS" into WERBS; delete last line of WERBS
>   put fld "TEKST" into TEKST
>   delete char 1 to offset("PRIDE AND PREJUDICE",TEKST)-1 of TEKST
>   --> watch the space after each item, no space before each item
>   put "were ,was ,is ,are ,has ,have " into openings
>   -- start be lazy
>   if there is no fld "STOPT2" then
>     clone fld "STOPT"
>     set name of last fld to "STOPT2"
>     set left of fld "STOPT2" to the left of fld "STOPT"
>     set top of fld "STOPT2" to the 40+the top of fld "STOPT"
>   end if
>   repeat with j=1 to 6
>     put ("COOKED" && word 1 of item j of openings) into F
>     if there is no field F then
>       clone fld "Cooked"
>       set name of last fld to F
>       set rect of fld F to (0,0,275,150)
>       set topleft of fld F to \
>             (item j of "95,95,380,380,670,670", item j of "590,740,590,740,590,740")
>       set tabstops of fld F to 128
>     end if
>   end repeat
>   -- end be lazy
>   repeat for each item W in openings
>     put ("COOKED" && word 1 of W) into F
>     put empty into RM; put empty into RM1
>     set itemdelimiter to W; put TEKST into TEKST2
>     delete item 1 of TEKST2; put 1 into X
>     repeat for each item I in TEKST2
>       put W & trueword 1 of I into Y --> important is "trueword", compare to "word"
>       add 1 to word 1 of RM[Y]
>       add 1 to X; put space & X after RM[Y]
>     end repeat
>     -- write these 'keys' at top
>     repeat for each line L in WERBS
>       put RM[W & L] into wL
>       if wL is empty then put 0 into wL
>       put cr & W & L & tab & wL after RM1
>     end repeat
>     combine RM by cr and tab
>     put W & ": diff cases" & tab & (the number of lines of RM) & \
>           cr & RM1 & cr&cr & RM into fld F
>     set textstyle of line 1 of fld F to "bold"
>     set textstyle of line 3 to 2+(the num of lines of WERBS) of fld F to "italic"
>     set hilitedLines of fld F to 1
>     set itemdelimiter to comma
>   end repeat
>   put "finished : " & the long time into fld "STOPT"
>   put (the short name of me)&": "&(the millisecs - strt)&" ms" into fld "STOPT2"
>   unlock screen; unlock messages
> end mouseUp
> ## part 2 for card script
> local toFind
> on mouseUp
>   if "cooked " is in the short name of the target then
>     set cursor to watch; lock screen; lock messages
>     put length(fld "TEKST") into L
>     set textcolor of char 1 to L of fld "TEKST" to "0,0,0"
>     set backColor of char 1 to L of fld "TEKST" to "255,255,255"
>     put the value of the clickline into cL
>     colorWords cL
>     unlock screen; unlock messages
>   end if
> end mouseUp
> on colorWords x
>   set itemdel to tab
>   put item 2 of x into wrds
>   put 1 + word 1 of wrds into N
>   set itemdel to ((trueword 1 of x) & space)
>   repeat with j=2 to N
>     set backcolor of trueword 1 of item (word j of wrds) of fld "TEKST" to "255,255,0"
>   end repeat
>   put "find whole" && quote & (trueword 1 to 2 of x) & quote && \
>         "in fld" && quote & "TEKST" & quote into toFind
>   select before trueword 1 of item (word N of wrds) of fld "TEKST" -- the last hit
>   set itemdel to comma
>   do toFind
> end colorWords
> on enterinField
>   do toFind
> end enterinField
> -- end of scripts
> _______________________________________________

I am achieving what I initially set out to achieve, and with far less 
code than yours, so have no intention
of changing anything.

I, also, am a lucky sort of chap insofar as I don't really mind that 
much if my stack takes 3 days to work its way
through a corpus . . . I can go and do some teaching, read a book, cook 
some food, go for a bike ride, talk to my wife,
play with my cats, and so on.

That has ALWAYS been my approach to programming for one simple reason: 
working every holiday for very many years indeed on a farm
on an island I had to sort out broken bailers, tractors and so on.

Now "proper" spares had to come, on a ferry, at a vast transportation 
overhead, from the mainland of Scotland. We could not afford
that, so we fossicked (lovely verb) for whatever would do the job in the 
'graveyard' of broken tractors, cars, stuff we had picked up from the
local dump, and so on. Every single time we got our accursed bailer to 
bail the straw and the hay, we got the cotter pins we needed to
connect the tractor to the plough, harrow, muck-spreader or whatever; 
never very elegant, but they worked. In fact my younger son was on that 
farm just 8 days ago and was shown some of my repair work by the 
farmer's son (the farmer is long dead); still functional after 25 years.

I have, just, worked out a way to colourise the items I want, and while, 
churning through some socking great corpus that would take days, I only 
need it to colourise the sentences the previous routine has extracted, 
so that won't take that long.

You, if it really seems such a good idea (and is it?) are more than 
welcome to download my stack

https://www.dropbox.com/sh/ja47l87gg87sn0q/AAAIj99kEQVOb8ev3jz8C5ORa?dl=0 File: 

and mess around with the script to your heart's content.

AND, while we are talking about time-consuming exercises: having put 4 
hours of work into the thing, that seems, already, a bit more than the
thing deserves as I am not interested in winning the Tour de France, 
simply extracting some data from a million word corpus with absolutely 
no deadline at all unless I choose to impose one. The results MAY get 
rolled into a paper my wife and I are THINKING of writing for an
academic conference . . . .

Almost ALL the stacks I have thrown out into the public domain in the 
last 6 months have come back to me with comments about how my code is 
clunky, inefficient, and so forth; and I would not doubt for a minute 
that that is probably true.

HOWEVER, as far as I am concerned there is one enormous advantage about 
my code above thine, or anybody else's; while thy code and the code of 
many others is probably more efficient, more clever and gets things done 
more quickly, I don't understand the finer points of it, while I 
understand how my code works 100% because it was written by me, follows 
my logic, and does what I require it to do.

It is always entertaining and instructive to see how people react to my 
code, and I often learn a lot from their reactions (not least about
human psychology), including new coding tricks - but there always come a 
point where the burden of having to plough through other
people's code (reflecting the way their minds work) feels like too much 
in comparison from anything I might learn from it.


I also suspect that very many people share my interest in getting "the 
job done" rather than producing posh code.

RunRev claim, on their website, that one can learn to code quickly. With 
Livecode one can learn how to code RELATIVELY quickly, up
to a certain point; and many people  who are not programmers qua 
programmers should be attracted by that because they have probably
got other things to do other than JUST program.

I am, at least to a certain extent, one of those people, as computer 
programming is not the hinge on which my life rotates (and this became
extremely clear just recently when I spent 3 weeks driving round Europe 
without access to any programming facilities at all), and that is
why I may come across as a bit "rude and crude" to other programmers: 
mainly because I have evry little patience with reducing 25 lines
of code to 10 if it will take 12 hours to do that.

The cow has a breach-presentation calf inside it which will kill her and 
the calf within half an hour, to hell with calling the vet,
I'm going to get my right arm up inside her and manipulate the calf so 
that it is facing head forwards:
whether I do that the way posh younger sons of the aristocracy learn how 
to with their rubber gloves off at agricultural school
or not I just don't care: I am trying to save 2 lives, however I do it.


I apologise if that comes across as a rant (well . . . it IS a rant), 
but it is something that I feel quite strongly about, and fell needs to 
be said
as a necessary corrective, from time to time.


One of the things I DO LOVE about LiveCode is that there is room for 
"Farmer Richmond" as well as all the "Real Coders", and I do
think that that is something that Runtime Revolution would do well to 
tak more tent of in their advertising.


More information about the use-livecode mailing list