November 2010 — Present
Application Programmer at FreshBooks
FreshBooks is an web-based invoicing and billing application. As an application programmer there, I work closely with a team of other developers, designers, and product managers to help design and deliver new features, refactor the legacy code, and write tests for all of the code that I write.
Refactoring to MVC
The core of the FreshBooks codebase was originally written in a style that was not conducive to automated testing, agile development, and did not follow best-practices. Along with a few other team members, I helped refactor the business logic of FreshBooks to an easily testable, modern MVC style, using a PHP framework that we developed in-house, and Twig for templating—the fork of which I personally maintain. Although work is ongoing, more than 60% of the codebase has been converted and tested in just over a year.
Implementing an ACL
The FreshBooks codebase encompasses many different levels of users—administrators, staff, and clients—each of which see a slightly different version of the application and sometimes experience complicated differences in behavior and functionality. The access checks required for each of these levels were often done in ad-hoc, non-reusable ways that were difficult to test and maintain. I implemented a centralized, unit-tested access control list using the Zend Framework's ACL library that embodied the behavior of the app as well as the API.
All of the aforementioned work on refactoring and testing the FreshBooks codebase is done while also delivering new features to FreshBooks customers. I have worked closely with designers and product managers to write specifications, design, code, document, test, and ultimately ship many features to FreshBooks customers. I also often make small user-experience improvements to the application independent of designers and product managers.
May 2008 — November 2010
Lead Web Developer at Tiger Advertising
Tiger Advertising is a full-featured advertising agency. I worked personally with clients such as Fujifilm, Xerox, and oversaw the work of a fellow developer and another designer. As the lead developer, I was responsible for the design, development, and maintenance of a large number of websites, applications, and servers on a daily basis.
I was working personally with Fujifilm Cameras to deliver two Facebook applications that revolved around user-submitted photos. Both applications are multi-lingual, and make extensive use of Facebook's API. As such, I have gained a significant amount of experience working with Facebook's ever-changing platform and Open Graph API.
Video chat system
One of our side-projects was a standalone video and text chat application. I wrote the majority of the code in PHP and Flex with a bit of Java for the media server. Particular care was paid to creating a flexible database schema and a modular codebase that made customizations to parts of the code simple to perform and free of side effects, as most of our clientele required modifications to core functionality.
As our list of clients was so large, I gained hands-on experience with most aspects of web development and design. I have extensive experience with design, application frameworks, internationalization, server administration, SEO, and front and back-end tuning and optimization.
Jelly and Kohana 3.0
I am the original creator of Jelly, an ORM for the popular PHP framework Kohana. I now co-develop the project with Paul Banks, another Kohana regular. I am proud to say that the project is the most watched Kohana-related module on Github, and development is gearing up as we reach the 1.0 milestone.
2001 — Present
I have been developing websites for over 9 years. Over time, I have hands-on experience with many of the more popular tools available to developers including Kohana, Django, Ruby on Rails, and JQuery. I am able to quickly learn new technologies and concepts.
A list of freelance work is available upon request.
I develop applications with the following languages.
- 10 years of HTML and CSS
- 8 years of PHP
- 7 years of SQL
- 3 years of Python
- 3 years of Ruby
- 1 year of Java
I use the following technologies to produce high-quality, tested code.
- 7 years with MySQL and SQLite
- 4 years with JQuery, a JS library
- 3 years with Kohana and Zend, PHP frameworks
- 3 years with PHPUnit, for unit-testing
- 2 years with Git and SVN for version control
- 2 years with Facebook's API
- 1.5 years with Twig, a templating library
I use my knowledge in the following areas to produce well-designed apps.
- Object-oriented programming
- Test-driven development
- The Model-View-Controller paradigm
- Cross-browser testing
- Split testing
- REST- and SOAP-based web services
- Object-Relational mapping
- Access control lists
In addition to the above, I have also worked with the following:
- Adobe Photoshop and Illustrator, for designing the front-end of applications and websites
- Final Cut Pro, Logic Pro, Cubase, and Max/MSP, for producing video and audio content
- Vim and TextMate, for authoring code in a variety of languages
Bachelor of Fine Arts — OCAD University
OCAD allowed me to combine my love of programming with the arts. Much of my time there was spent writing software that produced works of art, creating web-art pieces, or tinkering with electronics in the Music lab.
My final-year thesis work was concerned with evolving imagery that was generated with software I wrote in Python and the PIL. It was accompanied by generative music and audio created with Actionscript, Max/MSP, and my own instruments.
Graduated with honours