19 Sep 2016
· 2 min read
Gavel is an automated end-to-end expo judging system. We’ve used it to automate
judging at HackMIT, a 1000-person event with over 200 projects and
100 judges. Dozens of other events have also used Gavel since the software was
released in private beta in late 2015.
Gavel fully automates expo judging logistics and project ranking — the
system tells judges which projects to look at, collects judges’ votes, and
produces a ranking of projects.
Here’s a demo of the judge interface:
21 Aug 2016
· 6 min read
In secure communication schemes, there are three main goals —
confidentiality, integrity, and authenticity. There are a lot of real-world
software and systems out there that don’t get integrity and authenticity quite
right, many times as a result of poor interface design.
Considering adversarial models, we see that there are very few situations where
integrity by itself is useful. Standalone integrity checks would protect
against network errors, for example, but they are not useful for much beyond
that. In fact, when dealing with adversaries, integrity without authenticity
is worthless. On the other hand, authenticity implies integrity, so that
should be the gold standard for security.
Along the same lines, in digital signature systems, validity without trust is
worthless. Data being correctly signed by some public key doesn’t mean
anything unless the key is trusted. This is especially relevant in web of trust
systems such as GPG, where a shared keyring is used to store public
keys. Any program can add keys to the keyring, and some programs enable
automatic key retrieval, so the mere presence of a public key in the keyring is
meaningless. Data signed by a key can only be trusted if the public key has
been assigned an explicit trust value or if it can be trusted under some web of
31 Jul 2016
· 2 min read
— shared on
Product Hunt and
I do most of my software development in my terminal, with my trusty tmux / zsh
/ vim setup. When coding, I frequently switch back and forth between my
terminal, which has a dark background, and my web browser, where sites usually
have light backgrounds.
One big problem with this setup is that my laptop’s backlight is either so dim
that I can’t read the text in my terminal or so bright that I’m blinded by
looking at websites. The problem is especially bad at night.
Many laptops support automatic brightness control, but it’s usually not very
useful. Both macOS and Windows support setting screen brightness automatically
based on ambient brightness, but the feature rarely comes in handy. It seems to
cause more harm than good. I keep it disabled on my laptops.
A Better Way
What if laptops set screen brightness automatically, but based on screen
contents rather than ambient brightness? I did some research, but I couldn’t
find any software that does this, so I wrote my own tool.
This is how Lumen was born. Lumen is a tiny menu bar app for macOS
that magically sets screen brightness based on screen contents.
Here’s what it looks like in action:
In an early prototype, I had hard-coded relationships between the lightness of
screen contents and the backlight settings that I desired. This turned out to
be somewhat annoying, because my preferences changed slightly depending on the
environment that I was in and exactly what I was doing. I needed to make the
It’s annoying to have lots of explicit on-screen controls for something that
should be simple, so I implemented something that I think is a pretty neat
feature. As it’s running, Lumen monitors how you change your backlight settings
using the keyboard. If you override anything that Lumen does, it takes note,
automatically learning your preferences. The
implementation is not too complicated, but I think it’s
a neat UI paradigm.
Source Code and Downloads
Lumen is open source, released under GPLv3. There are binaries
available for download too.