Will Guaraldi Kahn-Greene
- location: North Chelmsford, MA, USA in Greater Boston area
- email: willkg at bluesock dot org
Status (October 2024)
I work at Mozilla in Infrastructure Org on:
- Observability Team, part of Core Services
- service monitoring services, best practices, observability platform
- Crash ingestion system composed of Socorro, Crash Stats, Mozilla Symbols Server, and Mozilla Symbolication Service.
- many things related to crash reports and crash data
- Python libraries used by Mozilla services and others
Content
- blog (feed) - My blog covers my work (Mozilla), Python things and some other things.
- Fosstodon
- GitHub
Affiliations
- I work at Mozilla September 2011 through now.
- Worked at Participatory Culture Foundation August 2007 through August 2011.
- Member of the ACM 1994 through 1998, 2007, and 2017 through 2022. (I'm lapsed again.)
- Member of the Python Software Foundation 2014 to now.
- Member of the Free Software Foundation through July 2016.
- Member of the GNOME Foundation April 2010 through April 2012.
- I attended graduate school at Northeastern College of Computer and Information Sciences. I graduated in May of 2007 with a Masters in Computer Science focusing in programming language theory/design and software engineering. I mirrored the data here for future Professor Lieberherr software engineering courses.
Awards
- Python Software Foundation Community Service Award in October 2016 for the work Sheila and I did on PyVideo
- Anderson Consulting Award for excellence in Computer Science in 1998
Projects
This is the list of projects I'm working on:
-
Crash-stats (Socorro) - Crash-stats (AKA Socorro) is the crash collection, processing and analysis system for Mozilla products. I'm project manager, data steward, architect, engineer, support staff, and QA.
I've been working on it since March 2016 or so. In that time, I've removed a million lines of stuff, radically reduced technical debt, migrated from Python 2 to Python 3, migrated to a new infrastructure and deploy pipeline (twice), rewrote the collector, rewrote documentation, redid tests, refactored large portions of the processor and webapp, and added features.
-
Mozilla Symbol Server (Tecken) - Also known as Tecken, this is the symbols service. I'm the project manager, architect, engineer, support staff, and QA.
I've been working on it since June 2019 or so. In that time, I've audited the code, rewritten documentation, reworked tests, split out the symbolication API, and fixed bugs.
-
Mozilla Symbolication Server (Eliot) - Also known as Eliot, this is the symbolication service. I'm the project manager, architect, engineer, support staff, and QA.
I've been working on it since June 2019 or so. In that time, I've audited the code, rewritten documentation, reworked tests, split out the symbolication API, and fixed bugs.
-
Bleach - Bleach is a allowed-list-based HTML sanitizing library that escapes or strips markup and attributes for display in HTML.
James Socol started Bleach years ago and over time stopped using it. In December 2015, I took over maintenance of the project. In January 2019, after doing a rewrite and a lot of project-maturity work, I stepped down as maintainer. Then I stepped back up again when the maintainer moved on. In January 2023, I deprecated Bleach and now only minimally maintain the project. My blog posts on bleach work.
- Everett - Python configuration library that makes automated configuration documentation and testing easy.
- Markus - Python library for generating metrics for arbitrary backends (Datadog statsd, statsd, logging, etc).
- Fillmore - Python library for sanitizing Sentry events and testing sanitization.
- Kent - Fake Sentry service making it easier to debug configuration, sanitization, and other Sentry usage issues.
Writings / Editings / Technical Reviewings
This is a list of things I've written, edited or did technical review on. I've done a lot of documentation work for projects I've worked on and that's addressed poorly here. This is a list of books, articles, manuals and the like.
- Documentation patches for projects of code I use.
- 2021 - (Tech review) Python Microservices Development (2nd edition) - Simon Fraser and Tarek Ziade wrote the book and I did the technical review.
- 2017 - (Tech review) Python Microservices Development - Tarek Ziade wrote the book. I did the technical review. It's a great survey for writing systems using microservice architecture with Python.
- 2010 - (Tech review) Quick Python (second edition) - Naomi Ceder updated and heavily re-wrote the second edition of this book in 2009. I did the technical review. It's a great book for Python 3.
- 2004 - Bee Careful, Marvin - This is a children's book that my fiance (now wife) and I wrote in 2004/2005. I'm also in the process of posting the source code online in a bzr repository and a Trac instance and relicensing it under the Creative Commons BY-NC-SA 3.0 license or alternatively the GPL version 2 or later. We encourage you to download it and print it out and/or purchase a professionally bound copy from Lulu. We're in the process of writing a sequel.
- 2012 - Open Advice - I helped edit the book early on, but wish I had done more. The book is a fantastic collection of essays from a variety of people on what they would have liked to have known when they started contributing to free software. It's a phenomenal read---I highly recommend it.
- 2010 - GNOME Journal - I've contributed
to GNOME Journal as an editor and as a writer.
- GNOME Miro Community (March 30, 2010) (archive.org link)
- 2007 - Mapping Demeter to XML Schema and XPath 2.0 (May 2007) - This is a paper I wrote during a research and readings semester with Karl Lieberherr. It maps syntax and semantics between Demeter class dictionaries and traversals and XML Schema and XPath 2.0. It's a one-way mapping, however. This is useful for someone who was going to implement some of the graph-traversal algorithms used in Demeter in a XPath 2.0 component that's XML Schema aware.
- 2007 - Summary of research on modularizing Demeter class dictionaries (May 2007) - This is another paper I wrote during a research and readings semester with Karl Lieberherr. It's a summary of the readings and research I did for the semester. I didn't get as far as I wanted to on that project, but I did learn a lot more about modularizing things.
- 2006 - CSG260 materials - This is a bunch of stuff I'm mirroring here that I wrote when taking CSG 260: Advanced Software Engineering in Fall of 2006 at Northeastern with Karl Lieberherr. It's probably not very exciting unless you're taking one of his classes or following the constraint satisfaction problem solving research in Project Evergreen.
- 2006 - Cleaning Up Pyblosxom Using Cheesecake - A case study for using Cheesecake to overhaul a pre-existing Python-based project. Pyblosxom 1.4.x included a lot of fixes from the cleaning up. Pyblosxom 1.5 included more. (The original article was posted on the pycheesecake site, but that has since gone away, so this link points to the version I have in my blog.)
- 2005 - The Pyblosxom Manual - Years ago, I wrote the original manual using DocBook, but John, Ryan and I rewrote it in reStructured Text for Pyblosxom 1.4. Then we redid it using Sphinx.
- 2005 - LPC Manual - A manual on LPC that covers the language and coding in the language to build areas. It's sort of targeted towards people with little programming language or coding experience. It was something I worked on from time to time as I discovered people had conceptual difficulties with various aspects of LPC the language. It was never completed. Also, it looks like they took it down. Boo.
- 2003 - regexp haiku - A regexp haiku I wrote that the editors liked and had posted on java.net. Oracle bought Sun and then subsequently destroyed all beautiful things, so it (and the java.net site) don't exist anymore.
- ANSI codes - A listing of ANSI codes that I found, overhauled, and added to while working on Lyntin. For some reason, it's a very popular page on my site.
- Lots of documentation and project specifications for the companies I've worked at. Since this is a catch-all for what are essentially internal documents, I can't share them with anyone.
Past projects
I've worked on a lot of projects over the years. Some of these have been passed on to other people while others have been abandoned completely.
- Mozilla Location Services (Ichnaea) - I worked on upgrading it from Python 2.6 to Python 3.8 and Dockerized and redid the infrastructure.
- Mozilla Input (fjord) - I helped rewrite Input and then maintained and developed it for several years supporting Mozilla's User Advocacy team. Input was the feedback system for Mozilla products.
- Mozilla SUMO (kitsune) - I worked on SUMO for several years maintaining and developing the software that we used to support Mozilla products.
- Puente - Puente was a Python library for gettext-style translation tooling that helped Mozilla services migrate from Tower to something less bespoke.
- Dennis - Dennis aids your l10n development woes! It lints .po files for things that will crash your production server! It translates your strings in various ways to help you suss out l10n problems! I built it, maintained it for a long time and then handed it off to someone who uses it.
- Edwin - Edwin was another sprint system that used Bugzilla data for sprint planning. It had some interesting features and it was a good reason to experiment with React. We decided to stop working on it after we hit some architectural issues that were impossible to fix.
- Ernest - Ernest was a sprint system that used Bugzilla data for sprint planning. It was nice and met our needs and a good reason to experiment with Angular, but then we decided we needed something better and implemented Edwin.
- ElasticUtils - I took over the ElasticUtils project, overhauled it, radically improved documentation and tests and project infrastructure, then continued to maintain it. At PyCon, I talked with Honza about it and Elastic.co's plans. We worked out some API issues with elasticsearch-dsl and collectively decided to abandon ElasticUtils for elasticsearch-dsl.
- django-eadred - Sample data generator for Django projects. This satisfied a need we had on a bunch of projects, but there isn't enough interest to continue development.
- Douglas - Douglas is the spiritual successor to Pyblosxom. I cleaned up a lot of icky things in Pyblosxom, switched it to use Jinja2 for template rendering, cleaned up the plugin system, added a ton of tests and implemented preview. I used this for a couple of years and then decided I didn't want to maintain my own blogging platform anymore and switched to Nikola.
- pyvideo.org, Python Miro Community, lots of software for this - In February 2010 I started Python Miro Community--a site that indexes videos about Python (conference talks, tutorials, etc) from around the Internet. In 2011, I was awarded a PSF Grant to enhance the site with Universal Subtitles support, pay for 12 months of the Miro Community service, and continue maintainence of the site. I continued curating videos and working on Python Miro Community until around March 2012 when I decided the Miro Community platform wasn't doing what I needed it to. So I wrote a whole new platform and replaced Python Miro Community with pyvideo.org. On pyvideo.org, I wrote the software and managed the infrastructure. I worked with Sheila Miguez curating videos, writing documentation, coordinating with conference video organizers, managing community and various other things. In July 2016, I stepped down and passed off pyvideo to Paul Logston of PyTube.
- GNU MediaGoblin - I wrote the initial documentation, built the infrastructure, wrote the initial plugin system and helped bootstrap the project.
- Miro (develop) - Miro is a desktop media player that runs on Windows, OSX and GNU/Linux. This is the project I worked on fulltime for PCF and I continue to contribute. I still contribute to the project, but in a decreased capacity.
- Pyblosxom - Pyblosxom is a file-centric weblog engine in the spirit of Blosxom but written in Python. I worked on Pyblosxom for nine and a half years (January 2003 to June 2012). I was the maintainer for Pyblosxom for many of those. I was the primary author of the Pyblosxom manual which was originally written in docbook but has since been converted to restructured text. I released Pyblosxom 1.4 incorporating work I did while helping out on Cheesecake and also pulling in Paste support. I mentored a GSoC 2007 project building a web interface for Pyblosxom called webfront. I released Pyblosxom 1.5 which was a significant overhaul of the project and the documentation.
- Pyblosxom plugins - These are plugins for Pyblosxom I wrote or took over from other people.
- Lyntin - Lyntin is a mud client written in Python which shares many commands with Tintin. It has since diverged from Tintin style in many ways. It was listed as one of the largest Python projects on the Python wiki for a long time. There are a number of larger projects now. I stopped actively developing Lyntin in May 2004 when I passed the project off to Eugene. Seems like the project died pretty soon thereafter.
- Lyntin plugins - These are plugins I wrote for Lyntin. I don't maintain them any more and I think the AIM one no longer works (I think AOL disabled the TOC protocol that it requires), but they're still useful to some people.
- Dark Rifts - I've spent a lot of time writing various mud engines and most of those projects petered out. I had a friend who introduced me to Dark Rifts, I became a coder there and then an admin. Over the course of three years, I wrote a lot of functionality (vector-space search system for in-game documentation, time/weather daemon, functional programming functions, bridge code between MudOS and the web-site, bridge code allowing for mud-account authentication for pure-ftpd, gobs and gobs of documentation including the beginnings of an LPC manual, ...), fixed a lot of bugs, and wrote a bunch of areas as well. Then after a craptastic conversation in January 2007 with one of the other admin, I retired permanently, which was unfortunate and bummed me out. If I do mud development again, I'll look at helping out on Divmod Imaginary or something similar.
- Stringbean - Stringbean was a Python-based mud that I was working on after several other projects had been abandoned. There were some interesting things I wanted to try and then I discovered that Twisted had already done some of them.
- Bluemud - Bluemud was
a project I worked on with a few other people back when I was in California
in 2000. It was a Java-based mud which used Jython as the in-game world
language. We bumped into a series of problems with Java security and
Jython. We were looking into rebuilding what we had done in C with an
embedded CPython VM, but due to various life issues (I moved from west
coast to east coast among other things) the project kind of fizzled out.
One of the coolest things we did in Varium and then pulled into Bluemud was in-game screen editors. I wrote a mini version of Pico and we had a mini version of Emacs (called Nomacs), too. Pictures are here. We had the NAWS telnet option working (so you could resize your telnet window and the editor would resize with it) and towards the end I was working on very rudimentary syntax highlighting functionality. To build these editors, we implemented a primitive curses-like windowing toolkit.
One part of Bluemud was a mini-project I called Bluemud Atlas which took an asciimap and converted it into a tiled image. The purpose of this was to generate a web-based atlas of the world and its areas from a series of ascii-maps. I still use it occasionally for gaming. - Varium - Alas, but the Varium web-site is no more. Varium was the first Python-based mud project I worked on in 1998 and 1999. We got a lot of interesting things working, but I think the scope of the project was too huge (engine, mudlib, world, ...) for the small group of us (three at the time) to complete. After Varium wound down, I worked on Bluemud and pulled a bunch of the things we did in Varium into Bluemud.
- Bluemail - I wrote Bluemail as a Python CGI application back in 2000 or 2001 or thereabouts. The mission was to build a webmail client that used the same folder structure and settings as Pine so that people who used Pine when they were ssh'd into the box could use the webmail client when ssh wasn't available. During one of the server switches, Bluemail stopped working. Since then there have been a lot of advances in Python-based web-application frameworks and Bluemail should be re-written using one of those.
This site
Neovim, I use Nikola to power my blog, Gimp and InkScape for graphics and Git for version control. It's hosted on Apache 2 on Debian.