Robert A. Uhl

ASDF fundraiser

ASDF (Another System Definition Facility) is the Common Lisp equivalent of make, go build &c., and has been maintained by a team of volunteers for almost a decade. The Common Lisp Foundation is hosting an ASDF Appreciation Fundraiser to … show appreciation for their hard & excellent work. If you use Common Lisp, I encourage you to toss a couple of bucks in the pot. Even better, there’s a donation match up to $5,000. Read more →

Triplicate: a beautiful monospace font

Chris Morgan posted a comment on Hacker News about Triplicate, a lovely monospace font. It’s really, really attractive. Although I’m a great fan of Source Code Pro Regular for source code, I think that Triplicate could be wonderful when typesetting documents (or writing them in Markdown, or in Org Mode …). Read more →

Advent of Code 2018 update

Normally the end-of-year timeframe is pretty relaxed — in fact, my company announced an office closure next week! I figured that this would be an ideal opportunity to solve some programming puzzles & expand my brain a bit. Sadly, we’ve got an end-of-year project which is going to consume all my time (and which means that I’ll be working next week). I need to devote all of my mental energy to it, which means that I’m going to have to suspend working on Advent of Code puzzles. Read more →

Advent of Code 2018, day 10

Yesterday’s solution was awesome: I read the problem, walked my dog, then sat down at the computer and wrote both solutions perfectly, one after the other. First time I managed to do that! Today took a bit longer. The difficult thing was coming up with a heuristic for knowing when the stars aligned to give a message, without manually reviewing each possible image. My first idea was to somehow calculate entropy across the grid of stars (and find the lowest-entropy frame), but a quick Googling didn’t really yield anything which was likely to help. Read more →

Advent of Code 2018, day 4

All I’m going to say about today’s solutions is read the problem carefully. I missed a key fact, which meant I spent way too much time handling cases I didn’t need to. There’re still some vestiges of that approach in the (working) solutions. Sheesh. Read more →

Advent of Code 2018, day 3

I’ve got today’s solutions up. This problem wasn’t really amenable to using hashes, so I just brute-forced it with a 1,000×1,000-element array (hey, memory is cheap!). FIND-VALID-CLAIMS is O(n²) (due to a O(n) list deletion performed O(n) times), but … CPU is cheap too, and these are puzzles, not production code. That’s a running theme throughout these solutions: I’m not playing for high-performance or highly-elegant solutions to the puzzles, just the correct answers, quickly. Read more →

Advent of Code 2018, day 2

I’ve got my solutions to today’s puzzles up. Believe it or not, a lot of folks dislike LOOP because it’s not terribly Lispy — they’re right, of course, but it is a pretty handy Swiss Army knife to keep in one’s pocket. I use hash tables a lot, but that’s because hash tables are an awesome data structure. My biggest takeaway from working on these puzzles so far is gratitude that Common Lisp is a large enough language that it has hash tables; were I writing in C I’d either be scanning & rescanning & re-rescanning strings, or I’d have to write my own hash table implementation. Read more →

Advent of Code 2018, day 1

I’ve decided to participate in the Advent of Code this year. The idea is that each day two simple puzzles are released, and folks use their favourite programming language to solve them. Folks compete to be the first person to submit a solution (only the first 100 count for points, though). Following Javier Olaechea’s example, I’ll track each day’s solution and post notes here. Sum numbers I decided to just drop the input in as a string. Read more →

Multi-device end-to-end encryption & identity

I had an idea late last night about how to handle multi-device end-to-end encryption and identity. An issue with end-to-end encryption is how to support multiple devices: I may want to read messages on my laptop, my phone, my desktop and my tablet, but I don’t want a central server to be able to read those messages. This can be handled with encryption: when someone sends me a message, he encrypts it for all of my devices. Read more →