For those who decline to watch a video: the author uses animations and hyperlinks to simulate a Turing machine inside a PowerPoint presentation. The actual paper is at <a href="http://www.andrew.cmu.edu/user/twildenh/PowerPointTM/Paper.pdf" rel="nofollow">http://www.andrew.cmu.edu/user/twildenh/PowerPointTM/Paper.p...</a> .<p>My first thought was that while this was really cool, it does seem to have only a finite tape; I would be quite prepared to believe it was possible to have an unbounded tape, but my mind would be blown. The author admits that the tape is indeed finite.
The SIGBOVIK group is really full of comedy genius.<p>I am really laughing with their publications:
<a href="http://sigbovik.org/2017/proceedings.pdf" rel="nofollow">http://sigbovik.org/2017/proceedings.pdf</a><p>For example skip to page 114, "Automated Distributed Execution of LLVM code using SQL JIT Compilation" with such gems as:<p>"The resulting PL/pgSQL code can then be executed
on any database system, as long as that database system
is PostgreSQL"<p>"Another solution to distributed programming has been
proposed by Microsoft with their innovative Excel system. In large companies, distributed execution can be achieved using Microsoft Excel by having hundreds of people all sitting on their own machine working with Excel spreadsheets. These hundreds of people combined can easily do the work of a single database server"<p>"For easy reproducibility, we have included a SHA-3 hash
of the complete source code [2]. If you want to reproduce the experiments, simply reverse this hash and run the provided source code. "<p>I'm not putting more quotes because they would be spoilers.
Once again confirmation of Greenspun's 10th law:<p>"Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp."<p>You can, of course, safely drop the "C or Fortran" part.<p>Every program I've ever written, if it keeps getting used, maintained and expanded after ~2 years it gets it's own programming language, and therefore usually becomes turing-complete.<p>The most powerful abstraction one can make in an application is the ability to quickly combine large parts of the application into new functionalities, effectively implementing a programming language. Usually this starts with "macros": the ability to specify sequences to be executed in series with either fully implicit data-passing (e.g. we're always acting on this global state), and then someone points out that variables would be really good, and then you do that : local, named variables in macros. And there's your programming language.
More computer science humor can be found at SIGBOVIK: <a href="http://sigbovik.org/" rel="nofollow">http://sigbovik.org/</a>