1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
---
title: Ben Burwell's Projects
---
# Ben's Projects
A bunch of things I'm working on or have worked on, roughly and arbitrarily
ordered by recency, significance, and interesting-ness.
## [aerc](https://aerc-mail.org)
Recently, I've been contributing a bunch of features (including the maildir
backend) and bug fixes to aerc, an email client that runs in your terminal. It's
designed to be a more modern replacement for mutt. As part of my work, I've also
contributed patches to a few of aerc's upstream dependencies including
[go-maildir](https://github.com/emersion/go-maildir) and
[go-message](https://github.com/emersion/go-message).
While aerc is still in heavy development, I recommend taking a look, especially
if you currently use mutt. It has a number of nice improvements, like a tabbed
UI, built-in IMAP and SMTP support, the ability to view and compose emails
without external programs like vim or less completely taking over your terminal,
and even a built-in terminal emulator which can be helpful for email-driven
software development.
## [HowToChooseAPassword.com](https://howtochooseapassword.com)
A single-purpose site that explains in simple terms why strong passwords are
important and provides some tips on how to generate and store them.
I built this site to be linked to from login and registration screens in my own
software, and would encourage other sites to link to it as well in order to
establish canonical password advice.
Hopefully we'll see some traction with things like
[WebAuthn](https://webauthn.io/) which make it easier for people to protect
their accounts without really trying and this site will become obsolete, but in
the meantime it serves as a helpful resource.
## [PlateZero](https://platezero.com)
One of my hobbies is cooking. Often, I just make things up on the spot and don't
bother following a recipe, but for certain things I do like to use recipes which
I've developed or adapted in order to achieve the best results.
PlateZero is a new kind of recipe site designed to help serious cooks iterate
upon and improve recipes, not simply store them statically. If you like to cook,
give PlateZero a try!
## [similar.beer](https://similar.beer)
A recent weekend hack with a few friends. We trained a ML model on beer reviews
and built a web frontend to interact with it. Users can look up beers which they
enjoy and use our model to find other beers they might enjoy either based on
similarity or by tweaking specific attributes, e.g. "show me beers like
[Founders Canadian Breakfast Stout](https://similar.beer/brewery/1199/47658),
but much more malty."
## [Wireshark](https://www.wireshark.org)
One of my all-time favorite tools. During college, my summer internship at
[Lutron Electronics](http://www.lutron.com) was focused on packaging a custom
internal build of Wireshark complete with new dissectors for Lutron's
proprietary network protocols. While I spent a good chunk of time working on
Wireshark, including writing a plugin to capture USB serial data in the pcap
format, I only ended up being able to contribute a single build script fix
upstream. Nonetheless, my name still appears in the [Wireshark authors
file](https://www.wireshark.org/about.html) which I think is pretty neat.
## [ghsshauth](https://github.com/benburwell/ghsshauth)
Use GitHub as an SSH authentication mechanism! Just make a
`~/.ssh/authorized_github_users` file with all of the GitHub usernames you want
to grant SSH access to.
A few things like this exist, but didn't do _quite_ what I had in mind. Since
each user's [SSH keys are available through the
API](https://developer.github.com/v3/users/keys/), it's pretty trivial to write
a program suitable for use as the `AuthorizedKeysCommand` which looks up SSH
keys to allow.
Future enhancements might include caching keys with an expiry mechanism in case
the GitHub API is unavailable, as well as enabling authenticated API access for
higher rate limits.
## [`pass-audit`](https://github.com/benburwell/pass-audit)
I use zx2c4's [pass](https://www.passwordstore.org/) for managing my passwords.
When Troy Hunt introduced the [Pwned Passwords
API](https://haveibeenpwned.com/Passwords) as part of Have I Been Pwned, I
wanted a way to check whether any of the passwords in my store had been affected
by breaches. So, I wrote `pass-audit`, an extension for pass which can check any
or all of your passwords against both the HIBP API (using
[k-anonymity](https://en.wikipedia.org/wiki/K-anonymity)) as well as local
wordlists like rockyou.
## [Phlux](https://github.com/benburwell/phlux)
Like [f.lux](https://justgetflux.com/), but for the Phillips Hue system
(_ph_-lux, get it?). I have a bunch of Hue bulbs with adjustable color
temperature at home, and I wanted them to change to warm light during the
evening and cool light during the day. This little program runs on a box I have
set up at home and automatically adjusts the colors at sunrise and sunset.
There's definitely room for improvement, but this more or less does what I
wanted it to.
## [`active911`](https://github.com/benburwell/active911) npm package
[Active911](https://www.active911.com) is a popular system for integrating fire
and EMS paging with mobile apps enabling first responders to get richer data
more quickly than traditional tone and voice paging systems. In order to build
out custom dispatching software for [my college EMS
organization](https://www.bergems.org), I wrote this package and [published it
to npm](https://www.npmjs.com/package/active911).
## [1090](https://github.com/benburwell/1090)
A Java Swing application which shows live
[ADS-B](https://en.wikipedia.org/wiki/Automatic_dependent_surveillance-broadcast)
aircraft position and identification superimposed on a scalable map of
airfields, VORs, approaches, departures, and jetways. The map can be scaled and
panned using vim-like key bindings, and map layers can be toggled.
I have an RTL-SDR tuned to 1090 MHz connected to a Raspberry Pi running
[dump1090](https://github.com/antirez/dump1090) for decoding the RF packets to
which the Java application connects over a TCP socket.
## [DOML (DOM language)](https://github.com/benburwell/doml)
This was just a random little hack investigating using HTML as code. By
constructing DOM elements in a way that represents an abstract syntax tree, and
then including a JavaScript file, it's possible to "run" your HTML while
simultaneously using some interesting CSS to see what the program is doing.
For example, check out [this implementation of the Euclidean
algorithm](https://cdn.rawgit.com/benburwell/doml/master/prog/euclideanAlgorithm.html)
for finding the GCD of two integers. Viewing the source, you'll see the program
which is executed written as a bunch of `span` elements with different classes
and data attributes, and if you open the console, you'll see the result printed.
## [Scotland Yard Solver](https://github.com/benburwell/ScotlandYard)
A board game we got when I was younger is [Scotland
Yard](https://en.wikipedia.org/wiki/Scotland_Yard_(board_game)) in which players
must try to figure out the location on the board of Mr. X based upon the modes
of transport they announce (makes more sense when you know the game). Anyway, I
thought it might be interesting to write a program to narrow down the possible
locations of Mr. X in order to make better decisions as a player. In practice,
it seemed to be more fun to just play the game without the program, but it was
an interesting problem to play with.
## [Solfege](https://github.com/benburwell/solfege)
I'm sure I'm not the only one who has gotten a song in my head and not been able
to remember where it came from. While things like Shazam exist, they only really
work if you can actually _play_ the song you're trying to identify. The
situation I often encounter is having a short phrase in mind, which Shazam has
no way to identify. My solution was to build a music search engine where songs
are indexed by their [solfege
syllables](https://en.wikipedia.org/wiki/Solf%C3%A8ge).
* * *
And more on [GitHub](https://github.com/benburwell) and
[sourcehut](https://git.sr.ht/~benburwell)!
|