code header

Setting up a Raspberry Pi and debugging WiFi issues

The Raspberry Pi is a marvelous piece of hardware. Unfortunately the software rarely does what it's supposed to do right out-of-the-box. In the years I've spent hacking with Pi's, I've never been able to get the WiFi to work exactly how I want it to: until now.

Getting raspbian

Various methods exist to download, install, and configure a Raspberry Pi for operation. Today I installed Raspbian Buster Lite, the optimal raspbian image for creating a headless server with plenty of useful software packages installed by default.

Read More
Jul. 26th, 2019

The ANTLR-Haskell project: parsing made easy

Motivating reasons for a new parser generator

Ultimately I want to be able to write self-documentable and self-contained parsers for languages across the spectrum of programming languages, ranging from declarative specification languages to compact and minimal functional programming languages, and even to the occasional imperative language to describe tasks to perform on my computer at regular intervals (think cron but with in-line integration for a non-bash language).

Read More
Nov. 19th, 2018

On normative statements in academic papers

What follows is an excerpt of a thought I had a few weeks ago while working on a research paper submission. In the context of my work you could probably deduce exactly what the submission is to, but that's not of import.

I work on low-level runtime systems for the purpose of making them operate more efficiently. I study abstraction mechanisms that make it easier for people implementing these systems to understand and build on the work of others. The field of computer science is plagued by

Read More
Nov. 17th, 2018

Cloud Latency Measurement

Statistically it is difficult to infer system-level percentiles from component percentiles. Why is that?

It is trivial to infer system-wide percentiles from per-thread results if all threads have same response time distribution (single-thread test is special case). But of course this is improbable in a large distributed storage environment. There are some statistical methods for estimation but they are highly complex and not typically embedded in commonly available libraries.

As for time-varying latency, we need this feature to understand “when did the problem start and end?”, which is critical for performance monitoring and troubleshooting. For example, here’s what it might look like to have such statistics over time. This graph shows the difference between average latency (in red) and 99% latency (in light blue), and gives you an idea of the spread of the latency distribution and how that varies. For example, the maximum latency could be an outlier that never repeats, so it is not a reliable way to look at latency. However, maximum latency can determine whether I/O timeouts, etc. are experienced by a virtualized application.

Read More
Aug. 2016

My academic interests

  • Memory layout optimization.
  • Runtime system verification.
  • Programming language design.
  • Stellar astrophysics (data analysis).
  • Network protocols.
  • Data formats.

Current projects

  • Formally specifying the memory layout properties of memory managers and garbage collectors, on the JVM in particular.
  • Making PADS work with binary and cyclic data structures.

This website

I primarily host technical content here, but I also use this site as a platform to write about my experiences in order to document my state of mind for my future self as well as give interested parties a window into my thought processes. If you find something I've written interesting, please don't hesitate to contact me.