CDPH Digital Vaccine Record
Yesterday, California released their Digital Vaccine Record system for securely verifying residents'
COVID-19 vaccination status. I took a look at it and thought I'd write up my findings here. At a high level, the DVR consists of a QR code which contains a cryptographically-signed assertion in JSON Web
Token (JWT) format. I'll walk you through how to get one, how to
decode it, and what it contains in the rest of this article.
Getting one of the tokens is pretty easy; you just go to the Digital Vaccine Record website and put in your
name, date of birth, and the …
Surprising Change in Python 3.7.6
Here's a surprising change for you: Python 3.7.6 (ostensibly, a patch bugfix release) totally changed how URLs are parsed by Python programs.
As of Python 3.7.5, a URL like
foo:8888 would be parsed into the following:
ParseResult(scheme='', netloc='', path='foo:8888', params='', query='', fragment='')
As of Python 3.7.6,
foo is now detected as the scheme:
ParseResult(scheme='foo', netloc='', path='8888', params='', query='', fragment='')
This will cause massive chaos if you are ever parsing URLs with ports in them but without schemes …
Serialization Format Performance
Most of the work done in actual programming jobs is taking structured data in some particular format from one system, slightly tweaking it, and sending it off to some other system. When exchanging data between different processes, it's almost always necessary to serialize it into a series of bytes which can be sent across a dumb byte-oriented transport (such as TCP). There are hundreds upon hundreds of different serialization formats out there, but I just wanted to talk about a few of the most common that folks use with the Python programming language.
New Site, Again
Hello dear readers. If you can see this, then it means the new, redesigned
is up and running. I got tired of dealing with WordPress
vulnerabilities regularly, and was somewhat embarassed to have a site
running on PHP. After all, there isn't actually any dynamic content here, so
The site is now a bunch of Markdown files compiled into HTML using the
- Much faster, since it's just static HTML
- Back to being standards-compliant HTML5
- Behaves sanely on mobile, for the first time ever (thanks
- Better Atom and RSS feeds (although they're at a new url…)