Perfect Timing

Thursday, November 30th, 2023 07:54 pm
flwyd: (xkcd don quixote)
In mid-October I had a close call with COVID after a family gathering. "Oh, I didn't realize there was a new seasonal COVID vaccine out. After I recover I should probably get that." But of course that's never the top thing on my mind.

Yesterday at work I realized that my brain wasn't being super productive, and my last meeting ended at 3. So at 2 I poked around my local pharmacy websites to see if there was an opening. 4pm at King Soopers, perfect.

At 3:40, the fire alarm in my office went off. "Great, this is when I was going to leave anyway." Walk over to King Soopers, stand in line for a few minutes, wait in a chair for a few minutes. A COVID shot in my left arm, a flu shot in my right arm, super convenient.

I walk back to work and notice everyone's still standing around, some doing the "my feet are cold, the sun is going down" shuffle. Couldn't have planned it better.


In other news, today was my 14th Googleversary. As 2010 unfurled, with the Operation Aurora hack and a big internal "pivot to social" and a consistent Google product experience, it's long felt like I joined during an inflection point. It's felt like there was another inflection point in the late 2010s. Google felt different, which isn't too surprising because the world has also felt different. (And this was before the pandemic.) I miss the anything-goes, we're-still-figuring-this-out Internet of 2009.
flwyd: (spencer hot springs feet)
For about five months there I was either getting ready to do a thing on a date, or doing a thing on a date. By mid-May I was focusing most of my free time getting ready for Untamed festival at the beginning of the week or the trip to DC to lobby Congress followed by the jaunt around the Chesapeake Bay. After that trip I quickly got things prepared for ARRL Field Day.

At the beginning of July I decided to go to Burning Man, and also that I was going to figure out a shade structure, so I spent several weekends getting that dialed in, attending Ranger training, getting ready for Dragonfest at the beginning of August, and fitting in all the Colorado Shakespeare Festival plays. After Dragonfest I had two weekends to get everything packed for Burning Man, plus the sudden addition of making sure a good friend could come along at the last minute.

When I got back from Raining Man I spent two weekends unpacking and decompressing, then ramping up for the Peak to Peak Byway 105th Anniversary ham radio special event on September 30th. That was a big success, with a dozen ham radio clubs setting up stations at three sites (Estes Park, Ward, and Black Hawk), and over 600 contacts. The site I helped organize, a blocked turnout at Mile Marker 41, had more than a dozen people participate, operating two stations with over 450 contacts (being in the national forest and thus eligible for Parks on the Air really helped attract attention to our stations). Band conditions were great; we had a constant stream of callers on 20 meters and were making contacts on 15 and 10 meters until 3pm when we decided to tear down due to nearby lightning.

After that, it was time to get ready for my sister-in-law's wedding in mid-October, preceded by a visit by my other sister-in-law, her husband, and a four-year-old, so lots of house cleaning and reorganizing for safety. (Make sure to keep the liquor out of reach of the toddler, and also of the alcoholics.) I remembered a little late in the game that I was supposed to get a suit that would fit a gem theme; Men's Warehouse fortunately had a nice purple three-piece option, and Converse.com had bright purple sneakers in my size. It turns out most of the family interpreted "gem-colored" as either green or purple, so we matched without over-planning things. I'm also now "that family member with a big truck", so there was a trip to pick up wedding stuff, an evening of rearranging the bed to fit the rest of our stuff, and another mother-in-law visit to return all the boxes of stuff. The wedding was lovely and went smoothly, but COVID made an unwelcome appearance, claiming most of the family after returning home. After two adventures in positivity last year my immune system managed to stay negative this time around, but I felt like crap all week anyway.

Last week was a climate and environment town hall with Senator Hickenlooper that CCL had suggested in our lobby meeting in June. This was another long-awaited event, but fortunately other people did most of the work and I just had to send some email, brainstorm on quesitons, and cheer from the sidelines.

Now that it's the end of October I've finally found myself in a glorious state of not needing to urgently prepare for an impending deadline. Advent of Code is coming in December, of course, but I've already got my runner, generator, and other infrastructure ready and I'm studying the Julia programming language as time allows. And I need to start emailing folks who are interested in seeing the solar eclipse in Arkansas in April, but there's still several months before we need to think too hard about logistics.

So it's finally time to chill. I spent the snowy weekend taking care of non-urgent tasks like cleaning a year's worth of papers off my desk, de-toddlering the house, and replacing the obnoxious lightbulbs. I can restart game days (probably targeting Thanksgiving weekend). I should probably schedule all the health care appointments I haven't done this year. There's also low-priority radio tasks to get to, like troubleshooting the transceiver that suddenly stopped working at Untamed, figuring out how to use digital modes on the sBitx I excitedly bought last year and have barely used, and maybe designing a semi-permanent home antenna setup. Maybe I'll start learning Morse code. And oh hey, look at all those books I haven't read.

Shelf Care step 2

Saturday, November 12th, 2022 11:08 pm
flwyd: (escher drawing hands)
Over Memorial Day weekend I helped my parents move thirty five years worth of stuff out of a storage unit. Some simple math suggested they'd spent tens of thousands of dollars on rent for objects, and I managed to convince them that not paying a couple hundred dollars a month was worth a weekend of physical activity and a short-term investment of psychic energy to decide what to keep and discard.

This being a Stone family storage unit, there were roughly two dozen boxes of books. Most if not all of these had been easily accessible in our house when I was a kid, but had migrated to the storage unit because my family acquires books at a much higher rate than we acquire bookshelf space. One of my goals in the storage unit exit plan was to minimize the number of boxes my mom need to sort through because (a) "I need to go through this and decide what to keep, but I don't have time" is exactly why we have a storage unit of long-forgotten stuff and (b) I needed to save her limited sorting attention span for questions like "Can we get rid of this box of tax documents from 1992" and "Do you need this spiral notebook from your Masters of Education course?" Other than a few emotionally salient books she spotted at the top of a box, I was able to convince my mom that my garage would be the best place for the book boxes to land. (Fortunately I was also able to claim the large bookshelf they'd been siting on for decades.) As part of this bargain I agreed to catalog the contents before selling or donating any of the books. I promised to do so as a winter project, since I had three months of summer adventures planned.

I had some vague ideas about cobbling together a mobile app that could scan barcodes and dump ISBN codes into a Google Sheet, which a script would then populate through Internet lookups. (This was partly a plot to try out AppSheet, a "no code" app building product that colleagues of mine have built which helps fill what I think is an untapped ecological niche.) Then last weekend I remembered that LibraryThing exists, and probably already has a book-scanning app. Sure enough, the small development team that's still maintaining a website that very much feels like it's still the aught-naughts has had enough bandwidth to build iOS and Android apps with barcode scanning and cover photo uploading, in addition to catalog data management.

After a week of feeling not-great but testing negative for COVID, I got a positive test on Monday. (I'm pretty sure I picked it up during my Halloween weekend of dancing.) "Isolate in the front half of the house for a week" is exactly the excuse I needed to catalog a thousand books on the shelves in my living room. This kilolibro are mostly volumes I've personally acquired, plus a contingent from Kelly. I've yet to delve into the garage library of family legacy, though it does contain a shelf of Jungian psychology from when we moved all the stuff out of my mom's office in the summer of 2020. There's more mom-office books on the "spirituality and woo" shelf in another room, still more on the guest bedroom shelves along with art, kids books, and four decades of National Geographic Magazines. Oh, and I accepted several boxes of Dragon Magazine from a friend that I should either read or pass on. And while I'm at it, I might as well catalog the hundreds compact discs in the house, in case we need to convince our homeowners insurance that ten thousand dollars worth of music went up in flames.

It turns out that book cataloging is a messy-enough adventure that a dedicated domain-specific UX is a win, even though I now need to find a separate solution for cataloging my board game collection. There are, of course, books that predate barcodes, and I've even got a few dozen that came before ISBN was introduced, around the time my parents entered college. There are books whose Library of Congress Card Number doesn't come up in any catalog search. There are books with many editions and reprintings, and boy howdy to publishers like to change covers. A single ISBN often has multiple database entries, with varying levels of metadata quality. There are books with barcodes which aren't ISBNs (only some of which are mass-market paperbacks with an ISBN barcode on the inside cover). I found at least two books where the ISBN and barcode printed on the back cover belonged to an unrelated book, and didn't match the ISBN printed inside the book. My favorite is 978-1-56581-231-4 / 1-56581-231-X which has been used by dozens of books and shows up as example input to a couple open source barcode generators. Were publishers following some ISBN instruction manual and didn't realize they were supposed to assign their own number?

I've known for a long time that I tend to buy books aspirationally. I've probably finished only 5% of those thousand books, and read significant parts of another 5–10%. (There are also books on the shelf I know I'll never be motivated to read; we really need to get a Little Free Library set up.) In high school I noticed that the number of non-assigned books I read each year seemed to be decreasing. In college I had very little time for non-scholastic books, though I managed to reread each Lord of the Rings for their cinematic release. I had grand hopes of getting back to reading a few dozen books a year after graduating, but by that time the Internet had gotten really engrossing. It took me a decade to finish Don Quixote but it feels like I go through a hundred thousand words in a couple months on Wikipedia. I also read a lot of stuff at work, but "a hundred design docs and five hundred code reviews" doesn't bring the same set of accomplishment as reading a series of novels.

As a coda, I'd like to share the funniest item I found in the storage unit adventure. There was a box in the far corner, under and behind everything else in storage, clearly one of the first items packed away in the mid-1980s when my brother was a baby and my dad had converted the garage into a music studio. The box was labeled
Pants that are slightly too small for Edie.
That's right, we've spent three and a half decades safeguarding garments just in case my mom shrinks.

Aftertaste

Sunday, May 15th, 2022 12:22 am
flwyd: (cthulhufruit citrus cephalopod)
One of the reported symptoms of COVID-19 is loss of taste. I've been able to taste everything with no problem all week. I'm even getting some extra taste right now: a grapefruit was the first thing I ate this morning, almost 13 hours ago, and my mouth still tastes like citrus. If I eat something else I lose the grapefruit taste for awhile, then it returns after my mouth sits idle.

Core Oh No Virus

Friday, May 13th, 2022 11:16 pm
flwyd: (intense aztec drummer DNC 2008)
The past couple months have felt like things were getting back to normal. In March(?) we got to have assigned desks again at work, which meant I could do things like stand on a stress mat, not bike with a laptop every day, leave a box of Altoids on my desk, and see what Chrome tabs I had open on March 11th, 2020. In early April I took a road trip, then met our Canadian coworker in person for a week of team bonding. I'd been reminded that Happy Thursday is a thing I used to do, and made it to three weeks in a row of colorful people riding colorful bikes around town. Eating food in restaurants feels normal. After a chilly spring season, I'm summer season captain for the office softball team, which has been playing pretty well.

On Sunday I climbed around on ladders and garage roofs to help a blind friend get his ham radio antenna re-attached after the big wind storms this winter. I then took my parents out for Mothers' Day dinner. After I got home from dinner I noticed a bit of a scratchy throat, so I took some vitamin C and went to bed at a reasonable hour. I'd been feeling more sore and tired than usual during the previous week, including discomfort lying in bed and being really tired when waking up. This feeling was reminiscent of my state a few years ago before I started taking Humira to tamp down my immune system, so I wondered if the drug wasn't working as well as it used to, or if I'd ended up with a weaker batch. I also reflected that I'd had lots of late nights sitting in a somewhat awkward chair being engrossed in the Internet, so self-induced posture problems were a possible cause.

On Monday I was extra sore and tired when I woke up at about 10:30, so I decided to work (and slack off a bit) at home, given the scratchy throat. I took a fancy Cue home COVID test in the afternoon, which was negative. I worked on some code on the back porch, and finally took the initiative to call the power company about an every-10-second beep that had been annoying for months. I used the last of the light to attempt to get the sprinkler system running again, but didn't have quite the right setup. My arms, particularly the right one, were still sore (I chalked it up to lots of computer mouse use) and my pelvis felt out of shape, but overall not terrible. I took a long bath; it took all my energy to get up and out of the water, but that's usually how I feel when I'm drained enough to need a hot bath. On Tuesday I woke up around 11 with a similar lack of satisfying sleep and lots of sore body parts, so I decided to take another light day from home, including taking part of the afternoon to get the sprinklers working right. Our softball team didn't have any subs available, and I felt good enough to pitch the whole game while wearing a mask. (The tricky bit was positioning my sunglasses so they wouldn't fog up from the mask, but still keep the setting sun at bay.) Wednesday was another day of waking up sore and tired. It took me several hours to get through a bowl of granola, but that sometimes happens if I end up pouring more in, or I hit a patch with a lot of finely-crushed bits. I did some more work-from-porch relaxing and decided that a walk might help me feel better, so I got dressed and headed over to a meeting where we were testing out technology and room arrangement for a hybrid meeting setup. I was wearing a cloth mask, the other participants were wearing N95s, and we were about 10 feet apart. Going in I'd felt pretty confident that I didn't have COVID (see: test from two days before), wasn't contagious (very little coughing), and was probably having an immune overreaction to something. I started questioning the decision during the meeting, though, as I started having some very shallow coughs and was feeling a mild fever. Later on Wednesday night I felt extra drained, requiring a significant fraction of my spoons to empty and load the dishwasher, which I hadn't mustered the energy for in several evenings.

Thursday was the worst day. The week of ache had compounded, I was frustrated that lying in bed hurt and therefore wasn't restful, and I was exhausted. This was clearly not a "short overreaction to a minor virus" experience. I still didn't have much appetite, was coughing more (still shallow), and had approximately no energy. Kelly thought she saw some concerning signs in my mouth, and encouraged me to see a doctor. In 2022 if you feel sick you're not supposed to go physically to the doctor, so I had a telehealth adventure: sticking my tongue out close to the webcam, trying to shine a small ring light on just the right tongue spot, using a butter knife to sample mucus, and grabbing a home thermometer for a quick test. No stethoscope was simulated, and I didn't record my own height and weight to completely virtualize an office visit, though. The doctor hypothesized a bunch of possible illnesses from flu to COVID to strep throat. They had me do a drive-through test at the hospital. COVID testing has progressed to the point that there's now a combined respiratory test where a single nasal swab will produce test results for COVID, influenza, bronchitis, and about a dozen other respiratory illnesses. The strep test gets swabbed in a different hole, but also gets cultured for a whole raft of possibilities.

Late in the evening my email told me to check my medical portal, where I learned I'd tested positive for coronavirus. D'oh. I quickly emailed the folks I'd met with on Wednesday with profuse apologies and warnings. I emailed next week's planned house guests and recommended that they seek other accommodation. I texted my radio friend a warning. I called my parents. I emailed my softball team and texted the other team's captain. I emailed the coworkers who sit near me. I filled out a "Report Covid" form at work which had a bunch of questions like "What are your symptoms" and "Have you been in close contact with someone who has tested positive" which should be unnecessary if I could start the form with "I tested positive for COVID, tell anyone who badged in to my floor about it." Wow is it a lot of work to do your own contract tracing, it's a good thing I didn't have the "can barely get out of bed" flavor of COVID.

While pursuing responsible disclosure, I opened the Colorado Exposure Notifications app on my phone to figure out how to report a positive test there. I was greeted with a big button asking me if I wanted to enable exposure notifications, and that doing so would require Bluetooth. "Um, yes, please, what in the world have you been doing this whole time?" was roughly my reaction. I'm pretty sure I installed this app in 2020, turned it on, and assumed it would quietly do its thing. I took not having received an exposure notification so far as a sign that my mostly-isolated life over the last two years had meant no close contacts with anyone who tested positive. I hadn't considered the alternative theory that the app had quietly turned itself off (maybe when the phone was in Airplane mode, or after an OS upgrade?) who knows how long ago. I don't recall seeing any "Exposure notifications are turned off" system notifications. This felt like a smoke alarm which doesn't beep when the batteries run low. YOU HAD ONE JOB! I also did another Cue home test, which came back positive. It's encouraging that it detects it (the virus hasn't evolved to evade detection), and an important data point that it might take a couple days of feeling lousy before the test is accurate.

On Friday I woke up to a call from a medical assistant at my doctor's office who said the doctor could send a prescription for Paxlovid, an antiviral medication for COVID. (I haven't been closely following the coronavirus news for awhile, so I was unaware that such a treatment was now available.) They said they could send it to CVS Pharmacy inside Target, an establishment I'm familiar because, for reasons of opaque employer insurance pricing, is where I get my "specialty" medication, even though all the rest of my prescriptions go through the pharmacy at my local King Soopers. I've speculated that this arrangement might be because it was such a pain in the ass to get the prescription set up with CVS Speciality that maybe someone saves money from people giving up and not ordering their specialty drugs. I called their phone system in the early afternoon, giving "Prescription status" to the automated voice system. It asked me for the prescription number which of course I didn't have because I am calling to find out whether you received the prescription. When I convinced the AI that I didn't know the prescription number, it attempted to transfer me to the pharmacy, which was closed for lunch. After lunch I called back twice; the first time "Prescription status" got interpreted as "Covid masks" and without asking for confirmation started to explain that the store sold those. I hung up and tried again, this time "Check prescription status" somehow became "Covid vaccinations" and it transferred me to a recording about how to schedule a vaccination. I called my doctor's office instead, which at least has a recording of a human reading numbers you can press. I reached someone who said they only saw the King Soopers entry in my records as a pharmacy. I explained that I didn't care what pharmacy filled this prescription, I just wanted to know if it had been sent and where it had gone. They called me back shortly and said it was sent to CVS. I called CVS back and hoped that pressing 0 would put me in the queue for talking to a human being physically present in the same place as my drugs. After 15 minutes on the same automated message cycle, including a point when the recording drops out for a few seconds, giving you false hope that someone's actually answering the phone, I asked if any of my teammates were at work this afternoon and could they do me a favor. I armed my manager with my date of birth and got him to walk next door to the pharmacy in Target and check if they'd received the prescription. After a couple minutes of confusion they realized that for a freshly-received prescription they needed to check a different computer system, where it had in fact been received. My manager told me it would be filled in about 25 minutes. I was still in hold message limbo, 50 minutes after starting the call. Not sure what I would've done if I didn't have allies within walking distance of the pharmacy. The "You're not allowed to pick up your medication yourself" challenge builds on the "When you're sick you shouldn't go to the doctor's office" wrinkle from the 2020s expansion pack.

Ironically, after spending all afternoon trying to make sure I could get my hands on Paxlovid before the pharmacy closed and the "Start taking within 5 days of symptoms" window expired I was actually feeling fairly good, way better than Thursday when I'd made the doctor's appointment. (Hail to the vaccines that gave my immune system practice last year.) Another coworker dropped off the medication, my dad brought over a grocery delivery of coconut water, soup, ginger beer, orange juice, and grapefruit (you can tell we're in a mindset). I'm celebrating the fact that I haven't lost any sense of taste by eating kim chi and chocolate fudge brownie ice cream. Kelly and I live in a house where we can easily avoid direct contact, each getting a bedroom, living room, and bathroom to ourselves. All in all, things could be a lot worse.
flwyd: (Default)
I feel like we've been saying "Maybe things will be better in a few months" for two years straight.
flwyd: (Vigelandsparken circle man)
Ain't found a way to kill me yet
Spicy food still makes me sweat
Every weekend I just go nowhere
Safe at home with my new pet
Hydroxychloroquine was no safe bet
Spike proteins assail me from somewhere

Here they come to give the booster
Yeah, here come the booster
You know I ain't gonna die
No, no, no, you know I ain't gonna die

Here they come to stab the booster, ah yeah
Yeah, here come the booster, yeah
You know I ain't gonna die
No, no, no, you know I ain't gonna die

Feelin' fine, glad you asked
They spit on me, I wear a mask
Doctor sent me results from my swab
Got my shots 'gainst covid death
My buddy's breathin' his dyin' breath
Oh RNA, please won't you help me make it through?

Here they come to give the booster
Yeah, here come the booster, yeah
You know I ain't gonna die
No, no, no you know I ain't gonna die


Original (content warning: Vietnam war, violence, guns, knives, blood): Alice in Chains - Rooster
flwyd: (Taoist goddess Doumu)
… commence Lonely Island filk.

I got the first dose of the Pfizer/BioNTech COVID-19 vaccine this afternoon, so I'm pretty psyched about the possibility of having a summer that doesn't revolve around my living room.

The experience of getting the vaccine itself was pretty painless. Walked from my house to a pharmacy, filled out a form, sat around for a few minutes, a purple-haired nurse stuck a small needle into my bicep (way less uncomfortable than a blood draw), and told me to stay nearby for 15 minutes. I walked over to the local game store and picked up the new Dominion set, then walked home.

The experience of actually signing up for a vaccine, on the other hand, is pretty hectic. Since the U.S. health care wasn't really designed and there's no centralization, every vaccine provider has a separate process for signing up for a shot, with different ways of assessing eligibility. I learned last week that a medication I take for psoriatic arthritis qualifies me in Colorado's Phase 1B.4 group, though the state's official website doesn't list which medications meet that criterion, so I had to check with my doctor. I then went to sign up on the King Soopers pharmacy website. They've got a digital assistant that asks a bunch of questions, none of which is "Are you taking a medication that&hellip", so it concluded I wasn't currently eligible. I next tried signing up through BCH (the local hospital, which also owns my primary care doctor's office). Their system emails you when it thinks you qualify, but I discovered that my electronic health record didn't have the relevant drug I'm taking, so the BCH system wouldn't have known I was eligible. (When I went to add the medicine to my profile I also discovered there was at least a dozen ways that this drug is referenced in the database, and I don't know if their eligibility-checking system knows the drug qualifies.) Other websites just listed the eligibility groups and asked which one you were eligible for. Several required you to sign up with an account in their system, and by the time you get through filling out such a form, the appointment slots are likely to be all taken.

Fortunately, enterprising tech-inclined individuals have set up some tools to highlight available vaccination appointments. Vaccine Spotter scrapes and aggregates pharmacy scheduling websites and [profile] covaxalerts publishes that info on Twitter. I was able to snag the convenient appointment when I checked Vaccine Spotter shortly after midnight a few days ago, so hooray for being a night owl. (I may have also lucked out that Walgreens wasn't yet on the Colorado website as a provider, so they may have just onboarded and fewer people were obsessively checking their site.)

Coincidentally, we've scheduled our first vacation (not counting a short trip to the family cabin) in over a year for next week, so I'm glad to have an extra layer of defense against potential exposure while soaking in a hot spring. There's light at the end of the tunnel, but keep wearing your mask and stay at distance so we don't blow it before we reach the finish line.

It's Almost July?

Tuesday, June 30th, 2020 10:08 pm
flwyd: (step to the moon be careful)
It's been a crazy June, from Black Lives Matter protests to rising coronavirus infections in the US to getting the hang of working from home every day.

But after a day of staring at the screen for all work and communication needs, and then following up on important personal email and then checking Twitter's trending topics to see what new craziness 2020 has gotten up to… I almost never feel like staring at a screen and writing some more.

So hi, I'm still alive, still healthy, still wishing things could be different.
flwyd: (daemon tux hexley)
As an avowed introvert, I took the opportunity of the new fewer-social-commitment world of coronavirus stay-home orders to do some fun programming on personal projects, like my Elizabethan curse generator. While working on bash and Tcl implementations I discovered that vim, my favorite text editor, did not automatically remove line continuation characters when performing a join command. In my case, I had copied an array of quoted strings from Python into a shell script, which doesn't need quoted strings, and wanted to realign the declaration to fit nicely in 80 columns, like so:
noun=(apple-john baggage barnacle bladder boar-pig bugbear bum-bailey \
canker-blossom clack-dish clotpole coxcomb codpiece crutch cutpurse \
death-token dewberry dogfish egg-shell flap-dragon flax-wench flirt-gill \
foot-licker fustilarian giglet gudgeon gull-catcher haggard harpy hedge-pig \
hempseed horn-beast hugger-mugger jack-a-nape jolthead lewdster lout \
maggot-pie malignancy malkin malt-worm mammet manikin measle minimus minnow \
miscreant moldwarp mumble-news nut-hook pantaloon pigeon-egg pignut puttock \
pumpion rabbit-sucker rampallion ratsbane remnant rudesby ruffian scantling \
scullion scut skainsmate snipe strumpet varlot vassal waterfly whey-face \
whipster wagtail younker)
Unfortunately, the J command in vim leaves those trailing backslashes (which mean "the command keeps going on the next line") in the middle of the combined line. After a bunch of Googling, I determined that there wasn't a vim setting to do so, and nobody had written a plugin for it either.

So of course I decided that extra home-bound free time meant it was time to learn how to write a vim plugin so that I could change the behavior of the line-joining commands. A couple coworkers mentioned that such a plugin would be even more useful if it could merge strings when joining as well (resulting in "lorem ipsum" rather than "lorem " + "ipsum"). This in turn provided a great excuse to geek out on programming language details on Wikipedia, Rosetta Code and 99-bottles-of-beer.net. And thus was born vim-conjoin, a plugin that remaps J, gJ, and :Join to handle continuation breaks and string concatenation.

This exercise was absolutely a violation of XKCD's Is It Worth the Time graph: I spent the better part of two weekends, plus a few evenings, implementing and testing this plugin (mostly testing). It will, in my lifetime, perhaps save me an hour of work. So hopefully other vim users find it useful, too.

As with any personal programming project, the time wasn't entirely wasted, of course. The next time I want to write a vim plugin I'll have a much better idea of what I'm doing. And I learned more in a couple weeks about vim than I've learned in most individual years in the last two and a half decades I've used the editor. (Though it's going to take me awhile to remember to put call before function invocations and I'm forever forgetting the l: and a: prefixes on local and argument variables.) And the Wikipedia adventures led me to finally read up on INTERCAL a famously obtuse parody language, and LOLCODE, a lolcat-inspired esoteric programming language that I wish I'd heard about in 2007 when it was announced. (LOLCODE unfortunately seems to have been abandoned; the language author hasn't responded to a 2018 proposal for array (BUKKIT) syntax.) And that gave me an idea for an esoteric language of my own that I hope to work out during the remainder of quarantine time…

You do you. And make sure you've got an unnecessarily polished tool while doing so.
May 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2025

Most Popular Tags

Expand Cut Tags

No cut tags

Subscribe

RSS Atom
Page generated Tuesday, June 10th, 2025 09:49 pm
Powered by Dreamwidth Studios