Monday, December 22, 2025

Building A Better Digital Bat Signal - Part 1 - The Plan

The Problem

Some people find it difficult to unplug from their day job while on vacation. Not me. When we travel, I quickly transition from work being a primary focus to a distant memory.

This is usually a good thing, as travel is precious and I want to make the most of it. But this is problematic, because even when I'm away I want to support customers who depend on me.

The compromise that I've had in place for years is to tell my clients that if they find themselves with a critical emergency, drop me an e-mail with URGENT in the subject line. I then keep an eye on my inbox, and jump on these messages as quickly as possible. This lets me leave the rest of the messages in my inbox to pile up.

What's nagged at me, however, is that my system requires me to monitor my email. This is less than ideal for everyone. I'd like to be able to stop checking email altogether, and my customers would benefit from a system that is not susceptible to human error.

Essentially, I've set up a bat signal, now I need to write some code to alert me if it's lit up.

The Fun Solution

My first thought was to build some wearable tech, perhaps a pendant that would serve to announce the presence of an urgent message. The jewelry would be delightfully simple, signaling state by glowing in one of three colors. Green means all is good, yellow means that I've lost connection to the status-checking service and red means that I have an urgent issue.

While primitive, this color based UX would let me fully unplug, yet react quickly if there was a problem.

The tech to build such a device is inexpensive and readily available. What I'm after is little more than a bluetooth compatible micro controller, a grid of LEDs and some odds and ends to tie them together. This can be simplified even further, if I used a platform like the Circuit Playground Bluefruit, which has both Bluetooth and LEDs built in.

Oh my, would this be fun to build. And there are a number of tutorials on adafruit.com that seem like a great place to start. Ones that jumped out at me include: NeoPixel LED Heart Necklace, DotStar Fortune Necklace and the NeoPixel Ring Clock. All of these involve an LED based piece of jewelry powered by a microcontroller.

But alas, there are a number of demerits with a hardware based approach. In my mind's eye, the pendant is compact and smart-looking. Yet, the project will start its life as a series of raw components and a heap of wires. Turning this jumble of components into a compact and comfortable to wear piece of jewelry is non-trivial to say the least.

There's also the question of battery life: how big a battery do I need, and how can I camouflage it and make it comfortable to wear?

If I did manage to produce my magical pendant, would I be happy to have another piece of tech to bring on travel? That's more hardware to keep track of, charge and generally debug. Will it be worth the hassle?

And finally, the software to power the pendant is broken into three stages. First, there's code that runs on a server to determine the status of my inbox. That code will send a message to my phone. Next, my phone will process this message, and forward it to the pendant via Bluetooth. Finally, the pendant's microcontroller will convert the message from the phone into a glowing LED.

A far more practical phone based solution calls for precisely these first two steps. So, the smart play is to build a phone version of my bat-signal detector first, as I'll need to write this code anyway. In the future, I can opt to add hardware to display this status in a novel way.

So yeah, while it's incredibly tempting to take the hardware based approach, the ideal MVP should rely on the hardware I already own and carry everywhere: my phone.

The Tasker Solution

While a custom hardware solution is sexy, an Android Tasker based solution should be easy. My plan is this: on a Linux server, use the Gmail API to determine whether I have an unread message in my inbox with the word URGENT in the subject line. If so, then my inbox status is urgent, otherwise, I'll consider the status as ok.

Next, I'll send this status as a message to my phone using AutoRemote. AutoRemote is an amazing service that delivers messages to any phone from any system with a web request. In the case of a Linux server, this can be accomplished with a curl command.

On my phone, I'll use Tasker to react to the AutoRemote message. Specifically, I'll map the status message into a background image and then call SetWallpaper to make this new image my background.

In short, a customer will email me with an urgent message, and in short order my phone's background will change to something attention grabbing. That means I don't need to check my email, I just need to interact with my phone, which of course, I do throughout the day.

If all goes well, in less time than it would take to figure out what hardware I need to buy to build the wearable, the entire project can be completed.

Let's do it!

Wednesday, December 17, 2025

hbo-blogger.el: Still Editing Blogger Posts in Emacs, Still Loving It

Last week I updated the packages that power my local emacs config by running:

  • M-x package-refresh-contents
  • M-x list-packages
  • U
  • x

While I'm sure I picked up many helpful updates, the oauth2 update was problematic: it contained changes that broke my blogging package: hbo-blogger.el.

hbo-blogger.el was written years ago and its use of specific oauth2 functions like oauth2-url-retrieve-synchronously was a poor design decision in the first place.

I've since updated this package so that it not only works with the latest oauth2.el, but it also makes use of the standard url-retrieve function.

If you're looking for an example of using oauth2.el or a comically simple Blogger interface, you should check out the latest code.

Absence Makes the Heart Grow Fonder

During the stretch that hbo-blogger.el was broken, I switched back to editing content within Blogger.com's web interface. While this was functional, it definitely made me appreciate the value of writing within emacs.

Reflecting on this, I appreciated that first and foremost, I missed emacs' core editing capabilities: the keyboard shortcuts, html-mode's ability to complete tags, the ability to access previously copied items to the clipboard, on demand access to the spell checker, and hundreds of other small details that have become second nature from using emacs for 30+ years.

I also missed having access to my project-notes package. This tiny add-on lets me effortlessly jump from the draft of my writing to a scratch pad and back with a single keystroke. This lets me switch from writing to research mode and back with zero friction.

And finally, I missed gptel, which provides brilliant emacs integration with an LLM AI of your choice. This lets me do research and proofreading within emacs with zero distractions.

Man, does it feel good to be back!

Tuesday, December 09, 2025

Sun Pillar!

On my run tonight, what appeared to be a normal sunset turned into a first for me: a sun pillar:

This effect is create by millions of falling ice crystals. It's sort of like a rainbow, but also not at all like a rainbow. Either way, how magical!

Friday, December 05, 2025

US open 2025 - Homeward Bound and Closing Thoughts

[Composed 8/29/2025]

Thanks Mom and Dad!

A couple of years ago we found the pefect answer to one of my parent's FAQs: what can we get you guys for your anniversary? The answer: lounge access at the airport. This is the perfect gift because every time we take advantage of it, it feels like an absolute luxury.

And so today, as we flew from La'Guardia to DC, our first stop after security was the lounge, where we got to eat, drink and reflect on how amazing the last couple of days have been. Thanks Mom and Dad!

The lounge also delivered in terms of practicality. Shira and I needed to join a foster parenting related video call. Doing so in one of the lounge's mini-private meeting rooms was ideal, as convo could remain private. The fact that I could nosh on little pastries and drink tea while the meeting was going on was a nice bonus.

A Mid Air Mystery

Our flight back to DC was easy and the scenery gorgeous. I snapped some pics of what appeared to be an unexpected site in the area: pit mine or quarry. But for the life of me, I can't identify it.

I tried busting out my innner Sherlock Holmes, but every lead I chased down was a dead end. I checked Flight Aware to analyze our flight path, tried Googling landmarks that appeared in the photo and did a bit of timestamp math to determine where on our trip the photo was captured. Of course, I asked ChatGPT for help, but in this case, it told me to try the things I was already trying. How can such a disctinct location from above be invisible on the ground? On our next flight home from LGA, I'll keep my eyes peeled and the GPS Test app ready to grab a set of coordinates. This site can't hide forever.

A Little Less Tennis?

For the second year in a row, we visited the tournament on Tuesday and Wednesday, versus coming for the middle weekend. We did this last year out of neccessity, and this year because we liked the larger match selection the earlier days offer. Compared to last year, however, there was slighty less tennis going on. That's because for the first time in the Open era, the US Open started on Sunday and not Monday. Some players seem quick to point to this move as a way for the tourament to make more money. However, I have to imagine that spreading the tournament out over an extra day means that rain delays and other glitches don't quite pile up into the into scheduling nightmares; like they seem to do every year.

So while there was something special about having an impossible amount of tennis to watch on Tuesday, with matches going deep into the night, the extra day did seem to make the schedule more consumable. I have to imagine that's a good thing for the tournament.

Goodbye T6s, Hello JJ02 and OpenCamera

This year my US Open gear remained nearly unchanged in all but one department: my camera gear. In a major break of tradition, I left my Canon T6s DSLR with 300mm lens at home. The fact is, the aging DSLR just can't compete with the quality and convenience of my Galaxy S22 cell phone. I considered using this as an opportunity to slurge and pick up a new, probably mirror less camera. While I could no doubt get a camera that would outperform my cell phone, I can't justify the cost and bulk of such a setup. Whatever I'd gain in image quality, auto-focus speed and shots per second, I'd lose in portability. My goal is ultimately to capture the story of the Open, and my cell phone lets me do this more than well enough.

Still, I couldn't resist using the Open as a proving grounds for two new photography add-ons: one hardware, one software.

On the hardware side, I brought along a ULANZI JJ02. This is combination tripod, selfie-stick, bluetooth trigger and camera grip all in a fist-sized package. The JJ02, like most multi-purpose tools, doesn't fully excel in any one area. All the features work, but all have limitations that a dedicated item wouldn't have. For example, the tripod can has only the most basic adjustment options and the Bluetooth trigger isn't USB rechargable. Yet, the sheer portability and functionality of the JJ02 makes it a winner. The tournament forbids tripods and selfie-sticks, yet I had no problem bringing it through security. When we wanted to grab a group shot, the Ulanzi was quick to set up, use and tear down. I took well over 1,700 photos during the tournament and the grip definitely made the camera more comfortable to use. So yeah, the JJ02 may be a compromise, but on the balance, it's a winner.

On the software side, I experimented with using Open Camera. Conventional wisdom is that no 3rd party app can beat the phone's built in camera. That's because the built in camera has access to features that aren't available to 3rd party apps. And for everyday use, I find this to be true. Yet, Open Camera does have a number of advantages that made it shine during the Open. The repeat option let me capture sequences of images with ease. I was also able to select Focus Continous Picture, so that the camera refocused on each shot. Combining these features let consistently snap action sequences.

Other cool features that Open Camera offers includes exposure and focus bracketing, focus peeking, alternative implementations of HDR and NR modes, and impressive control over things like file naming and image metadata.

The user experience of OpenCamera is far less sexy than the built in photo app. Yet, it brings a degree of consistency which is much appreciated. Most importantly, the apps settings are truly sticky. If I carefully input a series of settings, they aren't lost, as often seems to happen with Pro mode in the stock camera.

For day to day snapshots, the S22's default camera is amazing. But for specialized tasks, Open Camera is an excellent tool to have in the toolkit.