#hubris| cliffle.com
So in my day-job over at Oxide we’ve built this nice embedded operating system called Hubris. If you follow my blog, you’re probably aware of it. I also build a lot of embedded electronics outside my day-job, and people sometimes ask me (often excitedly!) if they’re using Hubris. The answer so far is “no.” This is for a variety of reasons, but probably the biggest: it’s actually quite difficult to use Hubris for anything if you don’t want your code to live in the Oxide Hubris re...| Cliffle
reCODE: QMK for the WASD CODE v2| cliffle.com
#rust| cliffle.com
Putting custom firmware on the WASD CODE v2| cliffle.com
#glitch-demo| cliffle.com
#hardware| cliffle.com
#embedded| cliffle.com
lilos v1.0 released| cliffle.com
The server chose violence| cliffle.com
I made a thing to help you make a thing out of a keypad| cliffle.com
tl;dr: Check that your RSS reader is using an HTTPS URL, because the HTTP one will start redirecting soon, and you probably want to find out if it breaks. Edit from four days later: I’ve flipped the switch on this and, from the logs, it doesn’t seem to be messing anybody up. --- It’s been just about four years since I finally got HTTPS and HTTP/2 working for this site. During that time, I’ve seen most incoming traffic from humans transition over to encrypted connections. (HTTP/2 conne...| Cliffle
An STM32 WFI bug| cliffle.com
Mutex without lock, Queue without push: cancel safety in lilos| cliffle.com
Getting file/line in await traces| cliffle.com
Composing concurrency in drivers| cliffle.com
How to think about `async`/`await` in Rust| cliffle.com
Writing a basic `async` debugger| cliffle.com
Safely writing code that isn't thread-safe| cliffle.com
Why Rust mutexes look like they do| cliffle.com
At some point in the past… I dunno, two years or so, it appears that my RSS feeds broke. I use Zola to generate this site, and they don’t have much in the way of a cross-version compatibility guarantee – minor version updates routinely break my templates. (I’m currently stuck on an older version because of this bug.) They appear to have changed the names of the RSS-related settings, causing my detection for generate_rss to always return false (because they also seem to default any typ...| Cliffle
On Hubris And Humility| cliffle.com
This is my favorite sweet potato preparation. It produces a creamy puree with a texture like mashed potatoes, but with a flavor that’s somewhere between a side dish and a dessert.| Cliffle
This is based on a recipe from my mom, who called these cookies “Alexandrites.” Most folks online seem to call them “lace cookies.” Either way, they are delicious. I’ve tweaked these to suit my preferences, of course – while my recipe may be marked “alpha” hers has decades of cookies behind it.| Cliffle
These cookies come out small, which is good, because it’s hard to stop eating them. That’s why I only bake half a batch at a time. Sorghum syrup may not be a thing where you live. You can try substituting molasses or date syrup. (I haven’t tried either.) This recipe is derived from several online recipes, with a particular influence from Rebecca Blackwell’s recipe.| Cliffle
This is based on this a recipe from King Arthur Flour, but has been optimized for how I personally prefer cinnamon rolls: with citrusy frosting and a lot of cinnamon taste. It turns out that adding a carefully chosen amount of freshly ground black pepper to cinnamon causes it to taste more cinnamony when it comes out of the oven. Too much pepper, and it tastes like pepper (which I also like, but that’s not the goal here).| Cliffle
This frosting is what I prefer on cinnamon rolls. It comes out flavorful and sweet, but not too sweet – and the salt helps to bring back some of the complexity of the citrus that would otherwise be lost to the sugar.| Cliffle
I like my collard greens soft but not mushy, with a mix of salty and sour flavors and not too much sugar. You can achieve this by braising, but I use an electric pressure cooker – it’s much faster. This is derived from a bunch of Internet recipes and then tuned to my taste. This recipe can be doubled, but you may run out of space to steam the greens. You can do it in batches since they’ll shrink a little.| Cliffle
Oats have been easier to get than good granola recently, so I’ve taken to making my own. This is remixed from a friend’s recipe.| Cliffle
I’m referring to this as “saag whatever” because whether to add mixins – such as paneer, potatoes, or vegetables – is up to you. The recipe doesn’t particularly care as long as your mixins don’t add a bunch of liquid. Boiling or roasting some small potatoes in advance, or alongside, makes for an easy saag aloo. This calls for frozen spinach as a hack to reduce prep time and keep the result green. (Fresh spinach can go gray-brown during cooking if you’re not careful.) This is a...| Cliffle
The First-Mover Allocator Pattern| cliffle.com
Since it looks like some folks have been actually reading my blog, I’ve made a pass over the site, looking for accessibility problems. I have increased visual contrast and made links within articles slightly more obvious. The comments in code samples are still under the WCAG recommended constrast level, but they’re generated by a third party syntax highlighting library, so fixing them is more involved. Please let me know if you have any difficulty using the site!| Cliffle
Let The Compiler Do The Work| cliffle.com
Making Safe Things From Unsafe Parts| cliffle.com
A More Perfect Union| cliffle.com
Measure What You Optimize| cliffle.com
Why Learn Rust the Dangerous Way?| cliffle.com
References Available Upon Request| cliffle.com
You Can't Write C in Just Any Ol' Language| cliffle.com
Making really tiny WebAssembly graphics demos| cliffle.com
The Typestate Pattern in Rust| cliffle.com
Prefer Rust to C/C++ for new code.| cliffle.com
Racing the Beam| cliffle.com
A Glitch in the Matrix| cliffle.com
Click here to be redirected.| cliffle.com
Introducing Glitch| cliffle.com
Update from four years later: I’ve switched away from Hakyll. These notes are here for their historical value only. I used to manage this site with Jekyll. I’ve now switched to Hakyll. Here’s my reasoning and some notes on how it went.| Cliffle
While I’ve been blogging about my personal projects off and on, I’ve been awfully quiet about my day job. Now I can tell you why.| Cliffle
My Recommended Publicfile Patches| cliffle.com
Attacks on my Server: The Data| cliffle.com
SSH Usernames Used in Attacks On My Server| cliffle.com
Back in the Fall, I was invited to contribute to Make Magazine’s Ultimate Guide to 3D Printing. (That’s me on the front page, squinting at the Ultimaker wiki.) If you’re in the market for a 3D printer, it’s a great place to start! We spent a weekend really putting these printers through their paces.| Cliffle
Introducing swddude| cliffle.com
Language-Independent Sandboxing of Just-In-Time Compilation and Self-Modifying Code| cliffle.com
I may spend a lot of my time working on robots, but I like people. I’ve noticed this in my professional life: I’m happier and more productive working on a small team, rather than solo. My day job has me working alone a lot of the time, so at the beginning of March, I decided to take matters into my own hands and “find the others.” I knew about Noisebridge in San Francisco, but they didn’t quite seem like my people — when I joined their IRC channel they suggested I jump in front of...| Cliffle
Thingiverse has deployed my modifications to Thingiviewer, which were first seen on this very site powering the 3D Thing Previews. The internet is now just a little bit better. Woot!| Cliffle
I love my heated build platform. It’s the best upgrade my MakerBot has seen. No other change has improved my print quality and confidence to this degree. But if you look at the pictures on that page, you’ll notice my least favorite feature: the bolts, or as I call them, the MakerBot Industries Amazing Nozzle Destroyers. Fortunately, there’s an easy fix.| Cliffle
In my previous professional life, I processed a lot of credit card numbers. When reading credit card numbers from an unknown source, it helps to have a fast way of checking basic validity — to filter out bogus input. Such a method exists: the Luhn algorithm. I developed a very fast implementation of the algorithm a few years ago, and I keep seeing it pop up other places.| Cliffle
Polylactic Acid is a compostable plastic that can be made from renewable resources — usually plants. Compared to ABS plastic, it’s much harder, warps much less, and can be crystal clear. When I first got my hands on some PLA filament in 2009, it had the potential to be my new favorite plastic…but getting it working took time.| Cliffle
It’s been over two years since I last posted anything substantive on the net.| Cliffle
Software Fault Isolation (SFI) is an effective approach to sandboxing binary| cliffle.com
Preface FROM THE FUTURE! (2013) Beatnik is a direct result of the flu-like symptoms and subsequent cognitive impairment that come with truly, deeply understanding Forth. Like Forth, it is a stack language that is syntax-free — or, thematically, “syntax is just, like, your opinion, man!” Like all of my esoteric languages written in the cold, dark winter of 2000, the Beatnik specification and example (posted verbatim below) contain an error to detect people trying to implement it. This is...| Cliffle
4DL| cliffle.com
Who killed the network switch?| cliffle.com
Rewriting m4vgalib in Rust| cliffle.com
HQ9+| cliffle.com
Making my website faster| cliffle.com