Press "Enter" to skip to content

Posts tagged as “Blogging Every Day”

[twenty twenty-four day seventy-two]: right there buddy

centaur 0

I can't tell you how frustrating it is for Present Anthony for Past Anthony to have set up a single place where all tax forms should go during the year, except for Past Anthony to not have used that system for the one paper form that cannot be replaced by looking it up online.

I'm sure it's here somewhere.

-the Centaur

Pictured: I have been working on taxes, so please enjoy this picture of a cat.

[twenty twenty-four day seventy-one]: cheers

centaur 0

Unabashedly, I'm going to beef up the blog buffer by posting something easy, like a picture of this delicious Old Fashioned from Longhorn. They're a nice sipping drink, excellent for kicking back with a good book, which as I recall that night was very likely the book "Rust for Rustaceans."

Now, I talked smack about Rust the other day, but they have some great game libraries worth trying out, and I am not too proud to be proved wrong, nor am I too proud to use a tool with warts (which I will happily complain about) if it can also get my job done (which I will happily crow about).

-the Centaur

Pictured: I said it, yes. And now we're one more day ahead, so I can get on with Neurodiversiverse edits.

[twenty twenty-four day seventy]: fix it the way that works

centaur 0

So, this is worthy of a longer blog post, but the short story is, looking under the streetlight for your keys may provide visibility, but it won’t help you find them unless you have reason to think that you dropped them there.

A lot of time in software development, we encounter things that don’t work, and problems like stochastic errors and heisenbugs can lead software developers to try voodoo solutions - rebooting, recompiling from head, running the build again, or restarting the server.

These “solutions” work well enough for us that it’s worthwhile trying them as a first step - several times recently I have encountered issues which simply evaporated when I refreshed the web page, restarted the server, retried the build, or restarted my computer.

But these are not actual fixes. They’re tools to clear away transient errors so we can give our systems the best chance of properly functioning. And if they don’t work, the most important thing to do is to really dig in and try to find the root cause of the problem.

On one of those systems - where I literally had tried refreshing the web page, restarting the server, refreshing the code, reinstalling the packages, and rebooting the computer - the build itself was something that you had to run twice.

Now, this is a common problem with software builds: they take a lot of files and memory, and they can get halfway through their builds and die, leaving enough artifacts for a second pass to successfully solve the problem. I had to do this at Google quite a bit.

But it isn’t a real solution. (Well, it was at Google, for this particular software, because its build was running up against some hard limits that weren’t fixable, but I digress). And so, eventually, my build for this website failed to run at all, even after a reboot.

The solution? A quick search online revealed it’s possible to change the parameters of the build to give it more memory - and once I did that, the build ran smooth as glass. The “run the build again” trick I’d learned at Google - learned where, for one particular project, it was not possible to fix the problem - had led me astray, and overapplying this trick to my new problem - where it had partial success - kept me from finding a real, permanent fix.

So, if a fix feels like voodoo, stop for a minute - and search for a better way.

-the Centaur

Pictured: What do you mean, you haven't updated the package configuration for THREE YEARS?

[twenty twenty-four day sixty-nine]: dodging a bullet

centaur 0

SO! I’ve spent more time than I like in hospitals with saline drips restoring my dehydrated blood after food-poisoning induced vomiting, and pretty much all of those episodes followed me thinking, “Huh, this tastes a little funny … ehhh, I guess it’s OK.”

That led me to introduce the following strict rule: if you think anything’s off about food, don’t eat it. 

Now, that seems to make sense to most people, but in reality, most people don’t practice that. In my direct experience, if the average person gets a piece of fruit or some soup or something that “tastes a little bit funny,” then, after thinking for a moment, they’ll say “ehhh, I guess it’s OK” and chow down straight on the funny-tasting food. Sometimes they even pressure me to have some, to which I say, "You eat it."

Honestly, most of the time, a funny taste turns out fine: a funny taste is just a sign that something is badly flavored or poorly spiced or too ripe or not ripe enough or just plain weird to the particular eater. And in my experience almost nobody gets sick doing that, which is why we as humans get to enjoy oysters and natto (fermented soybeans) and thousand-year eggs (clay-preserved eggs).

But, frankly speaking, that’s due to survivor bias. All the idiots (I mean, heroic gourmands) who tried nightshade mushroom and botulism-infested soup and toxic preservatives are dead now, so we cook from the books of the survivors. And I’ve learned from unexpectedly bitter-tasting experience that if I had been a heroic gourmand back in the day, I’d have a colorful pathogen named after me.

So if anything tastes or even looks funny, I don’t eat it.

Case in point! I’m alive to write this blog entry. Let me explain.

When I’m on the high end of my weight range and am trying to lose it, I tend to eat a light breakfast during the week to dial it back - usually a grapefruit and toast or half a pummelo. A pummelo is a heritage citrus that’s kind of like the grandfather of a grapefruit - pummelos and mandarins were crossed to make oranges, and crossed again to make grapefruit.

They're my favorite fruit - like a grapefruit, but sweeter, and so large that one half of a pummelo has as much meat as a whole grapefruit. I usually eat half the pummelo one day, refrigerate it in a closed container, and then eat the other half the next day or day after.

You can see this saved half at the top of the blog - it looked gorgeous and delicious. I popped into my mouth a small bit of meat that had been knocked off by an earlier cut, then picked up my knife to slice it ... when I noticed a tiny speck in the columella, the spongy stuff in the middle.

Now, as a paranoid eater, I always look on the columella with suspicion: in many pummelos, there’s so much that it looks like a white fungus growing there - but it’s always been just fruit. Figuring, “Ehh, I guess it’s OK”, I poke it with my knife before cutting the pummelo - and the black specks disappeared as two wedges of the fruit collapsed.

A chunk of this fruit had been consumed by some kind of fungus. You can kinda see the damaged wedges here in a picture I took just before cutting the fruit, and if you look closely, you can even see the fungus itself growing on the inside space. This wasn’t old fruit - I’d eaten the other half of the fruit just two days before, and it was beautiful and unmarred when I washed it. But it was still rotten on the inside, with a fungus I’ve not been able to identify online, other than it is some fungus with a fruiting body:

I spat out the tiny bit of pummelo meat I’d just put in my mouth, and tossed the fruit in the compost. But the next day, curious, I wondered if there were any signs on the other half of the fruit, and went back to find this:

Not only is the newer piece visibly moldy, its compromised pieces rapidly disintegrating, the entire older piece of fruit is now completely covered with fruiting bodies - probably spread around its surface when I cut the fruit open. From what I’ve found online, the sprouting of fruiting bodies means this pummelo had already been infested with a fungus for a week or two prior to the flowering.

So! I was lucky. Either this fungus was not toxic, or I managed to get so little of it in the first piece of fruit that I didn’t make myself sick. But it just confirms my strategy:

If it looks or tastes funny, don’t eat it.

If you don’t agree with me on a particular food, you eat it; I’m going to pass.

-the Centaur

Pictured: Um, I think I said it. Lots of pictures of bad grandpa grapefruit.

[twenty twenty-four day sixty-eight]: that blog bluffer

centaur 0

The title was supposed to say "that blog buffer" but I'm going with the misspelling. The critical thing to do with the buffers it to get far enough ahead that you can not just coast for a day or two, but take out the time to do more ambitious projects, like "fix it the way that it works" or "33 44 55", two posts that I've been putting off because I haven't been giving myself enough time to blog.

Well, according to the NOAA's day-of-year calendar, post sixty-eight needs to go up Fridya, so once I schedule this post, "the buffer" will give me until Saturday to come up with a really good idea.

I'm working on it, I'm working on it!

Blogging every day.

-the Centaur

Pictured: A few screencaps: the "The Blog Dashboard" Google Sheet, the NOAA Day of Year Calendar, and "Blog This or Code It!", the Google Doc where I dump ideas that I hope to turn into blogposts.

[twenty twenty-four day sixty-seven]: my new game console

centaur 0

SO! I am the proud owner of ... an Atari 2600+! This console, a re-release of the original Atari 2600 from 47 (!) years ago, only a notch smaller and with USB and HDMI outputs. It plays original Atari cartridges, though, which shall be my incentive to hop on my bike and visit the retro game store in nearby Traveler's Rest which has a selection of original Atari cartridges among all their other retro games.

The first game I remember playing is Adventure, which came out in 1980, and, while I can't be sure, I seem to remember first playing it in my parents' new house on Coventry Road, which we didn't move into until early 1979, just before my birthday.

In fact, as I dig my brain into it, we played Breakout in the den of my parents's old house on Sedgefield Road, so we must have had access to early-generation Atari. Our neighbors when we moved had a snazzier Odyssey 2 :-), and a few years later another friend from school had an even better game console, though none of the second-generation units I looked up online seem familiar to me.

Therefore, by the process of elimination, either my parents got my Atari 2600 for Christmas for me sometime around 1977 or 1978, or one of our relatives or babysitters loaned us one when we lived on Sedgefield. I have distinct memories of getting a Radio Shack Color Computer in Christmas of 1980, a grey wedge of plastic with a massive 4K of RAM, and remember programming games on it myself - perhaps because I didn't have an Atari to play with; this makes me think that, at least at first, the Atari was actually the "better game console" my other friend from school had, and that I went over to their house to play.

Regardless, I solved the first level of Adventure in minutes after cracking open the Atari.

No big challenge, but apparently I still got it.

-the Centaur

Pictured: the box, and the unboxed start of Adventure.

[twenty twenty-four day sixty-six]: there’s no man so self-made …

centaur 0

"There's no man so self-made he bore himself in the womb."

No, I don't really have any deep thoughts here riffing off "an individualist so rugged ..." ... I just thought of the turn of phrase (when thinking about the same people) and thought it went well with this book I saw.

-the Centaur

Pictured: a book I found in a nearby Barnes and Noble, and a picture taken and sent to friends who heart heart reduplication.

[twenty twenty-four day sixty-three]: all growed up

centaur 0

So! Thinking Ink Press has been around for aaaalmost a decade now, and we seem to be getting some of our proverbial shit together. Presented as a case in point: professionally designed business cards, done by the graphic designer who updated our already very nice logo which we had designed in-house. There are several subtle features of the logo we wanted to preserve that our cofounder Nathan Vargas had woven into the design, and she worked with us to update it while retaining the core features of Nathan’s original.

Then we had her do business cards, and again she iterated with us to get it right. We just test-printed the first run and drop-shipped it to the team individually (since that was cheaper than shipping it to a central site and re-shipping it) and they look awesome.

Slowly, we do seem to be getting it together. Hard to believe sometimes, but apparently dedication, hard work and not fucking giving up will slowly add to something. 

Here’s hoping the people who read our books will agree!

-the Centaur

Pictured: the card, atop a box of the cards.

[twenty twenty-four day sixty-two]: and you really can’t tell

centaur 0

Following up recent posts about things taking longer than you think.

Trying to do cleanup, laundry, and organization before starting my next task? I predicted “a few minutes”. It took a bleeding hour.

I need hours at a time to get coding done. I need focus. 

I don’t need to be interrupted by rescuing a cat from the rain! 

But you have to anyway. Argh!

Time tracking (I use Clockify), if done pretty rigorously, can really dispel some illusions about how much work we can get done in a short amount of time - and, conversely, about all we did do in that block of time that didn’t feel productive. 

Case in point: I’ve already done 6 hours of stuff today that wasn’t on my agenda for today. And all this stuff “needed” to get done - at least for a normal, human interpretation of the word “need”. 

I feel the need to qualify that as I’ve been through cognitive behavior therapy (CBT), an evidence-based approach to dealing with stress, and while it is wonderful, it does have some intellectually dishonest components, like throwing out “need” language.

I get it — there are things we think we “need” that we really don’t — but some of the therapists I worked with pushed that to an extreme that didn’t make sense. Sure, you don’t “need” to breathe, but if you don’t, you’ll pass out and/or die. 

So, yes, the stuff “needed” to get done in the normal, human sense of the word. I mean, sure, you could throw out all your clothes instead of doing laundry and order new ones online, but that would neither be efficient nor sustainable.

But more directly, some of that was organizing my files for my current active projects, some of which I did indeed need to pull up and organize in order to take the next steps on those projects. 

Funny how our busy-beaver selves sometimes try to convince ourselves that certain things don’t “need” to be done … but if we don’t do them, we won’t get anything done. 

Or the cat will have to stay in the rain.

-the Centaur

P.S. And this post took another 15-30 minutes, as I came back to it later.

Pictured: the bottom coming out. It was short, but it was a hell of a rainstorm.

[twenty twenty-four day sixty-one]: the downside is …

centaur 0

... these things take time.

Now that I’m an independent consultant, I have to track my hours - and if you work with a lot of collaborators on a lot of projects like I do, it doesn’t do you much good to only track your billable hours for your clients, because you need to know how much time you spend on time tracking, taxes, your research, conference organization, writing, doing the fricking laundry, and so on.

So, when I decided to start being hard on myself with cleaning up messes as-I-go so I won’t get stressed out when they all start to pile up, I didn’t stop time tracking. And I found that some tasks that I thought took half an hour (blogging every day) took something more like an hour, and some that I thought took only ten minutes (going through the latest bills and such) also took half an hour to an hour.

We’re not realistic about time. We can’t be, not just as humans, but as agents: in an uncertain world where we don’t know how much things will cost, planning CANNOT be performed correctly unless we consistently UNDER-estimate the cost or time that plans will take - what’s called an “admissible heuristic” in artificial intelligence planning language. Overestimation leads us to avoid choices that could be the right answers.

So we “need” to lie to ourselves, a little bit, about how hard things are.

But it still sucks when we find out that they are pretty fricking hard.

-the Centaur

P.S. This post, and some of the associated research and image harvesting, I expected to take 5 minutes. It took about fifteen. GO figure. Pictured: the "readings" shelves, back from the days when to get a bunch of papers on something you had to go to the library and photocopy them, or buy a big old book called "Readings in X" and hope it was current enough and comprehensive enough to have the articles you needed - or to attend the conferences themselves and hope you found the gold among all the rocks.

[twenty twenty-four day sixty]: why i have to be hard on myself to be easy on myself

centaur 0

SO! Working on The Neurodiversiverse led me to writing again, and writing those stories led me to Devon Price’s Unmasking Autism, which in turn led me to realize I have undiagnosed social anxiety disorder with autistic / ADHD / OCD tendencies.

“Unmasking” is an important process that autistic people can elect to undergo where they stop putting so much effort into conforming to neurotypical expectations - “masking” - and start building a life which is built around how their bodies and minds work.

While unmasking can be risky, with a real threat to life, limb or livelihood even for autistics who are privileged, much less people from other disadvantaged groups, it often comes with great benefits - not just to mental health, but physical well being.

But, if you know one autistic person, then you know one autistic person, and advice that helps one autistic person may not help another. So I found some of Price’s advice to be helpful - even as I had to subvert it for my own use case.

In particular, one thing many autistic people who are stressed out by trying to keep up with neurotypical expectations of cleanliness is to stop worrying so much about it. The thinking goes, if it stresses you out to put clothes in a hamper, who cares? Just change clothes in the same place and let them pile until you take them to the laundry.

But what I realized is that I was unconsciously doing this - letting mail, dishes, or laundry (cleaned or dirty) pile up until I had enough spoons to deal with it. My thinking went, if I am doing my work and keeping the lights on, who cares if the mail piles up for a few weeks? I’ll get to it when I deliver what I am responsible for.

But what I realized was, this was hurting me. The bigger the piles were, the more intimidating they became, and the more I put off dealing with them - a vicious cycle. But when I finally was forced to deal with one of the piles, I found myself infinitely MORE stressed than I was taking care of things a step at a time.

A habit I had adopted to deal with one aspect of my undiagnosed neurodivergence - a possibly autistic avoidance of organizing chores in favor of focus on work that kept the lights on - was really messing with another aspect of my mental makeup: an obsessive-compulsive need to have everything organized and in its place.

I went through this before with the library where I’m typing this; it used to be so disorganized that I didn’t want to spend time here, but once it was organized, I loved spending time here. So I am rewarded to expend this effort.

So, in an effort to go easier on myself, I have started being harder on myself about piles. Not letting them grow; dealing with them right away, before they become intimidating. The hope is, if I can keep the space around me organized, maybe the stress I feel about dealing with piles will fade away, and I can really focus on the work I want to.

Let’s see how it goes.

-the CentaurPictured: The afternoon lunch-and-read habit, featuring Unmasking Autism.

[twenty twenty-four day fifty-nine]: it’s good to take a break sometimes

centaur 0

So, my “blog buffer” enabled me to spend most of Tuesday focusing on work and writing. (And even doing a little game playing in Infinite Craft.) When I crashed out, I remembered, “oh, I need to blog” … but checked my blogroll, and saw that the buffer had posted for me. So I instead got to turn in early and get some much-needed sleep.

I’m going to need to catch up today and tomorrow, of course, trying to get four posts in two days so I have time to chill out over the weekend and focus on editing the rough draft of Spectral Iron and the returning stories on The Neurodiversiverse. But it sure is easier to keep a commitment when you plan ahead to make sure you fulfill that commitment than it is to commit without thought and hope that muddling through with “hard work and discipline” will somehow manage the job that should be done by actual thinking.

-the Centaur

Pictured: breakfast at Nose Dive, one of the many places in downtown Greenville where it is impossible to eat breakfast on Sunday morning without an hour wait - unless you reserve ahead.

[twenty twenty-four day fifty-eight]: the seven-part story test

centaur 0

So I’ve developed a new tool for story analysis that my co-editor on The Neurodiversiverse, Liza Olmsted, called “your seven-part story test,” and it fits in one long sentence: “Who wants what, why can’t they get it, what do they do about it, how does it turn out, why does that matter to them, and what does that mean for the reader?”

This six-part test is an adaptation of Dwight Swain’s story question “Who wants what and why can’t they get it?” as well as Vorwald and Wolff’s pithier but less useful “What happens?”, called the Major Dramatic Question (MDQ) in their book “How to Tell a Story.”

Now, V&Q unpack their MDQ into the broader questions “What does my character want? What action do they take to get it? What keeps them from getting it? Who succeeds or fails?”. Like many writing coaches who have their own language for similar ideas, I think both Swain and V&W are tackling the “Major Dramatic Question”, just from different angles - but “how it turns out” is a key question not encapsulated in Swain’s version, and I think it helps us understand what is going on - or should be going on - in a story.

Ultimately, I think a story is an engaging and surprising case, in the case-based reasoning (CBR) sense. For those not familiar with CBR, it’s a reasoning technique back from the days of symbolic artificial intelligence (AI), pioneered by Janet Kolodner, the leader of the AI lab where I was trained (and my original thesis advisor). A case, in the traditional sense, is a labeled experience, which is marked by what problem is being solved, what solution was applied, how it turned out, what lesson it taught, and how we might remember it.

Well, in the age of content-addressable memories and vector databases, we worry less about labeling cases so we can remember them, as the content itself can help us find relevant cases. However, it remains important to analyze our experiences so we can better understand what happened, what we did, how it turned out, and what lessons that taught (or should have taught) us. And the last two are related, but different: what happened are the bare facts, but the same bare facts can have different meanings to different people that experience them - or to different observers, watching from the outside.

Think of a woman in an abusive marriage. What she wants is a peaceful life; why she can’t get it is a husband who’s a Navy SEAL with PTSD. Let’s say what she does about it is try to kill him, and how it turns out is that she gets away with it. But what does that matter to her, and what does that mean for us (the writer, the editor, the publisher, and the author)?

Well, that same outcome could matter in different ways. Perhaps our heroine gets to build a new happy life away from a man who abused her - or perhaps our heroine is now living a life of regret, with a child that resents her and feelings of guilt about killing a man who couldn’t cope with his wartime trauma and needed her help. Because the truth of it is, no-one should have to put up with domestic violence - but a small percentage of people who struggle with PTSD end up acting out, and need help to deal with their trauma.

There’s no right answer here - a skilled author could present a spectrum of situations in which most of us would say either “get them help” or “girl, get out”. But if the author shows our heroine murdering their husband and getting away with it, the story is implicitly endorsing murder as a solution for domestic problems. Conversely, if the author shows the heroine forgiving violence in an attempt to get the husband help, the story is implicitly endorsing women enduring domestic abuse. Not only is there no right answer here, there’s no good answer here - which might lead you as an author to question the whole setup.

That’s why it’s really important to step back and think about what you as an author are endorsing in your story - and whether you’re comfortable with that message. Despite what some writing teachers will tell you, you’re not the god of your story: you’re playing in a playground of your own making, but the materials from which that playground is fashioned - people, places, events, actions, reactions, and emotions - are all drawn from the very real world in which we live, and stories by their nature communicate messages about that real world to those who read them, even if the events in the story are purely fictional.

(This principle of authorial endorsement extends to the editor, publisher, and even the reader as well. There were many good stories submitted to The Neurodiversiverse that we chose to reject because of their implicit message - for example, we wanted our anthology to be empowering, so we didn’t select some powerful stories in which the character’s neurodiversity helped them communicate with aliens, but didn’t help the horrible situation that they were in; these stories might be a great choice for a horror anthology, however). 

But the point can get lost if you start asking a lot of unconnected questions about your story. That’s why I like the idea of the unified MDQ, and I like the expression of that in Dwight Swain’s three-part question “Who wants what, and why can’t they get it?” But that three-part version is not enough, and expanding that question into a single phrase that incorporates the important elements of action, outcome, impact and meaning turns it into my seven-part test: “Who wants what, why can’t they get it, what do they do about it, how does it turn out, why does that matter to them, and what does that mean for the reader?” 

The rewards for thinking through these questions are great. Thinking about how the story turns out matters to the protagonist creates options for tweaking the ending (or the material leading up to it) for greater resonance; and thinking about what meaning the story delivers for the reader creates opportunities to weave that message through the whole story. The seven-part story test can help us create stronger, more impactful, and more meaningful stories that make more sense and feel more satisfying.

So, to unpack the seven-part test further:

  • Who? Who is the protagonist of your story?
  • Wants what? What’s their goal, and why are they motivated to seek it?
  • Why can’t they get it? What’s the conflict in the story? Is it derived from a classical antagonist, or is the conflict based on internal or environmental factors?
  • What do they do about it? What action does the character take (or fail to take, as Hamlet fails to take action for much of his story)? Ultimately, most good stories are about what people do when facing conflict, so they should not be wholly passive - they should have some agency which affects how the story turns out.
  • How does it turn out? With the exception of vignettes that are all atmosphere, we want to know the outcome of the protagonists’ action. Did they succeed? Did they fail? Are we left with a situation that’s definitively not resolved (as in the ambiguous endings of Inception, Cast/Away, The Sopranos, or John Carpenter’s The Thing)? Any of these are acceptable endings (though a definitive lack of resolution is the hardest trick to pull off) but you as the author need to pick one.
  • Why does that matter to them? The ending of Cast/Away is a great example, in that our uncertainty about what the main character does next is actually symbolic of the main character’s situation. It matters to the main character that they are in a state of indecision, because that indecision represents what they lacked when cast away on that island: freedom of choice.
  • What does that mean for the reader? Regardless of what you choose to the previous questions, you should think through the implications of what that means for the reader, and whether that’s the image you want to present for your story. While you aren’t the god of your story, you are the playwright and stage director, and if the message of your story isn’t what you want, you can just change it. 

Overall, I’ve already got a lot of good mileage out of these questions in the new series of stories that I’m writing (which I’m variously calling “The Porsche Xenobiology Stories” or “Tales of Failaka” depending on which planet I’m writing on this week). By asking these questions, I’ve been able to reformulate my endings to focus not just on the outcomes of the character’s actions, but how it matters to them, which makes the endings more satisfying; and also to focus on what it means, which has enabled me to make the stories more cohesive, as well as inspiring ideas for new stories.

“Who wants what, why can’t they get it, what do they do about it, how does it turn out, why does it matter to them, and what does that mean for the reader?” It’s a short, seven-part story test, easily compressible into a sentence that can be used to interrogate your story, and it’s been very useful for me; I hope it is useful for you too.

-the Centaur

Pictured: Loki, and in the background, the reading "pile" for a writing book that I'm working on called "The Rules Disease." Yes, it has filled most of a bookshelf by this point - there's a lot of writing on writing.

[twenty twenty-four day fifty-seven]: how do “normal” people manage?

centaur 0

So I’m confused: I know I’m a bit weird, but I stopped to think about the supposedly "weird" way that I do things and I genuinely do not understand how “normal” people manage it.

So what you see above is my collection of genre T-shirts. I love genre T-shirts and wear them most of the year - as my shirt in the summer, and as my undershirt in the winter.

I used to think this collection was excessive; most of the other people I know don’t have near as many themed shirts, just a collection of normal clothes.

But I started pulling on that thread (ha, ha) a bit and it just didn’t make sense to me.

SO what you see there is something like 300-500 shirts in my closet. I didn’t count them all, but I estimated by counting a few piles and extrapolating by the number of piles.

But if you wear a shirt every day, this is only enough shirts for roughly a year. And I know from *ahem* considerable experience now that even rarely worn old T-shirts, which are typically made from better fabric than modern T-shirts, last at most 20-30 years.

Now, between science fiction conventions, travel, and very occasional clothes shopping, I purchase maaaaybe 10 or so T-shirts per year, which I thought was an excessive habit.

But over 20-30 years, this adds up again to 300 shirts … so by the time that I’ve worn out all the shirts in my collection, I will have purchased enough shirts to fill it up again.

Now the conundrum: most of the people I know don’t buy a lot of t-shirts, and they don’t have a huge library of clothes. So how are they not wearing through all their clothes all the time?

Now, I know my wife buys a lot of clothes (mostly at Goodwill), but she’s power tool girl, and her clothes rapidly get worn out or covered with paint and later used as rags.

But the friends that I know who DON’T seem to buy that many clothes ALSO have a similar strategy. One of them called it “the circle of shirts”: First it’s a nice T-shirt, then it’s an undershirt, then it’s a gym shirt, then it’s a yard shirt, then it’s a rag.

But if people don’t have a huge library of shirts, and they’re not buying a buttload t-shirts, why aren’t they going around in tattered rags all the time?

What do “normal” people do? Go to Target and buy white T-shirts every week, as the six pairs of shirts and undies that they have rapidly disintegrate from the rotation?

I genuinely don't get it.

-the Centaur

Pictured: my collection of T-shirts, some of which do eventually get retired from wear.

[twenty twenty-four day fifty-six]: code rots

centaur 0

Only six months have passed since I last worked on the Embodied AI Workshop website, and now the code will not compile in a horrible mess of broken dependencies. I have tried two or three ways of installing it, including in place, from scratch, and even on a Parallels instance of Ubuntu in case macos was the problem. Nothing works. As a last-gasp effort, I plan on creating an AWS instance, in case Apple Silicon itself is the problem (I suspect it is, as one of the libraries has no Apple Silicon binary packages, and the instructions to recompile from source are roughly five years out of date).

But software is a mess. Occasionally you get something that's awesome (like Python - or Rust! Installation of the Bevy game engine was smooth as a dream) but more often things explode in a mess of unresolvable dependencies, and you're stuck between Apple locking everything down, Windows becoming spyware, and Linux not running anything you want at all.

I'd weep for the future, but I'm too busy hiding from it.

-the Centaur

Pictured: My software consultant, deciding discretion is the better part of valor. Actually, up top Loki has seen the installer for the rock border in the French Quarter, and below he is hiding from him.

[twenty twenty-four day fifty-five]: like it always was that way

centaur 0

According to legend, the man who built this house died in this courtyard. Well, technically, he's the man who oversaw its most recent renovation; the core of the house is almost 75 years old, and on plans for the renovations we found in an old drawer, the courtyard appears to have been a swimming pool. Regardless, when he passed, this big, rambling old house soon became too large for his widow, who moved out, leaving it empty for quite a while, enabling us to get it for a steal during the pandemic.

While we wouldn't have turned down a swimming pool - we were actually more concerned with getting away from the drought and the fires and the burning than we were about where we were moving to, other than "big enough for an art studio and a library" - we much prefer the courtyard, which we've started calling "The French Quarter." But the excellent design of this house - architecturally, most of the windows have an excellent view, and the landscaping slopes away from the house almost everywhere to keep it dry - has a few minor warts on it, including the courtyard: under the overhangs, nothing will live.

The feature that keeps the water away from the house - the landscaping and the big sofits - makes it hard for anything smaller than a bush to live. When we moved in, and put in that little sitting area using paving stones and chairs from my late mother's old garden, I dug up the monkey grass where I put in the paving stones, and used it to fill in the areas you now see filled with rocks. That grass lasted about a season, and by the next year, you couldn't even tell anything had been planted there. It was just dust and weeds, and even the weeds frankly weren't doing too well themselves and could have used a watering.

So, kind of in desperation, we hit on the idea of putting in more stream stone as a kind of a border, which the former owners had put around the fountain. This is something our termite folks have actually been asking us to do around the whole house to create a barrier, but we decided to get started here.

And I guess the surprise is that this stopgap effort looks really good. We sort of expected that it would have looked better than scraggly weeds and dead dirt, but, actually, it looks REALLY good, as if it was always supposed to have had a stone border around the outside.

I guess my point, if I did have one, is that sometimes you do things that you have to in order to patch a problem, but if you pick the right patch, sometimes it seems like it was on purpose.

-the Centaur

Pictured: um, well, I think I said it.

[twenty twenty-four day fifty-four]: totes cheatin it, yo

centaur 0

I now FREELY admit that what I'm doing with the blog is posting, as much as possible, easy posts so I can get ahead on my buffer. Legendary cartoonist Bill Holbrook started the longest running daily webcomic, Kevin and Kell, after he'd built up a multi-week buffer, a process he's still continuing today.

SO! I find it better if I bunch up posts so that I am working on the same thing for a while - this is not just better for mental focus, but also for dealing with problems with your computing infrastructure (it is REALLY frustrating to try to do a quick post when the internet decides to gum the fuck up).

And therefore, I'm doing short, brief posts on the blog, while I build up a library of longer posts, hoping that at some point I'll get a rhythm where I'm always 2-3 days ahead, and can thus put the effort into new posts that is harder to come by when it is 145am and you need to both blog, draw, shower, and let the cat in.

-the Centaur

Pictured: the late night ritual: eat some pound cake, drink some soy milk, read a difficult book. Currently, I'm working through Pattern Recognition and Machine Learning, a book which is available online, and has been almost as useful to me as Probability Theory: The Logic of Science, also online.

UPDATE: This was actually day 54. So I was ahead of where I thought I was.

[twenty twenty-four day fifty-three]: you can’t predict edits

centaur 0

So I'm done with the bulk of my first-round edits for The Neurodiversiverse, and I can report that you can't predict how long an edit letter is going to take. The easy ones end up with a hundred line edits, and the hard ones go smooth as glass.

-the Centaur

[twenty twenty-four day fifty-two]: master of all he surveys

centaur 0

When we finally get superintelligence, I want it to explain to me what cats are thinking. Loki clearly wants something, but it isn't clear what it is. He wants your attention, he wants to go outside, he wants to go somewhere not too far from the house, but he doesn't seem satisfied with you just standing there, nor with you bending down to scratch him, nor with you going anywhere else.

What do you want, for me to just stand here, so you feel safe rolling in the dirt?

There's no pleasing some people.

-the Centaur

Pictured: Loki, in the external cat condo which we got as part of our successful "cat sitting solution".

[twenty twenty-four post fifty-one]: worse than useless

centaur 0

So I recently came across a tutorial for game development that seemed pretty interesting, so I decided to give it a try. The tutorial was in Rust, a new language that I’d been hearing about, and so I thought it would be a good idea to learn that too.

I even found an online playground, https://play.rust-lang.org/, which lets you try out the language in the browser, much like the Go playground: https://go.dev/play/. I quickly started trying out some simple functions that I use a lot in a variety of languages …

… and got stuck right away on Rust’s lack of function parameters.

There’s a whole blogpost https://www.thecodedmessage.com/posts/default-params/ on why this antifeature is actually, in the minds of “Rustians,” is a good thing, but even that admits that the alternatives that the language provides “might seem worse than useless.” 

I’m sorry, I’ve gone through this kind of Stockholm Syndrome thinking before, where users held hostage to the good features of a language start coming up with excuses for its warts. For example, take the Go programming language. Programming Go felt like a breath of fresh air, but it was literally worse than useless for my use case - I had to write the software I wanted in C and then call it from Go. And the language itself had terrible warts from the terrible choices made by the core Go team - at the time I used it, no support for generics, endless proliferating error checks, and worst of all, an overly verbose unit test style which threw out everything we’d learned from Java and Python about how to write tests using semantically meaningful methods like assertIsNotNone or assertIsEmpty.

I’m not saying I’m not going to not learn Rust, nor that I’d never use Go again. Hey, one day I may be a convert! But, based on what I know now, I would never recommend these languages to anyone. My recommendations for programming languages remain the same "Big Three, Plus One": 

  • For most tasks, use Python. 
  • If you need speed, use C++.
  • If you work with a very large enterprise, consider Java.
  • If you’re working with a system that uses a specific language, use that language: C in the Linux kernel, Javascript on the web, Swift in iOS, Java in Android, PHP in WordPress, C# for Unity, and so on.

Many of the alternative languages that you can use - Go, Rust, Scala, Clojure, even my beloved Mathematica, Common Lisp, or J - are actually worse than useless for most tasks, for two reasons. 

  • First, most of them are less baked than the Big Three, and are less ready for developing real applications; they’re not chosen for their fitness to purpose, but instead chosen by zealots who are trying to make a point. Don’t be a zealot trying to make a point.
  • Second, working on these other languages actually detracts from making the Big Three better. The C++ of today is almost unrecognizably usable compared to when I first started using it, and Python and Java are rapidly adding new usability features as well.

That doesn’t mean we don’t try new things. C++ has mostly replaced C, and TypeScript is edging out JavaScript; who knows, perhaps, one day some variant of Go or Rust or Swift will become the dominant paradigm. (But, honestly, I hope not).

Nevertheless, I remember talking to a programmer friend about a refactoring I wanted to accomplish, and he angrily sketched out a better build system which could have solved the problem using a Turing-complete constraint language to figure out the dependencies.

I just remembered the famous quote from the creator of ANTLR - “Why program by hand in 5 days what you can spend 25 years of your life automating?” - and handwrote a script to solve the problem in an hour, and got on with my life.

-the Centaur

Pictured: Some of the older programming language books that I have in my stacks, most of which are now worse than useless for getting things done nowadays - though if you really love programming languages and learning how things work, they're more than priceless, now and forever.