Gabriel Perry

Gabriel Perry

Software Engineer

Software Engineer living in Boulder, Colorado, with 15+ years of experience in software development in multiple environments with a focus on web technologies. Strong analytic and problem solving skills, self-motivated, detail-oriented, creative, open-minded and friendly. Writing maintainable, readable and well-documented code is a passion.

Work Experience

Contract Software Engineer
Staples
Identity Management
Broomfield, CO
May 2017 - November 2017

Software development for Staples' Identity Management group. Main focus was developing a middleware layer between an Angular frontend and a Java Microservices backend for a portion of their Staples.com domain using TypeScript, Jasmine and the Express framework.

I worked closely with a team of IdM backend Java developers and helped them 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 tasks, code-reviews and planning activities.

Main Technologies Used: TypeScript/JavaScript, Node.js, npm, Express, Angular 4, Angular CLI, Jasmine (testing), Java (Spring Boot) Microservices (Netflix OSS), Postman, Swagger, JIRA, Git, BitBucket, Jenkins (CI/CD), and WebStorm.

Software Engineer III
Trimble, Inc.
SketchUp - 3D Warehouse
Boulder, CO
February 2013 - November 2016

Extensive feature and maintenance frontend development for SketchUp's 3D Warehouse using JavaScript and Google Closure Tools. Built numerous GUI components with extensive API calls to the warehouse backend, DOM manipulation/creation tasks, etc.

Middleware development as well, which supported an API-call simulation layer which was instrumental when first developing the new 3D Warehouse when we didn't have a backend! Extensive unit-test coverage/development. Also, provided mentorship to new hires and junior developers.

Project Highlights:

  • Designed and implemented a Search Results component with support for:
    • Query formulation, result-set and query management, advanced user navigation events, infinite-scroll, pagination and film-strips.
  • Widget/component and new feature development:
    • Advanced Search page, a Catalog Browser feature, Advanced Search keyword operator support, a SearchBar widget, a SearchSaver Utility, a Site Header widget, and many other features too.
  • Internationalization: string extractor/injector utility built in Python. Tool was used by all SketchUp development groups: SketchUp app, Layout, 3D Warehouse, Extensibility, etc.

Other Technologies Used: JsUnit, HTML, CSS/Sass, Soy Templates, Knockout.js (light), Python, PyCharm, Git, SourceTree, Rietveld (for code reviews), and JIRA.

Business Application Developer
Convertis Marketing
Gunbarrel, CO
October 2008 - January 2013

Application/web development, database administration, configuration/build management, and 24/7 production support for Boulder-based Internet marketing company that sold vanity products online.

Supported a Java based e-commerce system called "SoftSlate" comprised of Java, JSP, Struts (w/Tiles) and Hibernate. Responsible for maintenance and new feature development of this online ordering system: client-facing and site administrator pages.

Main Technologies Used: Java, Struts 1.2.8, Hibernate 3.1, JSPs, JUnit, JavaScript, Apache HTTP Server, Tomcat (5.5.35), MySQL, SQLyog, ANT, SVN, bash shell scripting, Linux, and the IntelliJ IDE.

  • 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.
  • 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
  • Server configuration: Tomcat, Apache, openssl, SSL certs, etc.
  • Server administration: SoftSlate store setup, deployments, build management, etc.
  • Developed internal wiki: Thoroughly documented company procedures, technical HOW-TO's, developer insights, etc.
  • Order-flow fine-tuning/customizations, Campaign layout A/B split-testing, campaign configuration tools/settings, etc.
Application Developer
Crispin, Porter + Bogusky
TextureMedia
Boulder, CO
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.

Job Highlights:

  • 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 main 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.

Technologies Used: Java, Hibernate (light), JCatapult/Slingshot (2 in-house proprietary Java web development platforms), JSP/HTML, JavaScript, JSON, Cactus/JUnit, POI-HSSF, MySQL, SQLyog, perl, MS-Excel, Tomcat 5.x, ANT, Maven, CVS, and Subversion (SVN) on Windows.

Software Engineer
DigitalGlobe
Longmont, CO
February 2004 - June 2006

New feature and maintenance development using a test-driven development approach for DG's Customer Front End team and Geospatial Commercial Operations group using Java, JSPs, JSTL, Struts, JavaScript, JUnit, JSUnit and HttpUnit.

Project Highlights:

  • BrowseTool: Wrote extensive frontend and backend code to enable DG Service Reps to define spatial geometries (box-maker, circle-maker, corner-coords, direct coordinate entry) for customer order polygons.
  • Location Desktop: Extensive GIS spatial services development.
    • Geometry Validation Services - Supported formats: GML, Lat-Lon coordinate data, WKT (Well-known-text).
    • Geolocation Services - Country codes derivation based on one or more specified spatial geometries.
  • PP Stats: Designed and implemented a statistical reporting system for DG's Product Processors (PPs) using perl (heavy pattern matching and regex work) and cron scheduling.
  • WAN Ingest: Designed and implemented a standalone Java app used to ingest raw satellite imagery from RGTs (Remote Ground Terminals) to DG's image archive.

Other Technologies Used: XML (XSD, XSL, JDOM, GML, XHTML), EJBs (Stateless Session Beans, MDBs, XDoclet), App Servers: OAS, OC4J & JBOSS, Oracle Spatial, JTS (Java Topology Suite), SonicMQ, perl, bash & korn shell scripting, Redhat Linux, IntelliJ.

Software Engineer
Time Warner
Interactive Video Group
MystroTV
Westminster, CO
July 2003 - November 2003

Refactored the server team's build and deployment system using Java, Ant, RPM, and bash shell scripting within a UNIX environment (Linux and Solaris).

  • Developed system tools and a component versioning system for the Mystro App Server using Java.
    • Automated the server release build process which cut the procedure's run-time down from an hour to about 10 minutes.
  • 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 said App Server.

Additional Technologies

Technologies I use and have used over the years listed in no particular order:

  • Programming Languages: Java, Python, C, C++, perl, FORTRAN 77, RPG, Pascal, COBOL
  • Presentation/Browser Technologies: JavaScript, ES6, TypeScript, Google Closure, React, JSX, Angular, Express, Knockout.js, JSON, XML, CSS, Sass, HTML, XHTML, JSPs, Java Servlets
  • Testing: Jasmine, Selenium, JUnit, JsUnit, HttpUnit, Cactus
  • MVC Web Frameworks: Struts (v1, v2), SlingShot, JCatapult
  • Database: Couchbase, MongoDB, 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: create-react-app, Angular CLI, Babel compiler, webpack (bundler), 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

Education

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

Music - Berklee College of Music (1991-92) - Boston, MA

Personal

  • 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.
  • Maintain a personal website, www.flupe.com, for fun. Topics include: music, guitar playing, and software development.
  • Wrote a lesson series about music theory and improvisation for guitar players.
  • I continue to write and record original guitar music and songs. Some of my material can be found on my SoundCloud page.