time can pass you by

No title available

shark vs the universe
almost home

JBB: An Artblog!
we're not kids anymore.
taylor price
trying on a metaphor
Today's Document

⁂
sheepfilms

pixel skylines
Stranger Things

#extradirty

Product Placement

Origami Around
art blog(derogatory)
Claire Keane

izzy's playlists!

JVL
2025 on Tumblr: Trends That Defined the Year

seen from Malaysia
seen from Sweden

seen from United States

seen from United States

seen from United States
seen from Canada
seen from United States
seen from United States

seen from United States
seen from Trinidad & Tobago

seen from United States

seen from Malaysia
seen from Romania

seen from United States
seen from Canada

seen from T1
seen from United States

seen from Malaysia

seen from Canada

seen from Mexico
@likeallstars
time can pass you by
So you want to build a generator...
This is a beginner-level advice essay for people just getting started with building generators. It’s also for practiced experts who want a way to organize their knowledge. The advice is meant for any kind of generators: humorous twitterbots, fanciful art-making bots, level generators, planet builders, makers of music, architecture, poetry, and cocktails. (edit: it turned out to be 4000 words long, so enjoy the ride!)
With so many possible kinds of generators, what advice can I give? Any advice will depend on what kind of generator you want to build. I’ll give you a list of questions to ask yourself, and advice to match the possible answers.
The first question is: What are you making?
Write down the thing that your generator will make. We’ll refer to this as your “artifact” but it could be anything: procedural birds, generated stories, animated dance choreography, gazpacho recipes, RPG quests, chess variants.
Now the hard part. Inhale, exhale, and start writing down everything you know about what makes one of those successful. What qualities does a good one of those artifacts have? “Funny”, “Harmonic”, “Playable”? Now go deeper: the more specific the kind of thing you are making, the more specific and detailed you can get with these requirements. What does a “fun” level mean? “Fun” will mean very different things for Super Mario or Civilization or Bejeweled. I can come up with more properties of a good paranormal regency romance novel than I can come up with rules for a good novel. The easiest generators to make are the ones where you can describe “good” artifacts as sets concrete properties.
Now flip the question on its head: what makes a “bad” example of this artifact? List everything you can think of, including properties that are merely unfortunate, and properties that are total deal-breakers. Put a star next to anything that absolutely must not happen. These are your constraints. The most reliable generators are the ones where you can concretely describe constraints.
You now have a list of desirable properties and constraints that you want and don’t want for your artifacts. We want a generator with a possibility space (all the kinds of artifacts it can generate) where most of the artifacts have the good properties, and few (or none) of the artifacts have bad properties. We’ll also want a range of artifacts, not just the same perfect artifact over and over and over, though how wide a range that is is a choice for you, the designer (a problem identified by Gillian Smith and being explored by Michael Cook).
Now we have the guidance we need to start building methods that make artifacts.
An alternative approach: the previously described method is good for inflexible situations, where you know ahead of time what you want to build. For many situations, like game jams or prototypes or side projects, you can be more flexible and improvisational! You can start with a methods or some loose pieces to figure out what it ‘wants’ to generate (what properties is it best at generating?) and then revising what artifacts you are generating to better suit what the generator is good at making. I talk more about this approach in my 2015 Procjam talk.
Building Your Artist-in-a-Box
When the Spore editors were being designed, the engineers, designers worked closely with the art team to understand how an artist or an animator would go about sculpting and texturing a creature. If they could understand the process and design an algorithm that could follow that process on demand, they would have an “Artist-in-a-box” that could make procedurally generated creatures that would be nearly as good as the original animator would have made. Designer Chaim Gingold explained this process in his 2007 GDC talk audio slides and Art Director Ocean Quigley used a similar process to experiment with what kinds of building blocks he would want for building cities
It is helpful when making a generator to sit down with someone who makes the sort of artifacts you are building, and have them walk you through the process of making something. What questions do they ask themselves along the way? How do they make decisions? How do they describe the tradeoffs between choices? How do they describe the different problems that they have to keep in mind? How do they name all the parts of what they are working on, and all the relationships between them? (the academic term for this is an “ontology”)
Some fields have expert practitioners who have written frameworks, often controversial, to describe what they do. Music theory has proposed plenty of rule systems, for example, for jazz improvisation or Bach-style harmonies or pop songs. Story generation has narratological theories like The Hero’s Journey, but also informal frameworks like TV Tropes. Art theory has the Golden Ratio and color harmonies and composition rules (I haven’t found those visual aesthetic rules to be productive in my own work, though you may feel differently). No framework is complete, or makes provable good artifacts, but they can help give you guidance and inspiration.
So now, ask yourself: How would a human solve this problem?
From rules to generative methods
Unfortunately, knowing how a human would make something isn’t the same as being able to teach a computer how to do it. Humans are good at estimation, and making guesses, and synthesizing a lot of knowledge about past situations. Computers know only what you tell them, and many problems require way more implicit knowledge than we think, but they are good at performing lots of calculations and trying out lots of possibilities. So the methods we want to use will need to provide a way for the computer to solve problems like a human, or at least with a way to mirror some of the skills of a human. Methods that are particularly good for building generators (generative methods) will give the computer some of the following skills:
Encapsulate knowledge of options (skill A)
Create some structure (skill B)
Encode conditional rules for options (A2)
Create variability in structure (B2)
Be able to ask itself questions about its constraints (have I solved this?) (skill C)
Distribution
This is the easiest kind of generative method. You have a bag of stuff and an area of space or time that you can spread them out across. Distribution methods usually don’t have much overall structure (B), but they are often very sophisticated with the odds of picking each option (A). Some use weighted randomness to change the distribution percentages, or ‘deck shuffling’ (putting all the options in a stack and discarding when they are used), which prevents accidentally picking the same option twice. The conditional rules (A2) can get quite complex as well, but specifying arbitrary conditions is difficult to implement in practice. Most systems have carefully chosen parameters that can be set for each option and the conditional functions can just look compare the fixed parameters to make choices.
For an RPG example, wandering monsters are distributed around the environment (A). Higher monsters are found in higher level areas, water monsters in water, etc (A2). There may be a little structure to how they are distributed, like several 'baby’ versions of a monster leading up to the 'boss’ version. Loot is also distributed: you may be more likely to get high level loot in high level situations (A2) but there’s still some randomly selected stuff chosen from a big list of possible loots (A).
Distribution in music and language doesn’t work well. Randomly selected strings of words or musical notes don’t have enough structure to make interesting meaning. For structure-heavy artifacts, you might want tile-based or grammar-based methods instead, or for something with very fixed structure and not much variability you could try the Parametric approach.
Parametric methods
You have a pretty well-built artifact already, and you know that you can tweak it a little. You have music, and you can transpose it up or down, make it louder or softer. You have a teapot, and you can make the spout curve out farther, you can make the body tall or short, thin or fat, and you can make the base wide or narrow. You have a set of hand-made alien creatures, and you can tweak their legs to be long, fat, curved, or flat-footed, and their bellies to be slender or barrel-shaped, and this changes their voice as well. This is how creatures in “No Man’s Sky” are varied. This is a very reliable and controllable technology! For 3D models, can often be encoded as a Maya animation channel, allowing it to blend with other animations (a Spore trick used in the rig-block animations). But your variability (A) is only along fixed one-dimensional numerical paths, there is no structure variability at all (B2). You can see something “new”, but never something surprising.
A more sophisticated form of parametric methods uses other forms of input, and can generate new artifacts based not only numerical, but also point-based, path-based and graph-based input. When you draw a line in Photoshop with a tablet pen, your path becomes the input to an algorithm that renders a brushstroke, taking into account pressure, speed, and tilt as parameters at each point. The Spore creatures, likewise, used Metaballs, a geometry creation algorithm that could create smooth tubes along paths in 3D space. Other algorithms for filling spaces and paths are Voronoi patterns, Perlin/Simplex noise, triangulation algorithms, 3D extrusion or rotation, and the Diamond-square algorithm for fractal terrain. These algorithms are particularly well-suited for interactive generators, because the user can provide the input parameters for the generator.
Want more? Inconvergent.net has more intriguing specimens of these than you could possibly ever need, with open-source implementations.
However, though these algorithms are delightfully surprising, they can often be too uncontrollable to provide the constraint-satisfaction needed for gameplay or other highly-constrained artifacts.
Tile-based
Chop the problem up into modular, identically-sized slots. Have a number of different hand-made solutions that can fill in these slots. The artifacts being created are just differently-selected-or-ordered sets of pre-authored solutions. A familiar example of this is the board layout for games like Settlers of Catan and Betrayal at the House on the Hill (or Civilization for a digital example). The island, and the mansion, are constructed from the same tiles each time, but laid out differently, which changes the gameplay. Some of the earliest forms of generative content I’ve found are the Musikalisches Würfelspiel from 1750s and earlier, with which pianists could put together “tiles” (in this case: measures) of music to produce a playable waltz.
Tile-based methods are great for small-scale structure (B) because the insides of the tile are pre-authored, but they have no flexibility (B2) for small-scale structure for the same reason. Large scale structure is harder to control: it can be totally random. There can be more advanced constraints about which tiles can go next to other tiles but then you may need a complex algorithm to solve for compatible layouts of highly-constrained tiles (“The beach tile can go next to a jungle tile, but cannot be within two tiles of a river tile and…..”). Individual tiles have a very rigid encapsulation of possible options (A), because each possible tile has to be authored by a human. These systems don’t have enough knowledge to come up with good new tiles by themselves. Tile-based methods work for problems that can be broken-up into small chunks where internal structure matters, but that can still create interesting (but not constraint-breaking) behavior when combined in different orders.
Interested in more analog content generation? Additional forms of boardgame and role-playing-game content generation can be found in this paper by Gillian Smith, and this exploration of comics by Chris Martens
Grammars
Grammars are one of my favorite generative methods, because I find that they give me a great way to make very deep and complicated structures while still also having a lot of control over my options. Grammars are a computer-sciency way of saying that big complex things are made out of other things, and those other things may themselves be made out of even smaller simpler things. Orteil’s Nested is a lovely example of this. The universe is made of galaxies made of planets made of continents full of people who are full of thoughts and dreams and memories and atoms. Each symbol (that is, a type of thing) has a distribution of sub-symbols that it might be composed of. When it “unpacks” it has to pick one of those options (and any subsymbols then unpack recursively). Grammars make it easy to encode knowledge about a particular artifact and its structure and its options all in one piece of data. I like them so much I made a library to help people work with them, Tracery. This has been used to make a twitterbot hosting service and lots of great weird creative twitterbots including some of my own.
The downside of grammars is that they do not have a way to handle constraints, unless the constraints are implicitly encoded in the grammars themselves (if a bed can only be in a house, than only the house can have a bed as a sub-child, for example). It’s harder for grammars to encode high level relationships between different things generated at different points in the grammar. If you wanted to have foreshadowing of the villain’s death at the very beginning of the grammar, that might be difficult to do, and you might want to use the 'big hammer’ of a constraint-solver.
Constraint solvers
Constraint solvers are very powerful, very recent tools in our generative arsenal. They are what you use when you have a lot of hard constraints, a lot of flexible and complex structure, but you don’t know how to build out the structure in a way that will be sure to solve your constraints.
The oldest simplest version of this is brute force solving. Make every possible variant of content, toggle every switch, make an alternative universe where you have made each different decision, and test your constraints until you find one that works. This is a viable solution for some problems! But as any mathematician will tell you, too many choices will create a number of possible artifacts to search that is greater than the number of atoms in the universe. And that’s going to be slow.
There are often shortcuts you can take, depending on how your constraints are structured (I don’t have to choose an ice-cream flavor in possible futures where I did not go out for ice cream). But this takes a long time to author by hand (just ask the Storyteller developer).
Fortunately, many mathematicians and logicians find it amusing to try to solve this problem, and they have come up with general purpose solvers. Plug in your constraints and structure and options (in a language that it can understand) and it will find all the cheap shortcuts to cut the aeons of brute-force solver time down to something slow but accomplishable within normal gameplay time.
Because these tools are big and bulky and new, they are still hard to plug into many game engines, and there aren’t many tutorials. Adam Smith has been doing good educational outreach for Answer Set Solving, a particularly powerful one. Another one with some support is Craft by Ian Horswill, a constrained random number generator, that has been recently ported to javascript. Look for these rare but powerful methods to be more common in the future!
Agents and Simulations
This is where it gets weird. Remember how I said that we could look at how humans solve problems to provide inspiration for our generators?
Guess what: humans aren’t the only ones who solve problems
There are algorithms that solve problems based on the colonial behaviors of ants, or the social communications of fireflies. Many other agents and simulations take inspiration from other parts of nature, like flocks of birds, evolution, bacteria, neurons and cities. Here are a few of my favorites, but there are many more.
Steering behaviors (these deserve their own long post some day) can create remarkably complex crowd motion. Braitenberg vehicles were originally a thought experiment about simple machines with two photosensitive eyes and two wheels that could 'steer’ themselves just by activating one wheel more than the other, applying an asymmetrical force that changes their direction. Despite their total brainlessness, they can show 'fear’ and 'adventure’ and have been ported to many languages and physical robots.
Boids took the steering approach of the Braitenberg vehicles and applied it to flocks of birds and fish (and the wildebeest in the Lion King animated movie). Each bird helps keeps its flock in shape by calculating applying its own forces for cohesion, alignment and separation. Small variations in the each birds’s tuning values can generate new behavior for the flock.
I’ve also used steering forces to generate procedural dance: you just replace the flocking forces with rhythmic forces in time to the music paper. Steering forces can do a lot more than pathfinding, but I don’t think they haven’t yet been explored to their full potential.
Genetic algorithms, as can be seen in my flower-evolving app aren’t methods to generate content, you still need a generator (a flower generator in this case). But they are a way to guide that generator towards more constraint-fulfilling and desirable-property-producing content. A genetic algorithm (which, yes, needs its own post), needs three things:
A thing you can modify (a 'genotype’)
A thing you can judge (a 'phenotype’)
A way to turn the first into the second
For the flowers, the genotype is an array of floats. That array gets fed into a parametric generator to create a pretty animated flower (turning genotype to phenotype). The user can see which flowers they like (a judgable phenotype). They pick their favorite, it’s original genotype is cloned and mutated (a thing you can modify, remember?) and the next generation is born from its mutant babies, and overtime, evolution happens. Sexual reproduction is common in GAs, but so are many other interesting kinds of reproductions and metaheuristics. There’s a lot of neat research in this area!
Cellular automata rely on many very simple agents, all working in parallel. The canonical example of this is Conway’s Game of Life, in which many tiny automata in a grid, each with a very simple behavior, can give rise to so many strange behaviors and phenomena that many mathematicians make a hobby of discovering and cataloging them.
Cellular automata with more complex rules are used to create Dwarf Fortress, the classic Powder game, and with the advent of voxel-based simulation, are taking on a new life as the engine behind Minecraft
After you generate…
You’ve browsed this list of generative methods, you’ve got your list of constraints and properties in hand, and you’ve built your generator!
Now what?
Ways that generators fail
Something has gone horribly wrong. The content looks ugly. The content all looks the same. The content looks like genitalia. The content is broken. Some of these problems are easier to solve than others. Here are a few kinds of difficult problems you will encounter.
One will be the kind where you can computationally identify when something is going wrong. The solution to this one is to generate some new content until this constraint is no longer violated. Perhaps you want a generated chair to have its center of gravity over its support points (like legs), so it won’t fall over. This is possible to calculate with a physics simulation, so if the generated chair fails, generate a new one until it passes. This approach is called “generate and test”.
What can go wrong with “generate and test”: what if every chair you generate fails this test? Perhaps content that passes the test is very rare. Or there are too many constraints, if you have constraints for material thickness and cost and symmetry and comfort and more? Each chair might satisfy most constraints, but with enough constraints, most chairs will still fail one or two. Maybe you need a constraint solver. Or maybe you need to restrict your generator so that it is more conservative with its choices, though that may lose interesting possibility space.
Another difficult constraint is when you cannot adequately describe your constraints. This is a remarkably common situation, because there are so many things that we don’t want but can’t write rules that “I know it when I see it” can be used as a serious legal argument.
Is this an offensive adjective to use to describe this character? Does this color palette look too much like a corporate logo? Does this look like genitalia? Is this just… ugly? This is a hard and unsolved problem, I’m afraid. If you can’t define “bad” content, it becomes impossible to filter, especially when your human users are trying to get around the detection algorithm. In this case, the best path is to construct an generator such that it is harder or less-likely to make offensive content. This also restricts your possibility space, like removing words that are harmless and useful unless combined in a particular way.
Aesthetics: the toughest challenge
The most common way that generators fail is that they produce content that fails to be interesting. What is “interesting”? That depends on the situation. Very few generators produce only one of a thing. Most generate multiples, but a twitterbot posting every hour will generate more content than a novel-generator outputing one novel every NaNoGenMo. So achieving novelty with the first Twitterbot will be more difficult because there are so many artifacts being produced that any given one of them will probably start seeming less special.
So your algorithm may generate 18,446,744,073,709,551,616 planets. They may each be subtly different, but as they player is exploring them rapidly, will they be perceived as different? I like to call this problem the 10,000 Bowls of Oatmeal problem. I can easily generate 10,000 bowls of plain oatmeal, with each oat being in a different position and different orientation, and mathematically speaking they will all be completely unique. But the user will likely just see a lot of oatmeal. Perceptual uniqueness is the real metric, and it’s darn tough.
In some situations, just perceptual differentiation is enough, and an easier bar to clear. Perceptual differentiation is the feeling that this piece of content is not identical to the last. A user glancing at a line of trees can tell if they are identical, or if they are less-varied-than-expected suggesting unnaturalness. This fulfills an aesthetic need even if no tree is particularly memorable.
Perceptual uniqueness is much more difficult. It is the difference between being an actor being a face in a crowd scene and a character that is memorable. Does each artifact have a distinct personality? That may be too much to ask, and too many for any user to remember distinctly. Not everyone can be a main character. Instead many artifacts can drab background noise, highlighting the few characterful artifacts.
Characterful artifacts is another blog post for another time, but certain aesthetic principles create objects with readable meanings for human perception. Humans seem to like perceiving evidence of process and forces, like the pushed up soil at the base of a tree, or the grass growing in the shelter of a gravestone. These structurally-generated subtleties suggest to us that there is an alive world behind this object. Kevin Lynch’s influential “Image of the City” demonstrates that there are factors that make cities memorable and describable. Perhaps there are other aesthetic rules that we can discover, too.
Conclusions:
Oh, my, this turned into a monster of a blog post. It’s probably full of errors and omissions, but I hope it will be of use to you.
If you want to begin playing with generativity right away, here are some great tools to get your feet wet:
http://cheapbotsdonequick.com/: the Tracery twitterbot maker, now with SVG supprt
http://www.contextfreeart.org/
http://ncase.me/simulating/ Simulating the World in Emoji, a brilliant playground for emoji-based cellular automata
Want to learn more? Or meet like-minded people?
There’s a free online PCG textbook written by the top academic researchers in generation for games
I’m absolutely in love with this book by the brilliant Daniel Shiffman that teaches Processing through the lens of nature’s processes
The Computational Creativity Group at Goldsmiths does extremely varied work in computational creativity, the practice of trying to make computers “creative”. The International Conference on Computational Creativity is a place where many of these people meet to share ideas. Their past papers are a great resource on generating art, poetry, music, memes, and more!
The Expressive Intelligence Studio is my home at UCSC, where we work on AI for expressive purposes, not just problem solving.
Foundations of Digital Games is a yearly conference on experimental ideas about games, and has a Procedural Content workshop (and a new Crafts in Games workshop, too)
Superstar academic/gamemaker Michael Cook runs the ProcJam, an annual jam that features lectures and tutorials and tools.
Darius Kazemi runs the National Novel Generating Month, a challenge to make a program that can write a whole book. He also write a ton of bots, and writes a ton about bots
I’ll be on Twitter, @galaxykate, to answer further questions, hear about typos, and take feedback
Sun People’s SERENITY EP starts at a sprinting pace with ‘LIVE IT UP’, a jungle roller complete with the swelling rave samples we associate so strongly with the original 90s jungle sound, acting as a high vibration pallet cleanser to prepare the listener for what’s to come next: club tools touching just the right spots of footwork and halftime that would get even the most stubborn crowd onto the dancefloor (tracks like CRY, RECALL and SERENITY) combining the ingredients for what looks like another incredible release from our London friends at MODERN RUIN RECORDS.
This 6 track release from Australia’s SUN PEOPLE is available on Modern Ruin March 23rd. You can preorder on JUNO DOWNLOAD HERE.
dispersed unto us
Excerpt from the film Classic Albums: Vagus, A Fake Rockumentary
Interview with Chris Pressey
Very excited to present an interview with Chris Pressey, who has been making esolangs since before they had a name. He created the Befunge language (one of the very first to show the potential of esolangs) and managed the mailing list where much of the early discussion took place. Since then, he has created a wealth of languages and experiments, including GEMOOY.
» I want to start at the beginning, but what was the beginning for you with esolangs? The esolangs wiki describes you as a “member of the Esolang community from the time of his invention of Befunge in 1993 to present” Was there a community in 1993? What did it look like, did it revolve around IRC at that point? Did Befunge and the other 1993 languages come out of discussions about language as part of that community, or was it before those discussions / that community materialized?
That description from the wiki is taking a few liberties. It would be more accurate to say that Befunge-93 was my first esolang (the two languages I designed before it probably do not “count” very much as esolangs) but there wasn’t really anything like a dedicated community at the time, and it certainly didn’t get the name “esolang” until about half a decade later.
But just because there wasn’t a dedicated community doesn’t mean there wasn’t a community, after a fashion.
To try to give some context: at the time I was very interested in doing creative things (like writing music), and in doing things with computers, and (thus) in doing creative things with computers – which would’ve included music and graphics and games, of course, but also not limited to those things. Looking back, it seems to me that everyone was a bit more open to the creative potential of computers back then; home computers were still pretty new, and we knew that we didn’t know terribly much about their possibilities yet.
I had an Amiga 500 at the time, and I think its user base was a good example of that. The sound and graphics capabilities seemed to attract people who were attracted to a certain kind of creative computing. The machine also had enough memory and computing power to run comparatively powerful development tools, like C compilers. Reflecting this, a typical Fred Fish floppy disk might’ve contained icons or pictures or demos or “display hacks”, alongside “serious” utility programs and their source code.
I also had a 2400 baud modem. I was a regular BBS user, and eventually ran my own BBS. (The Internet did exist at the time, but it was still virtually unknown to everyone outside of research and the military.) This put me in touch with other computer users in Winnipeg, many of whom were also doing creative-things-oftimes-with-computers – for example, there was a large overlap with the ham radio community, especially those hams whose interest in electronics and communication went beyond solely radio, into homebrew computers and such.
Around that time I got interested in programming languages – not really as a creative endeavour, more out of curiosity. A certain technical curiosity that is probably shared by every programmer who has reached a certain point in programming – the one where you start to wonder just exactly *how* the computer is turning the programs you’re writing into actions.
Through one of the contacts I had made through BBS'ing (Jason Goga), I learned about the FORTH language and just how simple it is to implement (I had written a recursive-descent parser as a course exercise earlier, but I didn’t have a really good understanding of it.) I was also exposed to the wonderful word “Befunge” (a typo made by Curtis Coleman) during a BBS chat session, whence I decided immediately that I *must* design and implement a language named that. (I’m not entirely certain whether I was aware of the relevant Donald Knuth quote at the time.)
Donald Knuth: “The most important thing in the programming language is the name. A language will not succeed without a good name. I have recently invented a very good name and now I am looking for a suitable language.”
Due to the fact that long-distance calls cost money while local calls were free, most of my BBS exchanges were local affairs. But thanks to disk clubs like Fred Fish and relay networks like FidoNet, Winnipeg wasn’t totally cut off from the rest of the world. One of the local BBS'es carried files from Aminet and, among those files, I found Wouter van Oortmerssen’s FALSE distribution and Urban Müller’s brainfuck distribution.
And frankly, these two languages opened my eyes: yes, it *is* entirely possible to design programming languages with unorthodox goals – there is no actual requirement that they must be “good for programming” – so why not do just that? Is the fact that they’re interesting and/or challenging and/or fun to try to program in, not sufficient? The idea that a language can be very, very simple and still be able to express any computation that a more “normal” language can (so long as you’re willing to phrase the computation on the language’s terms, of course) was also intriguing.
Shortly after that, the inspiration for the actual design of Befunge-93 struck, and I threw it together and put it up on my BBS. Several users downloaded it, and had fun writing programs in it, and sent some of those programs back to me – and they have been included as example programs in the distribution ever since.
And that’s pretty much what the community looked like, back then. There was not very much of what you’d call discussion – brainfuck as a response to FALSE, Befunge as a response to both brainfuck and FALSE, and writing weird programs as responses to there being weird languages, is the level on which the “discussion” took place, I think.
» I hadn’t made that connection between early esolangs and Amiga culture, but they both take part in this DIY approach to computing; this idea that anything a computer can do might be a place to intervene and explore directly through code. I wonder if esolangs still call back to that era in a way. Programming now, especially in an IDE using corporate languages (C#, etc), can feel like one is functioning in a limited sandbox, and with an approach to code determined more heavily by the language or set of libraries. Designing esolangs can offer a way to build alternative structures. Does that make sense?
Yes, I think that makes a lot of sense. I noted something like this on the #esoteric IRC channel once, I think. There are a certain number of programmers who simply love programming, but for whom mainstream software development doesn’t provide a lot of existential reward. When you’ve been optimizing queries and producing custom reports all week, programming in an esolang can be a nice break from that. It returns to the basic challenge of composing a program. (In this respect, it’s very similar to code golf, and there is a significant overlap.)
On the design side, the dynamics are probably similar. If you have any interest in programming languages, and you use the same language day in and day out, you will probably start to tire of it, and start looking for something a little different (or maybe a *lot* different!) I know some of my esolangs have started out with me shooting myself in the foot with some idiosyncrasy lurking in a production language, wondering how one could design a language which avoids that particular trap, and in the end going down the rabbit hole of making an esolang out of it instead of trying to design a “better” language.
But I don’t want to gloss over the fact that a lot of esolang comes from people who don’t have programming as their day job, too. I get the impression that it’s not uncommon for a student who has recently learned programming and who wants to explore just how far programming goes, to find themselves amidst esolang — although this sometimes seems to be just a phase in their exploration which eventually passes.
I’m not sure how much esolang calls back to the past. Certainly there is some overlap with retrocomputing, and a lot of esolangs are simple enough that they can be implemented on older architectures without too much pain. And in a sense, programming and computer science were themselves a lot more “esoteric” back then. But I think it harkens more to a desire to build or explore “alternative structures” (for whatever reason) than it does to the past per se.
» Also, wasn’t brainfuck originally written for the Amiga?
Yes, it was.
(I should note that I tried to not over-emphasize the role of the Amiga in my previous response; there were certainly people doing creative things on IBM PCs and Macs and Ataris and such as well. On the other hand, as far as I know, none of those companies got Andy Warhol to paint digital pictures of Debbie Harry using their machines. Take that for what you will.)
» I’m curious about the origins of brainfuck and how much of what the language has come to symbolize (its minimalist model for Turing Completeness, its strange method of representing constants, etc) was intended by Urban Muller; it seems he dropped out of whatever there was of an esolang scene pretty early. The esolang wiki describes brainfuck’s goal to make the smallest possible compiler. But he did name the language “brainfuck” and gave it the unusual set of commands (all punctuation), which indicates some of the weirdness of the language was intended.
I get the distinct impression brainfuck was a direct answer to FALSE.
According to the description on Fred Fish disk 885, Wouter’s only goals with FALSE were “a working compiler in just 1k (!) and designing a language that looks cryptic and fuzzy”. I’m pretty sure Urban saw FALSE when it was uploaded to Aminet and said “Oh, you like small compilers, do you? Well, how about this one, it’s less than 256 bytes!” (Of course, this is complete conjecture. I don’t actually know.)
» What were you setting out to do with Befunge, and once you had the idea, how long did it take to put together? Was difficulty of compilation part of its goal? It seems that Befunge created somewhat of a tradition in esolangs of writing stack-based languages.
Well, as I mentioned, for a while, Befunge was a name in search of a language. It might’ve been been this way for as much as a month; I don’t really remember. It certainly had a few false starts during that time. It sounds kind of strange, but the main thing I was setting out to do was just to find it!
The idea that finally struck was roughly “What if you had BASIC, but instead of having line numbers, you drew an arrow to the line you wanted to GOTO?” which somehow quickly dovetailed into the stack-based paradigm I had recently learned about, put into a grid. Once this idea crystallized, Befunge-93 was implemented and documented in a matter of days. (Which is rare, for me; other esolangs I’ve worked on have stayed in my “sketchbook” for years before they ever saw the light of day. I also remember exactly where I was when the idea came to me, which is also rare.)
Difficulty of compilation was indeed an explicit goal. This was prompted by an offhand remark made by Shawn Vincent around that time, which was something along the lines of “compilers are always better”. Being the sort of person who loves finding counter-examples to sweeping statements, I couldn’t resist aiming for something rather contrary to that sentiment.
Since the stack-basedness of Befunge came from FORTH and FALSE, I don’t think it established that tradition so much as it continued it — but more generally, I don’t think it’s done out of a sense of tradition as much as it’s simply one of the easier paradigms to design in and implement. Many conventional languages can be implemented by translating the program to stack-based code “under the hood”, but if you present the entire language that way, you don’t have to bother translating it first.
I think if there’s been a notable influence from Befunge on subsequent languages, it’s been its 2-dimensionality (Wierd, PATH, Befreak, and so forth.)
About minimalism.
In all programming language design, not just esolangs, there are tradeoffs between the complexity of the language definition, and the length of programs in the language.
You can often make a language simpler by observing that what is done by one instruction can alternately be done with a sequence of other instructions. So you can remove that instruction, with no loss other than that programs will be longer.
And there is definitely a strain of esolang that concentrates on this, sometimes taking it to the extreme, arriving at the territory of the “Turing tarpit”:
On the other hand, sometimes what people pursue is just the opposite: you don’t care how complicated the language is, as long as you can write short programs in it. That generally takes you into the realm of “golfing languages”, which I’ll admit I’m less personally familiar with.
Of course, while these are both popular goals, neither one is a requirement of esolang design. Befunge, for instance, certainly isn’t minimal. And anyone who likes minimalism in particular, when presented with a language that isn’t minimal, will often think about how it could be made simpler. I think there are a large number of esolangs that are the result of this process, actually.
» Was INTERCAL discussed much at that time? I noticed it was revived in 1990 with C-INTERCAL.
I wasn’t aware of INTERCAL until relatively late — probably around 1997.
» So the Befunge mailing list grew out of the BBS, and that was where the early esolang discussions were taking place? This link from the esolangs wiki shows some of the back-and-forth that happened on the mailing list about Befunge itself (leading to the Wierd language).
“Grew” is a bit of a leap, because I think I was the only person who was both on my BBS and on the mailing list I started for Befunge when I got on the Internet proper. At the beginning, discussion on the mailing list was about Befunge (at least nominally) and some of it was sharing programs written in Befunge, and some of it was discussing how the Befunge language itself should evolve. These latter discussions eventually resulted in a draft for a language called “Befunge-97”. The specification was horribly broken in some respects, though, and it wasn’t finished until right around the end of 1997, so it was abandoned and superceded by Funge-98.
But there is only so much one can say about Befunge, and there were of course many interesting ideas tossed around about programming languages in general. This would’ve been when I became aware of INTERCAL.
I think most of the discussion about Wierd itself was in a private three-way email conversation separate from the list, but it was certainly sparked by things that were being talked about on the list.
At some point I put up a page called “Esoteric Topics in Computer Programming” on my website, which listed a handful of interesting languages that I had come across on the Internet, many of which were in roughly the same vein as Befunge: not designed for a “serious” purpose, but rather as a perverse counter-example to conventional programming, or just for fun, on a whim.
When the amount of discussion about languages other than Befunge increased (and probably sometime after Funge-98 was released, although I don’t remember the timing exactly,) I renamed the mailing list the “Esoteric Topics in Computer Programming Mailing List,” and that is probably when it would be safe to say that there was an explicit community.
I don’t know exactly where I got the word “esoteric” from, but I’m pretty sure I saw it in some programmer-culture context with a connotation of “hyper-obscure.” I certainly meant something like that by it, rather than “hidden teachings” or whatever, which is definitely not what I was going for.
At some point someone on the Esoteric Topics list (it might’ve been Russel B., but since I can’t even remember his surname exactly, I wouldn’t trust my memory here) coined the portmanteau “esolang”, in the pattern of words like “conlang” and “artlang”.
» Soon after Befunge came SMETANA, which reads as instructions all about how those instructions should be read, stripped of anything else: it’s not Turing Complete, has no I/O, essentially every operation is about the order its own code should be read. What drew you to create this language? It seems to tie into themes of yours: self-modifying code, meta-languages, etc.
SMETANA came from a brainfart that I uncharacteristically bothered to write down on paper sometime in 1994, which I titled “An algorithm that’ll never fly”:
1. Swap steps one and two. 2. Flap wings. 3. Go back to step one.
which itself might have come from thinking about self-modifying code, but I really don’t remember the process that led up to it. I vaguely remember being more interested in music composition than programming languages at the time – which probably explains why, when I actually implemented it in Visual Basic, I named it after a composer.
Obviously I wasn’t really concerned with making a “real language” in this case as much as making a sort of simple dynamic system. I was rather surprised, years later, when Nikita Ayzikovsky showed (via Smallfuck) that it was possible to express any finite automaton in it.
That’s a far cry from Turing-complete, but still more powerful than I had expected.
At around the same time as SMETANA, I also put together something called Cyclobots, also in Visual Basic, which was similar in that it’s a simple dynamic system with interesting behaviour, but nowhere near what you’d think of as a programming language. (I recently revived it in Javascript)
» Tell me about your ventures into cellular automata. Were they an extension of what you were doing with 2D programming in the Funges? In particular, ALPACA as a meta-language for cellular automata. Gemooy seems related, with changing 2D patterns.
Well, I knew about John Conway’s Game of Life as a youngster, and later learned more about cellular automata from various sources (including an Amiga magazine, IIRC.)
Up until the time that I learned (probably via the Esoteric Topics mailing list) that some CA’s are in fact as powerful as Turing machines, I thought of them as dynamic systems, sort of in the same bucket as SMETANA and Cyclobots – it’s fun to set up an initial state, and watch it evolve. But, solving problems with them? – No, that certainly wasn’t on my mind.
These days, I tend towards classifying them as languages, but that’s mostly out of convenience. It’s entirely possible to look at things the other way ‘round: a programming language is just a certain kind of rich dynamic system, one that happens to be more useful for what we commonly think of as programming.
ALPACA actually came indirectly from RUBE, which doesn’t have a whole lot in common with Befunge beyond them both being two-dimensional (and RUBE’s implementation borrowed code from Befunge’s, but that’s circumstantial.)
After I had implemented RUBE, I was kind of disappointed with it. There are edge cases where it does not do what you might expect, going from the description; for example, a dozer can fall onto (I think) a crate while it’s moving and actually disappear. So, the best specification for RUBE’s behaviour is actually the C program I wrote to interpret it, which is never a great situation for a language to be in.
Given this, I wanted to design a successor to RUBE whose rules would be well-defined. I decided it should be a cellular automaton, even though that would make it a little less interesting than RUBE’s “bully automaton” approach. It would have a large number of states and a large number of rules, but if I designed a meta-language for expressing these rules, they could be organized in a comprehensible fashion… and an interpreter could be automatically generated from those rules. That format ended up being ALPACA. (And that successor to RUBE ended up being REDGREEN.)
I’m pretty sure I was also generally interested in meta-languages at the time (MDPN dates from around the same time, I think) and the idea for ALPACA was one I felt I could actually implement. And after it was implemented, of course, that made designing and implementing more cellular automata quite a bit easier.
Gemooy is pretty much unrelated to all this, at least historically. It has distinguished locations where the action happens (the instruction and data pointers) as opposed to how things happen all over the place in a cellular automaton. It was largely influenced by 2-ill, which itself was influenced by 2L, which – well, you can follow the links in the Esowiki for the full story, but this is all sort of in Befunge-meets-Brainfuck Land. The most I can say is that when I designed Gemooy, I had no idea if it was Turing-complete or not, and didn’t really mind one way or the other – I was satisfied for it to be situated at a certain point in the design space which I found personally pleasing. In that sense, the design approach might’ve been closer to “dynamic system” than “real language”, yes.
» You use metaphor in a number of languages; RUBE as bulldozers moving crates, HUNTER as mice in a maze. Were these the starting places, inspiration for these languages, or a way of making them easier to understand later?
I think when I use a metaphor in a language, the metaphor is usually the starting point. The world, after all, is full of dynamic systems which can be observed, modeled, approximated, quantized, simulated on a computer, and (if desired) extended to a point where they’re Turing-complete.
RUBE was certainly a case where the metaphor came from direct experience – I was working in a lumberyard at the time, and had the opportunity to watch a lot of people moving a lot of things around (with forklifts, not bulldozers… but bulldozers were easier to model!)
HUNTER on the other hand came from a metaphor that was already well-established – early robots that solved mazes were inevitably cast as mice. (I’m sure I’ve seen an illustration, in an Usborne children’s book, of such a robot *actually dressed up as a mouse*, with ears and buck teeth and everything.) HUNTER just plays up that metaphor a bit, treating its maze-solving units even more like real mice by having them eat cheese (or occasionally a dose of strychnine, whence they drop dead. That part was a nod to Douglas Adams)
» And btw, is this connected to your Gemooy? What is going on here? looks interesting. [NOTE: link updated to correct documentation]
I’ve known Gareth Jackson for a number of years, and in 2012 he told me he wanted to do something based around programming languages. What’s going on there is his GEMOOY project, where he attempted to use Gemooy as the basis for a visual 'manual generator’.
I’m not entirely sure how he ended up picking Gemooy, but I think I had recently mentioned it to him at the time. The relative simplicity of the language might’ve also factored into it.
In the GEMOOY documentation, he describes the process he used to generate these pictures from the example programs that are included in the Gemooy distribution — and I admit I don’t have a clear understanding of exactly how the process worked or, although I get the impression it was fully deterministic, and similar to how successive states of a cellular automaton are evolved.
As I see it, GEMOOY takes the emergent aesthetic of Gemooy (i.e. how the rules of the language influence the structure of programs in it) and adds its own rules, which results in another emergent aesthetic layered on top of the first one; and the combination of the two is yet again something else.
The GEMOOY documentation used to be available along with the images, but due to hosting issues, the link is currently broken, and it’s in the process of being re-hosted. I’ll update the Gemooy article on the esowiki with a link to it, when it’s back online.
» Are there any languages I haven’t asked about that you’d like to comment on in?
Um. Not really. Sometimes someone asks me what my favourite language I’ve designed is, and I can’t answer, because somehow it just doesn’t work like that… there’s something interesting in each of them.
I consider myself semi-retired from esolang at this point. But not entirely retired. There are one or two more I’d like to get down, somehow, someday.
A lot of languages that I’ve designed, I don’t identify as esolangs, as well – it seems fairer to call them experimental languages. Sometimes, someone creates an article for them on the esowiki anyway; I suppose my reputation precedes me, there.
So… yeah! None in particular.
Will Photography Survive Its Art-Historical Karma?
via One Good Eye (Denver)
“I wanted to learn at all costs what Photography was ‘in itself,’ by what essential feature it was to be distinguished from the community of images.” – Roland Barthes, Camera Lucida, 1980
Month of Photography is just about over, and again, it was a great set of shows, with a diverse array of aesthetics and concepts. But going around and looking at these shows, I can’t help but skew every single one of them with this train of thought, which was at the forefront of my mind even during the last MoP. What I’m talking about is this funny notion that like, what photography did to painting oh-so-many years ago, it’s now suffering itself next to the infinite scrollability of the internet, and as a fine-art discipline is now sort of scampering in painting’s footsteps, conceptually.
Okay, so what do I mean, exactly?
I remember a few years ago suddenly realizing, with everyone talking about how ISIS was using Instagram as their new principal recruitment vehicle, that this was the same Instagram that was in my pocket. Sure enough, a few copy-pasted arabic hashtags (who knows) later, and I was seeing the frontlines of the mythic War On Terror through the eyes of the enemy. Graphic Stuff. Not something many people would want to see, and yes, I definitely worried about the NSA liking my Facebook statuses in the future, but just pause and think about what I’m getting at here. If you can have an experience that shockingly unique on Instagram, an experience also by most accounts not-at-all-Art, where does that leave Photography, the medium of imagery, in its fine-art gallery context? Where does it find meaning anymore?
Without diving too deep into a conversation that is largely played out, this is just so obvious an echo to me of the art-historic birth of the photograph (among other technological revolutions) planting the modernist seeds of conceptual art in painting. Like, ‘okay, well, if we can’t just be images anymore, what can we be?’ Self-reference begets itself.
Today, it’s likewise the case that photographs in a gallery rarely seem to hold up merely by the merit of their imagery. Some do, sure. But as a whole, how much of the representative body of MoP 2017 were ‘just photos’, vs. how much seemed to raise the question of the taxonomical boundaries of Photography? Coincidence?
It’s interesting because much of the best work that was ‘purely photographic’ seemed to reference its own flatness (see: the sort of iconic moment of painting’s departure from photography, denying the illusionistic depth of the picture plane and calling attention to itself as an object). Take, for example, Michael Borek’s really wonderful series in the entry alcove of Redline’s Between the Medium, in which various immediately identifiable landmarks suddenly ‘freeze’ flat as you notice that they’re just photos of photos of the landmarks, applied as vinyl to the sides of buses or some other sort of metal industrially-paneled surfaces. These defining, contrasty fissures in the images’ surfaces carve their own space up like a Mondrian, referencing the perpendicular edges of the picture plane. The fact that multiple images wind up in a single frame in this body of work only further adds to the feeling that these things are really about themselves being viewed.
Even further down the line of the ‘Expanded Field’ trajectory of painterly dialogue, another really exceptional body of work belongs to George Perez at Alto’s Denver Collage Club group show. Stacks of home photos with their centers carved out, like tunnels through remembrance of a vacation or something, are curled from being wrapped tightly in rubber bands. They become objects, almost. At least more than they would simply as a stack of images, which would read as a presentation strategy more than a state of being. The tension in their form, though, sort of snaps you out of viewing their content, and all you can pay attention to is the density of them together, in the room. There’s something very real and here-and-now that happens from this – it’s what Rauschenberg was seeking, on a humble scale.
This ‘in the room’ feeling seems to be one of the most prevalent trends for Month of Photography shows this year, in one way or another. At Leon’s Skins, Tya Alisa Anthony sheds the frames from her images, letting the prints ripple in the air conditioning, the texture of the images breathing the same air as us, getting us all the closer to the skin of her models, the face-value subject of the show.
A similar sort of relationship-to-the-body occurs in the best pieces at CVA’s Presence: Reflections on the Middle East, a series in which the ornately decorated windshields and interiors of various public transit buses fill the frame, life-sized, allowing us to sort of sit directly in front of these things, contemplating them as stand-in portraits of who might be driving them. You feel empathy for the ghost of the driver purely for the sake that you could almost step in there. Tableau-vivants.
I mean, I’ll admit, I’m definitely putting a spin on all of this, framing all this work this way. I’m biased, I’m a painter. But let’s take a step back from the as-painting conversation, and talk about MCA’s Ryan McGinley retro. Here is an utterly ‘just photo’ show, and what’s more, it’s totally the kind of thing that you would see on the internet. But where the show is interesting is that it’s there in physical space with you. It’s the fact that an art museum is willing to put blowjobs, pissing, coke-sniffing, and projectile-vomiting on their walls, larger than life. The difference between a computer screen and an art museum was really driven home here when a circa-eight-year-old girl ran ahead of her parents into the porniest room of the exhibition as I was leaving.
The most successful show this past month, in my opinion, was David B Smith’s Penelope Umbrico solo, because it really brought all of the things I’ve mentioned together in a dialogue that felt very nuanced and high-level. At first glance, it’s certainly the most painterly show, with large, manipulated images in various forms of prints and frames, repetitiously referencing fluorescence in various ways. As well as themselves, rather explicitly. But from the serial, tiled arrangements, even overlapping, of the photos, to the most resonant moments – rows of polaroids of lens flares and fireworks, hung just high enough so that the track lighting reflects into your eyes, the show is about the entire thing together, there, in the room. Which is why the way that these polaroids, sparklingly activated by their surroundings, are so much more interesting than the superficially similar arrangement of McGinley’s at MCA. When I asked a gallery attendant if Umbrico always made photography, I got the response that photography was her subject, not necessarily her medium. Nice.
Plenty of these shows had politically or otherwise relevant content, but let’s face it, none of them really dug into anything in a way more significant than what you’d get from a few seconds of googling their themes on your phone. There’s plenty to say about various work that was successful that I didn’t touch on, as well, sure. But at the end of the day, the only work that really felt like it was alive and thriving and not just there because it’s the biennial was the work that was aware of itself. Maybe aware of its own mortality. Which is where I go back to my original point — that the ‘aura’, the ineffable thing that was supposedly the last stand of painting in the face of photography, may be all that photography has left to set its fine-art status aside from the unending stream of images we see every day.
“Even the most perfect reproduction … is lacking in one element: its presence in time and space, its unique existence at the place where it happens to be.” –Walter Benjamin, Work of Art in the Age of Mechanical Reproduction, 1936
Dogrubber Pickle Weasels and other Astounding Stories A round-up of info about Riq Chiznik's work to date with Bubblebrain Records
Bean Lebouc aka B-Eazy is a hip hop artist from Jersey, Channel Islands. He has been releasing music and performing live since 2006, and set up the United Elementz hip hop collective in 2014.
sometimes i just thank god that charlie hill graced this earth
“We have at most a year to defend American democracy, perhaps less“
Timothy Snyder is a professor of history at Yale University and the author of numerous books of European history, including „Bloodlands“ and „Black Earth“. His most recent book, “On Tyranny: Twenty Lessons from the Twentieth Century“, will be published at the end of the month. This is the English version of an interview published in Süddeutsche Zeitung on February 7, with some additional information due to current developments.
By Matthias Kolb
SZ: Donald Trump has been president for three weeks. How would you describe his start?
Timothy Snyder: The first thing that we have to notice is that the institutions have not thus far restrained him. He never took them seriously, acts as if they don’t exist, and clearly wishes they didn’t. The story that Americans have told themselves from the moment he declared his candidacy for president, was that one institution or another would defeat him or at least change his behavior – he won’t get the nomination; if he gets the nomination, he will be a normal Republican; he will get defeated in the general election; if he wins the presidency will mature him (that was what Obama said). I never thought any of that was true. He doesn’t seem to care about the institutions and the laws except insofar as they appear as barriers to the goal of permanent kleptocratic authoritarianism and immediate personal gratification. It is all about him all of time, it is not about the citizens and our political traditions.
You wrote an article for Slate in November, comparing the rise of Donald Trump with the rise of Adolf Hitler. Why did you feel the need to publish such a piece?
It’s very important that we use history to our advantage now, rather than finding in history taboos and ways to silence one another. The history of the 1930s is terribly important to Americans (and Europeans) right now, just as it is slipping from our memories. I was not trying to provoke one more fruitless series of conversations about comparability. I was trying to help Americans who were generally either shocked (people who voted against Trump) or surprised (people who voted for him, who generally thought he would lose) find their bearings in a new situation. The temptation in a new situation is to imagine that nothing has changed. That is a choice that has political consequences: self-delusion leads to half-conscious anticipatory obedience and then to regime change. Anyway, I didn’t actually compare Trump to Hitler, I didn’t use these two names. What I did was to write a very short history of the rise of Adolf Hitler to power without using his name, which might allow Americans to recognize certain similarities to the moment they themselves were living through. I know that these comparisons are a national taboo in Germany, but at the moment its rather important that Germans be generous with their history and help others to learn how republics collapse. Most Americans are exceptionalists, we think we live outside of history. Americans tend to think: “We have freedom because we love freedom, we love freedom because we are free.” It is a bit circular and doesn’t acknowledge the historical structures that can favor or weaken democratic republics. We don’t realize how similar our predicaments are to those of other people.
You use the Weimar Republic as a warning example.
I wanted to remind my fellow Americans that intelligent people, not so different from ourselves, have experienced the collapse of a republic before. It is one example among many. Republics, like other forms of government, exist in history and can rise and fall. The American Founding Fathers knew this, which is why there were obsessed with the history of classical republics and their decline into oligarchy and empire. We seem to have lost that tradition of learning from others, and we need it back. A quarter century ago, after the collapse of communism, we declared that history was over – and in an amazing way we forgot everything we once knew about communism, fascism and National Socialism. In this little article for Slate, I was trying to remind us about things that we once knew.
How similar is the situation between Germany of the 1930s and today’s United States?
Of course, not everything is similar. Some things are better now than they were in the 1930s but some things are worse. The media is worse, I would say. It is very polarized and it is very concentrated. In Germany before the state shut down German newspapers, there was authentic variety that we don’t have now. People in the 1930s generally had longer attention spans than we do. On the other side, the United States is a larger country, with pockets of wealth distributed widely, and it is more connected to the world. The main advantage that we have is that we can learn from the 1930s. Again, it’s very important to stress that history does not repeat. But it does offer us examples and patterns, and thereby enlarges our imaginations and creates more possibilities for anticipation and resistance.
When did you realize this lack of knowledge about 20th century history here in the US?
I got an early hint of that when I was touring the United States for my book “Bloodlands: Europe Between Hitler and Stalin”. This was in 2011 and I realized that Americans had really forgotten about the crimes of Stalin – which is strange because we were educated, during the Cold War about Stalinist terror. I thought that Americans would be surprised because I was saying that number of Soviet citizens killed (although still horrifyingly large) was much smaller than we had been taught. Instead I realized that Americans had simply forgotten that there was Stalinism and terror. That struck me: What else could we forget? The idea of the Holocaust is certainly present, but it is almost totally lacking in context. And without context it is hard to see resemblance. A Holocaust that is reduced to a few images or facts cannot teach about larger patterns. And Americans risk of stressing its uniqueness is that it allows people to dismiss any learning from history. People will ask: Is he wearing a Hakenkreuz, did he kill six million Jews? if the answer is in the negative, then they will reply: then history has nothing to do with the present. Over the last 25 years, we have not only forgotten much of what we once knew but we have raised a whole generation which doesn’t have these reference points.
You would argue that this knowledge had existed before but it was forgotten.
Scholars knew much more know about the 1930s – whether we are speaking of National Socialism, fascism, or Stalinism. But publics are much less interested. And we lack, for whatever reason, the concepts that we used to have that allowed us to connect ideas and political processes. When an American president says “America First” or proposes a political system without the two parties or attacks journalists or denies the existence of facts, that should set of a series of associations with other political systems. We need people who can help translate ideological utterances into political warnings. Thinkers of the middle of twentieth century are now being read again, and for good reason. The American canon included native and refugee ex-communists who came to this country of the 1930s, refugees from fascism and National Socialism in the 40s, and the Cold War liberals of the 1950s. There was this time where we engaged in political theory and history, where people thought about what fascism and communism meant for democracy. Now, one reason why we cannot forget the 1930s is that the presidential administration is clearly thinking about them – but in a positive sense. They seem to be after a kind of redo of the 1930s with Roosevelt where the Americans take a different course. where we don’t build a welfare state and don’t intervene in Europe to stop fascism. Lindbergh instead of FDR. That is their notion. Something went wrong with Roosevelt and now they want to go back and reverse it.
President Trump’s political strategist, Steve Bannon, has said that he wants to „make life as exciting as it was in the 1930s“. The first two weeks have shown how big his influence is, it seems much bigger than Reince Priebus’s or Jared Kushner’s.
I can’t speak to intra-White House conflicts. I can only say that Mr. Trump’s inaugural address was extremely ideological. During the campaign he used the slogan “America First” and then was informed that this was the name of a movement that tried to prevent the United States from fighting Nazi Germany and was associated with nativists and white supremacists. He claimed then not to have known that. But in the inaugural address he made “America First” his central them, and now he can’t say that he doesn’t know what it means. And of course Bannon knows what it means. America First is precisely the conjuration of this alternative America of the 1930s where Charles Lindbergh is the hero. This inaugural address reeked of the 1930s.
Timothy Snyder
When Bannon calls himself a „Leninist“, do Americans know what is he talking about?
No, they usually have no idea. It is a good question. Americans have this idea that comes from Jefferson and the American Revolution that you have to rebel every so often. And they sometimes don’t make the distinction between a rebellion against injustice and the extinction of the whole political system, which is what Bannon says that he is after. The American Revolution actually preserved ideas from Britain: the rule of law being the most important. The whole justification of the American Revolution was that the British were not living up to their own principles, were not including Americans in their own system. In a broad way that that was also the argument of the civil rights movement: the system fails itself when it does not extend equal rights to all citizens. So there can be resistance and even revolution which is about meeting standards rather than about simple destruction. What Bannon says correctly about the Bolsheviks was that they aimed to completely destroy an old regime. We can slip from one to the other very easily, from rebelliousness to a complete negation of the system. Most Americans had a rule of law state for most of their lives, African Americans are an exception, and so most Americans think this will be there forever. They don’t get that a “disruption” can actually destroy much of what they take for granted. They have no notion what it means to destroy the state and how their lives would look like if the rule of law would no longer exist. I find it frightening that people who talk about the destruction of the American state are now in charge of the American state.
Trump put a portrait of Andrew Jackson on the wall of the Oval Office, another president that was a populist. But people around him seem to have a wider agenda.
In the same interview with the Hollywood Reporter in which Bannon talks about the “exciting 1930s”, he talks about how he is operating in the darkness. He compares himself with Satan and Darth Vader and says in essence that he misleads the public and the media deliberately.
The White House statement for the Holocaust Day on January 27 didn’t mention Jews. At first it looked like a mistake but now it is official that it was intentional.
The Holocaust reference is very important on our side of the Atlantic. If Americans have a reference point in world history, it is precisely the Holocaust, the Holocaust and let’s say Normandy, the Second World War, are the one aperture into a broader history, one where republics fall and extremes triumph. So if Steve Bannon turns the Holocaust into talk about “A lot of people have suffered” what is happening is that he is closing that aperture. The next step is to say that mainly Americans are the victims. History then dies completely and we are trapped in myth.
Which are the differences in how Germans and Americans remember the Holocaust?
Let me answer this in a different way. Normally when I speak to German journalists, I try to emphasize parts of the history of the Holocaust that Germans overlook or minimize, and how those can allow Germans to overlook certain kinds of historical responsibility or draw lessons that are too narrow. In the United States it is obviously very different. It is not a matter of taking a debate about national responsibility and try to make it broader by making it more inclusive of what we know about the historical Holocaust. It is rather a matter of how a distant non-German nation can try to see patterns, analogies, political lessons. And right now the comparison we need to ponder is between the treatment of Muslims and the treatment of Jews. It is obviously the case that the point of the Muslim ban is to instruct Americans that Muslims are an enemy: a small, well-assimilated minority that we are supposed to see not as our neighbors or as fellow citizens but as elements of an international threat. More than that, Trump’s policy is a provocation, which is probably meant to provoke an event like the assassination of the German diplomat Ernst Eduard vom Rath on November 7 1938.
When Bannon calls the press the main „opposition party“ that should make everyone concerned. This is not only intended to cheer up Trump supporters.
When you say that the press is the opposition, than you are advocating a regime change in the United States. When I am a Republican and say the Democrats are the opposition, we talk about our system. If I say the government is one party and the press is the opposition, then I talk about an authoritarian state. This is regime change.
Last week Trump called those who take part in demonstrations “thugs” and “paid protestors”. This doesn’t show respect for First Amendment right, it sounds more like Putin.
That is exactly what the Russian leadership does. The idea is to marginalize the people who actually represent the core values of the Republic. The point is to bring down the Republic. You can disagree with them. but once you say they have no right to protest or start lying about them, you are in effect saying: „We want a regime where this is not possible anymore.“ When the president says that it means that the executive branch is engaged in regime change towards an authoritarian regime without the rule of law. You are getting people used to this transition, you are inviting them into the process by asking them to have contempt for their fellow citizens who are defending the Republic. You are also seducing people into a world of permanent internet lying and way from their own experiences with other people. Getting out to protest, this is something real and I would say something patriotic. Part of the new authoritarianism is to get people to prefer fiction and inaction to reality and action. People sit in their chairs, read the tweet and repeat the clichés: “yes, they are thugs” instead of “it is normal to get out in the streets for what you believe.” He is trying to teach people a new behavior: You just sit right where you are, read what I say and nod your head. That is the psychology of regime change.
Today’s media environment is very different from the 1930s, everything happens so fast.
This is part of what contemporary authoritarians do: They overwhelm you with bad news and try to make you depressed and say with resignation: “Well, what can I do?”. I think it is better to limit yourself. Read the news for half an hour a day, but don’t spend the whole day obsessing about it. Americans have to pick one thing to be confident about, and then act on it. If you care about and know about refugees, the press, global warming – choose one and talk with people around you about it. Nobody can do everything but everyone can do a little bit. And people doing their little bit will meet others doing the same, and the depression lifts.
You posted „20 lessons from the 20th century“ on your Facebook page in November. Did your students here at Yale ask for advice?
No, that wasn’t it. It was unprompted, I was in Scandinavia during the election. I thought Trump would lose, that it would be close but he would lose. On the plane on the way back I started thinking about what we could learn from history. When I had written about Trump earlier in 2016, it was about his connections to Russia. The twenty lessons was the first attempt to bring something I understand about European history to my fellow Americans in a way that is politically salient. I don’t usually write directly about American politics; I am an American but insofar as I have something to offer it is rather because I know something about contemporary and historical Eastern and Central Europe. Nobody asked me, but this was a way for me to start acting. We have to do something. This is what I can do.
„Do not obey in advance“ is the first recommendation in this Facebook post. You also reference the „Reichstagsbrand“ as a warning sign. How should the American public react?
Americans love to use the word “playbook” which is a metaphor from sports. There is a playbook from the 1930s that some people in the presidential administration are following. This includes picking a minority in your country, associate it with a global threat and use the notion of a global struggle as a way to create national solidarity while neglecting the nation’s actual problems. The Reichstag Fire is the crucial moment when Hitler’s government becomes a Nazi regime. An event of that type, whether unexpected, provoked, or planned by the government, can be a turning point in the United States today. This goes back to the beginning of our conversation: if we think about the 1930s, then we can be aware of events, and of certain forks in the road. If a terror attack happens in the United States, that is simply the Trump administration failing to keep its most basic promise. It is not a reason to suspend the rights of Americans or declare have a state of emergency. History teaches us the tricks of authoritarians. We can’t allow ourselves to fall for them.
There were a lot of demonstrations in hundreds of cities, but the opinion of Trump supporters haven’t changed. They are not moved by the huge crowds. Would this be too early to expect?
These are two different things. With something like the Muslim ban, it is important a lot of people react very quickly because if the government can slice off one group, it can do the same to others. This is a political logic that requires quick action rather than waiting for public opinion polls. Americans were actually better than Germans, they got out right away. Some Americans do seem understand the logic, they move quickly. So the airport protests are not in the first instance about communicating with the Trump supporters; they about making clear to the administration that we recognize what you are doing and that we oppose this logic. Indirectly, the protests communicate to the majority that there are two siides t the issue, and that they should think for themselves. Communicating with Trump supporters is different. You have to have people out, waving flags and describing themselves as patriots, even as they decry and resist particular policies. It is important for people to consider that authoritarianism, though it claims all the national symbols, is not patriotism. Over time, protests that are for a better America are important to change minds and swing over Republicans – and I should say that I have already seen a number of Republicans whom I know personally in the protests. It needs time, this is more about six months or one year. They just elected him three months ago, for now there is still the frame in place that that he will change everything and improve their lives, other things can seem like details so long as this basic hope remains. It might take a while for people to realize that making America into a Trump family welfare state is not in the interest of Americans whose name is not Trump. One of the main problems is the internet and the polarization and simple unreality that it generates. it is important to talk about these issues in person, I have a little book called “On tyranny” and I will do my best to talk about it with people who think in various ways about politics.
We are here in New Haven, a liberal bubble. Do you encourage your students to do that?
They are doing it. An undergraduate who is from New York took the train all they way to the southwest, just to talk to passengers. Young people have to do that. The risk is that they shift from taking freedom for granted to taking unfreedom for granted, without realizing that it is precisely their choice and their voice that can make the difference. And keep in mind that these conversations can create common ground. Some of the reasons some people voted for Trump make sense. You simply dismiss all of them according to your own stereotypes. It is not always as simple as the East Coast people will tell you. Trump has unleashed public racism of a kind we have not seen for decades. That is true. This racism in turn releases energies that can change the whole system. Also true. But at the same time, he would not be president without white people in crucial states who voted for Obama twice. So you can’t simply dismiss all of these people as racists, because in some cases their votes also brought us our first black president. A lot of Trump voters would have voted for Bernie Sanders, who is a Jewish socialist. There are problems and that have to do with globalization and inequality that can’t be wished away. Maybe not every citizen can articulate these problems in the best way, but many voters have good reasons to be worried about globalization. Hillary Clinton did have actual policies that would have helped – that’s the tragedy. But she wasn’t able to communicate that she understood the problem.
On Facebook there are a lot of countdowns: 3 years, 11 months, 1 week until President Trump’s first term is over. How is your mood, do you see hope?
The marches were very encouraging. These were quite possibly the largest demonstrations in the history of the US, just in sheer numbers on one single day. That sort of initiative has to continue. The constitution is worth saving, the rule of law is worth saving, democracy is worth saving, but these things can and will be lost if everyone waits around for someone else. If we want encouragement out of the Oval Office, we will not get it. We are not getting encouragement thus far from Republicans. They have good reasons to defend the republic but thus far they are not doing so, with a few exceptions. You want to end on a positive note, I know; but I think things have tightened up very fast, we have at most a year to defend the Republic, perhaps less. What happens in the next few weeks is very important.
Image-To-Image Demo
Set of interactive browser-based machine learning experiments put together by Christopher Hesse turns doodles into images with various neural network trained image data. For example, in ‘edges2cats’, your simple doodle will be recreated with image data from a dataset of cat pictures:
Recently, I made a Tensorflow port of pix2pix by Isola et al., covered in the article Image-to-Image Translation in Tensorflow. I’ve taken a few pre-trained models and made an interactive web thing for trying them out. Chrome is recommended.The pix2pix model works by training on pairs of images such as building facade labels to building facades, and then attempts to generate the corresponding output image from any input image you give it. The idea is straight from the pix2pix paper, which is a good read. …
[On edges2cats:] Trained on about 2k stock cat photos and edges automatically generated from those photos. Generates cat-colored objects, some with nightmare faces. The best one I’ve seen yet was a cat-beholder.Some of the pictures look especially creepy, I think because it’s easier to notice when an animal looks wrong, especially around the eyes. The auto-detected edges are not very good and in many cases didn’t detect the cat’s eyes, making it a bit worse for training the image translation model.
You can also try doodles in datasets comprising of shoes, handbags, and building facades.
You can play around with the neural doodle experiments here
The excellent French cartoonist Blutch has his first artbook, A View of the Lake, releasing next month from Darguad. I’m pleased to present an exclusive 14-page preview, and more details, over at Comics & Cola.
A little video we all should take a moment to watch and think about.
Instead of thinking about what divides us we should think about what we have in common…
I’ve reblogged this on every account I have.
This is simplistic and intended to tug on heartstrings and all that shit but guys I really needed to see something about people not being dicks so if you needed that too please watch this.
Thanks for this, Denmark.