Last updated 2011 February 20
Darren Duncan
Database and Web Application Expert
Contact
About
- Database/web developer, technical writer, programming language designer.
- 12+ years application development, mostly in web applications, and mostly MVC.
- 12+ years experience with relational databases and SQL, including Oracle, PostgreSQL, MySQL, SQLite, and MS SQL Server.
- 12+ years Perl experience, with extensive DBI, plus Moose, Catalyst, Template::Toolkit, LWP, with PostgreSQL, MySQL, SQLite.
- 6+ years PHP experience, mainly with MySQL or Oracle.
- Active in the Perl and DBMS communities, prolific module developer (http://search.cpan.org/~duncand/).
Work Experience
Traveller's Inn (TI) - Web Application Developer (2006-2009)
Traveller's Inn (http://www.travellersinn.com/) is a chain of about 10 hotels around Victoria, BC.
- 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 to a dynamic database-backed site with a lot of additional features.
- The original static HM comprised about 1120 distinct websites with their own location-specific domain names; the rewrite used just 1 website to serve all of those domain names, leading to greatly reduced maintenance costs and complexity.
- Added full searching capabilities.
- Created a PHP program to automatically import the old directory.
- Added facility for staff to manage the new website, and automatically scan for broken links.
- Added facility for visitors to submit businesses to the directory, or to leave business reviews, and for a staff member to approve those additions.
- Multiple updates to aid search-engine optimization.
- Rewritten HM used MySQL 5.0 with its InnoDB engine.
- The initial HM rewrite was done in PHP, over a few months including the importer, attaining many of the above features. Then the website PHP was translated to working Perl in just 3 days, in order to gain Unicode savviness and reduce the costs of further development and maintenance. The remaining features were added in Perl over another few months.
- 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 the only version of BidOnStay.com, 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 the only version of 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.amavi.com/) is a Canadian software developer that creates and implements product solutions designed for the needs of departments and agencies at all levels of government.
- One of the 4 initial/core members of a team of 20+ that created the new product GOL/GTools (a comprehensive fully database-defined web application development tool), which is MVC and used Oracle 8, XML, XSLT, CSS, PHP 4, server-side JavaScript, client-side JavaScript, .NET.
- Was the initial and primary developer of the PHP portion of the project, which took several months. This portion was mainly concerned with doing all the read-only interaction with the Oracle database, including gathering all the meta-data to build the web user interface, and fetching all the data records to display, both browsed and searched. The PHP portion output everything as XML, which was used by the XSLT to render the page HTML. The PHP portion initially was replacing mod_plsql, a proprietary static and inflexible set of SQL-in-XML file-configured database-access server, and the switch led to speed and complexity/cost savings to the project, and other-DBMS compatibility.
- Wrote large portions of the XSLT and both JavaScript portions of the project, and some CSS. The server-side JavaScript portion was the glue between all the other parts, and it did the writing interaction with the database.
- 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.
- One of the main developers that maintained AMA's QA/ticket-management system, which was a FoxPro 6 application.
- Wrote programmer and user documentation.
- Performed system testing and QA procedures.
- Became learned in various government financial processes.
British Columbia Buildings Corporation (BCBC) - Programmer (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.
Miscellaneous
- 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://cfs.nrcan.gc.ca/regions/pfc): 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 - 2010 : 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 - 2010 : 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.
Open Source
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://www.muldis.com/) and are all released on CPAN.
- Muldis D - Formal specification of a truly/object relational DBMS programming language.
- Muldis D Manual - Muldis D language and implementations manual.
- Muldis Rosetta - A full-featured truly/object relational DBMS in Perl.
- Set::Relation - A relation data type for Perl.
Also now creating a native version of Set::Relation for the Python language, as well as one for the Ruby language.
Other Perl Modules (1999-2006)
Created a number of other Perl 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://www.trafford.com/Bookstore/BookDetail.aspx?BookId=SKU-000177853, 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; 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.
Educational History
Personal Skills
- Excellent verbal and written communications skills; skilled organizer; hard working; rich vocabulary.
- Fair interpersonal skills; enjoys helping people; polite, gentle, honest, cooperative.
- Able to work effectively with a group or independently.
- Excellent verbal knowledge/reasoning, arithmetic, computational, and written comprehension abilities.
- Good problem solving skills, auditory learning and recall of information, spatial reasoning and working memory.
Technical Skills
Significant or Expert Task Skills or Experience
- Requirements gathering / system analysis
- User interface design / ease of use
- Data definition / data modeling
- Technical architecture
- Coding
- Technical Writing
- Documenting
- Testing / QA, both unit and integration
- Maintainability
- Scalability
- Optimization for speed, memory use, etc
- Debugging
- Portability across platforms and browsers
- Security
- Privacy
- Supporting / Training
- MVC design pattern
- Multi-tier architecture
- Client-server architecture
- Relational databases
- Extract, transform, and load (ETL)
- Online transaction processing (OLTP)
- Web applications
- Web services
- Desktop GUI applications
- Command-line applications
- 2D and 3D graphics
- Search-engine optimization
- Affiliate networks
- Programming language design and implementation
Programming Languages and Markup
- Perl (5, 6) : 12+ years : 6000+ hours usage, plus study
- Perl POD : 11+ years : 4000+ hours usage
- SQL (several flavors) : 12+ years : 2000+ hours usage, plus extensive study of both the ANSI/ISO standards and vendor flavors
- HTML/XHTML (hand-written) : 14+ years : 2000+ hours usage
- PHP (4, 5) : 6+ years : 1500+ hours usage
- regular expressions : 11+ years : 500+ hours usage, plus study
- JavaScript/ASP : 2+ years : 1000+ hours usage
- FoxPro (5, 6) : 3+ years : 700+ hours usage
- Turbo Pascal (Mac OS) : 3+ years : 400+ hours usage
- XSLT : 2+ years : 400+ hours usage
- other XML : 2+ years : 400+ hours usage
- Unix command line, shell scripts : 13+ years : 400+ hours usage
- CSS : 10+ years : 200+ hours usage
- client-side JavaScript : 3+ years : 200+ hours usage
- Java : 2+ years : 200+ hours usage
- C / C++ : 2+ years : 200+ hours usage
- VBScript/ASP : 1 year : 100+ hours usage
- MASM (assembly) : 2 years : 50+ hours usage
- OpenGL : 1 year : 50+ hours usage
- Visual Basic : 1 year : 20+ hours usage
- Python (2, 3) : now using to make a new project
- Ruby : now using to make a new project
- Minor use of: Lisp (Scheme), Haskell, POV-Ray
- Knowledgeable of / studied but haven't used: .Net/C#, various Parrot low-level languages, Tutorial D, not-SQL relational algebra
Database Management Systems, Related Tools
- Oracle (8, *) : 5+ years : 1000+ hours usage, plus study
- PostgreSQL (9.0, 8.4) : 6+ years : 200+ hours usage, plus study
- MySQL (3.23, 4.1, 5.0) : 8+ years : 1000+ hours usage, plus study
- SQLite (3) : 6+ years : 20+ hours usage, plus study
- MS SQL Server : 5+ years : 50+ hours usage
- FoxPro built-in DBMS : 2+ years : 30+ hours usage
- FileMaker Pro (4.1, 5.5) : 10+ years : 100+ hours usage
- MS Access : 50+ hours usage
- mod_plsql : 50+ hours usage
- ODBC / JDBC : have used, knowledgeable of
- Knowledgeable of various other DBMSs
- Experienced with: SQL Plus, Golden, Oracle Developer and Designer, ERwin, pgAdmin3, phpPgAdmin, phpMyAdmin
Version Control Systems, Related Tools
- in general : 10+ years
- Git : 3+ years
- Subversion : 5+ years
- CVS : 2+ years
- tlib : 2+ years
- MS Source Safe : 1 year
- Extensive use of BBEdit's document compare feature
- Experienced with: Beyond Compare, FileMerge
Operating Systems
- Mac OS X (10.0 - 10.6) : 10+ years : 10,000+ hours usage, plus study
- Classic Mac OS (1, 5 - 9.2) : 12+ years : 10,000+ hours usage, plus study
- MS Windows (XP, 2000, NT 4, '95/'98, 3.1) : 15+ years : 6000+ hours usage
- Linux (various including CentOS, Red Hat, Mandrake, Corel) : 10+ years : 600+ hours usage, plus study
- Digital UNIX (5.6) : 3+ years : 50+ hours
- MS DOS (6.21 - '95) : 100+ hours
- QNX (Real Time) : 30+ hours
- Commodore Amiga 3000 : 50+ hours
- Apple II : 50+ hours
Other Server Software, Networks, Data Communications Used
- Apache 1-2, IIS, Perl-based server, Plesk
- FastCGI (external), mod_perl, CGI, HTTP proxy
- telnet, ssh, VNC, http, smtp, s/ftp, bittorrent, irc
- Linux, UNIX, Windows NT, Macintosh hosting
- File Sharing with Macintosh and Windows
- LAN (TCP/IP, Ethernet, 80211, AppleTalk, FireWire, USB)
- Routers, Firewalls, Hubs, Modems, Null Modems
- Tar and Gzip, Stuffit suite, WinZip, MIME, Disk Copy
Other Desktop Software Used
- Text editors (BBEdit, TextPad, Pico, Kwrite)
- GCC, Metrowerks Codewarrior, MS Visual Studio
- MS Office (Word, Excel, Access, PowerPoint, FrontPage; '95-2004), older MS Word (5.1 for Mac, 1.0 for Windows)
- ClarisWorks 2,4,6
- Web browsers (Safari, Firefox/Mozilla, IE 4-5, Lynx, Netscape 1-4)
- E-mail (Thunderbird 2, Eudora 3-6, Pine, Outlook)
- IRC (Colloquy), MSN/Yahoo/AIM (Adium), BitTorrent (Azureus)
- PhotoShop, GraphicConverter, Paint Shop Pro, Gimp, Color It
- Quicktime, iMovie, Toast, iTunes, VLC, MPlayer
- Aldus SuperPaint (vector graphics), PageMaker
- Accounting packages (Quicken, Simply Accounting, QuickBooks, MYOB)
- Techtool Pro, DiskWarrior, Norton Utilities
- 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.
Personal Interests
- Epistemology, archiving, chronologies and timelines, genealogy, data modeling, web application design and programming, databases, helping people use computers, physics, sciences, math, reading.
Personal References
This site was created and is maintained for personal use by
Darren Duncan. All content and source
code was created by me, unless otherwise stated.