Since You've Been Gone
I'm coming to the end of another contract and realizing just how out-of-date this portfolio is. Rather than try to catch up with an endless series of posts, here's a summary of things I've been doing:
- Used Backbone.js in a credit card fraud detection system to allow users to drag and drop one or more suspicious transactions into a sort of shopping cart and then review and act on the transactions.
- I'm currently using Backbone.js and D3 to create interactive elements for a MOOC system at an Ivy League graduate school. The objects are written in Coffeescript and styled via SASS. Each interactive is designed to be a reusable element that can be plugged into any course to illustrate the relevant concept.
- Used django-mobile and various thumbnail packages to create responsive sites for clients including Small Army's new site.
- Integrated Django's templated-emails package with django-notifications to send responsive emails (with a plain text fallback) to clients in a Pinterest-clone site (that also features a responsive design). I created a custom backend for notifications that has been integrated into the templated-emails package.
APIs and Data
- Used django-tastypie to create a REST API on top of the existing site logic to power Killscreen's new design. I added this package for caching tastypie responses and patched it support the DEFAULT_FORMATS setting (pull request) because it bugs me to always have to add "format=json" to the API URLs when testing :)
- Working with django-tastypie along with this mongoengine add-on in the MOOC site to power student interaction and to track metrics and user state. I'm currently neck-deep in MongoDB learning how to aggregate and filter what promises to be massive amounts of data on each interactive element described above. The project has been a great introduction to MongoDB and where it works well in Django. I've been hesitant about NoSQL up until this and still have my suspicions about developers who see it as a panacea (which is apparently ancient Greek for "not having to worry about the data model at all"), but I can see a number of places on existing projects where it would be an improvement.
- Integrated the Ecobee API to make Ecobee thermostats a first-class citizen in Ground Energy, allowing owners to track their geothermal efficiency.
- A fun "glue" job for Coldfront, integrating with BigCommerce's API on one side to find new orders and then sending the orders to the shipping company by POSTing XML to an endpoint. The shipping company's tech is, as you can surmise, a bit old-school, so checking the order status means polling a mailbox for responses on a regular basis using Python's mailbox and parsing the results.
- Various jobs to integrate with Facebook and Twitter's APIs, including a (since deceased) Django-powered Facebook application for Solidworks called "Professor Cadmore's Challenge".
Sites, Deployment and Performance
- A series of related beer sites (and don't think I didn't smile typing "startapp beer" in Django's management console) for NH Distributors, Bellavance Beverage and Clarke Distributors with Microarts.
- Worked directly with the founders of ConvenientMD to deliver their launch site with a content management system and tools for managing locations and other business information.
- Moved Community Trust Bank to a three-server-plus-load-balancer setup at Rackspace which meant learning how to modify my typical Fabric deployment script to manage separate web servers and a database server.
- Used New Relic on a number of client sites to help identify bottlenecks and areas performance could be improved. New Relic has become an indispensable tool in a such a short time, especially the short time when you get full access for free and are able to step down into slow running queries, look at EXPLAIN statements and figure out how to get huge wins for little investment.
- I've become the "Django guy" at my host of choice (WebFaction). What this has meant in practice is clients with ancient Django sites who have lost touch with their developer (either over time or on purpose in some cases) come to me after they already have a bit of an emergency. WebFaction upgraded a number of servers in 2013 which caused a problem for anyone still running on a pre-1.0 version of Django. Another topic worthy of its own post; for now let's just say I learned a lot about spelunking and how to dig up old versions of Django for local testing.
- Started using Vagrant boxes to replicate the live environment on a project. I'm not ready to give up my current virtualenv-based Python development process for most projects because it does a good job of replicating the important stuff and because I feel like being able to swap project development from Mac to Windows without a hitch is a decent indicator that I've done a good job of keeping things loosely-coupled, but Vagrant is a good solution for cases when the live environment is important or hard to replicate. I also would like to investigate using Vagrant plus Ansible (or something similar) to be able to deploy projects directly to AWS and spin up additional resources as needed with a minimum of sysadmin work.