Experienced communicator, presenter, and mentor; introduced many leading-edge software concepts and methods to my employers: meta-assemblers and real-time kernels at Zilog; object-oriented programming and cross-platform development at Advansoft Research; application frameworks, open-source, Linux, CVS, git, XML, and web services at Ricoh Innovations. An IT person from India gave me the title of "guru".
Expert: Java, Perl, Bourne Shell, GNU make, git; Linux; web development:
HTML, JSON, HTTP, ReST. Less recently, C, C++, assembler; XML.
Competent: PHP, Python, Smalltalk, Lisp, Pascal, Fortran; Unix; LATEX, SIP; mentoring; technology transfer; technical communication; audio recording and editing; dev/ops.
Scientist: Advansoft Research Corp., Santa Clara, CA
Principal Engineer: Zilog, Inc., Campbell, CA
Staff Engineer: Zilog, Inc., Cupertino, CA
Senior Engineering Programmer: American Microsystems, Inc., Santa Clara, CA
Stanford University: MS in Computer Science
Carleton College: BA in Mathematics
Memberships: ACM, Sigma Xi, Phi Beta Kappa, AAAS, EFF, SVLUG.
A small but complete internal web service, written in Java. Design, implementation, unit and integration testing, deployment, operations, maintenance.
Added automatic SIP-based audio conferencing to an interactive whiteboard project, greatly improving the user experience when sharing a whiteboard between two or more locations. Deployed and configured Nagios for monitoring the status and performance of both the 14 installed whiteboards and the associated web services.
An e-ink based tablet for business use, running Debian GNU/Linux internally and backed by a cloud service written in PHP. Built the prototype web service in Perl, designed the second version of the document transfer protocol (using git over SSH), and wrote the factory diagnostics in a combination of Bash and Python. Ported the routines that converted between PDF and the internal (image-based) document format from Python to PHP, and modified the dropbear ssh daemon to accept a large number (tens of thousands) of keys by replacing the flat authorized_keys file with a memcachedb ``no-SQL'' database.
Designed PIA, an experimental server-side scripting language with XML syntax and functional programming semantics. Initially implemented in Perl, re-implemented in Java, and eventually ported to C++. Convinced Ricoh to become the first Japanese company to release an open-source software project. Supervised the development of a C implementation (cPIA, available on SourceForge). Note that this project was actually started before XML, using an SGML syntax that was actually considerably simpler and more user-friendly. It was roughly contemporary with PHP.
PIA was used to implement a form-processing system that included such standard business forms as vacation requests, timecards, expense reports, and so on. It was written in 1998 and remained in use with only minimal maintenance for a decade, until a series of Java upgrades introduced incompatibilities that would have taken researchers away from other projects to fix. Administrative personnel were able to easily create new forms. It was eventually replaced by forms in the Metadot intranet portal, which most users agreed were less convenient.
Another unique (for its time) feature of the PIA is that it uses HTML elements as data structures, e.g. by treating DL elements and tables as associative arrays, and entities as variables. Unlike most such systems, it stores filled-out forms as digitally-signed documents rather than as database entries.
Led a three-person team in developing a C++ programming framework for building an application that remotely monitors copiers and FAX machines. Introduced object-oriented programming and frameworks to Ricoh. Technology transfer included organizing and co-teaching a the equivalent of graduate-level 10-week class. Cross-platform on Windows NT and Linux, and included GUI front ends for web and X, generated from the same source code. Wrote a ``documentation generator'' (in Perl, predating JavaDoc by several years) to create the transparencies used in the course from the C++ header files. Later extended the documentation generator to include Perl, Python, and PHP.
A C++ class library that includes arrays, hash tables, run-time class descriptors, X-based graphics, Motif-based GUI wrapper objects, and a self-describing object-oriented file format. Used internally on three projects: a data analysis and display program, an IC-tester utility, and a test-case generator for a compiler.
A series of three MS-DOS operating system shells (similar to X-tree), each capable of reading (and in one case writing) disks written by another operating system as well as MS-DOS (Perkin Elmer 3500, Idris, and iRMX86 respectively). These were done as a spare-time consulting project; I received royalties on each copy sold. The implementation was in C and included an object-oriented, text-based user-interface toolkit; I also implemented a subset of the curses library and emulators for the three different filesystems. The menus, manual, and online help were all generated from the C source code.
Sole developer of the linker and cross-assemblers for two of Zilog's three microprocessor families, and project leader for the third. The assemblers were written in C, portable between MS-DOS and Unix, and entirely table-driven; the third assembler was completed by a junior programmer in a matter of weeks. The linker was an early implementation of the IEEE standard for microprocessor object files, and was unique in allowing a mix of word lengths (up to 256 bits) and address ranges in a single project.
Designed ZRTS (Zilog Real-Time Software), a real-time operating system kernel for the Z8000 microprocessor. Implemented the task-switching and message-passing microkernel, logical I/O system, and terminal driver; other device drivers were done by team members. ZRTS was moderately successful both inside and outside of Zilog.
Wrote most of the software for AMI's 6800-based Microprocessor Development Center including the ROM monitor, bootstrap loader, debugger, and text editor, all in 6800 assembler. Added macros to the assembler. The text editor was written using object-oriented macros, and included variable length strings with garbage collection.
Did everything for this CD but the manufacturing and artwork, using open source tools: Makefiles, perl and shell scripts, LaTeX, and Audacity. The web page, track list, disk table of contents, and songbook are all made from the same set of source files.
``Interesting Places for Kids on the Web'' was an early personal website that was listed as one of the top 100 websites in 1995, and widely referenced both online and in print. Part of the Ricoh website, it drew traffic to the corporate site in the early years of the commercial Web. Included ``Notes, Advice and Warnings for Kids on the Web''.