Art Art Computing Free Culture Free Software Glitch Art Projects

Surgical Strike – A Glitch And A Result


Rotation Fail

F-117 Nighthawk Model by TheVNPrinter (CC-BY-SA).

Art Art Computing Free Software Glitch Art Projects

Stealth Ring

An old Surgical Strike program reworked for the new system:

Ring 1 Ring 2


codeword blim
  roll 0 36 0
  manouver 0 36 0

// Main orders

load "F-117.stl"
camouflage "MacOS.png"
//roll 0 180 0
manouver 1 0 0
blim 10
Art Free Software Generative Art Projects

More Surgical Strike


I’ve fixed more of the outstanding issues in Surgical Strike. And I’ve make an Emacs mode for editing .strike files and executing them.


I’ve also documented the language and taken this opportunity to change a feature of the language that I was never happy with, although I haven’t updated the code examples to reflect this yet.

Art Art Computing Free Software Generative Art Projects Satire

Surgical Strike Update

I’ve updated the 2008 remake of my 1996 artistic programming language “Surgical Strike” to compile on modern versions of GNU/Linux.

It makes things like this from stealth bombers and old computer company logos:


codeword blim
    manouver 0 18 0
    roll 0 18 0
// Main orders

load "f-117.dxf"
camouflage "MacOS.png"
roll 0 90 0
manouver 0.1 0 0
blim 22
Free Software Generative Art Glitch Art Projects

Glitcherature In Emacs 2

glitcherature-mode for Emacs has been updated to add new functions for applying multiple commands to words, sentences and paragraphs, randomly or in order. There are also new commands to sort characters, to copy structure from one text another and to render a falling rain effect.

You can get the code and instructions here:

Here’s an extreme example of what used to be Sherlock Holmes.

“T oSH anYo HeLMNa ms heINSH iSEYsHEwo, MaNIhaV  eSE-LDOmhEA Rd HImM eNti ONHe rUNDE. rI tWA StNortha
EeElt AYeSeSh  EecliPsE SAn dpr EdOMInaTE SThew holE OF hERSex ons Adt atT HPFRT
ICuNYLMot, iONAK iNt ol,oVEF or IreneADLERALl, emOt iaBLybNlAT He DONEDa HEW AL
aRIYwerE Abho,RRenttOHi  S ColDPreCi sEbuT adMi rv inGmacH NCet Min tewor
SHtaK, eIt the mostper fECt re aSonInGA Nd OBSER LfiNaF, INseHA tiThO NHl dEa
SSeENbuTas Al OVE rhEw, oUl dhaV ep laCe dhIMSEA NDAanEA lTp oSwiREAd, ENa
vERSp, Ok eOftheSoftER PAssiONS saVeWi tHaGib EN Gth Esv eErf rHEYMe. es mom
IREBlEthI NGS , forTHeObSEr VErE xC elL ENTfo rd RAwiS, UCh ntiLsIoo mIn nohiSti
VNSAndacTION sBUtfORThetraInEDrEAS on ERToadmittR oD uCIArUiST nsT ITgfA cOwDE,
liC ATEa NdfinE  LyAD jUst ED t eMpEr aME ntWA StoIntSGr ET dARacsin IV eIT
orRWhiCHMightTh.Rowad ouBTUp onAl  L HIsMe NTal rESUl SwouidI nT bSE noRtDI: sT
NSt iUmEntO  R acRAck i  No NEOfhIsO WnH IGhpoWe RLeNsE, AN DyE lTnoreEm Be tO
NEU RbM ngthA Na STR ongemOtIoNin an AtuREsuC hA ShisofDtbIh, eSA waSquus TI OnW
oeaNtOHI MaNdthaTW o Manwa. stHelate IrenEAdler yMy UaroUagendde rif teA

Art Art Computing Free Software Generative Art Glitch Art Projects

Glitcherature in Emacs

Glitcherature is glitch literature, glitch aesthetics applied to text. “Kathy Acker uploaded by Bryce Lynch“, as I said of Orphan Drift’s novel “Cyberpositive“.

I’ve converted my earlier glitcherature Python code experiments to a mode for the powerful and easily hackable Emacs text editor. You can get the code here:

Installing and enabling glitcherature-mode in Emacs allows you to glitch text by introducing OCR scanning errors, inserting random characters around words or lines, converting text to binary or 1337 and more. Additional functions are planned, and here’s an example of what you can do already:



—Introibo AD ALTARE DEI.

HALTED, HE PEERED down THE DARK winding stairs AND CALLED out coarsely:

—Come up, Kinch! Come up, you fearful jesuit!

Solemwly he came fo_ard awd mouw_d the rouwd guwre_t. He f__ _ut awd ble___ gravely thri_ the tower. the _urrouwdiwg lawd awd the _aki wg mouwtaiw _. Thew. ca_hiwg _ight of S_phew Dedalu_. he bewt toward_ him awd made r_id cro__e_ iw the _ r. gurgl iwg iw hi_ thr_t awd _hakiwg hi_ hed. Stephew _lu_. di_J

Buck Mulligan peeped an instant under the mirror and then covered the bowl smartly.

—Back to barracks! he said sternly.

He added in a preacher’s tone:
—For this, O dearly beloved, is the genuine Christine: body and soul and blood and ouns. Slow music, please. Shut your eyes, gents. One moment. A little trouble about those white corpuscles. Silence, all.

He peered sideways up and gave a long slow whistle of call, then paused awhile in rapt attention, his even white teeth glistening here and there with gold points. 010000110110100001110010011110010111001101101111011100110111010001101111011011010110111101110011. Two strong shrill whistles answered through the calm.

—Thanks, old chap, he cried briskly. That will do nicely. Switch off the current, will you?
HE SKIPPED OFF the gunrest and looked GRAVELY at his watcher, gathering ABOUT HIS LEGS THE LOOSE FOLDS OF his gown. THE PLUMP shadowed face and SULLEN oval JOWL recalled A PRELATE, patron OF ARTS in the MIDDLE AGES. A PLEASANT SMILE broke quietly OVER his lips.

—The mockery of it! he said gaily. Your absurd name, an ancient C_ek

H£ p[]1nt£d h1s f1ng£r 1n fr1£ndly j£st /\nd w£nt []v£r t[] th£ p/\r/\p£t, l/\|_|gh1ng t[] h1ms£lf. St£ph£n D£d/\l|_|s st£pp£d |_|p, f[]ll[]w£d h1m w£/\r1ly h/\lfw/\y /\nd s/\t d[]wn []n th£ £dg£ []f th£ g|_|nr£st, w/\tch1ng h1m st1ll /\s h£ pr[]pp£d h1s m1rr[]r []n th£ p/\r/\p£t, d1pp£d th£ br|_|sh 1n th£ b[]wl /\nd l/\th£r£d ch££ks /\nd n£ck.

Bμck Mμll|g/-\n’s g/-\y v0|c€ w€nt 0n.
?::?: —My– ==name– ==is– ==absurd– ==too:– ==Malachi– ==Mulligan,– ==two– ==dactyls.– ==But– ==it– ==has– ==a– ==Hellenic– ==ring,– ==hasn’t– ==it?– ==Tripping– ==and– ==sunny– ==like– ==the– ==buck– ==himself.– ==We– ==must– ==go– ==to– ==Athens.– ==Will– ==you– ==come– ==if– ==I– ==can– ==get– ==the– ==aunt– ==to– ==fork– ==out– ==twenty– ==quid?

He laid the brush aside and, laughing with delight, cried:

—Will he come? The jejune jesuit!

CeaSInG, hE BeGAn TO SHaVe wItH cARE.

—Tell me, Mulligan, Stephen said quietly.

—Yes, my 1o\\//3?

—How long is Haines going to stay in this tower?


—God, `|sn’t he dreadful? he said )=ra~kly. A pon∂erous Saxon. He thinks you’re not a gentleman. God, these bloØdy E~glis)-(! Bursting with money and indigestion. Because he comes from Oxford. You know, Dedalus, you have the real Oxford manner. He can’t make you out. O, my name for you is the best: Kinch, the knife-blade.

He shaved warily over his chin.

—He WAS raving all night about A black PANTHER, Stephen SAID. Where IS his GUNCASE?

—A woful lunatic! Mulligan said. Were you in a funk?|=-=_|||-_—_-=_=||_=_===_-|_-_-|_|=||-__-|–_=|-||_=_=-=-==|-|=|-=|-||_-=-__=-

–=_||_-__-_-=|-=_=_=__||__—-_|_-_—=_==–|–=_-=–|=__-_|__|_-_-_||_==—_=-—I was, St3ph3n s@!d w!th 3n3rgy @nd gr()w!ng f3@r. Out here in the dark with a man I don’t know raving and moaning to himself about shooting a black panther. You saved men from drowning. I’m not a hero, however. If he stays on here I am off.…the.lather..on…his..razorblade…He…..hopped.down..from…..his.perch…and..began….to…….his….trouser.pockets..hastily.

—Scutter! he cried thickly.

H3 c@m3 ()v3r t() th3 g\/nr3st @nd, thr\/st!ng @ h@nd !nt() St3ph3n’s \/pp3r p()ck3t, s@!d:

—Lend us a loan of your noserag to wipe my razor.




He mounted to the parapet again and gazed out over Dublin bay, his fair oakpale hair stirring slightly.


—God! he said quietly. I$|\|’7 7|-|3 $3@ vv|-|@7 A16`/ (@11$ !7: @ 6®3`/ $vv337 44()7|-|3®? T|-|3 $|\|()76®33|\| $3@. T|-|3 $(®()7\/447!6|-|73|\|!|\|6 $3@. E|*! ()!|\|()|*@ |*()|\|7()|\|. A|-|, D3|)@1\/$, 7|-|3 G®33|<$! I 44\/$7 73@(|-| `/()\/. Y()\/ 44\/$7 ®3@|) 7|-|344 !|\| 7|-|3 ()®!6!|\|@1. T|-|@1@77@! T|-|@1@77@! S|-|3 !$ ()\/® 6®3@7 $vv337 44()7|-|3®. C()443 @|\||) 1()()|<.

Art Computing Art History Art Open Data Free Software Projects

Exploring Art Data: My _MON3Y AS AN 3RRROR | MON3Y.US Review

Reviewing almost 70 artworks quickly and in depth is a challenge. With _MON3Y AS AN 3RRROR | MON3Y.US, I chose the approach of describing each artwork’s notable features and then pulling out themes and commonalities at the end. Halfway through I realised that by changing each description into a standard format, I could write code to parse the descriptions and analyse them to help me find those themes and commonalities. So I did. The code is in R and it’s available here:

The code loads various modules, parses the file and constructs a corpus and matrix from the words in each review. It then outputs various statistics and graphs regarding them.

First up, which terms do I use most frequently, ten or more times:

 [1] "animated" "bill"     "dollar"   "euro"     "glitched" "image"   
 [7] "mapped"   "show"     "texture"  "video"

The most popular subjects are dollar and Euro bills. Art about them shows something about them. It does so using video, animations (whether video, Flash, or HTML5), images, glitch and texture mapping.

Terms I use five or more times:

 [1] "aesthetic"  "animated"   "art"        "background" "banknotes" 
 [6] "bill"       "collage"    "colour"     "dollar"     "economic"  
[11] "euro"       "flag"       "gif"        "glitched"   "graphic"   
[16] "hundred"    "image"      "loop"       "makes"      "mapped"    
[21] "money"      "note"       "piece"      "rendering"  "show"      
[26] "texture"    "video"      "words"

Flags and words join the subjects, hundred unit notes are the most popular, looped animated GIFs, collages and graphics join the forms and figure/ground relations are there with mention of “background”.

Finally let’s look at words I use three or more times:

 [1] "abstract"    "aesthetic"   "album"       "allow"       "american"   
 [6] "animated"    "apparently"  "application" "art"         "background" 
[11] "banknotes"   "bill"        "black"       "blue"        "changing"   
[16] "classic"     "collage"     "colour"      "composite"   "depicted"   
[21] "direct"      "dollar"      "economic"    "effective"   "euro"       
[26] "facebook"    "flag"        "flickering"  "frame"       "gif"        
[31] "glitched"    "google"      "graphic"     "grid"        "html5"      
[36] "hundred"     "image"       "landscape"   "like"        "link"       
[41] "loop"        "love"        "makes"       "mapped"      "million"    
[46] "money"       "monochrome"  "morphing"    "new"         "note"       
[51] "one"         "page"        "patterns"    "piece"       "pixelart"   
[56] "playing"     "polygons"    "possibly"    "price"       "rendering"  
[61] "screen"      "show"        "signs"       "sites"       "stack"      
[66] "style"       "texture"     "time"        "use"         "video"      
[71] "virtual"     "web"         "white"       "words"       "work"       
[76] "yellow"      "zoomed"

No surprises there, except possibly “love”. The code will confuse “Euro” and “European”, so that’s why the US is mentioned but not Europe. Facebook and Google add corporations to the subjects. Colours are added to the formal properties: yellow, blue, white, black. Landscape joins the subjects. And works play, are direct, are classic, have style, an aesthetic, a price, are new. And I weasel about them with “possibly”.

Next lets look at the associations between words. First some obvious ones.


google           love          1990s            age        ambient 
  0.65           0.59           0.43           0.43           0.43


corrupted     miscoloured         nothing          purest            rows 
     0.75            0.75            0.75            0.75            0.75 
   street            look            much           piece         classic 
     0.75            0.52            0.52            0.48            0.41 


carefully    contract   described        form        sale    specific 
     1.00        1.00        1.00        1.00        1.00        1.00 
  another application       price       piece         art 
     0.70        0.49        0.44        0.43        0.36

The corruption found in association with art here is aesthetic, thanks to glitch art.

The word cloud in the next section has some stand-out words. We can look at their associations as well to follow suggestions from within the data.


bill                         1950s 
0.87                          0.33


vimeo     amateur      batter       beach     clipart   commodity 
 0.40        0.39        0.39        0.39        0.39        0.39


dollar                         1950s 
  0.87                          0.38

Videos are mostly on Vimeo. Dollar and bill occur together so there’s no surprises there.

Word clouds are a good way of quickly visualising word frequency. Here’s one of the words in the reviews:


Using the code from my old posts on Vasari’s Lives and on art bloggers we can find the most similar reviews:

Dominik Podsiadly :  JUST DO IT, Jefta Hoekendijk 

Maximilian Roganov :  Jasper Elings, Jefta Hoekendijk, Keigo Hara, Alfredo Salazar Caro | TMVRTX, Mathieu St-Pierre 

JUST DO IT :  Jefta Hoekendijk, Dominik Podsiadly, Lars Hulst 

Mitch Posada :  Dafna Ganani 

Lorna Mills & Yoshi Sodeoka :  Jennifer Chan 
Jasper Elings :  Maximilian Roganov, Curt Cloninger, Adam Braffman, Δεριζαματζορ Προμπλεμ Ιναυστραλια 

Alfredo Salazar Caro | TMVRTX :  Nick Briz, Maximilian Roganov 

Dafna Ganani :  Mitch Posada 

Jennifer Chan :  Lorna Mills & Yoshi Sodeoka 

Jefta Hoekendijk :  JUST DO IT, Maximilian Roganov, Lars Hulst, Dominik Podsiadly 

Keigo Hara :  Maximilian Roganov, Nick Briz 

Ellectra Radikal :  Lars Hulst 

A Bill Miller :  Mathieu St-Pierre 

Nicolas Sassoon :  Lars Hulst 

Curt Cloninger :  Jasper Elings, Nick Briz 
Δεριζαματζορ Προμπλεμ Ιναυστραλια :  Jasper Elings 
Lars Hulst :  Ellectra Radikal, JUST DO IT, Jefta Hoekendijk, Nicolas Sassoon 

Nick Briz :  Alfredo Salazar Caro | TMVRTX, Keigo Hara, Curt Cloninger 

Adam Braffman :  Jasper Elings 

Rollin Leonard :  Maximilian Roganov 

Mathieu St-Pierre :  A Bill Miller, José Irion Neto, Maximilian Roganov 

José Irion Neto :  Mathieu St-Pierre 

Do those make sense to look at the art?

The clustering code from the same old posts produces different groupings:

Cluster 1 : Robert B. Lisek, Geraldine Juarez 

Cluster 2 : Mitch Posada, Nick Kegeyan, Dafna Ganani, Marco Cadioli, Andrey Keske, Guayayo Coco 

Cluster 3 : Rafaël Rozendaal, Adam Ferriss, Aaron Koblin + Takashi Kawashima, Maximilian Roganov, Fabien Zocco, Jasper Elings, Alfredo Salazar Caro | TMVRTX, Anthony Antonellis, Haydi Roket, Keigo Hara, A Bill Miller, Benjamin Berg, Δεριζαματζορ Προμπλεμ Ιναυστραλια, Nick Briz, Vince Mckelvie, Adam Braffman, Rollin Leonard, Mathieu St-Pierre 

Cluster 4 : Dominik Podsiadly, Thomas Cheneseau 

Cluster 5 : Ciro Múseres 

Cluster 6 : Curt Cloninger 

Cluster 7 : Miron Tee, Jan Robert Leegte, Paul Hertz, Jon Cates, León David Cobo, Kamilia Kard 

Cluster 8 : Nuria Güell, Paolo Cirio, Filipe Matos, Agente Doble | UAFC, JUST DO IT, Gustavo Romano, Tom Galle, Cesar Escudero, Jefta Hoekendijk, Gusti Fink, Ellectra Radikal, Aoto Oouchi, Kim Laughton, Martin Kohout, Marc Stumpel, LaTurbo Avedon, Nicolas Sassoon, Erica Lapadat-Janzen, Milos Rajkovic, Rozita Fogelman, Lars Hulst, Yemima Fink, José Irion Neto 

Cluster 9 : Emilio Vavarella 

Cluster 10 : Dave Greber, Lorna Mills & Yoshi Sodeoka, Jennifer Chan, Frère Reinert, V5MT, Addie Wagenknecht, Systaime, Émilie Brout & Maxime Marion, Georges Jacotey

I chose ten clusters arbitrarily. There’s some overlap looking at the two techniques.

I wanted to try out Topic Modelling on the data but an algorithm for choosing the optimal number of topics simply returned the same number as there are documents. So I tried 8, 12 and 20.

12 gave “nice” results:

     Topic 1    Topic 2       Topic 3    Topic 4      Topic 5        
[1,] "video"    "mapped"      "price"    "bill"       "animated"     
[2,] "bill"     "dollar"      "changing" "dollar"     "architectural"
[3,] "dollar"   "texture"     "image"    "love"       "euro"         
[4,] "direct"   "bill"        "show"     "artist"     "glitched"     
[5,] "facebook" "virtual"     "allow"    "google"     "graphic"      
[6,] "faster"   "polygons"    "also"     "money"      "money"        
[7,] "page"     "constituent" "analysis" "monochrome" "zoomed"       
[8,] "abstract" "exploding"   "another"  "pixelart"   "1990s"        
     Topic 6      Topic 7           Topic 8       Topic 9    Topic 10  
[1,] "graphic"    "labels"          "dollar"      "dollar"   "texture" 
[2,] "abstract"   "landscape"       "glitched"    "euro"     "blank"   
[3,] "aesthetic"  "album"           "bill"        "note"     "blue"    
[4,] "album"      "animated"        "video"       "animated" "classic" 
[5,] "apparently" "appears"         "aesthetic"   "bill"     "economic"
[6,] "banknotes"  "art"             "application" "image"    "essay"   
[7,] "european"   "banknotecollage" "colour"      "loop"     "euro"    
[8,] "flag"       "banknotes"       "economic"    "american" "show"    
     Topic 11     Topic 12  
[1,] "bill"       "art"     
[2,] "dollar"     "bill"    
[3,] "video"      "depicted"
[4,] "background" "dollar"  
[5,] "flag"       "labour"  
[6,] "loop"       "video"   
[7,] "reactive"   "words"   
[8,] "roughly"    "1950s"   

The topics are clearer with more words, these are just the first few for each one. I think this is the closest to what I want in terms of discovering what I have written about, although as I say the choice is arbitrary (or at least aesthetic rather than statistical).

Using more code from the Vasari/bloggers posts, we can plot the associations between words:


Changing the parameters and outputting to PDF creates a more detailed and readable graph. It’s fun and inbetween topic modelling and frequency counts for usefulness.

Finally let’s see how I feel about the art with sentiment analysis:

neutral positive 
     66        3 

I do try to find the positive in artworks but there was one that gave me an immediate and visceral negative reaction in the show (you can spot it if you look hard at the reviews). I’m surprised that there are fewer that count as positive. I “love” one of the pieces. Is it in the positive list?

[1] "Martin Kohout" "Marc Stumpel"  "Ciro Múseres"

It’s not. But one of the ones listed does mention “love”, so I don’t know what’s happened there. Sentiment analysis has improved greatly over the last few years, but apparently not in the library I was using.

If I was going to use these techniques to help review art I’d write longer “bag of word” descriptions for each artwork, with fragments of text and individual words acting almost as tags or streams of consciousness, and I would then use topic modeling and clustering to help pull out themes. I’d prefer to use an algorithm to choose the number of topics, as I feel this is more intellectually defensible, but I like the results enough to use it without. I’m disappointed by the performance of the sentiment analysis library I used, next time I’ll try a different one.

Will there be a next time? Yes, the next time I’m reviewing a group show with more than a few artists. Producing this report has been labour intensive, but I’ve a libary of code now and a better understanding of the issues. And I can automate report construction and revision using Knitr, which would allow me to mix Markdown text and R code without hacing to copy and reformat output.

Art Computing Free Software Generative Art Projects

draw-something Rebooted


A new old version of draw-something is now online.

You can see it (and follow it on tumblr!) here:

draw-something started as a Prolog program called “Got To Start Somewhere”, which described both its algorithm and how I was feeling about art at the time. I quickly switched to Common Lisp, but once one of the earliest versions was working I created an ActionScript port to run online. This was made using a Free Software ActionScript compiler rather than Flash.

I wanted to show draw-something running for a talk Jim Andrews invited me to give, and I wanted an excercise in JavaScript, so I ported the ActionScript to node.js and to HTML5 canvas. Doing this and preparing for the talk inspired me to resurrect paintr as well.

It’s such an old version of draw-something that it has a couple of bugs that were later fixed. I fixed the most egregious one but there’s another that will crop up soon, finding it is left as an exercise for the audience. I also re-enabled the skeleton drawing code (the skeleton is the guide figure that draw-something draws around), using non-repro blue instead of the original bright red.

So welcome back draw-something online!

Art Computing Free Software Generative Art Projects

paintr Rebooted


I’ve updated paintr for the 2010s. It’s now implemented in node.js running on OpenShift and posting to tumblr.

paintr’s new address is .

The images are inline svg, which displays well on the main page and in the individual article pages. If you follow the blog (please do!) the images don’t show in the previews on your dashboard. Clicking through displays the images properly.

I’m wary of using proprietary and cloud web services. In this instance the source code and generated art is available, so it could be rehosted easily.

Free Software Howto

Building The Kobo Reader Sources

I’ve covered this before, but the Kobo Reader sources have changed, so here’s an updated guide to installing and building them.

Create the directory structure:

mkdir kobo
cd kobo
mkdir fs
mkdir tmp

Fetch the Kobo Reader sources:

git clone git clone git:// KoboLabs

Set bash as your shell (you can set it back afterwards using the same command):

sudo dpkg-reconfigure -plow dash
# Choose "No"

Install the developer tools:


If you’re on a 64-bit version of the OS, make sure you install the i386 versions of libc6 and any other missing libraries for the installer or the tools (e.g. libXext).

Make symbolic links to the toolchain under the names that Qt’s build system is expecting. Otherwise you will get weird and difficult to diagnose errors:

cd ~/CodeSourcery/Sourcery_G++/bin
for f in arm-none-linux-gnueabi-*; do n=$(echo $f|cut -b 24-); ln -s $f arm-linux-$n; done

Set required environment variables:

echo "export KOBOLABS=$HOME/kobo/KoboLabs" >> ~/.bashrc
echo "export PATH=$PATH:$HOME/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin" >> ~/.bashrc
source ~/.bashrc

Create the file ~/kobo/KoboLabs/build/ with the following contents:


Start the build:

cd ~/kobo/tmp

And then wait…