You know, Lisp was by no means a perfect language, but there are times where I miss the simplicity and power of the S-expression format (Lots of Irritating Silly Parentheses) which made everything easy to construct and parse (as long as you didn't have to do anything funny with special characters).
Each language has its own foibles - I'm working heavily in C++ again and, hey, buddy, does it have foibles - but I always thought Lisp got a bad rap just for its format.
-the Centaur
Pictured: a Lisp function definition (with the -p suffix to indicate it is a predicate) with the side effect of printing some nostalgia, and executing that statement at the Steel Bank Common Lisp command line.
What you see there is ONE issue of the journal IEEE Transactions on Intelligent Vehicles. This single issue is two volumes, over two hundred articles, comprising three THOUSAND pages.
I haven't read the issue - it came in the mailbox today - so I can't vouch for the quality of the articles. But, according to the overview article, their acceptance rate is down near 10%, which is pretty selective.
Even that being said, two hundred articles seems excessive. I don't see how this is serving the community; you can't read two hundred papers, nor skim two hundred abstracts to see what's relevant - at least, not in a timely fashion. Heck, you can't even fully search that, as some articles might use different terminology for the same thing (e.g., "multi-goal reinforcement learning" for "goal-conditioned reinforcement learning" or even "universal value function approximators" for essentially the same concept).
And the survey paper itself needs a little editing. The title appears to be a bit of a word salad, and the first bullet point duplicates words ("We have received 4,726 submissions have received last year.") I just went over one of my own papers with a colleague, and we found similar errors, so I don't want to sound too harsh, but I still think this needed a round of copyedits - and perhaps needs to be forked into several more specialized journals.
Or ... hey ... it DID arrive on April 1st. You don't think ...
-the Centaur
Pictured: the very real horse-choking tome that is the two volumes of the January 2024 edition of TIV, which is, as far as I can determine, not actually an April Fool's prank, but just a journal that is fricking huge.
So today, I found out that Uncle Paul back there is the same age my dad would have been, were he living - forty years older than me. But Dad died almost twenty-five years ago, and Uncle Paul looks younger than my dad did when he died. Which is amazing, because Uncle Paul is about to turn ninety-five. And he's still clear, active, getting around - and even driving. As my Uncle Bill put it once as we were leaving a Thanksgiving dinner, "Wait up. You're ninety, and I'm seventy, and I can't keep up with you? This is bullshit."
Tabbouleh has indeed been made from the tomatoes. I have always been self-conscious about what I cook - I rarely do traditional recipes on the nose, for example using heirloom tomatoes and cinnamon, cumin, allspice and nutmeg in addition to salt and pepper - but I do work at them. I'm using Aunt Nagla's parsley cutting technique and chef Nicola's lemon-soaked bulgur wheat technique and my wife's green onion recommendations to leave in the leafy greens and the traditional lighter olive oil that my parents used. And I spice to taste before finishing - the last bite of which literally made me stagger, it was so good, to me at least.
But whether people actually like it is an open question. This time, for Easter, on the potluck planning thread, someone asked for it specifically, someone else gave me the thumbs up when I said yes, several people complimented me while we were eating - and the family ate almost the whole bowl.
So they didn't NOT like it, impostor syndrome be damned.
Actually, it will become tabbouleh, vegan kibbey nayye, tomato sandwiches, crazy susan salad, and maybe burger garnishment.
But the principle stands: I am creating some buffer, as I had before GDC, in case Easter goes kazoo. So, please enjoy this variety of tomatoes (heirloom NC, heirloom Mexico, on-the-vine stripped of the vine, and conventional slicers).
So! You take one of those double-row brushes (see detail below) ...
... and apply it to one of these fuzzy creatures in shedding season (see detail below) ...
... and, violin, you get a tribble:
As far as I can tell, these artisan, hand-crafted tribbles are, unlike Dr. McCoy's version, not born pregnant.
If only most problems we face in this world could be solved as easily as "stop feeding the invasive species without natural predators." And, in fact, like not feeding the trolls, many of them can.
However, cat fuzz is not one of those problems. For decades, I put up with my pets getting horrible tangles and mats during shedding season, great lumpy wads which had to be cut or picked off - almost like tribbles.
But, when my wife and I got those double-pronged brushes and began brushing the cat every day, the mats went away. Though we do have now a tribble proliferation problem, we don't have unhappy cats.
Solving some problems requires disengaging the behavior that creates it (like passing on chips, margaritas and dessert for your problem waistline); others require active maintenance to prevent them from happening (like brushing for the problem of keeping your teeth).
What problem are you facing that would go away if you stop feeding it - or start brushing it?
... your contributions to my productivity are invaluable.
I do not know how I could remember to get everything done without you.
-the Centaur
Pictured: my whiteboard desk, after Loki sat on it; and while I didn't catch him in the act this time, I have caught him doing it previously, and there we are.
... he's just going to survey it from the safety of the inside.
Lots of work on Embodied AI #5 and Clockwork Alchemy and the Neurodiversiverse, more tomorrow. Until then, please enjoy the above pictures of a cat.
-the Centaur
Pictured: Loki, who for some reason wants to look out the window on the opposite side of the room - perhaps because there's more activity out in the trees than in the little courtyard behind him. Also behind him, a sofa modified by my wife Sandi, and one of her paintings.
Apparently this wonderful phenomenon springs upon us, then is gone, almost entirely in the period when I am normally at GDC ... a transient frosting of beauty, dispersed by the wind almost as soon as it falls, like snow dissolved by rain ... but, for whatever reason, this year I got to see it. Cherry blossoms, I presume?
yeah, this was today, around 9am. so i've been up since six-thirtyish am if you count the end of my redeye flight, and it's two-thirty am, and i can't even do the math on that, twenty hours ish? and i've been going all day thanks to meetings and such.
SO! I have no topical image for you, nor a real blogpost either, because I had a "coatastrophe" today. Suffice it to say that I'll be packing the coat I was wearing for a thorough dry cleaning (or two) when I get home, and I will be wearing the new coat my wife and I found on a Macy's clearance rack. But that replacement coat adventure chewed up the time we had this afternoon, turning what was supposed to be a two hour amble into a compressed forty-five minute power walk to make our reservation at Green's restaurant for dinner.
Well worth it, for this great vegetarian restaurant now has many vegan items; but it's late and I'm tired, and I still have to post my drawing for the day before I collapse.
Blogging every dayyszzzzz....
-the Centaur
Pictured: Green's lovely dining room, from two angles.
I really like this shot, and reserve the right to re-use it for a longer post later, yneh. But it captures the mood at the near-end of my trip to the Game Developers Conference: San Francisco, both vibrant and alive, and somehow at the same time a vaporous ghost of its former self.
SO! My Facebook AND my credit card were both hacked within the last few months, so I was understandably freaked when I logged into the Library the other day and got a security warning. This SSL warning sometimes shows up when your network configuration changes - or when someone is trying to hack you - so I got off the conference network and used my phone's mobile hotspot. Unfortunately both the Library's WordPress control panel AND the main page showed the error, and I got a sinking feeling. Credit card got hacked a few months back, remember? And when I checked the certificate ... it had just expired.
Assuming that whatever service I use for SSL had expired due to that credit card issue, I tried to track it down in the WordPress control panel, but pretty quickly decided that digging through notes, credit cards and passwords in a public conference hall was one lapse in opsec too far. Later that night, I tried resolving the SSL issue, but found that something was wrong with the configuration and it couldn't update itself. Exhausted after a long day at the convention, I decided to get up early and attack the problem fresh.
The next morning, I found I had apparently set up WordPress to use an SSL tool which didn't play nice with my hosting provider. (I'm being deliberately vague as y'all don't need to know all the details of how my website is set up). Working through the tool's wizard didn't help, but their documentation suggested that I probably needed to go straight to the provider, which I did. After digging through those control panels, I finally found the SSL configuration ... which was properly set up, and paid through 2025.
WAT?
I re-logged into the control panel. No SSL warning. I re-opened the website. No SSL warning. I doublechecked on both another browser and another device. Both listed the site as secure.
As best as I can figure, yesterday afternoon, I hit the website in the tiny sliver of time between the old certificate expiring and the new one being installed. If I was running such a system, I'd have installed it an hour early to prevent such overlaps, but perhaps there's a technical or business reason not to do that.
Regardless, the implementation details of the "website is secure" abstraction had leaked. This is a pervasive but deceptively uncommon problem in all software development. Outside the laws of physics proper, there are no true abstractions in reality - and our notions of those laws are themselves approximations, as we found out with Einstein's tweaks to Newton's gravity - so even those laws leak.
Which brings us to the abstractions we have in software. In one sense, they're an attempt to overcome the universal growth of entropy, in which case they're doomed to ultimately fail; and they create that order with a set of rules which must be either incomplete or incorrect according to Godel's Incompleteness Theorem, which means they'll ultimately either fall short or get it wrong.
When developing and maintaining software - or deploying it and managing it in production - we always need to be on the lookout for leaky abstractions. We may think the system we're working with is actually obeying a set of rules, but at any time those rules may fail us - sometimes spectacularly, as in when my backup hard drive and internet gateway were struck by lightning, and sometimes almost invisibly, as in when a computer gets in a cruftly state with never-before-seen symptoms that cannot be debugged and can only be dismissed by a restart.
So my whole debugging of the SSL certificate today and yesterday was an attempt to plug a leak in an abstraction, a leak of errors that created the APPEARANCE of a long-term failure, but which was ACTUALLY a transient blip as an expired certificate was swapped out for its valid replacement.
What's particularly hard about leaky abstractions, transient failures and heisenbugs is that they train us into expecting that voodoo will work - and consciously trying to avoid the voodoo doesn't work either. On almost every Macintosh laptop I've used that has had wireless networking, it can take anywhere from a few seconds to a minute for a laptop to join a network - but once, I had the unpleasant experience of watching a senior Google leader flail for several minutes trying to get onto the network when I had to loan him my laptop to present in a meeting, as he kept switching from network to network because he was convinced that "if the network we're trying to join is working, it should immediately connect." Well, no, that would be nice, but you're sending bits over the fucking air like it was a wire, and connection failures are common. This was a decade and a half ago, but as I recall I eventually convinced him - or he got frustrated enough - to stop for a moment, after which the laptop finally had a chance to authenticate and join the network.
Debugging software problems requires patience, perseverance - but also impatience, and a willingess to give up. You need to dig into systems to find the root cause, or just try things two or three times, or turn the damn thing off and on again - or, sometimes, to come back tomorrow, when it's mysteriously fixed.
-the Centaur
Pictured: a blurry shot of downtown San Francisco, where the abstraction of taking a photo is leaking because of camera movement, and the same intersection, with less leakage from motion.
The awards ceremony for the Independent Games Festival (IGF) and the Game Developers Choice Awards (GDCA) are held back to back on Wednesday nights at GDC, and I tend to think of them as "the Game Awards" (not to be confused with the other award ceremony of the same title).
The awards are always a mixture of the carefully scripted and the edgy and political, with plenty of participants calling out the industry layoffs, the war in Gaza, and discrimination in the industry and beyond. But one of those speakers said something very telling - and inspiring.
See that pillar on the right? Few people sit behind it willingly; you can't see the main stage, and can only watch the monitors. But this year's winner of the Ambassador award told the story of his first time in this hall, watching the awards from behind the pillar, wondering if he'd become a "real" game developer.
Well, he did. And won one of the highest awards in his industry.
Who knows, maybe you can too.
-the Centaur
Pictured: Top, the IGF awards. Bottom, the GDCA awards. I don't have a picture of the Ambassador Award winner because I was, like, listening to his speech and stuff.
At the Game Developer's Conference. I hope to have more to say about it (other than it's the best place to learn about game development, and has the awesome AI Summit and AI Roundtable events where you can specifically learn about Game AI and meet Game AI experts) but for now, this blogpost is to say, (a) I'm here, and (b), I'm creating some buffer so tomorrow I can write more thoughtfully.
Yeah, there are a few people here. And this isn't the half of it: it gets really big Wednesday.
When you need to solve a problem, it's generally too late to learn how to solve the problem.
Contra Iron Man's assertion "I learned that last night," it's simply not possible to become an expert in thermonuclear astrophysics overnight. (In all fairness to Tony Stark, he was being snarky back to someone mocking him, when he was the only one in the room who read the briefing packet). The superintelligence of characters like Tony Stark and Reed Richards are some of the most preposterous superpowers in the Marvel Universe, because they're simply impossible to achieve: even if you ignore the fact that we can only process like 100 bits per second - and remember around 1 bit per second - and learn things in the zone of proximal development near things we already know - there's too much information in a subject like astrophysics to absorb it in the few hours of effective concentration that one could muster for a single night. Take an area I know well: artificial intelligence. A popular treatment of AI, like Melanie Mitchell's Artificial Intelligence, a Guide for Thinking Humans, is a nine hour audiobook, and drilling into a subarea is fractally just as large (a popular overview of deep learning, 8 hours - The Deep Learning Revolution; a technical overview of robotics, 1600 pages - The Springer Handbook of Robotics; and so on). You just can't learn it overnight.
So how do you solve unprecedented problems when they arrive?
You learn ahead.
If you truly need to learn something esoteric to save the world, like thermonuclear astrophysics or the correct sequence of operators for the UNIX tar command, then it's too late and you're fucked. But if you have a hint of what your future problems might be - like knowing you may need to try a generative deep learning model to help solve a learning problem you're working on - then you can read ahead on that problem before it arises. You may or may not need any specific skill that you train ahead on, but if you've got a good idea of the possibilities, you may have time to cover the bases.
Case in point: I'm working on a cover design for The Neurodiversiverse, and we're going to have to dig into font choices soon. Even though I've been doing cover design for about ten years, graphic design for about thirty years, and art for about forty-five, this is calling for a level of expertise beyond my previous accomplishments, and I'm having to stretch. When we go into the Typographidome, it will be too late to learn the features that I need to pay attention to, so I'm reading ahead by working through the third edition of Thinking With Type, which is illuminating for me all sorts of design choices that previous books simply did not give me the tools to understand. I may not need all the information in that book, but it's already given me some tools that help me understand the differences between potential font choices.
Alternately, you can work ahead.
If learning it per se isn't the problem, you may be able to do pre-work that helps you solve it. Practice, if the problem is skill or conceptual variation; or contingency planning, if the problem is potential blockers. You can't practice or plan for everything, but, again, you can cover many of the bases.
The other case in point: this entire blog post is a sneaky way to extend my blog buffer, using an idea I've already thought of to give me one more day ahead in the queue, leaving me adequate time and effort set aside to work on the series of posts that I plan to run next week. I don't know what's going to happen as I go into this interesting week of events ... but I already know that I'm going to be crunched for time, and so if I complete my "blogging every day" series ahead of time, then I can focus next week on what I need to do, instead of scrambling every day to do a task that will detract from what I need to do in that day.
So: learn ahead, and work ahead. It can save you a lot of time and effort - and avert failures - later.
On the other end of the health food spectrum, we present this lovely tomahawk steak, from Chophouse 47 in Greenville. They don't even normally serve this - it was a special - but it came out extremely well (well as in excellent, not well as in well done; I had it medium rare, as it should be). And it was delicious.
Even though I can't eat them very often, I love tomahawks, as they're visually stunning and generally have the best cooked meat of any steak cut that I know.
Also, you can defend yourself from muggers with the bone.
-the Centaur
Pictured: um, I said it already, a tomahawk steak from Chophouse 47.
Thanks, mold, for making me suspicious of every new pummelo, no matter how fresh and delicious. When I have actually gotten sick off a food, sometimes I develop a lifelong aversion to it - like chili burgers, lemon bars, and pump-flavored sodas, the three things I remember eating before my worst episode of food poisoning. However, apparently finding something rotten just as you eat it is a close second.
Sigh. Here's hoping this fades.
-the Centaur
Pictured: a tasty and delicious pummelo, but even so, I can't look at them the same. Is there an evil demon face embedded in that, thanks to pareidolia?