COMPUTER SKILLS
Computers keep fascinating me although I've never majored in computer
science. Helplessly, I choose CAD as my minor, which is, within the
Department of Mechanical Engineering, is the closest I can get. I spent
lots of time with computer, in particular, MIT's Athena, and learned a lot
by myself. During one class at MIT in which my advisor taught and I was
the TA, he introduced me to the students: "Here is your TA Liang-Wu Cai who
lives in Athena." I think I've really loved Athena (after Bryan
Adams' song).
Computer Languages
- Proficient: C++, C, Perl, HTML, PostScript, LATEX, FORTRAN.
- Familiar with: UNIX-shell, tcl/tk, HTML, TEX, MatLab, Assembler.
Software Packages
Xlib, Motif, SGI's OpenInventor Graphic Library, GDB, Gnu Emacs,
FrameMaker, SAP5 and HONDO2 (both finite element analysis packages used in
Sandia National Lab).
Operating System
I have been using Unix system (and X-Window) on a variety of platforms
for the past few years, and have done some system administration works on
my own private Athena (MIT's campus network) workstation which operates
under Sun's Solaris 2.x, and on an SGI's Indigo2, which operates under Irix
5.3. Before moving to Unix platforms, I had a quite thorough understanding
of DOS up to its 3.3 version. Quite familiar with Mac and MS-Windows.
Projects
For all of the following projects, source codes are available upon
request by prospective employer.
- GolfPro -- A Computer-Aided Golf Course Design System. This is a
full-featured system, though in prototype stage intended as a commercial
package. Features include NURBS surface creation, editing, trimming and
contouring, puddle detection, ground work estimation, simulation of golf
game. The entire golf course consists of the Tee, fairway and pudding
green, which were implemented as NURBS surfaces to allow precise design
manipulation, while the surrounding area and features, like ponds, bushes,
are modeled in rougher polygons. Although NURBS surface rendering is done
by library functions, technical challenges undertaken include stitching the
polygonal surface with NURBS surface, finding the contours of the NURBS
surface, precise simulation of golf ball motion on the NURBS surface,
etc. This is a half-semester effort to satisfy the requirement at MIT for
minoring in CAD. The project is written in C++. It uses Silicon
Graphics' OpenInventor library for 3-D graphics rendering,
X-Window's Motif for GUI. Although this is a project of a groups of
3-4 people, I was the group leader and wrote 90% of the source codes.
- Greedy Packer -- A 2-D Packing System designed for course
competition. This is the course project in MIT's C++ class. The GUI is
written tcl/tk, algorithms are implemented in C++. The goal
of the competition is to grab 2-D polygonal and circular objects from a
common bag and non-overlappingly pack them into a give square area as
tightly as possible. Works involved include: strategies for ranking the
favorableness of objects, sorting abstracted objects by favorableness, tree
and list building, object overlapping detection, communications between the
program and the competition enforcer program, interfacing the C++ and
tcl/tk functions, and various packing strategy for various objects. Report
available upon request. This is a project of a group of 4, and I was the
project leader.
- A 3-D Data Visualization System. To aid the data visualization
need in my research work, I wrote a 3-D surface plotting system which have
some features are needed by cannot be found in any other plotting
packages. The program, written in C, takes the computed data
generates a PostScript graphics file. It can visualize the data set as a
surface mesh, and surface with shading, contour lines in the bottom plane,
the trace of local minima and maxima of the data, or some other forms. Few
examples of the output are here.
- A Finite Element Analysis package. During my years working toward
my Master thesis, I wrote a complete 2-D finite element analysis
package. The package can be used to solve 2-D linear elastic problems,
completed with simple mesh generator and post-processing capabilities
converts the computed stress/ strain/ displacement fields into Morie
fringe-like pseudo-photos. This package is later extended to simulate the
coupled effects of nonlinear viscoelasticity and and damage accumulation
around notches of composite materials. Written mainly in FORTRAN, while a small part of code is written in
Basic for driving the dot-matrix printer. (Well, that was ancient
code written in ancient language for ancient hardware.)
- A simple 3-D graphic program. This is a course project which
requires the rendering of a 3-D object in perspective view, furnished with
some simple interface to allow user to rotate the object or change the view
point. The program is written in C and uses Xlib for GUI. I
extended the project a little bit to animate the object's continuous
motion, using off-screen buffer technique.
- Computation for Ph.D. research is entirely done in C++.
The research involves the scattering of elastic wave scattering among
arbitrary scatterers. Built many fundamental classes for various object for
the need, like complex, matrix, scatterer, etc. Actually, all codes has
been written in C by myself. As a way of learning C++, I ported all code
into C++ to take advantages of the object-oriented programming style, which
is very suitable for the research project undertaken. I often use these
programs to demonstrate to my die-hard FORTRAN programmer friends how high
precision and complicated scientific computations can be marvelously done
in C++ and the object-oriented programming style.
- A simple 2-D curve plotting program. This is program is written
in C long time ago before those PostScript plotting systems
blossoms. It generates PostScript output. Another version of this
program is written in FORTRAN and generates
LATEX output for use in some
graphic-incapable systems such as Vax.