221 results for "":
Impromptu disaster recovery
Background
im-promp-tu (
im-ˈpräm(p)-(ˌ)tü)
made, done, or formed on or as if on the spur of the moment: improvised
composed or uttered without previous preparation: extemporaneous
On March 18th, 2025, I thought I would look into self-hosted project management solutions — something kanban-y, but.. better?
This one does not spark joy.
Cracking Electron apps open
I use the draw.io desktop app to
make diagrams for my website. I run it on an actual desktop, like Windows or
macOS, but the asset pipeline that converts .drawio files, to .pdf, to
.svg, and then to .svg again (but smaller) runs on Linux.
So I have a Rust program somewhere that opens headless chromium, and loads just the HTML/JS/CSS part of draw.io I need to render my diagrams, and then use Chromium’s “print to PDF” functionality to save a PDF.
Surviving Rust async interfaces
I used to be afraid of async Rust. It’s easy to get into trouble!
But thanks to the work done by the whole community, async Rust is getting easier to use every week. One project I think is doing particularly great work in this area is async-std.
Let’s say we want to compute the SHA3-256 hash of a file. It’s very easy to do with synchronous I/O:
What's in a Rainbow table?
In Veronica Mars and password hashes, from my new Tech As Seen On TV series, we’ve explored “cracking passwords” using brute-force methods, and then using rainbow tables, which was much, much faster.
But how do rainbow tables actually work? Let’s start at the beginning.
What’s a password hash?
A very simple design for an authentication system is to store passwords in
clear text, say, in a file named password.txt:
Reading files the hard way
Understanding Rust futures by going way too deep
So! Rust futures! Easy peasy lemon squeezy. Until it’s not. So let’s do the easy thing, and then instead of waiting for the hard thing to sneak up on us, we’ll go for it intentionally.
That’s all-around solid life advice.
Choo choo here comes the easy part 🚂💨
We make a new project:
$ cargo new waytoodeep
Created binary (application) `waytoodeep` package
2020 Retrospective
Against all odds, it looks like the year 2020 will actually come to an end - in less than a day now. I know! Hard to believe for me too.
A lot of things have happened for me personally, and professionally. It’s been a big year in many ways, and I feel like, to get some closure, I need to highlight some of them.
From “looking at graphs” to “driving to the hospital”
Day 9 (Advent of Code 2020)
Day 9’s problem statement is convoluted - the “ah maybe that’s why I don’t usually do Advent of Code” kind of convoluted, but let’s give it a go anyway.
So, we have a series of numbers, like so:
35
20
15
25
47
40
62
55
65
95
102
117
150
182
127
219
299
277
309
576
And uh the first N numbers are a “preamble” and every number that comes after that must be the sum of any two of the numbers that come before it.
2018 Retrospective
The year is drawing to a close, and I’m going off on a much-needed holiday next week. This seems like a good time to look back at the past twelve months!
I can’t believe that shipped
2018 was the year of foundational work. As far as “work work” is concerned, I spent the first 9 months finishing up my largest project ever, the itch v25 rewrite.
Day 14 (Advent of Code 2022)
I like how the day 14 puzzle sounds, because I think it’ll give me an opportunity to show off yet another way to have Rust embedded in a web page.
But first…
Let me guess: parsing?
You bet your furry ass, parsing.
Parsing
The input looks something like this:
498,4 -> 498,6 -> 496,6
503,4 -> 502,4 -> 502,9 -> 494,9
And each line is essentially… a polyline: we’re supposed to draw lines between every point on the path, and that determines rocks on the map.