diff --git a/2018/algmyr/README.md b/2018/algmyr/README.md
index 38a3724a6..3ad639127 100644
--- a/2018/algmyr/README.md
+++ b/2018/algmyr/README.md
@@ -81,7 +81,11 @@ from hearing. But even without training you can easily read along with the
printed characters and have the sound make sense with the look of the
characters.
-See image [spectrogram.png](spectrogram.png) for an example spectrogram.
+See image [spectrogram.png](spectrogram.png) for an example spectrogram:
+
+
### Limitations
diff --git a/2018/algmyr/index.html b/2018/algmyr/index.html
index 6a4a49177..bada9883f 100644
--- a/2018/algmyr/index.html
+++ b/2018/algmyr/index.html
@@ -457,7 +457,10 @@ could listen to a cacophony of chirpy characters.
See image spectrogram.png for an example spectrogram.
+See image spectrogram.png for an example spectrogram:
+
There is no error checking done when opening files, so expect segfaults if you provide the wrong path to a file.
diff --git a/2018/burton1/README.md b/2018/burton1/README.md index c9f147fa4..8469a0902 100644 --- a/2018/burton1/README.md +++ b/2018/burton1/README.md @@ -51,7 +51,7 @@ One line, one array, one loop and one statement but it prints many bytes. It won Feed this anything on `stdin`. -The [included script.sh](%%REPO_URL%%/2018/burton1/scripthd.sh) may be used as a driver program for this entry. +The included [scripthd.sh](%%REPO_URL%%/2018/burton1/scripthd.sh) may be used as a driver program for this entry. It adds several nice-to-have features, and allows salt-to-taste customizability. This code has been compiled and tested on: @@ -227,15 +227,12 @@ It pre-dates `varargs.h`, and assembly was the only way to gain access to the variable argument types. The first edition _The C Programming Language_, 1978, page 71, remarks: -``` - By the way, there is no entirely satisfactory way to write a portable function - that accepts a variable number of arguments, because there is no portable way - for the called function to determine how many arguments where actually passed - to it in a given call. - ... - `printf`, the most common C function with a variable number of arguments, - ... is also non-portable and must be modified for different environments. -``` +> By the way, there is no entirely satisfactory way to write a portable function +that accepts a variable number of arguments, because there is no portable way +for the called function to determine how many arguments where actually passed to +it in a given call. ... `printf`, the most common C function with a variable +number of arguments, ... is also non-portable and must be modified for different +environments. It is fascinating to explore the roots of C through the history of the operating system it was birthed within. C is often criticized as a difficult, inscrutable diff --git a/2018/burton1/index.html b/2018/burton1/index.html index bcdaf1aa6..7a511ce51 100644 --- a/2018/burton1/index.html +++ b/2018/burton1/index.html @@ -429,7 +429,7 @@ with-Wno- options.
One line, one array, one loop and one statement but it prints many bytes. It won.
Feed this anything on stdin.
The included script.sh may be used as a driver program for this entry. +
The included scripthd.sh may be used as a driver program for this entry. It adds several nice-to-have features, and allows salt-to-taste customizability.
This code has been compiled and tested on:
varargs.h, and assembly was the only way to gain access to the
variable argument types. The first edition The C Programming Language, 1978,
page 71, remarks:
- By the way, there is no entirely satisfactory way to write a portable function
- that accepts a variable number of arguments, because there is no portable way
- for the called function to determine how many arguments where actually passed
- to it in a given call.
- ...
- `printf`, the most common C function with a variable number of arguments,
- ... is also non-portable and must be modified for different environments.
++By the way, there is no entirely satisfactory way to write a portable function +that accepts a variable number of arguments, because there is no portable way +for the called function to determine how many arguments where actually passed to +it in a given call. …
+printf, the most common C function with a variable +number of arguments, … is also non-portable and must be modified for different +environments.
It is fascinating to explore the roots of C through the history of the operating system it was birthed within. C is often criticized as a difficult, inscrutable language, but as this contest demonstrates, this is in parody. Shell-gol is diff --git a/2018/ciura/README.md b/2018/ciura/README.md index adb7c4a29..07ff92fe2 100644 --- a/2018/ciura/README.md +++ b/2018/ciura/README.md @@ -5,7 +5,7 @@ ``` There is an alternate version that lacks a useful bug fix. See [Alternate -code](#alternate-code) and the author's remarks, [remarks section](#remarks), +code](#alternate-code) and the author's remarks' [remarks section](#remarks), below for more details. diff --git a/2018/ciura/index.html b/2018/ciura/index.html index f334eeb24..9673848d6 100644 --- a/2018/ciura/index.html +++ b/2018/ciura/index.html @@ -411,7 +411,7 @@ Location: PL - Republic of Poland
make
There is an alternate version that lacks a useful bug fix. See Alternate -code and the author’s remarks, remarks section, +code and the author’s remarks’ remarks section, below for more details.
./prog < text
diff --git a/2018/endoh2/README.md b/2018/endoh2/README.md
index 7c634414e..36eedb6ff 100644
--- a/2018/endoh2/README.md
+++ b/2018/endoh2/README.md
@@ -33,7 +33,7 @@ This is an EX-tremely obfuscated program!
A high-context work that combines parrots that new hackers like and parrots that
old hackers like. One is an internet meme called [Party
-Parrot](https://cultofthepartyparrot.com) (WARNING: has flashing lights). The other is a
+Parrot](https://cultofthepartyparrot.com) (**WARNING**: has flashing lights). The other is a
sketch [comté](https://en.wikipedia.org/wiki/Comté_cheese) called ["Dead
Parrot"](https://en.wikipedia.org/wiki/Dead_Parrot_sketch) from the British
sitcom ["Monty Python's Flying Circus"](https://en.wikipedia.org/wiki/Monty_Python%27s_Flying_Circus)
@@ -44,8 +44,8 @@ The "_Python_" in the award name refers to Monty Python, **not** the
The shape of [prog.c](%%REPO_URL%%/2018/endoh2/prog.c) is "Undead Parrot" based on "dead parrot". The
message that appears in the bottom line of the output source code is the subject
of the dialogue that appears in "Dead Parrot" and explains in various
-expressions that the parrot died. Also, the second **__<-_Source_of_Parrots__**
-line from the bottom of A high-context work that combines parrots that new hackers like and parrots that
old hackers like. One is an internet meme called Party
-Parrot (WARNING: has flashing lights). The other is a
+Parrot (WARNING: has flashing lights). The other is a
sketch comté called “Dead
Parrot” from the British
sitcom “Monty Python’s Flying Circus”
@@ -433,8 +433,8 @@ The “Python” in the award name refers to Monty Python, not<
The shape of prog.c is “Undead Parrot” based on “dead parrot”. The
message that appears in the bottom line of the output source code is the subject
of the dialogue that appears in “Dead Parrot” and explains in various
-expressions that the parrot died. Also, the second **__<-_Source_of_Parrots__**
-line from the bottom of http://cultofthepartyparrot.com/ (WARNING: has
+expressions that the parrot died. Also, the second Although it is a boring Quine story, it is quite difficult to have 10 parrot
pictures and 10 lines of data. Only the outline data of the parrot picture is
diff --git a/2018/ferguson/FILES.html b/2018/ferguson/FILES.html
index 228d1a982..87fcedde6 100644
--- a/2018/ferguson/FILES.html
+++ b/2018/ferguson/FILES.html
@@ -393,15 +393,15 @@
The follow footnotes are for if the weasel program is installed into the
-system via the RPM file (that can be built by say As I noted before it was primarily personal reasons that I submitted the spec
-file. Years later I thought of removing it but since I quite enjoyed the judges’
-remarks I have kept it in place. Please note that the paths below are dependent
-on the prefix used in installation; where I suggest [1] Note that prog.c and
-prog.alt.c would be
-linked to [2] The file would most likely be compressed as
- [3] These files would be in the Jump to: top__<-_Source_of_Parrots__
+line from the bottom of http://cultofthepartyparrot.com/ (WARNING: has
flashing lights) has a hidden URL (hidden by the parrot’s body).
-
-
weasel program [1].weasel program.
-
weasel.alt program [1].weasel.alt program.
-
@@ -412,24 +412,17 @@ target strings.
make test target that runs the test.sh script. The index.html file shows how
-to pass options to the script itself [1].
-
-
-
Footnote
-rpmbuild -bb weasel.spec on
-an RPM linux system)./usr it is equally
-possible it could be under ‘/usr/local’, for example.weasel.c and weasel.alt.c
-(respectively) in the /usr/src/weasel
-subdirectory.weasel.1.gz under the /usr/share/man/man1
-subdirectory./usr/share/doc/weasel
-subdirectory.
+> `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
@@ -1295,13 +1285,15 @@ 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
+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
diff --git a/2018/ferguson/index.html b/2018/ferguson/index.html
index 4c0c2123f..37e963290 100644
--- a/2018/ferguson/index.html
+++ b/2018/ferguson/index.html
@@ -547,14 +547,16 @@ dedicated to this entry beyond what will be published on the IOCCC website.
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?
++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 @@ -577,16 +579,18 @@ comparison and output will always be capitalised).
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.
++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.
+
OBFUSCATION NOTE: 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
@@ -612,24 +616,32 @@ 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 +
++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 2305567963945518424753102147331756070.
- 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.
++This entry factors integers between 1 and +2305567963945518424753102147331756070. 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 2305567963945518424753102147331756070? You tell us!
++BTW: What is so special about 2305567963945518424753102147331756070? 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
+2305567963945518424753102147331756070. But 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?
-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>:
<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
@@ -743,9 +755,9 @@ example if you were to do any of:
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
+
The string to be searched would actually be -r5 and the mutation rate will
+remain the default because after the - option (that is --) 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:
long but I compare the return value of rand()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).
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:
-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
@@ -847,8 +859,8 @@ in monkey mode.
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
@@ -857,30 +869,33 @@ which means that it’ll use the genetic algorithm.
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:
+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 printing is 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:
+.. 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.
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!).
[...]). 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
@@ -904,11 +919,11 @@ bash shell built-in utility: that isn’t output from my entry.
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 -back-quote (“`”) 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 ``).
+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
+back-quote ("\`") 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 @@ -1044,17 +1059,22 @@ 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!*
++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!
+
And if you’ll notice that although it might look like a compact blob of octets -at first glance if you look throughout the file you’ll see two statements to -set your thinking straight:
+(although not really: a blob is by definition roundish) at first glance if you +look throughout the file you’ll see two statements to set your thinking +straight: +NO BLOB CODING
THIS IS NOT A COMPACT BLOB OF OCTETS
+
So you see even if your eyes are trying to deceive you they’re quite wrong. 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! :)
+some of it might look like a blob (for certain definitions of ‘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 Final thoughts.
I have included a RPM spec file for those with a Red Hat based Linux distribution; see rpm.html for details (including why I implemented -this) if for some (strange or maybe even mad) reason you’re interested.
+this) if for some (strange or maybe even mad) reason you’re interested, which +basically means nobody but me.Dennis Ritchie’s Anti-Foreword:
Anti-Foreword
-
- By Dennis Ritchie
- From: dmr@plan9.research.att.com
- 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!
++Anti-Foreword
+By Dennis Ritchie +From: dmr@plan9.research.att.com +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 @@ -1252,46 +1267,41 @@ 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."
+++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 @@ -1303,13 +1313,15 @@ the RS/6000, merely stating “Workplace OS will be available Real Soon Now.” 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
+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
diff --git a/2018/ferguson/rpm.html b/2018/ferguson/rpm.html
index cfb4dadbe..b607a2e33 100644
--- a/2018/ferguson/rpm.html
+++ b/2018/ferguson/rpm.html
@@ -392,38 +392,16 @@
What kind of crazy idea is this? Install an IOCCC entry? I realise it seems odd
(at best) so why did I make a rpm spec file and why did I hint at building RPMs
-for others? I can’t say precisely; certainly I’m under no impression that
+for others? I can’t say precisely; certainly I’m under NO IMPRESSION that
anyone else will want to use it but the entry was fun enough for me that I
actually will (a number of my programs over the years are programs I actually
install and I already have done so with this entry). I already have my own RPM repository and initially after having won I set it up
-so that I could host the weasel rpm (binary and source) there. At the same time
-though I feel the entry belongs on the IOCCC website; that is to say the only
-place the raw files should be downloadable from is the IOCCC website itself.
-Simon Cooper (the judge who at the time dealt with setting up the entries on the
-IOCCC website) asked me if there is any real attachment in having the RPM built
-as part of the entry and the answer is ‘no’. He did suggest too that if I were
-to have the RPM hosted on the IOCCC website not only would it place a burden on
-me to keep it up to date (not that it ever needed to be updated) but it would
-place a burden on the judges. This is no longer true with GitHub but anyway
-since this was for personal reasons I decided that: I would not host the actual source code or scripts on my website; they will
-remain on the IOCCC website. This will most likely never change; instead I would
-link to the entry directory so that they remain where they belong: the IOCCC
-website itself. I have set up an errata page however should there be anything
-requiring a fix. I am keeping the weasel.spec file in the entry as it was part of my
-submission but I do not explain here how to set up the build environment or how
-to build a RPM: if you know how to use rpmbuild then you should be able to
-work it out. Again that’s a crazy idea but again it was there and it was part of
-the judges’ comments (which I liked a lot) which is yet another reason I kept
-it. Because I strongly suspect (in other words since I know) I am the only one
-who has any desire for actually installing an IOCCC entry I did not do anything
-further. Nevertheless more information on my entry can be found at
-https://ioccc.xexyl.net/2018/weasel. Nonetheless I am keeping the
+weasel.spec file in the entry as it was part of my
+submission but I won’t explain here how to set up the build environment or how
+to build a RPM; even if anyone did want to (and I know nobody else will) want to
+do this, they can figure it out themselves. Again, this was more personal but
+since the Judges’ remarks were fun for me I am keeping this here anyway. Jump to: topAn RPM: what kind of absolute MADNESS is this ?
-
+