In the time I've been working as a developer, I've realized that what I really like is to solve problems for humans. This means more than just "making it go". When you're working with people, you have to create a solution that works for them. I'm no usability guru, but I want to build tools that people enjoy using, rather than tools they use for lack of a better alternative.
Good applications have both clean internals and usable interfaces. That interface might be a web application, a command line program, or a daemon, but usability is important in all those cases.
I also have a great interest in data. Solid data representation and handling is the key to building powerful, flexible applications. "Garbage in, garbage out," and garbage isn't useful.
Finally, I care about the development process. Automated testing, good deployment tools, QA, bug tracking, source control; all of these tools and practices are crucial to building software that is good for both its users and its developers. It's not enough to build something that works if you can't maintain it over time. It's not enough to fix a bug if you reintroduce it in the next release. Software should get better over time, not worse.
- Design and development work on many web apps, including the Socialtext Wiki and a community-driven restaurant review site, VegGuide.Org.
- A member of the core development team for Moose, a postmodern object system for Perl 5. Moose brings a new level of power and clarity to OO programming in Perl 5 and makes it a lot of fun at the same time.
- Head cat herder for the Perl DateTime Project, member of the Mason core team, and a prolific CPAN module author
- Experience talking to non-geeks and determining the end user requirements for a project.
- Co-author of Embedding Perl in HTML with Mason and RT Essentials, both published by O'Reilly.
- Presenter at numerous conferences, including many OSCONs and YAPCs. I also offer a one day class on using Moose.
- Living in Minneapolis, MN, and not looking to move.
|Servers and tools||Apache, including mod_perl and SSL, Plack/PSGI, Git, Mercurial, Subversion, RT, Bricolage, Various Unix daemons/servers like Postfix, OpenSSH, Mailman, and many others|
|DBMS Applications||Postgres, MySQL, Oracle, Sybase, SQL Server|
|Operating systems||GNU/Linux, FreeBSD, and Solaris|
Consultant, 11/2007 - 4/2011
At Thomson Reuters, I worked on integrating new data feeds with an existing database of corporate information. Much of this work involved talking to the business side of the company, as well as the outside feed partner, and making sure that the solution I was building would satisfy our business requirements.
I also worked on a number of infrastructure projects. I worked on adding support for new processor architectures to our build system, building a mechanism for managing our Perl module installations, and adding support for handling Unicode data to our code base. This work required coordination with developers in different groups, as well as gaining an understanding of business requirements for internationalization.
Senior Developer, 3/2007 - 11/2007
At LiveText, I worked on a variety of projects. One project involved adding automatic draft saving to the FCK editor that was used to create documents in the system. As users edited, work was regularly saved to the server using Ajax. If a document was not saved "properly" by the user, perhaps because of a browser crash, they did not lose their work.
I also helped improve internal practices by implementing automated unit and integration testing. I set up a continuous test server that checked out branches of the code, ran the tests, and reported the results to a Smolder instance.
Senior Developer - Database Lead, 9/2004 - 3/2007
As part of a growing startup, I worked on numerous projects at Socialtext. I created our first automated deployment system, as well as our first automated tests. I also performed on-site field engineering for a major customer, integrating our appliance into their custom SSL certificate authentication system.
One of the larger projects I worked on was moving some of our data storage from the file system to a Postgres database, providing data integrity, increased query-ability, and much improved speed of data retrieval. Along the way, I also implemented a simple but flexible ACL system, and added real authorization checks, plugging numerous security holes.
House Absolute Consulting
2/2002 - 9/2004
One of my first consulting jobs was with Marigold Technologies, working on their salesperson-focused CRM, ContactBook. I was initially hired to do code review of the existing system. After this was completed, I helped them re-architect the code for greater scalability and added a number of features. Along the way, I mentored another developer on the new system architecture.
The most challenging of these new features was adding per-client custom fields for contacts. The end result was a customizable system for end users which maintained strong data integrity constraints and allowed for quick searches over large sets of contacts.
Later, I worked on a simple mini-CMS for Native Americans in Philanthropy. This CMS allowed them to control the dynamic portions of their web site, such as job listings and news. It is also integrated with a membership management CRM I wrote, allowing new members to sign up and pay online.
Lead Developer, 4/15/2001 - 1/22/2002
I was responsible for the design and development of an online system "donation shopping" system. Non-profit organizations were able to enter data about themselves, and this data was browseable by potential donors, who could donate directly to the non-profits.
Clients were provided co-branded access to the system, and had an administrative interface from which they could view statistics, filter non-profits shown on their version of the site, and select featured projects for their site.
In addition, I also created a development environment which allowed both the designers (using Macs) and developers (using either Windows or GNU/Linux) to share a CVS repository and to run their own copy of the site.
O'Reilly and Associates, Software division
Consultant, 7/24/2000 - 2/23/2001
I was involved in the design and implementation of a Unix version of O'Reilly's WebBoard, which had begun life as a VB web application for Windows.
Too Old to List, 1995 - 2000
Do you really want to read about my TA position or my first programming jobs?
My blog. Most of the writing is on technical topics.
I wrote perlootut from scratch and revised perlobj from the ground up for the Perl 5.16.0 release. I also made major edits to several other documents in the Perl core, including perlhack, perlhacktut, perlhacktips, and perlsource.
In 2009 I received a grant from The Perl Foundation to work on the Moose documentation. I revised all of the existing API docs, wrote new cookbook recipes, and wrote the Moose::Manual documentation from scratch.
I contributed two chapters to this book. For more details see the O'Reilly page for the book
Published in the July 2004 edition of The Perl Journal.
This slightly modified excerpt from the Mason book was published at Oreilly's Perl.com site on 2002-12-11.
I have presented at numerous conferences, including the O'Reilly Open Source Convention (OSCON), Yet Another Perl Conference (YAPC) North America, Europe, and Japan, and ApacheCon.
Relatively recent presentations. These are still relevant.
- Basics of Unicode in Perl - I made this to present to my co-workers at MaxMind. It's never been given at a conference.
- Intro to Moose class
- Intro to Object-Oriented Programming in Perl
- A Date with Perl - I've also called this Dates, Times, Perl, and You in the past
- Markdent: Event-Driven Markdown Parsing
- Patterns in Perl
Ancient cruft, view at your own risk. There may be something worthwhile in here, but much of the content is outdated.
- Fey, Another Freakin' ORM
- Perl DateTime Project - A much older presentation on the same topic as A Date with Perl
- Introduction to Mason
- JSAN, Ajax, and Perl (Japanese translation)
- Perl Modules for Exceptions, Logging, and Parameter Validation
- What is a Data Model?; The Relational Model; SQL is not Relational
Besides contributing patches to numerous projects, I have created and/or maintained a number of Free Software projects. I'm a very prolific CPAN module author.
The Perl DateTime Project
This is a project I began, and still lead, which has developed a comprehensive suite of inter-operating Perl modules for dealing with dates and times. Modules in the DateTime suite are listed on the datetime.perl.org website.
Since 2000, I have been a member of the core team for the Mason templating system. I led the development effort for the 1.10 release of Mason, rewriting and re-architecting major portions of the Mason code base in order to make it more easily extensible.
Log::Dispatch. is a suite of object-oriented Perl modules for logging a message to multiple outputs. It is widely used by Perl application developers.
Exception::Class allows Perl developers to declare hierarchical sets of exception classes for their own use. It provides a complete exception object implementation though developers are also free to use their own if they prefer to do so. In his book Perl Best Practices, Damian Conway recommends this module as the best way to declare exception classes in Perl.
Params::Validate provides method/function argument validation. It allows verification based on primitive types, object class, object interface, and callbacks. At a simpler level, it can be used to verify that required parameters are present and that no superfluous ones have been given.
These are some of the community projects I have worked on.
VegGuide is a community-maintained directory of veg-friendly restaurants, grocers, and more. Any registered user can rate/review entries, add new data, and suggest changes to existing data.
I collaborated with Ask Bjørn Hansen on the development of the Perl jobs site, which is a resource for Perl developers and employers looking to hire them. The site uses Mason and MySQL.