About

This site hosts expository deep dives of technical topics in mathematics and computer science. Feedback is welcome; if you'd like to reach out, you can do so here. If you'd like to subscribe, you can do so using the Atom feed. The rest of this page gives a rundown of technical details related to the site.

Colophon

Design & Features

This site is created with a minimal site generator I forked from Brandur Leach's sorg. In addition to design changes, I stripped down and refactored the functionality to focus on longform technical articles. I also implemented additional features, including in-line footnotes, margin remarks (“sidenotes”) and tabbed code blocks for showcasing code in multiple languages. I have made efforts to reduce the amount of JavaScript in use, so these features are CSS-only. But there are two features which do require JavaScript: syntax highlighting with PrismJS and mathematical typesetting with MathJax 3. In the future I may pre-render both of these (though that would come at the cost of larger page sizes). There are no JavaScript-based analytics or tracking. All the fonts were designed by Matthew Butterick. Equity is used for the body (regular), site navigation and tabbed code block labels (caps), and Triplicate is used for code.

Hosting & Services

This domain's nameservers are managed by Google Domains under a GSuite account. Code for the site is hosted in a private GitHub repo, and deployments occur using GitHub Actions. Almost everything else happens through AWS. All content is stored in a private S3 bucket and served through a Cloudfront distribution. The TLS certificate is also provided by Certificate Manager. The only historical analytics I use are backend Athena queries on pageview logs stored in another S3 bucket. For monitoring and alerts I use Cloudwatch dashboards with request alarms published to SNS topics. I have a simple contact form provided by Formspree, but in the future I plan to move this to a Lambda function connected to SES instead.

Tools & Languages

I usually write code in Python and C++. Occasionally I work with Rust, and from time to time I write in Go (specifically when I'm working on the site generator itself). For most coding projects I use JetBrains IDEs; in particular CLion, PyCharm and GoLand. I write articles in Markdown (with a few feature extensions) using Sublime Text, with realtime article preview in the browser using a Hugo-like, local rendering loop.

I create my plots with matplotlib, usually exported as an SVG for resolution independence. Occasionally SVG files are too big - for example, this density plot of all 16-digit floating point values takes an egregiously long time to load. In those cases I save the plot as a high DPI PNG file instead, which loads much faster. When I'm working in Python, I use NumPy and SciPy for numerical work. In C++ I typically use Eigen.

I use two machines. My daily driver is a 15-inch 2016 MacBook Pro with a 2.9 Ghz Quad-Core Intel Core i7 CPU, 16 GB 2133 Mhz LPDDR3 memory and a 1 TB SSD. For significant research and development work I use a custom workstation running Linux with a Supermicro MBD-X10DAX EATX Dual-CPU LGA2011-3 motherboard, two Intel Xeon E5-2640 v4 2.4 Ghz 10-core processors (20 cores, 40 hyperthreads), 12 32 GB Samsung 2133 Mhz DDR4 RAM sticks (384 GB RAM), 5 2 TB Samsung 860 Pro 2.5" SSD (10 TB SATA SSD) and 5 1 TB Samsung 970 Pro M.2 NVMe SSD (5 TB NVMe M.2 SSD). Occasionally I'll swap parts out depending on what I'm working on; for example, I might remove one of the M.2 PCIe adapters to add 10Gb networking or a GPU.

Copyright & License

All articles on this site are licensed under the CC BY 4.0 license. This means you may share and adapt the content freely, including for commercial purposes, so long as attribution is provided to this site. Likewise all code is licensed under the MIT license. You are allowed to freely use and distribute the code for any reason, including commercial purposes, so long as you provide attribution to this site.