Developer Journal, Grace Andrews
Today celebrates—for the handful of people aware of her—the 153rd birthday of Grace Andrews, one of the first prominent female mathematicians in the United States.
I assure you that I didn’t do anything that remotely measures up to the work that Andrews did, though this week has some twists that I doubt anybody expected…
Toasted Oats and Banana
For anybody who needs a quick breakfast-like recipe that I don’t imagine that you’d find anywhere else, I threw this together during the week and enjoyed it.
I have to admit to having a soft spot for rolled oats. I doubt that I’ve ever boiled them into that cardboard porridge, but they grind up to a flour to thicken dishes or make (mediocre, so far) oat milk, and you can’t make a decent crumb topping—for an apple pie, for example—without them, not to mention pumpkin-cranberry cookies. But I really like to toast the oats in a pan and add things; think “granola, but (mostly) savory.” And this week, a miscommunication on a delivery website also landed me three bunches of bananas, for the price of the three single bananas that I thought that I ordered, so guess what those things added to the oats might have included…
The recipe doesn’t have many moving pieces: Heat a pan over medium heat with a tablespoon or two of oil. When it comes up to temperature—I target 325° F with an infrared thermometer, but “you can see the oil shimmering” or “wisps of smoke” games that you see from TV chefs work fine, too, and if all else fails, drop a single oat in to see if it sizzles—add a handful (an eighth of a cup, or so) of rolled oats to the pan. Chop up the banana, and add it. I added sunflower seeds on one day, and chopped walnuts on another, too. Cinnamon also works.
Cover the pan and lower the heat to low, and stir occasionally, but leave it on the heat to heat everything through. Let’s see, can I get a picture that doesn’t make me look thoroughly incompetent?
It looks a bit like sludge, but such is life, sometimes. I served mine with cottage cheese and some blackberries, since I had both on hand. Wheat germ felt like too much when I tried it.
I haven’t tried doing so, but the recipe probably scales well, as long as you give the oats enough space and time to start to brown. If you don’t brown the oats, then they just absorb steam from the cooking bananas and turn into the flavorless paste that you probably already know.
Don’t expect a release for this work, because I only tinkered with it to work through a choppy memory of something that has nagged at me for a few weeks—specifically, I wrote and revised the code to bring my memory of a place into better focus—but I recently had a yearning to create some experimental interactive fiction work, partly inspired by playing such a game for this Saturday’s Free Culture Book Club. Since I parted ways with the surviving interactive fiction community more than twenty years ago, this seemed like a good time to finally acquaint myself with Inform 7, a version of the simple object-oriented language that I used during and after college on a couple of small and uninteresting games.
And…I don’t like it. 👎
The designers created Inform 7 with the intent of having game developers work in natural language. And while that sounds like a fine idea, especially for programmers who often want to create works of (interactive) literature, in practice, natural language can’t express ideas with the complexity of a good programming language. Or, rather, natural language can express ideas well, but those ideas don’t fall into the category of ideas that computers care about. We can talk about morality or taste in English far more efficiently than we could describe it in C, but geography, sequences, and rules come more easily as terse shorthand, since we don’t have any nuance to convey.
As a result, you end up writing in stilted English that feels tedious to write and difficult to read.
Lobby is a room. “You stand in an open area with blah, blah, blah.”
There is a box here. The box is a container. “The cardboard box here has the faded logo of a big-box retailer.”
A brochure is in the box. The description of the brochure is “This should say something useful, but fails to do so.”
That seems reasonable for a single room with a couple of objects, yes, but now think about scaling this up to many locations, each with multiple objects in them, and it quickly becomes a morass of repetition and passive voices, even before anything in the environment can react to the player. I also find it difficult to spot where printed text begins and code starts. By contrast, the equivalent code when I worked with Inform dispensed with the useless verbs and prepositions other than “in;” I skim that code to learn what I need about a game, whereas the above requires reading everything through.
Of course, the designers realize that. Inform 7 compilers translate the code to Inform 6, the version that looks more like Ruby or Python, but I believe came earlier, though I won’t check that belief. If you look at any substantial example in the language, you’ll find at least one section just written in the older versions of the language, for convenience.
I’ll keep fiddling with the modern version. The people contributing to the design have experience that I don’t, after all; I certainly never released or even finished a game. But it seems so jarring to take such a step back, as if people flock to COBOL for its elegant syntax, instead of hiding from it…
This new phase of the game turned into a mess fairly quickly.
At some point in the near future, the snakes and ladders will have need to occasionally shift, so I’ve spent most of my time on Salavi rethinking various aspects of the arrows. I’d like to point people to two specific issues, for anybody else using the LeaderLine library.
First, the line objects don’t contain direct information on the HTML objects where the line begins and ends, so I need a supplemental data structure to identify those. If you don’t expect to give the arrows “semantic meaning,” then you probably don’t care about this, but you might.
Then, assigning the
.end members of the object doesn’t accomplish anything, even though the documentation insists that it works. Rather, the code needs to call
end set in that options object, by creating a new end-point.
The changes need more testing, but I believe that makes the arrow-modification code mostly work as it needs to work.
If anybody noticed that the blog search broke, you can now consider it un-broken.
For those of you who didn’t notice, the “tool tip”—HTML’s
title text, if you want to nitpick, but I started in desktop application programming—constantly came up empty, rather than using the summary of the post as you might expect.
I adjusted the search code to look for the summary field, rather than the description field. I suppose that I could have renamed the description to summary, instead, but I could test this approach with much less work.
I needed to bump library versions for Bicker.
Now that Salavi has a way to “bump” the snakes and ladders around, that needs testing to make sure that I didn’t overlook anything. Then, I need to introduce the force that does that work.
And while I won’t publish my large interactive fiction project, maybe I’ll come up with something small as an example, since I know that many people get excited about these evolutions of older technologies.
Credits: The header image is Culture, glasses, jesting, stained glass Fortepan 15581 by Fortepan, made available under the terms of the Creative Commons Attribution Share-Alike 3.0 Unported license.
By commenting, you agree to follow the blog's Code of Conduct and that your comment is released under the same license as the rest of the blog.Tags: programming project devjournal recipe