We had our 2nd ShipIt Day at Caktus last week. ShipIt (coined by Atlassian), in case you don’t know, is an exercise that allows your team to work on alternative projects in a 24-hour hackathon. We brainstorm ideas related to Caktus, break into small groups and try to build a project by the end of the day on Friday. It’s a lot of fun and provides an opportunity to work on internal tools, try something new and collaborate together.



We had a lot of great projects this time around. From diving into AngularJS to building a PyGame for learning how to program. I’ve written up a short summary here to show everyone what we worked on. You can view a whole Flickr gallery of our ShipIt day here.

Learn a New Framework

We build most projects in Django at Caktus, but it’s fun to learn about alternatives. Dan, Karen and Mark teamed up to explore alternative languages and frameworks. The idea was to build a HTTP service in the framework of your choice that would return whether or not a word was spelled correctly. A simple Python-based test suite was used to test spell checking a few words. In the end, 5 languages/frameworks were tested: Lua, Emacs, Go, Flask, and Erlang. During presentations, the team stepped through their code explaining the language syntax and idiosyncrasies. It was a lot of fun to see each example and how they compared to one another. You can find their experiments on GitHub.

Angular JS Dashboard for Django Timepiece

We use our own custom made time tracking tool at Caktus called timepiece. It’s grown with us over the past 5 years and is open source and available on GitHub. Rebecca, who regularly helps us improve timepiece, was interested in learning more about AngularJS and thought it would serve the timepiece dashboard well. Specifically, she was interested in enhancing the dashboard user experience, including AJAX clocking in/out and editing of your logged entries. Rebecca dove into Angular JS and learned a lot about the framework over the course of both days.

Timepiece Scheduling Algorithm

Tobias focused on a different timepiece enhancement: scheduling. We use timepiece for time tracking, but we also use it to track and display the team’s weekly schedule. This includes anything from client projects to vacation. We currently use a large and complex Google Doc spreadsheet to schedule projects months in advance, which has served us well for years, but has grown to become quite complicated and tedious to manage. Tobias decided to explore an alternative route by building a tool to automatically schedule the team. The algorithm uses project start/end dates, total hours, and expected team member commitments to build the Caktus weekly schedule. The idea here being that if we implement the proper framework and constraints, timepiece will automatically schedule the team every week. I’m excited to see where this goes!

Salt Provisioning + Caktus Project Template

We deploy a lot of projects at Caktus. To make this easier, we maintain a Django 1.4+ project template that defines a standard Django project layout and fabric-based deployment. It’s free and available on GitHub. Currently, with the help of argyle, we use fabric to provision new virtual machines. Mark, Dan, Scott and I worked together to prototype an updated provisioning template using Salt Stack, which is better suited for provisioning than fabric. This class of provisioning tools, including Chef and Puppet, specialize in automated provisioning and we thought it was wise to adopt such a tool to use at Caktus. Our goal was to use fabric only for deployment and define Salt States for server setup, services (PostgreSQL, gunicorn, nginx, etc.) and secrets management. We made good progress and hope to have a functional version in Vagrant soon.

Razzytails

Caktus recently worked with the Python Software Foundation to build Raspberry IO, a website dedicated to sharing, creating, learning and teaching the greater Python community about using Raspberry Pi, a $35 barebones computer designed primarily for educational purposes. Interested in creating an educational game, Caleb, Vinod, David, and Julia teamed up to create a PyGame-based video game that teaches the player programming concepts while exploring the world of Razzytails. Razzy, the Raspberry IO mascot, is the main character who is tasked with navigating a world filled with items to collect as well as monsters. When a monster nears your character, you’re forced to answer a multiple choice question, such as “What symbol can you use to comment out code?”. The team worked together to create a navigable world, game artwork, moving enemy algorithms and includes a gypsy jazz Django Reinhardt soundtrack.

DoodleMap: Notes and Mockups on your phone and tablet

Calvin also investigated AngularJS. He’s interested in building an offline mobile web apps and wanted to see if AngularJS would be a good fit. He gave the framework a whirl by creating an interactive, mobile-friendly sketching application, DoodleMap. DoodleMap let’s you sketch notes and mockups in a browser window. All sketches are saved to a client-side IndexDB where it can be reloaded and drawn to the screen. Eventually, he hopes to integrate it with plasmid, his client-side storage framework.

Takeaways

I think we had a great second ShipIt. We worked on a lot of interesting projects and everyone enjoyed collaborating together. In fact, some groups started brainstorming before the ShipIt day and it really got the excitement going. Next time around I think we should brainstorm ShipIt day ideas earlier in the week to follow in their footsteps. I’m looking forward to our next quarterly ShipIt in July!

