getpersonas.com: where it's from, where it's going

getpersonas.com was started as a labs project in 2008. The plan was to get a website up and running to show off what lightweight themes were and see if they got any traction. If the site became popular, we'd merge it in to AMO in six or ten months and everyone would go back to working on other things. Ha. As is all too common, way leads on to way, and now here we are three years later. getpersonas.com has become a juggernaut of 3000x200px free expression on the web. There are over 1.25 million registered users on the site, 400,000 personas, and a half million hits a day. The site was built with scaling in mind and, honestly, has needed relatively little attention. On the other hand, the site lost its owners and maintainers last year. Deb stepped up with some awesome volunteers and contractors to fix minor issues but there are no dedicated developers to keep the site fresh. The web security bounty program late last year wasn't kind to the old code, and any time devoted to the site turned in to trudging through old PHP code to solve overlooked problems from long ago. We've decided that this is the year to finally replace the precarious cron job synchronizing the getpersonas.com and AMO databases for the past 18 months and finally migrate the site to AMO completely. This is no small undertaking, but we've had a lot of time to think about it. ;) I wrote a migration plan a few weeks ago as a general guide. The searching and listing pages are already at parity with getpersonas.com. The reviewer and author functionality will be added shortly - and if you read the bugs and look at the mockups you'll see it's greatly improved. This is a mutually beneficial migration; the personas will be able to leverage AMO features like statistics reporting and collections, and AMO will get a fresh look at reviewing user submitted content and an influx of creative designers. I snuck in to a personas planning meeting last week and I saw a lot of fun stuff in the pipeline for personas. I'm happy to say migrating them onto AMO will give everyone the server and developer resources to get that new stuff out the door. This will get underway in Q3 of this year.

Welcome to the Landfill

Anyone who has tried to set up AMO knows it's no walk in the park even with the respectable amount of documentation. There are two big stumbling blocks: the database is large and complex, and a portion of the site functionality is still in PHP. Django's syncdb can make a database, but the relationships in the data is what's hard and trying to load fixtures from the test cases is an exercise in frustration since they may or may not all combine into a useful set of data. With the launch of landfill.amo[1] we bypass the entire headache. The site started with a clean database and I uploaded an add-on to show it worked, but otherwise it's empty. It's compact, fast, and simple to use. The beauty of the site for volunteers and casual developers is that the database and the filesystem are available in their entirety to download. This means you can check out the code, fill in the configuration, import the landfill database and have the site 90% running.[2] Perhaps a testament to the obscene number of open bugs for AMO right now, but this also solves a second long standing problem where localizers couldn't see the entire site. On landfill, anyone can be an administrator, an editor, or any other permission level they'd like; and they'll be able to see the entire site. If you've been overwhelmed or frustrated trying to set up AMO in the past, now is a good time to give it another shot. The landfill should just get better with age and use - if a few people register and add some data the available database dumps will get richer. If there is a part of the site that isn't working and you need it to be, let me know. Keep in mind this is only the new Python code, so the few parts that are still on PHP (like the admin panel) won't be available until they are ported. Code is updated near-instantly on commit, localization changes are updated every 5 minutes. [1] Forgive the fake certificate. This is a sandbox for developers, y'all know what you're doing. :) [2] Honestly, 90% is really all you need. We do a lot of stuff for scalability, statistics, etc. and unless you're actually working on that part of the site, you don't need those elements running. Of course, you're more than welcome to turn them on, I'm just trying to make it easy.

High level perspective on the switch from PHP to Python

It may be fatuous to write this post before we’ve actually finished the transition from PHP to Python, but I started writing a different post and this is what came out. Sometimes that happens.

Status Watch: An add-on for noticing HTTP error codes

Often on complex pages with many assets it can be easy to overlook assets which don't load. Usually they are minor JS, CSS, or tracking pixels which aren't noticed until you've spent way too long trying to track down the problem (or a month later you log into your stats dashboard to discover you haven't been collecting stats). With the launch of the new Add-on Builder (still an alpha product, but usable) I decided to make my first Jetpack to fix this. In only about 20 lines of code I was able to look for any 4xx or 5xx errors in the HTTP traffic and show a brief notification to the user about what went wrong and where. The builder was a great development experience (lack of documentation aside) and was a breeze to do something relatively complex. If you've wanted a similar add-on, feel free to use Status Watch. It's a Jetpack so you'll need Firefox 4, but on the bright side, you won't even need to restart the browser. Just click and go. I've had some requests to support a whitelist of sites so you don't get notifications all over the web and I'll add that when I get time. It's surprising how many sites have 403s and 404s though. Update 2011-02-17: Version 2 is on AMO now which supports a whitelist. See the AMO page for details.

A Night in the Emergency Department

Within minutes of my arrival at the Emergency Department a call comes in that an ambulance will arrive shortly transporting a man in cardiac arrest.  Orientation can wait.  Over the next 20 minutes he is given a regiment of drugs.  I follow him to a unit that will try to locate and destroy the clot in his heart.  In the next hour his heart stops four times while technicians put two femoral catheters in his legs and follow a dye through his blood stream.  Eventually they finish what they can do and ship him to the Cardiac Care Unit.  No one knows about permanent damage.  On my way back to the Emergency Department I pass a frantic looking woman with a cell phone.  She’s just spied her teenage daughter running in and cries, “they say it’s his heart and it’s serious.”  I don’t make eye contact.