ResumeLast updated: August 18, 2018
- Experienced Java programmer with ten years of software development experience.
- Passionate about programming in a clear, concise, and maintainable fashion.
- Engaging teacher with outstanding communication skills.
- Can communicate technical concepts to non-technical people.
Assistant Electronic Resources Librarian & Electronic Resources Technician, Montgomery County-Norristown Public Library (Norristown, PA)
June 2014 - present
- Developed client-side Java applications to aid in computer lab operations.
- Helped redesign and maintain library's WordPress-based website, including development of WordPress plugins.
- Taught classes & developed lesson plans on computer literacy, Microsoft Office, Google Drive, WordPress.
- Responsible for maintenance of public/staff computers and server infrastructure (since Jan 2017).
- Ordered, configured, and deployed new computers; extensively documented all work.
- Administered staff and volunteer work schedule.
- Assisted library patrons with technical questions & resolved patron conflicts/issues.
Instructor, Methacton High School (Norristown, PA)
Feb 2017, Oct 2017, Jan 2018
- Taught adult night classes on Microsoft Word, PowerPoint, and Excel.
Volunteer, Montgomery County-Norristown Public Library (Norristown, PA)
December 2013 - June 2014
- Shelved returned books.
- Contributed to library's Facebook page.
- Provided one-on-one computer help to library patrons.
Software Developer, Siemens Medical (Malvern, PA)
October 2012 - May 2013
Technologies: JavaSE, JavaEE, GWT, CSS, ClearCase
- Responsible for maintenance of web-based application used by doctors to record medical information.
- Practiced agile development, test-driven development, and self-documenting code.
Software Developer, Penn Mutual (Horsham, PA)
June 2011 - September 2012
Technologies: JavaSE, JavaEE, MyBatis, JUnit, Maven, Mule, XML, XSLT
- Added Maven support to existing projects.
- Developed services for processing large amounts of XML data.
Software Developer, LifeShield Security (Yardley, PA)
December 2010 - May 2011
Technologies: PHP, PHPUnit, JavaSE, JUnit, Velocity, MyBatis, JDBC, SQL
- Wrote backend Java code to perform maintenance tasks on home security system contract data.
- Designed PHP-based web services.
Software Developer, MEDecision (Wayne, PA)
August 2009 - June 2010
Technologies: JavaSE, JavaEE, MyBatis, PHP, Zend Framework, XML, SOAP, HealthVault
- Maintained web-based healthcare software by fixing bugs and adding new features.
- Worked extensively with Microsoft HealthVault platform; successfully demoed work at multiple healthcare conferences.
- Developed web service for IHE medical industry standard; passed standardization test.
Software Developer, JBISoft (Fairfax, VA)
October 2008 - March 2009
- Maintained web-based software product used to intelligently index information and plot it on a map.
Consultant, Platinum Solutions (Reston, VA)
July 2007 - September 2008
- Worked on Java-based web applications.
- Exposed to entire life-cycle of project, including requirements analysis, development, debugging, documentation, and deployment.
- Obtained Top Secret Clearance.
Application Programmer, Stanley Associates (Kearnysville, WV)
August 2006 - July 2007
Technologies: Visual Basic 6
- Maintained U.S. Coast Guard application that managed fleet and law enforcement information.
- Obtained Secret clearance.
June 2003 - May 2006
Support Desk Intern, Pennsylvania State Employees Credit Union (Harrisburg, PA)
Solved technical problems of customers and employees, monitored banking servers.
Software Development Intern, Advanced Automation Associates (Exton, PA)
Developed factory automation software using Visual Basic 6.0, SQL Server.
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:
- 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).
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.
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.
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).
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.
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.
- Added a timer system which tells students exactly how long it took them to complete the test. This was extremely useful because we required them to complete the test in a certain amount of time.
- Implemented various measures that prevents students from skipping ahead without completing the various exercises.
- 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.
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.
- 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.
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
- General purpose library for reading/writing vCard files.
- Over 32,000 Maven Central downloads from Feb 2017 through Mar 2018.
Lead developer, biweekly
June 2013 - present
Technologies: Java, Maven, Git, JUnit, Mockito, Eclipse
- General purpose library for reading/writing iCalendar files.
- Over 30,000 Maven Central downloads from Feb 2017 through Mar 2018.
CompTIA A+ (July 2017)
Sun Certified Web Component Developer 5.0 (June 2010)
Sun Certified Java Programmer 6.0 (July 2009)
B.S. Computer Science (May 2006)
Shippensburg University (Shippensburg, PA)
- Summa cum laude
- Honors Program
- Study abroad (Leicester, England)