Poetix

February 14 is Valentine’s Day for many; this year, it’s also Ash Wednesday for Western Christians, both Orthodox and unorthodox. Universally, it is Harry Mathews’s birthday. Harry, who would have been 94 today, was an amazing experimental writer. He’s known to many as the first American to join the Oulipo.

Given the occasion, I thought I’d write a blog post, which I do very rarely these days, to discuss my poetics — or, because mine is a poetics of concision, my “poetix.” Using that word saves one byte. The term may also suggest an underground poetix, as with comix, and this is great.

Why write poems of any sort?

Personally, I’m an explorer of language, using constraint, form, and computation to make poems that surface aspects of language. As unusual qualities emerge, everything that language is entangled with also rises up: Wars, invasions, colonialism, commerce and other sorts of exchange between language communities, and the development of specialized vocabularies, for instance.

While other poets have very different answers, which very often include personal expression, this is mine. Even if I’m an unusual conceptualist, and more specifically a computationalist, I believe my poetics have aspects that are widely shared by others. I’m still interested in composing poems that give readers pleasure, for instance, and that awaken new thoughts and feelings.

Why write computational poems?

Computation, along with language, is an essential medium of my art. Just as painters work with paint, I work with computation.

This allows me to investigate the intersection of computing, language, and poetry, much as composing poems allows me to explore language.

Why write tiny computational poems?

Often, although not always, I write small poems. I’ve even organized my computational poetry page by size.

Writing very small-scale computational poems allows me to learn more about computing and its intersection with language and poetry. Not computing in the abstract, but computing as embodied in particular platforms, which are intentionally designed and have platform imaginaries and communities of use and practice surrounding them.

For instance, consider the modern-day Web browser. Browsers can do pretty much anything that computers can. They’re general-purpose computing platforms and can run Unity games, mine Bitcoin, present climate change models, incorporate the effects of Bitcoin mining into climate change models, and so on and so on. But it takes a lot of code for browsers to do complex things. By paring down the code, limiting myself to using only a tiny bit, I’m working to see what is most native for the browser, what this computational platform can most **essentially* accomplish.

Is the browser best suited to let us configure a linked universe of documents? It’s easy to hook pages together, yes, although now, social media sites prohibit linking outside their walled gardens. Does it support prose better than anything else, even as flashy images and videos assail us? Well, the Web is predisposed to that: One essential HTML element is the paragraph, after all. When boiled down as much as possible, there might be something else that HTML5 and the browser is really equipped to accomplish. What if one of the browser’s most essential capabilities is that of … a poetry machine?

One can ask the same questions of other platforms. I co-authored a book about the Atari VCS (aka Atari 2600), and while one can develop all sorts of things for it (a BASIC interpreter, artgames, demos, etc.), and I think it’s an amazing platform for creative computing, I’m pretty sure it’s not inherently a poetry machine. The Atari VCS doesn’t even have built-in characters, a font in which to display text. On the other hand, the Commodore 64 allows programmers to easily manipulate characters; change the colors of them individually; make them move around the screen; replace the built-in font with one of their own; and mix letters, numbers, and punctuation with an set of other glyphs specific to Commodore. This system can do lots of other things — it’s a great music machine, for instance. But visual poetry, with potentially characters presented on a grid, is also a core capability of the platform, and very tiny programs can enact such poetry.

I’ve written at greater length about this in “A Platform Poetics / Computational Art, Material and Formal Specificities, and 101 BASIC POEMS.” In that article, I focus on a specific, ongoing project that involves the Commodore 64 and Apple II. More generally, these are the reasons I continue to pursue to composition of very small computational poems on several different platforms.

Golem and My Other Seven Computer-Generated Books in Print

Dead Alive Press has just published my Golem, much to my delight, and I am launching the book tonight in a few minutes at WordHack, a monthly event run by the NYC community gallery Babycastles.

This seems like a great time to credit the editors and presses I have worked with to publish several of these books, and to let you all know where they can be purchased, should you wish to indulge yourselves:

  • Golem, 2021, Dead Alive’s New Sight series. Thank you, Augusto Corvalan!
  • Hard West Turn, 2018, published by my Bad Quarto thanks to John Jenkins’s work on the Espresso Book Machine at the MIT Press Bookstore.
  • The Truelist, 2017, Counterpath. This book was the first in the Using Electricity series which I edit, and was selected and edited by Tim Roberts—thanks! Both Counterpath publications and my book from Les Figues are distributed by the nonprofit Small Press Distribution.
  • Autopia, 2016, Troll Thread. Thank you, Holly Melgard!
  • 2×6, 2016, Les Figues. This book is a collaboration between me and six others: Serge Bouchardon, Andrew Campana, Natalia Fedorova, Carlos León, Aleksandra Ma?ecka, and Piotr Marecki. Thank you, Teresa Carmody!
  • Megawatt, 2014, published by my Bad Quarto thanks to Jeff Mayersohn’s Espresso Book Machine at the Harvard Book Store.
  • #!, 2014, Counterpath. Thank you, Tim Roberts!
  • World Clock, 2013, published by my Bad Quarto thanks to Jeff Mayersohn’s Espresso Book Machine at the Harvard Book Store.

The code and text to these books are generally free, and can be found on nickm.com, my site. They are presented in print for the enjoyment of those who appreciate book objects, of course!

WordHack Book Table

This May 21, 2020 at 7pm Eastern Time is another great WordHack!

A regular event at Babycastles here in New York City, this WordHack will be fully assumed into cyberspace, hosted as usual by Todd Anderson but this time with two featured readings (and open mic/open mouse) viewable on Twitch. Yes, this is the link to the Thursday May 21, 2020 WordHack!

There are pages for this event up on Facebook and withfriends.

I’m especially enthusiastic about this one because the two featured readers will be sharing their new, compelling, and extraordinary books of computer-generated poetry. This page is a virtual “book table” linking to where you can buy these books (published by two nonprofit presses) from their nonprofit distributor.

Travesty Generator coverLillian-Yvonne Bertram will present Travesty Generator, just published by Noemi Press. The publisher’s page for Travesty Generator has more information about how, as Cathy Park Hong describes, “Bertram uses open-source coding to generate haunting inquiring elegies to Trayvon Martin, and Eric Garner, and Emmett Till” and how the book represents “taking the baton from Harryette Mullen and the Oulipians and dashing with it to late 21st century black futurity.”

Data Poetry coverJörg Piringer will present Data Poetry, just published in his own English translation/recreation by Counterpath. The publisher’s page for Data Poetry offers more on how, as Allison Parrish describes it, Jörg’s book is a “wunderkammer of computational poetics” that “not only showcases his thrilling technical virtuosity, but also demonstrates a canny sensitivity to the material of language: how it looks, sounds, behaves and makes us feel.”

Don’t Venmo me! Buy Travesty Generator from Small Press Distribution ($18) and buy Data Poetry from Small Press Distribution ($25).

SPD is well equipped to send books to individuals, in addition to supplying them to bookstores. Purchasing a book helps SPD, the only nonprofit book distributor in the US. It also gives a larger share to the nonprofit publishers (Noemi Press and Counterpath) than if you were to get these books from, for instance, a megacorporation.

Because IRL independent bookstores are closed during the pandemic, SPD, although still operating, is suffering. You can also support SPD directly by donating.

I also suggest buying other books directly from SPD. Here are several that are likely to interest WordHack participants, blatantly including several of my own. The * indicates an author who has been a featured presenter at WordHack/Babycastles; the books next to those asterisks happen to all be computer-generated, too:

Thanks for those who want to dig into these books as avid readers, and thanks to everyone able to support nonprofit arts organizations such as Babycastles, Small Press Distribution, Noemi Press, and Counterpath.

Sonnet Corona

Sonnet Corona, detail from a particular generated poem in the browser

“Sonnet Corona” is a computer-generated sonnet, or if you look at it differently, a sonnet cycle or very extensive crown of sonnets. Click here to read some of the generated sonnets.

The sonnets generated are in monometer. That is, each line is of a single foot, and in this case, is of strictly two syllables.

They are linked not by the last line of one becoming the first line of the next, but by being generated from the same underlying code: A very short web page with a simple, embedded JavaScript program.

Because there are three options for each line, there are 314 = 4,782,969 possible sonnets.

I have released this (as always) as free software, so that anyone may share, study, modify, or make use of it in any way they wish. To be as clear as possible, you should feel free to right-click or Command-click on this link to “Sonnet Corona,” choose “Save link as…,” and then edit the file that you download in a text editor, using this file as a starting point for your own project.

This extra-small project has as its most direct antecedent the much more extensive and elaborate Cent mille milliards de poèmes by Raymond Queneau.

My thanks go to Stephanie Strickland, Christian Bök, and Amaranth Borsuk for discussing a draft of this project with me, thoroughly and on short notice.

Against “Epicenter”

New York City, we are continually told, is now the “epicenter” of the COVID-19 pandemic in the United States. Italy is the world’s “epicenter.” This term is used all the time in the news and was recently deployed by our mayor here in NYC.

I’m following up on a February 15 Language Log post by Mark Liberman about why this term is being used in this way. Rather than asking why people are using the term, I’m going to discuss how this word influences our thinking. “Epicenter” leads us to think about the current global pandemic in some unhelpful ways. Although less exciting, simply saying something like “New York City has the worst outbreak” would actually improve our conceptual understanding of this crisis.

“Epicenter” (on the center) literally means the point on the surface of the earth nearest to the focus of a (below-ground) earthquake. It can be used figuratively — Sam did not keep the apartment very tidy; Upon entering the kitchen, we found that it was the epicenter — but there’s only the one literal meaning.

One effect of the term is a sort of morphological pun: There’s a COVID-19 “epi-center” because this is an “epi-demic,” a disease which is “on the people.” But on March 11, the World Health Organization said that COVID-19 is worse than an epidemic, it’s a pandemic. Indeed, it is a global pandemic, spreading everywhere. So what might have been a useful pun back in February is now an understatement.

Beyond that, “epicenter” is metaphorical in the sense of directing us to a particular conceptual metaphor (see George Lakoff and Mark Johnson’s Metaphors We Live By, 1980, and Lakoff’s article “The Contemporary Theory of Metaphor,” 1993). This sort of metaphor is not just a rhetorical figure or flourish, not a surface feature of language like the “epi-” pun. It is a fundamental way of understanding a target domain (the pandemic) in terms of a source domain (an earthquake).

To give this complex metaphorical mapping a name, we can call it A HEALTH DISASTER IS A SEISMOLOGICAL DISASTER or more simply A PANDEMIC IS AN EARTHQUAKE. But these are just names; we’d need to explore what is being mapped from our earthquake-schema to our pandemic-schema to really think about what’s going on there.

I will note that this metaphor usefully emphasizes some things about the pandemic: its unexpected onset, the extensive devastation, and the cost to human life. While such mappings are always incomplete, if we try to make a more extensive mapping, we can find ourselves more confused than helped.

Earthquakes are localized to a certain place (unlike a global pandemic) and they occur during a short period of time (unlike a global pandemic). So the metaphor incorrectly suggests that our current disaster is happening once, in one place, and thus we will be able to clean up from this localized, short-term event with appropriate disaster relief.

The most critical aspect of our current crisis is not part of the earthquake metaphor at all. There is no entailment or suggestion from the earthquake metaphor that we are dealing with something that can be transmitted or is communicable. Instead of rallying to an earthquake meeting point, we now need to remain apart from each other to slow the spread of disease.

I’d going to go even deeper in thinking about the “epicenter” concept. Why does a global pandemic (a disease affecting “all the people”) have any sort of center at all?

Metaphor, as it is now understood, is based on ways of thinking that are grounded in bodily experience, including those cognitive structures called image schemas. One of these, detailed by Mark Johnson in The Body in the Mind, 1987 and also discussed by George Lakoff in Women, Fire, and Dangerous Things, 1987, is the CENTER-PERIPHERY image schema. It relates to body, and our recognition of the heart, for instance, as being central and one of our toes as being more peripheral. We worry less if we’ve cut a toe than if we’ve cut our heart. Even if lose a toe, we can keep living, which we can’t do without our heart.

So, since this pandemic has one or more CENTERS, does that mean that it’s not so important to worry about the PERIPHERIES of COVID-19? Do we need to be concerned about the center but, if we are somewhere on the margins, is it okay to have parties or get into other situations that may foster transmission of the virus? Is that the way to think about a global pandemic, where outbreaks are occurring everywhere? Obviously, I feel that it’s not best.

The alternative image schemas we can use to develop alternative metaphors are CONTAINMENT and LINER SCALE. “Outbreak” is pretty clearly based on the CONTAINMENT image schema. Some places do have outbreaks that are worse and more serious than other places. Hence, LINEAR SCALE. This would mean saying that, for instance:

Italy has the “worst outbreak of the global pandemic”
NYC has the “worst US outbreak of the global pandemic”

These statements indicate that COVID-19 is a global outbreak that must be CONTAINED, and the implication is that it must be contained everywhere. It isn’t something that hits one place at one time, and doesn’t have a CENTER people can simply flee from in order to be safe. It also admits that the various outbreaks around the world are on a SCALE and can be worse in some places, as of course they are.

I shouldn’t need to explain that I have no expertise or background in public health; What I know, and the information I trust, comes from reading official public health sources (the WHO and CDC). It may seem silly to some (even if you’ve read this far) that I’ve gone off at such length about a single word that’s in the current discourse. I’ve bothered to write this because I’m a poet and have been studying metaphor (in the sense of conceptual metaphor) for many years. I believe the metaphors we live by are very important.

In George Lakoff and Mark Turner’s More Than Cool Reason, 1989, they make the case that metaphor is not what it was assumed to be in poetry discussions for many centuries. It is completely different, certainly not restricted to literature, and indeed is central to everyday thinking. However, in their view, the role of poets is extremely important: “Poets are artists of the mind.” They argue that we (poets) can help to influence our culture and open up more productive and powerful ways of thinking about matters of crucial importance, via developing and inflecting metaphors. I believe this, and hope that other poets will, too.

Sea and Spar Between 1.0.2

When it rains, it pours, which matters even on the sea.

Thanks to bug reports by Barry Rountree and Jan Grant, via the 2020 Critical Code Studies Working Group (CCSWG), there is now another new version of Sea and Spar Between which includes additional bug fixes affecting the interface as well as the generation of language.

As before, all the files in this version 1.0.2.are available in a zipfile, for those who care to study or modify them.

Sea and Spar Between 1.0.1

Stephanie Strickland and I published the first version of Sea and Spar Between in 2010, in Dear Navigator, a journal no longer online. In 2013 The Winter Anthology republished it. That year we also provided another version of this poetry system for Digital Humanities Quarterly (DHQ), cut to fit the toolspun course, identical in terms of how it functions but including, in comments within the code, what is essentially a paper about the detailed workings of the system. In those comments, we wrote:

The following syllables, which were commonly used as words by either Melville or Dickinson, are combined by the generator into compound words.

However, due to a programming error, that was not the case. In what we will now have to call Sea and Spar Between 1, the line:

syllable.concat(melvilleSyllable);

does not accomplish the purpose of adding the Melville one-syllable words to the variable syllable. It should have been:

syllable = syllable.concat(melvilleSyllable);

I noticed this omission only years later. As a result, the compound or kenning “toolspun” never was actually produced in any existing version of Sea and Spar Between, including the one available here on nickm.com. This was a frustrating situation, but after Stephanie and I discussed it briefly, we decided that we would wait to consider an updated version until this defect was discovered by someone else, such as a critic or translator.

It took a while, but a close reading of Sea and Spar Between by Aaron Pinnix, who considered the system’s output rather than its code, has finally brought this to the surface. Pinnix is writing a critique of several ocean-based works in his Fordham dissertation. We express our gratitude to him.

The result of adding 11 characters to the code (obviously a minor sort of bug fix, from that perspective) makes a significant difference (to us, at least!) in the workings of the system and the text that is produced. It restores our intention to bring Dickinson’s and Melville’s language together in this aspect of text generation. We ask that everyone reading Sea and Spar Between use the current version.

Updated 2020-02-02: Version 1.0.2 is now out, as explained in this post.

We do not have the ability to change the system as it is published in The Winter Anthology or DHQ, so we are presenting Sea and Spar Between 1.0.1 1.0.2 here on nickm.com. The JavaScript and the “How to Read” page indicate that this version, which replaces the previous one, is 1.0.1 1.0.2.

Updated 2020-02-02: Version 1.0.2 is the current one now and the one which we endorse. If you wish to study or modify the code in Sea and Spar Between and would like the convenience of downloading a zipfile, please use this version 1.0.2.

Previous versions, not endorsed by us: Version 1 zipfile, and version 1.0.1 zipfile. These would be only of very specialized interest!

Incidentally, there was another mistake in the code that we discovered after the 2010 publication and before we finished the highly commented DHQ version. We decided not to alter this part of the program, as we still approved of the way the system functioned. Those interested are invited to read the comments beginning “While the previous function does produce such lines” in cut to fit the toolspun course.

Gomringer’s Untitled Poem [“silencio”], an Unlikely Sonnet

The untitled poem by Eugen Gomringer that we can only call “silencio” is a classic, perhaps the classic, concrete poem. According to Marjorie Perloff’s Unoriginal Genius, the “silencio” version of the poem dates from 1953. In my 1968 edition of The Book of Hours and Constellations I find the German manifestation of this poem (with the word “schweigen”) and the English poem (with the word “silence”), on the same page at the very beginning of the book — but no “silencio.” The place where I do find “silencio” is An Anthology of Concrete Poetry from 1967, edited by Emmett Williams. My copy is the re-issue by Primary Information.

Williams mentions tendencies and tries not to too strongly characterize any particular poets in the anthologies when he writes, in the introduction:

The visual element of their poetry [the concrete poets’ poetry] tended to be structural, a consequence of the poem, a “picture” of the lines of force of the work itself, and not merely textural. It was poetry beyond paraphrase … the word, not words, words, words or expressionistic squiggles …

There are several essential points here about the project of concrete poetry and how it differs from, for instance, the shapes of “Easter Wings” and the other poems in George Herbert’s The Altar, as well as the way Lewis Carroll presented the image of a mouse’s tail in words that tell the mouse’s tale in Alice’s Adventures in Wonderland. However brilliant these two writers were, in these cases they were using language to make pictures; the concrete poets, beginning with Gomringer, worked to create structures. Their poems are not just verse (lineated language), but made from lines of force. In many cases, as with the unnamed poem I must call “silencio,” an entire concrete poem can be understood to cohere as a word.

There are other interpretations of Gomringer’s poem that situate it in history, but I will give a simple one that situates it within the project of concrete poetry — followed by another that places it in a different and much longer-lived poetic tradition.

The lines of force of this poem are, most obviously, those that allow for the gap in the middle where the ground (the absence of text, the absence of “silencio”) becomes figure. As ink declares silence, or, if we read the text aloud, as our voice declares silence, attentive readers can’t help but notice a truer silence in the middle of the page.

At the next stage, there is silence between each “silencio,” horizontally and vertically. We overlook this gap, which is seen even when text is not presented on a grid. It too will be represented if we read the poem aloud, however, between each spoken word.

We can go further, although ear and eye would not agree about the silences. There are spaces, and thus silences of a visual sort, between each of the letters in “silencio,” too.

Fascinating, isn’t it, that John Cage’s 4’33” was composed and presented in 1952, preceding this poem? This poem, too, seems to structurally show, through its lines of force, that silence can take center stage.

In any case, without offering more than a brief appreciation, I mean to make it clear that this is a quintessential concrete poem. One can read it out loud, but that does not provide the listener with the effect of apprehending the structure of the poem on the page. The poem is not a picture of anything. It is a structure. And it is not squiggles or simply a bunch of words, even if the single lexeme “silencio” is repeated fourteen times. It is fitting to apprehend and read the whole poem as a word, not a bunch of words.

Accepting this, I would like to offer an interpretation of this poem that may seem perverse, but which I believe shows this poem’s radical versatility: It can be seen in the light of a poetic tradition that long predates concrete poetry. This poem is not only a concrete poem, but also a sonnet. Specifically, I’ll argue that although the repeated word is a Spanish word, it fits into the English-language tradition of the sonnet. Because concrete poetry is a transnational phenomenon and Gomringer writes in English as well as German and Spanish, this disjunction may be less unusual that it otherwise would be.

Consider that the poem consists of fourteen occurrences of “silencio,” which despite their unusual arrangement on the page can be read aloud as fourteen lines. It would be hard not to read them this way.

Because each word is the same, the poem follows the rhyme scheme of a sonnet — any rhyme scheme, including the Petrarchan or Shakespearean in English, including those typical in Spanish.

If some reader finds it impossible for the same line to be repeated fourteen times in a sonnet, I refer this reader to the 2002 “Sonnet” by Terrance Hayes, which consists of fourteen repetitions of the line “We sliced the watermelon into smiles.”

But is it metrical? The word “silencio” pronounced by itself has two metrical feet ( x / | x / ) and is in perfectly regular iambic dimeter. This is also the meter of Elizabeth Bishop’s last poem, “Sonnet,” which begins:

Caught — the bubble
in the spirit level,
a creature divided;
and the compass needle

There’s much more variation in Bishop’s poem, but the metrical regularity of Gomringer’s poem shouldn’t preclude it from being in this particular form. While I don’t have an example of a sonnet with repeated lines (like the one by Hayes) from before 1953, there are earlier sonnets in dimeter, or one, at least: a piece of light verse by Arthur Guiterman, published in The New Yorker on July 7, 1939.

Sonnets can be about anything, although the form does have a heritage. Reading the poem as a sonnet allows us to make a connection to the sonnet tradition if we wish. We can, for instance, ask whether this sonnet has anything to do with love, whether in the most traditional sense of love for a woman or, in John Donne and Herbert’s senses, religious love. Could the silence of this sonnet be that of being understood, and of not needing to say anything aloud?

Seeing this Gomringer poem as a sonnet also allows us to put it into conversation with other one-word texts (those that have several tokens but repeat a single type) that can also be viewed as sonnets, because they have fourteen tokens.

The one I know of, and which fascinates me, is Dance, a typing by Christoper Knowles that I saw contextualized as visual art in his 2015 solo show at the Philadelphia ICA. The page of this work is blank except for a line at the top that repeats the word “DANCE” (in capital letters) fourteen times, with a space between each occurrence. This makes for 83 characters: 5 × 14 = 70 for the word DANCE, plus the 13 spaces that go between each pair of words. While a sheet of paper is typically thought to accommodate 80 typewritten characters across its width, Knowles found that by beginning at the extreme left edge of the page and typing to the extreme right edge, he could fit exactly 83 onto it.

The typing Dance can be read as a sonnet in hemimeter — a term used by George Starbuck for “half-feet,” and associated with light verse. Where “silencio” offers a more static and contemplative structure, I can’t help but imagine Knowles typing DANCE repeatedly, his hands dancing on the typewriter, as he also produced a text that is a score, instructing us to dance. Not so much a structure, it seems to me, but an exhortation and a trace of its making. And, of course, a text that can be read in the sonnet tradition, asking us to consider how dance, repeated, insistent, filling the width of the page completely, relates to love.

A Bit about Alphabit

During Synchrony 2019, on the train from New York City to Montreal, two of us (nom de nom and shifty) wrote a 64 byte Commodore 64 program which ended up in the Old School competition. (It could have also gone into the Nano competition for <=256 byte productions.) Our Alphabit edged out the one other fine entry in Old School, a Sega Genesis production by MopeDude also written on the train.

The small program we wrote is not a conventional or spectacular demo; like almost all of the work by nom de nom, it uses character graphics exclusively. But since we like sizecoding on the Commodore 64, we wanted to explain this small program byte by byte. We hope this explanation will be understandable to interested people who know how to program, even if they may not have much assembly or C64 experience.

To get Alphabit itself, download the program from nickm.com and run it in a C64 emulator or on some hardware Commodore 64. You can see a short video of Alphabit running on Commodore 64 and CRT monitor, for the first few seconds, for purposes of illustration.

              starting here,
              these bytes load
at:     02 08 01 00 00 9E 32 30
$0808   36 31 00 00 00 20 81 FF
$0810   C8 8C 12 D4 8C 14 D4 C8
$0818   8C 20 D0 AD 12 D0 9D F4
$0820   D3 8C 18 D4 D0 F5 8A 8E
$0828   0F D4 AE 1B D4 E0 F0 B0
$0830   F6 9D 90 05 9D 90 D9 AA
$0838   88 D0 E0 E8 E0 1B D0 DB

Load address. Commodore 64 programs (PRG files) have a very simple format: a two-byte load address, least significant byte first, followed by the machine code which will be loaded at that address. So this part of the file says to load at $0802. The BASIC program area begins at $0801, but as explained next, it’s possible to cheat and load the program one byte higher in memory, saving one byte in the PRG file.

BASIC bootloader, $0802–$080c: This program starts with a tiny BASIC program that will run when the user types RUN and presses ENTER. When run, this program, a bootloader, will execute the main machine code. In this case the program is “0 SYS2061” with the line number represented as 00 00, the BASIC keyword SYS represented by a single byte, 9E, and its argument “2061” represented by ASCII-encoded digits: 32 30 36 31. When run, this starts the machine code program at decimal address 2061, which is $080D, the beginning of the next block of bytes.

Advanced note: Normally a BASIC program would need at least one more byte, because two bytes at $0801 and $0802 are needed to declare the “next line number.” You would have to specify where to go after the first line has finished executing. But for our bootloader, any non-null next line number will work as the next line number. Our program is going to run the machine code at $080d (decimal 2061) and then break. So we only need to fulfill one formal requirement: Some nonzero value has to be written to either $0801 or $0802. For our purposes, whatever is already in $0801 can stay there. That’s what allows this program to load at $0802, saving us one byte.

On the 6502: There are three “variables” provided by this processor, the accumulator (a general-purpose register, which can be used with arithmetic operations) and the x and y registers (essentially counters, which can be incremented and decremented).

Initialization, $080d–$081a: This sets up two aspects of the demo, sound and graphics. Actually, after voice 3 is initialized, it is used not only to make sound, but also to generate random numbers for putting characters on screen. This is a special facility of the C64’s sound chip; when voice 3 is set to generate noise, one can also retrieve random numbers from the chip.

The initialization proceeds by clearing the screen using the Kernal’s SCINIT routine. When SCINIT finishes, the y register has $84 in it. It turns out that for our purposes the noise waveform register and the sustain-decay register can both be set to $85, so instead of using two bytes to load a new value into y (ldy #$85), the program can simply increment y (iny), which takes only one byte. After storing $85 in those two registers, the goal is to set the border color to the same as the default screen color, dark blue, $06. Actually any value with 6 for a second hex digit will work, so again the program can increment y to make it $86 and then use this to set the border color. Finally, the y register is going to count down the number of times each letter (A, B, C … until Z) will be written onto the screen. Initially, the program puts ‘A’ on screen $86 times (134 decimal); for every subsequent letter, it puts the letter on screen 256 times — but that comes later. The original assembly for this initialization:
    iny         ; $85 works for the next two...
    sty $d412   ; voice 3 noise waveform
    sty $d414   ; voice 3 SR
    iny         ; $86 works; low nybble needs to be $6
    sty $d020   ; set the border color to dark blue
Each letter loop, first part, $081b–$0826: This loop counts through each of the 26 letters. The top part of the loop has a loop within it in which some of the sound is produced; then there is just a single instruction after that.

Fortunately, the x register already is set up with $01, the screen code of the letter ‘A’, thanks to SCINIT. In this loop, the value of the current raster line (the lowest 8 bits of a 9-bit value, to be precise) is loaded into the accumulator. The next instruction stores that value in a memory location indexed by x; as x increases during the run of the program, this memory location will eventually be mapped to the sound chip registers for voices 1 and 2, starting at $d400, and this will make some sounds. This is what gives some higher-level structure to the sound in the piece, which would otherwise be completely repetitive. After this instruction, however many characters are left to put onto the screen (counting down from 255 to 0) goes into the volume register, which causes the volume to quickly drop and then spike to create a rhythmic effect. With the noise turned on it makes a percussive sound. All of this takes place again and again until that raster line value is 0, which happens twice per frame, 120 times a second.

After all of this, the value in x (which letter, A–Z, is the current one) is transferred into the accumulator, necessary because of how the rest of the outer loop is written. The original assembly for the beginning of the outer loop:
raster:
    lda $d012   ; get raster line (lowest 8 bits)
    sta $d3f4,x ; raster line --> some sound register
    sty $d418   ; # of chars left to write --> volume
    bne raster
    txa
Get random, $0827–$0830: This code does a bit more sound work, using the x register to set the frequency. Since this is the current letter value, it increases throughout the run of the program, and the pitch generally rises. Then, a random value (well, not truly random, but “noisy” and produced by the sound chip’s noise generator) is loaded in that x register, with the program continuing to get the value until it is in the range $00–$ef (decimal 0–239). If the value has to be obtained multiple times, frequency gets set multiple times, too, adding some glitchiness to the sound. Because the random value is bounded, the program will place the characters in a 40 character × 6 line (240 character) region.
random:
    stx $d40f       ; current letter --> freq
    ldx $d41b       ; get random byte from voice 3
    cpx #240
    bcs random
Each letter loop, last part, $0831–$083a: In the bottom part of this loop, the characters are put onto the screen by writing to screen memory and color memory. Screen memory starts at $0400, and $0590 is the starting point of our 6-line rectangle in the middle of the screen. The corresponding point in color memory is $d990. Our current character (A–Z) is in the accumulator at this point, while the x register, used to offset from $0590 and $d990, has a random value. After putting the accumulator’s value (as a letter) into screen memory and (as a color) into color memory, the accumulator is transferred back into the x register, a counter. Then the y register (counting down to 0) is decremented. The program keeps doing this whole process, the “each letter loop,” until y reaches 0.
    sta $0590,x  ; jam the current letter on screen
    sta $d990,x  ; make some colors with the value
    tax
    dey
    bne raster
Outer loop, $083b–$083f: This is the code for counting from 1 to 26, A to Z. Since the x register stores the current letter, it is incremented here. It is compared with decimal 27; if the register has that value, the program is done and it will fall through to whatever is next in memory … probably $00, which will break the program, although anything might be in memory there. It would have been nice to have an explicit brk as part of this PRG, but hey, this is a 64-byte demo with a BASIC bootloader, written one day on a train. If the program has more letters to go through, it branches all the way back up to the beginning of the “each letter loop.”
    inx
    cpx #27     ; have we gotten past ‘Z’?
    bne raster

Taper #2 Is Out

The second issue of Taper, a literary magazine featuring small-scale computational work, is now online.

The second issue was edited by Sebastian Bartlett, Lillian-Yvonne Bertram, Angela Chang, Judy Heflin, and Rachel Paige Thompson, working collectively. Bad Quarto (my micropress) publishes the journal.

The call for issue #3 is posted. The deadline is February 18 (2019).

Taper #2 features 18 works by six a., Sebastian Bartlett, Kyle Booten, Angela Chang, Augusto Corvalan, Kavi Duvvoori, Esen Espinsa, Leonardo Flores, Judy Heflin, Chris Joseph, Vinicius Marquet, Stuart Moulthrop, Everest Pipkin, Mark Sample, and William Wu. Go take a look!

VIdeo of My PRB Reading

Thanks to host Joseph Mosconi, I read at the Poetics Research Bureau in Los Angeles from two recent computer-generated books. Sophia Le Fraga and Aaron Winslow read with me on this evening, on July 21.

I have now posted 360 video of my readings of both The Truelist and Hard West Turn.

Montfort’s Poetic Research Bureau reading of July 21, 2018

I read from The Truelist (Counterpath, 2017). The Truelist is available as an offset-printed book from Counterpath, as a short, deterministic, free software program that generates the full text of the book, and as a free audiobook, thanks to the generosity of the University of Pennsylvania’s Kelly Writers House, its Wexler Studio, and PennSound.

After this, I read from Hard West Turn (Bad Quarto, 2018), a computer-generated novel about gun violence in the United States, the first of a series. Each novel, copy-edited by the author/programmer, will be re-generated annually for release on July 4. Hard West Turn (2018) is available in print in a very limited edition, only 13 copies for sale + 3 artist’s proofs. The short free software program that generated the text is available as well. The first draft of this project was done as a NaNoGenMo (National Novel Generation Month) program in November 2017.

Exquisite Corpses are Now on Display

"Some red pendulums will quickly consume the grim president ..."

In 1984, a type-in program appeared in the French Hebdogiciel—no surprise there, since this weekly publication was all about type-in BASIC programs! This one, however, was not entirely unlike the games and mathematical recreations that typically appeared; it did, however, have an explicit link to a French 20th Century avant-garde movement, Surrealism. The program, by Philippe Henri, was for the TRS-80 and called “Cadavres Exquis.”

Ariane Savoire and I have translated this program to English (as “Exquisite Corpses”) are very pleased that the Vassar Review has just published the edition we have prepared, which includes:

  • A working version of both French and English programs running in an in-browser TRS-80 emulator,
  • The BASIC code for both French and English programs, and
  • A high-quality scan of the program as it originally appeared in Hebdogiciel.

I spoke about our work on this program in my talk “Preserving Corpses with Emulation” at the Stanford Software Preservation Workshop, February 22, 2018.

Please visit the site and run this classic program for yourself. When you do, note that you must click on the black emulator area to give it focus and press a key each time you want a new sentence. That’s how the original program ran; we have not modified the way it functions. In some ways the program does seem a bit obsolete. It refers to Czechoslovakia, for instance. You can see from the included snapshots that almost 25 years later, however, “Exquisite Corpses” maintains some relevance!

Cadavre Exquis

“Bullet” and Poem without Suffering

A bullet
Discussed in this review: “Bullet,” David Byrne, American Utopia, Nonesuch, 2018; Poem without Suffering, Josef Kaplan, Wonder Books, 2015

David Byrne’s earworm takes a distant yet close perspective, describing a bullet’s fatal encounter with a human body. Did he know about Kaplan’s similar short, rapid, book-length poem? Byrne’s song sets its sights on an adult man, Kaplan’s poem on a child. The life of the child is hinted by describing what a warm maternal relationship is like, and by mentioning injuries from falling off a bunk bed and being hit by a baseball. We hear about the man’s life because of what the bullet cuts through: “Skin that women had touched,” “Many fine meals he tasted there,” “his heart with thoughts of you.” The general description is very effective. There are striking metaphors — positive associations — for the bullet itself, also. In Poem, it is a triumphant runner (such as Usain Bolt, who bears the name of a crossbow’s projectile) dragging gore from the body as if it were a trophy or banner. In “Bullet,” it is “Like an old grey dog / On a fox’s trail.” Perhaps America’s reliable old dog cannot be taught new tricks.

American Utopia · Poem without Suffering

Concise Computational Literature is Now Online in Taper

I’m pleased to announce the release of the first issue of Taper, along with the call for works for issue #2.

Taper is a DIY literary magazine that hosts very short computational literary works — in the first issue, sonic, visual, animated, and generated poetry that is no more than 1KB, excluding comments and the standard header that all pages share. In the second issue, this constraint will be relaxed to 2KB.

The first issue has nine poems by six authors, which were selected by an editorial collective of four. Here is how this work looked when showcased today at our exhibit in the Trope Tank:

Weights and Measures and for the pool players at the Golden Shovel, Lillian Yvonne-Bertram
“Weights and Measures” and “for the pool players at the Golden Shovel,” Lillian Yvonne-Bertram

193 and ArcMaze, Sebastian Bartlett
“193” and “ArcMaze,” Sebastian Bartlett

Alpha Riddims, Pierre Tchetgen and Rise, Angela Chang
“Alpha Riddims,” Pierre Tchetgen and “Rise,” Angela Chang

US and Field, Nick Montfort
“US” and “Field,” Nick Montfort

God, Milton Läufer
“God,” Milton Läufer

This issue is tiny in size and contains only a small number of projects, but we think they are of very high quality and interestingly diverse. This first issue of Taper also lays the groundwork for fairly easy production of future issues.

The next issue will have two new editorial collective members, but not me, as I focus on my role as publisher of this magazine though my very small press, Bad Quarto.

Using Electricity readings, with video of one

I’m writing now from the middle of a four-city book tour which I’m on with Rafael Pérez y Pérez and Allison Parrish – we are the first three author/programmers to develop books (The Truelist, Mexica, and Articulations) in this Counterpath series, Using Electricity.

I’m taking the time now to post a link to video of a short reading that Allison and I did at the MLA Convention, from exactly a month ago. If you can’t join us at an upcoming reading (MIT Press Bookstore, 2018-02-06 6pm or Babycastles in NYC, 2018-02-07 7pm) and have 10 minutes, the video provides an introduction to two of the three projects.

Rafael wasn’t able to join us then; we are very glad he’s here from Mexico City with us this week, and has read with us in Philadelphia and Providence so far!

Author Function

The exhibit Author Function, featuring computer-generated literary art in print, is now up in MIT’s Rotch Library (77 Mass Ave, Building 7, 2nd Floor) and in my lab/studio, The Trope Tank (Room 14N-233, in building 14, the same building that houses the Hayden Library). Please contact me by email if you are interested in seeing the materials in the Trope Tank, as this part of the exhibit is accessible by appointment only.

There are three events associated with the exhibit happening in Cambridge, Mass:

February 7, 6pm-7pm, a reading and signing at the MIT Press bookstore. Nick Montfort, Rafael Pérez y Pérez, and Allison Parrish.

March 5, 4:30pm-6pm, a reception at the main part of the exhibit in the Rotch Library.

March 5, 7pm-8pm, a reading and signing at the Harvard Book Store. John Cayley, Liza Daly, Nick Montfort, and Allison Parrish.

In addition to a shelf of computer-generated books that is available for perusal, by appointment, in the Trope Tank, the following items of printed matter are displayed in the exhibit:

  • 2×6, Nick Montfort, Serge Bouchardon, Andrew Campana, Natalia Fedorova, Carlos León, Aleksandra Ma?ecka, and Piotr Marecki
  • A Slow Year: Game Poems, Ian Bogost
  • Action Score Generator, Nathan Walker
  • American Psycho, Mimi Cabell and Jason Huff
  • Anarchy, John Cage
  • Articulations, Allison Parrish
  • Autopia, Nick Montfort
  • Brute Force Manifesto: The Catalog of All Truth, Version 1.1, Series AAA-1, Vol 01, Brian James
  • Clear Skies All Week, Alison Knowles
  • Firmy, Piotr Puldzian P?ucienniczak
  • for the sleepers in that quiet earth., Sofian Audry
  • From the Library of Babel: Axaxaxas Mlo – The Combed Thunderclap LXUM,LKWC – MCV – The Plaster Cramp, Christian Bök
  • Generation[s], J.R. Carpenter
  • Google Volume 1, King Zog
  • How It Is In Common Tongues, Daniel C. Howe and John Cayley
  • Incandescent Beautifuls, Erica T. Carter [Jim Carpenter]
  • Irritant, Darby Larson
  • Love Letters, Letterpress Broadside, Output by a reimplementation of a program by Christopher Strachey
  • Mexica: 20 Years – 20 Stories / 20 años – 20 historias, Rafael Pérez y Pérez
  • My Buttons Are Blue: And Other Love Poems From the Digital Heart of an Electronic Computer, A Color Computer
  • My Molly [Departed], Talan Memmott
  • no people, Katie Rose Pipkin
  • Phaedrus Pron, Paul Chan
  • Puniverse, Volumes 32 and 38 of 57, Stephen Reid McLaughlin
  • Re-Writing Freud, Simon Morris
  • Seraphs, Liza Daly
  • The Appearances of the Letters of the Hollywood Sign in Increasing Amounts of Smog and at a Distance, Poster, David Gissen
  • The Poiceman’s Beard is Half Constructed: Computer prose and poetry by Racter
  • The Truelist, Nick Montfort
  • Tristano, Nanni Balestrini
  • Written Images, Eds. Matrin Fuchs and Peter Bichsel

Here are some photos documenting the exhibit:

Author Function Rotch main display case

Author Function book displays and gallery walls

Author Function book displays and gallery walls

Author Function book displays and gallery walls

Author Function book displays and gallery walls

Author Function book displays and gallery walls

Author Function book displays and gallery walls

Author Function book displays and gallery walls

Author Function book displays and gallery walls

Author Function book displays and gallery walls

Author Function book displays and gallery walls

Author Function book displays and gallery walls

Author Function book displays and gallery walls

Author Function book displays and gallery walls

Author Function book displays and gallery walls

Author Function book displays and gallery walls

Author Function book displays and gallery walls