Michael Angstadt's Homepage


Last commit: 05/27/2024 How I get this date
Language: Java

A Java library for parsing and creating vCard files. It supports all versions of the vCard standard (2.1, 3.0, and 4.0), as well as xCard (XML-encoded vCards), hCard (HTML-encoded vCards), and jCard (JSON-encoded vCards).

I was a contributing member of the vcarddav and jcardcal IETF mailing lists, and am listed as a contributor in the following papers:

Last commit: 03/09/2024 How I get this date
Language: Java

A Java library for parsing and creating iCalendar files. It supports all versions of the iCalendar standard (1.0 and 2.0), as well as xCal (XML-encoded iCalendars) and jCal (JSON-encoded iCalendars).

Last commit: 04/11/2019 How I get this date
Language: Java

A desktop application for public libraries that aims to simplify the process of printing documents from patrons' smart phones.

Old Hobby Projects

Project Description
Sleet An SMTP server written in Java.
PHP-HAPI A PHP library for querying the API for a web-based game called Hyperiums. I also wrote a reference manual for the API.
Bemuled! A Java game similar to Bejeweled. Read the technical overview for a description of the game.
Chumby Viewer A Mac OS X dashboard widget that allows you to view the screen of your Chumby.
Thumb-Thru A Javascript utility that provides a simple way of displaying photos on your website.
Errata Contribution I read A Programmer's Guide to Java SCJP Certification: A Comprehensive Primer (3rd Edition) by Mughal and Rasmussen in order to prepare for the SCJP exam. I sent the authors of list of mistakes I found in the book and some made it into the online errata.
The Game of Life I wrote this program while reading the book The Art of Concurrency by Clay Breshears.
JavaRanch Flair A widget you can add to your webpage that displays the number of posts that you made on the JavaRanch forum.
Public Wifi Terms and Conditions Accepter A command-line Java program that automatically accepts the "terms and conditions" that are commonly shown on most public wifi networks.
PHP Getter/Setter Generator Generates getter/setter methods for each field on a PHP class.
Schema Validator Valides XML documents against an XML schema.
Data URI Generator Generates a data URI from an uploaded image.
Boolean Satisfiability (SAT) Solver Finds all solutions to a given Boolean Satisfiability problem.
The Xillor Archivist Downloads Hyperiums data files and imports the data into a database.
SudokuSolver A command-line program that solves Sudoku puzzles.
Intro to Game Programming project I created this as a project for a game programming class in college. Watch as alien invaders blow away helicopters in the city!

Using the Github commits API

Last updated: 6/20/2013

Some of the projects listed on this page are hosted on Github, a free, open-source code hosting service that makes it easy to share your code with other people. In order to get the date that my Github projects were last updated on, I use the RESTful Github API.

A listing of a project's commits can be obtained by sending a single HTTP GET request. No authentication is required, although the API requires that you include a User-Agent HTTP header with every request. The request URL contains the username of the project owner and the name of the project.


The response contains the twenty-five most recent commits sorted by date descending and is encoded in JSON. The sample below shows the data that my website parses from the response (the actual response is fairly large).
    "commit": {
      "committer": {
        "date": "2012-05-17T17:54:18-07:00",

The data is cached in an XML file so my website doesn't have to contact Github everytime this page loads:

<?xml version="1.0"?>
	<project name="PHP-HAPI" username="mangstadt"
		commit="2011/11/30 17:04:06" refreshed="2011/12/31 12:12:36" />
	<project name="The-Game-of-Life" username="mangstadt"
		commit="2011/06/18 09:11:53" refreshed="2011/12/31 12:12:36" />
	<project name="Public-Wifi-Accepter" username="mangstadt"
		commit="2011/06/01 07:42:34" refreshed="2011/12/31 12:12:37" />

The timestamp in the refreshed attribute is used to determine if the data on that particular project is stale or not. If it is stale, then the Github API is queried to get the most recent data and the data is saved back to the cache.

View the source

Back to top