Contract Software Engineer
Staples - Identity Management
May 2017 - November 2017
I worked on the Identity Management (IdM) team helping them migrate functionality from their legacy platform (IBM's WebSphere Application Server) to a Microservices architecture for Staples.com using the following technologies and tools:
- Typescript (Node.js, npm)
- Express ("Iris-Lite" - a Staples wrapper built around the Express framework.)
- Apache HTTP Server
- Some Angular 4, Angular CLI
- Jasmine Testing
- Postman - a tool for developing/debugging/testing RESTful web services
- Git and Bitbucket (for source control and code reviews)
- IDEs: WebStorm and STS (Spring Tool Suite)
- Java Microservices (Staples called their microservices platform "Nephos" which was modelled after the Netflix Stack), Spring Boot
- Jenkins (for deployments and CI/CD)
- Hardware: MacBook Pro
My main responsibilities and tasks mostly focused on the middleware layer (using Express and Typescript). The code I wrote was in the Proxy layer between the Angular components and the Java Microservices layer.
I worked with a distributed team located across the U.S., as well as some folks in India. Most of the team members were located in Westminster, Colorado. Not only did I write code, I also performed code reviews, deployments and helped develop some coding style guidelines on the TypeScript side. I am a big advocate of writing maintainable and readable code.
I worked closely with the team of IdM backend Java developers. I helped my team members get up to speed with Typescript, Node and the WebStorm IDE. I was also a strong advocate for Agile development processes (and testing) and consistently encouraged my team to apply more engineering discipline to their everyday development and planning activities.
Software Engineer III
SketchUp - 3D Warehouse
February 2013 - November 2016
Development using a MacBook Pro, PyCharm IDE, and the Chrome web browser for most debugging tasks. Rietveld (for peer code reviews) and JIRA for issue and bug tracking.
Built a Search Results widget that managed all of the searches on the 3D Warehouse website. This widget was responsible for creating all of the backend search calls for the site as well as formatting and displaying search results on the site.
- Different display modes were handled:
- Infinite scroll – scrolling through search results automatically fetched and rendered more results on the page.
- Pagination and Filmstrips.
- AJAX-like calls were supported such that content could be loaded onto the page quickly and without having to reload the entire search results page.
- Various sorting options were also supported.
- Coded for various navigation scenarios such that users could find their previous position in the infinite scroll feed after visiting other pages. Special logic was used to handle web browser back/forward button click events. This made for a simple and intuitive user experience.
Built a Catalog Browser that allowed Building Product Manufactures (BPMs) to quickly search and see what's inside their online catalogs.
- Content loaded dynamically based on user interactions with the widget and depicted a file-like hierarchy tree-view structure of the catalog data.
- Utilized the web browser's local storage caching mechanism such that users didn't lose their place in the catalog when viewing content. Search results were cached and displayed too.
Implemented other cool 3D Warehouse features:
- Advanced search page with dependent drop-downs. See an example of how I implemented this at my website.
- Advanced search operators (originally from Google’s site) - special search keywords which enabled power-users to quickly search for warehouse content.
- SearchBar widget and SearchSaver utility.
- Site Header widget.
- SortBy Drop-down configurator.
- Featured content filmstrips and an admin page to administer content.
- User analytics reporting (Keen and Google) – InputDatePickers, CSV downloads.
- Support for multiple Search Results widgets on a single page – Four (4) different tabs to display a user’s model/collection content and liked content.
- I was one of the initial developers that helped port the 3D Warehouse over from Google’s infrastructure. SketchUp was purchased by Trimble in 2012.
- Internationalization – Wrote string extractor scripts (in Python) which are used to internationalize SketchUp products and the 3D Warehouse.
- Provided mentorship to new hires and junior developers. I enjoy working with others and helping them get up to speed. Anything to help others gives me a sense of accomplishment.
Business Application Developer
October 2008 - January 2013
Supported a Java based e-commerce system called "SoftSlate" which was comprised of Java, JSP, Struts (w/Tiles) and Hibernate. Responsible for maintenance and feature development of this online ordering system: client-side and backend administrator development.
- Supported six (6) production servers and nineteen (19) SoftSlate instances/websites/databases and one (1) "dev" server/database.
- Integrated new SoftSlate instances/builds with Convertis' "Central" server app (a Spring Batch application) which consolidated data from all SoftSlate instances into a single main database.
Note-worthy Convertis projects and feature development:
Admin development for the SoftSlate e-commerce system.
- Full CRUD development – Hibernate queries/mappings
- MySQL scripting and database administration (schema updates) for all SoftSlate instances/stores
Algorithm development of Convertis' Toxic Order Modulator (TOM)
- Random number generator (RNG) approach
- Counting TOM - 1/N approach
- Multiple country dependent-dropdowns using JSON on order forms
- County determination using IP geolocation services
- Modified campaign split-test engine to show proper campaigns/layouts based on incoming country code
- Automatic city/state look-ups (using postal codes) using AJAX
- Email capture campaign - using postal code look-ups
Refactored promotional shipping offer mechanism:
- Cut down campaign and split test maintenance by half
IP address geolocation utilities:
- Maxmind to GeoIO conversion
- GeoIO to NetResults conversion
- Integrated SoftSlate with GeoIO web service
Campaign/Layout development and configuration:
- "IntelliChat" placements - on/off feature
- Video placements - show/hide feature
Network/Affiliate exception processing - TOM and Geolocation
- Run orders through TOM filter based on geographic data
Split-Test development (Campaign selection routines):
- Split incoming traffic by countries, genders, device types
- I-framing issues/support: developed P3P privacy policies
- Supported Symantec and DigiCert installations and maintenance
- Transitioned all websites over to DigiCert SSL certs from Symantec. This saved the company ~$12K in annual operating costs.
- Built internal notification system to help remind me when SSL certs would expire
Build system development using ANT, rsync, ssh, putty, bash
- Refined and streamlined deployment system to support batch store updates/releases
- Streamlined development build tools to expedite development time
- Offered support/training to other developers such that they could deploy their changes when necessary
Light Linux system administration:
- Helped other developers setup their development environments – SSH automatic login configuration, SVN configuration, SoftSlate build/deployment tools
Payment processing/verification, 3rd party integration with
SoftSlate e-commerce system:
- RevGuard (payment filters) integration - web services
- Verifi's "Device Intelligence" integration
Payment Gateway load balancing - algorithm development
- Expanded SoftSlate to use other payment gateways besides Verifi
- Built load-balancing tool to help credit card processing team manage different gateways and transactions
- Credit Card / Payment Gateway API Integrations: Verifi, Authorize.net, Durango, Opus, Rietumu
- Managed deployments and feature/content releases of SoftSlate.
- Refactored and automated entire reporting system for our "network" clients. Networks were organizations and business contacts that generated traffic to the Convertis product websites.
Developed an internal wiki outlining technical processes and
issues: deployments, configuration management, production support,
technical and development insights, etc.
- I was later told that this Wiki was instrumental in helping another developer get up to speed with things and keep things running after I had left the company.
Crispin, Porter + Bogusky
October 2006 - October 2008
Application and web development for Boulder interactive agency for 1.5 years at TextureMedia and then 6 months for Crispin, Porter + Bogusky. TextureMedia was acquired by CP+B circa April 2008.
- Worked closely with interface developers, account managers, tech leads, and other application developers daily in all aspects of the development life-cycle.
- Built web-based administrative tools for numerous client sites. All admins included (in some form) custom database queries, search results configuration and standard CRUD operations.
- Utilized Texture's in-house proprietary Java action-based MVC-like framework called "Slingshot" for web development. Worked in many different versions of Slingshot depending on client needs.
- Integrated Cactus such that Texture web-apps could be "functionally" tested - tested against a database.
- Briefly used JCatapult - an open source Java platform for building web applications, which Texture was developing as a replacement for their Slingshot framework.
- Helped maintenance team adopt JIRA issue tracking system. Helped fine-tune their maintenance team work flow process - bug tracking and feature requests.
TextureMedia Project/Job Details:
- Worked on a team of developers designing and implementing Volkswagen's "Nav Companion" website. This project involved some Google Maps integration as well as saving destinations to a memory card (using the Vcard format). The Vcard destinations could then be used by the navigation systems in a new line of VW cars.
- Designed and implemented a community based voting interface for PENTAX's Online Photo Gallery, www.photogallery.com, as well as a Contest Entry (photo submission) system for the gallery.
- Performed regular maintenance programming and updates for numerous PENTAX microsites.
- Designed and implemented a system which utilized web services to perform nightly updates of a travel website's, www.adventurecollection.com, "trip" database using JAXB/XJC.
- Designed and implemented an Inventory Management System for the Pronghorn Club (www.pronghornclub.com). This system became Texture's reference implementation for other e-commerce sites/systems.
- Performed regular deployments and data migrations using Evolution Hosting (www.evolutionhosting.com), ANT, Perl scripting, and MS-Excel in both QA and production environments for numerous client sites.
- Developed an in-house webapp/tool which enabled developers to conveniently maintain a database of client (Evolution) hosting accounts. This tool enabled developers to log into the Evolution console for a specific account via a single-click. This system replaced their antiquated manual spreadsheet system - this new system was a big time saver and praised by the development team.
February 2004 - June 2006
- XML: XSD, XSL, JDOM, XHTML, HTML, GML (Geography Markup Language)
- EJB: Stateless Session Beans, MDBs, XDoclet
- App Servers: OC4J (development), OAS (production), JBOSS (dev/prod)
- APIs: Oracle Spatial, JTS (Java Topology Suite), Log4J
- JMS: SonicMQ
- Scripting Languages: Perl, bash, korn
- Development Platform: Linux (Redhat Enterprise - WS 3) using IntelliJ's IDEA and JEdit
Some of the DG systems I worked on and/or refactored:
- B2B-AMS: An automated ordering system (a JMS messaging application) which enabled DG business systems (SAP) to interface with NGA (The National Geospatial Agency).
- Browsetool: A web app used by DG customer service reps to define order polygons. Wrote extensive front-end and back-end code to handle numerous types of spatial geometry inputs: box-maker, circle-maker, corner-coords, direct coordinate entry. Wrote an exhaustive test-suite using HttpUnit, JSUnit, and JUnit.
- Location Desktop: An internal app which provided a host of backend GIS spatial services. Implemented an algorithm to validate and programmatically correct invalid user defined geometries (GML, Lat-Lon coordinate data, WKT). Also wrote services to specify country codes based on one or more spatial geometries.
- A JMS-Email Notification System and internal Diagnostic Tools.
Some of the DG systems I designed and implemented from the ground up:
- PP Stats: A statistical reporting system for DG's Product Processors (PPs) using Perl and cron. These reports were used by mid-level management and system engineers to help them monitor and fine-tune each PP's performance.
WAN Ingest: A stand-alone Java app which ingested
raw satellite imagery from RGTs (remote ground terminals) into
DG's image archive. Used Java, JUnit, Perl, cron, korn shell
scripting and Ant to implement this system.
- Later, WAN Ingest was rewritten by some contractors, but the DG testing team still used my app as it proved to be an invaluable testing tool to get test data into their system quickly and reliably.
Interactive Video Group
- Refactored the server team's build system using Java, Ant, RPM, and bash shell scripting within a UNIX environment (Linux and Solaris).
Developed system tools for the Mystro app server using Java:
- Created a component versioning system which enabled the server team, QA, and field ops to determine exactly which server components they had running on their system(s). This system also provided the means to effectively monitor software patches and track software bugs more efficiently.
- Revamped the Mystro Settings Server code such that server settings pulled from multiple configuration files rather than from one monolithic file.
- Coordinated the server team's release process to QA. Automated the server release build process which cut the procedure's run-time down from an hour to just over 10 minutes. Also, optimized the server team's nightly build system such that logging storage was reduced tenfold-times down from ~500KB each night to ~50KB.
- Supported the server team's software development environment by performing numerous internal installations of the Mystro app server. Verified software upgrades. Compiled and edited release notes for each server component during each major release and/or patch to QA.
- Provided technical support to test engineers and technical writers regarding the installation, configuration, and documentation of the Mystro app server. Authored an internal installation guide for the Mystro app server.
Technologies I've used over the years listed in no particular order:
- Programming Languages: Java, Python, C, C++, perl, FORTRAN 77, RPG, Pascal, COBOL
- Testing: JUnit, JsUnit, HttpUnit, Cactus, Jasmine, Selenium
- MVC Web Frameworks: Struts (v1, v2), SlingShot, JCatapult
- Database: Hibernate, SQL, MySQL, SQL*Plus, SQuireL, Oracle (CASE Methodology for DB Design), Sybase, PostGreSQL, MS-Access
- Editors/IDEs: WebStorm, PyCharm, IntelliJ, STS, Eclipse, slickEdit, jEdit, Borland C++ (v5.02), MS-Visual C++ (v5)
- Source Control: Git, BitBucket, GitHub, SourceTree, SVN, CVS, Perforce, CMSynergy
- openssl: SSL certificate installation and some Apache configuration (light)
- Operating Systems: Mac, Windows, Cygwin, Unix (Linux, Solaris), AS/400
- UNIX Scripting Languages and Utils: bash, korn, t/csh
- Build Utils: ANT, Maven, Savant, RPM (Red Hat Package Manager)
- Numerical Computing: MatLab, Mathematica
- GNU: gcc, gdb, make, vi, vim, gvim, emacs
- GIS: Oracle Spatial, Grass, ArcInfo
B.S., Computer Science (2003) - University of Colorado at Boulder
- Dean's List
- Member, Golden Key International Honor Society
- Klaus D. & Jean L. Timmerhaus Scholarship Recipient, 2002
B.A., Psychology (1997) - Naropa University - Boulder, CO
- Buddhist Psychology and Meditation
- The Psychology of Health and Healing
- Traditional Eastern Arts: T'ai Chi Chuan and Yoga
Music - Berklee College of Music (1991-92) - Boston, MA
- Played guitar with various bands and local musicians over the years with occasional performances and recording projects.
- Teach private guitar lessons on/off since 1995. Teach various styles and levels of playing.
- Wrote an eBook about music theory and improvisation for guitar players circa 2002-05.
- I continue to write and record original guitar music and songs. Some of my material can be found on my SoundCloud page.
Internships and Early Years
University Jobs and Projects
University of Colorado
2001 - 2003
- Computer Science Senior Project: Worked on team to design and implement Notification Server and Mock Online Bidding System for a local Boulder telecommunications company (SandCherry) using Java, Struts 1.x, Java Servlets, JSPs, XHTML, XML, Ant, and CVS.
- Software Engineer: GUI programming for the Applied Math department's Mathematical Visualization Toolkit (MVT) using Java Swing.
- Volunteer Java Teaching Assistant: Collaborated with instructor on the development of course content and assignments. Provided technical support to students regarding the Java programming language.
- Volunteer Webmaster: Designed, implemented, and maintained a website for a Linear Algebra class for the Math Department using HTML.
- Supported two (2) operational real-time emergency response atmospheric dispersion modeling systems, CAPARS, using Java, C, C++, FORTRAN 77, and UNIX shell scripting. (See http://www.alphatrac.com/ for more details.)
- Ported a new implementation of CAPARS from a Solaris to a Red Hat Linux environment.
- Created a rainfall computation utility for RFETS (Rocky Flats Environmental Technology Site) using C and UNIX shell scripting.
- Created base maps for RFETS, the Denver metro area, and a DOE (Department of Energy) site in Oak Ridge, Tennessee, using Grass, ArcInfo and C++.
- Supported the team's AS/400 testing environment.
Storage Technologies, Inc.
- Designed, implemented and maintained an Asset Inventory system for the IT department using MS-Access and Oracle's CASE Methodology for database design.
- Supported Data Warehouse team using COBOL, MS-Excel and MS-PowerPoint.
- Participated in a team design for a Skills Assessment Reporting database for HR.
Advanced Management Research, Inc.
- My first professional experience working as a software developer.
- Software engineering for a health claims adjudication system (CAPS - Claims Adjudication Processing System) using RPG and CL in an AS/400 environment.
- Refactored the entire reporting system and menu screens for CAPS.