I haven't written much about my personal programming projects yet. Most are incomplete or have been shelved. That's because I start these projects with the goal of trying out a new concept.

Also, following through with proper execution is hard. Most effort in a software project isn't the programming, but the research, testing, documentation, and packaging that's necessary to move from a throwaway hobby project to a shippable product others can use. That's effort I can't justify when it takes time away from my job or my studies. And I won't ship a half-assed product.

If, despite all that, you want to take a look at these projects or need some help with them, please contact me.

Util::Underscore (Perl module)

This module is a collection of various helper functions. It solves two problems: (1) I like fully qualified subroutine names to avoid namespace pollution. (2) I don't like having to remember which util module contains a given function. Util::Underscore therefore aliases them into the _ namespace so that they can be invoked like _::any { $ > 0 } @nums. There are also a couple of new additions like _::croakf $pattern, @args as a shorthand for _::croak sprintf $pattern, @args, and various safe type checks like _::is_array_ref or _::can $object, $method.

The code for this module is not spectacular since it mostly consist of aliases. However, I expended significant effort to carefully document and test all functions. Where I just aliased the functions the tests only cover basic cases, but should be enough to prevent accidental breakage when an upstream module changes. The documentation is rather formal, and tends to surpass the original docs in quality. My experience writing these docs has lead to the blog post Good API documentation.

Unpublished projects

Various other unpublished or unreleased projects include:

  • The Perl module MarpaX::Grammar::Preprocessor, a syntax extension for Marpa::R2 SLIF grammars. Status: mostly ready for a release, but requires more design for a blocking feature, some refactoring, and another quality focus. It should already be usable as alpha software.

  • The Perl module MarpaX::DSL::InlineActions a predecessor or MarpaX::Grammar::Preprocessor. It was a far more ambitious project to offer a completely separate interface to Marpa::R2, but I lost interest while I was trying to port it to the low level Marpa API. It should be somewhat usable for prototypes, but not for production-grade parsers.

  • A text templating language, roughly imitating Liquid. It was designed with cross-language compatibility in mind with a reference implementation in Perl, but is currently on my backlog. The MarpaX::Grammar::Preprocessor was a spin-off from this project. While working on this project, I realized I needed a deeper understanding of language implementation techniques. I will probably start a rewrite within the next couple of years.

  • A lightweight markup language, similar to Markdown but with a richer semantic model and with extensibility in mind. Markdown (as standardized by CommonMark) lacks many crucial features which I need for nontrivial articles on this website or as a LaTeX substitute in my studies. I currently use Pandoc which offers many missing features like tables and mathematics, without addressing the underlying issue around extensibility. I tried prototyping the semantic model in Perl, C++, and Haskell, but have now made the most progress with Python.

  • Some toy languages to learn about interpreter implementation. I used Perl and Golang as the host languages.