There are three kinds of personal open source projects:
- projects that address a real problem,
- projects that were made to be put on a portfolio, and
- projects that serve to facilitate learning.
Most of my projects land in the “real problem” or “learning” category, but I dislike publishing them unless they are presentable.
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.
For a full list of my public projects, take a look at my GitHub.
Gcovr generates code coverage reports with GCC or Clang.
I didn't start the project, but am the current maintainer since early 2018. This allowed me to get experience which otherwise wouldn't be available to me:
Coordinating multiple contributors, and responding to bug reports from users. My other open source projects are all solo affairs and don't really have users. Gcovr was a very relaxed introduction into “people things” for me. It helped that there isn't any kind of looming deadline, and things just happen at the pace that they happen.
Working on a legacy codebase late in its life cycle. Gcovr was a bit untidy (and still is, to a degree). Refactoring the project, making it more approachable, and fixing bugs is something I actually enjoy doing.
The Async::Trampoline Perl module allows you to write trampolined functions with pseudo-async/await syntax. It is written in Perl, C++, and XS. read more
- released: 2014
- language: Perl
This Perl module bundles a bunch of helper functions for convenient use, without having to import them. I use it in most of my private projects. read more
- released 2017
- language: Perl
My dist.ini preferences for dzil. After a few Perl modules on CPAN I was fed up with copy & pasting my configuration, so I bundled it. read more
A tool/workflow to generate batch jobs with various configurations and execute them on a cluster via GNU Parallel. This tool was developed for evolutionary algorithm research. read more
- Data::ValidateInterdependent on CPAN
- Data::ValidateInterdependent on GitHub
- released: 2017
- language: Perl
This module helps validate large pieces of configuration that must be transformed and cleaned up, and where default values etc. might depend on other values. The validation process is divided into steps, where each step must produce the declared output fields and consumes validated or unvalidated input fields. E.g. I use this approach to process metadata for this blog.
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. I took multiple shots at this. The MarpaX::Grammar::Preprocessor was a spin-off from the first attempt. However, I found that I would need a deeper understanding of language implementation techniques to proceed. The second attempt used more Mustache-like semantics, and actually works (it powers the layout for this blog). Unfortunately, it's rather slow (using a recursive descent/Marpa hybrid parser), and is in no shape to be made public. Async::Trampoline was a spin-off from the parser.
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. ReStructuredText has an attractive semantic model, but braindead syntax (you cannot nest inline syntax, and block syntax has the uglies). I currently use Pandoc which adds many missing features like tables and mathematics to Markdown, without addressing the underlying issue around extensibility. I have attempted a sketch at a solution so often that it's now almost a hello-world program for me. I have tried attempts in Perl, C++, Haskell, Python, and Rust. Edit: actually, this document was compiled with a Rust-based prototype!
Some toy languages to learn about interpreter implementation. I used Perl and Golang as the host languages.
If you want to take a look at these projects or need some help with them, please contact me.