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.
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).
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
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.