Because we humans are macroscopic beings who constantly interact with our environment, reasoning about the behavior of individual particles in a closed system — quantum behavior — can be difficult. Even the simplest quantum mechanic systems around, the spin-1/2 systems that people call quantum bits or qubits, aren’t much easier. Folks have designed many ways to represent qubit…
This post is unfinished, so it may contain incorrect information. The paper “A Game of Surface Codes: Large-Scale Quantum Computing with Lattice Surgery” is a beautiful introduction to surface codes by Daniel Litinski. Figure 4 of the paper presents the following identities for exponentials of Pauli strings: \[ \begin{alignat}{3} &(1)&\quad e^{-i\varphi P’} e^{-i(\pi/4)P} &=…
Learning quantum computing typically involves learning about the Bloch sphere, a representation of a qubit state as a point on the unit sphere. However, most sources don’t dig into how it really works, mathematically speaking. For example, neither the Qiskit textbook nor Mike & Ike attempt to explain the formula for the Bloch sphere to readers, only dumping the formula and saying “have…
It has been a few years since I wrote a post on this blog, so I wanted to share a fun proof, even if it’s a little trivial.$ \newcommand{bra}[1]{\langle #1 |} \newcommand{ket}[1]{| #1 \rangle} \newcommand{braket}[2]{\langle #1 | #2 \rangle} \newcommand{bramket}[3]{\langle #1 | #2 | #3 \rangle} $ For many quantum applications, you care about $\bramket{\psi}{Z}{\psi}$. That is, the expectation…
The official “Spotify for Linux” page states: Spotify for Linux is a labor of love from our engineers that wanted to listen to Spotify on their Linux development machines. They work on it in their spare time and it is currently not a platform that we actively support. These brave engineers should be commended …for their incredible eyesight: For those of us with HiDPI displays,…
In courses taught in Java (such as a data structures class), you can build pretty robust autograders for homeworks — after all, the student’s code runs in the JVM, which prevents it from doing spooky things like corrupting memory or branching to weird places. So you can run the grader instantly after submission on a service like Gradescope and boom, they’ve got their grade. But C…
Here’s a cherrypicked list of the highest praise I’ve received in student evaluations: TAing nothing except maybe less CS humor communist ought to watch more anime This course was not just a disappointing course, but an embarrassment to Georgia Tech. [1400 words omitted] They need to seriously consider restructuring this course. Very childish Having half the class failing under your…
In CS 2110 at Georgia Tech, we use the Gameboy Advance to demonstrate how C code can interact directly with hardware. On a high level, students create games by reading button states directly from memory-mapped registers and write directly to a special region of memory called the “video buffer,” which the video controller continuously reads and draws on the screen. But my favorite…
I’ve always wondered how the shady PDF wizards make those shady textbook PDFs you find online, and I was bored yesterday, so I decided to find out. Preparing the Patient At first, I tried to spreading the book and placing each pair of pages on a flatbed scanner, but that led only to frustration because the pages made poor contact with the scanner. Instead of trying to sort out the blurring,…
On GNU/Linux, to make .sim files have a Roigisim icon and open in Roigisim, run the following (except replace 1.6.0 with the version you want): curl -Ls https://austinjadams.com/img/blog/open-sim-in-roigisim/roigisim-setup.sh | bash -s 1.6.0 After the script completes, log out and log back in, just in case. This is a copy-paste job of my earlier script for Brandonsim.
A driver on Ubuntu 16.04 was giving me some trouble, so I wanted to quickly install Debian sid on an external hard drive to see if later versions of Debian/Ubuntu fixed the issue. However, I didn’t want to bother with downloading and booting from an installer disc, so took the following chroot approach. This bootstrap-and-chroot process isn’t new and is documented in bits and pieces…
Sometimes you gotta have pretty icons and pretty buttons, y’know? In the case of Brandonsim on GNU/Linux, specifically to give it and .circ files pretty icons which open Brandonsim when clicked, do one of the following: Option 1: Use a Script Download Brandonsim-X.Y.Z.jar from T-Square, put it somewhere permanent (moving it will break the files the script creates), and run the following…
When redesigning my website recently, I realized I needed some meat on my homepage. Ideally, instead of a blank space, I could show off stuff I’m working on without having to maintain my show-off list by hand. Two ideas came to mind: recent blog posts and recent git commits. Since I already stored my blog posts in the static site generator Hugo, adding them to the homepage took me only a few…
Selected publications (for more, see my Google Scholar profile): Austin J. Adams, Sharjeel Khan, Arjun S. Bhamra, Ryan R. Abusaada, Jeffrey S. Young, and Thomas M. Conte. “Qwerty: A Basis-Oriented Quantum Programming Language.” 2025 IEEE International Conference on Quantum Computing and Engineering (QCE ‘25). September 2025. [website] [slides] Austin J. Adams, Sharjeel Khan,…
Yesterday, I visited a website that uses dd-formmailer, a Wordpress plugin that provides a form for sending an email, complete with a CAPTCHA intended to prevent automated abuse. Here’s a screenshot: A screenshot of the dd-formmailer form I was bored and curious, so I looked at the CAPTCHA image and noticed it was always served from the same path:…
In my combinatorics class, we covered many neat subjects, some easier and some harder. But one topic performed a near 180° in difficulty once I understood the process: writing recursive functions to count strings meeting certain criteria. Simple Example As an easy example, consider counting nonempty binary strings. Imagine such a string of length $n \in \mathbb{Z}$. We have two possibilities: it…
On GNU/Linux, I suggest using the OpenJDK, a free implementation of Java, and IntelliJ, so this guide will use both. First Steps Getting a Compatible Release You’ll need to install (or upgrade to) a recent release of Ubuntu to install Java 8. 14.04, for instance, has only Java 7. As the time of writing, 16.04 LTS is the most recent, so I’d suggest that. If you have an earlier release…
I’m a pro at using things incorrectly, so of course I’d brick my Archer C7 v2 a few hours after I got it. Fortunately, however, I didn’t find flashing working firmware too difficult. Here’s a quick attempt at a guide: Give your machine an IP address of 192.168.0.66/24, stopping any existing network daemons (e.g., NetworkManager). With iproute2 on GNU/Linux: # systemctl stop…
In my college dorm, my roommate and I have three machines on the same network: My laptop (GNU/Linux) My roommate’s laptop (Windows) My desktop, a headless GNU/Linux server with my printer connected Because my roommate doesn’t have a printer and I often take my laptop places, I wanted my desktop to act as a print server. Server Setup Install CUPS and if you’re on systemd, and make…
This is outdated now. Please see the README of the nsdo GitHub repository instead In an earlier article specific to OpenVPN, I wrote: To isolate VPN applications from applications running ‘bare,’ I use the following method, which involves nsdo. It has the handy effect of putting each instance of the openvpn client in its own network namespace, allowing you to run a bunch of VPNs at the…
Don’t tell rms, but sometimes I play Steam games. Fitting a bunch of 10+ GiB games onto a Chromebook with a ~20 GiB disk, however, is practically impossible1. Two solutions came to mind: Buy another drive Expand my storage with external media Option 1 requires hundreds of dollars and, worst of all, effort, so I took the second route using an SD card. Putting Directories on an SD Card…
For years, I’ve been meaning to set up a blog, but characteristically I couldn’t muster the effort to even try. Yesterday, however, I found Hugo, a simple but useful static site generator, and finally decided to stop being lazy. Despite the benefits (and despite writing a surprisingly similar tool myself ~4 years ago), I’d never felt drawn to static site generation. Often, I got…
This is outdated now. Please see the README of the nsdo GitHub repository instead Note: I base this method heavily on a great article by Sebastian Thorarensen. To isolate VPN applications from applications running ‘bare,’ I use the following method, which involves nsdo. It has the handy effect of putting each instance of the openvpn client in its own network namespace, allowing you to…