Article Index

Cantonese Artificially-intelligent Phonetic Input Method—Black Bauhinia Release

Here’s the latest release of my Cantonese Artificially-intelligent Phonetic (CAP) Input Method for macOS, Linux, and Windows 10. Its statistical language model now incorporates the 2019-08-02 Chinese version of the Wikipedia, among other sources. I also corrected the pronounciation of some words such as 鵪鶉 (am chun), 芫茜 (yim sai), and 猥瑣 (wui soh). This release also uses a new and prettier icon.

Date: 19 Sep 2019 • Category: Programming

Cantonese Artificially-intelligent Phonetic Input Method—Year of the Dog Release

Here’s a brand new release of my Cantonese Artificially-intelligent Phonetic (CAP) Input Method for Windows 10! There’s also a new Fcitx version for Linux, developed and tested on the latest KDE Neon, and should be compatible with other Linux distributions such as Kubuntu, Ubuntu, and Debian. Finally there’s a Mac version built for macOS Sierra.

Date: 6 Feb 2018 • Category: Programming

Cantonese Artificially-intelligent Phonetic Input Method—Year of the RAM Release

I make a new release of my Cantonese Artificially-intelligent Phonetic (CAP) input method. This includes a Mac OS X version for Mavericks and Yosemite, compatibility with latest Kubuntu/Ubuntu/Debian Linux distributions, and an updated statistical language model (that includes words like 雨遮革命 and 鳩嗚, and proper nouns like 黃之鋒)! This article describes where to download and how to install it.

Date: 23 Jan 2015 • Category: Programming

Cantonese Artificially-intelligent Phonetic Input Method for Windows 7

Here’s the Windows 7 version of my Cantonese Artificially-intelligent Phonetic (CAP) input method! This article describes how to download and install it.

Date: 27 Jul 2012 • Category: Programming

CAP — a Cantonese Artificially-intelligent Phonetic Input Method

The world deserves a better Cantonese phonetic input method! The only true sentence-based, statistical-language-model-based (SLM-based) pinyin input methods is Sunpinyin, which is a highly usable input method. But it’s difficult for most Cantonese speakers to type pinyin (which requires thinking in Mandarin). Numerous experiments on and variants of input methods based on SLMs have been written about in the literature, which claim to have very high recognition accuracies. I’ve always wondered why these research results, if they’re so good, have never made it to production. One can only speculate. What I’d call “bells-and-whistles” input methods such as Google Pinyin, Sogou Pinyin, Microsoft Pinyin, and Yahoo! Input Method all appear to use word bigrams in some capacity, and/or a very large word dictionary. That makes them nice to use, but not as accurate as Sunpinyin, which means more time spent in “word selection”. Cantonese phonetic input methods based on SLMs have simply not existed, until now. All Cantonese speakers should read on: CAP will change the way you type Chinese!

Date: 23 May 2012 • Category: Programming

Three Little Pieces

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.

Date: 30 Apr 2012 • Category: Programming

Unicode Processing with C++0x

I present a C++ class template and class library for writing programs that supports Unicode. It uses the new character and string types defined in C++0x so future compatibility with this upcoming standard is ensured. An iterator is also provided for sequential access to code points in UTF-16 encoded strings.

Date: 16 Oct 2010 • Category: Programming

Haskell Bindings for JudySL

This article presents a set of Haskell bindings for JudySL, the functions in the Judy library that implement associative arrays with variable-length byte string keys and integer values. It concludes with a performance comparison between Judy arrays and hashing when applied to a simple dictionary lookup problem.

Date: 13 Jun 2010 • Category: Programming

Db 1.85 — the Original, BSD license Berkeley DB

I discuss libraries for disk-based hash tables and B-trees such as Berkeley DB and Tokyo Cabinet and relational database systems such as MySQL and SQLite. I describe how to install db 1.85, the original BSD licensed version of db, on Linux and Mac OS X. Then we take an interesting turn in the second part of the article.

Date: 27 May 2010 • Category: Programming

Haskell, Literate Programming, Pandoc, Carbon XEmacs, …

This is a summary of my experience in setting up a programming environment for writing literate Haskell programs on my Mac OS X and Linux machines. It also includes a list of hints and resources that one’d need to get started in programming in Haskell. The search for a good text markup language for literate programming led me to a new way of writing these Web articles. I now use Pandoc, (X)Emacs, XSLT, and make files. These are also discussed.

Date: 28 Oct 2009 • Category: Programming

Better-Than-Mac Text Completion in Qt

I discuss my Qt project that demonstrates the implementation of text completion for a QLineEdit widget that provides very Mac-like interactions. It works well on Mac, Linux, and Windows. I’ve even added a few improvements over an ordinary Apple HIG text completion popup!

Date: 16 Jul 2009 • Category: Programming

Qt Document-Based Application

I discuss Nokia’s recent release of the Qt GUI framework under the LGPL. I also show how Qt can be used to write an application that behaves very Mac-like in the form of a skeleton of a document-based application.

Date: 2 Jul 2009 • Category: Programming

Big Java ME Clock

A clock written in Java ME.

Date: 18 Feb 2009 • Category: Programming

T2G Version 2

Version 2 of T2G with new and improved tonality segmentation algorithm.

Date: 17 Dec 2008 • Category: Jazz, Programming, T2

T2G — Getting Started Guide

A brief overview of how to use T2G.

Date: 19 Sep 2008 • Category: Jazz, Programming, T2

T2G — Jazz Harmonic Analysis and Accompaniment Generation Software

The release of T2G — my new jazz harmonic analysis and accompaniment generation software.

Date: 19 Sep 2008 • Category: Jazz, Programming, T2

FCIM — a Cantonese Phonetic Input Method

Chinese input methods on Mac OS X, Cantonese phonetic input methods, and FCIM, my new fast Cantonese input method.

Date: 8 Sep 2008 • Category: Programming


A simple analog clock for the dock on Leopard.

Date: 30 Jun 2008 • Category: Programming

XSLT Website Templates

This article describes the advantages of a static website over of a dynamic one, and outlines the use of XSLT style sheets and XML templates to generate webpages with consistent appearance and global contents. [Hint: you’re looking at one.]

Date: 14 Dec 2007 • Category: Programming

T2 Getting Started Guide

A short note to for new users of T2.

Date: 27 Aug 2007 • Category: Jazz, Programming, T2

T2 - A Jazz Harmonic Analysis Program

The release of T2, a program that performs roman numeral analysis on jazz chord charts.

Date: 25 Aug 2007 • Category: Jazz, Programming, T2

A Correct Mac OS X Version of MyJazzBand 2 Lite - OCaml

A new version of the Mac OS X Version of MyJazzBand 2 Lite - OCaml that corrects a problem with one I post last month.

Date: 17 Jul 2007 • Category: Jazz, Programming

A Few Notes on Ocamlbuild, Ocamldebug, and Caml-mode

A short writeup on programming in OCaml on Mac OS X. The use of ocamlbuild, ocamldebug, and caml-mode.

Date: 2 Jun 2007 • Category: Programming

MyJazzBand 2 Lite - OCaml

Here is the new release of MyJazzBand 2 Lite (MJB2Lite), rewritten in OCaml!

Date: 31 May 2007 • Category: Jazz, Programming

Python, Scheme, and OCaml Speed Comparison

Execution speed comparison of “chord scale theory” operations among Python, Scheme, and OCaml implementations.

Date: 18 May 2007 • Category: Programming

OCaml, Python, Scheme, Tuareg Mode, Camldebug, and Carbon XEmacs

A discussion of expressiveness and efficiency of programming languages used in my previous projects, my switch to OCaml, and programming in OCaml under Mac OS X.

Date: 10 May 2007 • Category: Programming

Chart Translate: Chord Chart File Format Converter

A utility to convert chord charts stored in MyJazzBand, Band-in-a-Box, and MusicXML format into MyJazzBand, Band-in-a-Box, MusicXML, and Lilypond format.

Date: 3 May 2007 • Category: Jazz, Programming

MyJazzBand 2 Lite

Here is the release of MyJazzBand 2 Lite (MJB2Lite), a MIDI application for generating jazz accompaniments.

Date: 27 Apr 2007 • Category: Jazz, Programming