Log In?


Published at 12:34:56-0700 Updated

This is my idea incubator. It's easy to build up a body of work if you keep a collection of limbs.

Gift Routine

2021-03-17T14:11:44-0700 updated 2020-12-26T12:30:42-0800

Suppose I want to give a gift to person P. I'd like to be able to call up the history of my interactions with P, in as many channels as possible. I'd also like to be simultaneously call up my current finances, including an assessment of whether I have any store-specific credits which would suit their interests. (For instance, I've got $50 of credit for Lululemon fitness wear, which I'm never going to use on myself, but which I'd want the computer to show me when planning a gift for a girlfriend or female friend.)

2021-03-17T14:11:44-0700 I don't really need the ability to analyze store specific shopping credits and my budget while planning gifts, but I am building my own contacts database.

Poetic Meter Analyzer


Does this exist?

Type in words. For each line you type, this program will do its best to categorize the line by its pattern of stressed and unstressed syllables. It does this by retrieving the stress pattern or patterns for each word from an ordinary dictionary (maybe several dictionaries), and comparing all possible paths through the line to determine, for words with multiple possible stress patterns, which is most likely to be right. Or, which would lead to what patterns.

[Aside: run spell checkr before doing analysis.]

Oh, typing is getting me nowhere. Examles of desired behavior will do better.

[2020-12-26 FYI I've got rsi. hands don't do perfectly with typing anymore; please gracefully ignore typos.]

Let s mean weak. Let S mean strong.

Ex1 sSsSsSsSsS -> Iambic Pentameter (I5)
Ex2 SssSsSsSsS -> I5 with inversion at 1, notated ":invert [1]"
Ex3 SsSsSsSsSs -> Trochaic Pentameter (T5)

The program might assign a low probability to Ex2 actually being "anapestic something-ameter with very broken anapests and a leading strong syllable", as long as it still judges "I5 with inversion 1" most likely.

Mesuring whether something is I5 or near it can be implemented in terms of penalties for deviation from the expected form, but no idea yet what to do about meter that doesn't fit a strict pattern, or which is made up of multiple kinds of foot.


Beyond meter checkeres we can also have structure checkrs.

Sir Fedivere

I'd watch a food review show where the host apes Bedivere as portrayed in Monty Python and the Holy Grail, making up ludicrous explanations for everything and having to open and close the little door on his helmet for each bite.

It would be called "Sir Fedivere" -- or perhaps, if the other knights got involved, "The Bites of the Round Table."

An Integer that Only Decreases

Is it correct to say that a type system needs to implement dependent types if it is to allow the expression of an integer that can only decrease?

The goal would be to define a type R Integer such that a function R Integer -> R Integer would only compile if the Integer inside the output value was equal or less to the one inside the input.


They say "truckie," not "trucker," as seen in Sydney Tunnels Have Giant Water Holograms.



Ubasute (姥捨て, "abandoning an old woman", also called obasute and sometimes oyasute 親捨て "abandoning a parent") is the rare, old[1] practice of senicide in Japan, whereby an infirm or elderly relative was carried to a mountain, or some other remote, desolate place, and left there to die.[2] According to the Kodansha Illustrated Encyclopedia of Japan, ubasute "is the subject of legend, but… does not seem ever to have been a common custom".[1]


Ha. I notice that "姥捨て" begins with kanji whch, when read in Mandarin, are homophonous to 老舍. The meaning is not similar in the first character ("lao" in the author's name means "forever, always, eternally") but it could be (as "lao" can, in sufficiently compressed contexts, directly indicate an old person). As for the second character, 捨, it's a variant of 舍; they have the same meaning of "giving up, relinquishing".

I am no help on the hiragana glyph which comes after the two kanji in "ubasute". my wild guess is that it's either verbing the noun "old woman/grandmother abandonment", or nouning the verb "to abandon an old woman/grandmother".

Dream of Dang Village

A parody mash-up/crossover for the ages: combine the American cartoon King of the Hill with Yan Lianke's tragic novel Dream of Ding Village.

Sexagenary Cycle Programming Library


Code for converting between Gregorian and Chinese year numbers already exists. Wikipedia highlights the current year on the sexegenary cycle list, and somebody programmed that. But, all the same, I can amuse myself by thinking about it.

Things to be defined would include:

Chinese Document Search


When I come across an unfamiliar phrase, especially one that's metaphorical, it's useful to be able to search text documents, on the web or elsewhere, for regular expressions matching that phrase.

I'd like to begin building my own repository of documents to run such searches against, as well as write a program to run them against websites like the Chinese Text Project, Gu Shi Wen ("Ancient Poetry and Literature"), Jukuu, and Zdic.

For a user interface, the ability to run searches comes first. Then, the ability to save information from a search into a memorization flashcard. Further improvements: the interrelated concepts of searching with (limited) regexps and other special operators (see ludwig.com); saving and re-running searches; saving (list (parameters) (API version)) to the user's local storage or offering to download it as a file... a way that produces premade regexps for different purposes, or the ability to save and re-run searches.

As for development techniques, this seems like a fit for a server application. I send it queries, it works, it sends back results. I could run the application on my local computer for my own purposes (a strategy of which I am growing fond), and providing the search tools to other people is as simple as running the app on my own VPS.

What I Use


Software, tools, and services. Search keyword: "uses this."

"Action" Drew Jackson Text Message Extraction


Items originating in messages to Drew, archived here:

Workout Weight Progression


Novice weightlifters are typically encouraged to use one weight until they can perform a certain number of reps, then go to the next-biggest weight and repeat. This straightforward approach, called linear progression, is the standard recommendation for those new to weight training.

I've noticed, however, that the total weight moved per set (which I'll call "poundage") in linear progression can vary dramatically between total pounds moved in a set, at weight W, of the maximum number of reps R, and a set of 1 or 2 reps at the next highest weight2. For example, 1x50 = 50 poundage, and 2x50 = 100 poundage: both of which are lower than 3x45 = 135 poundage. The linear progression can be shown by executing the following only-slightly-pseudocode, and if we graphed the poundage values in the result list, we'd see spikes up and down as the lifter moved from one 5-pound increment to the next:

    ((weights (range 45 50 ... 225))
    (reps '(1 2 3 4 5))
        (dolist (weight weights)
            (dolist (rep reps)
                (let ((poundage (* weight rep)))
                    (push poundage result))))

However, if we sort result (and add some extra code to match each poundage with its values for weight and rep), we would have a weight progression which is smoother than the linear approach. I don't know whether or not this smooth progression would actually be more efficient for a novice, since periodic resets to a lower poundage are valuable for sustained progress3.

Chinese Notes

Translation Interface

2019-11-20 updated 2020-10-01T00:05:02-0700

Two windows next to each other, one of which shows usage instances for the word under, or around, the cursor.

Part of the challenge of creating an interface to help with Chinese translation lies in defining the extent of a word. For example, when a verb and an object (e.g. 吃东西 ), is combined with a two-character complement4 (e.g. 起来), the result, 吃起东西来, does not contain "起来" as a substring, because two-character complements get split up to follow both verb and object. Any digital dictionary or reference system concerned with usage examples will have to account for this fact of Chinese grammar, and contain the knowledge that, despite the results of affixation, this can be considered an occurrence of the "起来" complement.

When [Linguary](/linguary) has evolved far enough for custom interfaces, I'll return to questions like these.

Syllables with Few Characters

2020-11-06T15:34:55-0800 [Moved to The Rarest Mandarin Syllables.]

Which Mandarin Romanization Notation Should I Use?


Here is the case for using gei3 instead of standard Pinyin gěi.



Decision: Standardize on gei3-type citations for source material. Can use scripts in the build process to automate find-replace for publishing. I don't care about academic or legal standards right now, and any Chinese linguistics writing I do will probably not be for laymen.

Terrible UI Design in the MacOS Chinese Input Method


MacOS Chinese input allows you to cycle through the tones with TAB. I just discovered this after years of (begrudgingly) using this input method. Harrumph! They could have put the tones on the number keys to kill two birds with one stone:

  1. Number -> tone is a straightforward, well-known mapping, so I wouldn't have had to discover this at random
  2. It would have forced them to find a smarter, more ergonomic way of letting me pick candidates, rather than having to lift my fingers from the letter keys to identify every single character I want to use.

Simple but Uncommon Chinese Characters

2019-11-14. Update 2020-07-16T18:58:31-0700.

There are Chinese characters which are structurally simple, but not in common use today.

A perfect example is 屾 shen1, a literary term which means "并列的两座山" ("two mountains side by side".) This is one of relatively few characters that is actually ideographic, i.e. has a shape depicting the real-world concept it represents. This is because 屾 shen1 is made up of two side-by-side copies of the character for mountain, 山 shan1. Two mountains side-by-side in the character; "two mountains side-by-side" for the meaning.

Below are other characters which have piqued my interest.

Notable Chinese Characters


Just a dumping ground for characters that are peculiar.

New Chinese Name


Taking notes on characters suitable for creating a new Chinese name. The one I have doesn't sound very Chinese, having been bestowed somewhat haphazardly by otherwise-excellent teachers of introductory Chinese.

Surname list with well over 250 entries, including two-character ones: https://www.diyifanwen.com/tool/baijiaxing/

Surname candidate syllables: [zhang zheng zhong zhai zhan jing]. Candidate characters:

"M"-initial candidate syllables: [ma man mang mai mu mi miao miu mao men meng mei]. Candidate characters:

"W"-initial candidate syllables: [wa wan wang wu wo wei weng]. Candidate characters:

What's Up With Gei

2020-02-24T11:29:29-0800 updated 2020-05-14T13:31:00-0700

Besides its verbal use, 给, with the reading gei3, is also (roughly speaking) "near-obligatory case marker for indirect object".

But 给 has at least one other use, as the example 把什么东西给烧了 demonstrates. The function of 给 here seems similar to the usage of 弄 and 搞 with complements like 对 and 好, e.g. 弄好/搞好 "improve; put right".

I think there may be other nuances related to animate nouns, too. I'll keep an eye out.

While translating "Iron Bull and Sick Duck", I found some examples of this phenomenon to copy into here. TODO.


Aha! The AllSet Chinese Grammar wiki contends that this is a passive construction. It all makes sense now. (Be warned that AllSet occasionally offers quite poor English translations, like these.)

Website Improvements

2020-02-04T17:36:44-0800 updated 2020-12-23T22:18:52-0800

Website "itches" I want to scratch.

Resources for Web Goblins

Web Goblins!

Videogame Idea


There are two modes to this game. Mode 1 is played in a 3rd-person or 1st-person perspective (I think 1st-person would be more satisfying.) On your turn, you swing your sword toward the enemy's body. The motion of the sword can be precisely controlled, as can the hit location; part of the game skill is hitting a "juicy" place on your enemy.

Mode 2 begins as your sword impacts the enemy. The game speed slows down, and a picture-in-picture appears, showing a magnified view of the part of the enemy that you hit. You guide the sword blade through the enemy body part, with the overall direction of your blade determined by the angle of your sword stroke and other such factors. Your time is limited by the size of the body part because your blade is passing through them (perhaps it might be possible for the blade to get stuck, ending your Mode 2 turn early.) You're trying to do something: either deal damage to the interior of the body part by destroying the "chunks" inside, or navigating the torturous path between the chunks in order to sever the body part. Dealing damage is easier, but it only weakens the limb instead of severing it.

Different parts of the body could present different obstacles, or special unique points. There might be a special "bisect" move available if you swing your sword at the top of the enemy's head and successfully navigate their whole body; hitting the heart or stomach or intestines might do something special, if those are even modeled at all; etc.

Lisp Notes


The reason Lisp is special is because you can TURN OFF semantics.

(+ 1 1) is pure form. (+ 1 1) is syntax. (+ 1 1) is a syntactic expression: it has structure.

But, until we evaluate it, it doesn't have meaning. [It might appear to be "add one and one," but in a programming language7 focused on bits and bytes, (+ 1 1) might well be the command to put together two bits, resulting in 11.]

In all the Lisp-family languages I know of, because they are programming languages, and by default the programmer expects to evaluate syntactic expressions, the default notation for an expression which will be evaluated is simpler than that for one which will not be evaluated.

The notation given above is the traditional notation for an expression which will be evaluated by the Lisp system. (+ 1 1) evalutes to 28.

The notation for an unevaluated expression is '(+ 1 1). But, "unevaluated" isn't quite the right word here. It will be more helpful to consider (+ 1 1) as evaluating to itself.

You can think of that single quotation mark like a switch which turns off evaluation. Once that quotation-mark switch is flipped, the following expression no longer means anything. It's pure syntax. The result of evaluating it will depend on the environment in which it's evaluated: if you redefine "+" to do subtraction, the result of evaluating (+ 1 1) in that environment will be 0.


(all (anything where the first word in operator position is treated by looking up, within a table, how to output it e.g. (:span (children)) becomes <span>children</span> (anything else gets rendered as normal text into a :p tag or something or something similar) (this s-expression is an example) )

Computer Notes - Shortcuts

2020-03-14T15:14:00-0700 updated 2020-10-27T14:10:22-0700

[not sure if this is right] Make website backups more rsync-friendly by zipping up the files beforehand. It will take less time to sync one file than thousands because you have to stat() the file system for each file. And don't forget the "archive file ordering" trick, courtesy of Gwern.

youtube-dl -F $URL shows the choices for video quality when downloading a video from $URL. youtube--dl -f $CHOICE $URL downloads the video at that quality. To automatically get the best quality, use youtube--dl -f best $URL.

macOS / OS X: open a minimized window: (1) Command + Tab until you get the app's icon. (2) Release Tab; keep holding Command. (3) Hold Option. (4) Release Command and Option. From here.

macOS / OS X: F1 and F2 increase and decrease the brightness of your screen -- but there's a hidden shortcut, Option-Shift-F1/F2, which lets you fine-tune the brightness in increments 1/10 as large as the normal shortcut.

Gimp: "Shift-q" is Quick Mask. While selecting, use quick mask to paint areas into or out of the selection, by painting in black or white. I would like to learn more about masking features...

HTML <code> tags are for code of any kind, including HTML tags. To mark up a keyboard command, use the <kbd> tag. (:h/t HTML Hell; that link also shows the proper way to mark up a "hamburger" menu icon.)

LaTeX text sizes, from biggest to smallest: \Huge, \huge, \LARGE, \Large, \large, \normalsize (default), \small, \footnotesize, \scriptsize, \tiny

To clear a suggestion from a Firefox text-entry area, highlight the suggestion, and type SHIFT-Del.


When working with nested loops in list comprehensions remember that the for clauses remain in the same order as in our original for loops. Trey Hunner

While == and != are equality operators, is and is not are identity operators.

Python’s is operator asks about the identity of an object: are the two objects on either side of the is operator actually the same exact object.

We’re not just asking are they equal, but are they stored in the same place in memory and in fact refer to the same exact object.


By default, Python’s == operator delegates to is. Meaning unless two variables point to the exact some object in memory, == will return False [...] This is true by default… but many objects in Python overload the == operator to do much more useful things when we ask about equality.

Trey Hunner: Unique and Sentinel Values in Python

Derived classes may override methods of their base classes. Because methods have no special privileges when calling other methods of the same object, a method of a base class that calls another method defined in the same base class may end up calling a method of a derived class that overrides it. (For C++ programmers: all methods in Python are effectively virtual.) https://docs.python.org/3/tutorial/classes.html#inheritance
Behind the scenes, the for statement calls iter() on the container object. The function returns an iterator object that defines the method __next__() which accesses elements in the container one at a time. When there are no more elements, __next__() raises a StopIteration exception which tells the for loop to terminate. You can call the __next__() method using the next() built-in function; this example shows how it all works


Having seen the mechanics behind the iterator protocol, it is easy to add iterator behavior to your classes. Define an iter() method which returns an object with a next() method. If the class defines next(), then iter() can just return self.


Adapted from Martin Heinz's blog: In Python [...] everything is exported from a module, unless it defines __all__:

# my_module.py

def foo():

def bar():

__all__ = ["bar"]

If the above is written in my_module.py, then my_module import * will only import bar, and not foo. Alternatively, if __all__ is defined as an empty list, that same import statement will raise an AttributeError.

Nonsense Dialogue


    Your skills --
    Your accumulated advancements --
    Have insufficient increasement!

    Upwardified are my upgrades,
    My many masteries --
    That is, my skills!

    Predictably, you are plusless,
    Listless, and lazy!
    You have! No! Skills!

Gifts From Prengubi


On the page of writing where I discovered Prengubi Cjiiiifgh, I found some strange stuff.

Language-Related Symptoms of Autism


I keep these around in case anyone asks after the autism-related work on my resume.

  • echolalia (frequent repetition of a sound, word, or phrase)
  • trouble using or understanding pronouns
  • trouble using or understanding sentence (phrase) structures
  • irregular tone (e.g. atonality; use of rising tone ("uptalk") at end of sentences which aren't questions)
  • irregular articulation
  • hard to keep themselves to a certain volume (e.g. hard to use "inside voice")

Dumb Arithmetic

Aug 5, 2020 3:26pm PDT

You can divide 12 into 3rds or 4ths evenly.

But, if you take 1/3rd from 12 (= 4) and add it to 12, you get 16, which can't evenly divide into 3rds (but can into 4ths.) If you take 1/4th of 12 (= 3) and add it to 12, you get 15, which can't evenly divide into 4ths (but can into 3rds.)

Does this point at anything interesting, or am I just a dingus?

Ratio of Author Blog Text to Blog Comment Text

Take the ratio of "post length:total comments length" forms a rough measure of "how many words of discussion does Joe Blogger provoke per post? per word of writing? per week?" Would also be worth measuring length of comment chains.

Post Office Valentines


Interested customers can write to these Post Offices for postmarks to keep or to share with friends. Enclose a stamped, addressed card or letter in another envelope or box labeled “Valentine re-mailing” and address it to the postmaster of one of the towns listed below. Please allow enough time for postmarking, re-mailing, and delivery.

USPS Website

Here are the towns with names that I like the most, out of about 35:

For Dog Eyes Only


Not in the dresser,
Nor on the couch.

Not in this jacket,
Nor in that pouch.

Not in the bucket,
And not on the chair.

Not in the cabinet.
Not over there.

I'm going stir-crazy:
Is it anywhere?

Names of Accent / Diacritic Marks

Problem with Inform 7 "Release Website" Templates

2020-08-05T18:23:00-0700 updated 2020-09-19T11:22:17-0700

[This has been moved to my Inform page.]


Quotes which are not selections from books I've read (for those, see here.)

Dali the faux-aristocratic jester, an embodiment of irony, full of scorn, his politics utterly subjugated to his aesthetics, and to his sense of humour.


People are taking the piss out of you everyday. They butt into your life, take a cheap shot at you and then disappear. They leer at you from tall buildings and make you feel small. They make flippant comments from buses that imply you’re not sexy enough and that all the fun is happening somewhere else. They are on TV making your girlfriend feel inadequate. They have access to the most sophisticated technology the world has ever seen and they bully you with it. They are The Advertisers and they are laughing at you.


Yeah yeah, Banksy soooo edgy. I get it. Who cares who said it? Focus on the words.

Ours is a collaboration in the truest sense. I deliver page after astonishing page of incendiary satire, and Todd’s garish drawings make a serviceable distraction for the illiterate.

Desmond Devlin making fun of Tom Richmond

It is useless to try to hide these things. Any site done by one person is going to be in some deal eccentric and reflect the ego and cultural limitations of the creator. It is liable to the sort of blunders only an individual can make; because if you had had another mind riding shotgun with you you wouldn't have gotten so far lost or missed that turn. A dictionary written by one person hangs the maker's mind naked in public, exposed in all its intellectual flab and moles. When you do something vast and complex with no formal training, you know you're going to be wrong a lot. The anecdote of Samuel Johnson and the woman at a party gets it right. She asked him how he could have botched some definition, and he answered, "Ignorance, Madam, pure ignorance."

The Sciolist, editor of Etymology Online

When somebody congratulates Amazon on a good quarter, I say thank you. But what I'm thinking to myself is— those quarterly results were actually pretty much fully baked about 3 years ago. Today I'm working on a quarter that is going to happen in 2020. Not next quarter. Next quarter for all practical purposes is done already and it has probably been done for a couple of years.

Jeff "Big Beezy" Bezos, ca. 2017

I’ll give you another example of a lifestyle upgrade that does not cost a lot of money. If you go out to restaurants, choose a restaurant you think you’re really going to like. Go to that restaurant, not on the weekend, so say between Monday and Thursday. Go early, preferably like right when they start for dinner service. Sit by yourself, and again, this is kind of a one-time investment. Go there for a week.

[...] when I was writing The 4-Hour Chef, because I would go in with a little notebook and I would order a bunch of stuff, and I would take little notes and they’re like, “Who the fuck is this guy?” Right? Number one, the chef typically at that point is not going to be as loaded, not on booze, although that happens too. But on a like, 52 menus open at once, that’s not going to happen at 5:00 or 5:30, so they might take an interest in — the maitre d’ might take an interest in — you. Order all sorts of stuff to try and then tip like 40 percent.

Ramit Sethi: Mm-hmm.

Tim Ferriss: And do that three days in a row, and you are forever a VIP at that restaurant.

Ramit Sethi: Oh, wow. So I liked that little insight. The 40 percent’s not that surprising, but the three days in a row.

Tim Ferriss: Do a couple of days in a row, so people get to know you, you get to know them [...] and like, you’re VIP for life.

The Tim Ferriss Show, accessed 2020-05-17T09:06-0700

Quite commonly the manuscript's initial scribe would provide notes to the rubricator in the form of annotations made in the margins of the text. Such notes were effectively indications to "rubricate here" or "add rubric" [... which is important because] a scribe's annotations to the rubricator can be used along with codicology to establish a manuscript's history, or provenance.

Wikipedia - Rubrication, via Gwern Branwen's rubrication gallery, 2020-09-19T20:15:06-0700

The Baí Zé was encountered by the Yellow Emperor or Huáng Dì while he was on patrol in the east. Thereafter the creature dictated to Huáng Dì a guide to the forms and habits of all 11,520 types of supernatural creatures in the world, and how to overcome their hauntings and attacks. The emperor had this information written down in a book called the Bái Zé Tú (白泽图/白澤圖). This book no longer exists, but many fragments of it survive in other texts.

Bai Ze, 2020-09-18T13:02:15-0700

In much current usage of "experience," references to structure and history are implied but not made explicit; instead, personal testimony of oppression replaces analysis, and this testimony comes to stand for the experience of the whole group. The fact of belonging to an identity group is taken as authority enough for one's speech; the direct experience of a group or culture--that is, membership in it--becomes the only test of true knowledge.

The exclusionary implications of this are twofold: all those not of the group are denied even intellectual access to it, and those within the group whose experiences or interpretations do not conform to the established terms of identity must either suppress their views or drop out. An appeal to “experience” of this kind forecloses discussion and criticism and turns politics into a policing operation: the borders of identity are patrolled for signs of nonconformity; the test of membership in a group becomes less one's willingness to endorse certain principles and engage in specific political actions, less one's positioning in specific relationships of power, than one's ability to use the prescribed languages that are taken as signs that one is inherently “of" the group. That all of this isn't recognized as a highly political process that produces identities is troubling indeed, especially because it so closely mimics the politics of the powerful, naturalizing and deeming as discernably objective facts the prerequisites for inclusion in any group.

Joan Scott, "Multiculturalism and the Politics of Identity", 1992 [post: 2020-08-29, 14:42]

It's unhealthy enough for one person in the household to stare at Twitter until tiny pieces of their skull leak through their nose. From personal experience, I can tell you that it only gets trickier when both you and your girlfriend are stuck in the same black hole. And yet, I couldn't be happier. There is no alternative that would be nearly as fulfilling. After baptizing myself in the media industry for a decade-long struggle, I honestly do not know if I can achieve authentic chemistry with someone who is not relentlessly committed to their digital sickness. I write a newsletter called On Posting, for Christ's sake. Any hope of getting religion and seeing the bigger picture is long gone. That's why Megan says she typically dates people who are already established in the media. Once your brain turns opaque and moldy from a banquet of algorithm-assigned doom, it's literally impossible to communicate with anyone who hasn't endured the same fate.

On Posting

Five of the six states in the former East Germany – with the exception of the city-state of Berlin – had lower per-capita productivity in 2018 than the West German state with the lowest per-capita productivity, Schleswig-Holstein

Pew Research Center

Jorge Castro, The Ability to Send a Plain Text Email...

You would be shocked at the amount of core contributors to Kubernetes that we routinely find aren't subscribed to the main mailing list. Sending git formatted patches over email, are you kidding? Most of my open source collaborators aren't even reading their emails lol.

You don't send a mail to the list to propose something, you write an enhancement proposal and if you're nice, you might mention it on a list, but all that activity happens in GitHub. And if you want a meaty discussion you hop onto Zoom and discuss it high bandwidth style with your SIG before moving on. You're not going to find lengthy discussions about technical features on many of our mailing lists, you'll find them in the GitHub issues, PR comments, and meeting transcripts.


Watch how Martin Wimpress does a live package update in Ubuntu MATE. That level of interaction with the audience isn't just the future of OSS development, it's the present. Our next kernel people, Debian maintainers, library maintainers, and everything inbetween are sitting in places like this and this is how they interact with themselves and their communities. There's just too much awesome shit in the world for people to slow down to figure out emails and mailman. And if you think this is just about email, wait until you see how much coordination and awesome stuff is happening in Discord. Yep, this is about IRC too, all of it.

Jokes about national rivalry have diminished, for the simple reason that the unknown has diminished. After opening European borders, and harmonizing the economic and legal systems, we have a legible continent where countries can easily and freely compare notes. We don't need to joke about who would run things best anymore, we can just go look at the COVID numbers.

[...] it reveals humor as a sort of "Romulan Neutral Zone" on the edge of the usual political Overton Window [covering] not just what is acceptable, but also what is currently contested.

[...] This zone consists of ideas which humor is effective at working its magic on. It alters or refutes our worldview with condensed bursts of hidden wisdom or absurdity. But they must be within our grasp to untangle. Humor's range is subject to its own constraints, such as "Too Soon", "That's NOT Funny", "I'm Going To Hell For Laughing" and "I Don't Get It". These are completely subjective limits, which are negotiated and renegotiated between the joke tellers and their audience. If you don't believe me, take the joke about the 51 straws, and replace "Dutch" with "Jewish".

But if you think that means the Jews rule over you, you're refusing to see how these things actually work. What actually rules over you is people's chronic and miscalibrated fear that you might not be kidding, which occurs in highly variable degrees. This might also be a good explanation for the common saying that if you want to tell people something they don't want to hear, you need to make them laugh, or they'll kill you for saying it. Good humor is a successful mental defense against thinking that is too rigid and dogmatic.

The case of Mark Meechan is highly illustrative. This is the Scot who was convicted of "grossly offensive behavior" for teaching his pug-dog to do a Nazi salute, upon hearing "Gas the Jews". He has always claimed he did it purely to annoy his girlfriend. "Justice" in this case includes a court ruling that "context and intent" are officially irrelevant to the matter, an absolute bombshell in legal precedent. But that's not the most absurd part. It's the BBC documentary on the issue afterwards, in which one of the detractors jokingly asks his own cat if it too wants to "Gas the Jews," before concluding no. By the logic of a British court, he is guilty of the same kind of punishable offense, and the video is the only proof necessary.

Laughing to Transgress, by Steven Wittens

As an example, Ibn Khaldun notes that Al-Masudi and other historians reported that Moses counted the Israelite army as 600,000 or more soldiers. Ibn Khaldun criticizes Al-Masudi for failing to take into account certain logistics, questioning whether Egypt and Syria could have possibly held such a large number of soldiers, or whether an army of that size would be able to march or fight as a unit. He notes that the whole available territory would have been too small for such a large army, and argues that if "it were in battle formation, it would extend" several times "beyond the field of vision." He questions how two such parties could "fight with each other, or one battle formation gain the upper hand when one flank does not know what the other flank is doing", and that a coordinated battle movement in such a large group "would hardly be possible". He argues that the "situation in the present day testifies to the correctness of this statement" since the "past resembles the future more than one drop of water another". He then compares it to the Persian Sasanian Empire, noting that it was far more vast than the Israelite Kingdom and yet the size of the military of the Sasanian Empire at the Battle of al-Qādisiyyah amounted to 120,000 troops at most (citing the 8th-century historian Sayf ibn Umar).

Wikipedia: Muqaddimah

Far in a wild, unknown to public view,
From youth to age a reverend hermit grew;
The moss his bed, the cave his humble cell,
His food the fruits, his drink the crystal well
Remote from man, with God he pass’d his days,
Prayer all his business—all his pleasure praise.

Thomas Parnell

Competing in its first Roboshow (a robot martial arts competition) is Atom, the 6’1" 400lb reigning champion. Atom, a new model transbot, is the first robot to allow its human companions to control it like a videogame character. It has served all three Cybermasters as a loyal servant, servant, protector, friend and even lover. The human who controls Atom now will be looking forward to showing off his new robot’s martial arts prowess; while he will be hoping not to get kicked too hard in the groin by the fully loaded six inch titanium-alloy shin-guards on his oppositional opponent. Atom has never taken a single blow to the nads during any of his past tournaments. With his human controller controlling his actions like a videogame, it will be difficult for anyone to penetrate Atom’s defenses enough to make contact with the groin.



If you are actually interested in the extension of liberty across the globe— if you are fighting for the freedom of the human race—then it is important to assess what that world actually looks like.

Start here: one in every five humans on this earth is a subject of the Communist Party of China. This Party believes that it is in an "intense, ideological struggle" for survival, and the ideological threats it faces explicitly includes ideas like "separation of powers," "independent judiciaries," "human rights," "Western freedom,"free flow of information on the internet,""civil society," "total marketization," "economic liberalism," and "freedom of the press." The Party believes that by allowing free markets, free thoughts, and free association into China they would be destroying the source of their power, and with it their ability to lead China into the future. The future they imagine is great: Xi Jinping has described it as "the eventual demise of capitalism and the ultimate victory of socialism." The central task of the Communist Party of China, he urges, is "building a socialism that is superior to capitalism, and laying the foundation for a future where we will win the initiative and have the dominant position." Ever ambitious, the Communists even have a date by which they hope to have secured this bid for "the initiative:" 2049.

Tanner Greer


[...] it is conceivable that with a modicum of cleverness and foresight you could start building a system with today's technology that could evolve smoothly as tomorrow's technology develops.

The Lessons of Lucasfilm's Habitat


The leaves fly down, the rain spits and the clouds flow like a dirty thaw before the wind, which whines and mews in the window cracks and swings before the wireless aerial with a dull tap against the sill; the House of Ussher is falling, and between now and Hogmanay, as the draughts lift the carpets, as slates shift on the roof and mice patter behind the wainscot, the ghosts, the wronged suitors of our lives, gather in the anterooms of the mind.

The Living Novel, by V. S. Pritchett. Quoted in "V. S. Pritchett", Sunrise with Seamonsters, Paul Theroux.


The royal Navy was prohibited from ruling over [Diamond Rock, near Martinique], so the land was commissioned as a ship.



I don’t remember whether I have ever spoken to you about the feeling I have had for several years. Because society today is without a very strong religion, without a firm hierarchy of social classes, and people are afraid of the big organization in which they are just a little part, for them reading certain novels is a little like looking through the keyhole to learn what the neighbor is doing and thinking—does he have the same inferiority complex, the same vices, the same temptations? This is what they are looking for in the work of art. I think many more people today are insecure and are in search of themselves.

There are now so few literary works of the kind Anatole France wrote, for example, you know—very quiet and elegant and reassuring. On the contrary, what people today want are the most complex books, trying to go into every corner of human nature.

Georges Simenon, Paris Review of Books, "The Art of Fiction No. 9"


I think the general consensus is that the Communist movement (50s and 60s) actually did a lot for gender equality, given that that was one of the explicit precepts of the new society. China was coming from way, way behind, though, so even if a huge amount of progress was made, it ain't no UC Berkeley. But observing other "psuedo-Confucian" societies like Korea or Japan, it often seems like China's actually comparatively relaxed about gender.

Years of living in China left me with the impression that women themselves have come a long way: there are a lot of "tough women" in China, and many of them are very independent minded. Sure, there's also a lot of anxiety about being 26 and unmarried (the horror!), but at this point that anxiety comes as much or more from family pressure, the women themselves are often very "modern-minded".

The men, on the other hand, are mostly still in the stone age. The goal of life is to amass money and power, and one of the first things you do when you've got that is get a mistress. Having pretty young things in the office is a must. One of the main perks of authority is that you can screw who you like. The typical university environment, for example, is absolutely disgusting, the male professors are shooting fish in a barrel.

And because political and social power is held by men, the government comes down hard on feminism. I always had a hard time getting my head around the way feminism is treated like a political sin, and is censored as such.



We do these things not because they are easy, but because we thought they would be easy.

Will Stedden


Do not follow in the footsteps of the sages. Seek what they sought.

Matsuo Bashō


Music is your own experience, your thoughts, your wisdom. If you don't live it, it won't come out of your horn.

Charlie Parker


these [wires] were usually smoked by being passed through the flame of a candle or lamp so that they would not shine and thus be seen.

Edgar Howard Penrose, Descriptive Catalogue of the Collection of Firearms in the Museum of Applied Science of Victoria (Melbourne: Trustees of the National Museums of Victoria, 1949), 70; plagiarizing, as pointed out here, Miller Christy, ‘Man-traps and Spring-Guns,’ The Windsor Magazine, Vol. 13, 1901, from Museum Victoria supplementary file 21734 – Arms – Spring Gun – Flintlock


(original post. August 17, 2014 at 9:43 pm)

Andrew says:

Gorbunova and co. have written a series of fascinating papers comparing cancer across species, with a focus primarily on rodents. Here are a couple of them:






Thoughts arising therefrom:

First: Naked mole rats get exceptional cancer protection from an interaction between unusually large hyaluronan molecules and p16, which provides a redundant pathway (in addition to the p27 pathway, which they share with most other mammals) for enforcing a minimum distance between cells. Blind mole rats, by contrast, get their cancer protection from p53 and Rb working with IFN-β to cause necrotic cell death when cells get too close. Eastern grey squirrels use yet another method. Beavers use telomere shortening, which is common among large mammals but not found in any of the long-lived small rodents.

In other words, there are many ways to get cancer protection. Add redundancy to one of any number of pathways, and you’ve multiplied your cancer protection many-fold.

Second: Mice, rats and voles suffer high mortality from starvation, predation and disease. They also have the feeblest cancer protections among rodents. By contrast, naked mole rats, blind mole rats, eastern grey squirrels and beavers have all found ways to ensure a reliable food supply and protect themselves from predators: Burrowing, jumping through the trees, building lodges, keeping food underground or under water. There’s a strong argument to be made that these things came before they gained additional cancer protections, and were the ultimate cause of the cancer protection.

Why? It’s because avoiding cancer only helps those who die of old age. For mice, rats and voles, the selective signal on an anti-cancer mutations gets lost in the noise of early death from many other causes. It’s only for already long-lived animals, protected from predation and starvation, that cancer prevention leads to more offspring for one individual versus another and allows an anti-cancer mutation to become fixed in a population.

In other words, whales probably avoid cancer because they live a long time.

The Promise: Part W


If you were transformed into a wooden cylinder,
transported to the highest point of your current location,
and dropped so that you rolled,

would you like where you ended up?



You've overlooked all the colors of flavor: all 16 million of them!


To be precise, (16^2)^3 = 256^3 = 16,777,216 colors, if we're talking about RGB colors with two hex digits to specify each channel, e.g. FFAABB.

There's a connection here with wagon wheels. The following code is pseudocode for Inform 7.

Needs two hands free: (set a counter to 0, incrementing on each subsequent turn) "You grasp the red wagon wheel between your thumb and forefinger. With the other hand, you peel off its wax paper backing.

You pull back your lips, baring your teeth like a horse, and open a pinprick of space between your top and bottom chompers. After bringing the wagon wheel to your lips, you take a nibble fit for a fly."

Nothing feels different.

(return control) (after their next turn) (check the counter; it's 1)

You catch sight of the clock on the other side of the platform.

It's stopped!

/ Allow a couple turns of exploration (on turn 5)

"Partner, you look like you're [italic]wheeling[roman]! You been hitting the durbz?"

An indigo cube is floating behind you, with its vertices at top, bottom, and midway along its height. One vertex points straight at you.

On each face of the cube, stenciled black capitals read "1 CUBIC FOOT."

/ Wheeling? / Durbz? / What exactly did I just eat? / What the hell are you? / [Look at clock again]. -> Still stopped. / [Eat more of the red wagon wheel.]

"Durbz are durbz, no matter the dose," Cubic Foot says, in a tone which indicates it has rehearsed this phrase.

Scattered D&D Notes from Old Website

everything from here to Spiderman and Elf is early 2018, or earlier

Inventory Implementation

Consider writing functions which generate an inventory characteristic of a given NPC which can be run to produce their inventory when they are first created. Such functions could then be re-used to describe the possible kit for allied NPC types, such as when a player is searching for hirelings.

Some inventory contents, as well as slots on the body, could be integrated into dynamic descriptions of a character.

Dynamic Description

We could use this toy function to provide a basic textual description of a character.

(defn describe [char] (concat "This is a " (:sex char) " " (:race char) ". In its hands are " (right-hand-contents char) " and " (left-hand-contents char) "."))

If we call this function on the data representation of a male bugbear carrying a crossbow and a torch, it would return "This is a male bugbear. In its hands are a crossbow and a torch (lit)." Underlined items are those which were chosen based on the bugbear's data.

Observations Depend on the Observer

Description functions such as this one would need more complexity to serve a real game, but that can be handled in the future. What interests me most is the possibility of specializing a describe function so that the description of the observed entity depends on the observer's powers of observation!

Here's an example. Suppose there is an in-game sword which is curved in a distinctive style only used by Spaniards. Suppose further that this model of sword is recognizable as such by certain people: those with a Swordsmithing skill; those who are from the Spanish region where the technique originates; and those who have Diplomacy skills related to Spain. Then the description of the sword could be simply "sword" to those who do not have the knowledge, and "Spanish curved sword" to those who do have the knowledge.

2019-04-05: Since writing this note, I've learned Inform 7, a tool for creating interactive fiction in which it is simple and natural to vary text descriptions with the stats or characteristics of the observing entity. Agent-based simulations are also a natural fit for Inform, as long as one keeps the number of actors small, so I'm using it for some other things now too.

Interaction with Economy

If the above sword was looted, and the looter sold it at the market, should the economy program recognize it as a "sword" or as a "Spanish curved sword?"

Nowhere near implementation on this, so I can simply say for now that if the character knows the sword's true nature, it can be sold for the specialty price. Otherwise it is sold as the generic equivalent (such as undifferentiated "earthenware" for a fine clay pot.)

The rule of shared information: :theory:

To the WHOLE group of characters who are present and whose players are present, the BEST knowledge of the scenario is communicated, as perceived by the character with the most aptitude for perceiving the scenario details in question. E.g. if a group is traveling with a character who has strong hearing, unless there is curently a cost to communication, such as in combat when talking costs AP or as in any tense scenario where noise or wrong moves could mean discovery, then the player is informed of the effects of their special hearing such that the whole group is aware of the information and can act as if the strong-hearing character has communicated it to them.

Creating Player Characters

(defun mk-human
  (assoc (six-scores 'basic) :name name)
  [name social-type]
  (assoc (six-scores social-type) :name name))


On every turn, a list of game actions is available to each character. The exact contents of the list change over time, and depend on character-specific factors such as:

Everything that a player chooses to do must ultimately be expressed in terms of game actions, and chosen in the game's interface. The desire to "move over those rocks and attack the bandit" would be input as "_move_ to hex 1010, 1011, 1012, and then attack the human male bandit in hex 1013." In that example, move and attack are the game actions which are then resolved.

Equipment Slots

When an item is equipped, that item takes up a particular one of the character's equipment slot. Unequipping frees that slot up again. Some items have slots of their own, which the character (or others!) can access. For example, a belt can be equipped at one or both of the waist and shoulder slots. Each belt gives the character three belt-mount slots, allowing the belt to be used for its main purpose of stowing things for quick retrieval. In turn, a scabbard can be equipped to one of the new belt-mount slots, which, in return for taking up the belt-mount, gives the character a equipment slot specialized for stowing swords (perhaps of some particular type.)

Maximal Usage of Data Structures to Represent In-Game Concepts :implem:

not just in-game objects, but also things like spells (which represent in-world effects) e.g.

(defspell [caster-lvl]
    {:name "Fire Ray" :targets (min 10 (+ 1  caster-lvl))}) ; i.e. a MAX of 10, which would be how the "English interpreter" would describe it

English Interpreter :implem:unf:

For generation of human-facing documentation from regular data structures such as spells or items, it would be useful to have functions for converting basic lisp expressions into English.

I would call such a thing "Englisp." That's my idea, folks: don't even think about stealing it, or I will put you in jail. Warning: not-quite-real code ahead.

(defun describe (form)
        (cdr form)
                (concat "the smallest of:" "\n- " (describe x for each x in the body)
                ("the caster's level"))))

(describe (min 1 caster-level))

In this case, caster-level is just a symbol that needs to be made user-readable in an Englishy way. Down the line, it could be evaluated in terms of the logged-in user's player character, so that you could see immediately how many targets are reachable if you yourself were to cast the spell. This ties into some of my earlier thinking about a webpage for the Sneaking rules where the values used in the calculations would be dependent on what levle you chose in the sidebar "variable adjuster" for the page. Unlike a paper rulebook, examples in a live-updating digital game can add a section on how the rules apply to your character AS OF RIGHT NOW.

Scope of Variable Names and Sequence of Execution in Inform "now"


To improve the mood of (character - an animal):
    if the mood of character is less than friendly, now the mood of the character is the mood after the mood of the character.

I am not sure whether or not the statement "the mood after the mood of the character" wraps around. That is to say, I am not sure whether the above code would "improve" the character's mood from the best one possible to the worst. I would hope it doesn't do that. Will have to investigate.

The if statement above can be translated into pseudo-Clojure as follows:

(let [current-mood (:mood character)]
    (if (< current-mood friendly)
        (assoc :mood character (succ current-mood))))
        ;;assuming the moods have an interface sort of like Haskell Enum typeclass
        ;; 'set KEY in MAP to VAL' is spelled `assoc` in Clojure

It's Dark Outside, and I'm Spider-Man

These are from late fall 2018 or thereabouts.

"It's dark outside, and I'm Spider-Man," said Spider-Man. "I am here for those of you who have suffered from CRIME."

The citizens of New York were distraught. "The person who crimed us is Stan Lee!"

"It can't be," said Spider-Man. His web-shooters flexed. His butt clenched. "It can't be."

But it was.

Take Yourself Into Battle

You've gotta take yourself into battle.

You've gotta do your sick moves -- every last one, even if it kills you. But you can't let it kill you, because you've gotta win. You've gotta


You're gonna put on your elf-fighting suit and ride into battle, and if you retreat, so help me Space God, I will shoot you myself. I don't care how afraid you are, or how pissed your pants are, or how good you are at fighting in the gaseous-metal atmosphere of this planet: you've gotta do it anyway, you've g-o-t-t-a

  1. The "false cycle" is my made-up, provisional name. There's probably a real one.

  2. 5 pounds, in the form of 2 2.5-pound plates, is typically the smallest increment available for a barbell.

  3. The core of all "periodic" (i.e. non-linear) progression is to work up to a new maximum poundage, reset to something well below it, and work your way back up while trying to achieve higher reps on weights below your max. The 5-3-1 program is a good example.

  4. In Chinese linguistics, this term (natively 补语) refers to words which, aside from their normal usage, can also be suffixed to verbs (or VOs) to express the result of the verbal action. Some of them, when used this way, have the same meaning as when used on their own, e.g. 懂 means "understand", and 看懂 means "look-understand", i.e. "understand by reading/watching". Other words take on new meanings when used as complements: 起来, which on its own is a verb meaning "rise up", means "begin doing" when used as a complement. Don't confuse the term "complement" here with the same word from the broader study of syntax; there, it usually means "argument selected by a head." (I won't link the Wikipedia page here: as of 2019-11-20, it's not well-organized, and gives space to "traditional grammarianism" alongside a mangled, wishy-washy stab at linguistics.)

  5. Roughly: letter which comes first alphabetically gets the tone mark, except for a few regular exceptions, such as the vowel combo in "xiōng".

  6. What I don't yet understand is why some poems are centered without having to do anything else, e.g. "Esther" is centered as I would expect. Whether centering does what it "ought" to do (pshaw!) seems to depend on whether an HTML tag comes before the <pre class="poem"> element.

  7. This language might be either general-purpose or "domain-specific;" it might be self-hosting or it might be a dialect inside another language. And isn't a programming library just a collection of new words in a familiar language? Ones with commentary, and notes on usage, and perfectly explicit definitions?

  8. Setting aside questions of integers vs floating-point numbers and other such things.