This page contains information about several of my personal projects. These projects are purely for personal and academic research; they are not designed or intended to be commercialized.

While I have released binaries for several of these projects, do not ask me for unreleased binaries or source code. No part of these projects are for sale.

I already know several people are going to try to hack my site looking for code, but they’ll just be wasting their time. Having played that game in the past myself, I’m not dumb enough to store source code on an insecure server 🙂


Mercury is a distributed cache management system which supplements the Oracle buffer cache with optimized network-based data block storage to reduce the amount of read-related disk I/O which must be performed when working with large-scale databases.  It is written in C and is actively being developed.  More information can be found on the Mercury Distributed Cache for Oracle page.


Nakano is a log-based transactional replication system for Oracle. It is written in C and consists of three parts, capture, transformation, and application.

Before reading the REDO logs, Nakano connects to an Oracle Database server via UPI. It uses this connection to build an in-memory object resolution table which basically resembles a data dictionary. The object resolution table is used solely to resolve objects from the REDO logs during transformation.

After the initial synchronization of the object resolution table, the connection is dropped as all subsequent object creation and removal (tables, columns, etc) is captured and can be applied to the in-memory table directly. Similarly, after the table has been loaded, the capture process can begin.

Logical Change Record Capture
The capture component of Nakano is designed specifically to capture change vectors for committed transactions. Specifically, it consists of a multi-threaded module which reads Oracle REDO logs, inspects REDO headers/records, and performs appropriate actions based on the record type. All change vectors are enqueued into a persistent queue to be handled in the transformation phase.

After change data has been captured and enqueued, it can be transformed. This can either happen locally, within the Nakano instance, or remotely (should you want to make the performance overhead as minimal as possible). Transformation simply consists of translating the captured change vectors of committed transactions into appropriate SQL statements. Currently, all table and column names are translated into generic ANSI SQL using data from the object resolution table.

After transformation, the generated SQL is placed in another persistent queue for application.

The application phase of log-based replication is the last and final operation. It simply consists of dequeueing generated SQL and executing it on the target system. Currently, application is performed through an ODBC connecton to the target database. Though, one could easily replace ODBC with OCI, FreeTDS, or any other native library for increased performance.

Status: Beta-quality

Open Source ODBC Driver for Oracle

The Open Source ODBC Driver for Oracle consists of an ODBC 3.52-compliant ODBC driver for Oracle written completely in C on top of OCI. All effort has been made to minimize interactions between OCI and ODBC in order to maintain high performance.

Status: Spoke with Justin Kestelyn and I need to upload this to SourceForge and send him a link…