Plethora of Projects

I find myself in a state where I have many projects that people ping me about regularly. I am very into all of them and would love if I could dedicate to each of them time that they deserve. This posting is mostly an enumeration of those projects and what I want to do with them.

Read the Docs

This is definitely my highest priority project. It has the most users and with my friend Eric Holscher leaving on a long hike soon I’ll be the primary caretaker of the project. I have various issues to work architecturally which are moderately boring or security related but will be taking some of my development time on this project.

I’ve already started into one of my bigger goals which is to clean up the code base. The files to all comply to flake8 which is a step in the right direction. Next I will be cleaning things up so the project is closer to what I am used at work, which also gives us a style guide we can simply just cite.

Another goal is to change out the log in system to Mozilla Persona and eliminate the need for passwords. This, along with some other architecture fixes will make the platform a bit safer.


This project has been gathering more users as well as contributors. Unfortunately it has been sitting there bitrotting (from my standpoint) due to being too busy for it. I am going to be trying to take over part of the May PDXNode hack night as a ZenIRCBot hack night.

This code base is also in dire need of a cleanup. We have 3.0 coming out soon, along with that I’m also going to be moving it under an org and splitting out various parts into their own repos under that org. Once that is done, I’ll be adding the backwards compatible changes like multiple server support. The nodejs version will be the blessed version and I’ll try to keep the python and clojure versions up to date but I don’t want to let them hold back the bot.

Finally, I’ve already added Aaron Parecki as a contributor and we’ll be code reviewing each other’s patches as well as sharing the burden of accepting pull requests and such.


This is a newer project that is currently in a working state but I’d like finish some features so can release 1.0 and leave the project in a stable state.

The next steps for this are some more of the basic features (which are already filed as issues on github) as well as taking some time looking at the other projects in this space and determine what a 1.0 release should look like. This should be a minimal amount of hacking and should result in something that doesn’t require much maintenance.

This project hasn’t even started other than gathering data. There is lots of hope in it though, and I really want it to exist. It has a lot of potential for those of us in town to discover new places to go, and to provide a place to send people who are new to town.

The project needs to be inited, in an effort to not polarize to one of the two bigger server side web languages (Python/Ruby) I’ll likely be going with nodejs. Theoretically there is a code base that was already started but it isn’t open source yet and rather than wait/force it to go open, I can just build it myself.

Django Debug Panel

This project has wonderful potential and high aspirations. Unfortunately it is also quite a bit of work. I have lots of prior art to sort through, issues to create, then finally I have to build it and document the protocol. This project is on the back burner for now until I can clear some other things off my plate.

This one is in fact just throwing a 500 right now. I upgraded some stuff and it is all broken. As I get ready to do more century rides this summer I will want to have this around. Also I’d like to add integration for more than just DailyMile. There isn’t a ton of work to do, other than getting it working again.


I have a lot of projects to work on, some of which are higher priority than others. I am feeling rather overwhelmed when you combine this list with my hobbies, work, and other obligations. Hopefully, if you are using any of these projects, you’ll be patient with me as I try to find the time to improve them all.

Get Involved

Getting involved is something I’ve blogged about a few times on here. Each time has been a pledge to get more involved in the open source community in different ways. I am more involved now than I have ever been previously. I feel comfortable finding an issue in a project, forking it, fixing it and sending a pull request. Also, I find myself writing docs for projects and sending them as pull requests as well.

I was reading a post from Alex Gaynor about funding open source developers. I am all for that and in fact am using Gittip to fund several developers. Currently, I only fund each developer $3/week, which only comes out to $13.50 a month for each of them. But, I am unsure how many people I am going to end up funding and want to feel things out a bit before I commit more than that.

Now I find myself putting forward a little time and money here and there to various projects but I still don’t feel like that is enough. I can’t seem to get past the 2-3 commits on a project then walk away mentality that I’ve built up.

My next goal is to become really involved in some project or community, and not because it is convenient but because I find it fun and engaging. In this goal though, I’m not going to beat myself up for not getting deep into a project. Just getting more commits in—be it docs, tests, or actual code—will improve my impact on the community. If I end up just being a nomad who dabbles in many projects but manages to consistently do that, I’m ok with that.


I just learned about a project that is rather exciting to me: Julython. If you are looking for an excuse to write some python, this is a great one.

The idea is to commit at least a little bit every day of July on a python project, preferably one that is open source. You get 10 points for committing to a tracked project for the first time and 1 point for each commit after that on the project. This is interesting because it encourages people to work on a wide variety of projects, as well as encouraging numerous small commits.

The variety of projects side is pretty rad, you can add tracking to forks of projects (so it at least tracks your fork) so you get big points for working on a lot of other peoples projects. Hopefully people who do that, then send a pull request to get their code integrated. I really enjoy the idea that I get lots of points for helping out and getting involved with a many projects.

The numerous small commits side is interesting as well. Some people subscribe to commit early, commit often. I try to but tend to get side tracked and end up with a lot of changes that I then have to split up into their own commits. If I am being lazy and it is a personal project, I might just be lazy and commit it all in one commit. This will encourage me to fix that habit.

Anyway, my main focuses for this month will be two projects of mine: ZenIRCBot and SC2Clan. I also hope to patch other people’s projects and get involved where I can in as many places as I can.

My First Week as a Mozillian

So I started at Mozilla about a week ago. Here are my experiences and thoughts:

Code Reviews

This is my first company where code reviews are common. I’ve worked places with pair programming which achieves the goals of code reviews to certain extents. Unfortunately that is less possible in a distributed team. I can’t tell you how nice it is to have someone looking over your code before it goes into the codebase. Code is rarely isolated so having the eyes of someone who knows more about the other systems your code might affect and questioning things, finding edge cases you forgot to test or letting you know better ways of doing things.

Warm Environment

And I don’t mean because HQ is in California. I feel comfortable asking any of my co-workers and managers questions. They’ve all been there, Mozilla is a big place with lots of code. Not sure how/why some code works the way it does, link it in the project channel and ask. Not sure the policy on something ask anyone you’ve met so far, if they don’t know the answer, they know who to ask. Feeling lost or getting stressed, talk to your manager, they genuinely want to help you be the best ‘you’ you can be.

That last one bears being expanded on. Your managers don’t want you to be successful just so you are a more productive member of the team. They want to do what they can to help you be great all around. They have a focus on goals and these goals are not just things like “Fix this part of infrastructure at work.” They should be things you want to do/be/learn as part of your life. For me these are things like giving talks at big conferences, learning to write high scale code.

Idea Sharing

So many companies want their employees to share ideas, this way they can use them to make marketable products. At Mozilla, I feel comfortable sharing ideas I have. This is because if/when I work on them I know that they’ll be open creations. My co-workers decide to help or support me in an endeavor are also striving to make the web an open great place for everyone. It also helps that you are surrounded with brilliant people who are involved in the community in various ways. If you propose something, someone probably knows of some similar prior art, or maybe even the exact thing you are looking for. It is a culture of people coming up with ideas, so no one will just shoot you down, instead they’ll probably help you flesh the idea out into something even greater!

Right not Rushed

Another thing I’ve never seen said so much in a company. I am trying really hard to be a fully productive member of the team right away. So much so that I feel like I am slipping a lot because I can’t get things done as fast as I think I should be able to. The slowdown comes from learning a new codebase and the overhead inherent in that process. Complexity lurks behind every branch.

The thing I keep hearing from multiple people on the team is to not worry, things take as long as they take. They all know, as well as I do when I think objectively, that rushing through something to try to get it out because you feel like it has to be out ASAP is a good way to make mistakes. Take time, understand the problem, write code and tests, then put it forward for review. This is something everyone on my team seems to value. I can’t tell you how much of a relief it is. I’m still striving to be as useful as I can as soon as I can, and I know I have my team supporting me.


Mozilla is a wonderful place to work. Big, but wonderful. The best advice I can give anyone who decides to read this because they are just starting at Mozilla, or perhaps considering applying at Mozilla: relax, take your time, and ask questions. Everyone is as excited to have you on the team as you are to be on it.

An Exciting Update

Sometimes when you are waiting for something, time goes by very slowly. But because you are so focused on that one thing, everything else in life moves really fast. I’ve been unemployed since the end of January. During that time I made ZenIRCBot significantly better, I wrote a simple site for tracking your workout stats, I attended two conferences, PyCon and Barcamp Portland. I visited two states that I’d never been to. Flew for the first time and took my longest train ride.

Basically I’ve done a ton in this time. But it feels like it has been a really long time because I’ve been so focused on getting my resume put together with Mozilla in mind. Then once I finally had that to a point that I was happy, I started showing it to friends for them to review and that took forever. Then I handed it off to my friend Jason to apply and write a letter of recommendation for me.

Then I waited another eternity (it felt like at least) to hear back, be flown down and get an offer from them. I was so focused on that, that everything else flew by me and I may not have gotten the most out of things. Which is fine because I’ll be starting at Mozilla on the 29th of May. Working on and related sites with the WebDev team.

What that should really read as, is that I am incredibly lucky to be getting the chance to work at a company that I’d only really dreamt of working at before. I’m going to be working with some awesomely brilliant people, for a company who’s mission is to make the web a better place, while working on some really interesting and difficult engineering, doing it in a language I love (Python) with a framework I love (Django). If you know me, then you know how much I love working on interesting hard problems.

I’m writing this mostly as a stream of consciousness because I don’t have a better way to put this stuff together. In the future I’m hoping to take some time, get some peer review for my posts before I put them up and talk about the awesome things I’m doing at Mozilla and in my free time. If you want to be someone to helps me with my writing, let me know, I could use all the help I can get.


Weekly Training Site

I blogged last month about my goals and where I wanted them to be. In response to that I built a site that helps me track where I am for the 7 days trailing. That site can be found at

Users log into my site via Dailymile using OAuth2 since I need to get their API token in order to collect their workouts and display them. You can see my profile at At time of writing I am nearing my goal for biking but my running and hiking have suffered.

I built this site using Django, I did all the OAuth2 stuff myself because when I last surveyed the existing work with OAuth2 and Django, I found I would have to write my own. I turns out it is pretty simple, and because of the many drafts that exist, it would be pretty trying to have a more generic app for this. This will hopefully change when OAuth2 is finalized.

Dailymile’s API has some warts but it is usable and they were rather responsive when I had some requests for features and the one or two bugs I ran into. Plus their terms of service for their API are really reasonable. I can’t say the same about other workout tracking sites I looked into, either they had a horrible ToS or they plain didn’t have an API.

Read the Docs

Over the last few months I’ve really started to love Read the Docs. Several of my favorite projects are hosted on there. Projects such as Fabric, Requests, and Celery are all hosted on there. The list keeps growing, which is great. Read the Docs is a fantastic project that is promoting and unifying documentation even across language boundaries, both human and programming.

I got involved with Read the Docs during the sprints of DjangoCon 2011 as I have mentioned before on my blog. So my opinion isn’t entirely unbiased, but I wouldn’t have gotten involved if I didn’t believe in it and what goals it is pressing towards. I strongly urge others to also contribute, which can come in many forms, such as spreading the word on using Read the Docs, writing docs and posting them on there, filing bug reports on things you find wrong or feature requests for things you think could be done better, or finally by contributing your coding or design skills.

Something that is pretty interesting is there have been a number of projects that aren’t software libraries that have found their way on to Read the Docs. There have been a few books written using Sphinx and then posted on Read the Docs. Notes from various talks and conferences. And recently I stumbled upon a resume that is hosted on there and it got me thinking that I should do the same.

My resume is now hosted on there, though a warning, it is a work in progress. It looks really nice though, and I have access to multiple file types of it that sphinx and Read the Docs have generated, including a PDF. I highly recommend it to anyone that wants to write their resume, have it stand out a bit, but still look really nice.

Basically, this post is just to talk about how much I have come to depend on Read the Docs and to also to encourage people to use and help out in various ways. I love this project and if have ever come across horrible documentation, so should you.

Django Generic Class Based View Tip

Those reading this via a feed reader will have to view the page on my blog as I am using embedded gists. I’ll find a solution for that in the future.

So say you have a base template that looks something like:

And a template that looks like either of these:

It used to be that you could write something like this:

But generic function based views are deprecated and the world is being strongly urged to move to generic class based views. If you would like to get extra_content working with the direct_to_template replacement TemplateView, you can use a view like the following:

And a like the following using it:

The code used in this blog post can be found in this gist.

Being a Contributor

When I attended DjangoCon I decided I needed to work a bit less on my own projects and start putting more time into contributing to other projects. I use so many free and open libraries both in my work and my personal code, and it is time to start contributing again.

The first project I decided to try to contribute to was Read the Docs. The choice was pretty easy since I know Eric Holscher and it is a project I benefit from on a regular basis. So at the DjangoCon sprints I sat down near him and asked him if there were any particularly valuable tickets I could take and start hacking on. He gave me a list of issues and I started in.

By the end of the day I had a patch for RTD, granted it didn’t fully work but it was a start. Added some unit tests and fixed up the code and soon I had a complete contribution that was added and it made me smile. And smile even more to be added to the AUTHORS file. Couple more patches later and Eric asked if I wanted to help out with the servers and get access to them. I said yes and now I am part of the RTD ops team as well as a contributor.

I used to contribute to a couple projects a few years ago. In recent history I’ve spent my time scratching my own itches and working on proprietary code for work. Going through the process of contributing has made me excited to do it some more on various projects. And GitHub makes it so easy to just send a pull request, comment a couple times back and forth and get patches accepted.

I am far from the first to talk about how easy it is to contribute to projects compared to the old days of sending patches to mailing lists. I just want to be another voice in the crowd, if even one person decides to contribute because of this, or it makes a person happy and continues contributing this was a success.

Django, Redmine both on the same vhost in apache

I’ve spent a good portion of my day messing with this, asking questions in various channels on, and generally trying to not let my head explode.

What ‘this’ is exactly is this:

I wanted my django app to run on / of my domain. Since I don’t own my domain it would be easiest(or so I thought) to setup redmine on /redmine of my domain. This way it is only one domain and I can run my bug/project tracker on the same place as my website.

That shows that I have it all working, now how did I do it… It will be simple for you but was not a simple process for me due to a couple settings I had tweaked without realizing the effect.

First off lets get the django app setup, I use mod_wsgi for my django apps, and run them in daemon mode so I can easily update the app without taking down the server at all.

My wsgi file (should look pretty typical for those who have seen one before):

import os
import sys

root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))

os.environ['DJANGO_SETTINGS_MODULE'] = 'recipes.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

You’ll need to toss

LoadModule wsgi_module modules/

into your httpd.conf

Here is my vhost stuff without the Redmine stuff in it:

<virtualhost 80="">

Alias /media /srv/wsgi/recipes/media

<directory srv="" wsgi="" recipes="" media="">
Order allow,deny
Options Indexes FollowSymlinks
Allow from all

WSGIDaemonProcess recipes python-path=/srv/wsgi/recipes/lib/python2.6/site-packages display-name=%{GROUP}
WSGIProcessGroup recipes
WSGIScriptAlias / /srv/wsgi/recipes/recipes.wsgi

<directory srv="" wsgi="" recipes="">
Order deny,allow
Allow from all

So far this should look pretty typical for anyone who has ever setup a django vhost with apache.

Now for Redmine I chose to use Phusion, why you might ask? Well sycopomp uses it and when I asked him why, because he found a guide somewhere that made it easy and his memory usage isn’t very high. So basically, not for any good reason.

Go ahead and symlink your redmine/public directory into your DocumentRoot for me that was /srv/http.

You’ll have to install Phusion:

gem install passenger

That will toss up a helpful wizard to do the installation for you with a couple of prompts. You will need to copy the lines from the wizard into your httpd.conf, they should look something like:

LoadModule passenger_module /usr/lib/ruby/gems/1.9.1/gems/passenger-2.2.9/ext/apache2/
PassengerRoot /usr/lib/ruby/gems/1.9.1/gems/passenger-2.2.9
PassengerRuby /usr/bin/ruby

Next we need to add a line to our vhost and change another one, first line we’ll add tells the server where to find and put redmine:

RailsBaseURI /redmine

And secondly we need to change out:

WSGIScriptAlias / /srv/wsgi/recipes/recipes.wsgi

Add put in the following instead since that will make django not catch /redmine:

WSGIScriptAliasMatch ^\/(?!redmine(.*)) /srv/wsgi/recipes/recipes.wsgi

Restart the server and we should be good.

I didn’t make this page/code as generic as I could have but hopefully you can get the meaning from it, if not the kind folks in #httpd on can help you. They’ll understand this if you don’t. Also, do what some like to call frobbing, play with it, break it, whatever it takes so you understand it.