en en en pt es en en en en cv az en en en en en en en en en en hbs_lat en en en ca en en de en en en en en en en en en en en ca es en es ne en en en en en en en de en en en en en en en en pl en en en en en en en en en en en en en en en en en en en fr en zh nl en en en en en en en en en en en en en en it en en en en en en en pt en en en en en en en en en
Late last night, I was surprised when a friend informed me that a fork of my Turing Drawings project had made its way to the front page of Hacker News. The fork by Darius Bacon includes new features such as the ability to make the rendering faster or slower, as well as a new backend which compiles the Turing machines to asm.js instead of interpreting them, offering impressive speedups. The Hacker News community responded with great enthusiasm and found many interesting drawings, some of which I’ve collected below:
Posters also contributed interesting bits of information. It seems that the idea behind Turing Drawings is not entirely new, but rather an independent re-discovery of an existing formalism called a Turmite, with a finite tape instead of an infinite one. Another poster had the following insight:
The world is finite, so every drawing eventually loops. However, the state space is something like k * 2^18 * n^(2^18), where k is the number of states and n the number of symbols. For the default (4, 3) this is 3.125 * 10^125080, so you could be waiting for a while :)
Someone associated with Wolfram even suggested that it may be possible to participate in a summer school project involving 2D Turing Machines:
In fact I studied the space-filling behavior of precisely these 2D Turing machines in 2009. For low numbers of states and colors you can enumerate them exhaustively and calculate the distribution of space-filling efficiency (log-normal, if anyone is interested).
The full spectrum of behavior is quite fascinating to catalog. All these kinds of simple computational system have a character and ‘zaniness’ all their own.
The idea behind Turing Drawings came to me while pondering generative art. I had already experimented with various approaches, such as plotting mathematical functions of two-variables, but had little success in creating interesting patterns. Intuitively, it seemed that Turing machines would be an ideal formalism because, even if they were randomly generated in a naive fashion, they would have a high likelihood of creating complex (and potentially interesting) visual patterns as a side effect of their computational process.
Users of Turing Drawings may find themselves clicking the “random” button many times before seeing anything interesting, but through the power of crowdsourcing, it becomes possible to explore hundreds of thousands of patterns in a relatively short time. Turing Drawings is a toy, but it’s interesting to observe the dynamics of chaos and entropy at play, and to see order come out of randomness and very simple rules.
It’s the first time one of my hobby projects gathers so much attention online (even foreign blogs are covering it :)). I’m happy to see that by making it open source, it’s been possible for Turing Drawings to take on a life of its own. Someone has already informed me that they were interested in adding features to visualize the transitions and better analyze the behavior of the machines. I anticipate that after the Hacker News coverage, more forks are likely to occur.
In case anyone is interested, I should also mention that I tried to apply the idea of Turing Drawings to procedural music generation, with moderate success. The project is called Turing Tunes, and is also open source.
EDIT: Turing Drawings was also covered on MetaFilter and on ikono‘s art blog.
From → Creativity, Programming
Well done, very interesting work and I wouldn’t call the Turing Tunes “moderate”. Generative Music is a thing, actually, and combining this with Turing Machines is awesome. One should combine this with a sampler and there you go: A Turing Autechre-Thingy. :D
Ibniz is also worth a look. http://pelulamu.net/ibniz/
It’s a stack based vm where pixel coordinates are pushed on the stack and whatever is on the stack when the code finishes goes on screen.
Also does music which, while cool, makes it a pain to code for.
David Brooks Pokorny permalink
Thank you for this, it is beautiful and fascinating! There are a couple of ways to alter the experience, or rather, have the user spend more time looking at fascinating evolutions vs. clicking on “random/mutate” repeatedly in the hopes of finding a particularly complex one. The first is to use visitor data and assign a value that could be called “complexity” based on the amount of time the visitor spends looking at it. Also, clicking “slower”, “faster”, or “restart” is an indication that the visitor finds the animation more complex. So all of this data (if it is sent back to the server and logged) can be used to estimate the visitor’s interest, which can then be fed back into the user experience via a “top 10 most complex machines seen in the last week” or something like this.
The second is an offline approach: for each machine description and each frame, the tape state can be compressed using something like gzip (or a lossy summary), then the size of the resulting file recorded. The point is to produce a scalar time series statistic (sizes of compressed frames), then look for qualitative changes in behavior evidenced by a sudden increase or decrease. It might be necessary to smooth (http://en.wikipedia.org/wiki/Smoothing) the time series first to eliminate noise.
Some machines are “multi-modal” in the sense of filling the square with one type of pattern, and only after that pattern has taken over does a new pattern start to emerge, which then slowly takes over. The point is that the time series statistic can be used to find such multi-modal/multi-phase examples. For example this one looks like grass in the wind, but one must wait a long time (or have good timing in clicking faster/slower) in order to see it, and even then the effect only lasts for a little while.
In this particular case it would be handy to have a checkbox “automatically reduce speed when things start to get interesting”
In addition, users may find it interesting to explore not only the “raw” visual data of the tape state but also derivations of this. For example, instead of coloring each pixel according to the mark it holds, color it with value according to exp(alpha*(-)). This produces a sort of “heat map” of where the head of the machine has last changed the tape mark. The alpha would then be tuned by the user to see a longer or shorter trail.
Dogfooding Higgs with the Turing Turtle | Pointers Gone Wild
Leave a Reply Cancel reply
Enter your comment here...
Fill in your details below or click an icon to log in:
Email (required) (Address never made public)
You are commenting using your WordPress.com account. ( Log Out /  Change )
You are commenting using your Twitter account. ( Log Out /  Change )
You are commenting using your Facebook account. ( Log Out /  Change )
Notify me of new comments via email.
Notify me of new posts via email.
« PSA: Caffeine is a Drug
Presented at DConf 2013 »
Typed vs Untyped Virtual Machines
Minimalism in Programming Language Design
Democracy, Dictatorships and Access to Information
Code that Doesn’t Rot
The Internet Changed My Life
What’s Could You Use Tesla Bot For?
NoiseCraft: a Browser-Based Visual Programming Language for Sound & Music
Art Artificial Intelligence Artificial Life Assembly Biology Compilers Creativity D Language Electronics Future Game Development Genetic Algorithms Grad studies Graphics Higgs JavaScript Microcontrollers Microprocessors Music Programming Programming Languages Psychology Rant Robotics Tachyon Technology Uncategorized work x86 Zeta
Archives Select Month June 2022  (1) May 2022  (1) March 2022  (1) February 2022  (2) January 2022  (2) December 2021  (1) June 2021  (1) February 2021  (2) December 2020  (1) September 2020  (1) January 2020  (1) November 2019  (2) October 2019  (2) June 2019  (1) January 2019  (1) December 2018  (1) May 2018  (2) February 2018  (1) January 2018  (1) December 2017  (1) October 2017  (1) June 2017  (1) April 2017  (1) January 2017  (1) December 2016  (1) November 2016  (2) September 2016  (2) May 2016  (1) March 2016  (1) February 2016  (2) January 2016  (1) November 2015  (4) October 2015  (1) September 2015  (3) August 2015  (2) July 2015  (3) June 2015  (1) May 2015  (3) April 2015  (2) March 2015  (1) February 2015  (1) December 2014  (1) November 2014  (2) October 2014  (2) September 2014  (3) July 2014  (3) May 2014  (1) April 2014  (1) March 2014  (1) February 2014  (1) January 2014  (3) December 2013  (3) October 2013  (2) September 2013  (1) August 2013  (2) July 2013  (3) June 2013  (2) May 2013  (3) March 2013  (2) February 2013  (1) January 2013  (3) December 2012  (4) November 2012  (1) October 2012  (1) September 2012  (3) July 2012  (4) June 2012  (2) May 2012  (2) April 2012  (4) March 2012  (2) February 2012  (3) January 2012  (6) December 2011  (2) November 2011  (3) October 2011  (8) September 2011  (4) August 2011  (3)