Projects #

An incomplete list of projects I have been involved in, currently being back-filled.


Shortcuts automation to turn on Tailscale when leaving an address

Tailscale Shortcuts Actions

I implemented Shortcuts support for Tailscale's iOS and macOS apps. In addition to the feature work, this required some app modernization (doing in-app intent handling depends on migrating to the UIScene APIs). This blog post has more details, but all of the interesting work was on the closed source side of Tailscale.

Current status: Alive and well.


Tailscale user switching UI screenshot

Tailscale Fast User Switching

I implemented the API endpoints, Mac UI and related Mac infrastructure for Tailscale's fast user switching. This blog post has more details, and the open source part of the work is attached to this GitHub issue.

Current status: Alive and well.


Instagram Downloader screenshot

Instagram Downloader

My wife wanted an easy way to download photos from Instagram, ideally in a less lossy and tedious way than taking screenshots. While there were existing Chrome extensions that seemed to do this, they seemed shady and/or inefficient (as far as which permissions they required). I had not written an extension for a few years, and this was a good exercise in using the new-at-the-time activeTab and declarativeContent APIs to minimize the permissions needed. Source code is available.

Current status: I had to change the name and it's required some upkeep over the years as Instagram's markup has changed, but it still appears to work as of early 2023.


RetroGit screenshot


RetroGit is a simple tool that sends you a daily (or weekly) digest of your GitHub commits from years past. Use it as a nostalgia trip or to remind you of TODOs that you never quite got around to cleaning up. Think of it as Timehop for your codebase. This blog post has more details, and source code is available.

Current status: Alive and well.


Cilantro screenshot


Cilantro was a Chrome extension to share pages via Avocado. Ann and I had been using the app for shared tasks lists, and after the removal of social features from Google Reader, we wanted to give it a shot for sharing of links too. This blog post has more details, and source code is available.

Current status: While the extension is still in the Chrome Web Store, we stopped using the app sometime in 2013, and Avocado itself shut down in 2017.

Playback Rate Screenshot

Playback Rate

Playback Rate was a Chrome extension to easily control the playback rate of videos embedded in web pages, back when sites were starting to switch from Flash-based video playback to the HTML5 <video> tag. This blog post has more details, and source code is available.

Current status: The extension was swept up in a 2020 Chrome Web Store requirement requiring that privacy fields be filled out, and was eventually de-listed. It's still installable from source as an unpacked/developer mode extension. It could probably be redone to use the activeTab permission and thus have a much smaller permission footprint.


Intersquares screenshot


Intersquares was my entry into Foursquare's global hackathon (it ended up being a finalist). It computes the locations where two Foursquare users have been together, and has a social media integration for finding intersections with others. This was my first hackathon, and it was a lot of fun, though I did feel pretty exhausted coming into work on Monday after coding all weekend. This blog post has more details, and source code is available.

Current status: Though I dutifully renew the domain name, I never migrated the project off of the App Engine Python 2.5 runtime and thus it stopped working in 2017.


Mail Trends screenshot

Mail Trends is a tool to visualize various statistics about about an IMAP email account, especially a Gmail-hosted one. I was on a "if you can measure it, you can win it" kick, and though that having more insights into my email would allow me to better stay on top if it. This blog post has more details, and source code is available. There is also sample output from running it over the Eron Email corpus.

Current status: Archived, I have not tried to run it in over 10 years (as it turned out, getting more stats did not help with the firehose of email). Gmail still has an IMAP interface, but this is a Python 2 codebase that would require significant modernization.


Overplot screenshot


Overplot is a mashup between Overheard in New York and Google Maps. I was living in New York at the time, and wanted to visualize things around neighborhoods I knew. The project had surprising technical depth (plotting thousands of markers in Google Maps was hard back then, as was geocoding thousands of hand-entered addresses) and social discoveries (who even decides New York neighborhood boundaries). This blog post has more details, and source code is available.

Current status: Surprisingly, it still works. I had to do some up-keep in 2013 to port it to the more modern Google Maps API, but it has kept working since then. The quotes are still the ones from 2006 though, the scraping mechanism relied on the site's RSS feed being archived by Google Reader (RIP).

Charts in Sourcerer screenshot

Sourcerer Charts

Sourcerer was an internal Google service created by Jorg Brown that provided very fast browsing of Google's monorepo, back when the source of truth was Perforce servers that always struggled under load. Jorg had the realization that all the metadata could fit in RAM, and built an alternate view that was very useful for browsing. I started using in 2005 (when I was on a build cop rotation and needed to quickly track down changes), and made some small improvements to it over the next few years.

My most significant contribution was using it to generate charts of change frequencies by author, directory or description matches. Besides being a navel-gazing sort of tool in the days before GitHub contribution graphs, it also allowed project activity to be tracked and patterns to be observed over time (e.g. how many changes mention "XSS").

Current status: Unknown, but presumably dead. Sourcerer (and its charts) were running when I left Google in 2012 (screenshot is from my last week week at Google), but ChartServer (the service used for rendering charts) was supposed to be turned off in 2019 and I would be surprised if Sourcerer was ported to Piper.