Experience
Church of Jesus Christ of Latter-day Saints, Family Church History (FCH)
March 2007 to present
Development Manager, October 2008 to present
- As a division, our mission is to organize the world's genealogical data. Our software aims to aid in scanning microfilm, digitally capturing images worldwide, transcribing genealogical
records, ingesting the records into a database and making the images and records available to the public.
Personally accountable for my team's technology decisions, ensuring that solutions are implementable, scalable and maintainable. Aid in interviewing and hiring developers. Serve as developers' direct report, being responsible for their performance reviews. Teams practice agile development, relying on Oracle, Java, Hibernate, RESTful web services (JAX-RS) and Enunciate on the server; Flex and C# (WinForms and WPF) on the client; while building with Maven and continuously integrating with Hudson. Help focus developers on getting things done, aiming for meaningful iterations with user-demonstrable features. Team unit test code coverage is generally around eighty percent. Regularly aid in presentations to upper management concerning team progress. Try to complete a user story a month to keep in the details of the code. Voluntarily taught multi-month Head First Java course.
- record affiliate solutions team dev manager
- Manage a team of developers in Utah and a team of application engineers in Europe and South America. Teams are responsible for helping provide solutions with our contracted record affiliates around the areas of digitally capturing images with prosumer cameras or scanners, and publishing said images. Currently engaging with record affiliates in Colombia, England, Guatemala, Germany, Peru, and the United States, having recently travelled to Colombia, Guatemala and Peru. Using jclouds with OpenStack and Amazon EC2 for automated Drupal server install used for image publication. Also using IIPImage, Java, Hibernate and MySQL (building with Maven) to handle pyramidal image creation and index and image ingest into Drupal site.
- data framework team dev manager
- Team owns the startings of a canonical datastore for the Church's digital pipeline data (currently over a billion records). Receive data from various sources, transforming genealogical record data and loading it into Oracle. The server side is a Java, Hibernate, RESTful web service, fronted by a WinForms-driven client helps customers manage the collections. Data is submitted to FamilySearch for public access and searching.
- phoenix team dev manager
- Team supports the Acquisitions Management System (AMS), an Oracle-based ERP system that manages the 2.4 million rolls of microfilm stored in the Granite Mountain Record Vault. Hundreds of internal employees rely on AMS daily. Recently helped transition from rather ancient hardware to VMWare VMs and starting to transition from Windows NT, Oracle 8i, Oracle Forms, PL/SQL to a Linux, Java, Hibernate, RESTful web service, fronted by a Flex client.
- personal development - Hadoop
- Personally saw the need for and built Hadoop cluster, scrounging together 26 nodes, writing a custom Perl script to help manage installing new nodes and cluster configuration. Cluster is largely used for research purposes, having been used to analyze millions of rows of access logs and nearly a billion genealogical records, performing given and surname frequency analysis using Pig. Experimented using HBase to replace an underperforming Oracle backend. Recently prototyped a real-time log aggregation framework using Flume, HDFS, HBase and Hive.
- personal development - Customer Relations Management system
- As the sole engineering resource, wrote script to install Amazon instances which host SugarCRM. Used script to rather easily change instance size during high traffic period. Also wrote cronable script to snapshot volumes nightly. Recently added a python monitoring script that uses httplib2 to run application health checks, actually logging into the site, confirming database interraction.
- cloud services team dev manager / scrum master (former responsibility)
- Investigating building internal clouds using Eucalyptus, VMWare and OpenStack. Using lasic, a Scala-based, Typica-driven language to manage cloud references. Language allows for launching sets of virtual machines on Eucalypus / Amazon. Supporting internal teams as they transition to deploying their software in clouds. Currently have a Eucalyptus system that allows developers to launch / terminate virtual machines without bureaucratic interference or invoice. Eucalyptus and being able to launch / terminate Amazon instances via cron has potential to save hundreds of thousands of dollars over lifetime of our products.
- Contract, Rights, Expressions (CRX) team dev manager (former responsibility)
- Team handles role base access control for millions of images in the digital pipeline, managing permissions for an evenual multi-petabyte image store. Tens of thousands of contracts are managed using Oracle, Java, a RESTful web service and a WPF C# client.
- Rosetta Stone team dev manager (former responsibility)
- Rosetta Stone manages digital pipeline business process management using Lombardi Teamworks Software with help from custom Java and Flex with an Oracle backend. Virtually the entire digital pipeline relies on Rosetta Stone to complete their day-to-day activities. A Flex client is backed by Oracle, Java, and a RESTful web service.
Senior Engineer, March 2007 to October 2008
- dCamX (digital camera) tech lead
- Grew a team of engineers from myself to four, writing software that interacts with a digital camera and is used for capturing genealogically significant images. Driven by the Java Eclipse Rich Client Platform, C / C++ (via JNI) and Derby (SQL-driven database), dCamX will be used around the world to capture hundreds of millions of images yearly, producing metadata in an XML / XSLT output.
United Online, Mega Web Services division (formerly about.com and PRIMEDIA)
January 2000 to April 2007
Engineering Manager, May 2006 to April 2007
- managed a team of four engineers
- sister company integrations into FreeServers SiteBuilder
- Provided a simple API for auto-installing a SiteBuilder site for sister sites including Classmates. Thousand of daily installations with millions overall.
- blog
- Frustrated by years of talk, drove process to establish a simple YUI-driven blog system with posts, tags, threaded comments and role based access control. Personally wrote and maintained initial API.
- log parsing
- Frustrated by years of talk and following on the work of several engineers who abandoned the project due to sheer difficulty, helped architect and write a plugin-based system to process billions of monthly hits.
Principal Engineer, March 2004 to May 2006
- signup / upgrade process for FreeServers
- Architected and wrote system for signing up and upgrading customers. Systems uses my CGI::Path to handle several distinct complex paths, having handled millions of hits and dollars through the years.
- search
Senior Engineer, January 2000 to March 2004
Lead or sole (*) engineer on the following projects
- referer tracking
- Wrote system to track impressions, clicks, conversions and revenue from Google, Overture and internal partners.
- parallel processing system *
- Loosely based on my masters thesis, architected and wrote system to process nearly arbitrary tasks in parallel. Able to add or remove nodes arbitrarily. My system was used on over fifty distinct projects with uses including sending mail, path tracking and indexing html pages.
- keyword indexer *
- Personally wrote a scoring algorithm for finding keywords on millions of arbitrary html pages, which was used to serve millions of targeted ads in real time, greatly increasing revenue.
- advanced user access
- Volunteered to project manage a team of ten engineers, testers and product developers a system which allowed our hosting users access to CGI, PHP and MySQL, writing code as needed along the way.
- CGI::Path *
- Wrote system to easily manage complex paths (forward and backward paths) which was used for FreeServers signup process based on code written for GlobalServers. The system incorporates YAML, client and server validation, Template::Toolkit and Apache::Session.
- File::CacheDir *
- Wrote system that takes a ttl and rather arbitrary files, quickly, automatically and cronlessly cleans up itself.
- bencha *
- Given a script and some debugging preferences, bencha modifies script and inserts timing calls, quickly finds bottlenecks, logging micro second timings that surpass thresholds
- engineer hiring and training
- Performed technical interviews, trained new hires and oversee continuing training, voluntarily teaching a twelve week Perl class.
Brigham Young University Mathematics Department
Mathematics Instructor, September 1996 to January 1999, Fall 2003
- Instructed classes of thirty-five plus students in college algebra and first year calculus
- Responsible for writing and grading tests, lecturing and assigning grades
Education
Brigham Young University
Bachelor of Science, Mathematics
- Thesis: "Computer Implementation and Experimentation of the Quadratic Sieve Factoring Algorithm "
Brigham Young University
Master of Science, Mathematics
Bachelor of Arts, Honors Philosophy
University Honors Graduate
- Honors Thesis: "A Refutation of Thomas Morris's Two-Minds Model of the Incarnation"
Minor: Music
Skills
-
- Java
- Hibernate
- RESTful Web Services
- Object-oriented Perl
- Python
- JavaScript / AJAX
- C / C++
- Oracle
- MySQL
- PostgreSQL
- SQLite
- CVS / SVN
- Linux / OpenSolaris
Side Projects
- CrumbTracker
- Using a Java driven Android phone app, CrumbTracker tracks device location and sends crumbs to a Google App Engine (Java) website allowing users to see history on a Google map
- HolaServers
- Using Amazon's S3 as the backend for free web hosting and Google App Engine (Python) for account registration and management, HolaServers offers a home grown FTP server (implementing Net::FTPServer), and uses Perl to manage user accounts, quotas, memcached, and S3 interactions.
- Amazon Web Services (AWS) Developer
- Dynamically generated websites, using Amazon's web services.
- api sudoku challenge
- Just for fun, apichallenge provides a simple way for programmers compete via an HTTP API, with their code, to win the sudoku challenge!
- Fantasy sports
- Performed real time analysis of schedules and results, and in fully automated fashion, nightly completed trades to maximize predicted points via a least squares regression system. Team consistently ranked in 99th percentile.
Personal
-
- CPAN author
- accomplished pianist
- novice screenwriter
- blogger
- Earned national collegiate awards for team and individual debate
- Competed on the nationally ranked Brigham Young University Academic Quiz Team for four years
- Served two years in England as a missionary for the Church of Jesus Christ of Latter-day Saints
- Intramural champion in basketball, softball, volleyball, wallyball, badminton and sports trivia
- Enjoy traveling, time lapse and digital photography, reading, playing cards, watching movies, listening to music, singing, memorizing classical piano music and performing piano recitals