#NaBoMaMo: 30 Bot Victory


I made it! In November I made 30 twitterbots in 30 days. For the first 15 bots, see this post; for the second 15 and some more reflections, read on.

Why 30 Bots in 30 Days?

As I hit the end of the month, it became very clear that making 30 bots in 30 days was a very silly thing to do. I am feeling very triumphant about it, but I could also feel myself hitting the limitations of what you can do working at that pace — not least my own tiredness from overwork, keeping other projects and my full-time PhD going while I made a bunch of bots.

But first, what’s gained from this process. Obviously, output! Doing a #NaXxXxMo project means aiming or output over quality, practising getting it done rather than getting it perfect. As Darius Kazemi says, buying lots of lottery tickets is a worthwhile approach to internet art: I’m proud of at least half of the ideas, and in a few cases the execution is close to finished. If you struggle with getting it done, then absurd targets properly push you, and even if you miss the target or some of the ideas are rubbish, you’ll get at least one good thing out the other end.

It runs a little deeper than that, though. For the course of the month a part of my brain was always working away at the bot question, which was problematic when I was trying to sleep. Even when I wasn’t writing a bot, the back of my mind would be poking at the question of how to make the next bot, undoing a tricky structural problem or thinking through a coding dilemma. That meant that my work got noticeably deeper and more skilled over the course of the month: I was pushing my bot-mind harder and further each week, and so I started coming up with much more difficult ideas and executions than I would have done without the pressure. Even now I’ve let my bot mind go for a while to go back to my books, I feel like next time I summon the bot mind I’ll be starting from a richer place.

A third reason to do something like #NaXxXxMo is to make an event of it. I like performance and I like events. This was a bit of a 30 day endurance art marathon, and that meant a bunch of people willing me on (which is a lovely feeling!), a hook to hang the project on which meant more attention for my wider work, and participation in a community of folk doing a similar thing. It gave the art a social context, and that always amplifies an artwork.

But there are drawbacks, of course. Some of the bots are little more than sketches made to fulfil a commitment; my favourite ideas are mostly half-finished, though everything’s at least at minimum-viable-artwork stage; some ideas could have been better developed before release; and now I have enough development work to last me at least a year. It’s that last part that most daunts (and excites) me. I now feel like a bot gardener, like I have a rich ecology of my own bots to gently tend to. I want to grow them over time, to feed their corpora and prune and graft their code. I want folk following my bots to see them flourish. I want to make art in public, like a garden: something that people enjoy the growing of as well as the result.

Lastly, I want to extend tremendous thanks to the #botALLY community. Not only to those whose code I borrowed or whose tutorials I used (I’ve tried to link these in the notes every time), but also to the many folk who offered answers to sometimes very basic technical questions, and who gave a lot of encouragement to me as I worked. There is absolutely no way I could have managed this month without them. I would never have made one bot without someone helping me, let alone 30 (or 34, counting previous projects). The artbot community is characterised by openness and generosity: it’s still at a stage where we help each other out with ideas and jokes and code, and long may that last. My hope is that the unmonetisability of artbots continues strong, and that this remains a project dedicated to the commons. To that end, I’m releasing as much of my code and process as I can (with a delay while I learn appropriate means of doing so), and if you want a hand with your bots then I’m happy to pass on what’s been passed on to me.

Bots 16 to 30

16. Debate Coach

This is an experiment less in procedural poetry and more into the social utility of Twitterbots. How can a bot help us have better conversations on Twitter?

As well as tweeting thoughts on looking after yourself in an argument every 6 hours, if you send a message to Coach she’ll reply with advice or a question about dealing with an argument. Things like “Can you be compassionate to the person you’re talking with?” but also like “Anger is sometimes useful and sometimes not.”

The bot won’t reply to anyone except you, so you can @ her while tweeting someone else, or you can @ her separately if you don’t want them to know. She can take up to 5 minutes to respond, and misses 5% of messages, due to platform limitations, so you don’t hear from her, @ her again.

I put a lot of thought into this desig, trying to make something that was constructive, useful, non-judgemental and hard to abuse. I’d be really interested in hearing what you think should be included, and especially if you use Coach and have feedback!

Platform: CBDQ (source)
Dev time: 90 minutes
To do: Expand library, with a focus on expanding the subtlety of her responses to keywords.

17. Every Reversal

A dreadful joke bot, suggested by Nora Reed. I am embarrassed by it! But that day I was too tired to come up with a good idea, and doing this was a useful exercise in learning to select and manipulate random words correctly: it’s not trivial to get nouns and transitive non-first-person-present verbs to match properly, especially when using WordNik rather than RiTa, as the former is much less discriminating. I used the WordNik API again, plus the npm libraries singularize and conjugate  — it was useful to learn better how to find and use new libraries that did what I needed, and I reused that skill a lot later in the month.

I’ve justified this bot by saying that, now that there’s a bot for it, no-one ever needs to make a Russian reversal joke again.

Platform: Node.js and Herokuu (source tba)
Dev time: 1 hour
To do: Nevr again.

18. Everybody Nodes

This is my most complex bot ever, despite the silliness of the results. Although it’s the same sort of model as @JohnnyBotten, for Johnny I hand-picked rhyming lists for every syllable, for for Leonard all the substituted words are generated procedurally: when the code hits a substitution, it goes to the dictionary for a word that matches part of speech, syllables, metre, tense, and, if necessary, rhyme.

No way could I do it myself. Most of the conceptual work I learned from this tutorial on @SortingBot: http://tinysubversions.com/notes/sorting-bot. I will eventually share the messy and hacky source, but Darius does it all better, so copy from that instead.

This was quite difficult for me to do, but learning it made making a much wider variety of bots much easier. And this time the process was pretty smooth: I more or less understood everything I was doing, for the first time. The ratio of copy/pasting magic spells and hoping they work to actually learning how to write magic spells improved. It’s thrilling to start from close to zero knowledge and understanding and then to get to being able to make a toy like this.

Thanks also to Alec Finlay for the request and Tully Hansen for the name.

Platform: Node.js and Herokuu (source tba)
Dev time:  6 hours
To do: Learn how to chain tweets together so he tweets a whole song in sequence

19. Work No. 128

This was a resurrection of the first bot I ever made, which died due to its Google Apps Script system being deprecated and me not having the skills yet to fix it. I took the core of the old code (generating two types of tweet based on similar unicode characters) and reimplemented it. The big probem was figuring out how to make the tweets alternate (see Julian of Norwich below), and I still haven’t learned how to do this reliably in code: instead I wrote two different programs, set them both to tweet hourly and offset them by half an hour! A good dodge for a rest day.

Conceptually, this is supposed to be my most pointless bot. It’s a bit of a vicious and easy take on Martin Creed’s original lightbulb going on and off, and on the emptiness of YBA art in general. It’s also an exercise in seeing just how useless Twitter will let me be without banning my bot. But, gallingly, I think the result has a kind of spooky beauty to it. One friend called it the bass beat to his timeline.

Platform: Node.js and Herokuu (source tba)
Dev time:  30 minutes
To do: Finished!

20. Auto Else

A tribute to Baroness Elsa von Freytag-Loringhoven, my favourite Dadaist and true originator of Duchamp’s Fountain. It takes 10 verse models from  her extraordinary complete poems and perfoms word substitutions on them, using exactly the same process as Everybody Nodes, with a bit of sound poetry modelling from Uberursonate thrown in.

I don’t feel the result is yet as representative of her extensive work as I’d like — the playfulness and rhythm is there, but not the range, and getting the viscerality of her writing down is tricky when working with word substitution. Perhaps adding to the pallette will be enough, but once I see that I may have to do something more extensive.

Platform: Node.js and Herokuu (source tba)
Dev time:  90 minutes
To do: Automate more poems and fragments and then see

21. Orkney Visit

A fantasy travel guide for Orkney. I was aiming for verisimilitude, and getting the name generation right so that each name was basically believable (but unlikely to be real) and felt Orcadian was where I put most of my time. There was some fiddly work around how frequent to make different variable elements and where to capitalise what, but I’m pleased with those results. Being tired, I didn’t have as much time left to get the framing right, and I’m unsatisfied with the limited variety of the descriptions: I need a much bigger set of syntaxes based on what a tourist guide could include, ad potentially wholly different kinds of tweets. Perhaps it could create an Orkney with a touch more fantasy in it, occasional intrusions of magic. One thing I’ve learned this month is that speculative worldbuilding is more fun than direct parody of existing conditions.

Thanks to for the suggestion

Platform: CBDQ (source)
Dev time:  30 minutes
To do: Need to rethink the framing extensively

22. Rules for the Day

From a suggestion from , this is an instructional poem in the vein of Autoflaneur, but a little more difficult and abstract (and quicker to make). It comes from my interest in instructional performance (as does the later bot Tiny Situationist and my other work like Casual Games for Casual Hikers).This is much less frequent than most of my bots to give it the right context: it tweets a set of rules every 12 hours, so you can get the latest rules for the day whatever your timezone, but only one set.

What happens when we give ourselves strange rules and try to follow them? How does it invite new experience, new ways of thinking? What does it mean to follow a rule? I haven’t tried these rules out yet but I’m keen to.

Platform: Node.js and Heroku (source tba)
Dev time:  20 minutes
To do: Finished!

23. New Border Ballads

This bot takes an old project and improves it, importing the results to Twitter. It generates markov chains (a kind of procedural generation based on analysing the probability that a given word or character will follow another) from Walter Scott’s Minstrelsy of the Scottish Border, and then breaks up the chain into verselike tweets.

I used the first markov chain library I could get working, and got the result functional without too much thought about how it was working. There’s a lot I want to do. I want to learn how markov chains really work so that I can tweak them for more satisfying results. I want to combine this with RiTa’s tools for parsing metre and rhyme to producing verses that scan and rhyme. But this is a long way off, and there’s a lot of stumbling blocks on the way! I’m doing it bit by bit, and this bit is fun in itself.

Platform: Node.js and Heroku (source tba)
Dev time:  90 minutes
To do: Lots.

24. Glasgow Makes People

An easy bot that didn’t involve learning new techniques, but curiously effective! SVG tutorials from w3schools, words from the same lists I used at the beginning of the month.

It is, though, the riskiest bot I’ve done: I’m pretty confident it contravenes the IP of the original corporate slogan, and Britain doesn’t have very good legal protections for parody work. That was a deliberate choice on my part: I like crossing the line when I think it’s a line that deserves to be crossed, and I await with pleasure the result when Glasgow City Marketing Board notices.

The text glitch was added at a whim right at the end of the process, copy/pasting from Zalgo rather than generating procedurally. It makes the result spookier, but I’m not sure if it’s better or not! Perhaps if I made it appear less often I’d like it more. The image glitch came from making a mistake in the SVG code, making the stroke width of the outline letters too wide, and I loved the result so I kept it.

Platform: CBDQ (source)
Dev time:  30 minutes
To do: Might tweak the glitch, or find a good library for varied glitch generation.

25. Tiny Situationist

This is a direct but loving détournement of Jonny Sun’s , which took care bots mainstream this month, building on work by Nora Reed and others. Because tinycarebot has a profile and a creator within a specific culture (let’s call it millennial, oh dear), it’s also faced unfair backlash and parody. And I do like the bot, but have my own criticisms of self-care — or rather, of the neoliberal appropriation of self-care as individualistic rather than collective. So, from a suggestion from I decided to have a play with what self-care can mean. Using the RiTa tools I learned to use during the month, Tiny Situationist takes each of the syntaxes of tinycarebot’s tweets and substitutes parts of speech to make absurd suggestions in the same polite tone. The result, I think, is a kind of situationism for Twitter — détourning a popular artwork and constructing situations which question social space. That too is a kind of care.

Platform: Node / Heroku (source tba)
Dev time:  30 minutes
To do: I think this one’s finished, but if tinycarebot goes I might grow this one.

26. Infinite Laughter

A direct take-off of ‘s , but working with the opposite affect (or is it the same?) There’s not much to say here! Except that the source has some neat tricks for producing maximum variety with minimum effort, varying repetition and spaces of everything, and nesting persistent variables.

Platform: CBDQ (source)
Dev time:  15 minutes
To do: And yet more international laughter

27. I Think You’ll Find

Similarly to Plural Fan, this bot makes light fun of the pedantic tendency in internet arguments (and my own proclivity for showing off by knowing the names of things). Fallacy-spotting irritates me because, while it’s logically accurate, it’s so rhetorically weak: it never convinces anyone they’re wrong if you name the Latinate fallacy they’ve just used, and I don’t think people learn how to make more intelligent arguments by learniing the names of fallacies.

This is a very simple bot, but part of my interest in (and bots’ suitedness to) getting inside a specific language and then twisting it. The bot just splits the names of everything on Wikipedia’s List of Fallacies in half and then recombines them. It’s fascinating to me that the results sometimes produce genuine meaning (“I love spotting an abusive ignorance in someone’s argument.”), sometimes nonsense (“Association herring is the fallacy I hate most.”), and sometimes something spookily neither (“No true stone: ugh.”) I’m not wholly satisified with the result — the joke doesn’t stay funny and the poetry doesn’t stay beautiful — but I’m not sure how to fix it.

The idea for this one came from Nora Reed.

Platform: CBDQ (source)
Dev time:  30 minutes
To do: ????

28. BotRail

This is maybe the single bot this month that I’m most proud of. Partly because I’m really pleased with the effect — a seriocomic utopian imagining of Scotland’s collectivist public transport future, summoned through maps and announcements only — and partly because to make it I pulled together so much of what I’d learned through other bots in the month.

The maps were built by getting to grips with the SVG tutorials at w3schools. The Scottish placename generator was nicked from my poem-game Ghost Highland Way and expanded through what I’d learned about satisfying name-generation from making Orkney Visit. The text effects were achieved in Unicode using an online widget, using delim.co and textmechanic to process them quickly. The idea came from Henry Bell, whose bot Radical Glasgow I used for researching memorial names. And the concept was developed by remembering what I’d learned from JJUrbanExplorer, that procedurally generated stories become much more satisfying if you root them in real world locations, if you give them a bounded shape and specific flavour, rather than sampling the whole world of words.

Platform: CBDQ (source)
Dev time:  2 and a half hours
To do: Vary the map shapes, expand the naming further

29. Julian of Norwich

Julian of Norwich wrote the first known book in English by a woman. She was an anchorite who experienced mystical visions during a serious illness, and interpreted them through a Christian framework. The result is strange, trippy and beautiful, even to atheists like me. I wanted to celebrate it, and a meditation also seemed like an appropriate choice for the concept at hand: tweeting an entire book one character at a time. It’s barely readable, but it is still readable, though if you’re following along you’re liable to read each individual word a few times. It slows everything right down.

This concept was offered by Gabriel Spector, and I was also influenced in the execution by Neil Simpson’s work on extreme slowing down of text.

I was hoping for this to be an easy execution, but I hit a major stumbling block: Heroku, which is the hosting service used by most bot tutorials, is unsuitable for projects which proceed in a specific order through a list of tweets. (This is because it doesn’t maintain variable states long-term: it keeps resetting to the beginning.) I explored a lot of different options for fixing this — learning a new hosting system, indexing to an external spreadsheet, indexing to the real time — but in the end I went for the quickest available. @air_hadoken had shared an excellent Google Apps Script library for Twitterbots, and I was familiar with the platform having used it for my first bots, so I was able to copy my simple code into that library without too much trouble. This taught me a couple of things: first, that hosting a bot is a way harder problem than coding a bot; second, that I still have a huge amount to learn about how to do weird internet art. I’ve learned the magic spells for Heroku and node.js, but as soon as I need a new spell or a new spellbook then the difficult curve goes vertical again. I start copy/pasting without really understanding what I’m doing again. My hope is that eventually I’ll learn the basics of enough schools of magic to be able to get to grips with new schools without as much trouble, but that’s a long way off. That said, I like being a novice. It’s where all the best books start.

Platform: Google Apps Script (library here)
Dev time: 15 minutes to write the basic code, 2 hours to figure out the hosting
To do: Keep an eye on it for 35 years to make sure it keeps going, adapt the format of the — dividers so the balance looks right as the numbers get longer.

30. Some Endings.

A simple meditation on death and endings: it’s a very macabre bot! I was struggling with the idea of how to end the project, and had all sorts of grand thoughts: in the end, I was very tired, and made a simple substitution poem in CBDQ, and that felt like the most appropriate way to finish.

There’s a structural limitation of simpler bots, which is that Twitter is liable to ban accounts which it thinks are posting repeat tweets. A way many bots get around this is by inserting random stretches of blank space. Originally I had this after each line, so that it was invisible, and then I realised that placing it before the words as well turned the structural limitation into an aesthetic pleasure. It doesn’t display in some browsers or circumstances which trim extra spaces, meaning that the poems are always contingent. As every poem is.

Platform: Cheap Bots Done Quick (source)
Dev time:  30 minutes
To do: Expand the library of substitutions, consider whether I want to vary the syntax (probably not)

Find all the bots at


and an Extra Thanks

to my backers on Patreon, who give me the freedom to do very strange and free projects like this.

Now Make A Bot

#NaBoMaMo: The First 15 Bots

Poetry, Rambles

I am, absurdly, trying to make 30 Twitterbots in 30 days, as part of the great collaborative endurance drafting celebration that is #NaXxXxMo. I’ll write at more length about it all, but here are some rough thoughts on the first 15 days, and details on the first 15 bots. These are all first or early drafts rather than complete works, but I’m happy.

Why I Love Twitterbots

1. Twitterbots are a wonderful form for sketching out artistic ideas. This is because procedural art makes sketching out a lot of results very quickly (this bot took under an hour to make), and also because Twitter is the sketchbook and commonplace book of the world. That is, it’s a social spae where everyone is sketching out very rough ideas, early thoughts, first drafts, messy poems, little doodles, and sharing them with each other. It allows process to exist in a casual social space. And it also allows that process to be infinite: you never stop sketching.

2. Twitterbots are the telos of a number of significant artistic movements’ ideas:
– Suprematism’s interest in objective relations between elements;
– Futurism’s obsession with technology, automation and obsolescence;
– The Oulipo’s keenness to write not poems but machines to generate poems and to implement processes to exhaust those machines;
– Modernism’s flirting with intertextuality, because a Twitterbot is incontrovertibly in a corrupt social space and defined by its relation to the elements around it;
– Flarf’s anti-poetry and internet fixation;
– Uncreative writing’s valorisation of process over product, because Twitterbots successfully remove the author from the individual product, remove any suggestion of authorial choice or agential production: you author the process only

3. That last point is the most essential. Because by automating and infininitising some artistic processes, you draw attentiomn to when human agency is actually important. Twitterbots are not the enemy of human poets, but a troublesome friend locked in dialectical relations. We show each other how we work. We see when automation matters and when agency matters. Massive exercises in uncreative writing or painting now take trivial or low effort, so when they are done by a human, the artistic value is found in the very pointlessness of the effort, how it expresses agency in a deterministic world. Individual insight can be simulated, but only badly and occasionally, so insight becomes both more clear and more suspect. We see the human in the robot and the robot in the human.

4. They are the best comedians: they repeat a joke until it isn’t funny, then until it is again, then until it isn’t again, then…

5. They are an awkward intervention into a hypercapitalist space. While they clearly contribute to the success of Twitter by making it more pleasurable to be there, they disrupt the smooth collection of data for the purpose of advertising sales. Their strange follower patterns and uninterpretable tweets gum up the algorithms which make lives valuable. Their wholly inappropriate affective stances are gentle disruptions of the emotional timeline. They do not destroy capital, but they do make awkward spaces of critique within it, sometimes complict, sometimes destructive.

6. I’ve now made around 20 bots, and I feel like a farmer, quietly tending to my herd, my crops, feeding them, giving them to feed you.

The First Fifteen

1. Bot Vaizey

Former UK Culture Secretary Ed Vaizey made a crashingly silly speech in which he demonstrated the same level of creative acumen that earned him the mockery of most artists in the UK. James Varney asked if I could respond with a bot. I hadn’t planned to start #NaBoMaMo with something fairly slight, but doing a snap response bot (see also: @HardBiscuitsUK) by request felt very much in the spirit of the month.

This was knocked together very quickly, and then later given an update to give it more variety and depth. I find that the easiest and most fun bit of making a CBDQ bot is coming up with pleasing syntax varieties: the hard long busywork is synonyms. The two things that quickly give a new bot depth are *long* wordlists for every variable term, and nested syntaxes generating tweet variety. Once my bot is sketched, the big job is going through it word by word and asking “Can this be randomised? Or expanded to a new syntax?”

Platform: Cheap Bots Done Quick (source)
Dev time:  1 hour to get a passable version, 45 more minutes to current completion level
To do: Rake a thesaurus to expand basic elements, add some more syntaxes

2. Orkney Bot o Wirds

This is an extremely simple bot programming-wise: it has a long list of words to pick from, and a 1/7 chance of tweeting a random book, resource or encouraging creative message instead. It involved a lot more actual writing than most of my bots, though, because I wanted to make an interesting usage example for each word. Usually the writing of a bot is a trial-and-error process of combining and recombining elements until you get the right feel (more like cookery than writing), but this involved switching back to a different type of thinking.

I think this bot has broad appeal: it picked up the most followes the most quickly. It’s interesting how little that’s related to programming depth! Often the bots that take me the most time to code have the least broad interest, though they’re often the more appealing ones to boteurs. It’s that difference between being interested in the process and being interested in the result.

Platform: Cheap Bots Done Quick (source)
Dev time:  30 minutes to release, 3-4 hours since getting the word list up to the end of F.
To do: Keep going to the end of the dictionary, tend indefinitely as more books and resources become available.

3. Jamie Jones, Urban Explorer

Inspired by @str_voyage and @spacetravelbot, I wanted to make a horror version of the infinite journey bot, so I came up with the scenario of an urban explorer trapped in an endless series of tunnels. Aesthetically, I decided to go for panicked and impressionistic rather than straightforwardly narrative. This led to a problem that the results seemed quite vague and uninterpretable, and then I realised it would work better with a clearer cultural context, so I set Jamie’s journey in tunnels beneath Detroit and packed the bot with relevant references. This got it to a decent level of consistency. There’s also a cast of four characters in there, but they’re not currently functioning well narratively. The source includes some good techniques for randomising number of lines and line length, as well as a nifty text-glitch-generator.

Platform: Cheap Bots Done Quick (source)
Dev time:  1.5 hours
To do: Introduce more running plot, so it’s more satisfying to read a sequence; make the characters work better by giving them more specifics; intelligent replies if you try to speak to JJ; more variety in possible speech; ev̵e͝n m̷͘͝o̷̸͢r̴̵͞e͘ ẗ́͟͠҉̯͉̱̟̲e̢͍͙͖͚̞̘̲̰̖̔̌̚͘͘xͩ͜҉̨͕̤̥̹̦t͚̟̽ ǧ͐̈͆ͭͤͨ͗ͬ̋͑͏̧̹͎̬̕l̤̜̫̼̫̫̯̫̥͓̦̰̠͖͇̬͎ͯ̓ͨ̒̋̓͛̊̑̑̃̇̔ͮ̅͆̀̀͘͝i̡͇̺͖͙̘̼̜̪͛́͑̊̑͐̃̿̽̏ͤt̶ͪͥ͗͂͆ͩ̒͒̍̑̅͋̾͠͏͖̜̜̝͍̬̹͙̦͇̲̹̬̙̦̱̤c̾̌̊ͪ̎̿ͥ̊̔ͨ̂̇̄̐̽͊̊͏̡̺͉̼̘̤͇̥͙̘̳̞̖̦̦̮̮̯͜͠͡h͊ͦ̈́͗̎͗͛ͫͧ̽̔ͬ͒̕͏̢͍̯̘̬̥̰͖̼̀͝ ́ͣ͏̶͈͇͞

4. Awful Emoji

This was my first SVG bot. I used w3schools to teach myself svg, and cribbed from @someboxes and @hashfacade to figure out how to use it in CBDQ. The concept is simple and self-explanatory! I wanted to generate emoji to express every possible emotion. I tried to tweak the results so that they ranged from obvious feelings to just-over-the-edge-of-ridiculousness, and also to use some positional randomness to ensure that every face was a little bit askew, just like every human.

Platform: Cheap Bots Done Quick (source)
Dev time:  3.5 hours
To do: I could add more different types of eyes and mouth, and introduce elements for hair, blushing, &c, but I might be totally happy with the conceptual clarity of the current result! Scrolling down the feed, it’s interesting how much variety there is in emotion there from so few elements, and I may want to preserve that variety-through-simplicity.

5. Be the Bot You Want to See in the World

A straightforward joke bot, using the classic bot form of “Taking a sentence and having a couple of elements be randomly selected [verbs] or [adjective] [nouns].” In this case having a dig at the inspiring quote industry. The source has a couple of useful lists of nouns, adjectives and present tense verbs I culled from various internet sources by googling “massive list of nouns” and similar (you can just cull them from me). Text Mechanic and Delim.Co were vital for parsing these lists into a format CBDQ could read; I used those tools for almost every other bot this month.

Platform: Cheap Bots Done Quick (source)
Dev time:  30 minutes
To do: Add more quotes to substitute; find more good word lists to add.

6. Plural Fan

The bot version of a running joke I once shared, appending blatantly incorrect latinate plural endings to ordinary words, to make fun of people who like to say “octopodes” and “rhinocerotes” (I am one of these people). I had a really bad and funny version of this bot running in 15 minutes, which just took a list of singular nouns and whacked a plural ending on. Then I realised that it was even funnier if you trimmed one, two or three characters off the end of the word first, and spend 2 more hours figuring out how to do that. This would, I know, be trivial in a bot written in javascript, which could do the processing one each word automatically, but CBDQ has no such functionality. So I had to work out how to use a spreadsheet to do the processing on the 4000+ nouns, and learning that CBDQ’s parent project Tracery could create persistent variables (so that calling one noun would call one of its abbreviations). This was a ridiculous thing to do for this joke bot, and a lot of laborious busywork that could have been done better in another programme, but it was useful to learn how to do these things for future projects where it might be more necessary. And doing it was the last straw for me deciding that I really, really needed to learn how to code a bot in javascript and host it myself.

Platform: Cheap Bots Done Quick (source)
Dev time:  2.5 hours
To do: She is perfect. She is written in the wrong programme but the results can’t be improved.

7. Quittr

Inspired by carebots like @hydratebot and @check_o_tron, I decided to make a more aggressive version that would put regular reminders in my timeline to quit twitter when I didn’t really want to be on it and was only being kept there by the addiction mechanics created by its designers. I also wanted to make a bot quickly because I was feeling the #NaXxXxMo burn. While the bot is simple, there’s some neat work in the code, with different syntaxes reusing different variables lists in subtly different ways, and employing Tracery’s .modifier system to do so. I learned making this bot that all strings in CBDQ are best off being written in lowercase, using #variable.capitalize# when you need it, for maximum flexibility.

Platform: Cheap Bots Done Quick (source)
Dev time:  30 mins
To do: Bot complete. He doesn’t need anything else.

8. failurebot

I was in the middle of touring and performing and too tired to make a good bot. So I made myself a bot in 15 minutes to remind me that failure is OK. Very appropriately, it got banned by Twitter because the code was so basic (just a single list of options to tweet) that it looked like spam to the algorithms. So I had to spend another 15 minutes adding a tin bit of variety to the code to prevent this from happening. There are now 144 possible tweets. I hope this is enough for Twitter to be kind.

Platform: Cheap Bots Done Quick (source)
Dev time:  30 mins
To do: I could add a lot more syntactical and word-choice variety and this would improve the bot, but wouldn’t that miss the point?

9. Daily Antifascism

This was my immediate creative response to My Arse’s election. I was also hosting a performance installation that night where people built buildings and then destroyed them, which felt appropriate. I ripped the idea direct from Henry Bell’s @Radical_Glasgow and then put a call out to my social media followers for good content. I think that, due to the current lack of diverse content, this is my worst bot of the month so far, but that it has the potential to be one of the best when I put the time in.

Platform: Cheap Bots Done Quick (source)
Dev time:  30 mins
To do: Much longer content lists; find a way to schedule historical tweets for their on-this-day day and repeat annually.

10. hg_ebooks

I needed to teach myself how to code bots in javascript and host my own bots, so I decided to make the most common sort of bot: an _ebooks warped mirror which generates markov chains based on your own Twitterfeed. Nothing original about this, but a very useful exercise for learning the necessary for future bots. I followed this tutorial because it was the most step-by-step, even though it uses python rather than js. By doing that, I started to learn how to use the command line, began to gain a vague and uncertain understanding of what words like “repo” and “stack” mean, and how to host a bot on Heroku. Alongside that tutorial, I had to google a lot more tutorials and questions like “How do I use GitHub?” and “What is a dyno?”, and regularly copy-pasted an error message into google and fished until I found a result I understood enough to copy-paste the right bit of the answer. I still don’t really understand any of it, but I can do it. Mostly.

Platform: Ruby and Python, Heroku (I’m not sharing the source (a) because it’s less useful to you than any of the tutorials online (b) because everything that’s my bit is bad code (c) I actually don’t know how to do this properly because I don’t understand GitHub yet). The same goes for Heroku-hosted bots below. But if you’re desparate to know how I did a thing, message me and I’ll try and share the relevant bit.)
Dev time:  1 hour (plus 4 hours preparatory time relearning js for free at CodeCademy)
To do: I might redo this using Mispy’s version, partly because it produces slightly more satisfying results by building a bigger corpus, and partly because doing so would teach me more useful things for future bots.

11. Bot Save the Queen

Inspired by the beautiful @f__lb_tt_r, I decided to push it a bit further and have fun with the Sex Pistols, based on a suggestion from @inky. The implementation is straightforward in CBDQ, with most of the time spent compiling good rhyming word lists from RhymeBrain. As with @PluralFan, this would be much quicker to programme in JS using an API from RhymeBrain to automatically select a rhyme, but on the other hand the bot is already so chaotic that I like the creative control of handpicking the wordlists. The creative work of this bot is in getting the balance right and the probabilities of each option right, so that the bot as a whole has the right amount of entropy, and distance from and connection to the original. This is harder than it sounds! Which rhyme is too far away to still be funny? How many syllables can I break a word down into before it becomes too much like nonsense? How frequently should Johnny sing a line from the original? This kind of tweaking is at the heart of satisfying procedural generation.

Platform: CBDQ (source)
Dev time:  1 hour to get the first two verses working, another 30 mins later to add a third
To do: Add the remaining 9 verses at my leisure, tweak to perfection.

12. Anarcoo

This was a pre-existing account I’d let lapse, so I decided to resurrect it as an automated propaganimal. I used this tutorial to learn how to make a picbot, mashing it up with the previous tutorial to host on Heroku. I also had to use more of the JS skills I’d picked up to write some of my own code. A lot went wrong. I didn’t know what a Procfile or a package.json were (I think I do now?) and apparently I needed both of those, and I have a vague sense of what git init and npm install do when I put them in the command line. It took three hours to hash through it all, but it was worth it. And the results make me very happy.

Platform: JS, Heroku
Dev time: 3 hours
To do: Reduce posting schedule through some math randomisation, vary the moos more.

13. 500 Dollar Words

Going back to making more original bots, this one is an automated tribute to Aram Saroyan’s beautiful poem “lighght“. It takes a random word and repeats two characters near the middle of it. I wrote the javascript to do that to a random word in 10 minutes. Then I spent four learning how to use the Wordnik API and wordnik-bb so that I could use much longer corpora for my bots, which involved a very lengthy detour learning that node-gyp and contextify were a thing that I didn’t understand but were not working properly, and trying out various things google told me to do to fix them, which I didn’t know what they were doing to my computer but I think it’s OK. I was originally going to try and have each word appear in colour on a pleasant cvg background, but (a) I was exhausted by the end of it, and (b) it turns out this is really hard for anyone to do in node.js on Windows and has made adults weep. So partly because of that, and partly because I aesthetically like the accessible directness of tweeting a single word, I think I’ll leave this bot as it is.

The good thing about spending 4 hours banging my head against what should be a simple thing is, next time I want to interact with the Wordnik API, I’ll be able to do it in around 15 minutes, and next time I want to interact with any API, I’ll have a much better sense of how to go about it. I love learning new skills.

14. 5×5

After an exhausting weekend of heavy coding, I wanted to do something light and easy. I didn’t need to learn anything new for this, but I did get to reprise what I’d learned about SVG and element randomisation. The bot has no deep meaning or artistic purpose: it’s a sketch, an experiment in seeing what happens when you define a set of parameters for randomising elements and put them in objective relation to each other. It will roll on experimenting forever. Instead of making a complicated bot, I wrote the thoughts I opened with in this post.

Platform: CBDQ (source)
Dev time: 30 minutes
To do: Nothing.


From an idea suggested by @ammonite, this is an automated tribute to Kurt Schwitters’ classic Ursonate. It was a total joy to make, with quite a fancy but neat source code. There’s a nice use of nested saved variables here, I think. And the whole thing is built out of elements of no more than two characters. As a method, I went through the whole of the Ursonate, and parsed the semantic structure of all of the stanzas and a good chunk of the words.

It did make me realise that the power of the Ursonate isn’t just in the playfulness of individual verses, but in the impressive intertwining of elements and patterns across the whole of the piece. This is worrying, because now I’ve got the method down, I may have to do a 50,000 word procedural version for #NaNoGenMo

Platform: CBDQ (source)
Dev time: 2 hours.
To do: Nothing.

Brief Feelings on the Halfway Mark

I am quite tired and I don’t know if I’m going to make it. This feels good. I like the obsessiveness of this project, the self-destructiveness of it. I am willing to fail, but I also like pushing myself past all sense. I also like giving myself permissionm to just make, regardless of quality, and I’m quite surprised by the quality of some of what’s come 0ut. I do need to pace myself a bit better, but I’m also happy.

I’ve learned a huge amount. Technically, obviously: I have way more skills and understanding than I started the month with, which was part of my reasoning for doing the month. I think it’s important to learn some of the languages and rituals our world is now built on. But I’m also learning a great deal about the aesthetics and mechanics of procedural generation: of what is satisfying and what is beautiful, of how to balance simplicty and complexity, of how generated texts can function as standalone objects or social interventions or both.  And this, in turn, is learning for poetry in general. What is the sonnet form if not a machine for producing poems? What is concrete poetry if not an exercise in manipulating elements? What is an artist if not a supremely complicated bot?


to my backers on Patreon, who give me the freedom to do very strange and free projects like this.

Working and Earning as an Artist: My Annual Finances

Personal, Rambles

This post follows on from two previous posts, “What I mean when I say I’m working as an artist”, parts one and two. As part of my artistic work I talk about my finances as openly and publicly as I can manage. I’m not going to cover the same ground as those posts now, but if you’re a geek about this stuff, or a voyeur, or are just interested on what the day-to-day of an artist’s life is like, they’re worth reading.

Why I Put My Money Online

First, I’m obsessed by money. I love learning how it works, how it flows. I genuinely enjoy spreadsheets, and I like visualising artistic projects through juggling their budgets. When I was an undergraduate, which thanks to proper state support was the single most privileged period of my life, I thought it was somehow anticapitalist to just not care about money. This was silly and wrong and also I hit the bottom of my overdraft a few times. These days, I write and chart obsessively about money because I feel like it gives me some measure of control or power over the systems which run our world. Though maybe I take it a bit far.

I also feel like I have some sort of general duty to talk about it. Most of my earnings come, ultimately, through taxes; a truly worrying proportion comes from either Creative Scotland or the Arts Council of England. I feel like a few hours a year telling the taxpayer how their money works for me is worth doing. Perhaps more importantly, I think that small-scale artists talking about this stuff helps to explain to the general public why it’s worth funding the arts: as I talked about in much more detail in my last post, the majority of artists work for absurdly long hours for absurdly little pay and to much unseen public benefit.

Equally, small-scale artists sharing this kind of information is a form of mutual aid. If you’re an artist and you can see how I earn, it might give you some ideas. As a Creative Scotland report, coincidentally published today, has shown, I actually earn more than the majority of Scottish artists, and I’m still not making the living wage. Maybe this information can help us all do better.

The Juicy Numbers

Here’s how much money I’ve earned in the last four financial years:

income table

(“Gross” is my total income, the actual amount of money that came into my bank account. “Expenses” is my business expenses as a self-employed artist, which I talk about below: it’s mostly travel. “Net” is gross minus expenses, and is more or less my actual spending money as a living human, except it also includes my taxes, which given my income are rather low.)

Here’s how that money breaks down into artistic and non-artistic income.

Income pies

(The non-artistic is mostly an environmental management/consultancy contract and a political organising contract, with some other bits and bobs.)

And here’s what the different income strands were last year:

income strands

(“Reader in Residence” was a big community arts contract; “Creative Scotland” was a grant for a single self-organised art project; “Patreon” is my crowdfunding scheme; “Workshops” is a lot of one-day or half-day arts training jobs for different organisations; “Commissions” and “Performances” are a lot of small and medium-sized contracts to create or perform art for different organisations. “Other” is my non-artistic income. The notable missing thing is sales, for complex accountancy reasons, but know that the products I sell are usually just about at cost (including labour of distributing) and I haven’t started earning royalties yet.)

Some important numbers to know to make a comparison:

  • The Scottish Living Wage is £17,160 per year.
  • The median (a kind of average) annual pay for full-time workers in Scotland is £27,710; the median for my age bracket including part-time workers is £19,292. I haven’t found numbers for the mean (another kind of average), but it’s likely a bit lower than those.
  • The poverty line (defined as 60% of median income) is £16,626. But then, the Tory government abolished that measure, so I’m probably fine.
  • I have never come close to these measures off artistic income, and have managed the living wage only once

Finally, some notes on my assets and liabilities:

  • I have a very small student loan for my undergrad (in Scotland, so paid no tuition fees), which I began paying back in my 2013-14 tax return. I had a bank loan for my Masters, but I have paid it off. I have no other debts.
  • I have no dependants, and no allowance.
  • I rent, in Edinburgh, sharing with a partner (though for half of 2013-14 and half of 2014-15 I lived alone). My parents now own their house outright.
  • Expenses includes a small portion of my rent and energy bills, half my phone and internet bills, and most of my artistic purchases, along with show materials, office supplies, and so on. The majority of it is simply travel. So if you were to compare me to a PAYE worker, you might want to imagine something like an income a little under halfway between gross and net. But closer to net.
  • I have very gradually built up savings, first as a cushion against lean years as a freelancer, and now in the hopes of getting out of the rental market. I’ve got to roughly £10k, mostly because I learned how to live on £10k a year and so put cash away in the good years.

How I Feel About  All This

I feel great about where I’ve managed to get to. I’ve spent the last two calendar years working almost entirely as an artist, and without a big annual contract to get me through, and I feel like I’ve proven to myself that I can do it. I can, for at least two years, live, just about, off my earnings as an artist. I know that that’s unlikely to be permanently possible, but I have managed it. Seeing the blue half of the pie chart expand is something I’m proud of.

I’m also pleased that the last financial year has a lot of income diversity – much more than I expected. If I were to be really detailed, I’d break down the strands by how much of each was expenses and how much was net income, but I have to stop somewhere. I suspect it would make my income look a bit less diverse, however, because the bigger the wedge the small the proportion of the wedge tends to be expenses. Despite this diversity, though, over half my income came from just two big contracts. Without landing 2-4 big (£4000+) and highly competitive contracts each year, there’s no way I’d be able to live off being an artist, and to get those I have to be very good at applying for them and apply for probably about four times as many as I get.

However, despite all this, what I also know is that the idea of being a full-time artist is a lie. I wrote about this more last time. Very few people get to Just Make Art, and most of them are highly economically privileged already. For the rest of us who want to live off art, we have two choices: spend at least half our working week on a day job, or spend at least half our working week answering emails, filling out funding applications, sitting in meetings, and generally hustling. There is no moral or artistic difference between people who support themselves to make art by waiting tables and people who support themselves to make art by filling out funding applications: they’re both drudge work and hustle. Neither of us are full-time artists. Or, rather, all of us are. I make a living as an artist, which means I make a living sending emails and filling out forms. No wonder my art has so many spreadsheets in it.

What Happens Next

My life mission is to be able to earn the living wage out of making art (and thus also writing emails and filling out funding applications and doing workshops). Currently, where I live, that’s £17,160 after expenses and before taxes, based on a 40 hour work week. My other three life missions are to reside in a housing co-op, work in a workers’ co-op, and live in an anarcho-syndicalist utopia. I figure if I can get one of those three, plus the living wage, I’ll feel OK about my life. I’m a long way off any of these missions, but I can feel myself getting closer.

In the short term, I’m escaping the freelance hustle, for the most part. I’m completely astonished and delighted by this: I’ve been awarded an AHRC scholarship to study a PhD in Creative Writing, which covers tuition and a non-taxable stipend of £14,400 for three years. This could not be closer to my dream. (I mean, it could, but taking into account the practical considerations of being an artist in a neoliberal society, it could not be closer.) That’s still not a living wage and it’s supposed to be full-time, so I will have to work beyond my hours earning elsewhere. I’ll be less able to take on the many small gigs, so I’ll be looking for one or two big contracts to make up the rest.

My ideal scenario – total creative freedom – for the next three years would be mostly working on my PhD and making the rest of my income from my Patreon. I’m not there yet, but it’s feasible by the end of the PhD, when, well, who knows what will happen. Getting there is trickier than it looks, though: the first year of my Patreon has been boosted by getting a lot of small commissions, which I’m then able to share freely with backers to add to the unfundable oddities I make solely thanks to their support. That is, it might be harder for my backers to feel they’re getting “value for money” unless I’m able to be doing those commissions as well. If I’m able to earn around £3k a year from Patreon (i.e. three times as much as I do now) then I really could do that – what a dream! But getting there is harder.

So that’s me. As openly and honestly as I can put it: my income, how it happens, and my plans. If I were to give one piece of advice to other artists who are trying to “make it” (I have not “made it”), it would be: Get good at spreadsheets. Understand how money works. Think practically and with brutal honesty about how you can financially support yourselves. Make money work for you. Try to get to the point where the time you spend thinking about money saves you far more time than if you were trying not to think about it. If you want more creative advice, Action Hero has the beautiful goods.

If I had one message to taxpayers reading this, it would be, and is: please protect arts funding. My case puts me in maybe the top 20% of working artists in Scotland in terms of income earned solely from art, and in the bottom 20% of workers in terms of income earned. You have no idea how much you’re going to lose.