It’s been a while. Updating to a newer WP theme, and skinning this up with the orange Menger sponge motif that’s been a thing for me the last few months.
It’s been four days, this year’s XOXO festival is over, and I’m fried, tired, wrung out, worn through. It’s knocked me over again; I’m exhausted and off-balance and struggling on a Monday morning to wade through sleep deprivation and emotional hyperextension to do the work that I actually do every normal day.
There’s an impossibility to getting out the far end of XOXO gracefully. The festival, with its density of good will and shared optimism and its surfeit of creative energy, with its intense press of good friends and good strangers into a shared space and common experience, isn’t set up for an easy exit or a casual goodbye. I have to fight it off, scrape my way back to not-XOXO. It’s always a rough morning after.
Because the last day is suffused with that particular heaviness under the joy, the sinking, dragging, unshakeable weight of not being able to forget even during the best moments of a thing that you’re also at the end of it. That the better it is now the worse it is that “now” can’t last. It’s a weight I have to push hard against, with hugs and beer and manic chatter and goofie selfies and uncharacteristic dancing all piled up together in a haphazard attempt to stoke on an unflagging social momentum that’s fundamentally exhausting to me but is the only way I can keep the weight from catching up as the day ends.
But the weight is always there anyway; it’s in the shared tired looks during a sudden lull, in the quiet conversations about what happens next, in the tactical “if I don’t see you before you take off” goodbyes as the evening wears on. It’s there on the face of every other person making the same effort to push hard against it, in the electrical fry under every conversation that might be the last one you have with someone for a while, or ever if you both drop the ball. And there’s so many balls in the air, and so much gravity to go around.
It was a fantastic festival. It was fun and funny and heartbreaking and inspiring; it was a kind of thing that just a couple years ago I didn’t even know was my kind of thing, and now I can’t imagine thinking twice about it and only worry that it might never happen again. It was what it is every time, too much and not enough, and I’m incredibly lucky to have had a chance to be there, and to know so many wonderful people attending and running it.
But it was. Not is. It’s the morning after now, and I’m tired in every way I’m able to be, and the weight is calling in its deferred debt with interest. And even knowing how much good I’m carrying out of these last few days — all the ideas I’m excited about working on, all the stark perspectives festival speakers laid out, all the friendships made and renewed — that weight is still there. And it’s gonna hang on me for a while, and hang heavy.
Tackling another project:
I wanted to do something with some serious specular highlighting, and some transparency, and distinct shapes that I’d have to not try and cheat my way around too much.
Beer! Beer will do. And while it will go flat, it won’t literally rot away over the course of several days left out, so I can keep coming back to this one. But it’s a bit weird in retrospect to have a beer just sitting there, not for drinking. And a really nice Nut Brown, too. Shame.
I started with an underpainting with thinned out orange, same basic deal as the last couple, and it’s starting to feel a little more natural; I spent more time getting stuff outlined this time, partly because there was just more to do but also because I wanted to try harder to get the shapes and proportions close to correct.
That feels like it paid off reasonably well so far. But the new ideas in this — getting that subtle shading of brown light in the beer to come out, getting the play of direct and indirect shadows right, getting the relatively cool and warm and light and dark colors in the room — have all been a challenge.
The deceptive nature of relative hue and value and intensity is something I’m appreciating a lot more with this one where, unlike the self-portrait I did previously, there’s not really any anthropomorphic or emotional engagement to be distract from all the stuff that’s off the mark.
More work to do on the first pass, get the floor and walls and green piping on the cloth in place and some of the rim/highlight stuff for the glass, and beyond that the paint on the already painted bits is full of gaps because I keep mixing not nearly generous enough amounts of each color when I’m working.
This is on rougher canvas than I’ve been using, too, owing to me grabbing supplies at the store without really looking. It’s an interesting change and I might like it, but I was expecting to be a bit more fiddly with details on this one and the rough goes against that a bit it feels like.
Following on the last post, I bought some more paints and an easel and have done two more paintings: a self-portrait, and a color mixing exercise trying to approximate the 16-color palette of the PICO 8 game programming environment.
The self-portrait came out reasonably well considering what a stab in the dark it is at this point; there’s a ton of stuff I can complain about either not knowing how to deal with at all or knowing that I didn’t do as well as in theory I might have, but for a beginner go I’m fairly happy with it and have something to build from for next time.
It’s based on a photo from a few years ago, and for lack of a better way to use it as a reference I just brought that photo up full screen on my workstation while painting a few feet away (and about ninety degrees clockwise, to try and make good use of the light from the window) in my home office.
iPhone photo of a computer screen comes off a lot worse with the blown-out highlights than actually looking at the computer in person, of course. But in any case comparing it to the painting makes it clear how much is off in terms of proportion and framing; my face in the painting is longer and a bit off axis compared to the actual photo, is the biggest issue in basic execution. Fine if it had been a deliberate choice, but it’s just What Happened. I have a feeling there’s gonna be a lot of What Happened as I keep working on this stuff.
I started with a freehand sketch underpainting in thinned-out yellow on the canvas, and my application of paint by the end isn’t quite complete enough to block out all the gaps of that, which makes me regret not thinking more about what color I would want showing through. Again, something that’d be nice to have be intentional instead of just What Happened.
I’ve stayed away from sketching with pencil on canvas so far, but that’s something I should try as well; because my hand isn’t super steady and I’m not used to using a brush like this, sketching with paint is really really loose, which isn’t necessarily a bad thing (I like the idea that I might manage to loosen up a little with oils compared to my usually really tightly-controlled approach to drawing) but it does mean that I’ve thrown out some of my existing strengths so far in a way that’s probably leaving me a little more uncertain and frustrated with my output than I need to be. So that may come into the mix soon.
Speaking of things that could have used a sketch: this is a hasty color-mixing experiment and so I don’t mind all that much that it’s a disproportionate mess for something so simple, but it’s still a bit embarrassing.
This is a rendering of the 16-color palette of the PICO 8 programming environment, something I’ve fallen hard in love with as of last summer (and about which I should really post in its own right); the colors in the system are fixed as if part of the limitations of a 1984-ish game system, which gives the system and its games a specific sort of constrained character that I really dig.
Trying to recreate monitor output colors in paint is kind of an iffy move in the first place given the different qualities of light involved, which is why it seemed like an interesting basis for an experiment. Aside from the horrid proportions, I’m mostly happy with what I managed to mix up; the basic color relations aren’t bad, I feel like I got the values and hues pretty good for the most part.
There are a couple of notable weak points: both the bright light blue on the bottom left and the brighter lighter green on the right come out muddy in the painting vs. the actual screen color; whether I could have gotten something closer to either mixing the colors I currently own, I don’t know, but if so it’d be through some trick other than what I know so far.
For the blue, I’ve got a tube of Phthalo Blue and a French Ultramarine, both of which are naturally much darker than the light blue, but bringing the value up with white predictably dulled out the intensity of whichever of those I ended up running with.
For the green, I likewise tried to bring up some Green Light with some white (and a touch of yellow to warm it up slightly) but only got part of the way there.
It was good to force myself to do a little bit of extra mixing, in any case; that feels like a pretty big new skillset and I don’t feel like I have much of a handle on it at all yet.
All the Menger sponge stuff — the wall, the wee canvas — got me thinking about the idea of what some snobbish part of my brain thinks of as painting painting, as legit for realsies no fuckin’ around oil painting with oils like an oil painter.
There’s a giant discussion to be had (and which has already been had ad nauseam) about what art and Art are and what’s legitimate and who legitimizes it and so on that I don’t really want to even try to to start to unpack and examine here, so I’ll just acknowledge that, whatever historical and cultural and etc. baggage is involved, this is me painting a Menger sponge with latex house paint and thinking “maybe I should try doing something like this not using latex house paint” and going from there.
And so I’m stumbling in the direction of doing some oil painting. And I usually sort of toil away on art project stuff without sharing it or talking about it online until either I come up with something I’m excited to share or I let it die on the vine.
This time, I think it’s gonna take a while to get to the “something I’m excited to share” bit, so I’m gonna make an effort instead to document the process of trying to get to being not-lousy.
Stumble feels like the right word: the catalyzing purchase of a few tubes of oil colors was a total whim, and left me sitting at home with said tubes of color and none of the other stuff it turns out I ought to have to make use of ’em.
Things I have subsequently gone and bought myself to fill out the kit:
– a couple of bristle flat brushes and a couple smaller sable brushes
– a small glass palette that may turn out to be too small for my sloppy-ass color mixing
– a couple of palette knives, one that’s just right and one that’s ridiculously large in retrospect
– some odorless paint thinner, after I discovered to my relief and delight that “no you’re totally gonna be using turpentine” stopped being an ironclad rule with oil painting at some point
– some linseed oil that at some point I’ll experiment with but am too overwhelmed right now to try and add to the mix
– a few small canvases to start putting paint on
Things I have not yet bought that I’m realizing I really ought to:
– a few more colors to save me from amateur mixing hell
– a goddam easel so I have something sane to stick a canvas on
Books I have put holds on at the library:
– like a half-dozen titles, all over the place, I have no idea what I’m doing basically
Ask MetaFilter questions about oil painting that I have read:
– several, though there’s fewer than I would have guessed. And nobody agrees about anything though a lot of folks think the thing to do is just work with acrylics for a while instead, which honestly seems like it’d make a lot of sense if my aim were to just do more flat designery patterns like the Menger sponge stuff. But a lot of other folks are like FUCK THAT, GET OILS, DO OILS, OILS ARE RAD AND FUSSY AND RAD, so. Mixed messages out there in the Ask archives.
But the prevailing theme: just get painting. Just buy some whatever you’re gonna buy and get to painting. And so I have and so here we go:
Yikes, is my reaction. My wife was not so negative; I think we’re coming from really different perspectives on it and hers is a lot saner and healthier: she’s taking the “hey, it’s your first oil painting and look you did some nice shading bits” tack, where I’m on more of a “HOW AM I NOT THE SECRET SAVANT VERMEER OF OIL FRACTALS” kick where failure to somehow be inexplicably excellent on day one of an unfamiliar craft is somehow a surprise.
I mean, to be clear: it’s not a surprise, and hey I painted a thing and learned a bit about several basic things I didn’t know yet about oil painting, and that’s a good thing. I didn’t really expect anything more than this. You learn by sucking and then eventually sucking not so much.
But in retrospect making my first go with oils thematically connected to the previous project I’d done with more familiar tools and much more confidence was probably a silly move — the contrast in how sharp the recent Menger piece feels and what a weird amateurish mess this is just setting myself up for an artificially stark bummer.
So but yes: this is me painting a simple Menger sponge from memory, trying to blend my three primary colors just using a bit of black and white for darks and lights respectively, against an abstract blended nowhere background, using not enough paint like a miser, and not really thinking about where the hell the light is or the cube is, and all in all making it way, way too dark. The blue face basically just disappears into the background, and the shadow I decided to throw on for the hell of it (shadow against what? the magical void the cube is floating in?) is basically swallowed up as well.
It started as a simple cube, but I was unhappy enough with the look of it that I figured trying to add in some holes and playing with a little depth would add something, and there’s something to that but it’s still a turd-polishing sort of maneuver.
Coming back to it and essentially repainting the whole thing in a couple days feels like a good plan; I can take what I’ve learned from making that and other stuff since and try and make a more coherent go of my sponge rendering.
Speaking of other stuff:
This is this morning’s go at doing a still life, when I’d gotten as far as sketching with some thinned out paint an approximation of my bowl of fruit. I thought about doing something other than the literally most cliche subject possible, and then decided that (a) I didn’t really have anything else that seemed like a specifically great first subject and (b) hey it’s probably cliche for a reason. So Ikea bowl and a couple of dodgy apples it is.
And…it was a better choice than sponge-from-memory. The painting is all kinds of dodgy, shapes are wrong with a misshapen bowl and poorly represented angles and I’ve punted hard on background details and there’s not as much contrast as I’d like and and and. But it’s a more careful effort and I tried to start incorporating some of the color mixing theory and compositional process I read and watched tutorials on last night, and the difference between that and my first go is definitely there, at least.
And the use of the same mix of yellow, red, and blue in a context where I tried harder to figure out what to do with them and where to mix them together was a nice antidote to my feelings about the first cube painting. I’ve got a long, long way to go to actually feel comfortable there, but it was nice to feel like a couple of basic things were at least starting to seem approachable.
On my todo list:
1. Develop some fucking patience because it’s gonna be a couple days before I can come back and futz with either of these.
2. Try doing something different, on the bigger 10×14 canvas I bought. Maybe something monochrome, try and just worry about values. Maybe dare a fucked up self portrait.
3. Get an easel, jesus. The first cube painting I did flat on my desk, like I was drawing, because that’s a familiar way for me and my not-super-steady hand to work. For today’s fruit bowl I decided to get the canvas upright, but that means terrrrrible lighting on my desk, and anyway I have nothing easel like and so resorted to putting a couple nails in a post on the lee side of our garage/shed, and that at least let me get vertical but reacted poorly to any kind of serious pressure on the canvas or really any at all around the edges. The thing fell a couple times, wobbled several more. Heartbreak and frustration just waiting to happen. Get an easel.
4. Try doing some detail work. I’ve been so far embracing the idea of trying to use larger flat brushes just to force myself to get to work with forms and colors and not obsess over details, but I gotta try these wee ones out and see how small brush head in sable feels. And see if I can start to see how to balance that out against the big brushes in how I bring backgrounds and foregrounds together, etc.
5. Use more paint. Use some more goddam paint, you skinflint. I know it’s five bucks a tube, but the tubes aren’t that small and the canvases aren’t that big and I keep running myself out of a painfully, dodgily mixed color before I’m really done with it and that’s not helping anything.
6. Figure out a workspace in more detail. Find something to put my supplies on and in other than my desk or a spare 2×4 nailed to my garage. Figure out where I want stuff and how I want to get at it and so on.
After finishing up the Menger sponge and Cantor set on my home office wall, I got an itch to try and do a small, portable version of the same basic sponge design, and so I got myself a little 6×6 canvas from the nearby art store and did just that.
It’s sort of liberating to do the same thing but with so much less at stake: smaller scale, less (total) detail, no danger that if something goes wrong I have to figure out what to do with an entire wall. Plus I’d had a chance to think about the process after inventing it on the fly for the wall painting.
And so I coated the canvas in my orange, drafted up a smaller, lower-degree sponge in pencil on it (this time using a trianglular metric drafting scale I borrowed from my wife, instead of a yardstick), and got to work.
The work went quickly, just an afternoon or so total instead of eating a busy weekend. No backaches or hand cramps this time.
I picked up a couple of new much finer brushes while I was at the art store, which helped a lot as well, especially since the smaller triangles in this version are far smaller than those on the wall version. Being able to make the corners really sharp makes more of a difference at this scale.
All in all, I’m pleased with how this came out as well (above is prior to cleanup to erase those pencil marks and touch up a few smears and drips), and I can see doing some other variations at this scale that might make for a nice collection of little paintings.
Worth nothing that, as an accident I recognized early and decided not to reverse course on, I rendered this small version with the black and white faces opposite of where they were on the wall. You can see that in the photos below, which show the relative scale of the small painting to the wall, and then give a rough glance at the zooming-out fractal similarity of the cube when comparing the two sponges at proportional distances.
This is a little writeup of an art project I’ve done in the last week, and a couple neat details about the math ideas driving it.
I’ve been redoing my home office recently: I refinished the floor, and painted the walls. Both look yards better now, but while I was at it I decided to add some art to the walls.
I’m a fan of fractals, mathematical constructions that rely on relatively simple rulesets to generate structures that have various kinds of self-similarity at different scales, such that one can “zoom in” arbitrarily and continue to find recurring details. You’ve probably seen, for example, the visually striking Mandelbrot set. You also probably seen a Sierpinski triangle. They’re neat things, fractals, both in their mathy properties and in how they look when put down on paper.
I’m fond in particular of a family of closely-related fractals, the Cantor set, the Sierpinksi carpet, and the Menger sponge, which can be thought of as respectively the 1D, 2D, and 3D interpretations of the same fundamental idea: take something and cut out the middle third of it; and then take each of the bits left over and cut the middle third out of each of those; and then for each of those new bits, cut the middle third out; and so on.
Pictured above are sketches of each of those, which I drew up while brainstorming about wall designs. Ultimately I decided to start with a Menger sponge, because it’s the most eye-catching member of the family, and got pretty excited about the prospect.
But how to put it on the wall? There’s probably a lot of ways to go (not least of which would be rendering an image with an art program of some sort and printing up a big custom wall decal), but I did it the way I knew would work well enough for me, and that I could get started on immediately while I was hyped up about it.
So I grabbed a yardstick and a pencil and started drawing a large Menger sponge right on the wall.
Making the Menger sponge
Both to keep things simple and because I like the symmetry involved, I chose to do a perfect isometric view of the sponge; that means the whole structure ends up occupying a regular hexagon with each of the major visible faces of the cube occupying a diamond-shaped third of the design.
Because the theme of this kind of fractal is division by three, I settled on a size for my sponge that’d divide up nicely on a pretty basic yardstick: 27-inch sides, a power of 3. 27 works well because if I divide by three I’ve got 9-inch subsections; divide by three again and it’s 3-inch sub-sub-sections; again and it’s 1-inch sub-sub-sub-sections. And so the whole design is a hexagon with 27-inch sides, 54 inches wide at its broadest points; all the smallest details are equilateral triangles with 1-inch sides. Nice round numbers!
Armed with that scheme, I got to work drafting. I marked a center point on the wall, and measured 27 inches from there to the left to mark a left-side point and establish a base line between the two points. I then used my yardstick as a rudimentary compass, eyeballing a guess at a 60-degree angle up and left from my center point and marking a short line as an “arc” at the 27-inch mark. Then I did the same up and right from my left-side point, marking another arc at 27 inches out. Where those two arcs cross is a point that’s equidistant from both the lower points: the upper point of an equilateral triangle with three 27-inch sides.
I repeated that process five more times, generating six triangles, radiating out from the center point, adding up to a hexagon. Each of three pairs of adjacent triangles would make up the diamond-shaped faces of the design.
Then: subdivide. I marked out 9-inch intervals along each of the lines I’d established, and then used the yardstick as a straight-edge to draw a smaller 9-inch-side diamond in each of the three large diamonds. And then: mark out 3-inch intervals, and draw 8 3-inch diamonds surrounding each 8-inch diamond. And then 1-inch intervals, and 8 1-inch diamonds around each 3-incher.
That was all pretty straightforward; the only tricky bit to think through was working out the bits visible in the holes on any given face, the interior bits of the sponge. Fortunately, it’s all determinable, both mathematically and, in what works better for me in practice, through basic squint-and-hrmmmm spatial reasoning.
(And I’ve been a fan of Menger sponges for a long time, so I’ve spent a lot more time than the average person contemplating those details. I’ve done a couple of odd internet things with these ideas in the past. Back when Minecraft was still pretty new and I lost a couple of months of my life to it, I worked on among other things a Menger sponge floating above a mountain and, ultimately unfinished, a very, very large Sierpinski carpet. And earlier this year I made a silly little PICO-8 demo thing called Sierpinski Freakout that zooms recklessly in and out on a wildly blinking Sierpinski carpet.)
In the end I was able to render the whole thing from memory and a little contemplation, which was satisfying.
All in all, drafting it on the wall took about three hours. It went well, though there were a couple gotchas: the yardstick I was using is very slightly bowed, so my lines weren’t so much straight as they were nearly straight. I ended up having to fudge details occasionally later in the process as a result. And beyond that, the wall itself isn’t completely flat; this is an old house and flat planes and true perpendiculars are harder to come by than you might expect.
After that, it was time to paint, which I did with a couple of small paint brushes; the one above is what I started with and it worked well for doing large open-ish areas like the bulk of the main black sponge face, but once I was moving on to the smaller triangle details it was just too sloppy, and so I moved to a smaller, flat brush that was easier to build up a precise straight edge with.
The sponge is a three-color design, but part of my idea for this was to use the wall color itself — a nice orange I’d recently applied over the sort of blech terracotta that was there when we moved in to the house — as one of the colors. This has a few things going for it: the design has a sort of extruded-from-the-wall feeling; it makes for a neat exercise in negative space for the orange face of the sponge; and it requires 1/3 less painting that way. That last point turns out to have been a big winner.
And so I started with the black face, applying all the paint for both the main face itself and for all the interior details on the other two faces where black-facing portions of the structure would be visible. I was a little tempted to stop here, because the one-color version has a nice feeling to the way it strongly implies the structure without actually filling it out. And because I was coming to terms with how much work this was going to be: getting all that black on was probably 8 hours of fiddly and for the small details tediously repetitive painting work.
But, nah. Let’s do it.
I got the white face added and it was pretty goddam satisfying to see it all come together, that big chunk of hours later. But it was also clear on a close look that I was going to need to recoat the white and the black both: the initial coat, especially with the white over that vibrant orange, was too thin and while it was a little texturally interesting in places, it wasn’t consistent and wasn’t even attractively inconsistent. Above you can see some recoated white on the left, single coat on the right; the difference was even more striking in person.
So, another few hours, recoating white and black. Took far less time than the first coats since I didn’t need to worry about edges nearly as much.
And then touchups with both of those and with the base coat orange to fix little spills and flecks and the various smudge spots where while trying to wrap my brush hand awkwardly to get the correct flat angle on this or that triangle I managed to lean onto a scrap of wet paint and then stamp it down elsewhere.
There was a lot of that. I don’t have a terribly steady hand for painting, so propping my wrist or the side of my hand somewhere and doing the detail work with fingers and thumb was necessary for most of this. Figuring out the right order in which to do a series of triangles so that I could reliably plant my hand in the necessary multiplicity of positions for one triangle after another without sticking it in wet paint was a bit of a puzzle in its own right.
The painting happened in shifts over the course of this last weekend; I started Friday afternoon with the black, and finally finished the recoats and final touchup Sunday evening. All told with drafting and painting it was on the order of 20-24 hours of work. I caught up on a few podcasts and listened to a lot of music and spent a lot more time ignoring the internet than I’m usually able to.
But then, finally, it was done. For reals, for good, done. And it looks fantastic:
It’s big enough to be really striking from anywhere in the room, and at a few feet’s distance the lines and angles all look sharp despite my brushwork being a little sloppy even at my best. I’m pleased with how well the negative-space bit on the orange face works; originally I had thought I might need to add thin lines on the two open bits of the hexagon to clearly define the shape, but I think it works very, very well as is.
I also like how a little bit of deliberate changing of focus can disassemble it, becoming, instead of a 3D cube-like object, just a collection of colorful triangle and diamond patterns floating in space. Which of course it is, but the effect of a complicated cube-like object is so strong that the two ideas can compete more or less constantly for your attention.
The Cantor set
Following on that, I wanted to do a companion piece for the Sponge, and so I went back to my idea of a family of fractals and settled on doing a Cantor set on the same wall, on the far side of the closet door in the center.
This was simpler to lay out, and involved a great deal less painting, and so was doable in an afternoon and evening yesterday. I learned from the sponge and went and bought a new, very-straight-indeed metal yardstick from a new art supply store in the neighborhood, and started with the correct brush and an expectation that I’d be doing two coats.
I still ran into a couple challenges with this, though. A flat, straight yardstick doesn’t make a wall flat, so laying out lines still had a little bit of wiggle to it. And those not-quite-perpendiculars of a hundred year old house came into play as well; lining up the vertical axis of the set to track with the vertical of the adjacent closet door frame that itself leans a bit means the whole thing skews very slightly to the side. And those wee lines at the bottom line of the pattern required exactly the kind of delicate-touch freehand painting that I struggle with, and so are even sloppier on close inspection than the linework on the sponge.
My measurements were also a bit more fiddly this time; because I was subdividing more times for the Cantor set than for the Menger sponge, and I wanted to have the smallest measurement still be a nice round even fraction of an inch to simplify layout and avoid guesswork, I started from my smallest Cantor line at 0.125 inches (1/8 inch) and built up from there: the next larger rectangle was thus 0.375 inch (because that’s what got the middle cut out of it to yield a pair of 1/8 inch rectangles with a 1/8 inch gap), and then from there 1.125, 3.375, 10.125, and finally a single 30.375 inch rectangle. Not difficult numbers to measure out and mark — a yardstick is a yardstick — but a little trickier to (a) remember and (b) literally count off while holding a yardstick in place with one hand. And this nice new metal yardstick weighs a bit more than the warped one I used for the sponge.
But it looks nice, regardless, and fills the space well as a complement to the sponge; reusing the white and black combination makes for a nice visual consonance.
And I mentioned refinishing the floor: I converted it from a peeling collection of layers of paint (who paints a wood floor?!) to a dark-stained, glossy wood surface with lots of nice wood grain variation. And it’s shiny enough to get a good mirror reflection under the right conditions. Which means double your sponges!
I painted these fractals because I figured they’d look good on the wall, but there’s lots of fascinating things about them that don’t have anything to do with spiffing up your home office.
One big thing there: both the Cantor set and Menger sponge paintings are just partial snapshots of the actual fractal processes in question.
The sponge for example could have been subdivided further with another ring of eight .333-inch diamonds around each of my smallest 1-inch diamonds, and then eight .111-inch diamonds around each of those, and so on.
And I really mean “and so on”, in the most extreme sense; there’s no natural stop point to this process, if you’re not a human being trying to paint it on a wall. That’s that fractal self-similarity thing I was talking about; the sponge can in principle keep getting subdivided more and more, and you can keep “zooming in” to see more and more detail at increasingly small scales. Not just for a while: infinitely. You’d keep cutting out more and more tiny bits of it until, in the long run, it would have infinitesimal mass, being an infinitely fine lattice of missing pieces. An impossible sponge rather than a solid cube! And while it has no mass, it has, seemingly paradoxically, more and more surface area as you cut more and more bits out. Infinitely much, eventually.
The Cantor set is the same; you keep cutting a bit out of that rectangle (really just a one-dimensional line in the pure mathematical sense, but rectangles look a lot better on my wall), and then out of its sub-rectangles, and so on, and the amount of actual line/rectangle left in the long run approaches zero. First you’ve got 1 unit of line; then you cut out the middle bit and you’ve got 2/3 of your line, made of two 1/3 unit pieces. Then you cut the middle bit out of each of those 1/3 pieces and you have 4 pieces that are each 1/9. 1 becomes 2/3 becomes 4/9, and so on: for any given degree n of iteration into the Cantor set you have (2/3)n of your line left. (2/3)0 = 1; (2/3)1 = 2/3; (2/3)2 = 4/9; and so on. (2/3)infinity is a very small amount of line indeed: 0.
But in the meantime you’re cutting your line into 2n pieces: first 20 = 1 pieces, then 21 = 2 pieces, then 22 = 4, and so on. My wall painting gets as far as 25 = 32, but of course it keeps going. And as n gets large, this number gets very large; 2infinity is infinity. So you get, just as with the sponge, this strange idea of something that both grows and shrinks impossibly, with an infinite number of line segments which add up to exactly 0 length.
It’s neat shit.
It’s half past seven on Monday morning when I’m starting to type this, and I’ve slept poorly and not long enough, and XOXO 2015 is over, and I am really genuinely relieved by that. Because it’s too much. Being at XOXO is work, socially draining emotional work and too much standing all at a go and trying and failing to remember the names and stories that go with the faces that float into view, it’s coordinating haphazardly and trying and sometimes failing to not leave out or be left out, it’s a weird staggering of Sudafed and beer to keep sinuses and social anxiety respectively from kiboshing the whole thing, it’s being so sure you want to see the last half hour of this thing that started near midnight and being so certain that you need to be in bed already to let your body have any chance to keep up with all this shit. It’s trying harder for a few days straight than I normally have to or would ever want to try at a lot of things.
I’m relieved and I’m sad, because it’s too much and it’s not enough, and it has to be over but it shouldn’t be over. It’s fucking untenable, and why isn’t there more of it?
(I was going to write “bummed”; that’s the sort of word I’d normally use here, because…because emotional vulnerability is hard? Basically? But in the spirit of this whole thing, I’m trying a little bit more this morning. So, it’s a goodish sad, a bittersweet, glad-to-feel-it sort of sad, but I’m sad.)
I’m sad because I’m gonna miss seeing all the new out-of-town people I’ve met, and doubly so the old friends I got to see again for a little bit. Because the sense of something coming together — of us all being in on this weird excursion — feels special, is special. Because as overwhelming and too-much the social weight of this dense press of creativity and nerdery and good-heartedness and awkwardness and empathy is, however much it may overload me and leave me off balance and fighting to keep my head above water, it’s also wonderful and unforgettable and the kind of thing I keep thinking about all year afterwards. It happened last year, and it’ll happen again this year.
I almost didn’t sign up for XOXO 2014. I’d been to a few conference-type events before, SXSWi a couple times and a couple other internetish things, and they never clicked and I just felt like I wasn’t supposed to be there. And so even being friends with Andy Baio and knowing what a wonderful brain and heart he has, I was like…eh. Been burnt before. Probably not for me. Not for the first one in 2012, not for the second one in 2013, and it was only the combined encouragement of my wife Angela and my friend and co-conspirator Jesse Holden that tipped me over for 2014.
And I ended up loving it, and hoping it’d happen again and that I’d get to come again and am so thankful it did and I did.
But it would have been so easy not to do it. And I wouldn’t even have been wrong, exactly: because it’s too much, and it’s overwhelming, and it’s hard and I’m exhausted in some of the exact ways I was worried I might be. But it was worth it and it was wonderful, and justified many times over getting outside my comfort zone long enough to forget about my comfort zone a little and recognize some of the stuff I miss when I stay comfortable. I wouldn’t have been wrong to not go, but it would have been a huge mistake.
I love what the Andys are doing with XOXO. I’m excited about the Outpost. I’m excited about all the podcast and gamedev chatter I got up to, and the post-conference excitement from folks in town and elsewhere to keep doing stuff. I’m excited about new friends and neighbors I didn’t know I had. I’m excited about the kick in the pants all the wonderful speakers provided, to keep doing shit that’s worth doing, that wants doing, even if I’m not sure if it’ll work or if people will like it or or or.
I have too much in my brain to unpack and not enough energy to really think about it or process it. I’m thrilled and tired and happy and sad and it’s a lot. It’s too much. It’s not enough.
I talked a bit in my Calvin and Markov post this morning about the C&H transcripts I’m using to power the Markov chain process, and about how much work it’s likely to be to edit the whole thing. Probably 25-30 hours total.
It’s not difficult stuff—and in fact it’s not a terrible excuse to reread some C&H as you go, if you want to go less than warp-speed—so if you’re interested in helping out, drop me a line in the comments here or via email or @joshmillard on twitter and I can hook you up with a specific chunk of transcript so we avoid any accidental duplication of effort.
I’ll talk a little more about the approach I’ve been taking to it, to give a clear idea of the small handful of details involved in the markup process. As I said in the other post, the situation is that transcripts of every strip do already exist, which is great, but they aren’t broken down by character or panel at all. It’s just one string of words run together per strip.
So the project is to, for e.g. this Christmas Day strip from 1986:
Turn each line in the existing transcript, like this:
19861225 Psst! Are you awake? Is it Christmas? It is! It is! Let's go wake Mom and Dad and open all our loot! Since it's Christmas maybe we should let them sleep a little. That's long enough! Wake up! Wake up! It's Christmas!! Quarter to 6. He let us sleep in this year.
Into a set of lines like this:
C: Psst! Are you awake?
H: Is it Christmas? It is! It is!
C: Let's go wake Mom and Dad and open all our loot!
H: Since it's Christmas maybe we should let them sleep a little.
C: That's long enough! Wake up! Wake up! It's Christmas!!
D: Quarter to 6. He let us sleep in this year.
That’s the whole idea in a nutshell: each line labeled with character code, colon, space; a new line for each balloon.
But here’s a few details worth noting:
1. Character labels
Each character has a specific short label — as seen above, C for Calvin, H for Hobbes, D for Calvin’s dad. I’ve assigned labels to the most common ten or so characters I’ve come across in the first 14 months of the strip, as below:
C = Calvin
H = Hobbes
D = Dad
M = Mom
T = Teacher, Miss Wormwood
P = Principal
SD = Susie Derkins
SS = Spaceman Spiff, when Calvin is pictured as or narrating as/about Spiff
MOE = Moe, the school bully
ROS = Rosalyn, the babysitter
MON = Monsters/creatures of various sorts
MISC = miscellaneous/offscreen character dialogue
SFX = non-spoken sound effects words e.g. CRASH, WHAP
Most of those are self-explanatory. The spots where I’m making more of a judgement call:
– the use of MON to represent various imaginary speakers — I’ve included actual monsters under the bed, alien dialogue from Spiff sequences, and Calvin’s own speaking-as-imaginary-monster-form where he’s shown in panel as a monster rather than himself. Arguably these could be broken out more finely; if you want to propose or run with a more detailed rubric, just note what you’ve come up with and I’ll look at incorporating it formally.
– the use of MISC for non-major but clearly identifiable characters. In some cases dialogue is truly off-screen, e.g. TV show dialogue when Calvin’s watching TV, but some cases it’s more clearly coming from a detailed if unnamed character. There would be no harm in consistently labeling individual characters instead of lumping them under this catch-all, so if you want to e.g. label the family doctor as DOC: or by his name if you happen to know it, that’s fine too. Just make a note of it when you send your work back.
– SFX is meant for non-spoken environmental sounds; generally the distinction between this and stylized speech/shouts/utterances (AAAAHHH!, WAARG!, Z) is pretty clear, but use your best judgement if it’s a weird case.
2. Different panel/balloon, different line.
In cases where the same character speaks in multiple balloons or panels in a row, I’ve been giving a separate line to each instance. This doesn’t effect my Markov project’s performance, but it feels like a cleaner representation of the structure of the strip’s flow to me.
3. Doubling up shared dialogue
Occasionally, two characters (usually Calvin and Hobbes) will be shown shouting something simultaneously, either with twin word-balloon tails or by implication with more stylized non-balloon text. I’ve preferred to duplicate those lines, giving a separate copy to each character on two consecutive lines. The original transcript generally doesn’t duplicate the text in these contexts, so you’ll need to re-type or copy and paste.
4. Capitalization across panel/balloon breaks
The original transcript often declines to capitalize new panel/balloon starts when continuing dialogue across a break/ellipsis; I prefer to start new lines capitalized for consistency, and so would recommend capitalizing in these situations for the next line, e.g.
Sure, I think it's ... wait a minute.
H: Sure, I think it's ...
H: Wait a minute.
5. Spelling/transcription errors
The original transcripts are pretty good, but (not surprising given how much of a slog it must have been to type them out) there are occasional typos and a couple recurring issues worth fixing opportunistically if you notice them as you work.
Aside from occasional literal spelling/typing errors, the most common thing I’ve been fixing is the inappropriate use of periods where commas should go and vice versa (and corresponding changes to the following capitalization), and the outright omission of commas. Fix ’em if you see ’em.
I’ve spent the last few days building a random generator internet toy called Calvin and Markov. It generates random new weird variations on Bill Watterson’s classic, wonderful comic strip, Calvin and Hobbes, using a Markov chain process and a few hundred lines of Perl code.
It’s a fun, odd machine to just play around with, but if you’re interested in how it works, I’ll detail that below, and include some thoughts on C&H itself and why I built this thing.
(Update: if you’d like to help get the rest of the C&H transcripts neatened up, see here.)
People who know me won’t be surprised that I’m messing around with Markov chains; it’s one of my favorite little intersections of math and linguistic/artistic weirdness, a fairly simple way of analyzing the frequencies of events (like the order in which words appear in a bunch of written text) in order to produce new, novel, semi-coherent output. I’ve built a lot of little Markov-related things over the years.
And some folks who don’t know me at all may find this specific Markov-plus-comics idea familiar anyway because of an old project of mine, off which this new one is based: Garkov, a random Garfield strip generator I wrote several years ago. Calvin and Markov is the result of fits-and-starts cleanup work I’ve done on that original code over the years; at its heart it does just what Garkov does, but does it in a somewhat less stupid way on a couple fronts.
Okay, but how?
There’s a few moving parts to C&M:
1. The Markov chain code
This is a custom implementation of a Markov chain process that I wrote in Perl a few years back because (a) I’m finicky about how my Markoving works and (b) it seemed like a fun thing to write. It’s a content-neutral set of functions — nothing about it is specific to Calvin, or to comic strips. It’s just a bunch of code that will digest an arbitrary collection of text and then burp out new weird sentences when you ask it to.
I’ve made a few small improvements to this code as I’ve revisited it the last few days, but it was feature-complete already.
2. The comic strip art
There’s lots of places to find C&H strips on the internet, both on official comics-hosting sites and elsewhere. I found an archive of the series run sitting around somewhere or other, with all the daily strips rendered to 600 pixels wide, and have been using that.
I’ve selected a few dozen strips that I like, featuring characters with enough dialogue (except maybe Moe, he doesn’t talk much) that they have a variety of things to say, and blanked out the original dialogue in the art (and in some cases tweaked the word balloons to be a little more accommodating to my text insertion process).
It takes a minute or two to blank and neaten up each strip for this step, but there’s some additional work after that, setting up a strip definition file (see below) that adds a few more minutes to the process. Adding more strips to the project is doable in a piece-by-piece fashion and I’ll likely continue adding strip templates in the future to up the variety some more.
3. The dialogue from the comics
Calvin and Hobbes ran daily for about ten years, which, accounting for a couple of sabbaticals by Watterson, means there were on the order of 3,000 original strips published. That’s a lot of text to work with, which is great in theory, but newspaper comics didn’t come with convenient plaintext transcripts. I went into this project knowing I might have to do a lot of typing just to have material to feed to the Markov process. That’s what I did for Garkov, which is why the input corpus for Garkov is based on a few hundred strips rather than a much more significant chunk of the strip’s archives.
Luckily for me, someone, years ago, already decided to tackle this, transcribing with reasonably good accuracy the entire C&H archive, strip by strip. (This is apparently what powers Mike Yingling’s C&H search engine.)
Unluckily for me, they did so by treating each comic strip as a single, run-all-together line of dialogue text without any character breakouts. Which is fine if you’re just trying to search for a strip — if the word “Krakow” appears anywhere in the strip, that strip will be a match — but it’s a problem if you’re doing something character-specific like this project. I want Calvin to say Calvin stuff, Hobbes to say Hobbes stuff, and so on for Dad, Mom, Susie Derkins, etc.
And so I escaped the need to transcribe, but have still had to do a bunch of markup on that original transcription work, for each strip turning a line like this:
19861225 Psst! Are you awake? Is it Christmas? It is! It is! Let's go wake Mom and Dad and open all our loot! Since it's Christmas maybe we should let them sleep a little. That's long enough! Wake up! Wake up! It's Christmas!! Quarter to 6. He let us sleep in this year.
Into a set of lines like this:
C: Psst! Are you awake?
H: Is it Christmas? It is! It is!
C: Let's go wake Mom and Dad and open all our loot!
H: Since it's Christmas maybe we should let them sleep a little.
C: That's long enough! Wake up! Wake up! It's Christmas!!
D: Quarter to 6. He let us sleep in this year.
That lets me break out each character into a separate collection of lines, and create individual Markov table “brains” for use in strip generation. I also wrote a small script to do that sorting-into-separate-files bit so I don’t have to do the sorting and copying and pasting manually.
So far I’ve marked up the 1985 and 1986 strips, or about 14 months total. That adds up to about 1300 separate lines for Calvin (I peeked, it’s 1,268 lines containing 10,832 words total), a few hundred for Hobbes, 100+ each for Calvin’s mom and dad, and on the order of dozens for the other recurring characters. In a Markov project like this, more input text is generally better (you get more varied, weird, unexpected results), and so marking up more of the transcripts would be a good long-term goal, but it’s tedious and time-consuming; at a good clip, I can do a month’s worth of strips in about 15 minutes, but with what’s done so far that leaves something like 25-30 hours of additional work just to mark up the remaining bulk of transcript. I may keep chipping at it myself; I may try crowdsourcing some of that work if folks are interested in helping.
4. Strip definitions
Blanking out the original dialogue in word balloons gives me a canvas to work with, but my code still needs to know where to actually try and put new words. I ginned up a very simple definition file, describing a set of rectangular areas into which my code would paint dialogue; on each run, the program selects a strip template at random, reads in the actual image file (e.g. strip_02.gif) and then the definition file (strip_02.def), and uses both to do its work.
For example, this strip:
…has the following definition file, listing on the first line which characters appear in the strip (so the code can be appropriately parsimonious and not bother loading Markov data for any other characters) and then on each subsequent line a character who speaks (so the code knows whose “brain” to pull from) and the geometry of the rectangle representing their word balloon:
calvin 98 8 90 4
dad 183 7 45 3
calvin 252 25 90 5
calvin 375 10 140 5
dad 525 10 140 3
calvin 550 55 100 5
Those numbers represent, respectively, the x-position in pixels of the center of the word balloon, the y-position of the top, the width of the balloon in pixels, and the maximum number of lines of dialogue that can appear. That’s a bit of a hacky mess of a format, but it works well enough for these purposes and is reasonably simple for me to generate by hand; if I clean up and generalize the code in the future, I’ll revisit it a bit. (Likely plan: make the x and y coordinates both center values for the middle of the target rectangle, and replace the max-number-of-lines value with a raw pixel distance with the script doing the math at runtime to figure out how many lines that can accommodate.)
Generating a strip definition involves some eyeballing with a cursor tool in Photoshop Elements, and then a little bit of nudging (a few pixels left or right or up or down) when I look at the text being populated by the program in practice. A tool that actually translated drawn rectangles into numbers would speed up the process, but I didn’t feel like spending time trying to build that when I could just rough out some definitions by hand to get this initial pass working. Something for the future.
The lettering in comic strip — the actual text as written in the panels — is a key part of its visual identity, if not always the most obvious one. Garfield has a clean, very even balloon-ish lettering, like Comic Sans’ sober cousin; Mark Trail has a sturdy feel with bold verticals canted to the right; Zippy the Pinhead has a loose, scrawled-in-a-notebook lilt that matches its surreal tone.
Change the lettering, and a comic just won’t look like itself.
And Bill Watterson’s lettering is as central to the look of Calvin and Hobbes as almost any comic I can think of; his narrow, unstuffy left-leaning capitals are just how C&H looks, an integral part of not just the meaning but the feel of the strip, even before you take into account those panels where he gets particularly expressive with larger text, alternate lettering styles, sound effects and shouted words and so on.
Truly replicating expressive hand-lettered text automatically is a difficult job and well out of scope of a project like this, but I was happy to see that someone had created a basic font based on Watterson’s lettering, and shared it on Deviant Art. I’ve used that for the text of the strip, to reasonably good effect; my auto-generated text is mechanical and inorganic and compared to the real deal, and cramped and often inelegantly placed within balloons on account of the lack of artistic vision on my Markov code’s part, but it at least doesn’t immediately scream NOT BILL’S LETTERING the way subbing in some generic “comic” typeface would have.
For the title of the strip, I was able to find another font based on the familiar sticks-and-angles style of Calvin’s own handwriting that folks mostly likely generally associate with the strip.
Aside from the Markov code responsible for the text generation, my Perl script does some basic stuff to wrangle all the rest of the above, most of which isn’t really interesting. But the actual pasting together of an image is a pretty key bit, and that’s something I didn’t want to have to figure out from scratch.
To that end, I used a software library called ImageMagick that handles image generation and manipulation, and which does the work of turning the strip templates and lettering font and generated text into a final, rendered image. (This is a big improvement over Garkov, which renders a strip as a bunch of individual CSS-positioned single letter images on top of a blank-ed out strip, which makes keeping or sharing an image unnecessarily difficult.)
ImageMagick is a fast, reasonably powerful, and a confusing goddam mass to work with. I heartily recommend it and suggest you stay the hell away. It’s that sort of library.
I’ve found myself reaching for other tools in the last few years; if I were starting on this project from scratch today, Perl and ImageMagick is probably not where I’d aim. But having the Garkov codebase to work with was such a head start on this that coming back to those and doing a little bit of angry wrestling was worth the pain.
Okay, but why?
How is easy; I lowered a shoulder and nerded on through it and here we are. Why is trickier. There’s a few different kinds of why.
Because it was (a very specific kind of) fun putting this together, revisiting and improving my Garkov code, getting the whole thing working as well as I could. I really liked making Garkov back in the day, but I also burnt out on it around the time I put it out in the world, partly just because of all the tricky bits I had to sort through and try (and in some cases fail) to find solutions to to get it up and running.
Giving this idea another shot years later with everything I’d learned the first time driving me forward more quickly has been satisfying. I may take this newer, cleaner approach and apply it to a Garkov 2.0; I may throw it at some other comics; I may try to get it into other folks’ hands so ten thousand Markoving comic resynthesis projects can bloom.
Why Calvin and Hobbes?
Because I like C&H. Because other folks like it. Because it’s recognizable, and familiar, and the familiarity of the original lends a kind of weird suspension of disbelief to the broken, altered output of this kind of transmogrification process—if a thing looks enough like the real thing, we try to treat it like the real thing a little longer, give it the benefit of the doubt even as we know we should be doubting it. No one will really be fooled by Calvin and Markov, but all of us who’ve read thousands of the originals are wired to sort of give it credit long enough to produce a double-take, which is great.
Why treat C&H so weirdly?
One thing I’ve thought about while working on this—and I’ve heard it from at least one friend I showed the work in progress too as well—is how different Calvin and Hobbes is, as a cultural property, from the previous choice of Garfield. They’re both totemic, instantly recognizable comic strips, but that’s about the end of the similarities; C&H is loved for its doting, dynamic inkwork and artful writing and characterization, while Garfield is generally derided for its predictability, minimalist and samey art, and overall cash-in, sell-out, factory-produced sterility.
And so building Garkov, a machine that swallows up Garfield strips and spits out something dada and broken and absurd, seems like sort of a gimme. Of course people should fuck with Garfield. What else is it good for? I hate Mondays. Etc. It is, however justly or not, an easy target. (And I was not by far the first or the last to futz around with Garfield as a template for recontextualized weirdness; see the links at the bottom of the Garkov page for many others.)
Whereas C&H is a strip people hold up high as more or less the zenith of the modern newspaper comic strip, a piece of work that was so consistently beautiful and smart and heartfelt and uncompromising that nothing on the page could compete with it during its ten year run, and nothing has been be able to replace it in the years since. C&H was funny, but it wasn’t a joke; as mainstream pop cultural artifacts go, it’s pretty unfuckwithable.
You mess with Garfield, no one says How Dare You. Calvin and Hobbes, though…
So I’ve wondered as I built this how people would feel about it. Not so much that I expect condemnation—weird for weird’s sake gets by okay on the internet and I doubt anyone will get the mistaken impression that I mean any harm here—but really just how they’ll feel about the oddball output of this given their likely more fond releationship with the source material than in the case of Garkov.
Take a well-written, well-remembered comic strip and render it incoherent, and…and then what? And why?
I didn’t really know what I was going to get when I started. I wasn’t sure if I was going to get anything, honestly, other than new, bad Calvin and Hobbes strips. But I have seen some stuff in the output as I’ve developed this that I genuinely like.
And mostly what that is is this: Calvin as an actual, deeply weird little kid. Not the apt, smartly-written, nail-it-in-four-panels Calvin of Watterson’s work, the kid who we understand to be a kid despite his tremendous vocabulary and delightful, imaginary-or-is-he tiger friend, but a real scatterbrained oddball, the unvarnished stream-of-consciousness pile of developing brain cells that parents and teachers end up dealing with.
The little kid who changes the subject every five seconds. The little kid who says bizarre, contextless things, not as a punchline to a three-panel setup with a beautifully drawn alligator but just actually genuinely out of nowhere. Here’s a Calvin who confuses us, the readers, just as much as he does the adults around him in Watterson’s final-panel reveals.
Not Calvin the apposite, but Calvin the apropos-of-nothing. A Calvin whose head we don’t get to see inside of, a Calvin who we can’t keep up with.
It’s a neat thing, and a plenty satisfying outcome of these last few days of work. I love when something like this can surprise me.