Software Development
Desktop and Full Stack Web Development

Full Stack Web
Back End
- Python
- Django
- Django Ninja or Django-Rest-Framework for JSON APIs
- NginX
- Docker & Compose
- AWS or DigitalOcean
- Wagtail for CMS
Front End
- HTMX
- missing.css
- Bootstrap5
- Vanilla JS and CSS
Projects
- Web App for visualizing and editing TEI XML encoded textual collation files.
- Website and CMS for non-profit organization
- This personal website and blog.
Desktop
Most of my desktop tools and GUI applications are written in Python, though I am increasingly moving toward C# for cross-platform desktop GUIs.
GUI Tech
- Python
- Qt
- Tkinter
- Progressive Web App
- .NET MAUI
Projects
- Criticus: A collection of GUI apps for managing textual data from transcription to collation to analysis and for improving interoperability between the best existing tools. A few (of many) features:
- Convert TEI transcriptions into JSON files suitable for the ITSEE Collation Editor
- Configure and launch the Collation Editor.
- Provide a GUI interface for the open-cbgm
- Export a TEI XML collation file as a Microsoft Word DOCX file print apparatus.
- Convoy: Resumeable file copying and directory diff'ing for many large files when unexpected interruptions are likely.
- C# and .NET MAUI
- This was created because I was having trouble transferring irregular and large directories to a RAID over WiFi. Network issues caused the transfer to fail, or worse, to silently drop one or two small files.
- Redub: Rename a directory of images according to a previously generated Excel spreadsheet. Has options for renaming in place or copying to a different directory.
CLI
- MarkdownTEI: Converts a specified superset of Markdown to TEI XML transcriptions.
- Python library for creating a text adventure: I created this so that my kids could practice Object-Oriented programming.
More projects on my GitHub
Criticus

Criticus is a suite of (currently) eleven discrete tools related to the creation, editing, and analysis of ancient manuscript textual data. Several modules are for working with TEI, which is an international transcription format. It is nearly impossible to use any modern computer tools for textual processing without using TEI.
- Plain Text to Json. A relatively simple module for converting plain text files of a particular structure into JSON files that are accepted by the ITSEE Collation Editor. The input files for the Collation Editor must be single verse files, so Criticus will create many JSON files from a single input file and place them into the appropriate directory structure.
- Get Plain Text from JSON. A convenience module that essentially reverses the above module. A tokenized JSON file is parsed, and the plain text transcription is returned.
- Markdown to TEI. Converts a superset of Markdown markup language into TEI XML.
- TEI to JSON. Converts an entire TEI transcription file into many verse-length JSON files and distributes them into one directory per witness along with necessary metadata files. This is a difficult task because of how flexible the TEI format can be. It is becoming increasingly reliable, but unexpected nestings in the TEI can lead to errors.
- Combine Collation Files. The ITSEE Collation Editor is best used one verse at a time, which results in the creation of many single-verse collation files. This module safely combines the XML collation files into a single chapter or book length file more suitable for analysis.
- Reformat Collation File. In order to use an XML collation file with the open-cbgm, output from the ITSEE Collation Editor must be reformatted. A few other niceties are performed by this module, such as automatically marking textual flow from parent readings to subreadings, and assigning unique names to readings (which the ITSEE Collation Editor does not enforce).
- View TEI Transcriptions. TEI transcriptions are not very human readable. The IGNTP and ITSEE have created stylesheets that allow TEI transcriptions to be viewed in a browser. This module adds a stylesheet to the user's transcription directory and starts a local web server for browsing and viewing transcriptions locally.
- Configure Collation Editor. The ITSEE Collation Editor requires a JSON configuration file to be set correction prior to collation. This module provides a convenient graphical user interface for setting the configuration. This module can also start the Collation Editor, which must be run using a local web server.
- Analyze Collation. This module returns lists of readings that meet the search criteria. There are three optional fields available: (1) All of the indicated witnesses must agree; (2) Any of the indicated witnesses must agree; and (3) None of the indicated witnesses may agree.
- open-cbgm Interface. Joey McCollum's open-cbgm has made the CBGM available to anyone who has collected their own input data. The open-cbgm is a command line interface, so Criticus has provided a graphical user interface for some of the open-cbgm's modules.
- Export Collation to DOCX. Criticus can export a TEI XML collation file as a Microsoft Word DOCX file suitable for print. The output resembles an ECM-styled critical apparatus.
Apparatus Explorer

I created the Apparatus Explorer for visualizing a TEI XML digital critical apparatus, which will almost certainly be the output of the ITSEE Collation Editor. It has grown since its beginning to not only visualize the collation file, but it can now be used to add genealogical relationships between readings, edit the reading types, and edit/add/remove additional variation units. Additional witnesses can be added, or the readings can be altered. The Apparatus Explorer provides an intuitive interface for users who would rather not edit the XML file directly.
Future of Apparatus Explorer
I have many plans for feature additions to the Explorer. First among these is to consume TEI XML collation files, rather than updating the XML file. By consuming the collation file and populating a database, Apparatus Explorer will be able to do much more since it is not limited to that which must be serialized into XML. For example, users will be able to store notes for each reading and retrieve a revision history. Then, on demand, Apparatus Explorer will generate a new XML file for the user to download. It is also my plan to move the open-cbgm interface into Apparatus Explorer to enable the visualization, editing, and analysis to be grouped in one place.
For more on the Apparatus Explorer, see these (somewhat dated) blogs that go into more detail: Introduction to the Apparatus Explorer, Explanation of the Editing Features.