Full Stack Database and Web Application Expert
- Full stack software developer with over 21 years experience, specializing in database and web application programming, e-commerce / electronic payments, technical writing, and programming language design.
- Expert / 20+ years in relational databases and SQL (several versions), experienced in PostgreSQL, MySQL, MS SQL Server, Oracle, SQLite, and stored procedures.
- Expert / 20+ years in Perl, experienced in Moose, DBI, DBIx::Class, Dancer, Catalyst, Template::Toolkit, LWP.
- Active in open source and DBMS communities, prolific module developer.
Benevity - Software Developer (2018.04-present)
HarmonIQ Health Systems Corporation - Independent Contractor (2015.02-2018.03)
HarmonIQ Health Systems Corporation (http://harmoniqhealth.com) is an American software developer that delivers comprehensive solutions for health care quality, access, and outcomes through clinical workflow and analytics tools. Previously Database Consulting Group (http://databaseconsultinggroup.com).
- I was the second main developer for the National Pollen Database (NPDB; nee http://www.nationalpollen.com), where collectors host accurate pollen and mold data so physicians and others can better care for people suffering asthma etc. I added major features, such as tracking provenance of allergen data, generic support for importing multiple formats (MS Excel, HTML, PDFs, etc) with various methods (email, web servers, file system, etc) and extracting their data (species, count, date, location, etc). NPDB had 2 main parts, first being an automated task for importing data, and second being a REST API for other apps to query the database.
- Added a feature to Asthma Ally (nee http://www.asthmaally.com).
- Made several enhancements and bug fixes to Dataphor (http://dataphor.org), an open source database-centric application development platform.
- Contributed to a large medical data migration project, featuring the documentation and implementation of HL7 Message output.
- Regular contributions to the HL7 Clinical Quality Language (CQL) standard (https://github.com/cqframework) and ELM, open source reference implementation (https://github.com/DBCG), example CQL libraries/measures, testing, and user documentation, FHIR and QDM.
- Gained considerable knowledge and experience about medical industry standards and proper handling of Protected Health Information (PHI).
- Worked using formal Scrum processes.
- Technologies used: .NET/C#/VB, Java, Visual Studio 2013-2017 and Mac, SQL Server 2014-2016, IntelliJ IDEA, Postman, Microsoft Azure, Oracle Database 11g, PostgreSQL, HL7 Messages, CQL and ELM, UCUM, Entity Framework 6, S22.Imap, Excel Data Reader, HTML Agility Pack, Visual Basic for Applications, Gradle, Maven, TestNG, Git, Subversion, JIRA, Confluence, Dataphor/D4, CQL Ruler/Runner, Windows 8, Windows Server on AWS, VMWare Fusion.
- Certifications obtained: HIPAA Awareness, HIPAA Security.
ChargeSmart / VeriFone / TIO Networks - Senior Software Design Engineer (2011.02-2014.10)
ChargeSmart (nee 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 (then by PayPal).
- 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.03-2009.07)
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.09-2003.05)
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.08-1999.12)
British Columbia Buildings Corporation (nee 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.09-2016.08 : 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.
- 1999.05 : Victoria Immigrant and Refugee Centre Society (http://www.vircs.bc.ca): converted print (PageMaker) publication "Voices" into HTML format using text, image editors, Perl.
- 1998.08 : 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.
- 1996 Summer : 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-Present : 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-Present : 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); see GitHub (https://github.com/muldis) for the latest versions.
- Muldis Object Notation (MUON) - Source code and data interchange format.
- Muldis Database Protocol (MDBP) - Abstract library API for database engines.
- Muldis Data Language (Muldis D) - Relational database application programming language.
- Muldis Content Predicate (MCP) - Format for source code metadata.
- Muldis.D.Ref_Eng - Reference Implementation of Muldis D Over .NET.
- Muldis::D::Ref_Eng - Reference Implementation of Muldis D Over Perl 6.
- Muldis::D::Ref_Eng - Reference Implementation of Muldis D Over Perl 5.
- 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.
- 2005-Present : Regular contributions to the central Perl 6 (https://perl6.org) programming language design and implementation efforts, including discussions on the perl6-language email forum, making edits to the official Perl 6 language specification, writing Perl 6 code for the common test suite, testing Pugs and Rakudo.
- 2000-Present : Regular contributions to (Pumpkin) Perl 5 (https://www.perl.org), testing and reporting bugs, making suggestions, for the Perl 5 implementation, and various CPAN modules/frameworks such as DBI, Moose, and Catalyst.
- 2009-Present : Co-maintainer of the DBD::SQLite (http://search.cpan.org/dist/DBD-SQLite) Perl module on CPAN.
- 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 (https://summerofcode.withgoogle.com) 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).
- 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-2009 : 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-2013 : 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), 2003.07: "Independent Employment: An Introduction to Entrepreneurship".
- Certifications obtained: HIPAA Awareness, HIPAA Security (2017).
- 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 and Scrum
- 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
- Medical Databases
- Protected Health Information (PHI) and HIPPA
- 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, TSQL, PL/SQL, PL/PgSQL
- Perl Pumpkin/5, Perl POD
- C#, VB, .NET Framework 4.5, .NET Core
- PHP 4, 5
- Perl Rakudo/6
- HTML/XHTML, XML, XSLT
- regular expressions
- Unix command line, shell scripts
- C, C++
- FoxPro 5, 6
- VBScript/ASP, Visual Basic
- Turbo Pascal (Mac OS)
- HL7 Clinical Quality Language (CQL) and ELM
- HL7 Messages
- D4 (Dataphor)
- MASM (assembly)
- OpenGL, Lisp (Scheme), Haskell, POV-Ray, Logo (turtle graphics)
- Python, Ruby, Objective C, 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, pgAdmin4, 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
- Gradle, Maven
- JIRA, Confluence, Trac, RT
- Puppet, Spacewalk
- Stackato / Cloud Foundry, Docker
- MacOS / 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
- telnet, ssh, VNC, http, smtp, s/ftp, rsync, bittorrent, irc
- 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, IntelliJ IDEA, GCC, Metrowerks Codewarrior
- MS Office (Word, Excel, Access, PowerPoint, FrontPage)
- Web browsers (Safari, Firefox/Mozilla, Chrome, IE, Lynx, Netscape, Postman)
- 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.