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.
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.
Here’s the Windows 7 version of my Cantonese Artificially-intelligent Phonetic (CAP) input method! This article describes how to download and install it.
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!
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.
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.
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.
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.
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.
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!
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.
In a paper I’ve just completed—Harmonic analysis of jazz chord sequences—I describe the T2 algorithm. This article explains some of the reasons I chose to work on this problem. There are (hopefully) also some insights into the state of computer music research and scientific research in general. Plus the question “is computer music more computer science or more music theory?”.
A clock written in Java ME.
Version 2 of T2G with new and improved tonality segmentation algorithm.
A brief overview of how to use T2G.
The release of T2G — my new jazz harmonic analysis and accompaniment generation software.
Chinese input methods on Mac OS X, Cantonese phonetic input methods, and FCIM, my new fast Cantonese input method.
A simple analog clock for the dock on Leopard.
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.]
A short note to for new users of T2.
The release of T2, a program that performs roman numeral analysis on jazz chord charts.
A new version of the Mac OS X Version of MyJazzBand 2 Lite - OCaml that corrects a problem with one I post last month.
A short writeup on programming in OCaml on Mac OS X. The use of ocamlbuild, ocamldebug, and caml-mode.
Here is the new release of MyJazzBand 2 Lite (MJB2Lite), rewritten in OCaml!
Execution speed comparison of “chord scale theory” operations among Python, Scheme, and OCaml implementations.
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.
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.
Here is the release of MyJazzBand 2 Lite (MJB2Lite), a MIDI application for generating jazz accompaniments.
An explanation of why I have stopped writing my blog for a while and the new focus of my blog.