Michael Angstadt's Homepage


Last updated: September 1, 2018

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, IIS, Clonezilla, Deep Freeze, local group policy, Task Scheduler, command-line scripting

Instructor, Methacton High School (Norristown, PA)
Feb 2017, Oct 2017, Jan 2018

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)



This is a Java Swing application that records student registrations for computer classes. 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. This Java application sits "on top of" the original Access database, thus eliminating the need to write anything down.

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

Because of how configurable I designed the application to be, I was able to repurpose the application for another use-case with very few code modifications. For instance, the path to the Access database file was configurable, allowing us to easily point another instance of the application to a different database.


  • 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 "no show" students and write notes about each student's performance.
  • Automatically print a receipt for the student when a registration is completed:
    1. Generates an HTML document using the Velocity templating engine.
    2. Converts the HTML document to a PDF file using the iText PDF library.
    3. Sends the PDF data to the computer's default printer.
  • Interfaces with the Microsoft Access database using the Jackcess library.
  • Application settings are stored in a Microsoft Excel file, which is read using the Apache POI library. An Excel spreadsheet is much easier for non-programmers to edit than an XML, JSON, or .properties file.
  • Automatically refreshes data when it detects a change to the Access database (supports multi-user environment).

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



This is a JavaFX application that allows the user to run various commands against the computers in the Computer Lab (for example, restarting a computer or sending a message to a computer). It essentially acts as a user-friendly, GUI front-end to ordinary console commands. Before I wrote this application, a collection a batch scripts were used, which were not as user-friendly.


  • Commands are completely configurable via an external 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)



This is a Java Swing application that is used to manage 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. The user can then print and publish various materials related to the Computer Lab's operating hours.


  • Prints wallet-sized slips of paper listing the Lab's upcoming closure times (uses Velocity and iText PDF). Previously, this was created by hand in Microsoft Word.
  • Publishes the closure list to the library's website as a PDF.
  • Prints signage for hanging in the Lab.
  • Publishes the closure times to a Google Calendar. Automatically syncs the calendar to match the application's currently defined list of closures.

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



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.

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 a little bit 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 that they forget are already plugged in.
  • Uses the RemoveDrive utility program to safely eject the flash drives (it is not possible to safely eject a flash drive in Java).

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



Library patrons often want to print documents from their cell phones. However, the library's printers can only print from library computers. Therefore, we typically suggest that the patron email the file to themselves, and then log into their email account on a library computer. However, people often cannot remember their email account password because they are used to accessing their email on their phones. I wrote this Java-based application to remedy this issue.

This program allows a library patron to send files from their phone to a library computer via email. First, the patron attaches the files they would like to print to an email and sends the email to an email account that the library controls. Next, the application prompts the patron for their email address and connects to the library-controlled email account via IMAP. The program then searches the inbox for emails that are from the patron's email address. It then downloads the email's attachments to the local hard drive, allowing the patron to open/print them.


  • Uses the Jodd Mail library to handle the IMAP communication.
  • Emails are deleted from the server as soon as they are downloaded, increasing patron privacy.
Computer Skills Test Software, Montgomery County-Norristown Public Library (Norristown, PA)



During the Computer Basics class that I helped to teach, the students are shown a website which teaches them how to use a mouse and keyboard, and then allows them to practice their skills. I improved upon this software extensively.

The software consists of two separate websites. The first teaches them how to use the mouse and keyboard, which we go through together during class. The second is a 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 various exercises.
  • 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: A shortcode that builds an HTML webpage that allows website visitors to freely download the support materials for each computer class. The shortcode gets its list of class materials from the file structure of a specified directory. Because the shortcode's output is tied to the contents of a directory on the server, 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 an HTML webpage that displays the computer classes schedule. The classes schedule is defined in an XML file.
  • Library Branches: 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 box 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 staff to schedule notifications ahead of time and not worry about removing outdated notifications.

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)