- colin at muffinlabs dot com
- 22 Taylor Hill Road
Montague, MA 01351
This resume is also available at https://muffinlabs.com/resume.html
- Well-rounded developer with over 25 years of experience building software applications and websites for a variety of businesses and organizations.
- Expert at managing high-throughput applications on cloud services.
- Skilled at analyzing needs, determining requirements, and implementing solutions for projects of all complexity levels.
- Close to two decades of experience working remotely.
- Expert knowledge of web-development languages (Ruby on Rails, JS/Node, PHP), HTML, XML, JSON, database design and implementation, SQL, and Linux server administration.
- Comfortable with C#, Java, Rust, and many other languages
- Skilled with Docker, Kubernetes, cloud services such as AWS, and infrastructure tools such as chef, ansible and terraform.
Montreal, QC. July 2006 - Present
Member of team maintaining and developing a custom website builder which powers websites for musicians. We host over 60,000 websites and our servers handle millions of hits per day. The system is written in Ruby on Rails. Our team is distributed over multiple timezones, and we all work remotely.
When hired, I was the second developer on the team, and we had under 1,000 websites running on a very simple ColdFusion CMS running on a Windows server infrastructure. My early projects involved improving our asset generate system to run asynchronously, moving from Windows/IIS to Apache on Linux, moving user assets to S3, and implementing a number of services on EC2. I also worked a lot of performance improvements in our code and in slow MySQL queries.
I was largely responsible for a rewrite of our codebase in Rails. The original code was very brittle and moving allowed us to make a lot of improvements and build a stable foundation for the future. Moving to Rails allowed us to write a testable, stable codebase. We also changed server providers as part of this process, so my work involved moving user data and assets, writing a migration system, and implementing chef to build a collection of new servers.
As we've grown, I have implemented application caching, improved our site performance, ensured site uptime and server stability, built out our reporting tools, worked on fraud issues, and help continue developing our product.
- Orchestrated several data migrations: from our ColdFusion application to a new Rails application based in a new datacenter, then from that datacenter into a new instance of the application running on kubernetes at AWS.
- Implemented a system to generate, maintain, and serve SSL certificates for 60,000 domains using Lets Encrypt.
- Implemented a web-based image resizing/manipulation system to handle thumbnail generation, image rotation, cropping, format conversion, etc, all dynamically on the fly.
- Built a custom web analytics tool for our users, using Rails and D3.js
- Built a background job service initially using RabbitMQ and Sneakers, and eventually switching to Sidekiq, which runs millions of jobs a day.
- Built a system to encode MP3s and build zipfiles of albums. We encode thousands of files a day.
- Implemented Paypal and Stripe integration for user stores and for recurring subscriptions.
- Implemented webmail for our users to multiple email services via API interfaces with Rackspace Email and enom.
- Built integrations with 3rd party services such as Paypal, Stripe, Soundcloud, Twitter and Facebook.
- Server/infrastructure provisioning using chef, ansible, and terraform and ongoing maintenance.
- Built and maintained our current DNS system running PowerDNS.
- Implemented many features for user websites, including our music player and store features.
- Implemented a mailing list tool for our users, originally starting with a postfix server and eventually moving to Sendgrid.
- Built an accounting system to accept recurring payments from users, generate reports, and monitor trends.
- Ruby on Rails
- chef, terraform, ansible
- Apache, nginx and openresty
- MySQL and postgres
- AWS services including EC2, S3, Lambda, Elasticache and EKS
Programmer, Participatory Culture Foundation
Worcester, MA. April 2005 - June 2006
Programmed several websites and open source tools enabling video producers to publish, promote, and distribute their content.
VideoBomb: Main programmer for a community site to bring people together and share popular videos on the web. I did the majority of object modeling and database design for the site and wrote the bulk of the code, using Ruby on Rails as the framework and MySQL as the database. I wrote code to generate RSS feeds, designed and developed an algorithm to determine how videos reach the front page of the site, wrote the tagging system, and built a large amount of the rest of the site. I also implemented an interface with the Democracy channel guide, and wrote code to allow videos to be added from the Democracy video player.
Broadcast Machine: Developed an open source software package for videocasting, creating video channels, and distributing content. I took over the project from another developer that wasn't able to proceed beyond the early stages of development and implemented a large amount of the functionality. Wrote code to automatically generate RSS feeds which contain publishing information, licensing rights, length of the video, etc. I worked to ensure that Broadcast Machine worked on as many platforms as possible while being very simple to install and manage. I communicated with users of the software to resolve bugs, implement requested features, and help with installation questions. Broadcast Machine is written in PHP and can use MySQL or a flat-file system as a database. My code for this project runs on as many different webservers/platforms as possible, and is designed to be very easy for the user. My work also involved:
- Implementing transparent MySQL/flat-file support
- Writing support for custom, user-generated themes
- Writing unit tests to ensure high code quality
- Developing an XML-RPC interface for 3rd party applications
Old Saybrook, CT. 2003 - 2005
Softpower writes business management software for the outdoor power equipment industry. I was the lead programmer on a project to completely rewrite the flagship software product, which handles point-of-sale, inventory management, purchasing, work orders/repairs, etc. I designed all aspects of the system, including a SQL Server database, an object model in C#, and a Windows user interface. I met with dealers and users of the old software to determine a list of requirements, get input on design, and get feedback on beta versions of the software. I implemented a web service interface between dealers and manufacturers to handle registration of new hardware, warranty claim submission, parts inquiries, and purchase orders. Other work included:
- Barcode support - reading in UPC labels, custom manufacturer labels, etc, to speed data entry for users. Also implemented support for label printers so that dealers could print their own barcodes and use them to sell/manage equipment.
- Reporting system using Access and Crystal Reports, which allowed for creation of custom reports by dealers
- Designed and implemented the database, object model, user interface
- Wrote a patch system to make it easy for dealers to manage periodic database updates
- Wrote a basic installer which would check for prerequisites, install them, manage the database installation, etc.
Worcester, MA. January - December 2002
I designed and implemented a C++ application for the Palm OS used by drivers at trucking companies, which provides real-time GPS location data sent via SMS messaging. I wrote code to allow drivers to track time spent driving according to federal requirements, track trip data, starting/ending odometers, manifests, tolls/expenses, etc. I also wrote a more general tractor/trailer logistics system for a GPS/SMS unit called the Trim Trac. This system is written is C# and uses SQL Server, and integrates with a Java application which processes incoming/outgoing SMS messages. Other aspects of my work included:
- Report generation/Data processing using MS Access and Crystal Reports
- Synchronization of data from Palms to SQL Server
- Integration of all data in SQL Server
- Website using C#/ASP.NET for real-time tracking and configuration of units
- A C#/MapPoint desktop application for tracking vehicles
Senior Technologist, WGBH Local Online
Boston, MA. April 2000 - January 2002
Technical lead for https://www.wgbh.org/ during two complete rebuilds of the website. I helped to determine needs, communicated with people throughout the organization to define goals for the website, served as liaison to the programming firm that built the site, and participated in the coding of individual elements of the site. Helped to specify a design for a content management system used to generate content for the website, and developed several portions of the CMS. Built a search engine which indexes content from the site to return results to users, as well as allowing the editorial staff to rank some results higher when needed. I integrated the website with several external sources of data, including TV schedules, the pledge system/member database, and external news sites. I also supported the editorial and design staff that produces all of the content for the site, as well as building special websites on a regular basis, such as a database of local candidates and voting districts for Massachusetts during the 2000 election, which was the only database of its sort at the time.
I've worked on a lot of side projects over the years, here's a partial list.
- I maintain botsin.space, a mastodon instance devoted to bots</a>
I've built a number of bots on Twitter.
Many of them are built in chatterbot, a ruby library that I
maintain. Some of my personal favorite bots include:
- botgle - a multiplayer game of Boggle via Twitter, which was called the best Twitter bot of 2015
- wayback_exe - a bot that uses the Wayback Machine to generate screenshots of websites from the 90s.
- EarthRoverBot - an interactive bot that used Google street view data to 'drive' from Maine to California.
- I built gopherpedia, a gopher interface to wikipedia. I built a ruby gopher server as well as a PHP/JS web proxy to gopher for this project. I suspect that gopherpedia might be the largest gopher site in existence by pure number of pages/content.
- namey -- a random name generator with a REST API and ruby gem
- the secret broadcast, a podcast of secret messages, in the style of a numbers station</a>.
You can see more on my projects page or on github.
Vice-Chairman, International Model United Nations Association
March 1999 - March 2003
IMUNA is a non-profit corporation that oversees two Model UN Conferences along with several other educational projects. My role was to improve our Internet presence and to work on the Classroom To Conference project. The position also involved choosing the leadership of both conferences each year, approving their budgets, and participating in the long-term decision making process for IMUNA.
Assorted small game development. Completed projects include:
- The game crossfire
- A simple chess game called five pawns
- The card game Pitch for the Palm OS
- A word game for the Palm called Dog Gone It
- Rensselaer Polytechnic Institute, Troy, New York
- Bachelor of Science, Computer Science, Minor in Electronic Art. Graduated May 1997.