After seven years, I finally graduated from
the CMU School of Computer Science.
My advisors were
and Jeannette Wing.
At CMU, I investigated the construction of automatic tools
to help people build better software.
On November 20, 2000, I successfully defended my thesis on
Generalized Aliasing as a Basis for Program Analysis Tools.
I have accepted a position at
the IBM Watson Research Center.
Travel: I will be on the US west coast from May 31 to June 13. Email contact
will be intermittent during that time.
I'm married to
Weiyee (Janet) Chui.
Before my studies at CMU, I was an undergraduate at the
of Auckland Computer Science Department,
A lot of people say that New Zealand is the most beautiful
country in the world --- they're right!
I'm a Christian. I have been served with the local
Asian Christian Fellowship and the
Pittsburgh Chinese Church.
Check out my online photo album!
I am interested in many areas of computer science, but one question
occupies me more than any other: How can we make it easier for
everyone to produce better software? My approach is to investigate
the use of automatic tools to assist programmers in writing, understanding,
testing and debugging code, by building tools and evaluating them in
the context of real programs.
- For my thesis, I built Ajax,
a system for discovering properties of Java programs using
static analysis of their Java bytecode. Ajax adapts polymorphic type inference,
similar to that used in ML, to produce generalized aliasing information. The
aliasing information is fed into various tools, each tool customized to help
with a particular programming task. Ajax can analyze large Java
applications such as Sun's javac compiler and the javafig
- Prior to my thesis, I built
Lackwit, a tool for analyzing C code,
which used a similar analysis engine to Ajax but lacked Ajax's
customizability. Lackit was the first system to perform context-sensitive
alias analysis of a program with more than 100,000 lines of code
(a Linux 2.0 kernel). This work was published in ICSE '97.
- I've applied some of my ideas about bytecode analysis to the problem
of bytecode verification. My paper about a very
simple and powerful type system for verifying bytecode subroutines
appeared in POPL '99. It can be read as an argument for using TAL/STAL-like
type systems (based on classical type-theoretic ideas such as continuations
and polymorphic recursion) to typecheck low-level languages, instead of the
"dataflow analysis" style typechecking performed by the JVM.
- I spent two summers working on projects related to dynamic program
IBM Watson, I
built a binary instrumentation tool to compute the dynamic data-flow
graphs of C++ programs. These graphs show that a large percentage of the
results computed by a typical application during its execution are never
DEC (now Compaq) SRC,
I built a graphical user interface to their Digital
Continuous Profiling Infrastructure tool. It was
challenging to build an interface to quickly and inuitively navigate
through the voluminous and detailed data gathered by DCPI.
I think one of my strengths is the ability to produce
a lot of ideas. Of course they're not
all good ideas :-).
I have plenty of other things to do when I'm not working on my research.
Many of them are computer-related. Some are important, some are
just for fun, some are both, but all are to the glory of God.
- I wrote
TTSSH, a free SSH client for Windows (95 and NT), based on
Teraterm Pro. There are hundreds of thousands of people using TTSSH. The TTSSH
source code is available under the BSD license.
- I have built a very simple, very fast, index-based search engine that
can search for arbitrary substrings in binary data. I have integrated this
engine into the Cyrus IMAP server, so that searches over the bodies of tens
of thousands of messages take place almost instantly. The source code for this
should be available soon.
- Other hacks:
- I wrote
a full-featured finger daemon for Windows NT. Its source code is
- Ever noticed how useful it is to be able to hear your disk working?
a cute hack for NT (with source)
that lets you hear your CPU chugging away!
- The Random Art Screensaver
for Windows NT and Windows 95. Random Art algorithm courtesy of
- The Takapuna Screensaver
for Windows NT and Windows 95.
- I have some
Java applets. They include a "shared virtual card table" that
is rather different in philosophy and execution to all the other network
play environments I've seen, even up till today. (It was written in 1996.)
The source is available.
- I contributed some code to
including its implementation of justified text. I am a super-reviewer and
"driver" for the project (when time permits!).
- CMU users only: check out
Harry Bovik's registration list.
- I spend a lot of time in various roles with the Asian Christian
- I enjoy games very much. I especially enjoy simple strategy games with
a social element, such as mahjong and card games.
- Janet and I go to
ballroom dancing classes regularly. I'm a terrible dancer but we enjoy
it. I think it's a good idea to sometimes do things that I'm bad at --- that's
why I go ice-skating, too.
- I'm terrible at sports, but I like the outdoors. I like to walk fast
and far. I also like to swim, but only in the ocean.
My résumé is on-line. I also have
statements about my
5726 Beacon St
Pittsburgh, PA 15217
||5123 Wean Hall|
Carnegie Mellon University
Pittsburgh, PA 15213
||Anything except "Bob"|
For secure communication, you can use PGP:
PGP PUBLIC KEY
-----BEGIN PGP PUBLIC KEY BLOCK-----
-----END PGP PUBLIC KEY BLOCK-----