Most but not all of the open source software
I develop or maintain can be found on my GitHub page.
The GitHub project homepages will all contain more detailed
information and documentation.
Below you can find a complete list of all of my public projects
with links to external repositories and documentation.
OCaml Software
My OCaml software generally uses Oasis for package
specification to make installation and package management
as easy as possible on all platforms supported by OCaml.
I also release OPAM
packages for that purpose.
Machine Learning
GPR - Gaussian Process Regression
Gaussian processes are a modern
Bayesian approach to machine learning for inferring
nonlinear functional relationships within data. GPR offers
a library and a command-line application to use some of the
latest computationally tractable approximations of Gaussian
processes for regression problems.
AIFAD - Automated Induction of Functions over Algebraic
Data Types
This application generalizes decision tree learning to
algebraic data types and can hence classify highly structured
data.
Scientific Computing
LACAML - Linear Algebra for OCaml
This library interfaces most of the BLAS
(Basic Linear Algebra Subroutines) and LAPACK
Fortran libraries.
GSL-OCaml - GSL-bindings for OCaml
This library is the work of Olivier Andrieu.
I only repackaged it using Oasis, made it a packed library,
and fixed some tiny issues. These changes will hopefully find
their way into the original distribution soon.
Type-driven Code and Protocol Generation
Type_conv - Generating Code from Type Definitions
This library can be used in
conjunction with the OCaml preprocessor Camlp4
to generate code from type definitions. It is used,
for example, by Sexplib and Bin_prot to generate code for parsing
human-readable and binary protocols respectively.
Type_conv, most of which I have developed
at Jane
Street Capital, is now available as the Jane Street
Type_conv library.
Sexplib - S-expression Converters Derived from Type Definitions
This library provides numerous functions for parsing and
pretty-printing S-expressions. A key feature is its use of Camlp4
and Type_conv to generate S-expression
parsers and pretty-printers automatically from OCaml type
definitions.
Sexplib, most of which I have developed
at Jane
Street Capital, is now available as the Jane Street
Sexplib library.
Bin_prot - Binary Protocol Converters Derived from Type Definitions
This library provides numerous functions for
reading and writing highly efficient and safe
binary protocols. A key feature is its use of Camlp4
and Type_conv to generate such
readers and writers automatically from OCaml type definitions.
The generated code will not crash on illegal input, can
be enriched with user-defined semantic checks, and is fast
enough to saturate gigabit connections for both reading and
writing of highly structured values.
Bin_prot, most of which I have developed at
Jane
Street Capital, is now available as the Jane
Street Bin_prot library.
Database Connectivity
SQLite3-OCaml - SQLite3 bindings for OCaml
This OCaml library interfaces version 3 of the SQLite3 client C-library.
The first version of this library was written by Christian
Szegedy and has subsequently been heavily modified with
numerous bug fixes and feature extensions.
PostgreSQL-OCaml - PostgreSQL bindings for OCaml
This OCaml library interfaces the PostgreSQL client
C-library. The first version of this library was written
by Alain Frisch and has
subsequently been heavily modified with numerous bug fixes
and feature extensions.
String Processing
PCRE-OCaml - Perl Compatibility Regular Expressions for
OCaml
This OCaml library interfaces the C-library PCRE. It provides efficient
matching, substitution, and splitting of strings, similar to
regular expression functionality in Perl.
Data Structures and Programming Patterns
RES - Resizable Arrays and Strings
RES provides implementations for automatically resizing arrays
and strings.
POMAP - Purely Functional Partially Ordered Maps
This library provides functions for creating and
manipulating maps from partially ordered keys to associated
data in a purely functional way.
CFG - Context-Free Grammars
This library provides
functions for creating and manipulating context-free
grammars in a purely functional way.
Pure-fun - Purely Functional Data Structures
Pure-fun is a translation of Chris Okasaki's Purely
Functional Data Structures from SML to OCaml.
ocaml-prog-pats - Programming Patterns for OCaml
This project contains OCaml "design patterns", programming
tricks, and similar that I have come across in the past.
Build Tools
ocaml-makefile - A generic Makefile for OCaml
This generic Makefile contains numerous flags and build
targets for building OCaml applications and libraries with
little effort. It should scale from small to medium-sized
projects. This tool is mature and stable, but is only
in maintenance mode now. More modern build systems
like OMake
or the standard OCaml build tool ocamlbuild
should be considered instead, since traditional make does not
scale to complex, large systems.
LambdaProlog
LambdaProlog
is a higher-order logic programming language.
Its features like HOAS (Higher-Order Abstract Syntax),
higher-order unification, and intuitionistic implication make
it particulary suitable for representing and manipulating
programs in a highly declarative way. Do you need a function
for determining whether some arbitrary data structure contains
another arbitrary one? LambdaProlog can do just that in one
short, type-safe line of code:
contains T ST :- T = F ST, not (pi x\ F x = T).
Program Transformation
Fun-trans - Transformation of Functional Programs
I really enjoyed my programming
experience with LambdaProlog during my Master's
thesis. Fun-trans is the implementation of the
transformation framework described therein.
Misc
Vim
Vim Files
Vim is my editor of choice,
and I maintain a couple of associated configuration files
(e.g. for OCaml syntax highlighting). These files and other
plugins I frequently use can be found here: