<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Alex McLean &#187; visualisation</title>
	<atom:link href="http://yaxu.org/category/visualisation/feed/" rel="self" type="application/rss+xml" />
	<link>http://yaxu.org</link>
	<description>Making music with text</description>
	<lastBuildDate>Wed, 16 May 2012 09:24:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>PhD Thesis: Artist-Programmers and Programming Languages for the Arts</title>
		<link>http://yaxu.org/thesis/</link>
		<comments>http://yaxu.org/thesis/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 14:07:32 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[haskell]]></category>
		<category><![CDATA[livecoding]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[papers]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[texture]]></category>
		<category><![CDATA[visualisation]]></category>
		<category><![CDATA[vocable]]></category>

		<guid isPermaLink="false">http://yaxu.org/?p=893</guid>
		<description><![CDATA[With some minor corrections done, my thesis is finally off to the printers.  I&#8217;ve made a PDF available, and here&#8217;s the abstract: We consider the artist-programmer, who creates work through its description as source code. The artist-programmer grandstands computer language, giving unique vantage over human-computer interaction in a creative context. We focus on the human [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://yaxu.org/writing/thesis.pdf"><img class="wp-image-898 alignright" style="border-image: initial; border-width: 1px; border-color: black; border-style: solid; margin: 0 0 15px 15px;" title="thesis" src="http://yaxu.org/wp-content/uploads/2012/02/thesis-216x300.png" alt="" width="173" height="240" /></a>With some minor corrections done, my thesis is finally off to the printers.  I&#8217;ve made a <a href="http://yaxu.org/writing/thesis.pdf">PDF</a> available, and here&#8217;s the abstract:</p>
<blockquote><p>We consider the artist-programmer, who creates work through its description as source code. The artist-programmer grandstands computer language, giving unique vantage over human-computer interaction in a creative context. We focus on the human in this relationship, noting that humans use an amalgam of language and gesture to express themselves. Accordingly we expose the deep relationship between computer languages and continuous expression, examining how these realms may support one another, and how the artist-programmer may fully engage with both.</p>
<p>Our argument takes us up through layers of representation, starting with symbols, then words, language and notation, to consider the role that these representations may play in human creativity. We form a cross-disciplinary perspective from psychology, computer science, linguistics, human-computer interaction, computational creativity, music technology and the arts.</p>
<p>We develop and demonstrate the potential of this view to inform arts practice, through the practical introduction of software prototypes, artworks, programming languages and improvised performances. In particular, we introduce works which demonstrate the role of perception in symbolic semantics, embed the representation of time in programming language, include visuospatial arrangement in syntax, and embed the activity of programming in the improvisation and experience of art.</p></blockquote>
<p>Feedback is very welcome!</p>
<p>BibTeX record:</p>
<pre>@phdthesis{McLean2011,
    title = {{Artist-Programmers} and Programming Languages for the Arts},
    author = {McLean, Alex},
    month = {October},
    year = {2011},
    school = {Department of Computing, Goldsmiths, University of London}
}</pre>
<p>RIS record:</p>
<pre>TY  - THES
ID  - McLean2011
TI  - Artist-Programmers and Programming Languages for the Arts
PB  - Department of Computing, Goldsmiths, University of London
AU  - McLean, Alex
PY  - 2011/10/01</pre>
]]></content:encoded>
			<wfw:commentRss>http://yaxu.org/thesis/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Attending to presentation slides</title>
		<link>http://yaxu.org/attending-to-presentation-slides/</link>
		<comments>http://yaxu.org/attending-to-presentation-slides/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 13:24:21 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[papers]]></category>
		<category><![CDATA[visualisation]]></category>

		<guid isPermaLink="false">http://yaxu.org/?p=714</guid>
		<description><![CDATA[I had some fun with my talk at ICMC earlier this month. I started in the usual way with an outline slide, going through bullet points one by one outlining the structure of my talk.  Importantly, I tried to talk continuously while the slide was up. On the next slide was a picture of a [...]]]></description>
			<content:encoded><![CDATA[<p>I had some fun with <a href="http://yaxu.org/writing/texture-icmc-preprint.pdf">my talk</a> at <a href="http://icmc2011.org.uk/">ICMC</a> earlier this month.</p>
<p>I started in the usual way with an outline slide, going through bullet points one by one outlining the structure of my talk.  Importantly, I tried to talk continuously while the slide was up.</p>
<p>On the next slide was a picture of a boy throwing a stone into the sea, I talked about it for a while, making the point that it was easy to perceive the image while listening to my voice.  The audience hopefully found they could attend simultaneously to the visual scene and my linguistic speech.</p>
<p><a href="http://yaxu.org/wp-content/uploads/2011/08/h.jpg"><img class="aligncenter size-medium wp-image-715" title="h" src="http://yaxu.org/wp-content/uploads/2011/08/h-300x179.jpg" alt="" width="300" height="179" /></a></p>
<p>I then skipped back to the previous slide and pointed out that the outline slide actually had little to do with what I had been saying.  Here&#8217;s the contents of that first slide:</p>
<ul>
<li>A live coding talk towards the end of the conference</li>
<li>Some strange programming languages were shown</li>
<li>He made a point about cognition that I didn&#8217;t quite get</li>
<li>The demo didn&#8217;t work out too well</li>
<li>I was a bit tired but he seemed to be trying to say something about syntax</li>
</ul>
<p>This got some laughs.  There were quite a lot of people in the room, and the slide had been up for a while, but as far as I could gather no-one had managed to read any of it.  My contention was that they <em>couldn&#8217;t</em> read it while listening to my voice, it&#8217;s too difficult to attend to two streams of language at once.  I didn&#8217;t really know what would happen, but from talking to audience members afterwards it seems at least some people got a sense that something was wrong, but couldn&#8217;t work out what it was until I told them.</p>
<p>This was a nice practical demonstration of Dual Coding theory, and lead into my argument for greater integration between visual and linguistic elements of computer languages.  However there&#8217;s probably a point in there about the design of presentation slides.  If you want people to listen to what you&#8217;re saying, put short prompts on your slides, but not real sentences, because the audience won&#8217;t be able read them while listening to your voice.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://yaxu.org/attending-to-presentation-slides/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Workshop output</title>
		<link>http://yaxu.org/workshop-output/</link>
		<comments>http://yaxu.org/workshop-output/#comments</comments>
		<pubDate>Sun, 06 Feb 2011 23:57:47 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[haskell]]></category>
		<category><![CDATA[livecoding]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[texture]]></category>
		<category><![CDATA[visualisation]]></category>

		<guid isPermaLink="false">http://yaxu.org/?p=574</guid>
		<description><![CDATA[The Text live coding workshop went really well, surprisingly well considering it was the first time anyone apart from me had used it and (so I found out after) most of the participants didn&#8217;t have any programming experience. The six participants took to the various combinators surprisingly quickly, the main stumbling block being getting the [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://access-space.lowtech.org/doku.php?id=events:audio_workshop_-_alex_mclean">Text live coding workshop</a> went really well, surprisingly well considering it was the first time anyone apart from me had used it and (so I found out after) most of the participants didn&#8217;t have any programming experience.  The six participants took to the various combinators surprisingly quickly, the main stumbling block being getting the functions to connect in the right way&#8230;  Some UI work to do there, and I got some valuable feedback on it.</p>
<p>Once the participants had got the hang of things on headphones, we all switched to speakers and the seven of us played acid techno for an hour or so together, in perfect time sync thanks to <a href="http://netclock.slab.org/">netclock</a>.  Here&#8217;s a mobile phone snippet:</p>
<p><iframe src="http://player.vimeo.com/video/19601354" width="400" height="300" frameborder="0"></iframe></p>
<p>The sound quality doesn&#8217;t capture it there, but for me things got really interesting musically, and it was fun walking around the room panning between the seven players&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://yaxu.org/workshop-output/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Text update and source</title>
		<link>http://yaxu.org/text-update-and-source/</link>
		<comments>http://yaxu.org/text-update-and-source/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 12:52:02 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[haskell]]></category>
		<category><![CDATA[livecoding]]></category>
		<category><![CDATA[texture]]></category>
		<category><![CDATA[visualisation]]></category>

		<guid isPermaLink="false">http://yaxu.org/?p=567</guid>
		<description><![CDATA[I&#8217;ve updated Text a bit to improve the visual representation of higher order types (you&#8217;d probably need to full screen to view): I won&#8217;t be touching this until after the workshop on Saturday. I&#8217;ve also made the source for the visual interface available here under the GPLv3 free license. To get it actually working as [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve updated Text a bit to improve the visual representation of higher order types (you&#8217;d probably need to full screen to view):</p>
<p><iframe src="http://player.vimeo.com/video/19384095" width="400" height="300" frameborder="0"></iframe></p>
<p>I won&#8217;t be touching this until after <a href="http://access-space.lowtech.org/doku.php?id=events:audio_workshop_-_alex_mclean">the workshop</a> on Saturday.</p>
<p>I&#8217;ve also made the source for the visual interface available <a href="http://darcs.slab.org/index.cgi?r=text;a=summary">here</a> under the <a href="http://www.gnu.org/licenses/gpl.html">GPLv3</a> free license.  To get it actually working as above you&#8217;d also need to install my <a href="http://darcs.slab.org/index.cgi?r=tidal;a=summary">tidal library</a>, Jamie Forth&#8217;s <a href="http://darcs.slab.org/index.cgi?r=network%20(clock)%20stuff;a=summary">network sync</a>, my <a href="http://yaxu.org/datadirt/">sampler</a>, the nekobee synth, and somehow get it all working together.  In short, it&#8217;s a bit tricky, I&#8217;ll be working on packaging soonish though.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaxu.org/text-update-and-source/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Text</title>
		<link>http://yaxu.org/text/</link>
		<comments>http://yaxu.org/text/#comments</comments>
		<pubDate>Mon, 13 Dec 2010 10:03:30 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[haskell]]></category>
		<category><![CDATA[livecoding]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[texture]]></category>
		<category><![CDATA[visualisation]]></category>

		<guid isPermaLink="false">http://yaxu.org/?p=580</guid>
		<description><![CDATA[Text is a experimental visual language under development.  Code and docs will appear here at some point, but all I have for now is this video of a proof of concept. It&#8217;s basically Haskell but with syntax based on proximity in 2D space, rather than adjacency.  Type compatible things connect automatically, made possible though Haskell&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Text is a experimental visual language under development.  Code and docs will appear here at some point, but all I have for now is this video of a proof of concept.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="390" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://blip.tv/play/AYKOkxcC" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="390" src="http://blip.tv/play/AYKOkxcC" allowfullscreen="true"></embed></object></p>
<p>It&#8217;s basically Haskell but with syntax based on proximity in 2D space, rather than adjacency.  Type compatible things connect automatically, made possible though Haskell&#8217;s strong types and currying.  I implemented the interface in C, using clutter, and ended up implementing a lot of Haskell&#8217;s type system.  Whenever something changes it compiles the graph into Haskell code, which gets piped to ghci.  The different colours are the different types.  Stripes are curried function parameters.  Lots more to do, but I think this could be a really useful system for live performance.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaxu.org/text/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Visualisation of Live Code</title>
		<link>http://yaxu.org/visualisation-of-live-code/</link>
		<comments>http://yaxu.org/visualisation-of-live-code/#comments</comments>
		<pubDate>Sat, 29 May 2010 20:22:33 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[livecoding]]></category>
		<category><![CDATA[visualisation]]></category>

		<guid isPermaLink="false">http://yaxu.org/?p=431</guid>
		<description><![CDATA[I wrote a paper with Dave Griffiths and Nick Collins on the visualisation of live code, exploring ideas around live coding interfaces, accepted for the EVA London 2010 conference in July. A HTML version is below, or see the PDF Preprint. Alex McLean (Goldsmiths), Dave Griffiths (FoAM), Nick Collins (University of Sussex) and Geraint Wiggins [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote a paper with <a href="http://pawfal.org/dave/">Dave Griffiths</a> and <a href="http://www.informatics.sussex.ac.uk/users/nc81/">Nick Collins</a> on the visualisation of live code, exploring ideas around live coding interfaces, accepted for the <a href="http://www.eva-conferences.com/eva_london/2010_home">EVA London 2010</a> conference in July. A HTML version is below, or see the <a href="http://yaxu.org/writing/visualisation-of-live-code.pdf">PDF Preprint</a>.</p>
<hr />
<p>Alex McLean (Goldsmiths), Dave Griffiths (FoAM), Nick Collins (University of Sussex) and Geraint Wiggins (Goldsmiths)</p>
<h2>Abstract</h2>
<p>In this paper we outline the issues surrounding live coding which is projected for an audience, and in this context, approaches to code visualisation. This includes natural language parsing techniques, using geometrical properties of space in language semantics, representation of execution flow in live coding environments, code as visual data and computer games as live coding environments. We will also touch on the unifying perceptual basis behind symbols, graphics, movement and sound.</p>
<p><span id="more-431"></span></p>
<h2>1. Introduction</h2>
<p>Live coding, the improvisation of video and/or music using computer language, has developed into an active field of research and arts practice over the last decade <span class="cite">(Wang and Cook; <a href="#Wang04">2004</a>; Ward et al.; <a href="#Ward04">2004</a>; Collins et al.; <a href="#Collins03a">2003</a>)</span>. Live coding is made possible by dynamic language interpreters, which allow algorithms to run while they are being modified, taking on changes without any break in the audio or visual output generated by the code. The development of software becomes part of the art in a very real sense; at the beginning of a typical live coded performance there is no code and no audiovisual output, but the output grows in complexity with the code.</p>
<p>A frequent criticism of computer music is the lack of performance, where an artist hides behind their laptop screen, and the audience is unable to see any activity that might ground their experience of the music <span class="cite">(Cascone; <a href="#Cascone03">2003</a>)</span>. Solutions continue to be explored, with many researchers focussing on developing tangible interfaces which bring the computer closer to a traditional instrument. However, a live coding tradition has developed taking the straightforward approach of projecting whatever is on the artist’s screen: the code, moving cursors, the debugging output&#8230; The audience is then able to see the human movements and code structures behind an improvisation.</p>
<p>This tradition of projecting screens is itself open to criticism; the audience members may feel distracted, or perhaps even excluded by the projection of code written in language they do not necessarily understand. The alternative of showing nothing, hiding behind a laptop screen, is felt to be untenable, but perhaps more should be understood about the practice of projecting code. Watching the articulations of a live guitarist may enhance the experience of a listener who does not play a musical instrument themselves. Can a live coder elucidate the more abstract thinking gestures of their practice? The search is on for ways of visualising code development that allows non-programmers to enhance their enjoyment and understanding of a live coded piece.</p>
<h2>2. Perceiving code</h2>
<p>Generally, a programmer cannot work with their eyes closed; a programmer’s text editor is a visual interface<a class="footnote" href="#a0000000004"><sup>1</sup></a>. Text editors have gained many features over the last few decades, to the point where we no longer call them text editors but Interactive Development Environments (IDEs). The visual presentation of code has developed its own aesthetic; colour is used to highlight syntax, fonts have been designed for code (e.g. ProFont, proggy), and visual tools for navigating around tree-like code structures. Nonetheless computation is fundamentally about symbol manipulation, and the composition of symbols lies at the heart of every IDE. When our eyes saccade across code, the shapes on the screen are categorised into these symbols, and we perceive them as the tokens (words) and statements (sentences) making up our program. The computer interprets code as a one dimensional string of discrete symbols, but humans perceive it as symbols within a spatial scene. Expert programmers may be able to chunk larger blocks of code as meaningful entities; less experienced live code audiences may become stuck on small details, but an elaborate dance of spatial change to code is evident over time.</p>
<p>Our perception of source code is aided not only by spatial organisation, but also by colour highlighting, in-line documentation and the well chosen names given to abstractions and data structures. These features are collectively known as secondary notation<a class="footnote" href="#a0000000005"><sup>2</sup></a>, being that ignored by the interpreter but of benefit to programmers in understanding and organising their code. A challenge to those pushing the boundaries of programming language design is to find ways of taking what is normally secondary notation as primary. For example the ColorForth language uses colour as primary syntax, replacing the need for punctuation. Even more radically, the instruction set of the Piet language illustrated in Figure <a href="#fig:piet">2</a> is formed by first order colour relationships within a two dimensional grid; instructions include directional modifiers so that control flow travels in two dimensions. Piet, among many other esoteric languages, is inspired by the two dimensional syntax of Befunge shown in Fig. <a href="#fig:befunge">1</a>, a textual language where arrow-like characters change the direction of control flow. Some languages bordering on mainstream, such as Haskell and to a lesser extent Python have a syntax that takes two dimensional arrangement into account when grouping statements, although this is otherwise unusual.</p>
<p>Secondary notation is of great importance to human understanding, despite being ignored by the computer interpreter. Without spatial layout and elements of natural language a program would be next to unreadable by humans. Humans live an embodied existence in a spatial environment, and while we are perfectly able to perform computation, our spatial ability still supports such thought processes <span class="cite">(Gärdenfors; <a href="#Gardenfors00">2000</a>)</span>. As a result source code, as Human Computer Interface, is a half-way mixture of geometrical relations and symbolic structures. This is true even of the ‘patcher’ dataflow languages in common use in the digital arts <span class="cite">(Puckette; <a href="#Puckette88">1988</a>)</span>, such as Max and PureData. Patcher languages are often described as ‘visual’, but in fact all the functions are defined textually, and the visual arrangement is purely secondary notation <a class="footnote" href="#a0000000006"><sup>3</sup></a>.</p>
<p>Visualisation of code may either act as secondary notation in order to enhance code comprehension for human viewers, or go further as primary syntax to enhance meaning for both humans and computers. The latter is of particular interest, as to some extent it requires making models of human perception the basis of computer language.</p>
<h3 id="a0000000007">2.1. Morphology of Sound, Shape and Symbols</h3>
<p>TurTan is a geometric visual live coding language introduced by <span class="cite">Gallardo et al. (<a href="#Gallardo08">2008</a>)</span>, using the technology of the Reactable <span class="cite">(Jordà et al.; <a href="#Jorda07">2007</a>)</span>. The functions of the language are manipulated as physical blocks that are placed on a tabletop interface, with nearest neighbours forming a sequence, and relative angle mapping to the function’s parameter. The functions describe turtle graphics operations, and the resulting recursive forms are continuously updated on the table surface display.</p>
<p>TurTan inspired a system by Alex McLean and introduced here, with the working title of Acid Sketching. In Acid Sketching, a sound is specified simply by drawing a shape, where morphological measurements are mapped to parameters of an acid bassline synthesiser. The area of a shape is mapped to pitch, its regularity (perimeter length vs area) mapped to envelope modulation, and relative angle of central axis mapped to resonance. Several such shapes are drawn in an arrangement, where a minimum spanning tree of their centroids is taken as a polyphonic sequence, where distance equals relative time. Feedback may be projected back on to the drawing surface, so shapes flash red as they are triggered. A static figure would not make this clearer, however illustrative video is available online at <a href="http://yaxu.org/acid-sketching/">http://yaxu.org/acid-sketching/</a>.</p>
<p>While Acid Sketching and TurTan are far from what is typically understood as live coding, both lead us to challenge understanding of the role of symbols, shape and geometry in computation. Investigating how such concrete forms of interaction could be married with the abstractions of general, Turing complete programming languages could be an interesting research topic itself.</p>
<p>Critically connected to live coding engagement with time-based media, is the time-based revelation of code itself. For electroacoustic music, Pierre Schaeffer’s theories of sound timbre have been further dynamised into the time-variant sonic gestures of Denis Smalley’s spectromorphology <span class="cite">(Landy; <a href="#Landy07">2007</a>)</span>. For live coding, we might analogously dub ’codeomorphology’ as the changing shape of code over time. Examples include the accumulating code revisions referenced on the edge of ChucK language Audicle documents, or SuperCollider’s ‘History’ class to document a live code performance. More visual representations of change over time would include accessible visualisations of programmer activity. Metrics might be displayed to characterise changes per second, from coarse keystroke counts to the depth of parse tree disruption; this brings us to self-evaluating performances, and coder re-coding of their very visualisations&#8230;</p>
<h2>3. Visual experiments in live code</h2>
<p>This section serves to introduce four novel visual/geometric live coding systems by Dave Griffiths, namely <em>Scheme Bricks</em>, <em>Betablocker</em>, <em>Al-Jazari</em> and <em>Daisy Chain</em>, along with some of the systems which inspired them. All of these languages were constructed within Fluxus, a game engine designed for live coding performances and experiments and available under a free (GPL) license from <a href="http://www.pawfal.org/fluxus/">http://www.pawfal.org/fluxus/</a>.</p>
<h3 id="sec:exec-flow-oper">3.1. Execution flow and operational events</h3>
<div id="fig:befunge" class="figure">
<pre style="color: #000;">vv  &lt;      &lt;
    2
    ^  v&lt;
 v1&lt;?&gt;3v4
    ^   ^
&gt;  &gt;?&gt;  ?&gt;5^
    v   v
 v9&lt;?&gt;7v6
    v  v&lt;
    8
 .  &gt;  &gt;   ^
^&lt;</pre>
<div class="caption"><strong>Figure 1</strong>: <span>A pseudo-random number generator written in the two-dimensional language Befunge.</span></div>
</div>
<div id="fig:piet" class="figure">
<p><img style="width: 75mm;" src="/images/visualisationlivecode/img-0001.png" alt="\includegraphics[width=75mm]{/images/visualisationlivecode/piet.png}" /></p>
<div class="caption"><strong>Figure 2</strong>: <span>Source code written in the Piet language with two dimensional, colour syntax. Prints out the text “Hello, world!”. Image © Thomas Schoch 2006. Used under the Creative Commons BY-SA 2.5 license. </span></div>
</div>
<div id="fig:corewar" class="figure">
<p><img style="width: 75mm;" src="/images/visualisationlivecode/img-0002.png" alt="\includegraphics[width=75mm]{/images/visualisationlivecode/corewar.png}" /></p>
<div class="caption"><strong>Figure 3</strong>: <span>Core war runtime display, showing visualisation of process memory shared between the players</span></div>
</div>
<div id="fig:betablocker" class="figure">
<p><img style="width: 75mm;" src="/images/visualisationlivecode/img-0003.jpg" alt="\includegraphics[width=75mm]{/images/visualisationlivecode/betablocker.jpg}" /></p>
<div class="caption"><strong>Figure 4</strong>: <span>A live edit in the Betablocker environment, selecting an instruction from a wheel of possibilities.</span></div>
</div>
<div id="fig:aljazari" class="figure">
<p><img style="width: 75mm;" src="/images/visualisationlivecode/img-0004.jpg" alt="\includegraphics[width=75mm]{/images/visualisationlivecode/aljazari.jpg}" /></p>
<div class="caption"><strong>Figure 5</strong>: <span>The robots of Al-Jazari, each with a thought bubble containing a program, live coded with a gamepad.</span></div>
</div>
<div id="fig:schemebricks" class="figure">
<p><img style="width: 75mm;" src="/images/visualisationlivecode/img-0005.jpg" alt="\includegraphics[width=75mm]{/images/visualisationlivecode/sbricks.jpg}" /></p>
<div class="caption"><strong>Figure 6</strong>: <span>SchemeBricks, a lisp environment using colour instead of parenthesis, and flashes as a cue for control flow.</span></div>
</div>
<div id="fig:daisychain" class="figure">
<p><img style="width: 75mm;" src="/images/visualisationlivecode/img-0006.png" alt="\includegraphics[width=75mm]{/images/visualisationlivecode/daisychain.png}" /></p>
<div class="caption"><strong>Figure 7</strong>: <span>A section of a Daisy Chain program.</span></div>
</div>
<p>Computation is a metaphorical movement, where algorithmic processes operate on data (which can include the algorithms themselves) in memory in the discrete time steps of the CPU. Ways of visualising memory as it is changed have been developed for conventional debuggers, particularly in microcontroller applications where memory is small enough to be viewed in its entirety. More novel visualisations also exist, such as Tierra, an artificial life simulation where code evolves in a Darwinian competition which can only be appreciated when viewed as such, or Core War (Fig. <a href="#fig:corewar">3</a>), a game where player/programmers write code which fight over memory address space.</p>
<p>Live coding has the unique opportunity to visualise the movement of an underlying process while it is being formed. This helps an audience appreciate a live coding performance in a more meaningful way – as it bridges the gap between an abstract description of a process (the code) and process itself (the generated pattern of movement through memory). Betablocker (Fig. <a href="#fig:betablocker">4</a>) is a raw visualisation of an imaginary 8-bit processor operating in 256 bytes of memory. This brightly coloured live coding environment is operated by writing assembly code with a gamepad. The processes are visualised while they operate on the memory addresses and trigger sound events. Processes are able to modify themselves and each other, resulting in highly dynamic relationships which are challenging to control.</p>
<p>A more traditional method of programming is employed in <em>Scheme Bricks</em> (Fig. <a href="#fig:schemebricks">6</a>), a geometric interface for constructing Scheme programs. Scheme Bricks takes advantage of the isomorphism of code and data in the Scheme programming language, and is inspired by the Scratch language designed for use by children <span class="cite">(Resnick et al.; <a href="#Resnick09">2009</a>)</span>. Scheme Bricks allows you to drag, drop and plug together programs rather than typing. This has some potential side effects; in a performance situation, it is impossible to have a mismatched parenthesis error, as is common in other lisp-like languages. It is quicker to change the overall structure of the program as sections can be removed and reinserted easily by drag/drop actions. Unwanted sections are pulled out of the program and set aside rather than being deleted, and accumulate around the program as ‘spare parts’ which are often later ‘recycled’ by being pulled back into another section.</p>
<p>Scheme Bricks uses visual feedback to relate sound events to the code; the instruction which triggered a sound event flashes as the sound is played. This minimal approach to process visualisation makes the relationship between sound and code structure clearer than <em>Betablocker</em>’s more complete visualisation, and is useful for the performer to immediately locate the code generating a particular sound event.</p>
<p><em>Daisy Chain</em> (Fig. <a href="#fig:daisychain">7</a>) is an attempt to embrace less rigid structures while maintaining enough of a computational basis to qualify as a live coding performance. It follows a processing system based on Petri nets <span class="cite">(Petri; <a href="#Petri66">1966</a>)</span>, where executable instruction tokens move around a directed graph. Daisy Chain programs create and modify the graph topologies that they inhabit, producing sounds as a side effect of the computation. The look of the performance was designed to be as far from conventional programming as possible, hand animated flowers and drawn instruction symbols moving around graphs constrained by spring models.</p>
<p>The nodes of a Daisy Chain graph have a fixed lifetime, which was introduced in order to counter a common problem with live coding where the audience watching and performer concentrating on programming tend to perceive time differently. Daisy Chain prevents musical structures from persisting too long, keeping the performance moving forward at a rate the performer can control beforehand.</p>
<h3>3.2. Computation in game worlds</h3>
<p>Code has a long tradition of use in games as a gameplay mechanic, an early example being Core War developed in the mid 1980s and discussed above in §<a href="#sec:exec-flow-oper">3.1</a>. More recent games such as Carnage Heart and Marionette Handler are mainstream games for the Playstation which employ programming environments using icons. These programs are used to control robots which battle it out in large virtual arenas. Popular game titles such as Little Big Planet allow the player to construct machines as part of game worlds, complex enough to support Turing complete computation. Kodu, a research project at Microsoft goes even further, as an end-user games programming environment on the XBox.</p>
<p><em>Al-Jazari</em> is a deliberate attempt to fuse games and live coding performances. It was designed to use a similar visual process to BetaBlocker, but this time mediated through the actions of robotic agents moving around a 3D world, triggering sounds as they do so (Fig. <a href="#fig:aljazari">5</a>). The use of visual agents following commands rather than abstract processes is intended to make the performance more immediately understandable for the audience. Al Jazari has been expanded as an art installation, audience participatory performance and recently as a facebook game &#8211; with the aim to increase the accessibility of live coding to the point where anyone can become a live coder.</p>
<h2 id="a0000000010">4. Conclusion</h2>
<p>Visualisation is central to live coding. In this article, we have confronted how code is perceived by performers and audiences, and in what ways visual elements contribute to the primary syntax and semantics of a programming language meant for live coding. Consideration of visual elements of code have also become essential as live coding has formed the basis of virtual game worlds. We have introduced a number of novel systems, presented here as explorations of these themes. Visualisation of live code however remains under-investigated in terms of the psychology of programming; while <span class="cite">Blackwell and Collins (<a href="#Blackwell05">2005</a>)</span> lead the way into HCI, evaluation protocols are yet to be adapted and applied to experience of live coded performances. This is however fertile ground for practice based research, and we anticipate the changing shapes of code over time, a codeomorphology at timescales from individual performances to lifetimes of artistic and technological development.</p>
<div>
<h2>Bibliography</h2>
<p>[<a name="Blackwell05"></a>1]Blackwell, A. and Collins, N. (2005). The programming language as a musical instrument. In <em>Proceedings of PPIG05</em>. University of Sussex.</p>
<p>[<a name="Cascone03"></a>2]Cascone, K. (2003). Grain, sequence, system (three levels of reception in the performance of laptop music). In Kleiner, M. S. and Szepanski, A., editors, <em>Soundcultures</em>. Suhrkamp.</p>
<p>[<a name="Collins03a"></a>3]Collins, N., McLean, A., Rohrhuber, J., and Ward, A. (2003). Live coding in laptop performance. <em>Organised Sound</em>, 8(03):321–330.</p>
<p>[<a name="Gallardo08"></a>4]Gallardo, D., Julià, C. F., and Jordà, S. (2008). Turtan: a tangible programming language for creative exploration. In <em>Third annual IEEE international workshop on horizontal human-computer systems (TABLETOP)</em>.</p>
<p>[<a name="Gardenfors00"></a>5]Gärdenfors, P. (2000). <em>Conceptual Spaces: The Geometry of Thought</em>. The MIT Press.</p>
<p>[<a name="Jorda07"></a>6]Jordà, S., Geiger, G., Alonso, M., and Kaltenbrunner, M. (2007). The reactable: Exploring the synergy between live music performance and tabletop tangible interfaces. In <em>Proc. Intl. Conf. Tangible and Embedded Interaction (TEI07)</em>.</p>
<p>[<a name="Landy07"></a>7]Landy, L. (2007). <em>Understanding the Art of Sound Organization</em>. The MIT Press.</p>
<p>[<a name="Petri66"></a>8]Petri, C. A. (1966). Communication with automata. Technical report, Applied Data Research Inc.</p>
<p>[<a name="Puckette88"></a>9]Puckette, M. (1988). The patcher. In <em>Proceedings of International Computer Music Conference</em>.</p>
<p>[<a name="Resnick09"></a>10]Resnick, M., Maloney, J., Hernández, A. M., Rusk, N., Eastmond, E., Brennan, K., Millner, A., Rosenbaum, E., Silver, J., Silverman, B., and Kafai, Y. (2009). Scratch: programming for all. <em>Commun. ACM</em>, 52(11):60–67.</p>
<p>[<a name="Wang04"></a>11]Wang, G. and Cook, P. R. (2004). On-the-fly programming: using code as an expressive musical instrument. In <em>NIME ’04: Proceedings of the 2004 conference on New interfaces for musical expression</em>, pages 138–143, Singapore, Singapore. National University of Singapore.</p>
<p>[<a name="Ward04"></a>12]Ward, A., Rohrhuber, J., Olofsson, F., McLean, A., Griffiths, D., Collins, N., and Alexander, A. (2004). Live algorithm programming and a temporary organisation for its promotion. In Goriunova, O. and Shulgin, A., editors, <em>read_me — Software Art and Cultures</em>.</p>
</div>
<div id="footnotes">
<p><strong>Footnotes</strong></p>
<ol>
<li id="a0000000004">A counter-example would be programming interfaces for the blind, which employ speech synthesis.</li>
<li id="a0000000005"><del>The term ‘secondary syntax’ is problematic. Firstly, secondary syntax is only secondary relative to the computer interpreter, and not the human. Secondly, secondary syntax is not syntax in any clear sense; indeed spatial relationships are the basis of semantic meaning as understood in the field of cognitive linguistics. However as secondary syntax is the standard term used in the field of Human Computer Interaction (HCI) we persist with using it here. </del> Correction &#8211; the term is actually &#8220;secondary notation&#8221;, which is not problematic at all and is corrected in the above post-publication.</li>
<li id="a0000000006">In Max, left-right position alters execution order, although relying upon this is discouraged in favour of the ‘trigger’ object.</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://yaxu.org/visualisation-of-live-code/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Acid sketching</title>
		<link>http://yaxu.org/acid-sketching/</link>
		<comments>http://yaxu.org/acid-sketching/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 00:00:42 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[music]]></category>
		<category><![CDATA[openframeworks]]></category>
		<category><![CDATA[visualisation]]></category>

		<guid isPermaLink="false">http://yaxu.org/?p=347</guid>
		<description><![CDATA[I&#8217;ve been thinking about visual languages and the morphology of symbols (as opposed to words) for a while. I had the opportunity to start putting some of these ideas into code at a really excellent openframeworks workshop this week, run by Joel Gethin Lewis and Arturo Castro. Here&#8217;s what it does: Makes the point nicely [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been thinking about visual languages and the morphology of symbols (as opposed to words) for a while.  I had the opportunity to start putting some of these ideas into code at a really excellent <a href="http://wiki.openframeworks.cc/index.php?title=OF%C2%A0Goldsmiths">openframeworks workshop</a> this week, run by <a href="http://www.joelgethinlewis.com/">Joel Gethin Lewis</a> and <a href="http://arturocastro.net/">Arturo Castro</a>.</p>
<p>Here&#8217;s what it does:</p>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7492566&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=7492566&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<p>Makes the point nicely that symbols and spaces can intertwine.</p>
<p>Using opencv blob detection, the regularity, direction and area of the shapes map to envelope modulation, resonance and pitch.  The drawing is then sequenced into a melody using the minimum spanning tree (from the boost library) of the shape centroids, where distance maps to inter-onset interval.</p>
<p>It also has a mode for projecting the red circles and highlights back on the drawing surface which worked well.</p>
<p>This is only the second thing I&#8217;ve made with openframeworks, and while I don&#8217;t really get on with the codeblocks editor recommended for linux, I&#8217;m impressed with how accessible it makes opencv and all that.</p>
<p>Update: <a href="http://doc.gold.ac.uk/~ma503am/software/cycle.zip">sourcecode</a></p>
]]></content:encoded>
			<wfw:commentRss>http://yaxu.org/acid-sketching/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Mary Hallock-Greenewalt</title>
		<link>http://yaxu.org/mary-hallock-greenewalt/</link>
		<comments>http://yaxu.org/mary-hallock-greenewalt/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 00:20:07 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[visualisation]]></category>
		<category><![CDATA[AdaLovelaceDay09]]></category>

		<guid isPermaLink="false">http://yaxu.org/?p=167</guid>
		<description><![CDATA[&#8220;Broadly, it is my desire to express emotions by means of timed variations of light and color in a manner analogous to that employed in the art of music. Such expression may either be for its own sake, or &#8230; as an accompaniment.&#8221; In 1906, about 40 years after the invention of the commercial light [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_173" class="wp-caption alignright" style="width: 253px"><a href="http://yaxu.org/wp-content/uploads/2009/03/mary2.jpg"><img class="size-medium wp-image-173" title="Mary Hallock-Greenwalt" src="http://yaxu.org/wp-content/uploads/2009/03/mary2-300x217.jpg" alt="Hallock-Greenwalt at the sarabet" width="243" height="176" /></a><p class="wp-caption-text">Hallock-Greenewalt at the sarabet</p></div>
<p><em>&#8220;Broadly, it is my desire to express emotions by means of timed variations of light and color in a manner analogous to that employed in the art of music. Such expression may either be for its own sake, or &#8230; as an accompaniment.&#8221;</em></p>
<p>In 1906, about 40 years after the invention of the commercial light bulb, Mary Hallock-Greenwalt (1871-1950) began work on her <a href="http://en.wikipedia.org/wiki/Color_organ">colour organ</a>, the <em>sarabet</em>.  She was an accomplished musician, but wanted to create an equivalent artform for colour which she called <em>nourathar</em> (derived from the Arabic for the essense/flavour/influence of light).  Interestingly though, she came to the conclusion that colour wasn&#8217;t as important as brightness:</p>
<p><em>&#8220;In this art they, the darknesses and brightnesses, constitute the woof of the play.  They carry a chief burden of the transmitted feeling.  They also tend to make a oneness out of more than one colour, or colours, simultaneously produced.&#8221;</em></p>
<p>She was also quick to dismiss the idea of direct mappings between music and colour.</p>
<p><em>&#8220;&#8230; there is no octave to color.  color has no harmonics. &#8230; Its pristine strength is such that no two colors can fit together as identical.&#8221;</em></p>
<p>While she composed nourathar pieces to accompany music, she was against cross-domain mappings in general.</p>
<p><em>&#8220;To seek to fasten the form of one art on the form of another art, is, on the face of it, a mistake, if not an impossibility.  They are organically different things.  They will speak in different ways.&#8221;</em></p>
<p>I&#8217;m not sure if I agree with this strong claim, the human senses are integrated after all.  But I still think it insightful to reject the naive &#8220;colour scales&#8221; which others came up with &#8212; while synaesthetics can experience pitch as colour (or vice versa), I understand that no two synaesthetics experience the same scale.</p>
<div id="attachment_176" class="wp-caption alignright" style="width: 214px"><a href="http://yaxu.org/wp-content/uploads/2009/03/87951135_67b776a24c_o.jpg"><img class="size-medium wp-image-176" title="Nourathar notation" src="http://yaxu.org/wp-content/uploads/2009/03/87951135_67b776a24c_o-204x300.jpg" alt="An example of Hallock-Greenewalt's patented notation system" width="204" height="300" /></a><p class="wp-caption-text">An example of Hallock-Greenewalt&#39;s patented notation system</p></div>
<p>All the quotes in this post came from Hallock-Greenewalt&#8217;s book &#8220;Nourathar: The Fine Art of Light-Color Playing&#8221;, which is a joy to read.  She was not the first colour organist, but from what I&#8217;ve seen she was the most insightful and interesting of the bunch.  Sadly however no video recordings can exist from back then, so we can only imagine what her performances could have been like, with only her notation to guide us.</p>
<p>I gave a quick <a href="http://dorkbotlondon.org/">dorkbot</a> presentation about Mary Hallock-Greenewalt a couple of years ago, and one audience member jokingly accused me of inventing her to justify VJ culture with false history.  Well her work is well documented in her writing and patent applications, but she should certainly be better known &#8212; I recently saw a talk about colour organists which didn&#8217;t mention her, despite her huge contribution to the field.</p>
<p>I&#8217;ll finish this post with one last quote from the woman herself.</p>
<p><em>&#8220;Is there no expressing of fervor in the deepening of a rose to red? Can quality of ardor not be suggested in the quickness or slowness with which this transition is done?  Can zeal or eagerness not be expressed in the manner of change from blue to purple?  Are colors not &#8220;warm&#8221; or &#8220;cold&#8221;?  Is there not the fervid, the burning of intensity of feeling in the ray&#8217;s glowing into or embering back?  So much there is to choose from.&#8221;</em></p>
<p>Posted on the occasion of <a href="http://findingada.com/">Ada Lovelace day 2009</a>.<em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://yaxu.org/mary-hallock-greenewalt/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Rhythm space</title>
		<link>http://yaxu.org/rhythm-space/</link>
		<comments>http://yaxu.org/rhythm-space/#comments</comments>
		<pubDate>Fri, 18 Apr 2008 10:17:26 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[music]]></category>
		<category><![CDATA[visualisation]]></category>

		<guid isPermaLink="false">http://doc.gold.ac.uk/~ma503am/alex/rhythm-space/</guid>
		<description><![CDATA[I&#8217;m working with Jamie Forth on ideas around spaces of rhythm. Here&#8217;s a demo (which might not work in feed readers): [kml_flashembed movie="http://doc.gold.ac.uk/~ma503am/software/space/audio.swf" height="300" width="400" bgcolor="#000000" /] The space has two quality dimensions, &#8220;intensity&#8221; (X) and &#8220;disorder&#8221; (Y). Drum patterns are arranged along these dimensions, so more intense ones are towards the left and more [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working with Jamie Forth on ideas around spaces of rhythm.  Here&#8217;s a demo (which might not work in feed readers):</p>
<p>[kml_flashembed movie="http://doc.gold.ac.uk/~ma503am/software/space/audio.swf" height="300" width="400" bgcolor="#000000" /]</p>
<p>The space has two quality dimensions, &#8220;intensity&#8221; (X) and &#8220;disorder&#8221; (Y).  Drum patterns are arranged along these dimensions, so more intense ones are towards the left and more ordered ones towards the top.</p>
<p>Draw a line from a high hat to a kick drum.  If you draw a short line the rhythms will be more homogenous.   Certain angles have certain feels to them.  Maybe.  It seems a nice way of playing with polymetric rhythms as vectors anyway.</p>
<p>The demo by the way is coded in <a href="http://haxe.org/">haxe</a> and compiled to flash.  The source code is <a href="http://doc.gold.ac.uk/~ma503am/software/space/Audio.hx">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaxu.org/rhythm-space/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Textual patching</title>
		<link>http://yaxu.org/textual-patching/</link>
		<comments>http://yaxu.org/textual-patching/#comments</comments>
		<pubDate>Mon, 07 Jan 2008 15:30:15 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[music]]></category>
		<category><![CDATA[visualisation]]></category>

		<guid isPermaLink="false">http://doc.gold.ac.uk/~ma503am/alex/textual-patching/</guid>
		<description><![CDATA[I wrote a perl script that allows you to compose puredata patches in a text editor. You define the patch using ASCII art like this: &#160;&#160;&#160;&#160;*------------------------* &#160;&#160;&#160;&#160;&#124;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.--------.&#160;&#160;&#160;&#160;\ &#160;&#160;.-x--------.&#160;&#160;&#124;&#160;osc~&#160;5&#160;&#124;&#160;&#160;&#160;&#160;&#160;* &#160;&#160;&#124;&#160;osc~&#160;500&#160;&#124;&#160;&#160;`-x------'&#160;&#160;&#160;&#160;&#160;&#124; &#160;&#160;`-x--------'&#160;&#160;&#160;&#160;&#124;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#124; &#160;&#160;&#160;&#160;&#124;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.-x------.&#160;&#160;&#160;&#160;&#160;&#124; &#160;&#160;&#160;&#160;&#124;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#124;&#160;*~&#160;300&#160;&#124;&#160;&#160;&#160;&#160;&#160;&#124; &#160;&#160;&#160;&#160;&#124;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;`-x------'&#160;&#160;&#160;&#160;&#160;&#124; &#160;&#160;&#160;&#160;*---*&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#124;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#124; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#124;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;*------------* &#160;&#160;&#160;&#160;&#160;&#160;.-x------. &#160;&#160;&#160;&#160;&#160;&#160;&#124;&#160;*~&#160;0.2&#160;&#124; &#160;&#160;&#160;&#160;&#160;&#160;`-x------' &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#124; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;* &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#124;\ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#124;&#160;* &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#124;&#160;&#124; &#160;&#160;&#160;&#160;&#160;&#160;.-x-x--. &#160;&#160;&#160;&#160;&#160;&#160;&#124;&#160;dac~&#160;&#124; &#160;&#160;&#160;&#160;&#160;&#160;`------' Then run the Perl script over it to produce [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote a perl script that allows you to compose <a href="http://puredata.info/">puredata</a> patches in a text editor.  You define the patch using ASCII art like this:</p>
<p><code><br />
&nbsp;&nbsp;&nbsp;&nbsp;*------------------------*<br />
&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.--------.&nbsp;&nbsp;&nbsp;&nbsp;\<br />
&nbsp;&nbsp;.-x--------.&nbsp;&nbsp;|&nbsp;osc~&nbsp;5&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />
&nbsp;&nbsp;|&nbsp;osc~&nbsp;500&nbsp;|&nbsp;&nbsp;`-x------'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />
&nbsp;&nbsp;`-x--------'&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />
&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.-x------.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />
&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;*~&nbsp;300&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />
&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`-x------'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />
&nbsp;&nbsp;&nbsp;&nbsp;*---*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*------------*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.-x------.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;*~&nbsp;0.2&nbsp;|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`-x------'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.-x-x--.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;dac~&nbsp;|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`------'<br />
</code></p>
<p>Then run the Perl script over it to produce a .pd file, that you can then load into puredata to get this:</p>
<p><img src="http://doc.gold.ac.uk/%7Ema503am/alex/wp-content/uploads/2008/01/patch.png" alt="patch.png" /></p>
<p>The ASCII syntax basically allows you to define pd objects and connect them together. Layout is preserved.  Much like in ghostbusters, you can&#8217;t cross the lines, and there isn&#8217;t syntax for different box types (messages and numbers).  Fixing this would be short work, but I ran out of train journey :)</p>
<p>There is a particular syntax for drawing the lines.  You use <strong>-</strong> for going left and right, <strong>|</strong> for going up and down and <strong>\</strong> and <strong>/</strong> for going diagonally.  To change direction or fork a wire you have to place a <strong>*</strong> .  Mark inlets and outlets with<strong> x</strong> .</p>
<p>I think this shows nicely how there is no real difference between patching and coding.  Shades of pixels are an alphabet, anything can be a program if you define a suitable interpreter to go with it.</p>
<p>Sadly you can&#8217;t do live patching with this, but perhaps this could be a starting point for thinking about more interesting ways of programming with text.</p>
<p>If you are curious you can <a href="/~ma503am/software/textual-pd.tar.gz">download the script (and patch) here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaxu.org/textual-patching/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

