Project Experience
Loan Service and Loan Web Application – Lending Guru
- Designed and developed a standalone RESTful loan web service. Capabilities included storing loan details, calculating amortization tables, and rendering loan agreements. The service was written in PHP and deployed as Docker containers on AWS’s Fargate.
- Designed and developed a responsive web application as a front-end to the loan web service. The web application was written in PHP, TailwindCSS and Alpine.JS and deployed as Docker containers on AWS’s Fargate.
Web Site – Lending Guru
- Designed and developed a responsive web site for Lending Guru. The web site utilized Jekyll, a static site generator, TailwindCSS and Alpine.JS. The web site was deployed on AWS’s CloudFront.
Service Broker - GOeVisit
- Designed and developed a standalone RESTful web service that facilitated more complex web service orchestration. Capabilities included asynchronous processing, scheduled processing, and publish/subscribe processing. The service was written in PHP.
Google Apps Script Report – Calgary Foothills Soccer Club
- Learned Google Apps Script, and ported an Excel VBA macro to Google Apps Script for the dynamic creation of a report.
Stripe Integration - GOeVisit
- Utilized Stripe’s Elements and Stripe’s PHP library to handle one-off credit card charges and self-managed subscription renewals.
Data Migration - GOeVisit
- Wrote Python scripts to migrate data from a legacy web service. Data was pulled from the legacy service using a web service call, staged in a MySQL database, manipulated and then pushed into 3 new web services (Identity, Visit and Records).
CRM Selection - GOeVisit
- Evaluated client’s requirements and performed an extensive evaluation of commercial CRMs. Eventually settled on Agile CRM primary due to its pricing model and email automation capabilities.
Python Trading System - Onsight Capital
- Learned Python and experimented with 2 open-source backtesting projects: Backtrader and Pyalgotrade. Settled on PyAlgoTrade.
- Built a modern looking, responsive website using MaterializeCSS, Flask and yattag, an internal DSL for HTML generation. Deployed the site on Google Cloud’s App Engine.
Micro-services Architecture - GOeVisit
- Designed and built 4 RESTful APIs: Identity, Visit, Records, Billing
- Technologies included: PHP, MySql, GIT, Vagrant, Ansible, Postman, OpenAPI/Swagger
- Utilized Vagrant to have multiple development environments running Ubuntu.
- Designed and built a distributed security model (authentication and authorization) using JWTs (JSON Web Tokens)
- Designed and built 2 web applications: Backend UI & Portal
VBA Excel Report - Calgary Foothills Soccer Club
- Learned and wrote an Excel VBA macro to generate a report for the treasurer of the team to provide better player account balance reporting.
Home Construction
- Out of necessity, became the defacto general contractor for the construction of my home.
- Designed and verified all aspects of the house: floor plans, electrical, vacuflow, audio/visual/security, lighting, CAD5 wiring, etc.
- Helped project manage the trades.
Full stack Java web application – TrueSmarts
- Designed and built all aspects of TrueSmarts’ web application written in Java and deployed onto Google Cloud’s App Engine.
- Built what is now known as a micro-framework in Java.
- Applied gamification techniques to increase engagement.
- Learned and effectively used Google's BigTable (NoSQL database)
SharePoint Intranet – Teck Resources
- Designed and implemented Teck Coal's new Intranet on SharePoint
Salesforce Integration/CAR Report - BrightSpot Consulting
- Built a Java program to dynamically generate BrightSpot's Consultant Availability Report using SOAP web service calls into SalesForce.
SalesForce Customization - BrightSpot Consulting
- Performed significant Salesforce configurations (custom objects, views and workflows) to support BrightSpot's business processes.
Trading: AmiBroker - Onsight Capital
- Learned and implemented custom technical analysis indicators and trading strategies in Amibroker's Formula Language (AFL).
- Evaluated trading strategies via backtesting.
Customer Premise Equipment – Bell West Inc.
- Scrum Master and developer on Bell West’s Customer Premise Equipment (CPE) web application.
- Introduced Agile methods to the team and utilized iteration planning to help the team get a handle on the complex business requirements that it was wrestling with at the time.
- Learned .NET, C# and the application’s business rules and was productive in less than 3 weeks.
- Provided mentoring and leadership in addition to completely rewriting their automated build scripts.
Service Oriented Architecture – Bell West Inc.
- One of the architecture and development leads in successfully delivering Bell West’s Service Oriented Architecture proof of concept project.
- The proof of concept utilized web services, workflow and XML to reinvent Bell West’s ordering through provisioning transactions.
- Wrote an innovative Java solution to enable the concurrent editing of an XML file.
- The proof of concept made extensive use of storing XML documents in an Oracle database.
- Introduced Macromedia’s Flex as the user interface for the proof of concept, which was largely responsible for the enthusiastic support from business users and upper management.
Enterprise Application Integration – Bell West Inc.
- Led a renewed development effort of Bell West’s Enterprise Application Integration (EAI) team.
- Helped improve the integration between Bell West’s core mission critical systems: Siebel, MetaSolv, and SingleView.
- Introduced Agile methods to the project
- Completely rewrote their build scripts to reduce build and deployment time of the integration solution from 8 hours to 20 minutes.
- Re-architected the entire integration solution, and utilized Vitria in a manner in which it was meant to be used.
- Introduced an event failure and reintroduction solution.
- Helped staff the team’s growth
- Provided a detailed understanding of MetaSolv’s undocumented Java/CORBA API that was previously discounted due to its complexity and failed attempts in the past.
Messaging middleware for Web Services – ThoughtWorks Inc.
- Provided architectural, technical, and team leadership in the creation of a “messaging service” that was able to accept SOAP messages over HTTP and provide guaranteed delivery for point-to-point and publish/subscribe messaging.
- The “messaging service” was the first of its kind to provide advanced messaging support for clients of web services.
- Under the covers, the “messaging service” utilized existing implementations of a Java Message Service (SonicMQ, IPlanetMQ or JBossMQ) to achieve interoperability with non-web service enabled applications.
- Coordinated with Sun Microsystems and Sonic Software in an attempt to influence their message queue product’s direction.
- Developed a web application as a side project to manage the team’s work load during sprints (iterations).
- Agile software development practices such as sprints (iterations), pair programming, unit tests, and continuous integration were paramount to the team’s success.
Web Service enabled infrastructure – ThoughtWorks Inc.
- Lead a team of developers in the construction and deployment of web service enabled infrastructure services for TransCanada PipeLines.
- A great deal of “thought” leadership was required to successfully complete the project as web services were at their infancy at this stage.
- Developed web services included:
- Distribution Service – enterprise-wide service to distribute messages and events to individuals or groups within the company. The Distribution Service calls upon the Delivery and Directory services.
- Delivery Service – enterprise-wide service to handle the low level details of delivering messages via email, pager and fax.
- Directory Service – enterprise-wide service to provide a web services facade to the corporate LDAP directory.
- The “bleeding edge” web services project was largely successful due to the introduction and use of agile methodologies (XP & Scrum).
- The project team had to manage the risks associated with immature specifications and implementations (SOAP, WSDL, UDDI), and changing team members.
- Extensive unit and functional tests (JUnit) were created.
- Pair programming was instrumental in informing and educating the development team.
- Automated builds and continuous integration was accomplished through the team’s use of CruiseControl, ANT, and JUnit.
Commercialization of Java application framework, Jaydoh – Servidium Inc.
- Responsibilities included the management of ongoing strategy, ongoing development, ongoing technical writing, creation of marketing materials, and product licensing.
- Displayed and staffed a booth at JavaOne, San Francisco, 2000.
Co-authored 3 patents – Servidium Inc.
- 78746-3 Methods, Techniques, Software and Systems for Rendering Multiple Sources of Input into a Single Output (Polymorphic inheritance-based template mechanism).
- 78746-5 Distributed Object Oriented Structure Server Abstraction Technique, Software, Objects and Methods (EJB server abstraction layer).
- 78746-7 Protocol Independent Service Handler Techniques, Software, Data Structures, Methods and Systems (Front controller).
Java servlet services framework – Servidium Inc.
- Developed a framework to free server-side applications from individually implementing functionality such as security, session management, caching, traffic profiling, and load balancing.
- Interfaces combined with design patterns allowed for a highly extensible and flexible framework.
- An object-based representation of HTML was supported which enables highly customizable and flexible HTML generation.
- Any valid implementation of the security module interface can be dynamically loaded at runtime.
- This framework was a key component in TransCanada PipeLines’ single logon and security model.
Database services framework in Java – Servidium Inc.
- The framework eased the effort required to develop applications that involved relational database connectivity and relational to object mapping.
- Utilizing the framework, database tables were represented as Java objects with corresponding meta data.
- Features of the implementation included true database independence, automatic SQL generation (select, insert, update, and delete), and connection pooling.
Servidium Inc. – September 1999
- Co-founder and Chief Technology Officer of Servidium Inc.
- Servidium specialized in the design, development, and integration of e-business applications using Java, XML, and advanced Internet technologies.
- Servidium was nominated for the Calgary Chamber of Commerce’s Emerging Enterprise of the Year award.
Java presentation – S.I.Systems Ltd.
- Invited to create and conduct a presentation on Java concepts and the future direction of Java (Feb 1999).
LDAP authentication bean - TransCanada PipeLines Limited
- Developed a Java bean that utilized Java’s Naming and Directory Interface to encapsulate the complexities of connecting to and interacting with an LDAP server.
- The component provided a simple API to authenticate users against an LDAP server.
Java database connectivity bean - TransCanada PipeLines Limited
- Developed a Java bean to encapsulate database access.
- The component provided a simple API to configure and interact with a database server.
JavaScript/Java JDBC applet - TransCanada PipeLines Limited
- Developed an applet to provide database access to developers via JavaScript.
- JavaScript was used to configure and interact with the applet, as well as for retrieving and displaying the results via dynamic HTML.
- The applet utilized Netscape’s privilege manager and object signing tools to allow the applet to connect to any database on the network.
- The applet replaced the use of Netscape’s server-side extensions to obtain web server independence.
- Java, JavaScript, and HTML were successfully integrated to create a thin-client system back-up monitor and configuration tool that was accessible company wide.
Calgary Java Seminar 1998
- Developed a graphical game-style Java applet with a colleague that was showcased at Calgary’s Java Seminar ’98 (May 1998).
- The applet was used to visually demonstrate the production and consumption of report jobs in an RMI-based distributed reporting engine.
- The multi-threaded applet consisted of an animated frog, animated flies, and animated cloud sprites with a real-time reflective water effect.
- Sounds were optionally played and triggered by events such as the creation of a report job and the consumption of a report job.
Java and object-oriented design patterns presentation – University of Calgary
- Invited to lecture to the University of Calgary’s object-oriented software technology class on Java and object-oriented design patterns (Feb. 1998).
Object-oriented design and development presentation – Calgary Java Users Group
- Created and conducted a presentation with a colleague for the Calgary Java Users Group (Nov. 1997).
- Topics included object-oriented design techniques and strategies for developing commercial Java applications.
Onsight Systems Inc. – August 1997
- Founded Onsight Systems to pursue software development consulting opportunities.
Defect tracking system written in Java - NrG Information Services Inc.
- Developed a multi-threaded client/server Java application for tracking defects in NrG's software products:
- Assessed NrG's existing "Defect Tracking System" developed in Microsoft Access.
- Designed a new user interface through the iteration of five successive prototypes, evolving each prototype upon receiving user feedback.
- Performed the detailed design and composed detailed design documentation.
- Created and managed project estimates.
- Designed and developed the database tables, constraints, and stored procedures.
- Developed the required components and assembled the system.
- Tested and fixed outstanding defects.
- Deployed the applet/application for testing on NrG’s Intranet.
- Began development with JDK1.0.2 and completed with JDK1.1.3.
- Designed the system to run as either an applet or as an application.
- Made extensive use of design patterns such as: Model/View/Controller, Command, Strategy, Singleton, and Visitor.
- Developed a generic class launcher that allows dynamic loading of classes based upon user preferences. This allows users the ability to select which part of the application they want loaded first.
- Developed an extensive component library, including a double-buffered graphical state-selector, a searchable combo box, and an exit manager.
- Mapped Java objects into Sybase's relational DBMS.
- Utilized Java's database connectivity API and Sybase's jConnect to connect to the defect tracking database.
- Managed reporting via Java servlets and Java native methods to access Crystal Reports' reporting engine.
- Made extensive use of ObjectSpaces’ Java Generic Library (JGL).
- Created HTML documentation throughout the project.
Java presentation applet - Calgary Java Users Group
- Developed a Java applet to view Microsoft’s PowerPoint presentations in a web browser.
- Enhanced the presentations by front-ending them with a game, graphics and interactive features.
- The game was designed to distract users while loading and preparing large presentations.
- A simplified flocking algorithm (boids) was developed to allow individual sprites to move chaotically yet steer towards the average heading of a group of sprites, eventually locking them into a static pattern.
- The game animated over 160 sprites per frame.
Real time table applet written in Java - Valmet Automation
- Presented data from Valmet's real time database in a tabular fashion for viewing within a web browser.
- Required the development of a multi-threaded Java server for database connectivity.
- Database connectivity was achieved through the use of Java native methods and a Win32 dynamic link library.
- Designed the applet with a real time data retrieval thread that periodically queried the server and only performed a graphical update when the data had changed.