December 2024

TABROOM

Had a short hiccup on Friday night; it was largely because I’d spun up extra capacity but the process of spinning it up didn’t quite finish, alas, for a really stupid reason.  But fortunately it was also quick to fix; the process to get around the stupid reason was fast, and we were back after like 6-7 minutes.  I can’t promise never to have issues, after all; nobody can in tech.  But it’s nicely affirming when the problem is just a little turbulence instead of a full plane crash, especially when I recovered so fast as a direct consequence of some blood sweat & tears I’ve recently put in.

That brings me to a wider point about the rewriting process and the concept of a feature freeze.  I’m trying to not code up new material in the old programming environment as much as possible, except for direct bug fixes and flaws, while I get the infrastructure rolling behind the new framework. However, to some degree that is impossible.  Tabroom’s reality is constantly changing, because you all keep using it.

Even if I never add another feature and only fix bugs and errors, Tabroom must change, simply because the scale increases. We get more traffic year over year, more tournaments, more students, and every one of our end participants uses the tech more heavily too; we bring three devices per person to tournaments now. That growing load represents unavoidable change permanently baked into Tabroom, that will always demands a measure of attention.  Software in active use can never be paused.

So after our fun times in November I combed through our records of moments the database locked up with heavy write traffic, and rewrote every page and query that featured there to avoid them. The big one was the pref entry screen.  Did that cause our corrupted index?  I’ll never know. But it will perhaps make them less likely in the future, and it will definitely make parts of the site run faster and better.

The expanded load also means the software is more unforgiving.  Smaller mistakes become big problems. To a degree the expansion of Tabroom represents an expansion of the world of forensics.  This is good!  But it does demand I keep up with it, so I’ll never be able to entirely focus on the rewrite.

But all the same, I’ve made some good progress there. One big advantage of the new framework is it runs a lot faster on less powerful hardware.  The other big win is that I’m a far better coder than I was twenty years ago; the code I put out after rewriting will be more robust and capable.  I can already feel the system reaping the benefits of both of those things.  I’m not traveling at all in December, either for myself or tournaments, after this weekend.  I’m hoping I can use the stillness to hunker down and turn the corner; I’ve seen its edge, so we are perhaps near to seeing some reality there.

THE OTHERS AROUND

My sister got a new gig already after the old one had a round of layoffs; the new one seems much more comfortable and promising, though, so props to her for landing so quickly.  I continue to have some pretty phenomenal nephews and nieces, as finding things they’ll like during my travels has confirmed for me.  But then, I am somewhat biased.

JUST LITTLE OL’ ME

Welcome to the Holiday Season, such as it is.  I confess a dearth of conventional Christmas spirit, and generally I try to avoid traditional observance of the holidays. For one, Christmas really my dad’s holiday; he always made it a big deal, and since we lost him some 13 or so years ago, his passion for the day adds a tang to the holiday that I find it better to avoid. Don’t take up smoking, kids.

And as it happens, December 25th is the least common birthday of the year, but it was still the birthday of Humphrey Bogart, Jimmy Buffet, Sissy Spacek, Rickey Henderson, and your humble Tabroom programmer.  I therefore prefer to spend the day away from indoor trees and too much rib roast. Instead I go off and find someplace quiet with more outdoor trees.  It works for me.

My European Gallivant was lovely for the most part. I found Munich warm, comfortable and welcoming. Venice was fun as always especially for me having company there — I’ve never actually traveled with people in Europe before, and they spurred me into seeing and doing things I’d not usually find on my own, such as a performance of Verdi’s Otello at the iconic La Fenice opera house. I confess I’m not much of an opera person, despite loving classical music generally.   But it was still great to go if only the once.  And then I swung through Amsterdam for some time in coffee shops reading tech docs, rijsttafel, and cloudy skies.

I confess however that travel to Random European Cities has grown both easy for me, but also less interesting and exotic. I found myself walking around places feeling more at home, but less engaged by them as interesting in their own right as a result.  I intend to focus my wanderings to more rural places and probably further afield in the days to come.

Eat One Street

One of the hardest things to do when traveling alone is choosing a place to eat.  If you’re in a small place, it’s not so tough, but in a city of any size, you’ll have hundreds of choices with nothing to thin the list.  A large group can be helpful in winnowing — this person just had Thai yesterday, and that person is a vegetarian so doesn’t want to go for barbecue, and soon you’re left with just 2-3 logical choices.  Alone, and unpicky, you might have 200.

I used to spend — waste — a lot of time on these decisions. I don’t tend to return to places, except for a couple of special ones. So if I’m in a mid-sized European city with dozens of good options, it’s hard to not feel I might be missing something special by choosing the restaurant with 4.4 stars instead of the one with 4.3.  Sometimes I’d walk around for two hours trying to weigh the visual merits of the places around me. I like walking around neighborhoods, but this particular brand of aimlessness just felt stupid when I was already hungry.

So ten months before Covid closed the world, I found myself in Porto, Portugal.  The first night I arrived, I was tired, so I walked three blocks downhill from where I was staying, and found a long street ranging down the hill that had about a dozen restaurants visible from one end.  The one on the corner was praised by the other assholes on Google, so I went in and had a lovely meal in a crowd that was open and chatty like Americans. The waiter was headed to Istanbul for his honeymoon in two weeks; I plied him with recommendations. I stayed too late, and stumbled back.

And after just landing there with little effort and only one consultation to the mass wisdom of the Internets, I decided to make one element of my next six days in Portugal easy.  The street looked full of nice places, with some variety in cuisine and style.  So, I would just eat this street’s offerings, nowhere else.  And I’d take it one step further, and not check the internet anymore.

And so I spent most of a week in Porto, working by the morning, touring the afternoons, and then enjoying dinner somewhere on Rua da Picaria. You can do much worse, and it took me all of ten minutes to find dinner each night.  I had Chinese bao, Portuguese tinned fish, tapas from a menu that spanned the globe, and more.  I never had trouble finding something I wanted to eat, and never had a bad meal.  The rest of Porto spread around me, untouched except for breakfast, and it was just fine.

It can distort things a little. I ate one street in Munich and first believed it a city full of young people; only after day three did I realized I’d picked a street right between two large universities.  And some places it’s just not possible with any sanity.  Try to eat one calle in Venice and you’re likely signing up for six identical meals of often questionable quality; Venice is too touristy, so too many bad restaurants survive there without worry or hope of repeat business.

It also makes one realize just how much culture is built up around eating. In the USA you can, just by looking, understand the general quality of a restaurant, what type of food they serve, and the protocol for how to behave — do they seat you? Do you order at the counter? Most people would have a hard time explaining why they knew the drill. Abroad, all those cues are useless, and you either have to watch other people do it first, or ask and immediately brand yourself the dumb American. But it’s better to be the dumb American who asks politely, than the one who barges in.

And it’s always better to be the dumb American who just picks a damn place to eat than the one who circles around an entire neighborhood three times trying to decide what the absolute best restaurant is.  There’s no such thing.  You’re probably not going to find the restaurant of the 200 in Porto or Munich or Venice that is ideally suited to you.  So just find the one that looks like it’ll make a soup you’ll remember.

 

November Supplement

At 7:16 AM Central, on Saturday November 16th, Tabroom’s database server had this to say:

2024-11-16 13:16:00 0 [ERROR] InnoDB: tried to purge non-delete-marked record in index uk_ballots of table tabroom.ballot: tuple: TUPLE (info_bits=0, 4 fields): {NULL,[4] \ (0x805CEFD5),[4] u (0x807514D1),[4] ZO(0x82B95A4F)}, record: COMPACT RECORD(info_bits=0, 4 fields): {NULL,[4] \ (0x805CEFD5),[4] u (0x807514D1),[4] ZO(0x82B95A4F)}

Poof goes the ballots table.

A ballot in this context is a data record.  One is created for every judge in a section for every entry in that section.  So someone judging a single flight of debate would have two ‘ballots’; a three-judge panel in a room with six speech contestants would have 18 of them.  Each one tracks what side the entry is on, what order they speak in, when that judge hit start, and whether the round is finished. All the points, wins and losses the judges hand out are stored below it; all the information about room assignments, scheduled times, the flip, and event type are above it. So, it’s a rather critical table.  And it’s large: there are 16.1 million such records in Tabroom, making it the second largest.

At 7:16 CST this morning, Tabroom had to delete just one of those records. Maybe a judge needed to be replaced. Maybe a round was being re-paired and all the entries were dumped. Whatever the reason, a ballot was queued for deletion.  That happens thousands of times on a Saturday. But in deleting that particular ballot, the database server software wobbled just a little bit. Perhaps it hit a very obscure bug. Perhaps it wrote the information on a part of the disk that has a small chemical flaw buried in its atoms, and so it failed. Or perhaps a cosmic ray hit the memory and flipped a zero to 1, and changed our world. However it happened, the table’s index was transformed to nonsense.

An index is a data structure used to speed up reading the database. If you ask for all the ballots in Section 2424101, the database server would have to scan all 16.1 million ballots in Tabroom to deliver the 12 you are looking for. That’s very slow on a large table. So for commonly accessed data, you create an index, which is a record in order of all the Section IDs in the Ballots table. The database finds the range you’re looking for quickly, and all 12 ballots IDs are listed there together.

But indexes aren’t free; you can’t just create them for every data element. Each one takes up space, increasing the disk size of the database. They also slow down writes: you have to update the index every time you create new data. So you only create them for data elements that you search by; the Section ID of a ballot yes, but the time of your speech, no.

That little glitch at 7:16 AM deleted the index records for that one doomed ballot, but not the ballot itself.  Suddenly the number of rows in the index did not match the table. Therefore, the database stopped using it — it knew the index was no longer reliable. The slowdowns, lockups and downtime on Saturday morning is what it feels like to use ballots table without indexes: it starts out slow, and goes downhill from there.

First, I tried the gentle fix: a utility that tries to verify the data and rebuild just the indexes, which it does without any invasive changes to the data itself. If it succeeds, the database just starts working afterwards. It takes about 12 minutes to run on that large ballots table; a fact I learned this morning. And then, it failed.  It can fail for a lot of reasons, but mostly it has a very hard time verifying data that is changing as it operates, which is what a live database must do.

So I had to turn to invasive procedures. What you do is cut off the ability of anyone to access the database, so nothing changes in the data in the middle of your surgery. Then you dump a backup copy of the table. Then you run the most scary command I’ve yet typed into a database:

DROP TABLE ballots;

That’s right, that deletes them all. And then I hope beyond hope that your backup data file is accurate and not itself corrupt. In reality, in my paranoia, I took four backups. Two of the primary database, and two of the replica. That took eight minutes, which included me comparing them against each other to make sure they were all identical. If they disagreed as to how many ballots exist, you then have to try to figure out, or then guess, which one was right.  Today I was spared that.

Then I had to make a choice between the Right Way and the Fast Way to reload the data. Loading up the ballots data takes about 15 minutes. Deleting all the ballots takes about 0.15 seconds, and can’t be undone. So if I do a test run, your downtime is longer. If I don’t test it but the file is bad, then I’d have nothing to recover it from. In trying to shorten the downtime by 20 minutes, I would lengthen it by several hours.

So today, caution won. I took one of the backup files, and loaded it into my test machine. Simply copying the file took a few minutes, and then I got to sit there and watch as it re-created ballots in batches of about 8,500. All 2,000 of them. Each batch takes about 0.45 seconds to run on average, thus it was about 15 minutes of time total of just sitting and waiting as line after line of data was reloaded in, like this:

Query OK, 8770 rows affected (0.260 sec)
Records: 8770 Duplicates: 0 Warnings: 0


Query OK, 8594 rows affected (0.272 sec)
Records: 8594 Duplicates: 0 Warnings: 0


Query OK, 8927 rows affected (0.270 sec)
Records: 8927 Duplicates: 0 Warnings: 0

It’s a real fun thing when you are sitting and waiting and can do nothing while you know everyone else is doing the same. But eventually, it worked. And so I braced, dumped the real database’s  ballots, and ran it again.

And phew, it was fine.

The site came back immediately, though naturally was a bit slow at first because then EVERYONE was pairing their first round at once, which is far from typical. But that worked itself out fast.

And then I got to clean up the resulting mess.  I have 31 terminals windows open with full access to the entire database — better not typo in any of those!  I spun up a bunch of servers to get spare capacity going, and found a different, less grievous bug in the process with that — but that thankfully was Hardy’s fault, and so I shoved if off on him.  And then of course, you know how I get email every time that error message screen happens? I got to clear out the 92,822 error reports that were queued up in the email server before any other messages would send.

And then I wrote this post.

After a downtime, you want to take apart the causes and figure out how to make it not happen again that way. The last year’s downtimes were all capacity related; we had too few resources for too many users. It was mostly me figuring out how powerful our new cloud system was, and sometimes wasn’t. We also lacked a system that could quickly bring new resources online when I guessed short. I spent a fair chunk of August building a system to help; now it takes me about 5 minutes to spin up new servers, instead of an hour.  So, neither of our episodes this fall were caused by that.

The one in October was in the category of “my fault, preventable, but super unlucky.” It’s the type of thing where there does exist a level of care that might have prevented it. But practically speaking that level of care would also paralyze me if I adopted it; I would do nothing else if I were that fanatic about validating code and queries. So instead, I created some automated systems to check for slow queries during the week and notify me, to try to find these issues before they explode. That system has already ferreted out a number of annoyingly — but not tragically — slow functions. These things only blow up when there’s hundreds of them running at once, but if they don’t exist at all, then that will never happen instead of rarely happening.

Today’s episode was worse: there’s no way for me to prevent errors deep in the underlying database code. I have neither control nor capacity to address it. I will probably schedule a very early morning downtime in the next week or so — or maybe over the Thanksgiving break — to do a full rebuild of all the database tables, and to deep scan the disk they live on. That’s worth doing anyway; rebuilding the tables gets rid of empty spaces that once held deleted records, and makes the whole thing run a few percent faster.

And I might just move all the data onto a new disk altogether. That’s proactive and reduces some risk, but the truth is I might be chasing chimeras. And that’s life with computing. Technical complexity can cause a lot of grief. Human error causes even more. And sometimes, it’s neither; it’s just the stars decided today is not your day, and you’re going to know it.

And such a day was Saturday the 16th of November. It’s been many years since we’ve had a problem of this particular flavor; may it be many years before we have another.

The Channel Island Challenge

The Channel Islands are one of the least visited national parks in the system, even though they’re only a few hours drive from LA.  They’re protected from the hordes by a moat: you need to take a hour’s boat ride.  There’s no roads webbing these islands.  There’s no access for those who prefer to experience nature from a couch in their poorly driven RV.  So Edward Abbey’s theory that cars shrink the size of our parks rings true here; the Channel Islands are quite small in land area, but if you stand in the middle of Santa Cruz Island, it feels enormous.  We do express distance in terms of time, not miles, and in this park twenty miles is “all day” instead of “half an hour” away.  Valleys paint upwards in all directions, and there’s no little concrete bunkers toilets anywhere nearby.  There is a campground, but unlike most park campgrounds you’ll find no generators, no RVs, or even showers here.  They provide you with a couple water spigots that swarm with bees, and lockers to secure your food from the other wildlife.

August 2015

I went there for the first time almost ten years ago.  I was in LA for a trip that was nominally work related, but was mostly about visiting friends in LA, so I tacked on this side trip to the end of it.  A day to drive to Ventura, a day to sail out and hike around, and then a day to brave the LAX Airport and return east.  It was late August, a spectacularly clear day to a New Englander, ho-hum to southern Californians.

The boat ride turned out to be a bonus I did not plan for — the Channel that you cross to the eponymous islands is a major Pacific migratory route. On that August morning there were dozens of whales and hundreds of dolphins playing and swimming around during their long commute. A fair few people were on the boat just for the marine show, and would never set foot on the actual islands.  I can’t say they chose their day wrong, though they missed much.

I landed on the island and almost everyone else went off to one of the organized kayak tours on the island.  A volunteer ranger asked those of us who were hiking to meet briefly for a short introduction, and I was the only one.  “Did I choose wrong?” I asked.  “Is this not a great hiking place?”

“No,” he assured me.  “Usually it’s about half and half.”

“I got lucky then,” I said, and meant it.   And I asked him about my choices.  There were two trails that were interesting to me; one went up the spine of the island, up the central hills to a high point at the top.  The other followed the east coastline bluffs and ocean below.  Both end at some point north of here, and you had to turn back. I didn’t think I could do both.  Which should I pick?

He looked me up and down and decided I was Worthy.  He said “It’s not on the map, but the trails do connect in a loop.  If you want to, just follow the coastal route here, and at this point ” — he stabbed the map with his thumb — “you’ll see a fork inland. There’s even a sign there, I don’t know why the maps don’t print it.  If you’re feeling like you have enough time and energy and are up for a little bit of climbing, take it and it’ll join up with the central trail in the hills.”

I had my mission.  I launched off along the bluffs, watched the green clear waves crash below, and drifted my hands along the tops of the tall grass dancing in brown waves.  The island is an open clean place, the world around visible for miles, without another soul around to bother anyone. My late Mémère would dub it “the kind of place you can fart as loud as you want”.  You can even see over the channel back to the suburbs mainland, but I tried to avoid looking that way, and pretend instead I was here on this island in an earlier, unmolested and unlit age. My cell phone then had zero signal.  I considered chucking it into the ocean, but the sentiment lost to my impulse not to pollute the waters.

I reached the fork easily enough — this trail was mostly flat after a short climb up to the top of the bluffs. So I ate a quick lunch, and launched up the left fork with gusto. The Ranger had declared me fit and competent to do it!  Here I go! I climbed a hill, and then the one behind that one, and then the one behind that. The ocean behind me grew bigger and bigger the higher I got, and the breeze was a little cooler. Another hill, another. It was the type of landscape where you couldn’t see the full peak, just the next one you had to reach once you crested the last.

As I climbed up the series of hills, I started to look at my watch. I could hear the boat operator’s warning: “If you’re a day tripper, and you don’t make the 5:30 departure time, congratulations, you’re now a camper!”  And the minute hand was still relentless.  So I had a choice.  I could turn back now and make the boat landing fine, but not if I went much further.  Or I could commit and go forward, hoping I had enough time to cover the unknown miles and hills between me and the end of the loop.  Maybe the next hill crest was the last one, and I’d see the boat launch an easy mile or two away.  But the trail could also loop around a lot more than I knew, and I’d still be looping when my ride departed, and my phone was not yet capable of telling me exactly where I was.

I summoned my nominal adulthood, my faint legacy of Boy Scout wisdom, and my general respect for nature in its many forms, and decided to take the prudent path. I was a rule follower as a kid, and old habits die hard. It didn’t hurt that I was nearly out of drinking water, and the sun was hot. Downhill sounded good to me right about then. So I turned, and covered ground I’d crossed before, and made the boat with 40 minutes to spare.

And I almost immediately regretted it.  We attack ourselves most harshly for the things that make us most ourselves, after all.  “You always wuss out of things like that. You never get the best stories because you’re risk shy.”  I could hear the other 9 year olds mocking me for not jumping off the higher diving board.  And that was just the start: that incomplete loop bugged the hell out of me for years.  I strongly suspected that I had turned around at the three quarters point, and therefore my caution made my return much harder.  If I’d just gone forward a bit more, I would have punched over the top and been treated to an easy gradual descent over new terrain. My pedometer, and a trail map later confirmed it; I’d managed to hike almost 14 miles on a 9 mile trail loop.

The memory of it caused me to push myself more.  I started hiking more seriously, chosing the longer paths and harder loops.  I carried a bit more gear, a bit more water and some filters as a matter of course, extending my range.  I looked beyond the most popular hikes and started choosing the less traveled ones, the type that had signs warning you and made you sign in and out of a little book so they’d know if they had to send a chopper to come collect your body afterwards.  I found valleys and notches and hilltops I don’t think I would have before, if I didn’t have to beat myself up about wussing out on the Channel Islands.

But of course, despite that, I still had unfinished business on the Islands themselves.

March 2023

Work brought me to southern California again in March of 2023, and it was finally time to address this nonsense. I booked a boat ticket, another stay in Ventura, and packed my good boots to a tournament that otherwise would never require them.

This time, I would tackle the loop from the other direction.  That would get me up the spine and done with the big climb first, and then I could descend slowly in full vision of the flat bluff-side path for the end. I had solid boots and poles to counteract my naturally ill-coordinated nature. I had the full route on AllTrails now so I would know exactly where I was. And I had twice as much water, even though the rain was rainy and I would not need it all.  And once the boat released us, I started right away up that hill spine trail, determined to see just how much time it actually took me to do that loop.  I would conquer this unfinished challenge now in full spirit, and yet also know the full extend of my decade-ago shame.

That winter was a true California rainy season, the first one in years. The island was shocking green, not sere and brown. Last year’s tall grasses were matted down while their green children grew up around them, and the trees and bushes exploded with flowers. Clouds drifted back and forth, caught by the hilltops.  For a good hour, I had no view other than the mist that clouded around me.  My rain jacket came out early and stayed on the rest of the hike.

But rain doesn’t stop a New Englander with a penchant for the outdoors.   I climbed up a bowl valley, then followed switchbacks up to a ridge line. This view was more compact and hemmed in, thanks to the clouds, but it still felt like a big place, its size defined by the limits of how far we could go on foot. Our world is larger when we’re on our feet. Consider how big a state Rhode Island seems to be if you’re in a car; but now think about how large it is if you have to walk from Newport to Warwick.

I wasn’t totally alone this time, but saw a whopping six other hikers along this eleven mile trail. If you change your pace just a little it’s easy to avoid other hikers, and maintain your own bubble. I surprised a few foxes, following along narrow saddles, and kept going.  I could taste the easy victory ahead, and looked forward to sitting on the clifftops for a hour afterwards watching the waves, before I had to return on the boat.

I didn’t stop for breaks much, apart to snap a very few photos, and kept my pace going. After a while, the trail drifted downwards and I found myself below the cloud line again. I could see the open plain and bluffs and green grasslands again, but had not yet reached the point where I’d turned back last time around.

And so it was here that my self-hating theory of cowardice and shame, a guidestar of self-improvement that had driven me up hundreds of miles of trails and backwoods over the last decade, was proven total bullshit.  I marched along the circuit of the bluffs again, less spectacular this time because the emerald green waters were pregnant with mud runoff from those rains. I took the last three miles at a fast pace, no stops, and strolled up to the boat launch with time to spare.

But… not that much time.  I was the last one on the boat, and about 20 minutes away from being declared a camper.  I now know that I had not been a wuss at all ten years ago.  If I had not turned around, I would have been absolutely screwed. Whatever the ranger saw in me that led him to suggest that I could do the full circuit and be just fine was apparently a mirage.

People tend to attribute a lot of physical ability people of great height, but the fact remains, I wouldn’t have ended up a 6′ 6″ debate coach if I had any athletic talent.

I was a bit subdued on my muddy boat trip back to the civilized shores. In the script, I’d be now thinking “See! I totally could have kicked that islands ass all along!”  But instead I was observing how my own ass had been gently kicked today. I was wiped out and stiff, ready to wash off all that mud and nasty exercise, then go drink a bucket of water and mildly overeat. One of my guiding stars of the last decade in nature had been proven a lie.

When you travel with people, you don’t tend to focus on others around you.  Travel alone, and you can hear an awful lot of ridiculous things. Overhead bullshit in National Parks can be pretty special. One lady at Acadia complained how the rocky shoreline wasn’t better designed for her stiletto heels. A German tourist in the Canyonlands wondered why the mesas were built with no access to the top. A wheezing dad started kidding-but-not-kidding about wanting an escalator at Zion. And a redfaced man yelled at a park attendant who stood between his RV and an unstable cliffside road.

Most of the real nonsense boils down to the expectation that the park was created for us to enjoy. In a legal sense, that is true, but the park is not just lines on a map and the legal fictions that force us to respect that part of the earth more than the rest. Nature itself is not there for our purposes. The cliffs and bison and trees and rains move to their own agenda, and if you try to count on them to follow your schedule, instead of adapting to them, you’ll just be disappointed. Santa Cruz Island was not built, is not crossable in an afternoon, and does not care about how long you have until the boat departs.

So I unlearn the lesson. Caution is good; it’s one of my life goals to never meet a search and rescue party the hard way. But I think the real lesson was one I never noticed; instead of spending afternoons in nature, since that failed challenge in 2015, I’ve been spending weeks there.  When the path ahead and your ability to follow it outstrips your schedule, the easiest thing to change sometimes is the schedule.  So next time I go to the Channel Islands, it’s time to bring a tent.

November 2024

TABROOM

The rewrite continues apace.  I still feel stuck in the cellar, as it were, working on foundational framework issues instead of the ooh-pretty of an actual page.  But building software is often like making a building; the stage where it looks like a giant pit of dirt seems to go on forever, but once you see a support beam sticking in the air, it starts looking like a real building very quickly after that.   Or at least, so I hope.

I had a fun time today upgrading the ol’ laptop to the latest version of the Linux distro I run.  In the process, somehow this version of Chromium combined with my particular Radeon drivers inverted all the colors of all pages and plugins inside the browser.  I mostly use Firefox anyway, but still.

I gather the Reddits have noted that my logo-hover Easter egg is feeling dumpy.  One enterprising user complained that I waste time on these things, and haven’t updated my “90s style website”. Please. Tabroom’s current design is firmly rooted in the early 2010s era web. And this may shock you, but overhauling a site’s design does take a touch more time and effort than throwing up a goofy quote under a logo; and if the latter gives me a moment of happiness amidst a very large todo list, then why begrudge me of it?  More to the point, the outward appearance is not as important a priority as the inward functionality, which has changed an awful lot.

But while Tabroom’s design is not of the 90s, I did a core chunk of my growing up then.  So I have switched to a quote from that era, a core cinematic masterpiece of the transition between the 80s and 90s.

THE HUMAN SIDE

I’ve been coralling and cataloging the vast swathes of photos I’ve taken over the years into something approaching order, and might even print some of them out so I can enjoy them, after hiking hundreds of miles and spending so much time taking them in the first place.  It’s amazing what following through can do.

Since I go away for some of the heavier holidays, I enjoy the lighter ones with family.  This was my third Halloween trick or treating with my nephew.  The first time around he was inert, a 10 month old being hauled around and gawked at.  Last year he was just barely able to say “Ap-eee Allow-een” but not really “Trick or treat!”

This year he still didn’t quite understand the purpose of the ritual — his parents don’t give him much in the way of sweets and sugar, so the purpose of the outing is more the experience.  His mother mostly hopes for Reese’s cups that she can abscond with.  But he’s now nearly three years old, and he has Opinions about what he wants to do, and they did not include the ritual of trick or treat.  He is mostly interested in pressing buttons that make noise. Halloween lawn ornaments looked to him like the type of thing that should do that.  Cue an evening spent chasing him running into people’s lawns to keeping him from bashing their stuff.  But we managed to depart before his first major meltdown and get him to bed almost on time, so it was a good night.

I have sharply reduced my news and social media intake due to Events.  I’ve grown very tired of the competing fear stories, true or not — one’s energy is finite, and there’s a certain gradiosity we do cultivate in our debaters and speechies that Being Informed matters, and that it is essential that we stay on top of these questions of great policy. So right now my phone is a much less consulted device, and my book reader is front and center.  It’s helped me write more, too.

WHERE ARE YOU

This month, I’m headed to Venice for Thanksgiving then a brief sojourn to Amsterdam before returning to Austin for the Longhorn Classic.  Venice is now an old friend, that city that I should probably hate but instead have loved.  It’s a good time to go back to some old favorites, I think, and be at peace in remote shores.

I haven’t planned anything yet for my birthday, but I can promise you it will not be spent here moping.