My Projects

Here is a small sampling of some of the projects that I have developed and am working on.

Desktop Applications


    • Drag and drop PDF files onto this app to run optical character recognition on them. Produces both plain text and searchable PDF output.
  • PDF to Spreadsheet Pro

    • Converts PDF files with tabular data into spreadsheets.

Mobile Applications

Development Tools



Xataface is a PHP application framework that I built originally in 2005 to simplify the process of building data-driven applications. It allows you to set up a fully-functional database application with only a few lines of code and it gives you the flexibility to customize the application’s look and behaviour in any way you choose.


The following is a selection of modules that I have developed to extend the functionality of Xataface.

  • Tagger Widget
    • Adds a widget that allows you to add/remove related records directly inside the new/edit form.
    • Github Repo
  • Email
    • Adds a “Send Email” action to selected tables that allows you to send mail-merge emails to any found data-set in the application.
    • Github Repo
  • Translation Memory
    • Adds translation memory and improved translation form for Xataface applications that are configured to be multilingual.
    • Github Repo
  • Google Maps Widget
    • Adds a “map” wiget that allows you to select a map location and view port in the edit form that will be displayed on the view form – and accessible from the database.
  • XLS Export
    • Export data sets in XLS format (since Excel sucks at importing CSV properly)
  • CKeditor Widget
    • Adds a CKeditor (WYSIWYG HTML editor) widget for use in applications.
  • Summary Reports
    • Generate aggregate reports on result sets. Useful for finding averages, sums, and other aggregate data.
    • Github Repo
  • Switch User
    • Allows you to create a mechanism for administrators to log in as other users in the system.
    • Github Repo
  • Depselect Widget
    • Adds a “select” widget that can be dynamically linked to other widgets so that its options change depending on the values selected in other fields of the form.
    • Subversion Repo
  • CAS Authentication
    • Adds support for Yale’s Central Authenticaiton Service
  • HTTP Authentication
    • Adds support for basic HTTP authentication
  • LDAP Authentication
    • Adds support for LDAP authentication
  • Filemaker Export
    • Export result sets as Filemaker XML that can be easily imported into a filemaker database. (Haven’t used this since Filemaker 7, so it may require some tweaking to work on newer versions).
  • Shopping Cart
    • Adds shopping cart functionality to Xataface apps. It allows you to treat some records as products, that can be added to a cart and purchased.
  • Ajax Upload Widget
  • Calendar
  • Checkbox Filters
    • Adds a block that can be used to filter the current result set using checkboxes.
  • Date Picker
    • Adds the jQuery datepicker widget to select dates on the edit form using a calendar interface.
  • HTML Reports
    • Enables administrators of a Xataface application to design reports using a WYSIWYG HTML editor. These reports can then be run by other users on any found set in the prescribed table of the report.
    • Github Repo
  • PDF Reports
    • Enables administrators of a Xataface application to design PDF reports using a WYSIWYG editor. Reports can then be run by other users on any found set in the prescribed table of the report.
  • Scaler
    • An output caching module for helping deal with extreme loads.
  • UITK
    • A javascript toolkit with some useful user interface abstractions.
  • Test Runner
    • A module for writing and running Xataface unit tests – both PHP and Javascript tests.
  • DataGrid
    • Adds an editable grid view to a Xataface application.


SWeTE is a reverse HTTP proxy that provides dynamic inline translation. This means that you can easily convert a website from one language into another by simply setting up a SWeTE proxy site with a translation memory.


Codename One

I have been working with Codename One quite a bit since 2012. I have submitted a number of patches and have implemented functionality in the core. I have also developed a number of libraries for it. A small sampling of those libraries follows:


  • CN1ML Netbeans Module
    • Netbeans module that allows you to design templates for your Codename One UI components using a variant of HTML.
  • Offline iOS Build Tool
    • Netbeans module that allows you to build your Codename One applications for iOS offline.
  • CN1 Sockets
    • Cross-platform sockets library for Codename One
  • CN1 Data Access Library
    • Implements data access objects for Codename One to make it easier to interact with SQLite databases.
  • CN1 Offline Maps
    • Allows you to bundle map tiles with your application so that your app can browse the map while offline.
    • Requires companion application CN1TileConverter to generate the tiles.
  • CN1 aChartEngine
    • A library for drawing charts in Codename One.
    • You can check out the demo application for sample source.
  • CN1 FontBox
    • TTF Font support for the CN1Pisces library.
  • CN1 Pisces
    • A 2D graphics library for Codename One.
  • CN1 JSON
    • An alternate JSON library.
  • CN1 JTar
    • Library for reading and writing tar archives.
  • CN1 Regex
    • Regular expression support for Codename One
  • Mirah Macros for Codename One
    • A project that includes Mirah language macros that simplify Codename One app development.

Ramblings about Xataface, Java, and other software development issues