In the fine tradition of hackerdom, my dot files are available for browsing.


Here’s a list of all my Haskell packages.

Macintosh OS X

Polytonic Greek Keyboard Layout [tarball]

Unsatisfied with the few polytonic Greek keyboard layout options out there, I decided to make my own. This one uses US English qwerty layout instead of the Greek keyboard layout; it lets you enter letters by their standard transliterations (e.g. ph (as well as f) will generate φ); it uses the standard Alt+Key combinations for the diacritics; it automatically converts to word-final sigma and makes word-initial vowels have the smooth breathing mark;… In short, I aim for it to be the most sophisticated and easy to use keyboard layout for polytonic Greek. (Note, the README file included in the tarball is in UTF-16. This should open without mojibake in TextEdit.)

Current Projects

Chiastic Lambda-Calculus (2010–present)


Hakaru [GitHub] [Hackage] (2015–2016)

A probabilistic programming language embedded in Haskell. Hakaru is fully measure theoretic, performs conditioning by disintegration, uses Maple to simplify measures, and provides multiple interpretations of programs (e.g., sampling and expectation).

Previous Projects

Built-to-Order BLAS (2014)

The BTO-BLAS project is a compiler for a domain-specific language for linear algera programs, seeking to automatically generate efficient BLAS-like operators without relying on the BLAS API itself. Prior work focused on low-level optimizations like loop fusion. My work enhances the compiler by adding high-level optimizations based on algebraic equalities.

Posta (2010–2013)

A part-of-speech tagger and CCG supertagger written in Haskell. Posta uses higher-order HMMs and related graphical models, and focuses on providing a high-performance library with a well-defined interface, instead of focusing on the commandline interface as most other taggers do. The research interest is developing online and interactive algorithms, as well as exploring algorithmic optimization in a functional setting.

HLTDI L3 (2009)

With the current explosion in the quantity of information and in the means to access it, much of the world has been left behind because the information is not in a language that they understand. The L3 project (“Learning Lots of Languages”) has the long-term goal of developing a system to translate to and from many under-represented languages of the Global South and (less ambitiously) of creating tools to be used in information retrieval and computer-assisted language learning with these languages.

We’ve reimplemented a constraint-based dependency parser for XDG in Python (the original was in Mozart/Oz) and are adapting it for natural language generation and machine translation.

Joshua (2008–2009)

A scalable parsing-based statistical machine translation system written in Java whose goal is to create a coherent and configurable end-to-end machine translation system (as opposed to current state-of-the-art systems which connect diverse components with a morass of shell scripts, making it difficult to reproduce experimental results).

Dyna 2 (2007–2009)

A weighted-logic programming language for natural language processing and dynamic programming. Major features include strong typing (including non-linear and recursive types), modules for separate proof universes, and priority-based mixed forward-/backward-chaining inference (with memoization and truth maintenance). The first version of Dyna was a proof-of-concept for an untyped, single-module, forward-chaining fragment of the language. The second version is rewritten in Haskell and intends to cover all the major features. Additional papers can be found listed here.

XML::Handler::EasyTree::Generator (2006)

A Perl module for creating “EasyTree” data structures on the fly. EasyTree structures are a representation of parsed XML created normally by XML::Parser::EasyTree (deprecated) or XML::Handler::Trees which use libexpat.

Paperboy WDM (2005–2006)

A web development framework built around the concept of separating logic, content, and presentation. The main component of the project is Titania which is driven by the XML family of technologies and uses Paperboy RSS to do the heavy lifting. (For more see the proposal submitted for Google’s Summer of Code program.) N.B., this program has not been maintained in a long time. Hakyll is suggested as a good replacement.

Paperboy RSS (2004–2005)

A powerful, lightweight RSS feed reader utility. The main paperboy utility downloads feeds with libcurl, parses them with libxml2, and converts the information into a presentation form with libxslt. (In short, Paperboy gives a commandline interface to using these three libraries together, regardless of whether you’re using it as a feed aggregator or not.) The project also includes a daemon/batch program for automating multiple calls to the main utility.