Portfolio
Screenshots
Project start date: Oct 2014
Running stable since: Jan 2016
Description
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 for pen-and-paper.
In order avoid breaking other workflows 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).
I was able to repurpose the app for another use case: booking appointments for computer help volunteers. Due to the app's configurability, this required few code modifications. For example, because the path to the Access database file was configurable, the application could be pointed to a different database file.
Features
- 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 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).
- Unhandled exceptions are logged so bugs can be fixed after they have occurred.
- UI state, such as window size and position, 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.
Screenshots
Project start date: Jun 2018
Running stable since: Aug 2018
Project open-sourced: Jan 2019 (https://github.com/mangstadt/print-from-phone)
Description
Library patrons often want to print documents from their cell phones. But in order to use the library's printers, they must first transfer the document to one of the library's public access 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 have difficulty accessing their email on a public machine (for example, they cannot remember their 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. They can also forward an existing email.
- The patron sends the email to an email account that the library controls.
- The Print From Email application, which is installed on the library's public access computer, 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.
An article I wrote about this application was featured in a 2019 LITA guide.
Features
- User is walked through each step of the process in a wizard-like interface.
- User interface is designed to accommodate patrons with low computer literacy.
- 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.
- Application captures anonymous usage statistics such as number of attachments downloaded per session.
Open Source Libraries Used
- Jodd Mail: For IMAP communication.
Screenshots
Project start date: Jan 2016
Running stable since: Jun 2016
Description
This JavaFX application allows the user to run various commands against the public access computers in the computer lab (for example, remotely restarting a computer). It acts as a user-friendly GUI for console commands. The commands are defined in an XML settings file, which tells the app what information needs to be collected from the user in order to build and run 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 for the same purpose. I continued to maintain the old batch scripts in the event that my application were to fail (it did not).
Features
- Commands are defined in an XML file. Commands can be added, edited, and removed without modifying the source code.
- Users are guided through a step-by-step "wizard-like" interface. Each step is configurable in the above mentioned XML file.
- Supports the asynchronous execution of commands, allowing a single command to be executed on multiple computers simultaneously.
- Uses the psexec command-line utility program to remotely execute commands on the computers.
Screenshots
Project start date: Feb 2015
Running stable since: Jan 2016
Description
This Java Swing application assists in managing the operating hours of the computer lab where I worked. The user enters the times that the area is closed to the public for classes, holidays and other events. They can then print and publish various materials related to the 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 handout listing the lab's closure dates was created by hand in Microsoft Word. This Microsoft Word document had to be manually re-created every couple of weeks to keep it current. 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.
Features
- 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
Screenshots
Project start date: Nov 2014
Running stable since: Mar 2018
Description
For many of the computer classes, each student is loaned a flash drive that is pre-loaded with several files relevant to the class. This application eases the repetitive process of copying the same group of files to many flash drives.
The user specifies the files they 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 the files and 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 have been processed.
Features
- Deletes all existing files from each flash drive before copying the new files, if desired.
- Prevents the accidental deletion of files by displaying an error if a flash drive is already inserted when the program launches.
- Safely unmounts each flash drive after files are copied to prevent file corruption.
Screenshots
Description
During the introductory computer basics class, two interactive websites are used to teach students how to use a mouse and keyboard and to practice their skills. The websites were originally obtained from another library. I improved upon them extensively.
The first website teaches students how to use the mouse and keyboard, which the class goes through together. The second website is an interactive skills test that students must complete on their own.
My contributions
- Added a timer system that records how long it takes the student 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 a 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 application responsiveness by combining several HTML pages into a single page JavaScript application.
- Made changes to the content of the exercises at supervisor's request.
Screenshots
Description
I wrote several WordPress plugins for the library's website.
- Computer Class Resources: Automatically generates a page containing a listing of the computer lab's downloadable class support materials. The plugin gets its list of materials from the file structure of a specific directory on the web server. Because the plugin'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 page on the website whenever class materials are added or removed.
- Computer Class Schedule: Populates a page containing the computer class schedule using data from an XML file. Using an XML file makes it easier for staff to update the class schedule every season.
- Library Branch Information Panel: Uses JavaScript to display 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 an important message for the public (for example, "Library closed due to the weather"). Publish and expiration dates can be specified, allowing notifications to be scheduled ahead of time and outdated notifications to be automatically removed.
Link: http://goo.gl/ufdMa4
Description
I created this lesson plan from scratch for teaching an adult class on Google Drive. I also taught the class three times per year. I used the computer lab's existing lesson plans as a guide for how to write my own.
OPEN SOURCE
Lead developer, ez-vcard
July 2012 - present
Technologies: Java, Maven, Git, JUnit, Mockito, Eclipse
- General purpose library for reading/writing vCard files
- 3,100 unique Maven Central downloads in December 2019
- Over 300 "stars" on Github
Lead developer, biweekly
June 2013 - present
Technologies: Java, Maven, Git, JUnit, Mockito, Eclipse
- General purpose library for reading/writing iCalendar files
- 6,400 unique Maven Central downloads in December 2019
- Over 250 "stars" on Github