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

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.