Personal blog of Stefan Heule, a Computer Science PhD candidate at Stanford University. Topics include programming language research, computers and life in general. Expect anything and nothing. Subscribe via RSS.
On the Importance of Safe Interfaces
The recent Amazon S3 outage is a good reminder that humans make errors, and sometimes issue commands that they didn't mean to issue. On February 28th, Amazon's cloud offering S3 was partially offline for over four hours, because a human ran a routine command and got some of the arguments wrong. It's important to realize that it's not the human that is to blame, but rather the tool that did not sufficiently check the human's arguments. "Be more careful" is not a viable strategy to ensure that a software system works reliably, as humans will always eventually make errors. Instead, we need to design software with safe interfaces that check for bad arguments. In this post, I'll show another example of a badly designed interface, and how to fix it.
Weather Information for Obsidian
By far the most requested feature for Obsidian, my watch face for the Pebble smartwatch, was to add weather information. Over the last few days, I've implemented this feature. It's fully configurable and the weather information moves out of the way of watch hands so that it is never obstructed.
How Many x86-64 Instructions Are There Anyway?
x86 is an enormously popular instruction set that is used on most desktop computers and servers (but usually not on mobile devices like phones). Given this wide use, it might seem like an easy question to ask how many x86 instructions there are, but it turns out this is more intricate than it looks.
Obsidian: A Usable and Elegant Analog Watch Face for the Pebble Time
I have written a watch face application for the Pebble Time that I call Obsidian and I'd like to introduce it here. The main goal behind Obsidian is to put utility and practicality above all else, and only attempt to improve aesthetics if it does not interfere with that goal. Some of the main features are simplicity, high contrast colors and a date display that is never obstructed by the watch hands.
The Surprising Reasons I Like the Pebble Time and Smartwatches in General
I was skeptical about smartwatches and wasn't sure whether they are useful enough to offset the annoyance of having yet another expensive device that requires charging. Especially the thought of owning a smartwatch that doesn't even do the watch part well sounded terrible; I don't want to have to press a button first to turn on the screen, or turn my wrist in just the right way so that the sensors pick it up and turn on the screen. Luckily, I found the Pebble Time, a smartwatch that features an always-on e-ink display which solves at least the watch problem. Furthermore, I actually like my Pebble Time more than I thought I would, and I found many of the reasons unexpected. In this post, I'd like to highlight some of these. Some are obvious in hindsight, but maybe there are other people out there who equally don't have a good sense of the usefulness of smartwatches. In essence, this is the article that I would have wanted to read when I was deciding if I should get a smartwatch.
Installing Missing Packages the Easy Way on Linux
This is a quick tip to making the installation of missing packages in certain Linux flavors easier.
The Most Dangerous Code in the Web Browser
Did you know that the web browser extension you installed a long time ago (say, AdBlock), can probably see all your passwords, look at any website you visit using your credentials and could trivially send all that information to an arbitrary web server? That's pretty scary, and in this blog post I will explain how security for extensions currently works. I will also outline research towards a better extension security model for browsers that protects your sensitive information.
smartless: a better pager for small and large inputs
A pager is a computer program that makes viewing long output or long files on the terminal more pleasant. Instead of dumping all the output at once, a pager shows the text one page at a time, allowing the user to scroll up and down, or search through the text. For instance, viewing a large diff with
git is much more pleasant with a pager. The most common pager on Unix systems is probably
less, and while it works great in many cases, viewing only very short output in a pager is a bit silly. If all of the text is only a few lines long and fits on the screen, then no pager is required in the first place.