CW 697 Special Topics: Exploratory Digital Practices for Poetics & Writing
Spring 2018 W: 7-9:45pm
***Subject to change!***
Goals & Objectives
This course aims to introduce students (with no prior knowledge necessary) to the literary applications of programming, code, and diy/makerspace possibilities. The goal is to demystify the technologies in such a way that it is clear how they can be used and applied to literature or literary inquiry, while providing introductory level tutorials such that anyone be able to use them and achieve similar results. Another objective is to get students using the technologies to explore their own literary questions be they analytical or creative.
Format for Meetings
The class meets 7pm-9:45pm(give or take) on Wednesday nights. As of this writing it’s being held in the TEAL room in University Hall, but it might switch to the digital studio in Wheatley Hall. You must bring a laptop to each class session and it must be properly set up for the class.
It’s a late class and this means that around 9pm, people (including myself) are tired. This is when code can become inscrutable and frustrating! Let’s try and not let this get us down. Bring whatever you need to be comfortable for a late-night long haul (coffee, snacks, music, headphones).
When we discuss one another’s work, we will be holding informal “critique” sessions. No, not the cutthroat critiques that terrify the art student, but empathetic critiques. That is, “a search to discover what has happened/is happening in the work.” Empathetic critique assumes that everyone has tried their best; it is based in curiosity (not judgement). Students will briefly demonstrate their work along with some introductory comments, and the others will ask questions, give suggestions, reflect on what is being presented, and suggest revisions or ways to advance and/or enhance the work. The maker of the work gets credit for the potential value of outcomes, even if accidental; the maker is made to feel empowered through self-awareness.
You do need a laptop (not a tablet), for the class. MAC or Windows doesn’t matter. You should, however, make sure your operating system is up-to-date. You should also bring the textbook and readings to each class session when relevant. You will need to have access to the internet and should always keep your codes handy in case you want to refer back to them. Make sure to bring your laptop charger to class with you!
If you’ve had class with me, you know I love to use Slack. I am going to ask that you download Slack for your computer so that you can run it as a desktop app. If you already have it, great. If you’re not familiar with Slack, Slack is a team-based messaging app that allows members to communicate with one another in real-time. It’s also available as an Iphone and Android App. I use Slack because it offers real-time q&a, collaboration, and information exchange. While you won’t be working together on any specific project in this class, everyone will, indeed, be working together. Some of you may have programming experience and some of you may not. Regardless, everyone benefits from shared information, especially in a coding environment. Fun fact: programming in the real world is often done in teams and team-based practices like SCRUM are often taught.
For example, say you get stuck on one of the exercises in the textbook, and you can’t figure out why your code isn’t working. Slack allows for the easy input of chunks of code into a message window. You could message your code to the group asking for help and in turn, get suggestions or references from everyone else in the class. If you are struggling with a particular exercise or problem, chances are someone else is too! While all the programs are generally cross-platform, there are some differences between how things appear on Mac and PC. I use a PC and run Windows 10, so I’m not much use when it comes to designating file pathways in OSX. But someone else running on a Mac might be able to help. Bottom line is that Slack connects all of us together so that we can share resources, strategies, and ask questions!
Before the First Class
1. Install Anaconda for Python 2.7
We will be using something called a Jupyter Notebook (formerly called iPython Notebook) installed with the current version of Python 2. Python 3 exists but is slightly different than Python 2 and the main textbook uses Python 2. Python 2 is the standard version that comes with most Linux distributions and Mac OSX. To get everything you need up and running, download and install Anaconda for your operating system, being certain to choose Python 2.7. For those who already have a version of Python already installed, you will get another one in addition to that when you install Anaconda, and this shouldn’t be a problem. Just make sure your Jupyter Notebook is set up to create notebooks for Python 2. (We won’t go into it here, but you can install the Python 3 kernel and run both types of notebooks in Jupyter.)
2. Install/Have Ready a Text Editor
You will need to install a true text editor, not a word processor. There are many options for text editors according to one’s operating system.
· On any OS you can use a free, cross-platform editor that is made to be a GUI (graphical user interface) application, such as Atom. There are others, like Geany. I have used Geany before but I currently use SublimeText and prefer it. I also have Notepad++.
· If you’re running GNU/Linux you likely have gedit, emacs, vim, bash, or one of many other free-software editors installed. If so, you should already be comfortable using one of these.
· On Windows, the built-in Notepad is a plain text editor, but Notepad++ is more robust and it’s a free download.
· On Mac OS X, many people like TextWrangler and Sublime, but they are not free software. (But Sublime is free). I believe Sublime works on PC and Mac. A program called “TextEdit” is included with OS X but this is not a plain-text editor, it’s more of a lightweight word processor. Don’t use it or any word processor.
3. Install TextBlob
In addition to the libraries that come with Anaconda, we need TextBlob, a Python library for manipulating text. We’ll use it later, but we’ll be sure to have it installed and working by the end of the first class. Installation is done using the program pip on the command line as indicated on the main TextBlob page.
4. Note on “Free Software”
When I mention “free software” I am talking about it in the sense that the Free Software Foundation does. I don’t mean simply that it is priced at zero dollars, but that it comes with certain freedoms, to run, copy, distribute, study, change and improve the software. For these reasons, as we'll discuss further during the course, the concept of free software is connected to exploratory programming.
Most of points 1-4 come directly from Nick Montfort’s syllabus for his spring 2018 exploratory programming course. Thanks Nick!
80% of the course grade is based on the in-class and take-home assignments that include textbook exercises, free projects, and projects from our tutorial sessions. Assessment for these grades is based on completion, quality, and working code. What do I mean by “quality”? If an exercise or project asks for a “significant” or “meaningful” modification, don’t just change a word or two and call it a day. Some will offer more possibilities for modification than others. All the code for the exercises and projects should work. Anyone should be able to take the codes and plug them into a notebook or python/JS environment and produce the same result. You’ll still get credit if, for some reason, you just couldn’t get your code to work and you came close—just not as much credit. If code doesn’t work, then there’s an opportunity in the critique sessions for us to troubleshoot it as a group, or you can ask for help along the way via Slack.
20% of the course grade is presence and participation, in-class and via Slack. You must come to class, participate, comment on student work, and do the in-class assignments. Students can miss one class session without penalty for involuntary reasons (sick, car trouble, etc.) However, there is the option of possibly being Skyped in or Blackboarded in if the problem is just that you can’t get to campus for some reason. Try and let me know in advance if that’s possible. Aside from that, missed classes are a 5% deduction off the final grade. If you have to miss class for voluntary reasons (pub crawl, just not feeling it, you have a paper due for another class), that’s not an excused absence. Extenuating circumstances? Talk to me as soon as you think something is going to hinder your success in the class. I can be pretty forgiving but only if I know what’s going on.
Exploratory Programming for the Arts and Humanities—Nick Montfort (Do not get the e-book. It’s much easier to follow along and use the hardback. Likely available at the MIT Press Bookstore.)
Prehistoric Digital Poetry—Christopher Funkhouser
Virtual Muse—Charles O. Hartman
#!—Nick Montfort (Likely available at the MIT Press Bookstore in Cambridge)
Adafruit NeoTrellis Kit and data-capable USB A to Micro B cable and optional USB powered speakers OR Adabox 10 plus optional USB powered speakers. (You can always use your own USB speakers or speaker output if you have one.) [Note: Adafruit offers a discount code every Wednesday through their live show, so you need to watch the show.]
Python Crash Course—Eric Matthes
Python for Kids—Jason R. Briggs
Digital Poetics: The Making of E-Poetries—Loss Pequeno Glazier
New Media Poetics—Morris Et Al.
Articulations—Allison Parrish (Likely available at the MIT Press Bookstore in Cambridge)
Suggested Important Websites
Wed Jan. 30: Getting Started
· Make sure everyone has the tech up and running
· JS text generation modification (New Year Haiku)
· Getting started with Jupyter and Python
· The command line, installing TextBlob, -pip
· Useful information repositories (GitHub, StackOverflow, ReadTheDocs, W3 Schools)
Assignment for next week: Read Chapters 1-3 in Exploratory (Introduction, Calculating, Double Double). Type in all the code examples and try to get them working. If you get stymied, ping the group on Slack. Turn in the “Free Project: Modifying a Simple Text Machine” and “Free Project: A Modified ‘Double Double’”.
Feb 6: More Python fundamentals: random number generator, dice roll program
· Quick recap of Chapters 1-3 in Exploratory, discussion of free projects, troubleshooting.
· Introduction to import and libraries: **We did this last class!
· Generating random numbers:**We also did this last class!
· Dice roll program:**And we also did this!
So, what shall we do??
Revisit the dice throw remixes (choice of text?)
Recap Chapters 1-3, focusing on key takeaways and impressions:
Empathetic ‘critique’ of and discussion of modified text engine aka ‘how’d you do that??’ (choice of text)
Introduction, if time, to Trinket.IO tutorial
Assignment for next week: Read Chapters 4-6 in Exploratory (Programming Fundamentals, Standard Starting Points, Text I). Type in all the code examples and try to get them working. Turn in 3 of 5 exercises from the following: Same Last Character, Counting Spaces, Counting Nonspaces, Determining Initials, Removing Vowels. Bonus Project!: Follow along with the Trinket.IO tutorial to use Python to generate text or modify one of Nick’s html-to-Python conversions.
· Quick recap of chapters 4-6 in Exploratory, discussion of exercises, troubleshooting.
· Reading in text
· Manipulating read-in text
· Exploring some internet-based poetry generators, in-class assignment
Assignment for next week: Read chapters 7 and 10 (Text II and Text III) in Exploratory. (Don’t worry if you can’t get regular expressions to perform exactly.) Turn in 1 of 2 free projects: Creative Conflation, Your Very Own Classifier. Also read Virtual Muse.
· Quick recap of chapters 7 and 10 in Exploratory, and Virtual Muse.
· Discussion of projects, troubleshooting.
· Revisit dice roll
· Sample text generator/manipulator
Assignment for next week: To turn in, use Python to create a text generator/manipulator that involves reading in text from a .txt document. The program should work and also display examples. It doesn’t have to be complicated. It could be as simple as randomizing lines from your own work. Or, it could replace the verbs in your written text randomly chosen verbs from another text. It could significantly modify a code like that from “A House of Dust” using, instead, adjectives or nouns that have been tagged and sorted from another text using TextBlob. It could significantly expand on what is essentially a template in “A House of Dust” and make the template more complex. It could use a template from your own sentences that you’ve written, and randomly populate the fields for parts of speech with lists you’ve developed.
Also read up to chapter 3 in Prehistoric Digital Poetry. Use the companion websites to visit or revisit the programs Funkhouser references.
Discussion of Virtual Muse and intro-through-chapter 2 of Prehistoric Digital Poetry; look at some early examples.
More text generator work (in-class)
Assignment for next week: Finish Python text-generator. Use the comments in the code to discuss your intention and what you hope the code to do. Include an example of the output. You are encouraged to use your own text and writing as the inputs.
Read chapters 3-5 and the appendices in Prehistorical Digital Poetry. Also read #! by Nick Montfort.
Critique of Python text generators
Assignment for week after next: ?
March 13 (No Class, Spring Break)
Discussion and critique of text generators!
Class on TUESDAY at 4pm! Location either room 47/6th floor or the Digital Studio
Introduce some JS and Ali Rachel Pearl’s “Street Ghosts”
Assignment for next week:
Skype visit and Street Ghosts tutorial by Ali Pearl
Assignment for next week: Modify and remix Street Ghosts code. Turn in the html file.
Discussion and critique of modified Street Ghosts projects.
Visit from Anne Marie Rooney (poet) and Sam Sheffield (game designer)
Introduction to Tracery and tutorial
· Discussion and critique of StreetGhosts! (Maybe Tracery?…)
· Prep for Trope Tank visit
May 1: Visit the Trope Tank!
NeoTrellis assembly and tutorial
NeoTrellis discussion and presentation