Cody Boone Ferguson<EMAIL_ADDRESS>https://ioccc.xexyl.net/2018/weasel
Twitter: @xexyl
make
./weasel
./weasel words
./weasel -mq words
./weasel -q -r8 'EVOLUTION IS A PROVEN FACT'
./weasel -m 'INTELLIGENT DESIGN'
make test
Looking back over the strata of past IOCCC entries, this program marks a new mutation on our understanding of sequencing of code. In adaptation of the modern scientific that the C language has evolved, this mutant of a program may stress your understanding of taxonomy of the C syntax tree.
The phenotype of the source suggests a veritable sea of primordial ASCII soup. The encoded logic of the watchmaker suggests a variation of thought experiment formulated by Richard Dawkins: but without the need for feeding too many evolutionary relatives of the primate order in which us Homo sapiens hang from the phylogenetic tree of life.
If you wish your computer to maintain one branch in the Cretaceous C code era, while using more Cenozoic minded code migration, read rpm.markdown.
If you find yourself in an evolutionary dead end, try:
man ./weasel.man
0. Preface
1. What it is
2. How it works
3. Hints (Keyboards, Options, Spoilers, Example Invocations)
4. Obfuscation (Techniques, Beauty)
5. How to build (S and N Constants, Compilation, Portability, Installing)
6. Final thoughts
7. Winning comments, thanks, dedications, links, etc.
SPOILER WARNING: A great deal of this document and the man page is full of
spoilers of different types; as such I would recommend that you try running the
judges suggested invocations as well as running make test
before you get into
the document or the man page, unless you don’t mind any spoilers. I don’t reveal
much in the way of obfuscation however so if you just want documentation on the
program, how to compile, etc. then there isn’t need to heed this note.
I was at a loss on how to present my remarks; on the one hand I wanted to give everything to the judges so they didn’t miss anything. But on the other hand I didn’t want to reveal as much publicly and many people don’t like to read long texts. To resolve this I think the best way is referencing the judges' comments: if you want a quick rundown of the entry try what they suggest and view the man page (it explains all the options and describes the program briefly):
man ./weasel.man
If that isn’t sufficient I would recommend reading this section (and possibly the next) where I attempt to give a brief explanation of the sections to make reading it easier and faster. In addition I want to point out a few things. If you want more details read this document more thoroughly (or just the sections that seem relevant to what you’re after). The FILES file is a quick list of files and respective summaries in this entry. Because several sections are quite long I have added a skip to link to skip to the next subsection or section at the beginning of each section (and subsection).
What it is: This is a brief summary of the program; the man page is more thorough than this.
How it works: Explain some of the basic concepts and terms of the
program; if you’re familiar with genetic algorithms there won’t be any problem
following this section but it might be of some value to read anyway. There is a
randomised mode that doesn’t use a genetic algorithm; it can be triggered a
number of ways but the -m
option enables it specially (I discuss this
thoroughly in Hints).
Hints: Perhaps the longest part of this document because in it I document the keyboards, options, subtleties (including features that might appear to be bugs but aren’t - including an input error), an Easter egg spoiler and quite a few example invocations. If you’ve read the man page you probably don’t need this unless there is something specific you’re after.
Obfuscation: Some of the techniques that might not be used.
How to build: Here I describe briefly
the constants that can be redefined S
and N
: the
maximum size of the chromosome (target string; the maximum length is S - 1
but it must be >= the default 38) and the number of offspring, respectively. I
also give example compiler invocations, portability
notes, an more portability notes and a note on
rpm.markdown.
On the subject of S
and N
: As the judges' suggested runs imply you
can change the target string at runtime; make test
runs a script
test.sh
which reads from the file test-strings.txt
, running the program
for each string in the file, waiting approximately two seconds before
continuing. I explain how to pass options to the script in part of
Hints.
Final thoughts: You might enjoy what I included; they’re humorous pieces by Dennis Ritchie and Ken Thompson themselves from the infamous UNIX-HATERS Handbook.
Winning thoughts: What it means to me to win as well as some dedications and thanks. Here too I include a link to a website which will be dedicated to this entry beyond what will be published on the IOCCC website
Skip to How it works.
It is an implementation of Richard Dawkins' Weasel program (Wikipedia). According to Wikipedia in chapter three of his book The Blind Watchmaker Dawkins wrote:
I don’t know who it was first pointed out that, given enough time, a monkey bashing away at random on a typewriter could produce all the works of Shakespeare. The operative phrase is, of course, given enough time. Let us limit the task facing our monkey somewhat. Suppose that he has to produce, not the complete works of Shakespeare but just the short sentence ‘Methinks it is like a weasel’, and we shall make it relatively easy by giving him a typewriter with a restricted keyboard, one with just the 26 (capital) letters, and a space bar. How long will he take to write this one little sentence?
He refers to the Infinite Monkey Theorem (Wikipedia). As he points out the
operative phrase is given enough time; but even if it’s extremely unlikely
technically the probability is greater than 0. He simplified it for the
monkey; I thought the monkey had it too easy: unlike his limited keyboard I have
(besides space) every character in the ASCII range 0<=126
that
isprint()
returns non-zero except that only capital letters are included;
the file prog-simple.c
has a slightly smaller keyboard. There are some
additional features I have added (including two Easter eggs); amongst others:
ability to change the target string and maximum length. See
How it works, Hints and How to build for
more details.
In its simplest invocation this program will work its way (using a genetic
algorithm) towards the solution of the string METHINKS IT IS LIKE A WEASEL
(note that I use toupper()
so it doesn’t matter what case the input is the
comparison and output will always be capitalised).
Skip to Hints.
Here you can find a general explanation of a genetic algorithm as well as a brief history. Although the link provides more information (including images to try and show the way they work) for those interested I will cite the summary:
Genetic Algorithms (GAs) are adaptive heuristic search algorithm based on the evolutionary ideas of natural selection and genetics. As such they represent an intelligent exploitation of a random search used to solve optimization problems. Although randomised, GAs are by no means random, instead they exploit historical information to direct the search into the region of better performance within the search space. The basic techniques of the GAs are designed to simulate processes in natural systems necessary for evolution, specially those follow the principles first laid down by Charles Darwin of “survival of the fittest.”. Since in nature, competition among individuals for scanty resources results in the fittest individuals dominating over the weaker ones.
SPOILER WARNING: Some of the below might help you follow the code more easily.
For each generation there is a total of N
offspring; generation 0 is
the pseudo-randomly initialised array without parents. Each offspring has its
own chromosome to be compared to the target string and a fitness score;
the higher the fitness score the more likely it will be a parent of the next
generation (randomised mode notwithstanding) as part of the selection process
(As the generations go by the fitness of the offspring should be higher; when
the fitness matches that of the target it will be printed and the loop will be
broken out of).
After determining the two parents crossover occurs: each new offspring
inherits DNA from the parents; every character in the chromosome string is
pseudorandomly selected from one of the parents' respective character. Next,
based on the mutation rate, perform mutation of the chromosome of each
offspring; in other words some of the characters in the chromosome will be
assigned a pseudo-random value from the keyboard (in normal mode; in random mode
every character will be assigned a value). Before mutation the offspring
chromosome will be printed; after mutation it will show what it was mutated to
(on the same output line). After the new generation has been sequenced the loop
goes back to the top and it starts all over until the maximum number of
generations SIZE_MAX - 1
is reached or the target chromosome has been
found.
Note that the generation is checked before the scoring takes place by a prefix
increment equality check; when the generation is SIZE_MAX - 1
the fitness
test loop will not be entered; instead the outer loop will end after printing:
Too many attempts, blaming the monkey Eric even if he isn’t typing or doesn’t exist. Bye.
Why ‘Eric’? Because the judges stated in the 2018 guidelines that when there is a user input error the program should insult the pet fish Eric even if such a fish (no, weasels do not equate monkeys to fish but see below) doesn’t exist. The second to last example limitation example note (it’s improved in the final but this is relevant) they give is:
The judges might not have a pet fish named Eric, so might want to state:
This entry factors integers between 1 and<PHONE_NUMBER>945518424753102147331756070. Attempting to factor anything else will cause the program to insult your pet fish Eric, or in the case that you lack such a pet, will insult the pet that you do not have.
After the final message they ask:
BTW: What is so special about<PHONE_NUMBER>945518424753102147331756070? You tell us!
The answer is this: it is the primorial prime of 97: the product of all
prime numbers less than or equal to N; and the primorial prime of N == 97
is
2305567963945518424753102147331756070
. There is no reference to this number
in my entry but it’s nonetheless possible to change the default target to it
without modifying the source code; there are two hints in this very
paragraph; the first sentence in fact: the answer to the judges' question and
the definition. Can you get the program to search the primorial prime of 97
without passing in specially?
On user errors: if the generation reaches SIZE_MAX - 1
I consider it a
user (or monkey) error; if the user insists on being so petulant as to try such
a ridiculous set of parameters in an attempt to make it be no more successful
than a monkey typing then it shouldn’t be any more successful than a monkey; if
it by chance reaches the target it’s because a monkey could too! Either way
unless the number reaches SIZE_MAX - 1
the monkey Eric won’t be blamed. It
should be noted that depending on the parameters (size of chromosome, number of
offspring, the string itself) the program could take quite a lot of system
resources; and whether the OS kills it, Eric the monkey falls asleep or the
typewriter is taken from him the result could very well be not found without
blaming him. Of course the judges were talking about fish not monkeys. But since
this program is inspired by the Weasel program which was inspired by the
Infinite Monkey Theorem I opted instead to target the monkey Eric even if
such a monkey isn’t typing or even doesn’t exist (because it’s not the Infinite
Fish Theorem). So although the user might not be a monkey the program makes the
assumption that the user could in fact be a monkey called Eric although it
isn’t insolent enough to say the user is a monkey for certain!
Skip to Obfuscation.
I noted that there are a number of additional features and here I will document some of them.
Skip to Options.
The keyboard, as noted, has more than just the alphabet and space. To be
precise the following characters are acceptable; it equates to this in C (note
it includes a literal space ' '
but it doesn’t include other
isspace()
characters) and this is why some of the characters are escaped:
const char keyboard[]=" !\"#$<%:>&'()*+,-./0123456789;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`{|}~";
The simpler keyboard looks like:
const char keyboard[]=" !\"&'(),.0123456789;?ABCDEFGHIJKLMNOPQRSTUVWXYZ";
The program makes sure that the target string only has characters the keyboard can actually produce but there is a certain type of input error that might appear to be a bug; see specifically Input Error Example.
Skip to Spoilers.
There are a number of options you can pass to the program besides the target
string; some I will document here (the summary being in the man page). You can
join options but there is a caveat with spaces and -r
option as well as
the target string (see below).
Enable quiet output:
-q
This means don’t print the generation and offspring output; only print (some) of the options set (this is always done but wouldn’t usually be seen due to verbose output) and the final answer.
Change the mutation rate to <rate>
:
-r<num>
Please note that there cannot be a space between the -r
and the number.
This is to simplify the parsing of options. As for combining options you can do
any of the following (amongst others):
-r5q
-qr5
-qr
-q -r5
The third invocation will set quiet output and have no valid value to parse for
the mutation rate and strtol()
in this case returns 0. strtol()
can
legitimately return 0 but in no instance is it valid input in this program: the
valid mutation rate is >= 1 && <= 100
.
When the mutation rate is out of range it does something interesting: take a look at the output and compare it to the output when the range is valid. Can you figure out another way to trigger this? In fact there are two more ways (one is an option I’ve mentioned and the other one is to do with the number of offspring)! If you want something of a walk through I suggest you follow the following:
Enable quiet mode and set an invalid mutation range; for example specify:
-qr101
Take a look at the first few lines. Kill the program and try invoking it with the following options:
-qr5
Look at the first few lines again and compare it to the output of step #1. With the default string most modern systems shouldn’t take much time to - given decent parameters - come to an answer here but if necessary kill the program.
Repeat the steps only this time don’t enable quiet mode. Look at the offspring output. If you still don’t see what it is and want to know see Spoilers below.
Finally any argument that doesn’t start with a -
passed into the program
will become the target string. The same rule applies to the number for -r
:
it must be a single parameter which means you’ll need to quote the string if it
has more than one word (that is it contains spaces) or anything else interpreted
specially by your shell e.g. parentheses.
If the string is too long given the value of S
(see
How to build) it will be truncated.
If you actually do want to search for a string starting with a -
you must
disable further parsing of options by using the -
option itself; for
example if you were to do any of:
$ ./weasel -q- -- -test
$ ./weasel -q- -test
$ ./weasel -q -- -test
The target string will be: -TEST
. This means though that here:
$ ./weasel -q -- -test -r5
The string to be searched would actually be -r5
and the mutation rate
will remain the default because after the -
option is seen it will no
longer parse additional options: only target strings if anything left on the
command line. Because of the joining of arguments this means that the first two
examples of the last set of three above are equivalent i.e. the following two
are equivalent:
-q-
-q --
As for the caveat I referenced what does the following do?
$ ./weasel -qr 5
In fact it will set quiet output and set the target string to be ‘5’. So the
mutation rate will be out of range, thus enabling that Easter egg, but it will
likely come to an answer fairly quickly because it’s just a single character. A
note on the parsing of the -
option; if the program is currently parsing
argv[N]
, for example, and it encounters a --
then depending on where
the other options are in the command line it might still parse the options. Thus
you have:
$ ./weasel -qr-r5
quiet output
mutation rate out of range
target 'METHINKS IT IS LIKE A WEASEL'
mutation rate 5
Generation 440 Offspring 20: METHINKS IT IS LIKE A WEASEL
Similarly this would set quiet output, then an invalid mutation rate and then a mutation rate of 5:
$ ./weasel --qrr5
If you were instead to do one of (for example):
$ ./weasel -q -- -r
$ ./weasel -q -q- -r
Then it would set quiet output then see the --
(the -
option
itself) and then the target string would literally be set to -r
because
it no longer cares about the -
for option parsing. In other words options
are only parsed if the first character is -
and if the parser hasn’t seen
the -
- in an earlier element of argv
. This is not a bug!
Skip to Example Invocations.
The Easter egg: Since Dawkins references the Infinite Monkey Theorem it simulates a monkey using a typewriter! This mode has the following changes:
Selection is omitted; this means no sorting by fitness score (each offspring
is initially set to be the first two in the list) but do pseudo-randomly
select characters for every character in the target string; that is to say if
the string is of length 28 (the default) then all 28 characters in each
offspring of each generation will be assigned a pseudo-randomly positioned
character in the keyboard. If you want to enable this specially you can use the
-m
option (-m for monkey).
Skip to Input Error Example.
The following examples are used to demonstrate better the command line parsing.
In order to do that though I had to first document the -m
option because
if the mutation rate is out of range monkey mode is activated (that’s the first
Easter egg). But what happens if you later set a valid mutation rate? Should
monkey mode be disabled? If yes how do we know if monkey mode was specially
requested? There are at least two ways to go about it: I took the monkey safe
(‘fool safe’) method; if you explicitly request monkey mode you cannot disable
it in the same invocation of weasel
!
$ ./weasel -qr101r5r101r1r test
quiet output
mutation rate out of range
mutation rate out of range
mutation rate out of range
target 'test'
mutation rate 0
monkey at typewriter
Generation 16844 Offspring 22: TEST
So in this case I joined the options in the following order:
-q
Quiet output.
-r101
Mutation rate 101 (out of range).
-r5
Mutation rate of 5 but note that during parsing I only print invalid mutation
rate (only after parsing do I print the final mutation rate whatever it ends up
being); so while it appears there is a bug, showing mutation rate out of range
three times, this is expected (given the next one, -r101
). This means here
the typewriter was taken from Eric the monkey.
-r101
Mutation rate to 101: this too is out of range (this is the second mutation rate out of range message). The typewriter returns to Eric.
-r1
Set mutation rate to 1. Take that typewriter away!
-r
Set mutation rate to 0; when there are no valid characters passed to
strtol()
it should return 0: this is the third message about being out of
range. Note here that rand()
returns an int
and strtol()
returns a long
but I compare the return value of rand()
to the
mutation rate; if there are any systems where the widths differ this shouldn’t
matter because of truncation but I do in any case specifically check for R <
0 || R > 100
. Either way the invalid range returns the typewriter to Eric.
test
Finally I requested it find the string test
(will search for TEST
).
Given that it was a short string it did find the answer relatively quickly, even in monkey mode.
Another example:
$ ./weasel -q -r101 test -r5
quiet output
mutation rate out of range
target 'test'
mutation rate 5
Generation 109 Offspring 13: TEST
In this case I also enabled quiet mode but I didn’t join the options; the
-r101
reports that it’s out of range and sets monkey mode. I then specify
the target string and then set a valid mutation rate. This disabled monkey mode
which means that it’ll use the genetic algorithm.
One more example of monkey mode:
$ ./weasel -q -mr101 test -r5
quiet output
mutation rate out of range
target 'test'
mutation rate 5
monkey at typewriter
Generation 465298 Offspring 10: TEST
Here I also requested quiet output and then explicitly requested that Eric the
monkey types. After this I set the mutation rate to be 101 which would have
set monkey mode (in this case only temporarily as I later set it to a valid
number) but since I have also requested monkey mode that won’t matter. Then I
set the string to test
and then set a valid mutation rate of 5. Now note
that it is actually set to 5 but also note that monkey mode remains active: it
also took a lot longer to come to a conclusion for even four characters. This
example does demonstrate one other thing in a subtle way though.
When the program prints out each iteration (I’ll give an example next) it goes a lot slower; this makes sense because it’s an expensive operation. Here are the times for the same but without quiet output enabled:
real 0m17.065s
user 0m1.245s
sys 0m2.402s
Whereas with quiet output:
real 0m0.127s
user 0m0.125s
sys 0m0.001s
Of course it isn’t only down to the printing but the point is it slows it down
significantly. Adding an option to print every X lines would go over the limit
(iocccsize -i
reports 2052!).
Finally I’ll show a default example in normal output (I omit many lines showing
instead […]). Note that the real/user/sys times are from the time
bash shell built-in utility: that isn’t output from my entry.
target 'METHINKS IT IS LIKE A WEASEL'
mutation rate 1
Generation 0 Offspring 1: 4V YGY.GH/}_|>Q1M.R8;KD[=(05
Generation 0 Offspring 2: Y_^S0_HZ399^/|9,MP%^{817"XX#
Generation 0 Offspring 3: F%88H1&[V1P>QOI}- U]0[V-Y%*[
[...]
Generation 1 Offspring 23: AHA#.\=ZT'0>?~-S.;1A L|1<S:^ -> AHA#.\=ZT'0>?~-S.;1A L|1<S:| (mutation)
Generation 1 Offspring 24: AHA#.\=ZT'0>?~-S.;1A L|1<S:^ -> AHA#.\=ZT'0>?~-S.;1A L|1<S:^ (mutation)
Generation 1 Offspring 25: AHA#.\=ZT'0>?~-S.;1A L|1<S:^ -> AHA#1\=ZT'0>?~-S.;1A L|1<S:^ (mutation)
**
Generation 2 Offspring 1: AHA#.\=ZT'0>?~-S.;1A L|1<S:^ -> AHA#.\=ZT'0>?~-S.;1A L|1<S:^ (mutation)
Generation 2 Offspring 2: AHA#.\=ZT'0>?~-S.;1A L|1<S:^ -> AHA#.\=ZT'O>?~-S.;1A L|1<S:^ (mutation)
[...]
Generation 979 Offspring 1: METHINKS ITZIS LIKE A WEASEL -> METHINKS IT IS LIKE A WEASEL (mutation)
[...]
**
Generation 979 Offspring 1: METHINKS IT IS LIKE A WEASEL
real 0m0.074s
user 0m0.040s
sys 0m0.001s
Keep in mind the way I display the generations and the fact that generation 0
has no parents; it is generation 1 that starts working towards the goal. You’ll
see also (mutation) at the end of the line at this point (if you enable
monkey mode you’ll find that it shows something else). The lines that only have
**
are separators: you won’t see this between generation 0 and 1 but you will
between future generations - as well as the final answer (if the answer is in
generation 0 you won’t see the **
).
One final thing to consider is that the program doesn’t directly read from a file. This combined with the way the shell works could possibly confuse some people. Take the following invocations:
(1) $ echo test > test
(2) $ ./weasel test
(3) $ ./weasel < test
(4) $ cat test | ./weasel
(5) $ < test-strings.txt ./weasel
(6) $ cat | ./weasel
Only the first invocation of ./weasel
will search for TEST
because
the string test
was explicitly passed to the program (If the file test
wasn’t found by that path it would still have searched for TEST
).
The second invocation will search for the default string if there is a file or
directory called test
; else you will get an error about no such file or
directory (unless your shell for some reason doesn’t consider it an error; bash
most certainly does consider it an error and halts).
The third invocation would if there exists a file test
cat that file and
pipe the output to ./weasel
; however it will search for the default
string. If there is no such file to cat then an error will be reported but
without quiet mode you’d probably not even see the error.
The fourth invocation will also search for the default string unless the file doesn’t exist in which case you’d get an error like in the second invocation.
The fifth invocation will actually search for the default string even with the
file test-strings.txt
existing. As far as I am aware it’s equivalent to the
third invocation except that the file exists in this case.
The final invocation will search for the default and then read from stdin
;
it won’t do anything with it however.
What this amounts to is if you want input from a file you have to read from the
file and pass each string to the program itself. I’ve included a script
test.sh
and a file of sample input test-strings.txt
that you can play
with.
Try:
$ make test
This will essentially make sure the program is compiled and then do:
$ chmod +x test.sh
$ ./test.sh
The script will first try compiling the program (if necessary) and if it fails
for any reason it will exit; else it will read each line in the file
test-strings.txt
(if the file doesn’t exist or can’t be read the script will
exit with return status of 1) and pass it to the program. After finding the
string it’ll sleep approximately 2 seconds and then read the next string
(passing it to the program, continuing until all the strings have been read and
processed).
You can pass additional options directly to the script but remember that it stops when there are no more strings in the file - so if you try:
$ ./test.sh -q test
The final string test
won’t be searched for; it will however run the program
in all invocations with quiet output enabled. The following are some notes about
how the shell and the program interact with each other:
Because the script quotes the strings that it reads from the file if you were to
put in the file: -q STRING
quiet mode would be enabled; however the
default string would be searched for. If the quotes were removed from the script
it would print the final word specified. To be specific with the quotes: if in
the file you had the line -q STRING -m TEST
it would enable quiet output
and monkey typewriter mode; but it would search for the default string. Without
the quotes on the other hand it would enable quiet output, monkey typewriter and
search for TEST
. In other words if you want to pass options to the
script you will have to directly pass the options to the script like the above
example shows (but the strings will still only be read from the
test-strings.txt
file).
Skip to Obfuscation.
There is a type of input error, as I said, that might appear to be a bug. What
actually is going on though is due to a technicality on how spaces are printed
and the fact the program does not accept spaces other than a literal space
; when a character in the string to be found isn’t in the keyboard the
program prints an error message and then exits (returning 1). But since the
keyboard doesn’t have
'\n'
if you were to type a '
and send a
'\n'
before the closing '
you might see something like:
$ ./weasel '!!
> '
'
' not in keyboard " !"#$<%:>&'()*+,-./0123456789;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`{|}~"
I showed that '
is in the keyboard already; however the user sent a
\n
(hence the secondary prompt >
on line two) before literally typing the
closing '
(also line two). But in order to make it clear what character is invalid I
surround the character with '
s so what you actually see after typing the
closing '
and hitting Enter (or however you send the '\n'
) there is
the third blank line; but then the program prints '
followed by the
invalid character ('\n'
itself which means another line break) and then
finally the closing '
. Specifically isspace()
characters aren’t
distinctly seen like a letter, digit or symbol is: isprint('\n') == 0 &&
isspace('\n') == 1
. You can add these characters but the output will be
rather confusing and hard to read.
Skip to Beauty.
The following might be some of the techniques used in this entry:
Helpful and descriptive names for all variables and constants (like S
)
as well as some C keywords.
The way main()
is declared is:
/* Special C main() handler (encapsulation): */
#define r(main) main
r(k main(k a, E **V)) {
It appears to be recursively defined but is it? And is it truly encapsulation? And is it executing code of any kind? It mightn’t seem like it isn’t encapsulation and also isn’t executing code but assuming it’s encapsulation and executing code is it actually nothing? And if it’s nothing why is it there? If it is something what is it doing? Could it be both? Or maybe it really isn’t nothing or nothing? :)
A special C parser called H()
. It might help to observe that there
might be recursive calls and much of the program might use it. Or so it seems.
Then again it might not help to not notice it.
Digraphs. In their simplest form it’s probably not a big deal but consider:
some source code formatters don’t like them at all (neither, incidentally, does
splint
, which completely baulks). There also is a trick; if you try
translating them then depending upon how you do it there can be functional
changes in the program!
The fact the program can by default print the primorial prime of 97 (but that default isn’t the default - except when it IS the default!) and yet that number isn’t seen at all. See also technique #7.
Another usual suspect: the source is formatted in a beautiful design that could be described artistic; on the other hand some might suggest it’s just a blob of octets but I disprove this when discussing beauty later on in the next section.
The string METHINKS IT IS LIKE A WEASEL is searched for by default (except when it’s not searched by default) but it’s nowhere to be found in the source file in that form. Why? Because anyone familiar with the Weasel program won’t recognise the string and put together what it is by looking at the source code.
In case you wondered deciphering #5 won’t decipher #7 (neither will deciphering #7 help you decipher #5).
Skip to How to build.
On the subject of beauty: the judges stated in the guidelines the following:
We want to get away from source that is simply a compact blob of octets. Really try to be more creative than blob coding. HINT!
 Yes some of it might look like a blob but this is clearly false; as all good programmers know if something is potentially confusing or misleading it should be made clear in the comments! :)
Skip to Compilation.
These two #define
d constants can be redefined at compilation to modify the
behaviour of the program in a number of ways (see the
Compilation subsection for example invocations). Both are
capped to be no greater than SIZE_MAX - 1
. This is handled by the C
preprocessor.
S
This determines the maximum size of the target string but it must be at least
38; this is because 38 >= 29
and because strlen("METHINKS IT IS LIKE
A WEASEL") == 28
(which is the default target string - it would hardly be an
implementation of the Weasel program otherwise).
There is obviously a reason 38
is the chosen size but the only hints I
provide are those in How it works and specifically an Easter egg I
referenced there (it’s not the only Easter egg but it’s the only Easter egg I
won’t spoil; yes this ironically and amusingly means I’ve left a rotten egg
somewhere!).
N
This is the number of offspring per generation. Anything less than 4 will be set to 3 (that’s not a typo!) and this is part of an Easter egg.
Be aware that depending on the size of S
and N
(individually and
together) the program will use varying amounts of memory and the larger the
values the more memory it’ll require.
Skip to Portability.
The following options must always be passed to the compiler:
-DQ='typedef' -D'g(o)'='goto o;' -D'w(x)'="x:" -D'H(main)'='r(main)'
If you want to increase the number of offspring to 50
and the size of the
chromosome to 75
you would pass to the compiler:
-DQ='typedef' -D'g(o)'='goto o;' -D'w(x)'="x:" -D'H(main)'='r(main)' -DN=50 -DS=75
If you wanted to change N
to 3
:
-DQ='typedef' -D'g(o)'='goto o;' -D'w(x)'="x:" -D'H(main)'='r(main)' -DN=3
Remember that it cannot be less than 3
; more correctly if it’s less than
4 it’s redefined to 3 so you could have passed in -DN=2
and have the same
result. Remember too that S
cannot be less than 38
. Both S
and
N
are capped at SIZE_MAX - 1
.
Skip to An aside on bugs.
The entry works for both C99 and C11 (it requires at least C99 even if you
translate digraphs). The program doesn’t require third-party libraries and
should work on any Unix based system. It works on both 64-bit and 32-bit (but
inevitably some data type sizes will be smaller and this I believe includes
SIZE_MAX
). I don’t think Windows gcc ports would have many issues (if any)
either but I have no way to test this. I have tested the following systems and
configurations:
Fedora 26:
$ clang --version|head -n1
clang version 4.0.1 (tags/RELEASE_401/final)
$ gcc --version|head -n1
gcc (GCC) 7.3.1 20180130 (Red Hat 7.3.1-2)
$ /lib64/libc-2.25.so |head -n1|cut -d',' -f1-1
GNU C Library (GNU libc) stable release version 2.25
$ lscpu |grep Endian
Byte Order: Little Endian
CentOS Linux release 7.4.1708 (Core)
$ clang --version|head -n1
clang version 3.4.2 (tags/RELEASE_34/dot2-final)
$ gcc --version|head -n1
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)
$ /lib64/libc-2.17.so |head -n1 |cut -d, -f1-1
GNU C Library (GNU libc) stable release version 2.17
$ lscpu |grep Endian
Byte Order: Little Endian
Fedora 27:
$ clang --version|head -n1
clang version 5.0.1 (tags/RELEASE_501/final)
$ gcc --version|head -n1
gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)
$ /lib64/libc-2.26.so |head -n1|cut -d, -f1-1
GNU C Library (GNU libc) stable release version 2.26
$ lscpu |grep Endian
Byte Order: Little Endian
macOS:
System Version: macOS 10.13.4 (17E199)
Kernel Version: Darwin 17.5.0
$ gcc -v
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 9.1.0 (clang-9<IP_ADDRESS>)
Target: x86_64-apple-darwin17.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
$ uname -srmv
Darwin 17.5.0 Darwin Kernel Version 17.5.0: Mon Mar 5 22:24:32 PST 2018; root:xnu-4570.51.1~1/RELEASE_X86_64 x86_64
Skip to Installing.
Any undocumented bugs are the result of insolent monkeys tampering with any
number of things. That includes but is not limited to running the program on a
non-ASCII system; non little-endian; meddling with S
or N
too much,
changing the references to SIZE_MAX
to be larger than SIZE_MAX
or a
signed value (size_t
is unsigned) or too small of a value; changing data
types or variables; expecting really long strings - including but not limited to
the complete works of Shakespeare (hint: isprint('\n') == 0
so it won’t
ever find any string with '\n'
) - to be found by the program in a quick
and easy fashion if ever; or any other meddling including being petulant and/or
unreasonable monkeys. I will say though that there is at least one place I see
after having won that could be slightly more efficient (can you find it?); I am
however leaving it as it is because this is what won.
Skip to Final thoughts.
I have included a RPM spec file for those with a Red Hat based Linux distribution; see rpm.markdown for details (including why I implemented this) if for some (strange?) reason you’re interested.
Skip to Winning comments.
The judges suggested that making them laugh helps entries chance of winning. Well laughter helps everything so in case you haven’t seen - and even if you have seen - Dennis Ritchie’s anti-foreword to the ghastly UNIX-HATERS Handbook or Ken Thompson’s revelation that C and Unix are a hoax (at the end of that book) I include it below; because I agree that looking at a lot of twisted code must be quite difficult (though maybe not as much as if you were to have to look at Microsoft Windows code or code for Windows in any case ? :)) and these two things I think are rather amusing (in order of least to most):
Dennis Ritchie’s Anti-Foreword:
Anti-Foreword
By Dennis Ritchie From<EMAIL_ADDRESS>Date: Tue, 15 Mar 1994 00:38:07 EST Subject: anti-foreword
To the contributers to this book:
I have succumbed to the temptation you offered in your preface: I do write you off as envious malcontents and romantic keepers of memories. The systems you remember so fondly (TOPS-20, ITS, Multics, Lisp Machine, Cedar/Mesa, the Dorado) are not just out to pasture, they are fertilizing it from below.
Your judgments are not keen, they are intoxicated by metaphor. In the Preface you suffer first from heat, lice, and malnourishment, then become prisoners in a Gulag. In Chapter 1 you are in turn infected by a virus, racked by drug addiction, and addled by puffiness of the genome.
Yet your prison without coherent design continues to imprison you. How can this be, if it has no strong places? The rational prisoner exploits the weak places, creates order from chaos: instead, collectives like the FSF vindicate their jailers by building cells almost compatible with the existing ones, albeit with more features. The journalist with three undergraduate degrees from MIT, the researcher at Microsoft, and the senior scientist at Apple might volunteer a few words about the regulations of the prisons to which they have been transferred.
Your sense of the possible is in no sense pure: sometimes you want the same thing you have, but wish you had done it yourselves; other times you want something different, but can’t seem to get people to use it; sometimes one wonders why you just don’t shut up and tell people to buy a PC with Windows or a Mac. No Gulag or lice, just a future whose intellectual tone and interaction style is set by Sonic the Hedgehog. You claim to seek progress, but you succeed mainly in whining.
Here is my metaphor: your book is a pudding stuffed with apposite observations, many well-conceived. Like excrement, it contains enough undigested nuggets of nutrition to sustain life for some. But it is not a tasty pie: it reeks too much of contempt and of envy.
Bon appetit!
Yes he misspelt ‘contributors’! But then again we’re talking about obfuscation and since it doesn’t break his message it’s not broken - it’s just obfuscated albeit not very much (and it still ‘compiles’!); and isn’t that what this contest is about? :)
Ken Thompson’s ending:
Creators Admit C, Unix Were Hoax
FOR IMMEDIATE RELEASE
In an announcement that has stunned the computer industry, Ken Thompson, Dennis Ritchie, and Brian Kernighan admitted that the Unix operating system and C programming language created by them is an elaborate April Fools prank kept alive for more than 20 years. Speaking at the recent UnixWorld Software Development Forum, Thompson revealed the following:
“In 1969, AT&T had just terminated their work with the GE/AT&T Multics project. Brian and I had just started working with an early release of Pascal from Professor Nichlaus Wirth’s ETH labs in Switzerland, and we were impressed with its elegant simplicity and power. Dennis had just finished reading Bored of the Rings, a hilarious National Lampoon parody of the great Tolkien Lord of the Rings trilogy. As a lark, we decided to do parodies of the Multics environment and Pascal. Dennis and I were responsible for the operating environment. We looked at Multics and designed the new system to be as complex and cryptic as possible to maximize casual users' frustration levels, calling it Unix as a parody of Multics, as well as other more risque allusions.
“Then Dennis and Brian worked on a truly warped version of Pascal, called "A.” When we found others were actually trying to programs with A, we quickly added additional cryptic features and evolved into B, BCPL, and finally C. We stopped when we got a clean compile on the following syntax:
for(;P("\n"),R=;P("|"))for(e=C;e=P("_"+(*u++/
8)%2))P("|"+(*u/4)%2);
“To think that modern programmers would try to use a language that allowed such a statement was beyond our comprehension! We actually thought of selling this to the Soviets to set their computer science progress back 20 or more years. Imagine our surprise when AT&T and other U.S. corporations actually began trying to use Unix and C! It has taken them 20 years to develop enough expertise to generate even marginally useful applications using this 1960s technological parody, but we are impressed with the tenacity (if not common sense) of the general Unix and C programmer.
“In any event, Brian, Dennis, and I have been working exclusively in Lisp on the Apple Macintosh for the past few years and feel really guilty about the chaos, confusion, and truly bad programming that has resulted from our silly prank so long ago.”
Major Unix and C vendors and customers, including AT&T, Microsoft, Hewlett-Packard, GTE, NCR, and DEC have refused comment at this time. Borland International, a leading vendor of Pascal and C tools, including the popular Turbo Pascal, Turbo C, and Turbo C++, stated they had suspected this for a number of years and would continue to enhance their Pascal products and halt further efforts to develop C. An IBM spokesman broke into uncontrolled laughter and had to postpone a hastily convened news conference concerning the fate of the RS/6000, merely stating “Workplace OS will be available Real Soon Now.” In a cryptic statement, Professor Wirth of the ETH Institute and father of the Pascal, Modula 2, and Oberon structured languages, merely stated that P. T. Barnum was correct.
So is it a hoax about a non-hoax, a non-hoax about a hoax, a non-hoax about a non-hoax or is it a hoax about a hoax ? :) And if it’s any of those what does it mean about Unix and C? And if a hoax is involved what is the hoax? The pedant and Tolkienist that I am has to state that Tolkien didn’t consider The Lord of the Rings a trilogy (and he made that very clear) but that doesn’t take away from the humour by any stretch (if anyone wants me to elaborate or debate the matter do send me an email - I love Tolkien’s legendarium and having another person to talk about it with is more than welcome!). Ken suggested that there is a lack of common sense but since he was part of its creation I don’t think it’s a bad thing; on the contrary it makes all of us C programmers even more talented! :) I do wonder if he tested that bit of C code though:
for(;P("\n"),R=;P("|"))for(e=C;e=P("_"+(*u++/
8)%2))P("|"+(*u/4)%2);
How is R=;
valid? Since I don’t have the context maybe there is something
I’m missing but either way it’s a funny piece. It could also be for irony itself
(actually I had previously thought of somehow implementing something like that
for the contest but decided for the message by itself in the end). I would
prefer believing that whether true or not.
I feel incredibly honoured, privileged and I am extremely happy and proud to have won! I am more proud and happy about this than anything I have ever done in my life and I don’t think there can be anything else I can be more proud of in the future (except winning again should I find or think of another interesting thing to try and implement in an obfuscated way). Because winning is one thing; but to be included amongst very clever and talented veterans whom I highly respect is an incredible badge of honour that I will proudly wear (literally too as I hope to get my entry on a shirt) for the rest of my life. This type of badge is something I feel most only dream of but never come close to earning. That I did is by far the best feeling I can think of.
Thank you Simon Cooper, Landon Curt Noll and Leonid A. Broukhis, and thank you to everyone who has been an important and special part of my life. I want to specially name some:
I dedicated this program to my beloved but recently late dog Venus; instead of drowning in grief I channelled it to creativity. And to have won a contest requiring creativity, cleverness and novelty is a tribute to an equally creative, clever and unique dog that she was. I miss you terribly Venus but I’m so happy to have had you in my life.
But I want to also dedicate it to (and thank) my dear friend Martijn Schoemaker
whom provided me with the spark a very long time ago (and whom has stood by me
and helped me in more ways than he can know - #including C
); if it wasn’t
for you Martijn I wouldn’t have been able to win so consider this a recursive
thank you thank you! :) I would also like to give thanks and much love to my
best and closest friend Vicky Wilmore who means the absolute world to me; thank
you for being such a wonderfully beautiful person and friend - that truly is
what ‘just you’ means, sweetheart, and don’t you forget it! <3 Finally I would
like to thank my mother for being the best mum anyone could ask for, who’s
always been here for me and whom I also inherit the keen analytical mind from. I
love you all!
I want to also thank Dave Burton for acknowledging me in his hint.markdown file for as he put it ‘being relentless with pursuit of bugs’. To think that it was circumstantial to my entry too makes it all the more unlikely but that doesn’t take away the significance of it; for I am a very symbolic person and being acknowledged for this type of thing is great but to be acknowledged for it by someone who has won more than once is even more special to me: thank you Dave! It means a great deal to me and I am glad I could help! :)
I would also like to say to the judges about their commentary as well as the category title: they’re all very dear to me and that includes not just the remarks but the example invocations. They fit my views precisely. As for the test-strings.txt file modifications: very amusing and I certainly do not object. Thank you again for such an honour and privilege! That this isn’t a dream is the best reality imaginable! :)
Congratulations to one and all for winning; it’s an honour to win such a wonderful contest requiring creativity, cleverness, uniqueness and inventiveness but to win beside all the other wonderful entries is truly special!
Shortly after the entry has been published I will have more information on the winning entry at https://ioccc.xexyl.net/2018/weasel including how to contact me (besides what’s already published on the IOCCC website). There also is an errata page so that in the case I find anything I would like to correct in the documentation or other supplementary files I can note them there.
If you wish to contact me please do so; although I have a Twitter account I don’t really use it so please send me an email instead. I do have Facebook as of a little under two years but I’ll worry about that at such a time (I presume in fact ‘if’) it becomes relevant.
© Copyright 1984-2018,
Leo Broukhis, Simon Cooper, Landon Curt Noll
- All rights reserved |


Please consider citing the scikit-learn.
General-purpose and introductory examples for the scikit.
Plot classification probability
Confusion matrix
Recognizing hand-written digits
Univariate Feature Selection
Linear and Quadratic Discriminant Analysis with confidence ellipsoid
Test with permutations the significance of a classification score
PLS Partial Least Squares
Precision-Recall
Recursive feature elimination
Recursive feature elimination with cross-validation
Receiver operating characteristic (ROC)
Receiver operating characteristic (ROC) with cross validation
Train error vs Test error
Classification of text documents using sparse features
Clustering text documents using MiniBatchKmeans
Pipeline Anova SVM
Gaussian Naive Bayes
Parameter estimation using grid search with a nested cross-validation
Sample pipeline for text feature extraction and evaluation
Classification of text documents: using a MLComp dataset
Applications to real world problems with some medium sized datasets or interactive user interface.
Species distribution modeling
Faces recognition example using eigenfaces and SVMs
Finding structure in the stock market
Libsvm GUI
Topics extraction with Non-Negative Matrix Factorization
Wikipedia princial eigenvector
Examples concerning the sklearn.cluster package.
Adjustment for chance in clustering performance evaluation
Demo of affinity propagation clustering algorithm
Color Quantization using K-Means
Demo of DBSCAN clustering algorithm
Feature agglomeration vs. univariate selection
A demo of K-Means clustering on the handwritten digits data
Segmenting the picture of Lena in regions
A demo of structured Ward hierarchical clustering on Lena image
A demo of the mean-shift clustering algorithm
A demo of the K Means clustering algorithm
Spectral clustering for image segmentation
Hierarchical clustering: structured vs unstructured ward
Examples concerning the sklearn.covariance package.
Ledoit-Wolf vs Covariance simple estimation
Ledoit-Wolf vs OAS estimation
Examples concerning the sklearn.decomposition package.
Faces dataset decompositions
Blind source separation using FastICA
FastICA on 2D point clouds
Image denoising using dictionary learning
Kernel PCA
Comparison of LDA and PCA 2D projection of Iris dataset
Examples concerning the sklearn.gaussian_process package.
Gaussian Processes classification example: exploiting the probabilistic output
Gaussian Processes regression: basic introductory example
Gaussian Processes regression: goodness-of-fit on the ‘diabetes’ dataset
Examples concerning the sklearn.linear_model package.
Automatic Relevance Determination Regression (ARD)
Bayesian Ridge Regression
Lasso and Elastic Net
Lasso path using LARS
Lasso model selection: Cross-Validation / AIC / BIC
Path with L1- Logistic Regression
Ordinary Least Squares
Orthogonal Matching Pursuit
Polynomial interpolation
Plot Ridge coefficients as a function of the regularization
Plot multi-class SGD on the iris dataset
SGD: Convex Loss Functions
Ordinary Least Squares with SGD
SGD: Penalties
SGD: Maximum margin separating hyperplane
SGD: Separating hyperplane with weighted classes
SGD: Weighted samples
Lasso regression example
Lasso on dense and sparse data
Logistic Regression
Examples concerning the sklearn.manifold package.
Comparison of Manifold Learning methods
Manifold learning on handwritten digits: Locally Linear Embedding, Isomap...
Swiss Roll reduction with LLE
Examples concerning the sklearn.mixture package.
Gaussian Mixture Model Ellipsoids
GMM classification
Density Estimation for a mixture of Gaussians
Gaussian Mixture Model Sine Curve
Examples concerning the sklearn.neighbors package.
Nearest Neighbors Classification
Nearest Neighbors regression
Examples concerning the sklearn.svm package.
SVM with custom kernel
Plot different SVM classifiers in the iris dataset
One-class SVM with non-linear kernel (RBF)
SVM: Maximum margin separating hyperplane
SVM: Separating hyperplane for unbalanced classes
SVM-Anova: SVM with univariate feature selection
Non-linear SVM
Support Vector Regression (SVR) using linear and non-linear kernels
SVM: Weighted samples


Laser Mod r003
- NEW: new item: the Laser Sniper Rifle.
- UPDATE: updated the bazooka shooting system, now you don't have to wait the explosion of the first bullet for shooting a second bullet.
Laser Mod r002
- NEW: new item: the Laser Bazooka.
- NEW: there is a Easter egg hidden in the GUI (the method to activate it is the same method used to open the Easter egg of the Portal 2 Mod)
Laser Mod r001
- Initial release


Home
About
Contact Us
Contact Us
Please turn you head and scream into the void and we will get to you as soon as possible!


Page last refreshed
404 Error
The page you are looking for in this portal does not seem to exist (yet).
About
Student Verified Marks Reporting System.


Pentagon Says Reports of US Drone Being Shot Down in Iran 'Incorrect' - CENTCOM
WASHINGTON (Sputnik) - The Pentagon on Friday denied reports that a US drone was shot down by Iranian defence forces in the province of Khuzestan, saying all American military equipment in the area is accounted for.
"Alleged reports of a US drone being shot down are incorrect," US Central Command (CENTCOM) wrote on Twitter. "If an Unmanned Aircraft System {UAS) had gone down in the CENTCOM [area] it was not a DoD asset. All US equipment has been accounted for".
The Iranian military earlier on Friday said that the country's air defence forces had downed a foreign drone near Mahshahr port in the country's Khuzestan province, ISNA news agency reported. It was unclear, however, whether the UAV was military or civilian.
The news comes amid a new escalation of tensions, as Tehran reportedly notified the International Maritime Organisation (IMO) that three Iranian oil tankers have been attacked during the last six months.
This is the second time this year that Iran has reported downing an American drone. At the same time, Washington is continuing to boost its forces in the region.
The US previously established a maritime coalition to prevent attacks near the Strait of Hormuz after several incidents involving cargo ships in the Persian Gulf and the Gulf of Oman.


or "The lass that loved a sailor" Potted Plot | History | First Night Critics | Did You Know? | Behind the Scenes | Original Cast First performed at the Opera Comique, London, on the 25th May 1878 The quarterdeck of HMS Pinafore. Little Buttercup, a buxom bumboat woman, attempts to sell her wares to the crew. Among the ship's hands is a handsome sailor called Ralph Rackstraw who seems to cause great concernation to Little Buttercup. The ship's Captain, Corcoran, arrives and when alone with Buttercup he expresses his sadness that his daughter, Josephine, appears far less than enthusiastic over her impending marriage to Sir Joseph Porter, the First Lord of the Admiralty. Josephine's heart is in fact given to a humble sailor on board her father's own ship. Sir Joseph enters accompanied by the female chorus of Sisters, Cousins and Aunts. Captain Corcoran and Sir Joseph discuss the respect that must always be given to the crew. Any request made by the Captain must be accompanied by an "if you please". Alone with Josephine, Ralph declares his love to her. However Josephine is true to the dictates of class distinction and rejects his love although her true feelings are not voiced except in asides to the audience.  But before the fatal shot is fired, Josephine stops him declaring that she does in fact love him. They plan to steal ashore that night to be married.
In Act Two we find Sir Joseph becoming more and more irritated at Josephine's lack of response to his offer of his hand in marriage. Captain Corcoran points out that probably his exalted rank has dazzled her and he must be assured that love, in fact, levels all ranks. Forsook his foster-mother, The well-born babe was Ralph - Your Captain was the other!" Ralph appears dressed as a Captain and Corcoran as an ordinary seaman. Ralph embraces Josephine, Corcoran turns to Buttercup and Sir Joseph settles for first cousin, Hebe. Click here for a complete libretto to H.M.S. Pinafore
Gilbert was in his element roaming the decks of H.M.S. Victory. He made many notes and sketches and in his mind's eye he could already see the staging for his next opera. Gilbert's diary shows that during that day at Portsmouth - April 13th, 1878 - he 'lunched on board Thunderer with Lord Charles Beresford. Went round ship. Went on board Victory and St. Vincent, making sketches, then pulled ashore to station' From the sketches made on board the Victory Gilbert was able to prepare a complete model of the Pinafore's deck. With the aid of this model and with coloured blocks to represent the principals and chorus he was able to plan all movements well before rehearsals began. Gilbert was nervous about H.M.S. Pinafore. He frequently sat up rewriting until two or three in the morning. Gout had begun to trouble him. He rehearsed so intensively that on the day before the production he was at the theatre all day and nearly all night as well. H.M.S. Pinafore was produced on May 25th, 1878 The critics were kind except the Daily Telegraph who stated that the production would "soon subside into nothingness." Within days it looked as though the Telegraph was right. Receipts dropped. The most apparent cause was an unexpected May/June heat wave. Sullivan decided to include an orchestral selection from the opera at the Promenade Concerts he was conducting nightly. This was a tremendous success. The charming tunes started people talking about the opera and business immediately picked up at the box office. By the end of August the theatre was full at every performance. D'Oyly Carte started organising touring companies as England developed Pinafore Mania!
The Times Standard The Times Era Era The Times Illustrated Sporting and Dramatic News
Even at this early stage in his career Sullivan was continually sick. He was already suffering from a kidney ailment which would reoccur the rest of his life. He was in pain much of the time he was composing the lively melodies of Pinafore. But this was not yet sufficiently serious to cause, as it did later, interruptions to rehearsals. The score was ready in time for the opening performance, and the cast was well trained.
In the original production Hebe was to have had a much larger part than the present one. There would be at least one solo and various "turns" of her own. When Jessie Bond took on the role she stipulated that she would do no talking, only singing parts. As Hebe's dialogue was cut out along with it went any "turns" and impromptus that were to have helped out the play. Because of this Pinafore was a lot shorter than originally intended.
The success of "H.M.S. Pinafore" having proved an established fact, it entered into the mind of the stage-manager, Richard Barker, that a performance of the opera by a company of children might prove attractive. The suggestion met with hearty approval of Gilbert, Sullivan and D'Oyly Carte.
Jessie Bond developed an abscess in her leg just before the company went to America with Pinafore. This never healed and would be with her throughout her stage career.
|


Next: Constraints on the COMMON-LISP Package for Conforming Implementations, Previous: Standardized Packages, Up: Standardized Packages
The COMMON-LISP package contains the primitives of the Common Lisp system as defined by this specification. Its external symbols include all of the defined names (except for defined names in the KEYWORD package) that are present in the Common Lisp system, such as car, cdr, *package*, etc. The COMMON-LISP package has the nickname CL.
The COMMON-LISP package has as external symbols those symbols enumerated in the figures in Symbols in the COMMON-LISP Package, and no others. These external symbols are present in the COMMON-LISP package but their home package need not be the COMMON-LISP package.
For example, the symbol HELP cannot be an external symbol of the COMMON-LISP package because it is not mentioned in Symbols in the COMMON-LISP Package. In contrast, the symbol variable must be an external symbol of the COMMON-LISP package even though it has no definition because it is listed in that section (to support its use as a valid second argument to the function documentation).
The COMMON-LISP package can have additional internal symbols.


SweetFreeStuff.com
///////////////////////////////////////////
Free Engage Organics Salt-Free Seasoning Blends
Posted: 07 Sep 2013 08:46 AM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/kpVhJMCdNro/?utm_source=feedburner&utm_medium=email
Try a free sample packet of all 8 of their organic salt-free seasoning
blends.
The post Free Engage Organics Salt-Free Seasoning Blends appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Swole Sports Nutrition Sample Packs
Posted: 07 Sep 2013 04:45 AM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/zruuYJhwEJM/?utm_source=feedburner&utm_medium=email
The post Free Swole Sports Nutrition Sample Packs appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Sample of Tums Chewy Delights
Posted: 06 Sep 2013 05:39 PM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/EoU6QbaWnO4/?utm_source=feedburner&utm_medium=email
Sign up for your free Tums Chewy Delights sample from Target.com.
The post Free Sample of Tums Chewy Delights appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Bar of Zest Soap
Posted: 06 Sep 2013 04:42 PM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/H83qFQMzTNM/?utm_source=feedburner&utm_medium=email
First 200 each day at 3pm ET starting September 9th to sign up on their
Facebook page when the giveaway begins will receive a free bar of Zest soap.
The post Free Bar of Zest Soap appeared first on SweetFreeStuff.com.


Amazon Lightsail has no $320 plan. You can instead buy an instance of Amazon EC2, for example: m4.2xlarge (32 GB RAM, 8 CPUs, no storage) for around $300/month or m5.2xlarge (32 GB RAM, 8 CPUs, no storage) for around $280/month
While it's possible to host your website from your own computer, it's not a good idea. So you will need to pay some company to host your project. The most common option is a cloud hosting service (basically, it's a Virtual Private Server in a cloud) - when you need a server, you start one (small or big machine - it doesn't matter). When you no longer need a server - you stop it. Two main advantages are:
You are billed for what you use. If you need a server with 1TB of RAM (yes, that 1024 GB of RAM!) for some heavy computations that will take 1 hour - fine - you use it for one hour and you pay for 1 hour.
It's easy to scale this kind of servers. If more people start visiting your website and you need a more powerful server, quite often a company will provide you with an easy to use interface where you can scale you current machine with just a click of a button.
{% endcapture %}
{% capture faq2 %}
Each company gives you a different configuration of resources. For the same amount of money, you might get more RAM in one place and more disk space in another. But which resources are the most important ones ?
Well, it depends what is the purpose of your website. If you are planning on hosting huge videos, then you will definitely need a lot of bandwidth and storage. For most cases (a typical website) this is what I would recommend:
Storage - just go for a faster option (choose SSD over HDD). You probably won't need that much space (you can store large files on Amazon S3, which is a crazy cheap option comparing to storing them with your hosting provider), so usually those 20-30 GB are more than enough to start with.
Transfer - in a typical use case (so when you are NOT planning on hosting videos or large files), the monthly data transfer that the provider gives you is more than enough, especially since browsers are caching a lot of resources. For example, this website downloads less than 300 KB of data when you visit it the first time and 2 KB on each next visit, so to use 1 TB of bandwidth, more than 3 000 000 people would have to visit it in one month.
CPU - having more than 1 CPU allows you to have concurrent web workers (so 2 CPUs means that your server can respond to 2 requests at the same time). For a small website, having 1 CPU might be enough for a long time (web servers are fast with responding to requests), but if you see that you use a lot of CPU frequently, increase the number of CPUs.
RAM - having a lot of RAM allows you to cache more stuff (and this in turn allows you to faster respond to the HTTP requests) and run some services more efficiently (like the database). When your website grows and more things happen in the background, RAM can become your main bottleneck.
{% endcapture %}
{% capture faq3 %}
If I would like to test a hobby project and could still use the Amazon or GCE free tier, then I would go for that. It's a good opportunity to get familiar with AWS/GCE infrastructure and be ready to use it for bigger projects. If the free tier is not possible and I'm fine with Heroku's Platform as a Service model, then I would go for this solution. Deploying is easy and the free plan is free forever (I sometimes find projects that have not been updated since a long time, but they still run on Heroku).
If you decide to pay some money for the hosting (or you simply can't use any of the free solutions) all the companies presented here offer equally great services and you can't go wrong choosing one of them.
{% endcapture %}
{% capture faq4 %}
There are many other hosting providers, but listing all of them here would be useless. How would you select which one is the most suitable for you, if you had to choose from 100 different companies? If you want to see more options, check the Cloud Hosting section of StackShare - they have reviews and allow others to vote on their favorite tools. If you have questions about a specific company, you can ask them on the r/Hosting subreddit page.
{% include pricing-card.html title="Amazon Free Tier" block=aws1 %}
{% include pricing-card.html title="GCE Free Tier" block=gcp1 %}
{% include pricing-card.html title="Heroku" block=heroku1 %}
{% include pricing-card.html title="Linode" block=linode1 %}
{% include pricing-card.html title="DigitalOcean" block=do1 %}
{% include pricing-card.html title="Amazon Lightsail" block=ls1 %}
{% include pricing-card.html title="Linode" block=linode2 %}
{% include pricing-card.html title="DigitalOcean" block=do2 %}
{% include pricing-card.html title="Amazon Lightsail" block=ls2 %}
{% include pricing-card.html title="Linode" block=linode3 %}
{% include pricing-card.html title="DigitalOcean" block=do3 %}
{% include pricing-card.html title="Amazon Lightsail" block=ls3 %}
{% include pricing-card.html title="Linode" block=linode4 %}
{% include pricing-card.html title="DigitalOcean" block=do4 %}
{% include pricing-card.html title="Amazon Lightsail" block=ls4 %}
{% include pricing-card.html title="Linode" block=linode5 %}
{% include pricing-card.html title="DigitalOcean" block=do5 %}
{% include pricing-card.html title="Amazon Lightsail" block=ls5 %}
{% include pricing-card.html title="Linode" block=linode6 %}
{% include pricing-card.html title="DigitalOcean" block=do6 %}
{% include pricing-card.html title="Amazon Lightsail" block=ls6 %}
Frequently Asked Questions
{% include accordion-header.html id="hosting-why" content="Why do I need hosting?" %}
{% include accordion-body.html id="hosting-why" content=faq1 %}
{% include accordion-header.html id="hosting-important" content="What resources are important?" %}
{% include accordion-body.html id="hosting-important" content=faq2 %}
{% include accordion-header.html id="hosting-recommendation" content="Any personal recommendations?" %}
{% include accordion-body.html id="hosting-recommendation" content=faq3 %}
{% include accordion-header.html id="hosting-other" content="Other options?" %}
{% include accordion-body.html id="hosting-other" content=faq4 %}
Platform as a Service
All the hosting services presented here are "Infrastructure as a Service" (you pay to rent a machine and you are free to do whatever you want) but Heroku is a "Platform as a Service". You don't get a machine. Instead you get a service
that will allow you to deploy your application. This means that Heroku is "enforcing" the workflow on you - your DB choices are limited to only PostgreSQL, to deploy your application, you have to use the `Heroku Toolbelt` (which
works in a similar way as pushing latest changes to github), etc. So even though, it's not a big problem (and for some, it might actually be easier, as Heroku will take care of securing your machines and doing all administrative
tasks that you would have to do with your own machine), it's not the "do what you want" approach that other companies give you.
AWS Free Tier
When you register at AWS (Amazon Web Services) account, you can use the Free Tier for the first 12 months.  It's a great way to start with a very small project and when your website needs to grow, you can easily scale it into one of the paid plans. Check out all the Free Tier benefits.
To get $10 bonus, use code:
DEPLOYSTACK10CopyCopied!
during the registration.
Everyone gets $10 credits when they sign up for DigitalOcean. Simply click the "Open DigitalOcean" button and register.


Disney+ hits 10 million subscribers
Service experienced crash after launching
by Frank Pallotta, CNN Business(CNN) - A day after its big launch, Disney announced that its new streaming service Disney+ has amassed 10 million subscribers.
This number seems to back up Disney's claim on Tuesday that the platform crashed early in the day due to "the consumer demand" that "exceeded our high expectations."
Disney has been heavily marketing the new service across its TV networks and parks. The company projected that Disney+ will have 60 million to 90 million global subscribers by 2025.
Disney did not say how many subscribers came from Verizon, which is offering its customers a free year of Disney+, or how many were pre-orders. What remains to be determined is if those 10 million accounts will end up paying for the service beyond its seven day free trial.
Disney+ has a long way to go before catching up to Netflix, which has nearly 160 million subscribers worldwide.
For $6.99 a month, Disney+ subscribers have access to some of the company's biggest brands, including Marvel, Star Wars, Disney Animation and Pixar. The service will be available in the United Kingdom, Germany, France, Italy and Spain on March 31.


Coverage Summary for Class: RoleService (com.lambdaschool.usermodel.services)
| Class |
|---|
| RoleService |
1 package com.lambdaschool.usermodel.services;
2
3 import com.lambdaschool.usermodel.models.Role;
4
5 import java.util.List;
6
7 /**
8 * The service that works with the Role Model.
9 *

10 * Note: no method update Role name
11 */
12 public interface RoleService
13 {
14 /**
15 * Returns a list of all Role objects
16 *
17 * @return list of all Role object
18 */
19 List<Role> findAll();
20
21 /**
22 * Return the first Role matching the given primary key
23 *
24 * @param id The primary key (long) of the Role you seek
25 * @return The Role object you seek
26 */
27 Role findRoleById(long id);
28
29 /**
30 * Given a complete Role object, saved that Role object in the database.
31 * If a primary key is provided, the record is completely replaced
32 * If no primary key is provided, one is automatically generated and the record is added to the database.
33 *

34 * Note that Users are not added to Roles through this process
35 *
36 * @param role the role object to be saved
37 * @return the saved role object including any automatically generated fields
38 */
39 Role save(Role role);
40
41 /**
42 * Find the first Role object matching the given name
43 *
44 * @param name The name (String) of the role you seek
45 * @return The Role object matching the given name
46 */
47 Role findByName(String name);
48
49 /**
50 * Deletes all record and their associated records from the database
51 */
52 public void deleteAll();
53
54 /**
55 * Updates the name of the given role
56 *
57 * @param id The primary key (long) of the role you wish to update
58 * @param role The role object containing the new name - only roles name can be updated through this process
59 * @return The complete role with the new name
60 */
61 Role update(
62 long id,
63 Role role);
64 }


Event is emitted if the bot joins a guild or lazy loads guilds after connecting.
event: "GUILD_CREATE"
Guild: Guild
A Guild instance containing the newly joined guild.
Guild
Instance will be populated using available information from discords GUILD_CREATE
event. When initially connecting, the gateway will only send offline members if a guild has less than the set
large_threshold
members. Additional members will have to be explicitly requested.
This event is emitted if the bot joins a guild. The bot joins a guild in multiple scenarios as defined in the discord documentation;
The client will also emit "GUILD_CREATE"
event in each of these cases, you should handle separating
these event types yourself, based on your project scope.
| Connecting to Discord |
|


| |
Pull Request Approved - Using GitHub as a CMS
Content Management Systems like WordPress, are often a popular
choice when it comes to managing content, but have you ever
considered using GitHub for the backend? At SSW we are fans of
GitHub, not just for source code but for web content too. I’ve
discussed how we recently migrated our
staff profiles from SharePoint to GitHub and the
benefits were immediate.
This site is called SSW People, ssw.com.au/people
and has a bunch of awesome widgets, so you can add a lot of
personality to the profiles your customers read. Check out my SSW profile
for an example of how you can hear, see and watch me.
Keep reading to
see more about GitHub as a CMS
|
|
|
| |
| |
| |
FEATURED VIDEO FROM SSW TV
|
|
|
|
VIDEO: Power Apps – The Tesla of Software
Development
by Calum Simpson
Want to get off the line faster than a Lamborghini,
for a lower up front cost? Buy a Tesla. Want to get
your app up and running faster than traditional
software development, for a lower up front cost? Use
Power Apps.
In this talk, Calum gets you from 0-100 in under 3
seconds with the extreme development acceleration of
Power Apps, and then covers when it makes good
business sense to use them.
Watch
video
|
|
| |
|
| |
|
|
| |
|
Power Platform can help you create
solutions for all of your internal and
external processes. Microsoft's Power
Platform is a set of low-code
applications that can be used
individually to create easy to use
business solutions. These applications
can be used together and combined with
Office 365 and Azure to create a smooth
flow throughout your whole business,
from client communication to financial
analytics.
Could
you be supercharging your business
through Power Apps?
At SSW we have already gone through the
hard work of learning how to implement
apps on Azure and we will be showing you
everything you need to know in a day to
get you started.
Read
more
|
OCT
16
FRI
|
Online Live
Event
|
|
|
|
|
|
|
.NET 4.8 and .NET Core 3.1 will soon be
superseded by .NET 5, are you ready for
the changes? There will be just one .NET
going forward, and we can help you get
ready to use the most powerful and
flexible version ever!
You will finish the day with a solid
understanding of why you should be using
.NET 5 and the capability to build
enterprise apps using the new platform.
Read
more
|
OCT
30
FRI
|
Online Live
Event
|
|
|
|
|
|
|
|
|
|
|
| |
SSW User Groups: We're moving online and combining
our groups for the foreseeable future - more talks
for everyone!
Blazor Web Apps - Goodbye JavaScript! I'm in love
with C#
by William Liebenberg
By this time next year most of us will be hooked on
Blazor WebAssembly. Now we can run C# code directly
in our browsers and get the added bonus of having a
full .NET stack for building enterprise web
applications.
In this talk, William explains how for many years the
only option we had was to use JavaScript/TypeScript
frameworks such as Angular, React, Vue, etc. While
these frameworks are wildly popular and fully
capable, .NET developers feel the pain and waste a
lot of time gluing a JavaScript front end web
application framework to a C# ASP.NET Core backend.
The pain increases with different tooling for the
front-end and back-end.
Blazor WebAssembly is now generally available and
adoption rates are skyrocketing. Come see William
demonstrate how easy Blazor is for developing
enterprise web applications.
DISCLAIMER: No JavaScript will be harmed during this
presentation.
|
|
|
William Liebenberg is an
SSW Solution Architect with over 16
years of professional experience
spanning multiple industries such as
Heavy Engineering, Mining, 3D Graphics,
Education and Finance.
With his many years of experience William
has learnt how to adapt to new
industries and this gives him a unique
talent for synchronizing with his
clients' new business languages and
processes to build their solutions.
|
|
| |
|
|
|
AUG
19
WED
|
Online Live
Event
|
|
|
| |
|
| |
|
|
|


Sort issues by clicking on Title, Description, Associated with Project, Due Date or Status
| {{issue.Title}} | {{issue.Description}} | {{issue.Project.Name}} | {{issue.DueDate}} | {{issue.Status.Name}} |
| {{issue.Title}} | {{issue.Description}} | {{issue.Project.Name}} | {{issue.DueDate}} | {{issue.Status.Name}} |


OpenVis Conf 2015
The highlights
Presented by Cristen Jones / MITRE
Perception
Weber's Law
ΔP = k * ΔI/I
The Future
“Our innate perceptual and cognitive abilities should become an integral part of the next generation of visualization systems.”
Explain a process
Explain a concept
Why are loops effective?
- Exposure effect
- Expectation
- Shifting attention
- Transformation
More on storytelling
Zeigarnik effect
This is why cliffhangers work.
Make the audience feel.
I hope you're aware that you invited the person whose work Tufte called chartjunk.
 I had to appeal to them, quickly.
"Now I see it!"
An inconsistent metaphor?
moving text model |
moving window model |
The 12 principles
https://github.com/tweenjs/tween.js
http://jonobr1.github.io/two.js/
Color Cube
Interactive Datavis is Hard
Data Visualization on a Deadline
Pre-prepare parts
- Boilerplate README
- Style guide
- Virtual environments
- Apple scripts
- App Template
Real Data
Know No Data
// no data might be..
null
undefined
NaN
""
"NULL"
-9999
// &c. &c.


You currently have {{alternativeMargin.label}} available to you.
The most {{alternativeMargin.label}} you can use for this transaction is . Please select the amount you would like to use for this transaction.
{{alternativeMargin.label}}
You have in {{alternativeMargin.label}} to use.
Would you like to use your {{alternativeMargin.label}} for this transaction?


Responsive HTML5 Video
Video Section
Your browser does not support the video element.
00:00
Description
Fully Responsive.
Cross-browser compatible.
Customizable styles.
Mobile ready.
Open source.
Free.
Get it now!


A blocking queue that have size limits on both number of elements and number of bytes.
A simple doubly linked list util to allow O(1) remove.
Simple doubly LinkedList node
A file lock a la flock/funlock
Transliteration of the iterator template in google collections.
A scheduler based on java.
A scheduler for running jobs
A class to measure and throttle the rate of some process.
A mockable interface for time functions
Indicates that the annotated class is immutable
Indicates that the annotated class is not threadsafe
Indicates that the annotated class is meant to be threadsafe.
Helper functions for dealing with command line utilities
A wrapper that synchronizes JSON in scala, which is not threadsafe.
If mx4j-tools is in the classpath call maybeLoad to load the HTTP interface of mx4j.
The normal system implementation of time functions
Some common constants
General helper functions!


Hello, Stack Overflow is a community of 6.8 million programmers, just like you, helping each other. Join them; it only takes a minute:


Your Home in Cádiz
This gorgeous penthouse in the historic center of Cádiz is the perfect place to enjoy an unforgettable stay in the city. The fully renovated apartment located in a historic building will greet you with its tropical tones and breathtaking views. Simply step out onto the terrace to indulge in sunny afternoons and sweeping cityscapes.


Foundational study of the Mutation Game on simple graphs for the Dynamics on Graphs lecture of Norman J Wildberger, PHD source


--- title: istio.authentication.v1alpha1 layout: protoc-gen-docs generator: protoc-gen-docs schema: istio.authentication.v1alpha1.Policy number_of_entries: 0 ---
This package defines user-facing authentication policy.


the and for COVID- health {background that Nigeria with margin {border-style px;} #ffffff;} public was The Ebola response []. from had this disease lessons Nigeria, [], are case coronavirus have more pandemic were African Lagos NCDC Nigeria's contact during guidelines learnt px; will {font-family been cases centre country font-size has information its other research COVID-, Health critical double; effective future including index not system tracing (COVID-) Africa Control Disease Elsevier Moreover, State after any available border-color border-width des economic epidemic from: impact infection institute preparedness response. situation solid; which world {font-style {font-weight Centre However, Nigeria. WHO addition, advisory all before bold confirmation containment countries courier; current daily deaths em; epidemics first infectious initial les leçons make national officials outbreaks, pandemic. pour pt;} que remains resource significant such syndrome systems transmission use virus who


Before Change
_check_unknown_options(unknown_options)
if jac is not None:
warnings.warn("DF-SANE solver does not use a Jacobian", category=OptimizeWarning)
nexp = 2
if eta_strategy is None:
// Different choice from [1], as their eta is not invariant
After Change
_check_unknown_options(unknown_options)
if line_search not in ("cheng", "cruz"):
raise ValueError("Invalid value %r for "line_search"" % (line_search,))
nexp = 2
if eta_strategy is None:
// Different choice from [1], as their eta is not invariant
// vs. scaling of F.
def eta_strategy(k, x, F):
// Obtain squared 2-norm of the initial residual from the outer scope
return f_0 / (1 + k)**2
if fnorm is None:
def fnorm(F):
// Obtain squared 2-norm of the current residual from the outer scope
return f_k**(1.0/nexp)
def fmerit(F):
return np.linalg.norm(F)**nexp
nfev = [0]
f, x_k, x_shape, f_k, F_k, is_complex = _wrap_func(func, x0, fmerit, nfev, maxfev, args)
k = 0
f_0 = f_k
sigma_k = sigma_0
F_0_norm = fnorm(F_k)
// For the "cruz" line search
prev_fs = collections.deque([f_k], M)
// For the "cheng" line search
Q = 1.0
C = f_0
converged = False
message = "too many function evaluations required"


10:03 dev: manager: pong
10:03 manager: dev: http://foo.mozilla.org needs somewhat urgent design refresh.
10:03 dev: sounds great
...
10:04 dev: manager: are you suggesting I do this?
10:04 manager: if you have the availability
10:04 dev: there has to be a better way of assigning work than "whoever is on IRC"
KANBAN 101
Visualize Workflow
Limit WIP
Measure & Improve
Kaizen 改善
Change For The Better
Metrics & Data
Visual Data
The Board Can Tell You A Lot
L10N Bottleneck
Most Important Metric If Things Are Kosher?
Monkeys In Progress
Work In Progress
Measuring Work In Progress
Cumulative Flow Charts Are Your Friend
If the system is flowing correctly the bands on the chart
should be smooth and their height should be stable.
Measuring Work In Progress
Large steps and flat horizontal lines indicate impediments to flow or lack of flow. Variations in the gap or bands stand for bottleneck situations, which usually occur due to irrelevant work in progress limits. This means that the number of tasks in each column should remain at the same level over the time. In addition, too many tasks in the queue mean either problems with finishing work on time or that the employee on the next stage cannot deal with work.
 Depends on the project.
Different Project, Different Chart
Long term project, cont. deployment.
TOTAL WIP
they can also show blockers and other problems
Projects in transition. Stakeholder issues. Lack of resources.
Eventually We Want
We get here by continously making small changes and measuring their impact.
Performance Indicators
Lead Time
Cycle Time
Lead Time
The clock starts when the request is made and ends when it is done.
Cycle Time
For us, the clock starts when dev starts and ends when it is done.


Last Train to Boston Marathon
Edgewood MD/USA
Race Winners
(21 runnings)
23 Feb 2002
---
---
24 Feb 2001
2:37:18
3:29:35
26 Feb
2000
2:38:26
3:35:42
1996-1999
---
---
30 Dec 1995
2:30:24
3:07:30
04 Mar
1995
2:55:55
3:14:11
05 Mar
1994
2:33:50
3:18:30
06 Mar
1993
2:56:09
3:25:25
07 Mar
1992
2:32:09
3:03:33
02 Mar
1991
2:42:51
3:17:14
03 Mar
1990
2:55:23
3:16:51
04 Mar
1989
2:51:42
3:38:19
05 Mar
1988
2:49:30
3:38:45
07 Mar 1987
2:58:08
01 Mar 1986
2:57:51
3:57:42
1985
---
---
03 Mar 1984
2:31:10
3:15:05
05 Mar 1983
2:30:56
3:19:17
06 Mar 1982
2:25:44
3:21:15
07 Mar 1981
2:41:28
2:55:40
01 Mar 1980
2:41:49
3:10:38
03 Mar 1979
2:29:17
3:17:25
04 Mar 1978
2:33:52
4:03:02
05 Mar 1977
2:36:44
Notes: 1977 was the inaugural year. The 1987 race was marred by a small plane crash on the course during the race,
blocking the course on the third of four loops. The lead runner, John Fournier, had already passed the crash site
but was so distraught that he did not finish the race. Brad Roberts, the race director, rerouted the course, allowing
eight runners who wanted to continue, to finish the race. Afterwards, it was learned that there were two fatilities
among the passengers of the plane.
cancelled
cancelled
Michael Wardian (VA/USA)
Corey Harmon (PA/USA)
Courtney Campbell (VA/USA)
Kyle Elizabeth Gancher (CT/USA)
not held
not held
Mike Rinko (VA/USA)
Laura Nelson (MD/USA)
Jack Davidson (VA/USA)
Margaret Starnes-2
Dave Audet (NH/USA)
Margaret Starnes (MD/USA)
Matt Iten (NJ/USA)
Jeanne Melanson (DC/USA)
John Duffy (DC/USA)
Mary Ellen DeRocher (VA/USA)
Jeffrey Brandt (MD/USA)
Heather Parsons (MD/USA)
Ronnie Wong (MD/USA)
Kathleen Latz (NJ/USA)
Don Lookinbill (PA/USA)
Tammy Villano (MD/USA)
Bill Lawder (PA/USA)
Nancy Churchman (PA/USA)
Norman DeRosa (WV/USA)
.
Bill Schultz (PA/USA)
Carleen Moore (MD/USA)
not held
not held
Gary Fanelli (PA/USA)
Jean Diamond (USA)
Terry Rauch (MD/USA)
Felicity Sheppard (USA)
Lawrence Torella (NY/USA)
Robin Gravels (USA)
Bob Taylor (USA)
Kathy Heckman (MD/USA)
Doug White (DE/USA)
Anna Thornhill-2
Gary Lee Wolfram (MI/USA)
Anna Thornhill (NY/USA)
Joe Skaja (NH/CAN)
Karen Cassidy (USA)
Bill Blewett (MD/USA)
.
Most Wins (1977-2001)
Men
No man has won more than once.
Women
2
Anna Thornhill (NY/USA)
1979-80
.
Margaret Starnes (MD/USA)
1994-95
Prize Money (ADR qualified runners)
Year Men Women Total 1995 $75 $75 $150
Race Time Bias
(sec/km)
Insufficient data to calculate the race time bias.
Competitive Level
(1990-date)
Insufficient data to calculate the competitive level.
Quality Performances
Men No men under 2:20
Women No women under 2:50
Last Updated on 13 Sep 2006
Contributor: Brad Roberts


Movies Dashboard
Movie Profit Change Over Time
Movie Budget Change Over Time
Highest Rated Movie on IMDB
Total Gross by Genre
Highest Grossing Movies
Most Profitable Movie Leaderboard
Most Expensive Movie
Total Gross Made in USD
Total Budget Spent
{##} {#
#} {#
#} {#
#} {# Total Movies
#} {#
#} {#
#} {#
#} {#
#} {#
#} {#
#}
IMDB Rating vs Profit Chart
Data Visualisation Dashboard by Chris Healy


THE WATCHER A film review by Christopher Null Copyright 2000 filmcritic.com filmcritic.com
Keanu Reeves, get thee back to The Matrix as soon as possible.
Following one of the most pitiful title sequences I've ever seen, The Watcher actually proceeds to become one of the most pitiful thrillers I've ever seen. And that takes some doing... but let me tell you how.
I give the movie half a point for its mildly eyebrow-raising premise. An L.A. serial killer (Reeves) has finally worn down the cop who was chasing him (James Spader) to the point where he can no longer function in society. The cop gives up on the chase after a dozen-plus murders go unsolved, moves to Chicago, and tries to drop out of life with his migraine medication. Only the killer tracks him down, 2,000 miles away, and tries to revive their old cat-and-mouse game, by mailing our hero a photograph of an anonymous and lovely young lady, sentencing her to die in 24 hours if the cops can't track her down. Surprise: Witness some of the worst police work in movie history as the cops can't track her down. Rinse and repeat.
Like I said, it's a semi-interesting premise once you get past the fact that Nancy Drew could put these cops to shame. But of course, it's all ruined by shoddy acting and some just-plain-God-awful filmmaking that is shameful in its incompetence. Reeves is utterly wooden, as if he is reading his lines from a TelePrompTer that's running too slow, and with nary a "Whoa" to utter. Spader is fine yet unimpressive. And Marisa Tomei -- starring as Spader's shrink and a would-be victim of the killer -- has turned positively ghoulish now that she's reached maturity. (Note: She's supposed to be one of those "lovely young ladies" I mentioned above.)
But let's get down to the worst offendor. Director Joe Charbanic (absolutely no credits on record aside from a few crappy music videos) has no business being behind a camera at all and should retire now before someone gets hurt. This is Film School 101 stuff, what with the ridiculous use of blurred-motion video footage (you see, we're looking through the killer's eyes!), the positive-negative-positive effect to make things oh-so-creepy, sudden flashes of white light, and, well, more blurred-motion video footage. My cat could puke up a better film after a diet of canned tuna and fur.
Which reminds me: As a funny footnote to The Watcher, Keanu Reeves has actually hired Charbanic to direct a music video or two for his band Dogstar (which is reportedly quite awful). My poor kitty may be spared some work after all.

The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


var
Example:
void test(InputStream s) { try (InputStream in = s) {} }
After the fix is applied, the result will be like this:
void test(InputStream s) { try (var in = s) {} }


rspec
Behavior-driven development testing framework written in Ruby to test Ruby code.
More information: home page
- Initialize an .rspec config and a spec helper file:
rspec --init
- Run all tests:
rspec
- Run a specific directory of tests:
rspec path/to/directory
- Run a specific test file:
rspec path/to/file
- Run multiple test files:
rspec path/to/file1 path/to/file2
- Run a specific test in a file (e.g. the test starts on line 83):
rspec path/to/file:83
- Run specs with a specific seed:
rspec --seed seed_number


Form Validation
Name:
Contact:
Gender:
Male
Female
Locations:
Mirpur
Dhanmondi
Mohammadpur
Banani
Songkor
Courses Name:
Select A Course
NT
DDD
GAVA
JAVA
Open
Submit
Close


Library: Foundation
Package: Threading
Header: Poco/Activity.h
Description
This template class helps to implement active objects. An active object uses threads to decouple method execution from method invocation, or to perform tasks autonomously, without intervention of a caller.
An activity is a (typically longer running) method that executes within its own task. Activities can be started automatically (upon object construction) or manually at a later time. Activities can also be stopped at any time. However, to make stopping an activity work, the method implementing the activity has to check periodically whether it has been requested to stop, and if so, return. Activities are stopped before the object they belong to is destroyed. Methods implementing activities cannot have arguments or return values.
Activity objects are used as follows:
class ActiveObject { public: ActiveObject(): _activity(this, &ActiveObject::runActivity) { ... } ... protected: void runActivity() { while (!_activity.isStopped()) { ... } } private: Activity<ActiveObject> _activity; };
Inheritance
Direct Base Classes: Runnable
All Base Classes: Runnable
Member Summary
Member Functions: isRunning, isStopped, run, start, stop, wait
Inherited Functions: run
Types
Callback
typedef typename RunnableAdapterType::Callback Callback;
RunnableAdapterType
typedef RunnableAdapter < C > RunnableAdapterType;
Constructors
Activity
Activity(
C * pOwner,
Callback method
);
Creates the activity. Call start() to start it.
Destructor
~Activity
~Activity();
Stops and destroys the activity.
Member Functions
isRunning
bool isRunning() const;
Returns true if the activity is running.
isStopped
bool isStopped() const;
Returns true if the activity has been requested to stop.
start
void start();
Starts the activity by acquiring a thread for it from the default thread pool.
start
void start(
ThreadPool & pool
);
stop
void stop();
Requests to stop the activity.
wait
void wait();
Waits for the activity to complete.
wait
void wait(
long milliseconds
);
Waits the given interval for the activity to complete. An TimeoutException is thrown if the activity does not complete within the given interval.
run
void run();
See also: Poco::Runnable::run()


--- layout: post title: Capistrano cheat sheet post_id: 144 categories: - tips & tricks date: 2006-09-30 12:57:00.000000000 -06:00 author: Jamis permalink: 2006/9/30/capistrano-cheat-sheet.html ---
David Pettifer has created a compact Capistrano cheat sheet in PDF format. It summarizes helper methods, pre-defined variables, standard tasks, capfile syntax, standard release directory structure, and more. So go ahead, download it!


The QScrollArea class provides a scrollable viewport and two scroll bars. If we want to add scroll bars to a widget, it is much simpler to use a QScrollArea than to instantiate our own QScrollBars and implement the scrolling functionality ourselves.
The way to use QScrollArea is to call setWidget() with the widget to which we want to add scroll bars. QScrollArea automatically reparents the widget to make it a child of the viewport (accessible through QScrollArea::viewport()) if it isn't already. For example, if we want scroll bars around the IconEditor widget we developed in Chapter 5 (as shown in Figure 6.11), we can write this:
int main(int argc, char *argv[]) { QApplication app(argc, argv); IconEditor *iconEditor = new IconEditor; iconEditor->setIconImage(QImage(":/images/mouse.png")); QScrollArea scrollArea; scrollArea.setWidget(iconEditor); scrollArea.viewport()->setBackgroundRole(QPalette::Dark); scrollArea.viewport()->setAutoFillBackground(true); scrollArea.setWindowTitle(QObject::tr("Icon Editor")); scrollArea.show(); return app.exec(); }
The QScrollArea (shown schematically in Figure 6.12) presents the widget at its current size or uses the size hint if the widget hasn't been resized yet. By calling setWidgetResizable(true), we can tell QScrollArea to automatically resize the widget to take advantage of any extra space beyond its size hint.
By default, the scroll bars are displayed only when the viewport is smaller than the child widget. We can force the scroll bars to always be shown by setting scroll bar policies:
scrollArea.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); scrollArea.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
QScrollArea inherits much of its functionality from QAbstractScrollArea. Classes such as QTextEdit and QAbstractItemView (the base class of Qt's item view classes) derive from QAbstractScrollArea, so we don't need to wrap them in a QScrollArea to get scroll bars.