I recently learned about IndexNow: a simple standard for notifying search engines[^marketshare] that you've got new content they should index. If you only post an average of 5 times a year, it probably makes more sense to use cURL to submit your one URL to their basic API. But I like to automate things, and I'd already written a standards compliant WebSub Subscriber for AWS Lambda and SNS, so I thought I'd write another little Lambda function to bridge that one to IndexNow.
IndexAtomNow is as simple as I could make it. It processes an SNS notification containing the kind of Atom fragment WebSub gives you, extracts the URLs from each <entry> element, and submits them to IndexNow. It doesn't have much error handling, or useful logging yet, but it does the job, and at a rate of 5 invocations a year, runs well within Lambda's free tier.
When I publish this post to my static but TLS-enabled site using S3 and CloudFront, I'll also notify my WebSub Hub[^hugo], which will notify my subscribed WebSubscriber instance, which will forward the notice to my IndexAtomNow instance, which will use my configured key to notify IndexNow, like a proper Rube Goldberg machine[^microservices].
[^marketshare]: Not including Google, which has ~90% market share 🤷, but at least including Bing which has like ~4%.
[^hugo]: I haven't found a nice way to integrate that into my Hugo deployment configuration yet.
[^microservices]: Ahem! "Serverless microservices architecture." 😉
Dunno why, but there are a bunch of IP-KVM and USB-KVM products coming out in the last few years. These differ from your traditional keyboard, video, and mouse switch in that instead of switching one set of interfaces from one computer to another, you use one computer to access another. The computer you're using (the host) is used to control another computer (the target), either over a network or over a USB cable.
They have an advantage over solutions like VNC and Chrome Remote Desktop in that you can access the interactive BIOS on the remote computer, or even install a new operating system remotely.
KVM over IP
IP-KVMs (or KVM over IP) are devices that plug into your network and pretend to be a keyboard, mouse, and monitor, and more to the computer they're connected to.
Both of the ones I own are capable of pretending to also be a disk drive, and of joining a Tailscale VPN so that you can (relatively) safely access them from the Internet.
PiKVM V4 Mini
I started playing Spirit of the North on my Chromebook, and later got a Steam Deck. It's a decent game, but not excellent. One of its faults is that it doesn't support Steam Cloud. And I didn't enjoy it enough to start from the beginning. The Borealis environment that makes Steam on Chromebooks possible is a restrictive, so it took some work to dig into it far enough to find the save file and export it.
First, start Steam on your Chromebook. While you wait for it to start up fully, go back to a browser window and press Ctrl-Alt-T (not to be confused with Ctrl-Shift-T, which reopens your last closed tab). This opens crosh, a limited shell that lets you do a few things that you can't easily do from the UI.
Within crosh you can run vmc list to confirm that the borealis VM is running. Unlike crostini, borealis doesn't run a container in the VM.
crosh> vmc list
borealis (27419668480 bytes, raw, sparse) running
termina (85899624448 bytes, raw)
Total Size (bytes): 113319292928
We have a new contender for my favorite slim wallet - the Scrubba Weightless Wallet. It's not perfect, but it has so much going for it. Let's review it.
What I Like
Scrubba Wallet (green, with money)
Materials
I love ripstop nylon as a wallet material. The addition of a thin vinyl layer to the exceptionally thin ripstop makes for a nicer feel than the crinkly material you might be familiar with.
But more importantly this is a truly exceptionally thin wallet, with only six total layers (when folded) of already thin material and zero seams adding to thickness.
Materials
Thinner is better, as long as it doesn't compromise durability. Wallets have layers, and layers add up fast.
Durability matters a lot. A good wallet should last long enough for me to tell dozens of people how much I love my wallet, without being a weirdo who likes to tell people how great his wallet is.
Leather and similar materials have great hand feel, but they're thicker. Use the thinnest material that has the other properties you need. One of my favorites is the rip-stop nylon used to make kites and spinnakers.
Some wallet makers use slabs of metal or plastic. They tend to be around 3mm per layer thick for durability, making them unsuitable for a slim wallet.
Layers
What I Like
The fabric is excellent. It feels great in your hand and feels durable. It's got a lot of potential for a slim wallet.
The magnets are strong and add stability and a pleasing snap on closing or opening. It feels secure.
Capacity is not huge, but I'm a strong advocate for putting your less (or less likely) used cards in your bag - not your pocket - and pitching receipts and other junk you don't need. And when closed it holds your passport, cards, and pen with just enough give so that nothing is tight.
I love that it's got space for a pen. My other passport wallet doesn't. And I think it's good that it's got room for some cash, but I didn't check if it's long enough for paper Euros (would need to be ~160mm?).
What Could Be Improved
Preheat oven to 400°F. Grease muffin tin.
First bowl (dry ingredients):
5 oz Flour5 oz Farina (cream of wheat, malt-o-meal, or similar)1 Tbsp Baking powder
Whisk together.
Second bowl (wet ingredients):
Suppose you have predictable network interface names disabled on your system, and enabling it is going to mess things up, but you're adding a new network card that uses a different driver, and that's going to mess things up too.
It's going to mess things up because while the order your driver enumerates devices in might be predictable (your interfaces always got named eth0 and eth1 in the right order), the order your drivers are loaded is not predictable, so your new network card might get eth0 and bump your earlier interfaces down the line. Worse, there's no guarantee that it will even be predictable from one boot to the next. What to do?
You could enable predictable names, but let's say you've got dozens of configs, scripts, and programs that all rely on eth0 being your default NIC. Sure it wasn't the best choice, but it's going to be costly to correct it. So instead let's partially enable predictable names.
Re-enabling Predictable Names
The most common way to disable predictable names is with net.ifnames=0 on the kernel commandline. This isn't processed by the kernel, but by udev, which uses it to disable all attempts at renaming interfaces altogther. It prevents you from selectively enabling interface renaming. So the first step is to remove this from your bootloader configuration.
Disabling Another Way
I really enjoyed Goodboy Galaxy. It took me too long to reach 100%, but in my defense it turns out I was the victim of a known bug in v1.2.
Goodboy Galaxy at 100% in... 44 hours
If you're interested in spoilers, there's a hidden message that points to a fun cheat code. If you're not, don't click that link!
I (KC7RBW) sometimes dabble in Ham Radio, mostly on the technical side. I'm not big on talking, and antennas are voodoo, but I like to learn how things work, and to prove my understanding by doing.
For actually about 8 years, I've been quietly working with WWARA, the frequency coordinator for the Western Washington region, to correct inconsistencies in their coordination database. A coordination database is a source of truth for radio repeaters you can reach in your region. Technically coordination is voluntary, but the FCC rules say that if there's a conflict (two repeaters interfering with each other) the coordinated repeater has the right of way.
I got into this because I hate manually configuring radios. It's so tedious, even using the PC software that goes with your radio. So I wrote scripts that convert the data from WWARA into formats that can be imported through your PC software. In fact, the .chirp format file that's included in WWARA database extracts is generated by a script I wrote (unfortunately CHIRP deprecated that format). I've had scripts to convert to Icom format, various iterations of OpenGD77, and others.
Along the way I've made my scripts easier for me to use and adapt to new formats, and to check for more errors, including where a coordination doesn't align with the Band Plan. It's all in a fairly robust state now. You can check it out at github.com/ajorg/WWARA, but the reason I wanted to blog about it is that we've reached an important milestone: The WWARA coordination database contains no detectable errors. Actually there are just two records that violate some rule or other, but these are grandfathered in. One of them is quite old.
That doesn't mean it accurately reflects what repeaters are on the air in the Western Washington region, but it does mean that every coordination conforms to the rules, and most are probably accurate.
Here are some things to know about GMRS (General Mobile Radio Service) if you're thinking about getting a license, or you recently got one.
Licenses, Callsigns, and Families
GMRS licenses don't require passing any exams but do require a small fee. The callsigns are too long (mine is 11 syllables). But your whole family can use the same license and callsign.
Immediate family members are the licensee's spouse, children, grandchildren, stepchildren, parents, grandparents, stepparents, brothers, sisters, aunts, uncles, nieces, nephews, and in-laws.
Note that means it matters who holds the license. An adult with children and parents pulls the most people under one callsign.
Radios
Butterscotch Apple Pie
The paper bag slows browning of the crust and increases humidity while cooking.
Preheat oven to 375°F
1 Paper bag, large9" Pie shell, unbaked
5 cups Apples, peeled and sliced6 ounces Butterscotch morselsCinnamon
¼ cup Flour (all purpose)¼ cup Sugar1 tsp Salt½ cup Cream (light)
I worked at Amazon, but this is my own opinion.
I learned more in one year at Amazon than I did in my seven years at Novell. A lot of what I learned in the last ten years at Amazon is weird esoteric stuff about Linux distributions, AWS services, open source licenses, and a bit of law. But I also learn some life (or at least work) lessons.
Dig in Before You Ask
You don't know everything you need to know to do your job. You can ask a colleague and they'll probably be able to tell you, but instead of knowing how to find the answer, you'll only know the answer. Before you ask a colleague, consider if you might be able to answer your question yourself in about the same time as it will take you to ask, wait for them to make time to help you, and find the answer themselves (because they don't know either, but they know where to look). Every time I stop to at least try to find answers on my own I'm glad I did.
There Are Things You Don't Know
Even when you're good at seeing the big picture you won't have all the information. Conversations are happening above and to the side that you aren't part of. Things you find in legacy systems and think "What the actual heck?" (shock-value profanity is lowbrow and folksy language is charming) - those things often have astoundingly good backstories. Sometimes they don't, but it's worth uncovering the story before you burn the whole thing to the ground. So often someone comes to you with something that you think definitely means they're an absolute moron but when you dig just a bit deeper it turns out the problem is complex and nuanced and actually they're doing an excellent job of managing that complexity.
Apologies for the pithy title. It's not stricty true, but it frames what happened.
I was a contributor to OpenGD77. Some UI stuff and DCS support, plus some minor fixes. Loads of fun learning how to twiddle embedded devices.
Roger (the maintainer) got pissed off at someone selling GD-77 radios with OpenGD77 pre-installed, because he has a non-commercial note tacked onto the license. He was still pissed when they sold radios with a $10 charge to also install the firmware.
So he stopped sharing the source code.
How that addresses his concern is beyond anyone to explain. They can still download the compiled firmware. There's no reason to believe anyone was compiling it in order to sell it.
I was working for an OSPO at the time (open source programs office) so I had an unreasonable amount of expertise in copyright and licensing.
I love poutine, so I came up with a recipe to make it easy.
Fries
Buy some fries at Five Guys. Large regular fries. Making your own fries is hard, so don't. If you can get someone to fetch them while you make the gravy it's best if they're fresh.
Cheese Curds
I like Ellsworth Natural Cheese Curds. I buy them from Amazon Fresh, but cheese is regional. Fresh natural curds are best, no colors or flavors.
Leave them out on the counter while you make the gravy so they aren't cold. I've seen poutineries keep them in tepid water, but of course you should drain them first if you do that. Wet cheese would mean wet fries.
NO APPLES NEEDED!
Pastry for two crust 9-inch pie
36 RITZ CRACKERS
2 cups water
2 cups sugar
2 teaspoons cream of tartar
2 tablespoons lemon juice
Grated rind of one lemon
Butter or margarine
WebSub is a publisher / subscriber standard for content on the web. For example, when you subscribe to a blog or news feed in Feedly or Inoreader these services will periodically query the feed to see if there are updates, but there's a better way. If the publisher supports WebSub, the service can instead subscribe to updates by sending a callback URL (a Webhook) to a Hub. When the publisher notifies the Hub that there's an update, the Hub fetches the content and delivers it immediately to all the Subscribers. This reduces the load on the publisher's servers and ensures timely delivery of updates. Draft versions of the standard were called PubSubHubbub or PuSH for short.
Admittedly that's a pretty niche thing. There are a total of, like, three well known services that make use of the standard and a handful of others. Then again, this kind of standard is what makes a vendor neutral, decentralized web possible. Publishers can use whatever Hub they prefer, and can migrate subscriptions to another hub when they want.
I stumbled across WebSub around the time AWS Lambda launched their new Function URLs feature, and I was itching to build something that used them, so I built a Subscriber.
WebSubscriber uses AWS Lambda, Function URLs, and DynamoDB to subscribe to web content, and delivers published content to Amazon SNS. In other words, it bridges the WebSub pub/sub system to the SNS pub/sub system. It's written in pure Python, using only the standard library and Boto3 (the AWS SDK for Python), and released under the MIT License. It passes all Subscriber tests in the WebSub Rocks! test suite. Just a hobby, won't be big and professional, but it was fun to write and combined with my SNS to Webhook Lambda Function I can be notified of updates to... my own blog. Yay!