Main Software Downloads Other

Software made here

This page lists software and software documentation that I wrote or co-wrote, often using the OCaml programming language. Most of the projects are free software.

See also my personal activity on GitHub as myself (mjambon) and within MyLife (MyLifeLabs).

Software documentation
Adjustable type definitions for data exchange An introduction to ATD, biniou, yojson and atdgen.
How to customize the syntax of OCaml, using Camlp5 A Camlp5 tutorial illustrated with many examples and programming guidelines.
Software
All of the following packages are under development or maintained.
Atdgen Atdgen generates optimized OCaml boilerplate code for JSON and biniou IO from type definitions.
Atd Atd is a type-definition syntax designed for cross-language interoperability.
Yojson Yojson is a library for data interchange using the JSON format. Supersedes json-wheel.
Biniou Biniou is a binary data format designed for speed, safety, ease of use and backward compatibility as protocols evolve.
Cppo Cpp for OCaml
Nproc Multi-processing library providing process pools for Lwt.
dutop disk usage top.
sampl like "head" or "tail" but picks 10 random lines from large data files.
wcl "wc -l" for the impatient, with estimation of total line count as it progresses.
Easy-format Easy-format is a functional layer relying on the standard Format module to produce indented text.
Mikmatch Mikmatch is a package that extends the pattern matching syntax of OCaml with regular expressions, thus providing unique shortcuts for text manipulation in OCaml programs together with safety, readability and efficiency.
Camlmix Camlmix is a general purpose preprocessor using OCaml as a language to fill the gaps of templates.
ocamlscript ocamlscript compiles scripts into native code for optimal speed and ease of use. [Camlp4 3.10 port: 3.10.1]
Caml2html Caml2html is a program that converts OCaml source files into colored HTML pages. Also available as a library. Originally written by Sébastien Ailleret.
json-wheel (superseded by Yojson) json-wheel is a library for data interchange using the JSON format.
json-static (superseded by Atdgen) json-static is a syntax extension that goes on top of json-wheel and translates type definitions into converters from/to untyped JSON data, much like col does for CSV files.
Asciipict converts images to ASCII art! See for example martin.png. Download asciipict.tar.bz2 or asciipict.tar.gz
Unpurple unpurple removes purple fringing from digital photos. See examples.
Upnym Upnym is a web application that helps pick a name for a new brand. It offers as-you-type suggestions and name availability lookups for .com, Facebook and Twitter. [closed source]
Dormant or unmaintained software
Col This package provides a syntax extension for easier manipulation of flat records, objects or tuples and conversions from/to CSV files for your favorite spreadsheet or plotting program. The documentation is not complete yet but you can help. Old version for OCaml 3.09: col-1.1.1.tar.bz2 or col-1.1.1.tar.gz [license | changes]. Col is now maintained by Philippe Veber.
Biblio.php Biblio.php is a MediaWiki extension allowing to insert bibliographic references into wiki pages by only giving a reference (PMID or ISBN).
Smaller programs
Tophide Hides toplevel values whose name starts with an underscore. Primarily for use with Camlp4 syntax extensions. Download tophide-1.0.0.tar.bz2 or tophide-1.0.0.tar.gz [license|documentation|development].
Camlmix Toolbox The Camlmix toolbox is a collection of short code samples. They may serve as a source of inspiration for Camlmix users and beginners using OCaml as a scripting language.
Hashtbl2 Hashtbl2 is useful for using hash tables as a clustering engine, i.e. for grouping several objects under the same key, retrieving a non-redundant list of keys in one pass, and much more. View the documentation, hashtbl2.mli, hashtbl2.ml, or download hashtbl2.tar.gz. License: Public Domain.
Opaque This short module provides a trick to force the compiler to distinguish different kinds of ints or strings. Useful in complex programs with lots of indexed containers such as hash tables. View the documentation, opaque.mli, opaque.ml, or download opaque.tar.gz. License: Public Domain.
Latin1 Provides functions for comparing ASCII or Latin1 (ISO 8859-1) characters and strings according to the alphabetical order like in the dictionaries. [view|save]. License: Public Domain.
Gstring An example of a mixed mutable/immutable string type, and an interface to a few basic functions from the standard library. [view source|browse files]. License: Public Domain.
Phys Polymorphic hash table using physical equality to compare keys. [view source]. License: Public Domain.
Infix Provides support for alphanumeric infix operators in OCaml. Now available through P4ck. [view|save]. [Camlp4 3.10 port: no]
Forin Provides a foreach-style replacement of List.iter. Now available through P4ck. [view|save]. [Camlp4 3.10 port: no] License: Public Domain.
Forstep Provides an extension of "for" loops with an optional "step" parameter. Now available through P4ck. [view|save]. [Camlp4 3.10 port: no] License: Public Domain.
Repeat Provides a tiny extension of OCaml: "repeat" loops. Now available through P4ck. [view|save]. [Camlp4 3.10 port: no] License: Public Domain.
Memo Provides a syntax extension for functions with memoization. Also available through P4ck. [3.09-compatible view|save] [3.10-compatible view|save]. License: Public Domain.
TryFinally A small syntax extension which provides a "try ... finally ..." construct. Available through P4ck. [3.09-compatible: view|save] [3.10-compatible: view|save]. License: Public Domain.
Bounds An incredibly long syntax extension which allows out-of-bounds accesses of arrays and alike to be reported with the exact location in the source code. Available through P4ck. [README|view|file|archive|tree]. Camlp4 3.10 port: not needed for fresh code since ocamlopt 3.10 can dump stack backtraces. Andrew Schein offers a syntax extension for backward compatibility. License: BSD-style.
Camlp4find Camlp4find is a shell script that can be used as a replacement for the camlp4o or camlp4r commands and takes advantage of syntax packages that were installed with ocamlfind. [Camlp4 3.10 port: no] License: Public Domain.
Hackish amusements
ICFP contest 2004 Some documentation about my participation in the ICFP programming contest 2004.
Quines A quine is a self-reproducing program. It generates a copy of its own source code as its complete output. Here is a small one in OCaml: quine.ml. Another quine is here, although it only works when executed with ocaml q.ml and outputs to stderr... Bonus: a true quine written in Bourne Shell (compact form). Meta-bonus: a complete Camlmix quine quine.camlmix.
C/OCaml Hello This is a "Hello World!" polyglot program which is written in C and in OCaml at the same time.