David Naughton: Résumé

David Naughton: Résumé

nihiliad@gmail.com | https://nihiliad.wordpress.com/resume/

  • Software developer/software engineer since 1998.
  • Expert in object oriented and functional programming in Perl, PHP, Python, & JavaScript.
  • Web Development Focus Areas
    • AJAX
    • REST: RESTful web services, RESTful web application design.
    • Back end data APIs.
  • General Software Development Focus Areas
    • Design of scalable, robust, change-tolerant systems.
    • Large data sets.
    • Searching.
    • Algorithms and other computer-science-based approaches.
    • Agile, especially test-driven, development.
    • Dynamic languages (Perl, PHP, Python, Ruby, JavaScript, etc.)

Open Source

  • EthicShare

    The EthicShare team plans to release at least some of its software as open source. I wrote many object oriented PHP modules that can be used outside of EthicShare and even Drupal, upon which EthicShare is based. I will release these modules, and likely more, via a PEAR channel soon. One reason I have not done so yet is that software re-use across projects is not well-supported in the PHP community and is in a state of flux. I’m still trying to decide among the various alternatives. For example, see How Would You Engineer A PEAR2/Pyrus Distribution Architecture?, including my comment. In the meantime, I’d be happy to provide the source for these modules I wrote for EthicShare:

    • NCBI_Client A client for  Entrez web services, provided by the the National Center for Biotechnology Information. Designed especially for NCBI’s PubMed database.
    • WorldcatSearch A client library for the WorldCat Search API, provided by the Online Computer Library Center.
    • XML_Record A group of classes for manipulating any XML that can be conceptualized as a list of records. Provides an iterator-based API. Opens XML files as streams, to avoid creating DOM trees of entire large XML files in memory.
    • File_Find_Rule Ported from the Perl File::Find::Rule module; manipulates multiple files and directories of files.
    • ISBN Ported from the Perl Business::ISBN module; parses and validates ISBNs
    • Set Mathematical set operations.

    See University of Minnesota Libraries Work Experience for more details about EthicShare.

  • MojoMojo

    An innovative wiki built with the Catalyst web application framework. Started as a joint project with Catalyst release manager Marcus Ramberg. My biggest contribution was support for a hierarchical page namespace, for which I implemented nested sets in SQL, with a Perl interface using the Class::DBI ORM. Marcus and I later ported the Class::DBI code to DBIx::Class. Also wrote code to help integrate Plucene, a Perl port of the Lucene full-text search engine, into MojoMojo. Due to work and personal life changes, I have been unable to contribute for over a year, but hope to do so again soon. Upon request, I would be happy to point to the parts of the code I wrote.

  • Catalyst

    Catalyst is similar to Ruby on Rails, only better, and is the leading MVC web application framework for Perl.
    Marcus Ramberg and I started writing MojoMojo (see above) in Catalyst in the earliest days of Catalyst itself. We were in constant communication with the Catalyst core developers, trying out features in MojoMojo, giving feedback, proposing new features, and generally sharing ideas. I wrote the first public documentation for Catalyst, Catalyst::Manual::Intro, and maintained the first few revisions.

  • Class::DBI::Loader::Oracle

    Automatically generates and loads Class::DBI (a Perl ORM) classes for Oracle schemata. I no longer use Class::DBI* (does anyone?), so I no longer maintain this module.

Work Experience

University of Minnesota Libraries, Twin Cities (3/2008-Present)

  • Web Applications Developer for EthicShare (3/2008-Present)

    • EthicShare is “an online website and database for ethics scholars and students to discover and share high quality digital articles and other materials—scholarly and popular press articles, multimedia objects, pre-prints, and archival documents.” EthicShare is based on Drupal, which in turn is based on PHP and MySQL.
    • Automated Extract, Transform, and Load (ETL) System
      • Automatic, scheduled extraction of bibliographic citations from multiple, disparate sources of bibliographic citations, all with different data formats and rules for retrieval…

      …transformation of those citations into a common format, and loading of the transformed citations into a Drupal MySQL database. The database currently contains about half a million records and is constantly growing. This was a challenging system to design and implement, because Drupal doesn’t really have a back end data API, and therefore not really designed for what we wanted to do on the back end.

      • Implemented as a separate system from Drupal, to allow for greater flexibility, performance, and re-usability. So it’s really its own separate application. Can be used with multiple Drupal sites. Most of it can even be used with non-Drupal systems.
      • For even more flexibility and re-usability, many parts implemented as separate modules that can be re-used outside the ETL system. All of these modules are documented with Doxygen and have extensive, automated test suites, using SimpleTest.
      • Written in object oriented PHP.
    • Drupal Theme Implemented much of the original EthicShare theme in Drupal based on mockups from the graphic designer.
    • Subversion Set up a Subversion server, integrated it with the University’s Cookieauth single-sign-on system for secure access, and documented how I did it.. This was also a major step forward for UMN Libraries in general, because there was no colletive, centralized source code repository before I set up Subversion.
    • Git Currently part of a small group setting up a local, private GitHub as a central service to all UMN developers.
    • RefWorks API Wrote a prototype application to demonstrate use of the proprietary RefWorks API, using the PHP micro-MVC framework Limonade. RefWorks refers to their API as a “REST Interface”, but RPC-over-HTTP would be more accurate.

Holmes Corporation, Eagan, MN (12/2006-2/2008)

  • Senior Software Developer

    • Development of online, interactive training software to help students prepare for certification exams offered by various professional associations, e.g. Society for Human Resource Management (SHRM), American Payroll Association (APA), etc.
    • Wrote a set of Perl classes that allowed for development of MVC applications within an already-existing, highly customized and complex mod_perl/Mason environment. Used these classes to release the first-ever MVC web apps at Holmes.
    • Holmes has many (roughly one for each client) Extract, Transform, and Load (ETL) applications, which move exam data from quasi-INI text files to MySQL. When first tasked with re-writing an ETL, pulled the concerns into separate, stand-alone modules. Since parsing INI files (Extraction) and inserting data into MySQL (Loading) is the same for all clients, these classes could be re-used for all ETLs.
    • Exploited the new MVC and ETL orthogonality to develop fine-grained unit tests. Now all parts of the MVC web apps except the Views have automated tests that do not require a web browser, and all parts of the ETL apps except the Loaders have automated tests that do not require MySQL. Because bulk database updates can cause chaos for other people running tests on the testing/development machines, the ETL Loader tests automatically create unique MySQL databases for each test run, and destroy those databases when the test run is over. This was possible largely thanks to the Rose::DB::Object Perl ORM.
    • In summer 2007, Holmes management decided to do a big rewrite of all their products in Plone/Python. As part of that effort, wrote a mildly-complex Case Study content type that presents several questions to the student based on a given scenario.
    • Integrated Plone with a third party e-commerce system by writing a light-weight RESTful web services framework. One part of the framework is a Plone product that intercepts web service requests and dispatches them to the appropriate handler methods based on the request method (GET, POST, etc.) and resource (URI). The other part is a client application that interacts with the Plone server using the httplib2 Python library. All resource representations are XML, generated and parsed (with XPath) using the lxml library.

University of Minnesota, Twin Cities (1/2002-12/2006)

  • Web Development Manager Networking & Telecommunications Services (2005-2006)

    • Chosen to manage a newly-created NTS Web Development group of three programmers in September, 2005.
    • Extensive training of two absolute-beginner employees in both web design and web application programming.
    • Large projects:
      • RESTful web services interface, implemented in OO Perl, to the University’s phone switch to allow for automated fulfillment of voice network service orders.
      • Enhancement of a vendor’s J2EE/Struts-based Unified Messaging (integrated voicemail, email, video conferencing, etc.) system to allow for re-usable web page components via Tiles and web design customization via CSS. Out of the box, this product had repeated code across hundreds of JSP files, used FONT tags and other deprecated HTML, and used absolutely no CSS. Started to develop an HTML/JSP parser to automatically transform the JSP files.
      • A visual browser of the voicemail system Telephone User Interface (TUI), using OO Perl and AJAX with the Prototype JavaScript library.
      • Core member of committee to choose a Content Management System for the entire University.
  • Lead Web Developer, Networking & Telecommunications Services (2002-2005)

    • Web application development and web design for the website of the Networking and Telecommunications Services (NTS) department of the University of Minnesota. Most web applications interact with back-end databases to allow users to request voice and data network services of NTS and to run reports on their network statistics and invoices.
    • When I started at NTS, no one was dedicated to software development, let alone web development. There was much Perl development going on, but it was all in a Perl 4 style with no use of CPAN modules, let alone object orientation. Also, despite the fact that all this code ran on multiple production machines running AIX, Red Hat Linux, Solaris, and Windows, there was very little documentation, no version control, no deployment/release procedures and no formal testing or even testing machines. I did much to turn things around:
      • Introduced other developers to CPAN and trained them in object oriented Perl.
      • Installation and development (see MojoMojo above) of wiki software to promote documentation.
      • Set up Subversion servers and integrated them with the University’s Cookieauth single-sign-on system for secure access.
      • Set up testing servers.
      • Used the NetBSD pkgsrc cross-platform package manager to achieve consistent deployment of software across multiple operating systems.
    • For the 2004-2005 campus-wide Network Upgrade, developed several web applications to manage the high customer communication demands. Many apps, including the main page blog, allow non-technical NTS employees to edit portions of the project website via wiki markup. Designed and developed a new website for the project. While the design uses strict XHTML and table-less, CSS positioning, it worked in virtually all browsers in use at the time.

Arbita, Minneapolis, MN (4/2001-9/2001)

  • Web Applications Developer

    • Software development for a web recruiting industry leader, which re-posts job postings to 3000+ job boards, for hundreds of clients, via numerous formats (much XML, various proprietary formats) and methods (HTTP GET and POST, FTP, SMTP).
    • Full software lifecycle development, in object oriented Perl, of record conversion and Oracle database services, for a website running on the Apache web server under Sun Solaris Unix.
    • Created a standard company job posting format based on the HR-XML Consortium’s JobPositionPosting DTD. Developed a group of Perl classes, using XML DOM, to read and write these job postings.
    • Some participation in analysis and design for a new website written in Java using Servlets and JSP.

Prometric, Edina, MN (1994-2001)

  • Software Engineer (1998-2001)

    • Promoted from within to the Software Development group in 1998.
    • Full software lifecycle development of database services software for the worldwide leader in technology-based examination services. With hundreds of clients and 2000+ testing centers across the globe, Prometric’s software processes huge amounts of data 24/7.
    • Participated in the analysis, design, and re-write of all database services from a legacy system, written in C, Awk, Perl, and Unix shell script, to a new multi-tier, J2EE system using Enterprise Java Beans (EJBs), Servlets, Java Naming and Directory Interface (JNDI), Java Message Service (JMS) and XML.
    • Designed a crucial piece of the new system that stores all export data formats for Prometric’s hundreds of clients in the database, thus allowing the Java applications to define, read, and write those formats based on information in one central location.
    • Appointed as the lead engineer for multiple, mission-critical projects for Microsoft Corporation, Prometric’s largest client, involving extensive direct client interaction.
    • Almost single-handedly performed all design, development, testing, and documentation for a radically new, mission-critical, B2B system between Prometric and Microsoft, written in object oriented Perl and Perl’s Database Interface (DBI), within a deadline of just a few months.


  • Lullabot Drupal Workshop (May 2008)

    Completed the Drupal API and Module Development course.

  • Plone Advanced Bootcamp (August 2007)

    Completed the course in advanced Plone development taught by Plone expert Joel Burton.

  • Oracle University (July 2004)

    Completed the SQL Tuning Workshop course.

  • Sun Educational Services (June 2000)

    Completed course SL-275: Java Programming Language.

  • University of Minnesota, Institute of Technology (June 1998)

    Bachelor of Science Degree in Mathematics, with emphasis in the Computer Science-related fields of Combinatorics and Graph Theory.

Skills and Tools

Languages Perl, PHP, Python, JavaScript, (X)HTML, XML, CSS, SQL; some proficiency with Java, XSLT, C/C++; some familiarity with Ruby, Lisp, Haskell, Awk
Operating Systems Unix, including Linux, *BSD, Sun Solaris, AIX and HP-UX; Windows; MS-DOS
Web Server Technologies Apache, mod_perl, IIS
Web Application Frameworks Catalyst, CGI::Application
Web Templating Template Toolkit, Mason, HTML::Template, Template Attribute Language (TAL)
Content Management Systems Drupal, Plone
Databases Oracle, Sybase, PostgreSQL, MySQL, SQLite
ORMs DBIx::Class, Rose::DB::Object, Class::DBI
Source Control Git, Subversion
Graphic Design Photoshop, GIMP


References available upon request.


%d bloggers like this: