{ "version": "https://jsonfeed.org/version/1", "title": "George Mandis", "description": "This is my blog where I write about web development and travel.", "home_page_url": "https://george.mand.is", "feed_url": "https://george.mand.is/feed.json", "favicon": "https://s3-us-west-2.amazonaws.com/george.mand.is/me-sketch-avatar.jpg", "author": { "name": "George Mandis" }, "items": [ { "id": "https://george.mand.is/2024/03/leap-years-lost-days-and-coding-calendars-a-javascript-adventure/", "url": "https://george.mand.is/2024/03/leap-years-lost-days-and-coding-calendars-a-javascript-adventure/", "title": "Leap Years, Lost Days, and Coding Calendars: A JavaScript Adventure", "content_html": "
Dates are hard and JavaScript is odd. Two universal truths.
In belated honor of 2024 being a leap year, here's a story about how I learned 2011 was not a leap year, ISO 8601, proleptic Gregorian calendars and forking Node.
To belatedly commemorate the leap year of 2024, here is a story about how I discovered of 2011 wasn't a leap year, dove into the intricacies of ISO 8601, the concept of proleptic Gregorian calendars, and decided to fork Node on a whim.
JavaScript implements (best as I can tell) the ISO 8601 standard to avoid ambiguous date/time expressions. This includes an adherence to something called the proleptic Gregorian calendar.
The Gregorian calendar is more or less the calendar system we all use today and was established on Friday, October 15th, 1582. The curious thing about this is that it came immediately after Thursday, October 4th. They had to do this to synchronize with the switch from the Julian calendar. As are a result, those ten days never happened.
The proleptic Gregorian calendar attempts to make this less confusing by basically pretending the Gregorian calendar has always been in use. In this world, when looking back at dates that happened prior to the switch, a date like October 7th, 1582 can exist. This is a modern convention to help with historical consistency.
JavaScript is happy help here:
new Date("October 11 1582")// 1582-10-11T04:56:02.000Z
However, JavaScript has some quirks. It does care about some days that make no sense and could never happen:
new Date("October 33 1979")// Invalid Date
But it doesn't care about all the days that could never happen:
new Date("February 31 2024")// 2024-03-02T05:00:00.000Z
It doesn't throw an Invalid Date
even thought February 31 could never possibly exist. It's actually returning March 2nd, 2024 in this example!
If you dive in the source you can see it takes a (somewhat lazy) assumption by checking the days first and assuming 1 to 31 can always be valid. It then checks the month to see if it has that many days. Instead of throwing an error if it doesn't, it just substracts the max number of days from that month and uses the remainder to figure out which day it is in the next month.
Something funny happened when I resurrected some old blog posts from 2011. The tool I use to build this site (11ty) started throwing errors. I assumed there was some weird piece of misformatted metadata in one of the posts, but what I found was a lot stranger.
The offending post was written on February 29th, 2011. It turns out that day never existed—it's only a leap year if it is divisible by 4, except for end-of-century years which must be divisible by 400.
While JavaScript itself doesn't care, some package in the 11ty stack trying to parse and understand dates must care. I'm curious which one it is, though I never went looking.
In a nut-shell, because I'd written this date down wrong over a decade ago, and because something in 11ty is a stickler for real dates, I had to change the date to fix my blog. The funny part is I had no way of knowing, 10+ years later, if I'd actually written it on March 1st or February 28th.
It bothers me (irrationally) that JavaScript would try to coerce February 31, 2024 into a real date but lazily stand-buy and be fine with October 7th, 1582. I am reminded once again that software—like all human constructs—really just boils down to a mishmash of people's opinions in the moment.
It makes sense to me that the company whose founder gave so much thought about typography in early computing would take the time to put thought into their standard calendar class to account for the Julian to Gregorian transition in a more nuanced and historically-accurate way.
In NSCalendar
, similar to how JavaScript will move February 31st into the next month, any days that fall between October 4th and 15th in 1582 will automatically get moved forward 10 days.
One of the more fun macOS easter eggs live sin the Calendar app. If you go back to October 1582 you can see Thursday, October 4th immediately followed by Friday, October 15th.
I like the way NSCalendar handles this situation better. So I did what any sensible person would do: I dusted off my C++ brain and forked Node.
I'd never built Node from scratch, let alone fork an entire language just to make such a silly, opinionated tweak to a standard model. The documentation is clear though, and the project is soundly structured. After some hunting, pecking and reading I found the place to introduce my change:
Voila.
If you've found any of this nonsense helpful or intriguing—and particularly if you have your own silly explorations to share—please feel free to reach out! I love a good goofy deep-dive into the inane.
", "date_published": "2024-03-03T00:00:00.000Z" }, { "id": "https://george.mand.is/2024/02/zimaboards-visidata-and-disk-space/", "url": "https://george.mand.is/2024/02/zimaboards-visidata-and-disk-space/", "title": "ZimaBoards, VisiData and disk space", "content_html": "A few months ago I bought a ZimaBoard to tinker around with. I'd down-sized greatly moving to New York last year and pretty much none of my tiny computers made the cut. I was in the market for a headless little something or another to stick under my bed, shell into once in a while, host tiny projects on and run some opinionated backup scripts.
My internal jury is still out on CasaOS, but I don't think it's bad for someone that isn't particularly hard-core about his homelab setup. It's basically just a Docker image and moderate system-management tool from a web-based GUI. There's an easily-accessible "app store" for quickly installing images/apps you might want.
If you have a link to the image on Docker Hub, it's pretty trivial to just fill out a form, specify the folders and ports you want things to map too and it'll automatically start any time you reboot the machine. I got Etherpad up and running quickly and it's not specifically listed or supported in their store.
It's running Debian Linux under the hood on an x86 architecture with built-in SSD and decent-enough RM (8GB RAM on my model) all of which made it interesting to me. It was also about the same (maybe cheaper?) than a comparable Raspberry Pi.
Somewhere along the way I lost a lot of disk space despite not installing that much. It came with 32GB of internal storage which struck me as plenty for someone who does not hoard a lot of media content. After a couple weeks though of installing and uninstalling numerous apps from their app store, I fill-up 29GB and could not figure out the who was hogging up the space. I removed all the apps and still didn't see it budge.
So I decided to finally get to the bottom of things tonight. I logged into my machine remotely—thank you Cloudflare!—from the Recurse Center and used one of my favorite techniques: just piping random stuff into VisiData.
I logged into the machine, changed to the root (/
) folder and ran:
du | vd
du
measures disk space used by folder/files recursively from the place you call it. The default output is just two columns:
Visidata is very smart and will interpret all kinds of columnar and tabular data. Seriously, read the docs and check out the supported formats.
Then press Shift+#
to tell VisiData the first column contains int
values and then ]
to sort things in descending order.
Ta-da! Now I can clearly see the culprits float to the top.
I'm sure/know there's a way to do all of those in a single command with du
piping it in to sort
and other command-line chicanery, but I like this way better.
For those wondering about what was actually eating up all the disk space, it turns out these were the primarily culprit
var/log
var/cache
I gave them a cursory glance to decide if I cared about anything in there, and after deciding I didn't I nuked them which cleaned-up about 10GB (!!) of files very quickly. I'm still not 100% certain how or why those got filled up so quickly, so I'm going to keep my eye on them in the future.
", "date_published": "2024-02-25T00:00:00.000Z" }, { "id": "https://george.mand.is/2024/02/the-doorway-effect/", "url": "https://george.mand.is/2024/02/the-doorway-effect/", "title": "The Doorway Effect", "content_html": "I remember my colorful, recently departed uncle starting a conversation like this:
"I recently read something about... doorways. Like when you walk through them, it does something to your brain. Something when you enter a new room... Hm. I don't remember."
He proceeded to take a sip of his homemade hooch and we carried on making memories at that family reunion, as we did for so many good years.
This was many years ago, and that anecdote always stuck in my brain. It piqued my curiousity, but I suppose never enough to warrant a cursory Googling (or ChatGPT-ing, as the turning tides may bring us) and so it bounced around in my head like a pebble in a shoe.
But just the other day, I noticed a link to a Wikipedia article in the Hacker News Newsletter that just said "doorway effect."
The gist of the thing is that human beings have a tendency to forget recent things when passing the boundaries, real or imagined. We're episodic, context-oriented creatures it seems.
Makes me think about the ways we use stories to communicate almost everything. The boundaries serve almost like chapter markers, and it's interesting to think that the trade-off for the context-switch that allows us to organize these memories in the first place is something almost like flushing the "cache" we'd accrued in the previous chapter.
Anyway, recognizing that my uncle kind of "forgot" what it was all about as he tried to explain many years later feels like a tiny gift. A funny joke that took tears to play out and landed at just the right time to produce a sweet memory of someone who is now gone.
", "date_published": "2024-02-17T00:00:00.000Z" }, { "id": "https://george.mand.is/2023/10/obligatory-blog-refresh-post-a-twist-and-a-tiny-homage/", "url": "https://george.mand.is/2023/10/obligatory-blog-refresh-post-a-twist-and-a-tiny-homage/", "title": "Obligatory blog refresh post, a twist and a tiny homage", "content_html": "In the same way cicadas and other uncomfortably-large bugs have an odd lifecycle that sees them emerge every few years or more, such is my relationship with updating the look and feel for this blog. With every good blog "revamp" there must come the obligatory "Here's what's new!" post.
In that spirit, here's what's new and/or not now (followed by a subtle twist):
I'm still using 11ty to power the blog and write the static files which are hosted on Netlify. I still mostly like it.1
I've visually tweaked things to adopt the Flexoki color scheme by Steph Ango, author of Obsidian. The color scheme is designed for reading and based on real-world printing colors. To my eye it has a "warmth" I find appealing.
On the font front I've dropped the custom typeface (previous Public Sans) and opted for the standard system UI font instead. I've also tweaked the font sizes, weights and overall reading widths. Admittedly I'm borrowing a lot from Steph Ango's blog... but I like it!
I've always liked the multi-color rainbow gradients along the nav and footers of my site2. I did however update the gradient to employ more "hard-stops" and give a more segmented look and use the more deliberate & muted color palettes that Flexoki provides. It kind of reminds me of a muted version of the classic Apple logo color scheme circa 1977. Some of my masthead images have the old rainbow color-scheme embedded within the image, but it actually looks okay alongside the new scheme (to me).
I think the design I landed on in 2019 when I wildly revamped this site actually still holds up surprisingly okay. Maybe I'll reconsider the angled sidebar some day. You can see the initial revamp here and compare to what it looked like earlier in that year.
I didn't just revamp my website. I found old blog posts between 2009-2011 (!!) and brought them back into the fold! You can find them via my archive:
I have more lurking in the archives and will try to restore them as I'm able.
As I restored them, I cleaned them up a little bit to see how broken they were, fixed an errant 10+ year typo or two and decided if there was anything that looked especially embarrassing. I'm thankful to say that, while past me sometimes seems like a bit of a naive doofus, he never (hopefully!) comes off as a problematic, cancellable naive doofus.
Some choice posts:
I'm reserving a special place at the end here to link to a post I had no recollection of writing:
My slightly more piratical, sledgehammer-wielding uncle in that story passed away somewhat suddenly a couple weeks ago. He was a character bigger than life and a freer spirit than most.
The news was sad to receive and I've been reflecting on his fun, colorful, exuberant presence at our family gatherings over the years. Lots of good memories and laughter. Stumbling across this silly thing I wrote over 10 years ago was a nice reminder of those good times.
Thank you Mike 🏴☠️.
December 20th, 2023 addendum: a lovely little tribute written about him by his siblings.
I think, going back to 2008 (!!) this blog has gone WordPress → Jekyll → Some custom monstrosity utilizing bash scripts and AWS services → Jekyll (again) → WordPress (again) → 11ty, but I'm not 100% certain. I may have even flirted with Ghost for a minute there.
Funny fact: That choice was a side-effect of my inability to settle on a more constrained palette. So I settled for all of them.
I recently discovered Bear Blog via one of the million newsletters I subscribed to. I'm a big fan of hyper-minimal products that do one thing thoughtfully and efficiently. Kudos to them!
I've claimed my own little Bear Blog here, though I'm not quite sure what to do with it:
I'm not quite sure what to do with it, but there it is.
I also like that they have this "discover" page that seemed to be an aggregation of all the people hosting their own blogs and content on the service:
But what I really like is this cute, clever little trick to implement an emoji as your favicon! This doesn't work on Safari (or anything iOS by extension I imagine), but it does seem to work everywhere else on desktop.
So, hat-tip to Bear Blog for this fun little trick:
<link rel="shortcut icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20100%20100'%3E%3Ctext%20y='.9em'%20font-size='90'%3E🥸%3C/text%3E%3C/svg%3E">
This actually opens the door to more informative favicons. You could...
Very fun!
", "date_published": "2023-09-20T00:00:00.000Z" }, { "id": "https://george.mand.is/2023/09/building-a-mute-button-toggler-for-zoom-with-espruino-and-puckjs/", "url": "https://george.mand.is/2023/09/building-a-mute-button-toggler-for-zoom-with-espruino-and-puckjs/", "title": "Building a mute button toggler for Zoom with Espruino and Puck.js", "content_html": "Wouldn't it be nice if you had a little device you could click to mute and unmute yourself on a Zoom call? In this remote-work world many of us have plunged into post COVID, I don't think it's that uncommon to find yourself on an occasional Zoom meeting, camera-off, milling about your kitchen while you listen.
If you find yourself needing to chime-in though, what do you do? Run back over to your computer like a goofball Wrestle with the mouse or keyboard to unmute yourself and say "Yup, that sounds about right!" before running back to your kitchen business?
My friends, this is a task the Puck.js was born to solve.
Inspired by an idle thought from a coworker, I whipped up a simple program to turn my neglected clicker into a little Zoom muter.
The Puck.js is a custom Bluetooth beacon powered by Espruino—a custom flavor of JavaScript designed to work on low-powered, single board microcontrollers. Both the language and the device(s) were designed by Gordon Williams.
One of the more fun things you can do hacking around with a Bluetooth-capable controller is broadcast the services your device offers and identify what kind of device it is. Other device can see this "profile" broadcast and will use that to interpret how it should interface with you based on some established standard in the HID and/or BLE HID spec.
An exampe: I have (mostly undeserved) credit for contributing to the BLE MIDI module for the Espruino ecosystem here:
That module makes it so that computers can specifically recognize it as a Bluetooth MIDI device. When it's connected to another device that understands it to be a BLE MIDI device, it's now for all intents and purposes a MIDI instrument and can behave/communicate as such.
👆 If you're curious how or why I did this, check out my Puck.js MIDI instrument code and peruse some of my videos on YouTube.
What other kinds of devices can you trick tell other computers you are? A completely unexhaustive list includes:
Rules! Standards! They are what separate us from the animals... and also the reason your AirPods can talk to your Android phone.
For our Zoom mute toggler, I focused on the keyboard profile. I was basically going to turn it into a bluetooth keboard that did exactly one thing.
My approach was simple:
That's... it! All-in-all, about 20 lines of code:
With the code flashed to the Puck.js I can now connect to it from the Bluetooth settings in macOS. It will recognize it as a BLE keyboard and start accepting keystrokes from it immediately.
Shortcoming of this approach:
Ctrl/Cmd+Shift+A
to whatever the foreground application is.Future improvements:
If you'd like your own, simply:
That's it!
If you'd like me to make one for you—or have some other idea for a single-button "thing" you'd like to see implemented this way—get in touch! My prices are very reasonable :-)
", "date_published": "2023-09-09T00:00:00.000Z" }, { "id": "https://george.mand.is/2023/09/the-gpt-force-awakens-better-star-wars-stories-with-ai/", "url": "https://george.mand.is/2023/09/the-gpt-force-awakens-better-star-wars-stories-with-ai/", "title": "The GPT-Force Awakens: Better Star Wars Stories with AI", "content_html": "Let's write better Star Wars stories using AI! An obvious application for LLMs if ever there was one.
My apologies to the Writers Guild of America. Writing sequels to a major piece of Hollywood intellectual property while they're on strike isn't exactly the best manifestation of solidarity.
A passing, idle thought: This feels like some inevitable future of entertainment. I don't need new Star Wars or Marvel movies. Just give me a Disney LLM trained on their hoard of nonsense so I can generate all new nonsense and stories. The story of passive entertainment seems to meet it's natural conclusion when you just talk to the machine and tell it what you want it to show you.
I'm also convinced it'll be utterly terrible in a bunch of ways, but that doesn't mean it won't be effective.
Anyways, please enjoy what I'm confident would have been a much better ending to the entire Star Wars saga courtesy of some GPT4 prompts, nudges and light edits. You'll recognize a slight retcon of Star Wars Episode VI in the prompt as we pave the way for a superior Star Wars continuation.
Prompt: Write a Star Wars story where The Empire was successful but nobody really cares. They all just go about their boring lives as normal, barely affected.
In a galaxy far, far away, long after the rise of the Emperor, a sea of stars gleamed in the petrifying darkness. Far beneath their celestial glow, the mighty Empire had succeeded in solidifying its power over this vast galaxy, leaving the vestiges of the Rebellion to fade into oblivity. Try as they might, the Rebels had perished under the nearly unstoppable tyranny of the Sith.
Gliding across the infinite expanse of space, the colossal Star Destroyers cast dark shadows over the countless planets they patrolled, an unending reminder of the Empire's iron grip. Yet, curiously enough, the citizens of these planetary systems found themselves completely disinterested, choosing instead to focus on their own mundane existences.
In the city-planet Coruscant, already saturated with skyscrapers soaring up to touch the sky, countless inhabitants were more preoccupied with the usual grind. Office workers, shopkeepers, and all sorts of ordinary beings, human and alien alike, cared little about the Sith Lords ruling their galaxy, too accustomed to the shrill rhythm of everyday routine.
Meanwhile, stormtroopers on patrol in the sandy expanses of Tatooine didn’t strike much fear among the residents either. The moisture farmers kept tending to their evaporators, just as they had done under the Hutt's rule. In the cantinas, creaky Jizz bands continued to play, while pilots, merchants, and smugglers argued over Sabacc games, oblivious to the Empire's watchful gaze.
On the verdant moon of Endor, Ewoks carried on with their tribal rituals, their primitive warfare encounters with each other, the vicious run-ins with various local creatures, and the scramble to find food day in and day out, consuming their attention and energy. The presence of the ominous Death Star hovering in their sky made no more difference than a passing cloud.
Across the galaxy, the mundane struggles of life went on. From the icy plains of Hoth, the citadel-filled cityscape of Corellia, to the bustling markets of Naboo, nobody paid much heed to the Emperor’s conquests, too engrossed in their own survival, their own drama, their own desires and dreams.
The Empire, despite its tightening grip, never did get in the way of life's mundanity. While the Rebellion, Jedi, Sith, and tales of great battles made great stories for holodramas, the vast majority of the galaxy's populace went about as usual.
Within the ominous confines of the Death Star, Emperor Palpatine sat resplendently on his throne, his eyes glowing with malicious gleam. Darth Vader, the ebony figure of terror, knelt before him.
"The galaxy is ours, my Lord," Vader reported in his mechanical voice, radiating under the supremacy of his Master.
"Yes, Lord Vader," the Emperor cackled in his sinister rasp. "Yet witness the monotony that's spread from Alderaan to Zeltros. We've achieved our victory, yet the galaxy carries on with a life of indifference."
"The apathy of the many does not diminish our power, Master," Vader's synthetic voice filled the room. "Their mundane lives continue under the safety we provide. Their compliance is peace."
"Peace? Perspective, Lord Vader, perspective," the Emperor spat with a cruel laugh. "They heed not our rule because of routineness they have embraced. We won the galaxy, not hearts."
"Does it matter what the sheep think, so long as the shepherd controls the flock?" Vader asked, revealing a rare spark of defiance.
"It does," the Emperor hissed, "Their indifference is a disease, alienated and distant. To make them fear us is one thing..."
Palpatine paused, his eyes narrowing as a new thought entered his mind. A smirk crept up his weathered face, as he spoke. "Maybe it's time we reevaluate, Lord Vader. Maybe strength is not in ruling, but in creating. Have you considered... watercolors?"
Vader stiffened, "A... Sith... Lord... painting watercolors, my Master?" Vader’s voice carried no trace of humor, his imposing mask hiding any expression.
Ignoring Vader's confusion, Palpatine cunningly continued, "Perhaps in such trivialities lie the hearts of the galaxy."
And so, Darth Vader, the feared Sith Lord, began painting with watercolors. The strong, armor-clad fingers which once channeled the Dark Force now held delicate paintbrushes, and the ebony helmet reflected the countless hues of his palette.
However, watercolors proved to be no Death Star to conquer. His strokes were erratic, colors bled into each other, and forms were unidentifiable. It was a chaos echoing his own existence - a broken image of a Jedi Knight he no longer was.
Frustrated, Vader’s grip tightened around his brush, squeezing it until it snapped. "This is pointless," he growled. "My talents lie not in these matters."
"But perhaps, Vader," the Emperor shrugged, hiding behind the shadow of his hood, enjoying Vader's frustration, "it is through this struggle that you discover your true essence."
Vader looked at the mess on his canvas - a mishmash of colors and ugly, unrecognizable forms. This new challenge had truly tested his limits. Perhaps he was not invincible. A realization an invader of galaxies had never anticipated while looming over a pile of water colors.
Vader growled to himself. The process of creation was awfully different from the seduction of destruction. He yearned for his lightsaber's familiar hum, the power coursing through his veins while invoking the dark Force. But he was a loyal servant.
"I will try again, my Master," Vader's voice echoed through the chamber.
And so, he would do, pursuing his path through watercolors, failures, and the surprisingly frustrating world of the mundane. The galaxy rested ignorant, their lives as monotonous as ever, oblivious to the chaos arising from a canvas on the Death Star.
Weeks passed, and slowly, Vader mastered a modicum of restraint around the delicate brushes and vibrant colors. A new kind of tension hung in his art studio, away from the steel grey of the Star Destroyer corridors.
Finally, one day, Vader finished a painting he was truly proud of. It was an abstract creation, dappled in cosmic hues of blues and purples with hints of emerald. It spoke to the viewer in distinct whispers of strength and resilience, resembling a nebula— as chaotic as the universe, as relentless as Vader.
Brimming with pride, Vader presented his creation to the Emperor. His usually stoic figure stood tall and eager, awaiting rare compliment.
But Emperor Palpatine merely laughed, "You consider this...art, Lord Vader? This... childish splotch of colors?"
A silence settled over the room. Slowly, Vader's breathing grew louder and harsher. Then, in a loud, distorted bellow filled with all his strength, his rage, his sorrow, Vader cried, "Nooooo!"
He reached out with all his raw, unchecked power, his hand outstretched. Palpatine began to levitate, his mocking laughter replaced by a gasp of surprise. The next moment, the Emperor's body was hurtling down the endless shaft of the Death Star, his terrifying shriek echoing in the cavernous drop before being replaced by the deafening roar of incineration.
Vader stood there, panting heavily, the echoes of the Emperor's death cry ringing in his audio receptors. His painting, the source of all the commotion, sat quietly on the easel, the colors seemingly brighter, bolder now.
With the Emperor gone, Vader stood alone in the vast chamber, the once imposing figure now reduced to a misunderstood artist robbed of appreciation. The mundane life suddenly didn't seem so benign anymore. From the echoes of the Empire's domineering march to the subtle strokes of watercolor, Vader's life had taken quite turn, leaving in its wake a galaxy indifferent, yet a Sith Lord fulfilling his long-overdue destiny of liberation.
Darth Vader, now the unchallenged ruler of the empire, began a new venture. He turned the Death Star into the galaxy's most innovative Airbnb. The once dreaded battle station was now adorned with splendid interiors, exotic plants from Kashyyyk, cozy Castellian fireside nooks, and walls adorned with Vader's own abstract art.
Soon, travelers from every end of the galaxy booked stays to experience the infamous Death Star. Business boomed. Vader’s concept of leaving the past behind and stepping into the hospitality business was lauded.
Then one day, a notification popped up onto Vader's screen. An anonymous traveler from Bespin had left a 3/5 star rating. They had commented, "Space views: 5/5, Imperial service: 5/5, but the watercolor art is dreadful. Brought down the whole vibe. Overall, 3/5."
Vader’s breathing hardened. His gloved fist tightened around the edge of the console. The distant sound of the Death Star's deadly superlaser powering up stirred in the background. In a matter of minutes, the green beam illuminated the dark recesses of space, heading directly towards the unsuspecting planet Bespin.
"As you wish," Darth Vader murmured menacingly under his breath as he commanded the Death Star's superlaser. The planet Bespin, a celestial beauty in its own right, now shudder under the formidable power of the Death Star.
Suddenly, the emerald hues of Bespin's skies were interrupted by a magnificent, destructive green blast of the superlaser. The surface exploded in a resounding boom, shaking the very foundations of the galaxy. Bits of rubble sped off into space as the planet collapsed into itself, leaving behind nothing but cosmic dust and a trail of terror.
Vader watched the destruction from the view of his newly adorned living area, the metallic taste of vengeance satisfying him. His Airbnb business took a hit, perhaps, but his pride and ego remained unscathed. That was, until the next guest from Coruscant complained about the smell of charred paint and the lack of a planet view; apparently, there was only a sad, lonely asteroid belt now.
As Vader pondered over escalating his redecoration ideas while brushing up on watercolors, life in the vast galaxy moved at its usual pace. The whispering stars, the bustling trade routes, and the indifferent inhabitants continued to spin their tales of mundanity, silently acknowledging some battles are only meant for Sith Lords and their misunderstood art.
The dreaded Sith Lord, Darth Vader, catching onto the galactic trends, decided to reinvent himself. He started a "dark side tik-tok," a platform usually filled with quirky dance-offs and comical alien parodies.
Vader's first video was a grand tour of the Death Star Airbnb. However, the viewers found the lengthy shots of Vader's abstract paintings too dreary and the demonic heavy breathing of Vader didn't create a ‘feel-good’ vibe.
Brushing off the initial failure, Vader posted a video of a Sith workout routine. The strenuous force chokes and light saber movements failed to find resonance among the lazier citizens of the galaxy, who preferred Nalargon meditation over Sith exercises.
Next, he tried what he called, 'Lightsaber ASMR.' The sizzling hum of the crimson weapon clashed with the conventional relaxing sounds of space rain or Wookiee snores.
Lastly, he made a behind-the-scenes video featuring his helmet polishing routine. His black, all-encompassing helmet, coming off and going back on didn't exactly create the kind of intrigue he had hoped.
Vader watched as his likes and subscriber count plummeted, his silent rage simmering beneath his ebony mask. Anakin Skywalker, the podracing, stunt-pulling star, was nowhere near as popular as Darth Vader, the misunderstood artist turned failed Tik-Toker. The humility was real.
In a fit of rage, Vader accidentally sliced his holo-recorder with his lightsaber. The feed crackled and went blank. His brief stint with Tik-Tok had gone as well as his attempt at painting, perplexingly frustrating.
The galaxy chuckled and scrolled past, returning to their preferred Imperial spoofs and Ewok dance-offs. Adventures of Vader, their once-dreaded overlord, now served as banter over cheap Corellian ale. Beneath the mask, Vader sighed.
But in the persistent push and pull of the galaxies, planets, and life, Vader found strange comfort. The episodes of his Tik-Tok misadventures, the faint smell of charred paint in his quarters, and the picturesque sight of what was once Bespin now a trail of asteroids—all served as reminders. Reminders of a mundane saga that unfolded while the rest of the galaxy continued to spin on its oblivion. The force wasn't invincible after all; no, just mysteriously ironic.
Deciding to take a break from his artistic and social media fiascos, Darth Vader made arrangements for a vacation. He chose the moon Endor, fondly remembered by droids and Wookiees for its lush forests and peaceful Ewok inhabitants.
He veered his personal shuttle towards the green moon hoping for anonymity, hoping to blend into the dense forestry and get away from his accordion of blunders. But as they say, the force has a peculiar sense of humor.
Upon arrival, Vader found the scenery to be truly breathtaking. However, his tall, imposing figure and shiny black armor didn't blend in as much as he hoped - in fact, it stood out rather starkly against the green and brown hues of Endor.
During an innocent hiking excursion through the woods one day, Vader accidentally frightened a group of Ewoks. Misidentifying him as an Imperial enemy, they rallied the entire village and began to attack him with their primitive, yet annoyingly painful, arrows and stones. The clear, peaceful streams and lush meadows of Endor quickly turned into a battlefield.
After several hours of explosive debacle involving running, Force-deflecting arrows, and tripping over Ewok-made traps, Vader finally escaped, his cape torn and helmet scratched-up. He was offered neither peace nor the refuge he had hoped to find among the towering trees and serene atmosphere of Endor.
Wandering around aimlessly, nursing an aching side and bruised ego, Vader stumbled upon a group of picnicking Jedis out on a retreat. Yes, the Force wasn't done mocking him yet. One of them was using his fallen mask to prepare a barbeque. A tickling smell of roast Porg wafted from the half-charred helmet.
Vader, in exasperation and humiliation, drew his lightsaber causing the Jedi to scramble. After a mild but pointless squabble, and the intervention of Yoda's Force-ghost espousing peace and coexistence, Vader retrieved his helmet, parting with an awkward, silent nod.
Returning to his temporary Endorian abode with a smokey-helmet, Vader slumped onto his uncomfortable makeshift bed. His vacation was a disaster, the serenity of Endor was prove a myth, and he was still the amusement for his galaxy's citizens.
After the disastrous trip to Endor, Vader returned to the Death Star, his suit in shambles. His helmet was still smokey, his cape torn, and his armor scratched up - he was in desperate need of a suit repair.
Deciding to inject a bit of flair into his dark, imposing attire, Vader took his suit to the tailor droids at the Imperial Refurbishment Wing on Coruscant. He requested for a stylish makeover, hoping to uplift his current image from that of a failed artist and incompetent Tik-Toker to something more... trendy.
When he returned to pick up his suit, the droids presented him with their creation. It was still recognizably his, but with embellishments that reflected the latest trends on Coruscant. The helmet was polished to a dazzling shine, enhancing the black sheen and decorated with tiny gemstones around the eyes representing stars. His cape, once plainly functional, was replaced with an extravagant one lined with elegant Corellian threadwork.
Vader stared at the new suit, speechless. After donning the redesigned attire, he stood in front of a mirror, evaluating his appearance. He looked ludicrous. What he had envisioned as elegance was nothing more than an overly lavish circus outfit. His intimidating aura was replaced by a comical veneer.
"No," Vader growled, the rasp of his modulated voice echoing in the silence of the refurbishment wing. "This is not what I am, not who I am..."
Frustrated, he demanded the droids to create a new suit. This time, only requesting for repairs and a simple polish, choosing functionality over fashion. Once completed, he slipped back into his regular suit, feeling an odd sense of comfort in its familiar, imposing steeliness.
The following days were met with chuckles from Stormtroopers and raised eyebrows from Imperial Officers who had heard about his short-lived fashion experiment. Vader grumbled under his helmet, bracing the fading mockery with stoic silence.
Despite his powerful persona, he found himself repeatedly humbled by the simple struggles and disappointments of a mundane life. He was Darth Vader, the artist who couldn't paint, the Tik-Tok failure, the sightseer who traded peace for a scratched helmet. His life was turning out to be a strange comedy sketched upon the vast canvas of the galaxy. But one thing became exceedingly clear - the Dark Side couldn't guarantee mastery over everyday inconveniences.
To shake off the frustrations of his numerous misadventures, Vader decided to return to his years of piloting skills. He planned a joy ride in a TIE Advanced x1 fighter, exhilarated by the prospect of floating amid the vast cosmos.
Startled stormtroopers watched in confusion as Vader, infamous for his commanding presence, rushed towards the hangar with childlike enthusiasm. His footsteps echoed through the metallic corridors of the Death Star as he climbed into the TIE fighter cockpit.
Ignition roared as he pushed the throttle, and the signature howl of the TIE engines echoed throughout the Death Star. Expecting a tranquil journey through the marvels of the cosmos, Vader propelled the TIE fighter out of the Death Star's colossal hangar to be swallowed by the engulfing darkness of space.
However, the force was in a whimsical mood once again. Just when Vader was starting to enjoy his solitary time among the stars, a growing speck in the distance caught his eye. His heart sank as he recognized the fearsome silhouette of a Nebulon-B Frigate, bearing the symbols of the leftover Rebellion forces.
Before he could react, out zoomed a squadron of X-Wing Starfighters, their laser cannons blazing. Vader dodged and weaved through pulsating lasers, his joy ride now resembling a perilous dogfight.
"Of all the times for a Rebellion encounter," Vader grumbled, taking sight of an X-wing on his tail. Although an ace pilot, he found the controls of the TIE fighter, designed for younger, more agile pilots, awkward and unresponsive.
With skillful maneuvering, he managed to shake most of the X-wings. However, in the frenetic evasion, he accidentally careened towards a meteor shower. The shower hit the TIE Fighter, damaging the wing. Warnings blared and lights flashed in the cockpit as the spacecraft spun out of control.
"Is there no end to this dreadful day?!" he growled angrily, frantically trying to regain control over the malfunctioning craft.
Eventually, after much effort, he piloted the crippled TIE Fighter back to the Death Star. The look on the stormtroopers’ faces said it all - from an exciting joy ride to a dilapidated return, Vader's venture into leisure activities had once again gone awry.
Retreating to the solitude of his quarters, he removed his helmet, revealing a tired sigh. The escape he sought was replaced by chaos he had endured.
Seeking solace from his continuous loop of fiascos, Vader decided to spend his day off at the Imperial Daycare Center on the Death Star, a haven for little ones of imperial officers and stormtroopers. Upon his arrival, his imposing figure caused quite a stir among the children. Predictably, he was a bigger attraction than the hovering droid-nannies.
Darth Vader, the once-dreaded Sith Lord, sat on a miniature chair around a holographic table playing 'Djarik,’ 'Sabacc,' and 'Imperial Conquest,' classic board games that were a galaxy-wide favorite. However, remembering the competitive podracing kid from Tatooine, Vader played to win, every single time.
When he captured the last piece in a game of 'Imperial Conquest,' he leaned back waving a triumphant fist, "All too easy!" His deep, mechanically enhanced voice filled the playroom, leaving the younglings staring at him wide-eyed.
In 'Djarik,' when he cornered a child's flutterpig with his rancor, he leaned forward, "Apology accepted!" The coos, giggles, and cheers couldn't mask the disbelief on the children's faces - Darth Vader was unbeatable.
Even in friendly games of 'Sabacc', Vader exhibited ruthless gameplays. Each victory was punctuated by another classic line, "I find your lack of skill disturbing!" in his signature, modulated voice.
Hours went by with Vader relentlessly winning every board game put to him. The children, although initially thrilled to play with the legendary Darth Vader, began to grow weary of his constant victories. Their cheerful chatter and giggles slowly dwindled, replaced by yawning and mounting piles of failed game pieces.
However, Vader, in his oblivious joy of winning, failed to recognize the diminishing enthusiasm around him. The day drew to a close; the children retreated back to their quarters, darting exhausted, reluctant glances at the exultant Sith Lord.
Returning to the silence of his suite, Vader confusedly mulled over the wearied expressions of the younglings. He had dominated the games, yet somewhere, in their innocent, confused faces, he was humbled. Winning wasn't everything. Beneath his large, intimidating armor, Anakin Skywalker still had lessons to learn. And the children of the Death Star daycare offered a much-needed perspective on his galaxy-sized ego - sometimes, it was just about having fun.
One evening, Darth Vader found him at the Death Star canteen, nursing a Corellian ale. After a few glasses, his inhibitions lowered and the contours of reality began to blur. His head was a whirlwind of absurd ideas.
Drunk on the effervescence of the alien ale, he decided he wanted a 'deadly' smoothie. Gathering his wobbly self, he made his way to the Imperial kitchen, his footsteps echoing in the empty Death Star halls.
Startled droids watched as a drunk Darth Vader commandeered the kitchen, gathering ingredients for his smoothie. He returned from the pantry with several crates of Yabona, a sweet fruit native to Naboo, intended for the next day's breakfast.
Feeling impulsive, Vader decided a blaster would do as a perfect blender for his smoothie. He reached for the nearest Stormtrooper's blaster. Taking careful but wobbly aim, he fired at the fruit crate.
"You may fire when ready!" He bellowed.
The blaster beam pierced through the crate, causing the Yabonas to explode into a fine mist. Their sweet-smelling pulp splattered all over the kitchen, coating everything in a sticky residue. Vader, initially startled, began to laugh loudly, the absurdity of the situation cracking through his usually stern demeanor.
Staggering towards the pulpy mess, Vader scooped up a handful of it, placing it on a metallic dish. In his excitement, he had completely forgotten about a blender. His sous chefs, Imperial droids, watched in silent confusion, unsure of how to handle the situation.
He made his way back to the bar, the sticky dish in hand, leaving a trail of Yabona pulp in his wake. He sloshed the glutinous fruit pulp into his ale, creating an odd concoction of booze and fruit. He called it the 'Yabona Pulse' — a drink only a drunken Sith Lord could invent and enjoy.
The memory of the night was a blur, with fragments of laughter and Yabona pulp flying through the air. But it was a change, a break from the utter mundanity that swung like a pendulum in his life.
The morning after, a hungover Vader woke up to his personal quarters reeking of stale ale and sweet Yabona pulp. Cleaning droids zoomed around attempting to cleanse the grim mess, the memories of the previous night’s drunken hysteria still fresh in their wiring.
Tip-toeing around the purple pulp and broken crates, Vader slumped into a chair, his pounding headache a testament to his wild night. Word about the 'Blaster Disaster' had already begun to circulate around the Death Star. The unmistakable stench of the Yabona pulp only added to the growing legend of Vader’s drunken exploits.
Looking back at his pulpy misdoing, he let out a bitter, knowing chuckle. His venture into the mundane lifestyle was far from smooth. Every so often, he was reminded that, perhaps, Darth Vader was a conundrum too complex for an ordinary life.
After the chaotic, Yabona-filled episode, stormtroopers and officers quickly learned to keep Vader away from their blasters, especially after an ale or two, giving birth to yet another amusing anecdote in the Death Star diaries.
After his previous misadventures had died down to mere whispers, Vader found himself in the throes of boredom. His Airbnb was running smoothly once again, with Stormtroopers posing as housekeepers, Imperial Officers managing bookings and newcomers pouring in every day. But Vader, left with nothing to do, began planning mischievous escapades to break his ennui.
He started pulling 'Force Pranks' on Glanik, his Imperial Officer running the Airbnb operations. Glanik would find his data pad levitating off the desk on its own, or his seat pulled out from under him when he tried to sit. At one point, his coffee was replaced by a cup of sludgy Hutt slime - a prank executed using clever manipulation of the force.
The Stormtroopers were not spared either. They would hear the ominous breath of Darth Vader right behind them, only to turn around and find no one there. Their blasters would jam on their own accord or start shooting rays of colorful lights instead of the usual stun shots; all Vader's doing, enjoying his newfound amusement from behind the scenes.
His antics brought a wave of panic and confusion among the staff trying to manage the Airbnb. Complaints of floating cutlery, mysteriously rearranged room decor, and eerie, disembodied voices circulated among the guests staying at Death Star. For Vader, the entertainment was ceaseless.
One morning, Vader pulled his biggest prank yet. He woke all the guests with a galaxy-wide broadcast of him imitating Emperor Palpatine's speech, but altered into an advertisement for 'Death Star – A Starview Airbnb'. The imitation was so spot-on that it took several confused calls from around the galaxy for Glanik to recognize the prank.
Breathing life into his monotony was Vader's hilarious reign of prank terror that echoed throughout the Death Star, much to the exasperation of the staff and guests alike. Even the once fearsome image of Darth Vader had begun to transform into something approachable, even amusing.
However, for Darth Vader, his prank spree was more of a reminder of his mischievous younger days as Anakin Skywalker. The mundane life aboard the Death Star was far from dull or ordinary—it was narrating a newer, lighter chapter in the legend of a Sith Lord.
While the pranks had lightened the atmosphere on the Death Star, some of the Stormtroopers, smitten by Vader's new, less-intimidating avatar, grew a little too informal around him.
One day, as Vader was discussing a guest's dissatisfaction with the breakfast menu, a young Stormtrooper blurted out, "Ok Boomer," interrupting Darth Vader's discourse. The room fell silent. You could hear a pin drop, or even a proton torpedo for that measure.
The armor-clad Sith Lord slowly turned around, his menacing helm focusing on the mutinous Stormtrooper. A dangerous silence hung in the air for a moment before Vader, in a startling display of his power, lifted the Stormtrooper off his feet using the Force.
As easy as lifting a feather, Vader controlled the Stormtrooper in mid-air, flipping him around like a ragdoll. The Stormtrooper wailed in fear and surprise, his arms flailing helplessly. With another wave of his hand, Vader brought the trooper down, albeit gently, teaching him a silent but effective lesson.
Mustering a hushed "Sorry, sir," the Stormtrooper scampered out of the room with his tail between his legs. Vader turned back to hisdiscussion, the incident reminding everyone of the power behind the man known as Darth Vader.
Afterward, Vader couldn't help but smirk behind his mask. As amusing as the entire scenario was, it served as a reminder for both him and his crew. He might be engaging in pranks and trying his hand at being an artist or a Tik-Tok star, but he was still Darth Vader - a power to be respected. The "Ok Boomer" incident served as an amusing anecdote that reiterated the lesson - underneath the pranks and changing persona, he was, after all, the Dark Lord of the Sith. The balance aboard the Death Star shifted slightly, leaning more towards respect than amusement, although chuckles were still shared in hushed whispers around his increasingly bizarre antics.
After all his past ventures in leisure activities had ended in utter hilarity, Vader decided to dabble in the art of Galactic dating. Eagerly, he set up a profile on 'Stellar Sparks' - the galaxy’s answer to Tinder.
His profile picture featured him standing tall against the backdrop of a Star Destroyer, his iconic black helmet gleaming under the artificial lights. There was something inherently alluring about the brooding, mysterious figure that might pique the interest of potential matches.
His bio read, "A strong presence in the Force. Ex-Jedi Knight turned Sith Lord. Love long walks in the Death Star corridors, and Podracing. Not a fan of sand. Looking for someone who can appreciate abstract watercolor paintings and survive Force Chokes. Join at your own risk.”
His job description - "Galactic Emperor’s Right Hand... until I threw him down a shaft. Now, a freelance Sith Lord and part-time Airbnb owner." His anthem - Imperial March disco remix.
Thrilled with his profile, Vader began swiping right on potential matches. After several days of unsuccessful swipes and crickets chirping on his chats, a notification pinged on his device - 'You have a new match!' Snoova, a female Wookiee from Kashyyyk, interested in Sith lore and who adored abstract watercolor art, had swiped right on his profile. Excited, Vader initiated a conversation and soon, they agreed to a video call.
On the designated day, Vader anxiously sat in his quarters, staring at his reflection in a polished piece of metal. When the call connected, Snoova’s furry face appeared on the holo-screen. Her growls were translated into Basic by her translator droid standing in the background.
Their date kicked off with lighthearted banter about Vader’s Airbnb business and Snoova’s interest in Sith history. However, as Vader started boasting about his art and his newfound love for Galactic Tik-Tok, Snoova's interest visibly waned.
To Vader's disappointment, the date ended prematurely, leaving him staring at the blank holo-screen. While he had imagined sparking a romance, his excitement was met with another round of disillusionment. It seemed, amid his journey to live the mundane, Darth Vader had become a conundrum too strange for even the vast, accepting universe. His laugh echoed around his empty chamber - a man shrouded in power and fear, yet struggling with ordinary endeavors... the galaxy was indeed full of surprises.
Feeling restless, yet undeterred, Vader decided that his next venture would entail something more lively, more social. With the Death Star Airbnb running successfully, he signed up to become a TIE-fighter pilot for 'Star-lift', an inter-stellar commute service modeled after Uber.
Vader's TIE fighter, with its iconic hexagonal wings, became a unique attraction for Star-lift's patrons. His passengers included an array of interesting characters; a chatty protocol droid from Tatooine, an overdressed senator from Coruscant, a Hutt merchant from Nal Hutta, and countless others.
Every ride was filled with unusual conversations about his passengers' lives across the galaxy, his pranks on the Death Star, and even behind the scenes stories of his infamous 'Force Chokes'. To his passengers, he was more than just the intimidating Sith Lord - he was an intriguing mix of a galactic figure and an everyday pilot, albeit an absurdly unusual one.
His Star-lift gig was not only successful but also curiously satisfying. Vader, for the first time in a long while, felt content.
However, fate had a twist in mind. One night, he received a request from a drunken Wookiee needing a ride home from the Mos Eisley cantina. The journey was uneventful; the inebriated Wookiee was half-asleep, occasionally grumbling unintelligibly.
Everything went downhill, quite literally, when the Wookiee suddenly woke up and threw up all over Vader's immaculate TIE Fighter cockpit. The retching sounds were followed by apologetic grumbles.
Vader's contentment evaporated and was replaced by frustration when he examined the mess and the stench that now filled his TIE Fighter. As if things weren't bad enough, the Wookiee angrily wrote a 3/5 star review. It read, "Erm wookiee...driver didn’t have barf bags!"
Outraged, Vader stared at the rating. His dream job seemed to break into another laughing spectacle for the galaxy, yet another misadventure drafted into the not-so-envious life of Darth Vader.
Despite the continual failures, Vader marveled at the lighter side of the universe. Hidden within his usual Sith Lord demeanor, he was just another man, another creature of the galaxies trying to find fulfillment in the common and the mundane. His adventures, his misadventures, had indeed made him a paradox.
", "date_published": "2023-09-02T00:00:00.000Z" }, { "id": "https://george.mand.is/2023/05/publishing-to-11ty-with-ia-writer-and-micropub/", "url": "https://george.mand.is/2023/05/publishing-to-11ty-with-ia-writer-and-micropub/", "title": "Publishing to 11ty with iA Writer and Micropub", "content_html": "I wrote this blog post from iA Writer and published it directly to my 11ty-powered blog using the Micropub protocol and this nice tutorial from Robert Beekman showing me how to stitch this all together with Netlify Functions.
If everything went well, this should show up on my site.
I guess we'll see?
I'm excited to see if this works as smoothly as I hope. I like the minimal writing environment iA Writer brings and have wanted to bring my blog-writing process into it for a while now, in the hopes it might encourage me to write more.
Update: It worked! Neat. Some things to note:
I'll cut to the chase—because a man who took the time to make a computer fart clearly cares and respects, above all, other people's time.
I recently noticed a project called AudioGPT on HuggingFace:
It is a transformer capable of performing a variety of impressive audio tasks, including generation! You can make dog barks, guitar riffs, drum solos...
The guitar riff and drum solo were interesting, if a bit disjointed and uncanny. I can imagine this will only improve, like so much other AI work happening right now.
But I know why you came here. You want to hear a computer fart.
Well, there you have it.
It also immediately passed the Turing test by proceeding to deny the fart it had generated when I uploaded the file it had just given me and asked it to identify the sound:
It claims the sound file "contains some pigs oinking twice."
🤨
It's not the singularity... but it'll do.
", "date_published": "2023-05-02T00:00:00.000Z" }, { "id": "https://george.mand.is/2023/03/playful-aliases-for-your-gitconfig/", "url": "https://george.mand.is/2023/03/playful-aliases-for-your-gitconfig/", "title": "Playful aliases for your gitconfig", "content_html": "Imposter syndrome has many forms. For me, one of its forms comes in feeling like I should have a more custom and clever library of dotfiles at this point in my career. A better "bag of tricks" as it were.
In particular, I have almost no git aliases. Not even a classic like git co
. I guess I've never felt like saving keystrokes here and there—particularly in a world with autocompletion—is my biggest barrier to efficiency?
I actually have exactly one alias:
cb = "!git branch --show-current | pbcopy; echo 'Copied branch to clipboard: $(pbpaste)"
We used to have a workflow that required manually entering our branch names into Jenkins. I finally got tired enough of handling that manually and trying to remembe this arcane git command to get me just the part of the branch name I needed that I caved.
But this post is not about that, or the way I sometimes wield git with all the dexterity and cunning of a caveman using a MacBook as flint to start a fire. This is about a joyfully idle thought I had earlier today to make more playful aliases for git.
Behold, for your copy/paste convenience straight into ~/.gitconfig
:
[alias] breakstuff = branch yolo = "!git add -A && git commit -m 'YOLO!' && git push --force" gimmedat = pull gimmedis = fetch blablahblah = commit squishes = merge thank = blame hm = log hmm = diff grafitti = tag ghosts = commit --allow-empty -m "BOO!" yoink = clone hidemysnacks = stash gimmesnacks = stash pop wheremysnacks = stash list doover = reset HEAD --hard ohshit = "!git hidemysnacks && git doover"
If you have your own you'd like to contribute, please open a PR on my project over on GitHub:
", "date_published": "2023-03-14T01:51:18.136Z" } ] }