| Website | https://tomaugspurger.net |
| Website | https://tomaugspurger.net |
Grace Hopper is the first person to have implemented a compiler. Perhaps you can become one of the last. Anyways, I've got an upcoming compilers course February 16-20. https://dabeaz.com/compiler.html
Boosts kindly appreciated.
About a year ago, I started putting together a course to work through the first part of Crafting Interpreters in Rust. Having now done that a few times, I feel like my Rust skills have improved a LOT and I'm rather enjoying it.
I got to thinking about how to take it further. Then a little voice said "why not just teach everything in Rust all summer?" Yeah. So, I'm doing that.
I'll be at the Cloud Native Geospatial Conference (https://2025-ut.cloudnativegeo.org), talking about using GPUs for geospatial workloads.
Let me know if you have any experience or interest in this and would like to chat.
I blogged about me blogging about High Performance Remote IO on the nvidia blog:
- direct link: https://developer.nvidia.com/blog/high-performance-remote-io-with-nvidia-kvikio/
- extra commentary: https://tomaugspurger.net/posts/high-performance-remote-io/
My local Department of Education has a public comment period for some proposed changes to Iowa’s science education standards. If you live in Iowa, I’d encourage you to read the proposal (PDF) and share feedback through the survey. If you, like me, get frustrated with how difficult it is to see what’s changed or link to a specific piece of text, read on. I’d heard rumblings that there were some controversial changes around evolution and climate change. But rather than just believing what I read in a headline, I decided to do my own research (science in action, right?).
Finally, I present y’all my latest video: uv IS the Future of Python Packaging 🐍📦
It's the result of everything that happened since uv 0.3.0 shipped and I'm excited to share it with y’all: https://www.youtube.com/watch?v=8UuW8o4bHbw
I'm happy to report that it's almost a minute shorter than the last one. And now I collapse.
New blog post on serializing data classes: https://tomaugspurger.net/posts/serializing-dataclasses/
AKA, why you should just use @[email protected]'s msgspec instead of rolling your own.
This post is a bit of a tutorial on serializing and deserializing Python dataclasses. I’ve been hacking on zarr-python-v3 a bit, which uses some dataclasses to represent some metadata objects. Those objects need to be serialized to and deserialized from JSON. This is a (surprisingly?) challenging area, and there are several excellent libraries out there that you should probably use. My personal favorite is msgspec, but cattrs, pydantic, and pyserde are also options.
Some personal news: I'm looking for a job!
https://tomaugspurger.net/posts/leaving-microsoft/
Some of my (very talented) former teammates are also looking for a job, so reach out if you're hiring!
I have, as they say, some personal news to share. On Monday I (along with some very talented teammates, see below if you’re hiring) was laid off from Microsoft as part of a reorganization. Like my Moving to Microsoft post, I wanted to jot down some of the things I got to work on. For those of you wondering, the Planetary Computer project does continue, just without me. Reflections It should go without saying that all of this was a team effort. I’ve been incredibly fortunate to have great teammates over the years, but the team building out the Planetary Computer was especially fantastic. Just like before, this will be very self-centered and project-focused, overlooking all the other people and work that went into this.
Episode 7 of the core․py #podcast is out! 🚀
I explain tokenizers, grammars, and parsers, while Pedantic Pablo corrects my most egregious oversimplifications. We go as far as #Python 1.0, finding a few surprises along the way.
Thanks for your patience! Pablo was moving, and I also had an excuse, but now I can't remember 🤷🏻♂️
This is available on Spotify, Apple Podcasts, Google Podcasts, and via RSS. All linked in the Spotify landing page below.
https://podcasters.spotify.com/pod/show/corepy/episodes/Episode-7-The-Old-Parser-e2f6qmj
Context-free grammars, non-deterministic finite automatons, left-to-right leftmost derivations... what even is all that?! Today we're talking about how Python parses your source code. We start gently with how this worked in the past. Come listen to Łukasz's high-level explanations and Pedantic Pablo's "well actuallys". # Timestamps (00:00:00) INTRO (00:01:35) You can still download Python 1.0! (00:02:19) The original tokenizer (00:03:10) What even is a tokenizer? (00:04:08) FUN FACTS ABOUT THE TOKENIZER (00:04:34) Circumflex (00:05:16) Python's invisible braces (00:08:29) Backticks in the syntax (00:11:00) Where are the comments stored? (00:12:27) GRAMMAR (00:13:37) What is a grammar? (00:16:25) The long-forgotten 'access' keyword (00:20:25) Making LL1 do things it wasn't meant to do (00:23:24) SURPRISE QUESTION 1: soft keywords (00:24:46) What's a context-free grammar? (00:26:51) A note about backslashes (00:29:33) The Dragon Book(s) (00:31:27) PARSING: What is it? (00:35:23) How to generate a parser? (00:39:00) LL Cool Parser (00:41:15) What if we used LR? (00:44:01) Let's have three tokenizers! (00:47:50) 2to3 and its legacy (00:52:38) Black and its blib2to3 (00:54:04) The pesky 'with' statement and the death of LL1 (01:00:05) PR OF THE WEEK: GH-113745 (01:05:41) SURPRISE QUESTION 2: Subclasses of SyntaxError (01:07:02) WHAT'S GOING ON IN CPYTHON? (01:09:16) Sam Gross nominated as a core dev (01:10:13) Free-threading progress (01:13:11) Faster CPython changes (01:17:29) ntpath.isreserved() (01:20:11) Pablo and the DWARF (01:22:02) OUTRO