How I Drew One Of My Pictures [1]

Adrian Ward BSc, Sidestream, London

email: adrian@sidestream.org

Addendum

This essay appears in it's original form, to accompany the Signwave Autoshop application (available from http://autoshop.signwave.co.uk) but was re-written and presented at the Generate Art '99 Conference in Milan, Italy recently. The newer essay (entitled "The Authorship of Generative Art") can be found at http://www.sidestream.org/ga99.

Introduction

To begin with, let us examine the notions of creativity and originality. The concept of value, as bestowed by authenticity is only inherent when a work is unique and (mostly) irreproducible in it's native medium. Think of a famous painting: only the original canvas can demand such high prices.

In a new, digital medium, the final work is generally not valued in the same way. A stretch of video art can be copied infinitely [2] - how can one place a value onto it? Instead, the process becomes valued. We consider the process of creation and creativity to be valued in the place of authenticity.

We might consider net.art to be valuable, only because we can appreciate the value of the process that went into making it.

So it would be a logical conclusion that the complexity or "authenticity" of the process bestows value upon the resulting work. The process must be artistically rigorous and intricate.

The process of creativity

It is possible to refine (resolve?) many of these creative processes into directives or instructions. To give precise instructions on the construction of a creative work is - in itself - a complex, authentic and intricate process. To create "generative" systems (units able to execute a set of creative directives) causes whatever the outcome of the units to be artistically rigorous (the notions of creativity are inherited from the true creator) as well as possessing the properties of a regular creative piece of work.

And yet the output from many generative systems are not valued simply because they can be such endless, infinite resources. To have a cash register sing songs [3] for ten years would not generate creative music, but the process of getting the machine to do so would retain it's creativeness, and hence it's value.

Therefore, to program a computer to produce endless amounts of "creativity" presents two interesting notions of creativity:

1 - the value of the creativity is not with the output, but with the coding

2 - the "artwork" can be distributed infinitely in the digital medium

It is ironic that in this situation, not only is the final output "valueless" (because it can be infinitely reproduced), but the generative system (the program) is valueless too, because computer programs can be copied infinitely.

Where is the act of creating art?

When a programmer develops a generative system, they are in a creative act of art [4]. Programming is no less an art form than, say, painting is a technical process. Once the system is complete, the artwork is over. What remains is the process of creativity. Much like the canvas in the gallery, the program stands as a legacy to the creative act.

For a programmer, the process of generating the system must surely be the most important factor of the artwork.

Structures of Creativity

Christmas Day, 1983. My 7th Birthday. My Mother had bought the family our first Sinclair ZX Spectrum. It had 48k of RAM and rubber keys that got stuck under the metal plating. It came with a manual and a tape of programs you could load yourself. I remember wondering what exactly this box did, and upon seeing it plugged into the television set and turned on the first time, a sense of amazement swept across me as I could see how doing things with the box could change the crude characters on the television screen.

Learning to program the Spectrum has - quite possibly - been the single most important part of my life so far. Suddenly I could automate processes and achieve anything I wanted - within reason. Prior to this event, I had never ever been able to change what I saw on the TV set in front of me [5]. The Spectrum made it possible (easy!) to do. To start with, the process was that of copying code from the manual and replicating the examples they gave: a clock (even though the Spectrum didn't retain any internal clock itself), a number guessing game, a hangman game.

Before long I was changing the code in the manual to do whatever I felt. Often my programs would be of little value, because my experiments were not necessarily trying to achieve anything with the computer. Without realising it, I was undoing one of the major rules of computer programming: Computer programs solve problems. Mine didn't. Mine just did things. I wrote a substantial number of kamikaze programs: Code which, upon running, trashed the memory and caused the computer to lock up. If you were lucky, the Spectrum would garbage the screen before hanging.

It is only with hindsight that I can see that the programming I was doing back then was not traditional programming. Traditional programming is about adding formulas together and deriving data into other data to solve a real world problem. Traditional programming was 1+1=2, and if this equals that then do whatever. My programs were forays into an area of computing that represented a purely abstract approach to code structures. My programs came from somewhere indiscernible inside me. I couldn't ever pinpoint why I wanted to code something to do anything. I just wanted to. What came out of me was sheer creativeness, not structural solutions. I rarely kept my creations, instead preferring to snatch the power cord out of the back of the machine when someone walked into the room, as though I were ashamed of my creativeness.

It is only recently that I have reflected upon my time as a child, growing up with technology around me. I was labelled a programmer and figured that was what my call in life was to be. Because I had a gift for generating code structures, it was assumed (even by myself) that I was a technical scientist. Soon the Spectrum went out the window and I was playing with PCs. I used the PC in a very similar manner to the Spectrum; I made it do things.

When you use a PC, you have to understand the things that go on inside it, otherwise the chances are you'll break it. My friends will readily admit that those who don't understand why and how a PC works are more likely to find themselves with a broken PC, running for help to those who do know. When you use a PC (even more so Microsoft Windows) you are forced to learn the intricacies of it's guts. You have to understand that by moving this file out of that directory, you will be breaking these features of your Operating System. You have to learn what each component does, and why it might be broken.

So I found myself increasingly expanding my knowledge in technical ways. I could fix broken PCs easily, because I knew what was likely to go wrong. I could pre-empt most problems people had with PCs. My mind was filled with the optimal settings for HIMEM.SYS and whether someone really needed DEVICE=ANSI.SYS in their CONFIG.SYS file. Within a few years of using PCs, I had stopped programming things that represented a creative urge within me. Now I devoted all my time to being a repair mechanic.

Christmas Day, 1997. My 21st birthday. My parents had given me an Apple Macintosh computer. I remember thinking before I got it "I know nothing about Macintoshes. I haven't a clue how to fix it when it goes wrong". I worried about where exactly it held it's equivalent to CONFIG.SYS, and how did I change the settings for it's counterpart to HIMEM.SYS?

During the last year, I have solely used my Macintosh. Sometimes I used it as an interface to other computers (particularly onto a Linux machine - we have a LAN/intranet configuration) but I now do not use a PC.

When you use a Mac, all the complex issues of it's internal guts are hidden away from you. Even if you wanted to delve into it to try to figure out what is going on, you can't. Often you just have to restart the computer and wait for the smiley face. There are no CONFIG.SYS equivalents, because the Macintosh engineers didn't want you poking about inside [6].

Shortly after starting to use a Mac, I realised that computing was not about understanding how a computer worked. Computing was in fact a very creative process. The Macintosh abstracts you away from it's technology in the same way that my ZX Spectrum programs were abstractions away from pragmatic problem solutions. With a Mac, you can do things. You can also do things with a PC, granted, but because you have to understand a PC first, you spend all your time fixing and wangling and upgrading and avoiding problems. The Mac still goes wrong the same as a PC, except there's no call to understand why it went wrong. You just pull the power out the back and start again.

To me, using a Macintosh was a welcome return to my ZX Spectrum days. For me, the ubiquitous

© 1982 Sinclair Research, Ltd

message you get when you turn on a Spectrum is the equivalent to the smiley Mac Classic you are greeted with when you hit the power key on a Macintosh. It represents the return to readiness, a welcoming message, a signal that everything is okay and waiting to begin. PCs greet you with a beep and C:\> which is an empirical statement of data foremost and only a prompt for instructions secondly. If you press me hard, I might admit that Windows does away with the curt C:\>, but even when you are greeted with relaxing clouds and a Brian Eno start-up sound, you still have to understand that AUTOEXEC.BAT is sliding past, underneath all the slick graphics.

During the last year, I have been programming my Macintosh in ways that exactly reflect what I did with my ZX Spectrum. I can't actually remember writing a program for my Macintosh that actually solved a real world problem. I write programs that represent the purely creative side of my skills. My programs make pictures, generate music, write poetry, scramble data across a network, copy themselves to the video buffer to become self-portraits, crash the computer [7]. Yes, I have tried writing Kamikaze Mac applications.

Programming is my art form. I don't program to solve. I program to be creative. This project has given me the opportunity to culminate all my experimental creative programs into one big application. The result is an eclectic, confusing and non-linear array of creative code.

Signwave™ Autoshop™

This project is a computer program that seeks to explore this creativity and capture my personal creative act as a programmer. It will perform creative tasks that I have delegated to the computer. Some (most) of these tasks may well have been impossible without the use of the computer - but this does not influence the focus of creativeness. The creative act is with my programming.

Therefore a large amount of my documentation will surround the process I undertook to create Signwave™ Autoshop™ generative system. I have aimed to document the majority of my creative act, mostly as a series of short documents with instructions on how to achieve certain 'creative' tasks. It can be quite technical in nature at times - due to the technical nature of the medium.

Interfaces

The interface of a computer system (in professional circumstances) should generally be dictated by the processes the system is undertaking. "Multimedia" does not obey this rule.

When you see an hourglass, the system is busy. When you drag an icon, the system moves the resource represented by that icon. Why then is multimedia allowed to abandon these ideas? Because they are not "good"?

How can we justify representing an audio sound as a colour or shape on a computer system - just because the computer system allows us to? This is not rigorous. Why should a system turn a flowing grid of polygons into an array of ambient sounds - because it "can"? No.

New Media has discovered a niche of juxtaposing different existing mediums together to find new expressive forms of communication.

The Anti-Interface

As a final gesture of ironic, satirical and sarcastic expression, the Signwave™ Autoshop™ project will seek to destroy the myth of "Interface Condescension" (the notion that just because a system does something new, it should find an entirely new, patronising - and alien - interface) [8].

My last four years of study have been largely centred on this exact mode of research. We have been trying to discover new, exciting and breathtaking interfaces for our creativity. Well now it is time to drag that particular idea to the wastebasket (or, more accurately, pick it up with our immersive 3D VRML glove-interface and throw it into the void of cyberspace, where it can be disseminated by the AI-bots of William Gibson's "Matrix".).

Signwave™ Autoshop™ will portray the clean-cut, well-researched and founded guidelines of any Apple design-guideline abiding, industry standard, commercial software interface [9]. It deliberately will appear to look like a well-known commercial piece of software (without breaking any copyright infringement laws). It will appear to be a nothing "special".

However, because Signwave™ Autoshop™ is a two-sided project (see Introduction) it will be performing creative and experimental acts of generative systems through a very dry, clean-cut interface.

It will satirise the endless race to express "creativity" through interface design by making statements regarding juxtaposition of modes of operation: Signwave™ Autoshop™ will put "wild" creativity right up alongside technical design. It will hopefully cause amusement for the user, but more importantly, should question the whole ethos of "creative design".

Reasoning

Autoshop™ firstly is capturing my creativeness in code structures. Secondly, it is automating creativity. It is a 'machine for drawing' (in reference to the Oulipian 'Machines for Writing' [10]) which takes the strict instructive codes of the true creator and replicates them automatically. Many of the Oulipo techniques invented by the surreal members of the movement could be described as 'machines' in the sense that as soon as you derive creativity into instructions, (regardless of whether they're carried out by a mechanical machine, computer, or even a human following the instructions precisely) you have automated a creative process. Many of the following "How to" sections could be carried out by a human being without going near a computer.

The "randomness" which I have imbued upon many of the routines in Autoshop connotes a less mathematical or formulaic approach to creativity. It is understandable that one could argue that when a routine makes use of a 'random' factor, the work suffers a loss of creative rigour, because you are surrendering your 'creativity' to the whims of an unpredictable function. It takes the domain of control away from the artist and gives it to the computer. However, it is paramount to point out that a computer can only move data about. It cannot - under any circumstances - generate a truly random number by itself. Computers generate random numbers by following a complex mathematical formula, which is 'seeded' with a starting value. If you give a computer the same 'seed' every time, it will generate the same sequence of random numbers. When you programmed a PC, you often had to tell it which seed to start with, on a Macintosh the system sets the seed from the current clock time. Thus, it stands to reason that should two people start up two Macintoshes at exactly the same time (providing both have exactly synchronised clocks, CPU and internal data bus speeds), and run the same program (again at the exact same time), that both Macintoshes would produce the same random sequence. Unlikely, but true.

Now compare this with Tristan Bastit's Vanishings of L.V.Gogh, an interactive computer-based artwork which utilises the user's sex and name to 'seed' the values to which it generates composites of artworks [11]. Bastit's program has a seed that generates 98,304 different possibilities. Most computer seeds are 16-bit, which makes 65,536 different possible sequences of random digits. It follows therefore, that by using a computer's built-in random routines is no less creative than asking a user for their name so that the rules of composition can be generated. Autoshop merely automates the process one step further - by not requiring you to specify a starting seed - it uses the current time.

Finally, to claim that a system is Artificially Intelligent requires some form of validatory argument. AI has traditionally implied an automated ability to mimic intelligent response. Recently it has been appropriated to include the notion of self-awareness, manifested in most AI code as feedback [12]. If a system is able to feed data back into itself, it becomes a chaotic, complex and dynamical system that is as unpredictable as sheer creativeness [13].

I would argue that the proper definition of AI should be retained as a strict definition of the ability to mimic intelligence. Where an expert system learns the knowledge of a real-life expert, it is no less self-aware than a database or a web browser. And yet expert systems are often classified as the most basic form of AI because they learn [14].

The AI routines of Autoshop™ use random data - again - to seed incoming data, but filters this data using my own rules of logic. For example, in the Finger Painting plug-in, I resolved copying a drawing into a series of instructions. I use random data to get the computer to decide certain factors, but these are only used when the results they produce are suitable (for example, "choose somewhere at random, if it is unsuitable, choose somewhere else at random until you choose somewhere that is okay"). This approach could be seen as a short cut, and not real AI, because you are just giving the computer the ability to try-and-try-again, instead of making rational judgements. However, when we see this nature of decision alongside the evolutionary ideas forwarded by Darwin himself, we can understand that the random functions inside a computer are the equivalent of the mutating lifeform. Should a particular lifeform be more successful than another, natural selection makes this choice. Should a particular random number thrown out by the random function be more prosperous than another, it is chosen above others. This is exactly the technique utilised by Richard Dawkins and other experimenters in this field of evolutionary AI systems[15]. The Blind Watchmaker is accompanied by a Macintosh application, which uses this idea of random numbers to seed generations of mutations on a parent creation. Over time, the creations behave exactly as a biological entity would. Perhaps, ironically, the computer's most complex mathematical built-in function (the random routine) is the most natural of all computer code.

How to scribble

To make scribbles on any canvas, one moves a drawing device ('pen') in a semi-random manner. The movement of one's pen has the following properties:

  1. Angle
  2. The direction, in radians (0..2pi = 0..360°) that the pen is travelling

  3. Speed/Distance
  4. The distance the pen will travel with each iteration of code.

  5. Wander
  6. The amount that the Angle changes minutely over each iteration. Low values will mean the angle will not change direction much, i.e. a straight line will be drawn.

  7. Jerkiness
  8. The statistical probability that, with each iteration, the Angle is reversed by pi (3.141) degrees (180°). Higher values make the pen more likely to 'jerk' with each iteration.

  9. Time spent
  10. The number of iterations the code goes through.

The following ZX BASIC code is used to scribble:

  5 REM -- Scribbles.ZX --
 10 LET angle=RND*(2*3.141)
 20 LET distance=10
 30 LET px=128
 40 LET py=90
 50 LET wander=1
 60 LET jerk=0.5
 70 LET time=100
 80 FOR i=0 TO time
 90 PLOT px,py
 95 LET opx=px: LET opy=py
100 LET px=px+(SIN(angle)*RND*distance)
110 LET py=py+(COS(angle)*RND*distance)
120 DRAW px-opx,py-opy
130 LET angle=angle+(RND*wander)
140 IF RND<jerk THEN LET angle=angle+3.141
150 NEXT i

How to be a bug

Bugs wander in one of eight different directions. The statistical probability that they will change direction in a random manner is directly proportional to the darkness of the pixel they are on top of.

Bugs maintain the following properties:

  1. Direction
  2. One of eight possible directions the bug is currently travelling in. The values of these directions are taken from the visual arrangement of the keys on a computer's numeric keypad.

  3. Leg position
  4. In order to animate a bug successfully, the bug must be aware of whether their left legs or right legs are stepping forward at any particular time. This alternates every 6 frames in order to show the bug walking.

The following ZX BASIC code is used to simulate a single bug:

  5 REM -- Bugs.ZX --
 10 LET bx=128
 20 LET by=90
 30 LET d=1+INT(RND*9)
 40 CLS
 50 PRINT "Press SPACE to stop"
 52 PLOT 0,0
 53 DRAW 255,0
 54 DRAW 0,160
 55 DRAW 255,0
 56 DRAW 0,-160
 60 IF INKEY$ = " " THEN STOP
 70 PLOT bx,by
 75 LET obx=bx: LET oby=by
 80 IF d=7 OR d=4 OR d=1 THEN LET bx=bx-1
 90 IF d=9 OR d=6 OR d=3 THEN LET bx=bx+1
100 IF d=7 OR d=8 OR d=9 THEN LET by=by-1
110 IF d=1 OR d=2 OR d=3 THEN LET by=by+1
120 IF POINT(bx,by)<>0 THEN LET d=1+INT(RND*9):
    LET bx=obx:LET by=oby
130 GOTO 60

How to make up words

You can make up words by stringing together randomly chosen groups of consonants and vowels respectively. If you want a short word, you would take only one group of a consonant(s) and then put only one group of vowel(s) after it. Repeat this more if you want longer words.

The groups of vowels to choose from are:

a*,e,i,o*,u,ea*,ai*,au,ie,oo*,ue,ee*,oe,oi

The groups of consonants to choose from are:

b*,c*,d*,f,g,gh,h,l,m,n,mn,p,ph,r,st,s,t

* - These groups are weighted: their probability of being chosen should be slightly higher.

The following ZX BASIC code is used to make up English words:

  5 REM -- Words.ZX --
 10 DIM v$(21,3)
 20 DIM c$(20,3)
 30 FOR i=1 TO 21
 40 READ v$(i)
 50 NEXT i
 60 FOR i=1 TO 20
 70 READ c$(i)
 80 NEXT i
 90 DATA "a","a","e","i","o","o","u","ea",
         "ea","ea","ai","ai","au","ie","oo",
         "oo","ue","ee","ee","oe","oi"
100 DATA "b","b","c","c","d","d","f","g",
         "gh","h","l","m","n","mn","p","ph",
         "r","st","s","t"
110 INPUT "How many syllables?",a
120 LET w$=c$(1+INT(RND*20))
130 FOR i=1 TO a
140 LET w$=w$+v$(1+INT(RND*21))+c$(1+INT(RND*20))
150 NEXT i
151 LET q$=""
152 FOR i=1 TO LEN(w$)
153 IF w$(i)<>" " THEN LET q$=q$+w$(i)
154 NEXT i
160 PRINT q$

How to draw a picture

Given an existing picture to work from, it is possible to sketch your own drawing by following this sequence of commands.

  1. Choose how many crayons to use

For each Crayon:

  1. Pick a starting point
  2. This can be anywhere in the picture, so long as you haven't already started there. The colour under this point should be the colour of this crayon.

  3. Choose somewhere near that point
  4. Make it reasonably close, but it doesn't matter where. Look at the colour underneath. If it's fairly similar to the crayon's colour, draw a line (on a transparency on top of the picture) between the last point and this new one, and repeat this step.

When to stop:

When all crayons are used up, you have finished drawing your picture.

This code is beyond the capabilities of ZX BASIC.

Acknowledgements

I would like to thank Geoff Cox for his guidance and helpful advice on this project, Paul Maguire for getting me interested in generative systems, and all the lecturers at MediaLab Arts for inspiring our minds.

Notes and References

[1] In reference to Italo Calvino's "Comment, j'ai écrit un de mes livres" ("How I Wrote One of My Books") - Calvino explained how he made use of a model square to generate the structure of his novel.
Calvino, I. 'How I Wrote One of my Books', Bibliotheque Oulipienne, No.20.

[2] Davis, D. 'The Work of Art in the Age of Digital Reproduction', http://www.awa.com/artnetweb/views/davis/davis.html

[3] In reference to Douglas Coupland's semi-fictional "Polaroids from the Dead", page 50.
Coupland, D. 'Polaroids from the Dead', Flamingo/HarperCollins, 1997.

[4] "Creative insights, some of which may be represented in the system, may arise as a result of the interaction". - Edmonds, E. referring to the 'dry' aspect of capturing a user's knowledge in an expert system, applies equally to a programmer's creativity being captured in the 'dry' computer code of a generative system.
Edmonds, E. 'Culture, Knowledge and Creativity - Beyond Computable Numbers' in Languages of Design, 1, 253-261. 1993.

[5] Douglas Ruskoff's brilliant "Children of Chaos" describes what the importance of devices like the remote control and VCR mean for the young generation, in particular how the ability to change such a 'concrete' form of media (i.e., the TV programme) can promote a better understanding of the new language of information.
Rushkoff, D. 'Children of Chaos', Flamingo/HarperCollins, 1997.

[6] Neal Stephenson, author of classic sci-fi novels 'Snowcrash' and his latest epic 'Cryptonomicon' speculates in an essay about Operating Systems how Apple deliberately abstracted the technology on the Macintosh so that there were no distractions to creativity. He also speculates how Microsoft use the opposite agenda in order to promote a sound business ethic, so that the end user believes they are part of a business transaction, and not a 'artistic' creative whim.
Stephenson, N. 'In The Beginning was the Command Line',
http://www.cryptonomicon.com/command.sit

[7] For further details, and to see some of these projects in action, visit http://www.signwave.co.uk

[8] The Anti-Mac Interface is an project to explore the different styles of computer interfaces. Despite it's name, it is not an argument against the Macintosh interface design ethic, but an exploration of the opposite for comparative sakes. It explores the opposites of the ideas that the Macintosh engineers set out to achieve in order to understand the differences between them. This is a direct parallel of the Autoshop design, which is an exact polemic opposite of 'New Media' design.
Gentner, D., Nielson, J. 'The Anti-Mac Interface',
http://www.acm.org/cacm/AUG96/antimac.htm

[9] The Apple Macintosh interface sesign guidelines are very strict about certain aspects of visual communication. Mostly intended to promote conformity across applications, the guidelines are an interesting look into what appears to be a very flexible medium.
'Apple Human Interface Guidelines' Apple Computer, Inc. Addison-Wesley, 1987.

[10] The term 'Machines for writing' is explained in the Oulipo Compendium as a generic term for the techniques employed to generate text. In this sense, I have developed a technique to generate pictures, which is - in essence - the same mode of creativity.
Matthews, H., Brotchie, A. 'Oulipo Compendium' Atlas Archive 6 from Documents of the Avante-Garde, Atlas Press, 1998.

[11] Bastit's 'Vanishings of L.V.Gogh' were derived from the standard formulaic approach that computers take to compositing images. It would have been possible to get the user to manually choose how to composite these images themselves (this is what Adobe Photoshop does, after all) - but by using some other 'seed' (in this case the user's name and gender) the process could be automated further. Surely the logical extreme of this is to have the computer reap this seeding data for itself?
Matthews, H., Brotchie, A. 'Oulipo Compendium' Atlas Archive 6 from Documents of the Avante-Garde, Atlas Press, 1998.

[12] For further details on evolutionary systems and the importance of feedback in dynamical systems, see my open.txt essay
http://open.txt.signwave.co.uk

[13] Feedback is defined as being the single most important aspect of any chaotic system. It's nature can be derived into mathematic solutions which take into account change over time. Even so, the feedback loops created by such systems can cause unpredictable and startlingly self-aware AI systems.
Eve, Horsfall and Lee, 'Chaos, Complexity and Sociology' SAGE Publications, Inc., 1997.

[14] Kelly, K. 'Out of Control', Fourth Estate Ltd, 1994.

[15] Schrage, M. 'Revolutionary Evolutionist' Wired Magazine, 3.07.
http://www.wired.com/wired/3.07/features/dawkins.html