SPA with RESTful Web Service and Tests (Development)
For improved tracking and reporting of engineering lab equipment, we needed a single page app, RESTful service, integration with a Java Swing UI desktop app, and integration with an existing MS SQL Server database.
I primarily focused on implementing the end-to-end tests following a page object pattern to create reusable test components with well-factored, clean code. I also contributed to various other layers of the stack including front-end Angular JS and tests, RESTful services, Java Swing UI, and POJOs for Hibernate.
Metadata Driven Database Schema and XML Shredding (Development)
We maintained an internally used engineering tool for auditing QA storage system configurations. The goal was to create a relational database populated from this tool's XML output of a point-in-time scan of a storage system. Each XML document ranged in size from tens of KiB to several MiB. The system needed to handle ingesting hundreds of such XML documents each day.
I defined a metadata schema that described the 900+ attributes, data types, and relationships between various entities within the XML document. I then used this schema for both generating the SQL DDL for creating and maintaining the tables with foreign key references as well as for parsing each incoming scan XML document and inserting into the appropriate tables.
I created database views with automated integration tests for various common reports while providing ad hoc querying capabilities directly to the tables. I performance-tuned the views by adding indexes and reworking the SQL as needed.
I utilized PHP DOM and PDO_SQLSRV and Microsoft SQL Server. This was the first major project on which I practiced Test Driven Development to achieve near complete unit level test coverage with PHPUnit.
Database Import/Export from/to XLSX File (Development)
I designed and implemented a service behind a REST API for interacting with multi-sheet Excel (XLSX) files and a SQL Server database.
We had a template Excel file that users could download, populate with their needed data, and upload through the service to the database for later reporting. We also used this template Excel file as a baseline to populate for users to export from the database to an Excel file.
The Java tech stack included Jetty, Jersey, Jackson, Hibernate, and Apache POI.
I created abstractions for each sheet to provide mappings between the rows/columns and the Java objects to be inserted/read from the database. I created a facade over the Apache POI to provide a consistent interface with minimal code duplication.
Offline-First Web App for Memorizing (Development)
To aid in memorizing and reviewing passages of the Bible (or other literature), I built a web app designed to be used offline. It aids in prioritizing what to review each day and uses regression analysis for determining desired review intervals.
The app functions in the browser via the URL whether or not a network connection is present. The user can save (backup) and load (restore) data from the server when a connection is available.
I was specifically targeting Chrome running on an Android tablet while still allowing use with a desktop browser. I built the front-end with AngularJS and used HTML 5 application cache (AppCache) to cache the static files in the browser. I stored all the user data as JSON in the browser's local storage.
The Node.js/Express back-end provides authentication, TLS, and serving of static files. It also features a simple reviewable resource with PUT for backing up to a date-stamped JSON file on the server file system and GET for retrieving the latest saved data.
Adventures in Character Team Assigner (Development)
I developed a solution used for an annual children's event. The algorithm distributes the population of students into a specified number of small groups (teams), attempting an even distribution based on age and gender. It also takes into consideration students requesting to be together on the same team.
I integrated with the organization's existing macro-enabled Excel file to parse out the relevant details using PHP and related libraries. It then outputs the team number assignments for each student along with related statistics.
Classroom Presenter for Hour of Code (Other amazing things)
For a day in December 2015 and 2016, I presented to students during the Computer Science Education Week in conjunction with the Hour of Code initiative. My goal was to inspire sixth--grade students to consider careers in technology and programming. For part of my presentation, I created a small Angular app that I demonstrated and explained.
A Guide to Robust Unit and Integration Tests with JUnit (Publication)
Automated software tests are critically important to the long-term quality, maintainability, and extensibility of software projects, and for Java, JUnit is the path to automation.
While most of this article will focus on writing robust unit tests and utilizing stubbing, mocking, and dependency injection, Toptal Software Engineer Josh Hayden will also discuss JUnit and integration tests.