Monika Mevenkamp

Princeton University

Since joining Princeton in 2014, I have worked on several projects for the University Library. I take care of two repository web sites, DataSpace and OAR , both backed by the DSpace open source software, written in Java with a UI implemented by JSP pages and data stored in an Oracle database, Solr indices, as well as the file system. In each case I modified the system in terms of Java code, user interface, and maintenance scripts. I have been an active member of the DSpace community, contributing code, as well as taking part in working groups. At the Open Repositories Conference in 2016, I gave a developer track demonstration about the JRuby gem I created to script DSpace objects with ruby code.

In connection with Princeton’s push towards making faculty publications openly accessible, I was part of a group, mostly made up of librarians, that developed a workflow for collecting, vetting, and publishing articles on the web. I implemented a workflow prototype tool to evaluate Ruby on Rails, Solr and Samvera as a possible software stack. Additionally, I implemented a waiver application tool, now used by faculty, also in Ruby on Rails with a Solr index and a MySQL database for persistence. It includes a REST API that enables dynamic population of form data via JavaScript as users type text into a search field. Code deployment with Capistrano facilitates frequent revisions. RSpec-based test cases enable quick validation of code changes.

Princeton undergraduates are required to write a senior thesis for graduation. Since the class of 2013 their theses are collected in DataSpace. To this end, shortly after I joined Princeton, I modified the submission workflow for the relevant collections in DSpace. More recently I researched options for an application that would allow students to self-submit their thesis, department administrators to manage and review them, as well as provide a mechanism to push approved submission to DataSpace. My project partner at the library and I developed requirements based on user research. We settled on using the Vireo open source application from the Texas Digital Library as a basis, which I modified to suit our requirements. The new submission system runs in the Amazon cloud on an EC2 instance using an RDS database server. We will terminate the production EC2 instance as well as the RDS server as soon as theses have been imported into DataSpace. This is the first such cloud application used in production within Princetons IT department.

I wrote a python function that starts or stops tagged EC2 instances based on parameters. During development I scheduled this function via CloudWatch events, such that my development EC2 instances automatically started in the morning and shut down at night. In another AWS related project I developed python code that manages ALIAS entries in Route53 for the purpose of managing domain names of EC2 servers.

Emory University and Educopia

During my 5 years at this position I was involved in strategic planning, software and systems design, development, and support, taking the lead role in many areas. I am a coauthor on two chapters in 'A Guide to Distributed Preservation' published by Educopia, and I gave the main technical presentations at annual meetings.

MetaArchive runs a network of servers, that ingest data from the web via HTTP-GET-based crawls onto their disks with the goal of preserving multiple 'healthy' copies of important electronic documents. UNIX servers, located at MetaArchive member institutions, are equipped with the LOCKSS open source Java software developed at Stanford. During my tenure the network grew from a purely American network to include locations in the UK, Spain, and Brazil.

Shortly after joining, I was invited by the iOCKSS team to help extend their Ruby on Rails monitoring tool. I designed and implemented the conspectus, a Ruby on Rails tool, now central to MetaArchive operations. It provides parts of network configurations in response to XML get requests. It integrates status information provided by a RESTful API, that I added to the LOCKSS monitoring tool and interfaces through AJAX/jQuery with a legacy PHP tool. The conspectus is highly configurable, with CSS files for different skins and global settings defining integration points with outside tools. To enable finer grained status reports and to simplify the creation of annual member reports, I implemented a set of Python/Django scripts. I augmented monitoring with Nagios, using standard as well as custom plugins, interfacing with the monitoring and reporting tools I developed.

Georgia Tech

While I worked at Georgia Tech I supported the library's DSpace based institutional repositories. Among other projects I integrated Google Analytics into Georgia Tech's open access repository, SMARTECH, extended its statistics capabilities, and generally supported and adapted the software to library needs. In my other role I supported the library's archives department in its move towards using the Archivist Toolkit.";

Algorithm Animation

Princeton high school's computer science teacher mentioned on one of my regular visits, that animation helps students understand algorithms. Nonetheless, many students can not translate this understanding into code, especially where recursion is involved. I developed animations of mergesort (and a slightly improved version), a recursive factorial computation, and a permutation enumerator. In each case the animation shows the codes execution and related data changes side by side.

First I implemented the algorithms in Python, annotated the code with print statements that traced their actions in JSON format. I designed JavaScript classes for showing the data, code snippets, a stack of code snippets with push and pop methods, a class representing the action trace as it is printed by the Python routines. The action tracer allows step, run, and stop actions.

You can see the animations HERE and browse the html, css, JavaScript, and Python code THERE.

iPhone App

In February, 2012, I released my first iPhone Application. It is a proof of concept application showcasing the Concorde TSP code, developed by Appelgate, Bixby, Chvatal, and Cook.The code computes the optimal solutions to traveling salesman problems with many nodes.

The App serves as a companion to the Book In Pursuit of the Traveling Salesman by William Cook. It animates the solution progress for problems it reads from the Internet, generates randomly, or defines based on locally bundled data.

A newer version of the App is available for free from iTunes. Please try it and send us feedback.

QSopt Library

QSopt is a linear programming software package. It is written in the C programming language. I ported it to Windows/Visual-C++ and Java. I also wrote graphical user interfaces for this library and helped to develop its website.


The Concorde graphical user interface can be used to apply the Concorde TSP Solver to a specified set of cities as well as several edge generating algorithms. It is implemented in Visual C++ and available for download to Windows users.

MCM Theater

MCM Theater is a Java package that I developed. It provides an easy to use class library for an introductory Java programming class. I used it in a Mini Course at Galloway for 8-th graders who developed small screensaver programs.;

The companion web site MCM Theater makes heavy use of Java Applet, a technology that unfortunately did not age well.

Princeton High Google Site

When my children entered the Princeton high school, I found the schools web site disorienting and I tried to come up with ideas to help inform parents in a more user friendly fashion. Initially I considered using the Drupal CMS. While it offers great flexibility and many features, Drupal requires at least a minimum of tech support, which precluded its use.

In the end I settled on building a Google Site. Once the site layout with a Google Calendar, Announcements, and a few dedicated pages stabilized, upkeep mostly consisted of posting announcements and updating the calendar. The most difficult piece became finding relevant information and rewriting it for the web. I maintained the site from its inception in 2009 to the 2012/13 school year, when I trained my replacement to take over.

By 2011 all other PTOs in the school district started a google site, each mirroring the high school site's design. The district launched a site redisgn in the 2012/13 school year, which incorporated several of the PTO site's popular features, among them a search button, announcements on the front page, and google calendars.

Through the site I got in touch with the school's Director of Service-Learning and Experiential Programs. Discussing with her the administrative aspects of managing the service projects of about 350 10th graders, as well as the schools tutoring program, I introducing her to Google Forms and Google Group Mailing Lists, tinyurl, ...

Math Practice Sheets

When my son was supposed to practice multiplication tables I developed a web page that simply generated itself on the fly. I continued working on building sheets for various math topics. Some of them are accessible through the Math Practice Sheets link.

This is now many years ago .. but the sheets still work and may still be useful to someone.