I am Andrew Choi and this is my personal website. Here you will find my “technical notes”, in which I write about program design, jazz harmonic analysis, algorithmic composition, programming languages and tools, and many other things.

I will also post a few personal notes and photos from time to time to keep my family and friends up to date about my life in Calgary.

Past Projects

Here are some of the projects I worked on.

I ported Emacs to Mac OS Classic. Then Emacs to Mac OS X. Then XEmacs to Mac OS X.

I wrote a program called MyJazzBand which analyzes chord charts and generates and plays jazz rhythm section accompaniment. I reimplemented these composition algorithms in OCaml and released it as a command-line proof-of-concept demo MyJazzBand 2 Lite.

I wrote the programming library TOE for building MIDI applications. TOE is built using SWIG, which makes it callable from different programming languages. TOE reads and writes different file formats. In particular it can extract chord sequences from Band-in-a-Box format files. I also wrote (unreleased) TOE/AU, a programming library for building CoreAudio applications.

I posted programming examples in my old blog to demonstrate the use of CoreMIDI, MusicSequence, MIDI Name Documents, Cocoa/AppKit, etc. Even posted a blog authoring tool, a syntax-coloring text editor, a Cantonese input method table for OS X, and algorithms for chord analysis and optimal spacing in music notation!

While adapting MyJazzBand for “commercial” release, I studied the problem of software protection and ended up with what I believe to be a pretty good scheme (9 Jan 2004 - 24 Jan 2004). I discussed part of this scheme and described how to sign and verify registration keys using elliptic curve cryptography.


Since the end of support for Windows 7 will arrive in less than two years, I’ve finally ported CAP to Windows 10. In addition to a new Windows 10 version of CAP, this new release also includes a new Fcitx version of CAP for Linux and a new build of CAP for macOS Sierra. [6 Feb 2018.]

I’ve made new releases of Linux, Mac, and Windows 7 versions of my CAP Input Method and provided installation instructions of CAP on Mac OS X Mavericks and Yosemite. I’ve also updated T2G to run on Mavericks and Yosemite [23 Jan 2015.]

Here is the Windows 7 version of my Cantonese Artificially-intelligent Phonetic Input Method. What more can I say? It’s just super cool! Mac OS X version will arrive soon. [27 Jul 2012.]

I’m finally ready to release the Linux version of my new CAP, or Cantonese Artificially-intelligent Phonetic, input method. This is the culmination of one of my “for-my-own-amusement” projects on which I’ve been working for a good part of the past two years! The CAP input method uses a statistical language model to convert sequences of romanized syllables into sentences. It allows very fast Chinese input and is a far better alternative to all current phonetic Cantonese input methods and, I believe, most other types of Chinese input methods! Give it a try! [23 May 2012.]

A new article in three parts. One — a convenient Mac OS X utility to switch the main display on systems with multiple displays. Two — C++0x routines for converting among UTF-8, UTF-16, UTF-32 encoded strings. Three — a Linux script for recording screencasts with perfectly synchronized video and audio. [30 Apr 2012.]

My jazz harmonic analysis article (now titled “Jazz Harmonic Analysis as Optimal Tonality Segmentation”) appears in the current issue of the Computer Music Journal. It’s available there as a free download. Go take a look! [13 June 2011.]

My C++ library for Unicode Processing compatible with the new C++0x standard. [16 Oct 2010.]

New Haskell bindings for Judy array article. [13 Jun 2010.]

New article on db 1.85, the original Berkeley DB. [27 May 2010.]

Back from Hong Kong. Some photos at Flickr for the time being. [16 Mar. 2010.]

Going to Hong Kong next week. The usual Email address will still work. Available for dim sum or wonton any time! [30 Nov. 2009.]

A brand new article on setting up a programming environment for writing literate Haskell programs using GHC, Pandoc, and (X)Emacs. Very cool! [28 October 2009.]

Wrote a new article on the use of text completion in Qt. [16 July 2009.]

Posted a new article on programming with Qt. [2 July 2009.]

Updated my photo gallery with a few photos from my road trip to Jasper. [5 June 2009.]

Completed my paper Harmonic analysis of jazz chord sequences. It has its own permanent webpage. The paper summarizes all the jazz theory/harmonic analysis stuff I’ve been working on in the last two years: T2, T2G, the T2 algorithm, etc. Don’t miss this one! [23 Feb 2009.]

Wrote a little Java ME clock for my cell phone. [18 Feb 2009.]

Completed T2G version 2, which uses a new and more powerful tonality segmentation algorithm. [17 Dec 2008.]

Thirty years ago this month, I punched out my first computer programs in FORTRAN on decks of IBM cards. Perhaps it’s appropriate that at this time I’m releasing the best program I’ve written yet :-): T2G — a jazz harmonic analysis and accompaniment generation program. See also the T2G getting-started guide. [19 Sep 2008.]

Completed FCIM, my own Cantonese phonetic input method for Mac OS X 10.5 (Leopard). [8 Sep 2008.]

Updated my photo gallery. [4 Sep 2008.]

Wrote a clock dock application. [30 Jun 2008.]

I reorganized my website to generate pages from templates using XSLT. All personal websites should be done this way :-). [14 Dec 2007.]

Navigating This Website

Family and friends visiting this website should read articles in the General category and visit the photo gallery. My Email address can be found on the Contact Information page.

Technical articles are listed on the right side of every page: the few most recent ones, a complete list, an RSS feed, and indices by category. These are followed by links to general information and my other sites.

A lot of useful information remains in my old blog. See the “Past Projects” section on this page, or type some keywords and the phrase “My OS X Programming Blog” into your favorite search engine.