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, JAX-RS (Jersey) and Enunciate on the server; with Flex and C# (WinForms and WPF) on the client. Help focus developers on getting things done, aiming for meaningful iterations with user-demonstrable features. 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.
- cloud services team dev manager / scrum master
- Building internal clouds using Eucalyptus. Writing a Java-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.
- Team owns the startings of a canonical datastore for the Church's digital pipeline data. Receive xml from various sources, transforming billions of rows of genealogical record data and loading it into Oracle. A JAX-RS / WinForms-driven client helps customers manage the collections. Data is submitted to FamilySearch for public access and searching.
- 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 Java / JAX-RS / Flex architecture allowing for eventual backend replacement.
- 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, JAX-RS and a WPF C# client.
- 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.
- 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 underperforing Oracle backend.
- As the sole engineering resource, wrote script to install Amazon instances which host SugarCRM. Also wrote cronable script to snapshot volumes nightly.
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, train 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
-
- Object-oriented Perl
- mod_perl
- Oracle
- Java / Eclipse
- Python
- MySQL
- CVS / Subversion
- SQLite
- JavaScript / AJAX
- C / C++
- PostgreSQL
- OpenSolaris / RedHat / Ubuntu
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
- concert 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