F-117 Nighthawk Model by TheVNPrinter www.thingiverse.com/thing:255102 (CC-BY-SA).
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.
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:
incoming! codeword blim manouver 0 18 0 roll 0 18 0 deliver set // Main orders load "f-117.dxf" camouflage "MacOS.png" roll 0 90 0 manouver 0.1 0 0 blim 22
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
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:
STATELY, plump Buck Mulligan came from the STAIRHEAD, BEARING A bowl of LATHER on which A MIRROR AND a RAZOR LAY CROSSED. A YELLOW DRESSINGGOWN, ungirdled, was SUSTAINED GENTLY BEHIND him ON THE MILD morning AIR. He HELD THE bowl ALOFT and INTONED:
—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£ p1nt£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, fllw£d h1m w£/\r1ly h/\lfw/\y /\nd s/\t dwn n th£ £dg£ f th£ g|_|nr£st, w/\tch1ng h1m st1ll /\s h£ prpp£d h1s m1rrr n th£ p/\r/\p£t, d1pp£d th£ br|_|sh 1n th£ bwl /\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.
—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()()|<.
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:
 "animated" "bill" "dollar" "euro" "glitched" "image"  "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:
 "aesthetic" "animated" "art" "background" "banknotes"  "bill" "collage" "colour" "dollar" "economic"  "euro" "flag" "gif" "glitched" "graphic"  "hundred" "image" "loop" "makes" "mapped"  "money" "note" "piece" "rendering" "show"  "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:
 "abstract" "aesthetic" "album" "allow" "american"  "animated" "apparently" "application" "art" "background"  "banknotes" "bill" "black" "blue" "changing"  "classic" "collage" "colour" "composite" "depicted"  "direct" "dollar" "economic" "effective" "euro"  "facebook" "flag" "flickering" "frame" "gif"  "glitched" "google" "graphic" "grid" "html5"  "hundred" "image" "landscape" "like" "link"  "loop" "love" "makes" "mapped" "million"  "money" "monochrome" "morphing" "new" "note"  "one" "page" "patterns" "piece" "pixelart"  "playing" "polygons" "possibly" "price" "rendering"  "screen" "show" "signs" "sites" "stack"  "style" "texture" "time" "use" "video"  "virtual" "web" "white" "words" "work"  "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?
 "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.
A new old version of draw-something is now online.
You can see it (and follow it on tumblr!) here: http://draw-something-rebooted.tumblr.com/
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.
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!
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 http://paintr-rebooted.tumblr.com/ .
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.
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:
cd mkdir kobo cd kobo mkdir fs mkdir tmp
Fetch the Kobo Reader sources:
git clone git clone git://github.com/kobolabs/Kobo-Reader.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/build-config-user.sh with the following contents:
DEVICEROOT=$HOME/kobo/fs QT_EXTRA_ARGS="--prefix=$HOME/kobo/qt -DQT_NO_QWS_CURSOR -DQT_NO_QWS_QPF2"
Start the build:
cd ~/kobo/tmp ~/kobo/KoboLabs/build/build-all.sh
And then wait…