diff --git a/README.md b/README.md index 8f17c16..e7c1a94 100644 --- a/README.md +++ b/README.md @@ -20,43 +20,60 @@ gs psrw.ps Liked it? Now close the file and reopen it ;-) +_Hint 1_: If you enable the "Watch File" option in `gv`, you will get a +nice slideshow, for some definition of nice. + +_Hint 2_: Running `gv` with `-nosafer -nodirsafe` might be a very bad +idea. + ## WTF? -Postscript is a Turing-complete language. This means that you can do any -feasible computation in Postscript. Hence, simulating a random walk in -Postscript is not a big fuss at all, also because the standard -Postscript definition already includes a pseudo-random number generator, -so you don't need to implement it yourself. The only problem is that the -pseudo-random number generator needs to be initialised with a new seed, -otherwise you would always visualise the _same_ trajectory. +Postscript is a Turing-complete language. This means that you can +perform any feasible computation in Postscript. Hence, simulating a +random walk in Postscript is not a big fuss at all, also because the +standard Postscript definition already includes a pseudo-random number +generator, so you don't need to implement it yourself. The only problem +is that the pseudo-random number generator needs to be initialised with +a new seed, otherwise you would always visualise the _same_ trajectory. The simple solution implemented in `psrw.ps` is to store the seed in the -same file as a comment, and _update_ it after every run. In a word, -`psrw.ps` rewrites itself at each run, changing the seed and allowing to -generate a _new_ random walk trajectory every time you open the file. +same file as a comment, and _update_ it at each run. In practice, +`psrw.ps` rewrites a slightly modified copy of itself every time you +"view" it, but a user would hardly notice it :-) ## Why? -Well, there is no particular reason to write anything like `psrw.ps`. I -just tried to do something similar around 2001 or 2002, when I was using -Postscript quite heavily, and at that time I did not find a proper way -through. The simplicity of the solution implemented in `psrw.ps` -scratches a long-standing personal itch, and tells a lot about my poor -knowledge of Postscript... +Well, you don't need a particular reason to write anything like +`psrw.ps`. I just tried to do something similar around 2001 or 2002, +when I was using Postscript quite heavily, and at that time I did not +find a proper way through. So the simplicity of the solution +implemented in `psrw.ps` scratches a long-standing personal itch, and +tells a lot about my very poor understanding of Postscript... -## No really, WHY? +## No seriously, WHY? I just wanted to make a point about (not) trusting documents written in formats that you don't understand, or that are not freely accessible or -not documented. Many _text_ formats out there are Turing-complete or -close-to, and some visualiser (e.g., for PDF or OpenXML) include -interpreters for other Turing-complete languages (like Javascript or -VBScript). This mean that they can do almost anything when you "_open_" -those "_text_" files. - -If it's so easy to craft a document that modifies itself to change a -comment that you can't visualise, what else can be done by "_text_" -files saved in proprietary formats? +are poorly or not documented. + +Many _text_ formats out there are Turing-complete or close-to, and some +viewers (e.g., for PDF or OpenXML files) include interpreters for other +Turing-complete languages (like Javascript or VBScript). This mean that +these viewers can do almost anything when you "_open_" those "_text_" +files. The only chance you have is to understand what is going on behind +the scenes, or to trust the company that provided the smart viewer. But +can you really trust _them_? + +If it was so easy for a Postscript illiterate like me to craft a +document that modifies itself by changing _something_ that you cannot +even visualise, what else can be done by "_text_" files saved in +proprietary formats? + +Well, at this point you should start thinking that you cannot really +_trust me_ either, even if I sweared that `psrw.ps` does absolutely +nothing nasty when you "open" it. But how can you be sure I am telling +the truth? ;-) + ## Links