Librarian of Alexandria

A friend of mine who does some streaming has recently been streaming his progress following a roguelike-making tutorial, and I've been backseat programming as he does so. This has resulted in a couple of things so far.

For one, it really struck me how repetitive definitions of specs systems can be. Accordingly, I've been working on a small macro that can make those less tedious by cutting down on repetitive boilerplate: for reasons of both typedness and efficiency, the specs implementation of systems requires some modest verbosity (like plumbing through lifetime parameters and lining up SystemData declarations with their uses) that, with the help of a little bit of convention, can be cut down a lot.

This in turn has been making me ruminate—albeit idly, with no specific work yet—on the idea of a programming language built from the ground-up around entity-component systems, a topic I have considered before but still have not done anything with. If nothing else, I'm going to write a series of notes and thoughts on what an entity-component language designed for immediate practical use might look like: that is to say, how I can imagine building such a language so that it can be used in practical projects despite not having a large library ecosystem or user community.

In a different vein, I also had previously been poking at the game programming framework ggez, which (despite the off-putting name) is a very well-designed and thoughtful framework for building games quickly and easily. I like a lot of the ggez abstractions and it's been very pleasant to get up and running. I've consequently decided to follow the same roguelike tutorial, but instead of using the roguelike library the tutorial uses (RLTK, by the same author as the tutorial, and a port of the author's earlier C++ library of the same name) I'm working on my own, a relatively thin and heavily subject-to-change layer over ggez and specs, which I'm currently calling carpet on the grounds that carpets are ruglike. I'm not terribly far in, but after my work today, I'm comfortable that I'm not starting off on completely the wrong foot, so I am putting the work-in-progress repo on my personal gogs instance.

Finally (and annoyingly pedantically, I know) I had a conversation with my aforementioned friend about how I would have structured parts of the code produced by the tutorial differently—in particular, I felt the tutorial author could have used more systems, both in the sense of splitting larger systems into more single-purpose ones and in the sense of taking code that was not expressed as a system at all and putting it into one. In order to express more clearly what I meant, I decided to put my money where my mouth was and do a refactor of one specific chapter of the tutorial to explain where my design sense would have pushed it; right now, this is also just on my personal gogs instance without any particular commenting or guide as to what I did, but I might write another blog post that talks about the process just to give a better guide to my thought processes.

I'll try to jot notes as I do more of the work around this area, 'cause I think it'd be fruitful even if some of these avenues don't go anywhere. Negative results are results too, after all!

For my entire adult life—ever since I could write a blog engine myself—I've been using self-written blogging software. I gradually went through languages (Python, Haskell, Scheme) and frameworks (, flask, snap, spock...) but always relying on homemade tools. If I had infinite time, I still would! I love the hand-rolled parts of the web, and want to be part of it if I can.

But recently I've also been wanting to switch to using ActivityPub more and more: I've been using my Mastodon account significantly more often than my Twitter account and I've also been thinking I should get a PixelFed account as well.

And of course, using non-self-hosted blogging software is completely out of the question for me! I very much want to own my own data and my own platforms, if I can.

Between all this, I decided to switch to using WriteFreely, an ActivityPub-enabled (and therefore Mastodon-compatible) blogging platform that's self-hosted. I'm still getting used to it! I might have enabled it poorly and I might end up forking it to add some features I already miss, even if those features are just footnotes in Markdown, but I think it's an experiment worth trying!

Ižtreyan meals are communal, taken at large, circular tables, ornately inlaid with brightly colored tiles or stone or metal fragments, that serve as the centerpieces of ižtreyan homes and feature prominently in the back-rooms of ižtreyan workplaces. An ižtreyan meal will involve a handful of main dishes and several smaller side dishes that are shared by everyone, heaped onto individual plates or bowls.

Certain dishes show up as sides at every meal, ubiquitous small plates called talots: these are considered obligatory to the degree that meal size and formality is characterized by the number of talotsa present, with a two-talotsa meal being considered the bare minimum for any meal, while a ten-talotsa meal is a veritable feast. (An ižtrey would never serve a meal with only one talots: in fact, the idiom “a one-talots meal” is used among ižtreya to connote a thing that is completely and unacceptably lacking or unfinished.)

A characteristic talots, known well even outside ižtreyan cities, is rask, which is a variety of tiny, walnut-sized bread, baked quickly in large quantities and served in large bowls with a dusting of salt, usually made of a combination of wheat and buckwheat flour and—less often—chopped nuts. Others include tsalšak, or wafers of dried cucumber softened and served in a tangy yoghurt-based sauce, reželdo, or chopped salted sardines or herring, and gelbrekhi, or fried vegetables in a buckwheat-honey batter.

Among the small bites are the large dishes. A meal with one or two people will likely have one large dish, but when eating as a family, a community, or a workplace, people will often serve several to even dozens of central dishes. Ižtreyan meals often include meats in flavorful sauces and various baked goods. Centerpiece dishes like this include:

  • žyotsuldo: a roasted savory pie with a buckwheat crust, usually sprinkled with some small pieces cheese shortly before being removed from the oven. A žyotsuldo can be filled with just about anything, but popular choices include beets, marinated beef, or chopped mushrooms. (It's rather uncommon for ižtreyan cities to have stalls for street food or other casual-and-easy-to-acquire foods—it would run contrary to the camaraderie of a proper five-talotsa meal, an ižtrey might tell you!—but when such stalls exist, they often sell an easy-to-carry variation on žyotsuldo.)
  • yadash, a roasted, creamed soup of a central flavor (often beets, but sometimes peppers or rhubarb) and a backing, milder flavor (potatoes or yams): this is served with a drizzle of honey and a thick dusting of black pepper, and sometimes a buckwheat flatbread called kyaczut.
  • lyubešku ikhab (or other lyubešk dishes): ikhab is a generic word for red meat, and lyubešk is a style of cooking that involves a slow braise in wine with dried berries and raw grain kernels, usually barley. Over the course of the braise, the grains and berries puff up with the wine and meat juices, and the meat takes on a characteristic pink color. It's possible to lyubešk-cook poultry (lyubešk trabšo) or some vegetables like thicker, meatier mushrooms (lyubešk rabsin), but the lyubešk style is usually associated with red meats.

Tir-Bhahat is a collection of fragments of fantastic world-building. You can read more about it here.

#fiction #tirbhahat

At first glance, the queder's conventions for naming are remarkably simpler than most of the other peoples. In general, a quede will have two names: in order, a given name chosen by the parents at birth, and a surname taken from the surname of one of their parents. Which parent's surname is taken will vary based on local custom: in some places, a quede will take the surname of a parent of the same gender; in another, the surname of a parent of a different gender; yet in others, the surname of the parent in whose ancestral home they live; yet in others, the oldest of the parents. The queder rarely change their names, and certainly don't bother changing their names for marriage (although it's not unheard of for a quede to move to another village and adopt a new name to accompany their new life!)

Sadly, the story of quede names is nonetheless complicated by the fact that they have, when compared to most folk, remarkably few given names: the most common two dozen names account for the vast majority of queder. It's not uncommon to walk into a place of work and find four laborers there all named Étun. Indeed, shared names are so common that some parents give the same name to multiple children. The river-town of Elascín was home to a locally famous quede, a book-binder named Pégno Telbasci, who had five sons—all five of them also named Pégno Telbasci!

The queder deal with this remarkable state of affairs by compensating with a truly stunning number of ways of building nick-names. In our hypothetical work-place featuring four queder named Étun, all of them likely have their names registered in local ledgers as Étun but nonetheless are known by some specific variation on the name. There are a number of ways of constructing such variations:

  • Every name has its short forms, usually created by dropping the final syllable: thus Étun might be called Étt, Yanna called Yan, a Pégno called Pénn.
  • Among those names which are longer than two syllables, one could drop the final syllable (as in Adrisc for Adrisci or Demel for Demela), but might also drop the middle vowel (as in Asci or Demma) or sometimes even the initial syllable (as in Drisci or Mela.)
  • Adjectives, especially simple adjectives like liga 'little', adora 'big', cilla 'tall', isca 'fat', or reggia 'cheerful', can be combined with the name: a quede named Adrisci may be called Liga-Adrisci or Isca-Adrisci to distinguish her from the other Adriscis. Many of these adjectives no longer carry a strong meaning when used to create nicknames, and certainly none of these are considered negative in any particular way! (That's not to say no quede would refer to another via a pejorative name, but the queder consider it remarkably bad luck to coin a negative nickname that gains any kind of usage!)
  • Various endings can be used to create stock diminutives or pet names, often replacing a final consonant if it exists: -ye, -tta, and -pan are the most common, to the degree than Étuye is sometimes used as a generic name for a given unspecified quede! Still others exist: -en, -an, -gni, -ra, and -qua are all well-attested, and a dozen others might be gathered in any given quede settlement.
  • Some endings, over time, are even added on top of yet other endings: you're as likely to meet an Étuyetta as you are an Étuttaye.
  • Longer compounds are somewhat less common, but by no means unheard of, especially those made with ta 'of'. They may reference an occupation, as in Yanna-ta-Rescar “Yanna-of-Arms” or Yanna-ta-Gieso “Yanna-of-Fish”, or they may reference a place of birth or living, as in Yanna-ta-Ciama “Yanna-of-the-Woods” or Yanna-ta-Dar “Yanna-of-the-Bay”. These usually appear with a shortened form of the name, as well: indeed, Pénn-ta-Dar is a figure of local legend among the quede towns of the tallgrass plains in the north.

Consequently, despite a wealth of Étuns and Pegnos and Yannas and Adriscis in the official ledgers, a given quede might not know anyone in their home-town by the same name: one of them may be Liga-Étun, another Étunni, another Étuye, and another Étt-ta-Quami, or one of any of dozens of other variations, and no-one would dream of mistaking one Étun for another.

Tir-Bhahat is a collection of fragments of fantastic world-building. You can read more about it here.

#fiction #tirbhahat

When you ask someone who has only ever heard second-hand stories of the rešêk about their cities, they might begin by telling you of their reputed skill with stone- and metal-working, of the deep mines of Thabatnûk or the shimmering canals of liquid silver in the workshops of Rustân Phebašerga Kafthesdut the God-Smith. When you ask someone who has spent time with the rešek, however, they will often talk first about the food. The rešêk are amazing farmers, capable of growing hearty vegetables and succulent fruits even in rocky, sandy soil, and they are equally capable of turning those plants into spectacular, mouth-watering dishes.

Rešk food is heavy in vegetables and grains, but also in seafood: the latter may come as a surprise to many who have not visited the subterranean or semi-subterranean reški cities, but many swimming creatures adapt readily to subterranean life and then can be farmed in controlled underground lakes and canals. On the other hand, larger animals like cattle or swine are hard to raise in most of the areas where reški live, and such meats are a rare treat for the rešek. Beef and pork, when they are available, are often preserved through drying or curing and then used in small portions. Such meats rarely serve as a centerpiece dish on their own, and when they do, they are often used in place of goat, a meat which is easier to come by in the rugged environments where the reški often life.

Reški cuisine involves many preservation strategies, including drying, fermenting, and pickling. Many reški meals involve jams and jellies both savory and sweet, pickled pieces of vegetables, fruits, and meats, and pungent fermented mixtures of vegetables and fruits. The most famous reški preserve is called thûrbuk: a mashed and fermented paste made from mushrooms, peppers, and various spices. Thûrbuk is by far the most common condiment in reški meals, and you're likely to see a jar of it on almost every reški table. The reški predilection for fermentation extends to their beverages, which include both high-alcohol distillates like nakhat—-a grain alcohol aged in hand-hewn granite vessels, sometimes referred to as 'stone-aged whiskey' by other peoples—-as well as everyday drinks like the fizzy fermented fruit juices called suthur, which are also sometimes colloquially called 'small wines' (despite the fact that they are weak enough that they're effectively non-alcoholic!)

Reški cuisine also prominently features a thick, paddle-shaped variety of bread called kegran, which is baked in hot stone ovens and has a crusty exterior with a soft, airy interior. A loaf of kegran is all but guaranteed at almost every meal, regardless of time or setting. Its shape is circular but with a long protrusion called the ašbetik ('pan-handle') which is sometimes used for handling the loaf itself, as it cooks more qiuckly than the rest of the loaf and is usually positioned pointing towards the baker as the loaf bakes. In some places, a rešk will avoid eating this handle-shaped part: as the ašbetik ends up crunchier than the rest of the loaf, it was seen as less desirable, and only those who could not afford a proper meal would stoop to eating it. Despite this cultural association, some reški still prize the ašbetik for its crunchy savoriness, especially when paired with heaping spoonfuls of thûrbuk.

Some other common reški dishes include:

  • Hethun, which is a salty broth made by a week-long boiling of certain kinds of stones with dustings of moss, which together impart a mineral flavor and a mild saltiness to the resulting liquid. A bottle of hethun is often kept on-hand as a refreshing drink during hard labor, but it also serves as a base for many other dishes.
  • Bâkutand, which is a salad of spiced fermented root vegetables, usually potatoes and radishes, served cold with a drizzle of nut oil.
  • Dushâmpek, which is animal skin (usually chicken or salmon) wrapped around sticks of cucumber (or, more rarely, carrot), fried, and served with a generous drizzle of thûrbuk. You will find at least one seller of dushâmpek at almost every marketplace, if not two or three.
  • Uphasdît, which is marinated sliced fish (often trout, but sometimes salmon) and mushrooms, left overnight with chilis and spices and then sautéed quickly in a hot pan, usually eaten on top of torn chunks of a loaf of kegran.

Tir-Bhahat is a collection of fragments of fantastic world-building. You can read more about it here.

#fiction #tirbhahat

Something I've considered writing for a very long time is a system-agnostic, largely setting-agnostic tabletop sourcebook that's just descriptions of fantastic cultures and peoples, intended as fragments that could inspire new, interesting worlds instead of prescribing a specific concrete world. I've had scattered notes on this for a while, but I've now decided to start putting pieces of it out into the world in the form of blog posts instead of waiting until it's “complete”. These posts will all be small pieces of pure fantasy worldbuilding, not tied to any particular story or game, describing some small part of the cultures of fantastic peoples in a fantastic world. My current working title for this project is Tir-Bhahat, so these posts can be all read under the #tir-bhahat tag.

I also want to give the story of why I was inspired to do this, because this is a very old idea of mine: its origins come from my high school days, and arose from the collision of three things:

  • An awkward, poorly-planned, terribly-run Dungeons and Dragons 3E campaign I put together for my high school friends
  • My budding interest in natural languages and high-school habit of buying cheap grammars and phrasebooks for languages I had no intention of ever speaking fluently
  • My lifelong penchant for worldbuilding and constructing languages

One thing I discovered as I was reading the Dungeons and Dragons player's handbook was that I was really dissatisfied with fantasy naming. The Dungeons and Dragons books had a set of suggested names for each kind of fantastic humanoid—-elves, dwarves, halflings, and so forth—-and these names felt by and large uninterestingly English-like in phonology. They differed from each other mostly in terms of consonant distribution: that is to say, a Dwarvish name would have more k's and g's, while an Elvish one would have more l's and q's, but you'd rarely find other major differences in terms of the kinds of consonants and vowels that would show up, or overall shape of the words. And beyond that, while you could usually distinguish an Elvish name from a Dwarvish one—-possibly because they were all Tolkien pastiche, anyway—-you'd have a much harder time distinguishing a Gnomish name from a Halfling name, because they all read so similarly.

I immediately set out to rectify this. I sat down with a set of natural-language inspirations for each fantasy language, and then came up with phonologies and tendences, and then wrote programs so that I could generate names that adhered to those phonologies. My intention was that a player who had played in my games for long enough could, from just the impression and sound of a name, tell what sort of person it belonged to, in the same way that an English-speaker who speaks no other languages can nonetheless often tell a German name from a Hindi name from a Mandarin name.

Many of these phonologies were based loosely on real languages, often chosen somewhat arbitrarily. For example, the language of the gnomes, I decided, had a deeply Slavic flavor to it, resulting in Gnomish names like Ussybneča Kadrey Ažbardzo, while the language of the halflings was loosely based on Romance languages, resulting in Halfling names like Pégno Telbasci. Importantly to me, none of these efforts were intended to be constructed languages like Tolkien's Elvish languages: they didn't feature grammars or vocabularies, but instead were just guidelines about how words should look and sound. I did eventually write up phonologies for every major language mentioned in the Dungeons and Dragons books I had at the time.

Over time, though, the scope of this project got larger as I realized my dissatisfaction about the sounds of fantasy languages extended to other aspects of fantasy cultures such as food. What do fantasy peoples eat? Many of those sourcebooks would tell you that Elves eat fruits and probably a nourishing cracker-like bread, while dwarves eat mushrooms and drink ale, and halflings eat lots of bread. But when you look at real-world cultures, you find cuisines which are much deeper and more varied. You might find a dish of noodles and mushrooms in Italian cuisine as well as in Chinese cuisine, but even then, those dishes will surface with wildly different composition, flavor, and focus. Compared to the richness and variety of foods that appear in the real world, the fantasy standby of “elves eat fruits” feels remarkably simplistic and boring.

Since then, this idea has been on my mind sporadically, so I've accumulated a lot of notes on possibilities for fantastic languages and names and foods and clothing and family structure and cities. However, despite having considered doing so on a number of occasions, I've never taken all these notes—-some of the oldest dating back more than a decade—-and turned them into a cohesive whole.

Consequently, my plan is now to start polishing them piece-by-piece, with no particular focus or order, and start posting these scattered notes as blog posts instead. The current drafts are no longer deeply tied to Dungeons and Dragons, or any specific fantasy world. They make some cursory efforts to be compatible with existing fantasy cliché—-stipulating that dwarves live underground, for example—-but also try to avoid the worst and most problematic parts of fantasy cliché, such as the concept of intelligent, sentient beings who are “always chaotic evil”. These posts are exercises in world-building for its own sake, vignettes of fantastic cultures that ideally should be simultaneously grounded and yet fantastic.

#fiction #tirbhahat

I recently finished reading A Burglar's Guide to the City by Geoff Manaugh, of BLDGBLOG fame. In general, I liked it: it was a fun and interesting read on a topic that I love, because I am a huge fan of heists and criminal masterminds and whatnot. The thematic center of the book is the idea that the way burglars use architecture can reveal interesting things about architecture and its use, and it explores a lot of related topics.

I think the book suffered in one way, and the way that it suffered is kind of interesting to me: until about halfway through the book, I felt kind of lukewarm about it, and I had some time to think about it before I picked the book up again. My knee-jerk impression was that it was meandering, but on reflection, that didn't make sense, because I like it when books meander. It was meandering in a way that I didn't care for, which is not a common phenomenon.

Manaugh is a talented writer. Maybe one who could benefit from a modicum of restraint—-he will occasionally indulge in some florid phrasing in ways that distract from the topic instead of serving it—-but that's rare enough, and in general he's good at conveying the detached, speculative, otherworldly sense of place that's pervasive in the kinds of things he writes about. I love his writing on BLDGBLOG, where he drifts back and forth between quotation-heavy journalistic prose and adjective-heavy narrative prose, setting up situations and then exploring them in interesting ways.

This prose is still present in the Burglar's Guide, but that was, in its own way, part of the problem. When I came to the book, I came to it as an argument: it had a central thesis, which is explicitly brought up and contrasted with competing theses at times, and a structure, chapter headings with topics and progressions. Except that none of those really exist: the thesis is used more thematically than concretely, the chapter headings and topics are only loosely correlated with their actual contents—-with the exception of the chapter on burglary tools, most chapters consist of chunks that could have been rearranged and renamed with little to no effect on the book—-and the thesis disappears regularly and reappears whenever a new detail needs to get pinned back to the central thread.

After I had thought about these things, I continued the book but consciously tried to read it ignoring chapter breaks, headings, and ignoring the macro-scale structure, and it became a much better book. I started trying to trying to read it not as a book developing a theme, but as a collection of blog posts under a slightly idiosyncratic and oddly specific topic, a bunch of posts all tagged as Architecture, True Crime. In that frame, it was much more successful.

I think that the Burglar's Guide really should have been presented in this way from the beginning: the chapter structure should have been reworked and tossed, and the sections should have either been headed with their topic or thrown in as chunks in a larger soup of a book, probably with an introduction and conclusion that talk about the larger themes. The macro-scale structure of the book as it exists is largely a fiction, and trying to read the book as adhering to that structure produces a (to me) slightly annoying mismatch when compared to the text itself. A book that didn't make any pretense of having structure would have been, I think, more successful.

That said, the book is otherwise very entertaining, and I would in general recommend it. I wanted to explore this idea as a good but purely textual example of a work being at odds with its medium, even when 'medium' here is defined narrowly: this is a good book that, interestingly, would have shined even more had it been a somewhat different kind of book.