Michael Angstadt's Homepage


Github: mangstadt
LinkedIn: linkedin.com/in/michaelangstadt

Printable resume



Java technologies: Java 8, JUnit, Mockito, Swing, JavaFX, Maven, Gradle, Git, Eclipse
Web design: HTML, CSS, Javascript, PHP, WordPress plugin development
IT Technician: Windows 7/10, Windows Server, IIS, phpMyAdmin, Clonezilla, Deep Freeze, local group policy, command-line scripting, Task Scheduler


Assistant Electronic Resources Librarian & Electronic Resources Technician, Montgomery County-Norristown Public Library (Norristown, PA)
June 2014 - present
Technologies: Java 8, JUnit, Mockito, JavaFX, Swing, Git, Gradle, HTML, CSS, Javascript, PHP, WordPress, Eclipse, Windows 7/10, Windows Server 2008 & 2019, IIS, phpMyAdmin, MySQL, Clonezilla, Deep Freeze, local group policy, Task Scheduler, command-line scripting

Instructor, Methacton High School (Norristown, PA)
Jan 2017 - present

Volunteer, Montgomery County-Norristown Public Library (Norristown, PA)
December 2013 - June 2014

Software Developer, Siemens Medical (Malvern, PA)
October 2012 - May 2013
Technologies: JavaSE, JavaEE, GWT, CSS, ClearCase

Software Developer, Penn Mutual (Horsham, PA)
June 2011 - September 2012
Technologies: JavaSE, JavaEE, MyBatis, JUnit, Maven, Mule, XML, XSLT

Software Developer, LifeShield Security (Yardley, PA)
December 2010 - May 2011
Technologies: PHP, PHPUnit, JavaSE, JUnit, Velocity, MyBatis, JDBC, SQL

Software Developer, MEDecision (Wayne, PA)
August 2009 - June 2010
Technologies: JavaSE, JavaEE, JUnit, MyBatis, PHP, Zend Framework, XML, SOAP, HealthVault

Software Developer, JBISoft (Fairfax, VA)
October 2008 - March 2009
Technologies: JavaSE, JavaEE, JUnit, Tomcat, Servlets, JSP, Javascript, Dojo, OpenLayers

Consultant, Platinum Solutions (Reston, VA)
July 2007 - September 2008
Technologies: JavaSE, JavaEE, Tomcat, JSP, SQL, Struts, HTML, CSS, Javascript

Application Programmer, Stanley Associates (Kearnysville, WV)
August 2006 - July 2007
Technologies: Visual Basic 6

College Internships
June 2003 - May 2006


Student Registration Application, Montgomery County-Norristown Public Library (Norristown, PA)


Project start date: Oct 2014
Running stable since: Jan 2016


This Java Swing application records student registrations for the Computer Lab's computer classes. The app can register new students, look up the records of existing and past students, retrieve class lists, and record notes on student performance.

I implemented new features based on feedback from my co-workers, who have repeatedly complemented me on the application's reliability and ease of use.

Before I wrote this app, a pen-and-paper system was used to record the registrations. Once enough registrations were recorded, the information would then be manually entered into an Access database. The application I wrote inserts the information directly into the database, eliminating the need to use pen-and-paper.

In order avoid breaking other work flows that rely on the database, I made as few alterations to the database schema as possible. This gave us the ability to fall back to the old workflow if the application were to ever fail (which we never had to do).

Since the database is just a file on the filesystem, to avoid issues with data inconsistancy, the application closes its handle on the database file as soon as it is done reading or writing data. And it will not write to the database if the database is currently open in Access.

Because of how configurable I designed the application to be, I was able to repurpose it for another use-case with very few code modifications (recording patron appointments with our technical support volunteers). For example, because the path to the Access database file is configurable, I could easily point the application to a different database file.


  • Search student records by name and phone number.
  • Browse all past, present, and future courses, and see the students that are registered for them.
  • Record notes about each student's performance.
  • Automatically prints a receipt for the student when a registration is completed.
  • Application settings are stored in a Microsoft Excel file. An Excel spreadsheet is much easier for non-programmers to edit than an XML, JSON, or .properties file. The data that is parsed from the Excel file is cached to improve application startup times.
  • Automatically refreshes data when it detects a change to the Access database (supports multi-user environment).
  • Unhandled exceptions are logged to a file so bugs can be fixed.
  • UI state, such as window height and width, is saved to each user's local user profile.

Open Source Libraries Used

  • Velocity: For receipt generation.
  • iText PDF: For receipt generation.
  • Jackcess: For interfacing with the Access database file.
  • Apache POI: For interfacing with the Excel settings file.

Print from email utility, Montgomery County-Norristown Public Library (Norristown, PA)


Project start date: Jun 2018
Running stable since: Aug 2018
Project open-sourced: Jan 2019 (https://github.com/mangstadt/print-from-phone)


Library patrons often want to print documents from their cell phones. But in order to do this, they must first transfer the document to one of the library's computers. We typically suggest that they email the file to themselves, and then log into their email account on the library computer. However, people often cannot remember their email account password. I wrote this application to remedy this issue.

The application works as follows:

  • The patron attaches the files they would like to print to an email on their phone. This is often done by opening the document and tapping a "Share" button.
  • The email is sent to an email account that the library controls.
  • The application connects to the library-controlled email account via IMAP.
  • The application searches the inbox for emails that are from the patron's email address and downloads them to the local hard drive.
  • The patron can now open and print their documents.

I wrote an article about this app, which is slated to be published in an upcoming LITA guide.


  • User is walked through each step of the process in a wizard-like interface.
  • Emails are deleted from the server as soon as they are downloaded, increasing patron privacy.
  • Application deletes the user's downloaded attachments on close, increasing patron privacy.

Open Source Libraries Used

Workstation Administration Application, Montgomery County-Norristown Public Library (Norristown, PA)


Project start date: Jan 2016
Running stable since: Jun 2016


This JavaFX application allows the user to run various commands against the public access computers in the Computer Lab. For example, they can use it to remotely restart a computer. It essentially acts as a user-friendly, GUI front-end to console commands. The commands are entered in an XML settings file. This file tells that app what information needs to be collected from the user in order to build the command.

My co-workers have repeatedly complemented me on the application's reliability and ease of use.

Before I wrote this application, a collection a batch scripts were used. In addition to not being very user-friendly, the batch scripts were also slower. When running a command on multiple computers, the batch scripts ran the commands against one computer at a time. My application was designed to run the command against all the machines at once. This resulted in much faster command execution for the longer running commands. However, to be on the safe side, I continued to maintain the old batch scripts in the event that my application were to ever fail (which it never did).


  • Commands are completely configurable via an XML file. Commands can be added, edited, and removed as needed without requiring modification to the source code.
  • Users are guided through a step-by-step "wizard-like" interface. Each step is configurable in the above mentioned XML file.
  • Uses the psexec command-line utility program to remotely execute commands on the computers.

Lab Closures Application, Montgomery County-Norristown Public Library (Norristown, PA)


Project start date: Feb 2015
Running stable since: Jan 2016


This Java Swing application assists in managing the operating hours of the Computer Lab. The user enters the times that the Lab is closed to the public for classes, holidays and other events. They can then print and publish various materials related to the Computer Lab's operating hours.

My co-workers have repeatedly complemented me on the application's reliability and ease of use.

Before I wrote this app, much of this work was done by hand. For example, a wallet-size slip of paper containing the Computer Lab's closure dates was created by hand in Microsoft Word. It had to be manually re-created every 4-6 weeks because only a limited number of dates can fit on the paper. Using the application I wrote, the user only has to enter the list of closure dates once. The application then automatically decides which dates to put on the slip of paper before printing it out.


  • Prints wallet-sized slips of paper listing the Lab's upcoming closure times. Previously, this was created by hand in Microsoft Word.
  • Displays a print preview before printing.
  • Publishes the closure list to the library's website as a PDF.
  • Prints signage for hanging in the Lab.

Open Source Libraries Used

  • Velocity: For populating HTML templates.
  • iText PDF: For converting the Velocity HTML templates to PDFs for sending to the printer.

Class Flash Drives Application, Montgomery County-Norristown Public Library (Norristown, PA)


Project start date: Nov 2014
Running stable since: Mar 2018


This application eases the process of copying the same group of files to a large number of flash drives. The user specifies the files she would like to copy and then inserts the flash drives one after the other. As soon as a flash drive is inserted, the application copies over the files and then safely ejects the flash drive. The user can then remove the flash drive and insert the next flash drive, repeating the process until all flash drives are done.

For many of the Computer Lab's computer classes, we give each student a flash drive that is pre-loaded with a number of files. Before, we had to manually copy the files over to each flash drive. This application makes the process easier by doing the copying for us.


  • Supports the option to delete all existing files off of each flash before copying the new files.
  • Supports drag-and-drop: files can be dragged into the application window from File Explorer.
  • If it detects that a flash drive is already inserted when the user starts the operation, it will show an error message. This is a safety measure that prevents users from accidentally deleting files off of flash drives (or hard drives) that they forget are currently mounted.
  • Uses the RemoveDrive utility program to safely eject the flash drives.

Computer Skills Test Software, Montgomery County-Norristown Public Library (Norristown, PA)



During the Computer Basics class that I help teach, we use two interactive websites that teach them how to use a mouse and keyboard, and then allows them to practice their skills. The websites were originally obtained from another library. I improved upon them extensively.

The first website teaches them how to use the mouse and keyboard, which we go through together during class. The second is an interactive skills test that they must complete on their own.

My contributions

  • Added a timer system which records exactly how long it takes to complete the test. Previously, students were instructed to keep track of the time themselves.
  • Implemented various validation measures that prevents students from skipping ahead without completing the exercises.
  • Added hidden "admin" panel that allows teachers to jump ahead to specific parts of the test.
  • Added functionality which gives students instant feedback on their performance.
  • Improved the responsiveness of the website by turning it into a single page application.
  • Made changes to the content of the exercises at supervisor's request.

WordPress Plugins, Montgomery County-Norristown Public Library (Norristown, PA)



I wrote a number of small plugins for the library's WordPress-based website.

  • Computer Class Resources: Automatically generates a listing of our downloadable class support materials. The shortcode gets its list of materials from the file structure of a specific directory on the web server. Because the shortcode's output is tied to the contents of a directory, adding/removing files from this directory automatically updates the webpage. This alleviates staff from having to worry about updating the website whenever class materials are updated.
  • Computer Class Schedule: Builds a HTML webpage that displays the computer classes schedule, which is defined in an XML file. This makes it easier to update the class schedule every season.
  • Branch Information Panel: A Javascript-powered widget that displays information about each of the library's branches, such as hours of operation and phone number.
  • Alert Notification Box: Displays a message at the top of the home page containing a notification of some sort (for example, "Library closed due to the weather"). Publish and expiration dates can be specified, which allows notifications to be scheduled ahead of time and outdated notifications to be automatically removed.

Google Drive Lesson Plan, Montgomery County-Norristown Public Library (Norristown, PA)

Link: http://goo.gl/ufdMa4


I created a lesson plan from scratch for teaching a class on Google Drive. I also taught the class. I used the Computer Lab's existing lesson plans as a guide for how to write my own.


Lead developer, ez-vcard
July 2012 - present
Technologies: Java, Maven, Git, JUnit, Mockito, Eclipse

Lead developer, biweekly
June 2013 - present
Technologies: Java, Maven, Git, JUnit, Mockito, Eclipse



B.S. Computer Science (May 2006)
Shippensburg University (Shippensburg, PA)