Full Stack Database and Web Application Expert
- Full stack software developer with over 19 years experience, specializing in database and web application programming, e-commerce / electronic payments, technical writing, and programming language design.
- Expert / 18+ years in relational databases and SQL (several versions), experienced in PostgreSQL, MySQL, MS SQL Server, Oracle, SQLite, and stored procedures.
- Expert / 18+ years in Perl, experienced in Moose, DBI, DBIx::Class, Dancer, Catalyst, Template::Toolkit, LWP.
- Active in open source and DBMS communities, prolific module developer.
Database Consulting Group (DCG) - Independent Contractor (2015-2017)
Database Consulting Group (http://databaseconsultinggroup.com/) is an American software developer that focuses on building quality data-driven business solutions for businesses small and large. Client industries include financial services, medical records, billing, scheduling, manufacturing, accounting.
- I was the second primary technical architect and developer for the National Pollen Database (NPDB; http://www.nationalpollen.com), a common data repository where collectors can host accurate allergen (pollen and mold) data, allowing researchers, clinicians, and others to perform rigorous analysis on a large scale, and allowing physicians to provide better care for people suffering asthma and other conditions. I took over maintenance of the NPDB from its initial developer, adding major new features and making it more robust. One major added feature was tracking the provenance of the allergen data. Another was generic support for accepting raw data artifacts in a variety of formats (MS Excel workbooks, HTML pages, PDFs, etc) with a variety of methods (email, web servers, file system, etc) and extracting their allergen data (species, count, date, location, etc). The project had 2 main functions, the first being an automated task for importing data, and the second being a REST API for other applications to query the database.
- Added a feature to Asthma Ally (http://www.asthmaally.com). This application was also a consumer of the NPDB.
- Made several enhancements and bug fixes to Dataphor (http://dataphor.org), an open source database-centric application development platform.
- Technologies used: C#/.Net 4.5, Visual Studio 2013 and 2015, SQL Server 2014, Microsoft Azure, Oracle Database 11g, PostgreSQL, Entity Framework 6, S22.Imap, Excel Data Reader, HTML Agility Pack, Visual Basic for Applications, Git, Subversion, JIRA, Dataphor/D4, Windows 8, VMWare Fusion.
ChargeSmart / VeriFone / TIO Networks - Senior Software Design Engineer (2011-2014)
ChargeSmart (http://www.chargesmart.com/) is a web-based e-commerce business allowing credit card funded bill payments to be made easily over the internet to utilities or other billers that otherwise don't support them. ChargeSmart was a startup, then was owned by VeriFone, and then by TIO Networks.
- I was the third core member of a software developer team of 8+ responsible for chargesmart.com, a bill payment website with thousands of daily transactions and a million-plus users. Became primary maintainer after 6 months when prior developers moved to new projects.
- Made regular engineering contributions to chargesmart.com, in design, coding, documentation, reviews, testing, and reporting.
- Created new features and enhancements, including payment processor migration, AMEX support, admin reports, backup procedures, related partner sites, and more.
- Gained considerable knowledge and experience about the payments industry and card processing including risk management.
- Primary release manager of chargesmart.com for over a year, performing production releases, including QA and review of code commits, code releases, schema changes, and release announcements.
- Designed and implemented the PostgreSQL database for a payment site built over VeriFone's SAIL micro-merchant service.
- Mentored co-workers in various aspects of chargesmart.com and related projects, providing initial training, and writing process and procedure documentation.
Traveller's Inn (TI) - Web Developer (2006-2009)
Traveller's Inn was a chain of about 10 hotels around Victoria, BC.
- I was primary technical architect and developer for multiple complex web applications, reporting directly to TI's webmaster and later, directly to the TI's owner. Collaborated in development with the webmaster and other staff, who mainly handled the visual design work while I handled mainly architectural design and implementation. All applications were MVC, were Unicode-savvy, used CSS, and were widely browser-compatible; they all ran on a Linux environment using Apache 2 and Plesk.
- The largest project is HotelsMotels.com (HM), a worldwide directory of businesses that would be of interest to travellers, with coverage for at least 30,000 distinct locations. For listed hotels, visitors can check room availability directly from the HM site using an affiliate network, and then book available rooms. Rewrote HotelsMotels.com from a mostly static site with some PHP to a dynamic Perl plus MySQL database-backed site with a lot of additional features. Added full searching capabilities. Added facility for staff to manage the new website. Added facility for visitors to submit businesses to the directory, or to leave business reviews, and for a staff member to approve those additions. Project involved both up-front ETL from legacy directory (MS Access), and recurring ETL from affiliate network.
- Another feature project is BidOnStay.com (BoS), which let visitors book hotel rooms at the Traveller's Inn, for any available hotel or time period, by "bidding" with a desired price per night; if over a hidden threshold, they can then book the room for that price. Created BidOnStay.com as a new project, in Perl. BoS talked to the affiliate network directly behind the scenes, being a front for it, and used no local database of its own.
- Created new project VictoriaAttractions.com, in Perl.
- Worked on various other projects, some of which involved data mining or ETL.
Anthony Macauley Associates (AMA) - Application Developer (2000-2003)
Anthony Macauley Associates (http://www.gx.ca/) is a Canadian software developer that creates and implements product solutions designed for the needs of departments and agencies at all levels of government.
- I was one of the team members programming AMA's flagship product GX (a government-level financial management system) using Oracle 8, FoxPro 5, Crystal Reports. Involvement had some focus on the portions dealing with Crystal Reports.
- I was one of the main developers that maintained AMA's QA/ticket-management system, which was a FoxPro 6 application.
- I wrote programmer and user documentation. Performed system testing and QA procedures. Became learned in various government financial processes.
British Columbia Buildings Corporation (BCBC) - Intranet Developer (1999)
British Columbia Buildings Corporation (was http://www.bcbc.bc.ca/) is a government agency that manages public lands and properties. Note that BCBC was renamed to Accommodation and Real Estate Services (ARES; http://www.accommodationandrealestate.gov.bc.ca/), part of Shared Services BC.
- Deployed and maintained the corporate Intranet using IIS, SQL Server ASP (VBScript), Perl, CSS.
- Rewrote a small message-board web application, in Perl.
- Some troubleshooting and user assistance.
- 2015-2016 : A contract project using Perl 5, NGINX, nginx-rtmp-module, MySQL 5, Redis, Ubuntu, Starman, Dancer, Moose, DBI, DBIx::Class, and Perl modules for talking to various network service APIs such as email, social networks, and image processing. This work mainly concerned adding features and fixes to a Perl application created by a previous developer. This had 2 main parts; the first part provided a REST API for user accounts, contacts, and shared events, consumed by Android/iOS applications to facilitate media sharing; the second part provided background workers for asynchronous tasks, assigned via Redis queue. This work also concerned setting up and helping test the NGINX-based Media Streaming Server.
- 2010 : A contract project using PostgreSQL 9.0, Apache 2.2 with FastCGI, Perl 5.12, and Perl modules such as Catalyst 5.8, Template::Toolkit 2, DBI, Moose, and LWP. This involved building from source and administering said tools, in a mirrored development (Mac OS X) and production (CentOS) environment, as well as creating multiple OS and DBMS users and designing for security. The project code had 2 main components which are data processing / ETL daemons (that gathered data from remote sources) and a web application to control and monitor them, all centered around the database. This work incorporated and updated older work by other developers.
- 2003-2006 : Various smaller contracts for multiple clients: mostly PHP and MySQL.
- 1998-2001 : Camosun College (http://www.camosun.ca/): tutored groups (of 10-20) and individuals of first year students in programming Perl and assisting them in understanding various lab assignments.
- May 1999 : Victoria Immigrant and Refugee Centre Society (http://www.vircs.bc.ca/): converted print (PageMaker) publication "Voices" into HTML format using text, image editors, Perl.
- August 1998 : Pacific Forestry Centre (http://www.nrcan.gc.ca/forests/research-centres/pfc/13489): wrote Perl scripts to convert data about forest pests from a Windows 3.1 CD to the format used by a new web-based program.
- 1996-1997 : Columbia Bible College (Abbotsford, BC; http://www.columbiabc.edu/): member of 3-person Computer Committee: managed student computer lab having 4-6 Windows 3.1 PCs plus a laser printer; assisted students with their own computers; tasks included setup, maintenance, troubleshooting, training; transcribed student documents.
- Summer, 1996 : Institute of Ocean Sciences (http://www.pac.dfo-mpo.gc.ca/science/facilities-installations/ios-ism/index-eng.htm): wrote a Pascal program to convert river temperature sensor data between formats; created a web image map and another web page.
- 1995-2017 : Fruit Trees and More (http://www.FruitTreesAndMore.com/): designed and built relational databases for inventory and orders using FileMaker Pro; setup web site; managed office computers and network; other support and training.
- 1992-2017 : Various technical support activities for multiple users, both in person and by telephone or email, including installation and maintenance of computers, networks, and software; provided training to individuals and groups; performed data entry and office assistance; both MS Windows and Macintosh.
Muldis Database Projects (2002-present)
Created a set of new database projects that are intended to bring significant advances to the database software industry in general, in a manner expressing both idealism and pragmatism; they are continuing to be developed under the name of Muldis Data Systems (http://muldis.com/); some have been released CPAN but those are out of date; see GitHub (https://github.com/muldis) for the latest versions.
- Muldis D - Formal specification of a truly/object relational DBMS programming language.
- Muldis D Standard - Muldis D Standard Libraries, Self-Hosted Compilers, and Test Suite.
- Muldis DBP - Formal specification of an abstract database protocol for Perl 6.
- Muldis DBP - Formal specification of an abstract database protocol for Perl 5.
- Muldis::D::Ref_Eng - Reference Implementation of Muldis D Over Perl 6.
- Muldis::D::Ref_Eng - Reference Implementation of Muldis D Over Perl 5.
- Muldis.D.Ref_Eng - Reference Implementation of Muldis D Over C#.
- Muldis D Manual - Muldis D language and implementations manual.
- Set::Relation - A relation data type for Perl 5 - usable now.
Other Perl Modules (1999-2006)
Created a number of other Perl 5 modules that are not concerned with databases, but mostly with web applications, and are all released on CPAN (http://search.cpan.org/~duncand/); they are all functional now but there are currently no plans to develop them further.
- CGI::Portable - Data-driven web application development framework.
- HTML::FormTemplate - Data-driven HTML form and report generator.
- Locale::KeyedText - Refer to user messages in programs by keys.
- File::VirtualPath - Portable abstraction of a file/dir/url path.
- HTML::EasyTags - Make well-formed XHTML or HTML 4 tags, lists.
- Data::MultiValuedHash - Hash whose keys have multiple ordered values.
- CGI::MultiValuedHash - Store and manipulate url-encoded data.
- Class::ParamParser - Provides complex parameter list parsing.
Perl and Database Communities (2000-present)
Active and vocal in the worldwide Perl community for years, with 100+ individuals, and in some database communities to a lesser extent, in many ways besides having created modules on CPAN.
- 2009 - present : Co-maintainer of the DBD::SQLite (http://search.cpan.org/dist/DBD-SQLite/) Perl module on CPAN.
- 2010 - present : Contributor to the Catalyst (http://www.catalystframework.org/) Perl web framework on CPAN.
- 2005 - present : Frequent involvement in the central Perl 6 programming language design discussions, mainly on the perl6-language email forum (http://dev.perl.org/perl6/lists/), and also made some edits to the official Perl 6 language specification (http://perlcabal.org/syn/).
- 2005 - present : Regular involvement in the Perl 6 implementation efforts, mainly by writing Perl 6 code for their common test suite.
- 2000 - present : Testing and reporting bugs, and contributing suggestions, for the Perl 5 implementation, Parrot, Pugs, Rakudo, and various CPAN modules such as DBI and Moose.
- 2003 - present : Regular involvement in the SQLite (http://sqlite.org/) Users email forum, both assisting users with SQL questions and contributing design suggestions (some were implemented) or bug reports to SQLite itself.
- 2008 - present : Participated in the Google Summer of Code 2008, 2009, 2010 (http://code.google.com/soc/) as a mentor under The Perl Foundation (http://www.perlfoundation.org/), so far mainly by submitting feedback on student project proposals.
Presentations, Papers, and Recognitions
- 2010.07 : Recognized by name in the book "Database Explorations: Essays on The Third Manifesto and Related Topics" (Trafford; ISBN: 9781426937231), by prominent authors C.J. Date and Hugh Darwen; see http://bookstore.trafford.com/Products/SKU-000177853/Database-Explorations.aspx, especially chapter 26.
- 2008.07.23 : O'Reilly Open Source Convention 2008 (OSCON; Portland, OR; http://en.oreilly.com/oscon2008): "Muldis D: Portable Databases at Full Power" (http://en.oreilly.com/oscon2008/public/schedule/detail/2700) - see "Muldis D Manual" on CPAN for the presentation slides.
- 2008.07.20 : PDXPUG/PostgreSQL Day (Portland, OR; was http://pugs.postgresql.org/node/374): earlier version of same talk as for OSCON 2008.
- 2006 - present : Recreational Computer Science Society (Victoria, BC; http://groups.google.com/group/reccompsci); giving a few presentations or discussions (to 6-10 people) concerning databases or Perl.
- 2002 - present : Victoria Perl Mongers (Victoria, BC; http://victoria.pm.org/): managing the group web site, giving a couple of presentations or discussions (to 6-10 people) on Perl-related topics like using databases or XML, and improving reusable modules with good practices suitable for CPAN release.
- 2000 - 2002 : Victoria Macintosh Users Group (Victoria, BC; http://www.vmug.bc.ca/): giving a live tutorial/presentation on designing and implementing a genealogy relational database at the June 2002 monthly meeting (to 150 people), wrote several feature tutorials for the monthly MACtalk publication, including: creating relational databases with FileMaker Pro (3 parts), designing a genealogy database, getting an internet domain name, setting up Eudora filters, and several smaller articles.
- Camosun College (Victoria, BC; http://www.camosun.ca/), 1997-2001: Computer Systems Technology (Co-op designation), Software Engineering, Computer Programming.
- The Reger Group (Victoria, BC; http://www.regergroup.com/), July 2003: "Independent Employment: An Introduction to Entrepreneurship".
- Attended multiple technical conferences.
Significant or Expert Task Skills or Experience
- Requirements gathering / system analysis
- User interface design / ease of use
- Data definition / data modeling
- Technical architecture
- Technical Writing
- Testing / QA, both unit and integration
- Scalability, Distributed Systems
- Optimization for speed, memory use, etc
- Portability across platforms and browsers
- Agile Methodologies
- Supporting / Training
- MVC design pattern
- Multi-tier architecture
- Client-server architecture
- Service-oriented architecture (SOA)
- Relational databases
- Extract, transform, and load (ETL)
- Online transaction processing (OLTP)
- Electronic Payments
- Financial Databases
- Web applications
- Web services
- IaaS, PaaS, SaaS
- Desktop GUI applications
- Command-line applications
- 2D and 3D graphics
- Search-engine optimization
- Affiliate networks
- Programming language design and implementation
Programming Languages and Markup
- SQL - ANSI/ISO and vendor flavors, PL/SQL, PL/PgSQL
- Perl 5, Perl 6, Perl POD
- C#, .Net Framework 4.5, .Net Core
- PHP 4, 5
- HTML/XHTML, XML, XSLT
- regular expressions
- Unix command line, shell scripts
- C, C++
- FoxPro 5, 6
- VBScript/ASP, Visual Basic
- Turbo Pascal (Mac OS)
- D4 (Dataphor)
- MASM (assembly)
- OpenGL, Lisp (Scheme), Haskell, POV-Ray
- Python, Ruby, Objective C, various Parrot low-level languages, Rakudo, Tutorial D, not-SQL relational algebra
Database Management Systems, Related Tools
- MS SQL Server
- FoxPro built-in DBMS
- FileMaker Pro
- MS Access
- ODBC / JDBC
- MS SQL Server Management Studio, Oracle SQLDeveloper, MySQL Workbench, pgAdmin3, SQL Plus, Golden, Oracle Developer and Designer, ERwin, phpPgAdmin, phpMyAdmin
- Knowledgeable of various other DBMSs
Version Control Systems, Related Tools
- MS Source Safe
- BBEdit, Beyond Compare, FileMerge
- Trac, RT
- Mac OS X
- Classic Mac OS
- MS Windows
- Linux (various including CentOS, Debian, Ubuntu, Red Hat, Mandrake, Corel)
- Digital UNIX
- MS DOS
- QNX (Real Time)
- Commodore Amiga 3000
- Apple II
Other Server Software, Networks, Data Communications Used
- Apache 1-2, NGINX, IIS, Starman, Perl-based server, Plesk
- REST APIs, FastCGI (external), mod_perl, PSGI, CGI, HTTP proxy
- Stackato / Cloud Foundry, Docker
- telnet, ssh, VNC, http, smtp, s/ftp, rsync, bittorrent, irc
- Puppet, Spacewalk
- Linux, UNIX, Windows NT, Macintosh hosting
- File Sharing with Macintosh and Windows
- LAN (TCP/IP, Ethernet, 80211, AppleTalk, FireWire, USB, Thunderbolt)
- Routers, Firewalls, Hubs, Modems, Null Modems
- Tar and Gzip, Zip, Stuffit suite, MIME, ISO Disk Images, Mac Disk Images
Other Desktop Software Used
- Text editors (BBEdit, TextPad, Pico, Kwrite)
- MS Visual Studio, GCC, Metrowerks Codewarrior
- MS Office (Word, Excel, Access, PowerPoint, FrontPage)
- Web browsers (Safari, Firefox/Mozilla, Chrome, IE, Lynx, Netscape)
- E-mail (Thunderbird, Outlook, Eudora, Pine)
- IRC (Colloquy), MSN/Yahoo/AIM (Adium), Skype, Slack, BitTorrent (Azureus)
- PhotoShop, GraphicConverter, Paint Shop Pro, Gimp, Color It
- Quicktime, iMovie, Toast, iTunes, VLC, MPlayer
- Aldus SuperPaint (vector graphics), PageMaker
- Accounting packages (Quicken, QuickBooks, Simply Accounting)
- Techtool Pro, DiskWarrior, Norton Utilities, Disk Utility
- VMWare, WINE, Parallels, Virtual PC
Other Tasks Performed
- Performed in person and telephone user support for a variety of systems and software.
- Purchased and installed computers, peripherals, and software; installed internal hardware and X10 devices.
- Built various third-party software from source and administered them.
- Performed regular backups, troubleshot a wide range of computer problems.
- Captured and processed digital video with iMovie and Quicktime, exported to CDs, tape, and internet.
- Created various vector-based graphics, processed scanned images for printing and web display.
- Epistemology, databases, archiving, chronologies and timelines, genealogy, data modeling, web application design and programming, helping people use computers, physics, sciences, math, reading.