Personal projects of mine. At work, I have been mostly building enterprise (aka data entry) applications, these will not be mentioned here.


  • urwebfmt: a separate pretty-printer for ur/web code
  • typesafe-dom: typeful DOM access for ATS in the browser
  • tfc: simple cooperative threading for ATS
  • colorado: a very simple library for colored output in the terminal, for ATS
  • WinCeWebDriver: a webdriver implementation for WinCE devices (allows you to test your WinCE apps written in WinForms by simulating end-user actions, much like you'd test your browser apps with Selenium)
  • I also put some time to contribute to existing open-source projects (Ur/Web, ATS and Dotmim.Sync)


  • ATStead: a modeless structured editor written in ATS (yeah, I suck at naming)
  • urweb-uuid: support for UUID datatype in Ur/Web
  • urweb-projects: various Ur/Web-based projects that will someday evolve into something useful
  • Ur/Web + SAM: translating SAM pattern to Ur/Web
  • Ur/Web + XForms: translating XForms examples to Ur/Web
  • urweb-storage: support for HTML web storage API in Ur/Web
  • urweb-misc: Ur/Web code, including a toy relational algebra interpreter
  • Split calculator (Ur/Web-based)
  • PATS-EF: an online "error filter", for making sense of type errors of ATS2
  • SAM-tetris: a Tetris clone structured according to the SAM (State, Action, Model) pattern. A bit unfinished (only keyboard input is supported).
  • getopt: a library for parsing command-line arguments in ATS console programs

2015 - 2016

  • HTML2PATS: a tool for generating HTML printers for ATS. Say you want to write some functions that print HTML (e.g. to generate a webpage). You could build up an HTML syntax tree for that (and then pretty-print it to textual HTML representation), but it would be suboptimal (in terms of runtime performance). Instead, you could preprocess a specially crafted HTML file to output ATS code that prints it out: much nicer syntax (familiar HTML), and you get function definitions for free, that you can plug into your program.
  • ATS playground: some ATS code
  • dataphor: compiling Dataphor to CIL via Reflection.Emit (in C#), to speed up the interpreter
  • dataset2xf: generating CRUD interfaces (using XForms), given an ADO.NET Typed Dataset as input
  • ORMtools: open-source Object-Role Modeling tools

    • orm2d4: an XSLT2.0 stylesheet to transform NORMA ORM files to SVG. Runs in the browser via Saxon-CE
    • DCILtoD4: for generating Dataphor schemata from ORM schemata produced by the NORMA tool
    • DDILtoSQLite: the missing NORMA ORM to SQLite schema generator (seriously, missing SQLite support? are you kidding?)
  • cfgtools: context-free grammar tools
  • ATS3D: 3d vector algebra library for ATS
  • SQLiteClientSync: SQLite client sync provider for ADO.NET Sync Services for Devices (ported to WinMobile 6.5/.NET CF from its original desktop version, with author's permission). This is for implementing off-line applications with hub-and-spoke synchronization and conflict resolution.
  • Support for GNUstep on NixOS: abandoned, but it was picked up by @matthewbauer and brought to fruition (thanks, Matthew!)


2010 - 2011

  • ats-miscellanea: some ATS1 code (regex matcher, ray caster, and minor code samples). Also, contains source code of my BA thesis (as-is, so probably doesn't compile).

Earlier projects

  • 2009: Flapjax-based apps

  • 2004: Quake2 studiomdl support

    What if you wanted to make a computer game based on Quake2, but you need some Half-Life features for it, such as skeletal animation and its perks: hitboxes, animation blending, "mounting" points for weapons? What we did here (jointly with Dmitry Shalkhakov, who did most of the game improvements, while I did the renderer improvements): get the source code of MDL viewer off Valve SDK, and try to integrate it into Quake2. See the result for yourself: I only put some newer models to show it off.

    Working features:

    • Half-Life MDL models can be used alongside existing MD2 models
    • Animation blending
    • Separate "gait sequence" for player character
    • Chrome effect and proper colored lighting for MDL models