Abstract Nonsense

A place for musings, observations, design notes, code snippets - my thought gists.

Real-World Cryptography by David Wong

This March I read through Real-World Cryptography by David Wong (Manning). I’ve been trying to learn more about homomorphic encryption, but I don’t have any formal background in cryptography. This was the perfect introduction to a wide range of cryptographic primitives (hashing, signatures, authentication, key generation and derivation, encryption…) and the delicate choreography of how to employ these building blocks to build protocols. There’s some interesting context on the conception of the textbook on David’s blog.

Of course, nothing replaces learning the core mathematics from the ground up, and toying with implementations. I envision my next steps will be a combination of trying some practical exercises, and working through a more rigorous textbook. But for the curious software engineer or those, like me, who want a launchpad, this book does an exceptional job.

Hello clanker

Thank you, work, for lending me a Dell Pro Max with GB10 to hack on. The Pro Max is effectively a twin for the NVIDIA DGX Spark, and it comes with:

  • NVIDIA GB10 Blackwell GPU
  • 128GB LPDDR5X unified memory
  • 4TB PCIe SSD storage

# First impressions

# Hardware

  • My Pro Max had already been setup by a teammate, so I had to go buy a cheap wired keyboard and mouse to connect before I could connect to Wifi.
  • This thing is whisper quiet, even under LLM inference workloads, I barely hear the fan.
  • It’s super portable (not that I plan on moving relocating it much), and has plug-and-play USB-C power and the usual trio of Wifi/Ethernet/Bluetooth connectivity.

# Software

  • The Pro Max runs a custom “NVIDIA DGX OS” skin of Ubuntu. My work daily-driver OS is macOS and I normally interact with headless GPUs for day-to-day work. So I was pleasantly surprised at how nice desktop Linux is now! There’s no annoying animations, things respond quickly, there’s a good amount of tooling built-in to the distro…
  • I first setup NVIDIA Sync, which is a nice wrapper over SSH that lets me connect to the Pro Max from my MacBook, over the local network. It integrates nicely with VSCode, so that’s quickly become my preferred way of working.
  • I then setup Tailscale, and in literally under 10 minutes, I can now securely connect to the Pro Max from anywhere. Neatly, NVIDIA Sync just released an update that provides native Tailscale support. I hadn’t used Tailscale before, but it seems like a super slick way to get all the benefits of WireGuard, without any of the hassle.
  • Setting up the usual battery of inference providers/wrappers: Open Web UI and Ollama was ok, but I hit some CUDA issues with vLLM and Transformers. I could resolve the PyTorch+CUDA toolchain dependencies with venvs managed by uv, and careful choice of the required build. But vLLM required me to use the NVIDIA vLLM NGC Container, which seems to be NVIDIA’s suggested way to run stuff on the box.

# What’s next?

I’m really just dipping my toes in here, there’s so much to learn. I’m using it for a work project, but it’s really quite nice to be able to run a decently-sized model like GPT-OSS 120b with native MXFP4 weight support.

Migrating email hosting from Cloudflare to iCloud Mail

Up until now, I’ve been using Cloudflare Email Routing to forward all emails sent to the [email protected] email address to my personal iCloud email. This is seamless to configure, as Cloudflare is my domain registrar and keeper of my DNS fiefdom. However, this service is a one-way pipe: if I want to respond to emails, I have to do so from my personal email.

I’ve now migrated to Apple Mail’s Custom Email Domain support, which is bi-directional. This fits in nicely alongside iCloud Hide My Email that I’ve been using to create ephemeral email addresses to sign up to services and obfuscate my real iCloud address. You do require a paid iCloud+ subscription for both these services, however.

Both Cloudflare Email Forwarding and iCloud+ Custom Email Domains support subaddressing too, which is neat. Wrt spam, Cloudflare also offers Email Address Obfuscation to automagically hide emails from bots. I find that I still receive some crypto-spam emails, but nothing egregious (and I suspect those mostly stem from it being on my GitHub profile page).

I also considered Proton Mail’s (paid) custom domain support, but opted for Apple Mail since that’s my default client and I already subscribe to iCloud+. In any case, this is just a small quality-fof-life improvement!

Activation functions and empiricism

In deep learning literature, there’s a veritable menagerie of different activation functions that are commonly employed betwixt layers. Proponents of one or another class of functions will usually proffer up some rationalisation for what makes their choice grounded: differentiability, smoothness, computational complexity, numerical stability, concision…

Today I was reading through GLU Variants Improve Transformer by Noam Shazeer (also of Attention is all you need fame) and came across this gem of empiricism:

We have extended the GLU family of layers and proposed their use in Transformer. In a transfer-learning setup, the new variants seem to produce better perplexities for the de-noising objective used in pre-training, as well as better results on many downstream language-understanding tasks. These architectures are simple to implement, and have no apparent computational drawbacks. We offer no explanation as to why these architectures seem to work; we attribute their success, as all else, to divine benevolence.

Well, I appreciate the honesty.

Programming Rust

I completed reading through Programming Rust by Jim Blandy, Jason Orendorff and Leonora F. S. Tindall (Amazon). I feel like I spent too much of 2025 flitting between new concepts, and I missed the structured and concerted learning from university. A goal for 2026 was to switch from breadth-first to depth-first learning; and to be honest, I miss reading textbooks! I read this cover to cover, and overall I really enjoyed it. In particular:

  • I really enjoyed the sections on the Rust borrow checker and semantics of ownership. The diagrams were especially helpful in understanding the memory layout of Rust values and types.
  • The illustrative code examples were a bit hit-and-miss for me: I thought they were often quite bland or didn’t quite demonstrate the topic at hand very well.
  • Exercises would have been a nice touch, but there is a plethora of exercise ideas floating through the ether in any case.
  • I found the asynchronous programming section to be a bit of a mess. However, that could well be due to my lack of experience with async programming as a whole. In which case, I have much to make up for!

All in all, I found it quite an enjoyable read, and feel that I’ve got a better handle on Rust programming. I’m looking forward to picking up and reading through more textbooks this year!