Russell D. Fish
E-Mail: fish@cs.utah.edu Home Address: 1618 East Meadow Moor Road
http://www.cs.utah.edu/~fish Salt Lake City, Utah 84117
Cell phone: (801) 953-3778 Home/work phone: (801) 274-2834
This document may be accessed on the Web at http://www.cs.utah.edu/~fish/resume.html .
Summary:
I am an experienced system designer, developer, and problem-solver.
My highest skill is leading a technical team in developing and refining
systems designs, detailing and producing implementations, and evolving
software systems from rapid prototypes to mature products.
Education:
- Graduate studies, 1975-1977, Computer Science Department, University of Utah, Salt Lake City, Utah
- B.S. 1973, Mathematics and Computer Science, The Lindenwood Colleges, St. Charles, Missouri
Computer Knowledge:
- Languages: Python, OpenGL/GLSL, Trolltech Qt, PHP/HTML, Perl, SQL, C++, C, C#(C-Sharp).NET,
Visual Basic, shell/AWK, TCL/TK, Lisp, APL, Fortran, assembly.
- Databases: MySQL, Oracle, SQL Server, Access, DBASE3/Clipper, IDMS, IMS,
API's: ADO, OCI, ODBC, JDBC, VDBC, Python-DB.
- Systems: MacOS/FreeBSD/Linux/UNIX (15 varieties), Emacs, Windows XP/2000/NT/98/95/6.22,
embedded, cross-platform: Cygwin/XFree, VNC, VMWare, Citrix WinDD/Terminal Server.
Professional Experience:
Table of contents:
- January 2008 - March 2009: Software Engineer in Computer Aided Design and Modeling, Nanorex, Inc., Bloomfield Hills, Michigan
- March 2004 - December 2007: Computer Science Researcher, Flux Research Group, School of Computing, University of Utah, Salt Lake City, Utah
[Emulab]
[Emulab XP port]
[Robot sensor-net]
[SQL vulnerability scanner]
[Hyperviewer GUI]
- May, 2003 - February 2004: Software Engineer, Think3 Inc. Industrial Design Applications R&D group, Salt Lake City, Utah
- September, 2001 - December, 2002: Software Engineer, Stabro Laboratories, Inc., Salt Lake City, Utah
- January-August, 2001: Systems Programmer, Halosoft, Inc., Pittsburgh, Pennsylvania
- 1980-2000: Co-founder and Project Technical Lead, GDC (Graphics, Design, and Computation) Project, School of Computing, University of Utah, Salt Lake City, Utah
- 1977-1980: Scientific Applications Programmer, Envirotech Information Systems Division, Salt Lake City, Utah
- 1975-1977: Graduate student, teaching assistant, and research assistant, DARPA 3D Computer Graphics Project, Computer Science Department, University of Utah, Salt Lake City, Utah
- 1973-1975: Computer Center Operations Manager and Systems Programmer, Parks College of Aeronautical Technology, Cahokia, Illinois
January 2008 - March 2009: Software Engineer in Computer Aided Design and Modeling,
Nanorex, Inc., Bloomfield Hills, Michigan
Responsibilities:
I worked from my home in Holladay, Utah designing and implementing
the NanoEngineer-1 molecular CAD
software, in Python with the Trolltech Qt GUI toolkit and OpenGL/GLSL. See an NE1 example screen and
the
NE1 Gallery for some examples of NE1 designs.
NanoEngineer-1 is:
- A portable, multi-platform, open-sourced Python and OpenGL program that is
freely available to the scientific community.
- A molecular Computer-Aided Design and Analysis system for graphical design and
molecular dynamics simulation of nanoscience experiments and developing
molecular nanotechnology (atomically-precise manufacturing.)
- A rich, 3D interactive molecular modeling system that includes high-level
design operations for Structural DNA and engineered proteins, including
automated ordering of synthesized DNA strands for massively self-assembled
DNA Origami tiles.
My major project on NE1 was speeding up the
real-time interactive 3D graphics display of molecular "ball and stick" models by
a factor of 50 times faster, drawing 50 frames per second for single DNA Origami tiles.
Assemblies of 10 tiles, which were previously impossible to design interactively, now
display at 10 FPS, so a factor of 100 times faster.
Here's how I did it:
- First, I factored the OpenGL Display List structures to avoid rebuilding them
for interactive color changes like mouseover-highlighting, yielding a 4 times
speedup. This still gave only 1 frame per second for 20,000 DNA base
pseudo-atoms in a DNAO tile, unacceptably slow for interaction, yet it was
about as far as the existing OpenGL graphics architecture of NE1 could
go.
- In search of a new approach, I developed benchmark drawing test cases to
identify and bypass bottlenecks, learning and applying several layers of newer
OpenGL extensions. I finally achieved sufficient drawing speed by:
- moving the data for sphere and cylinder primitives into Vertex Buffer
Objects (VBOs) in the Graphics Card RAM;
- implementing custom Graphics Card GPU ray-tracing primitive shaders for
spheres and cylinders in GLSL (the C-like OpenGL Shading Language);
and
- using multi-drawing calls with indexes stored in Graphics Card IBOs to
draw the primitives in huge batches for GPU parallelism.
- I collaborated with my co-worker Bruce Smith to design an intermediate-level
object-oriented API to encapsulate the management of the shaders, VBOs, and
IBOs for the primitive types most used in molecular models, first spheres and
then cylinders. Then I implemented it.
- We are now in the process of shifting the top level molecular model interaction
in NE1 over onto that foundation and making a final Nanorex release of NanoEngineer-1.
Responsibilities:
Worked as a research staff programmer in a networking and operating systems
research group. Extended the Emulab.net
network emulation testbed system, used by over 1500 researchers in hundreds
of organizations worldwide. Emulation means each experiment has repeatable
access to hundreds of real physical computers and network VLANs, with
controlled network link characteristics.
Some Emulab details:
- Emulab is time- and space-shared: time-shared in that experiments
persist, and can be swapped-in to physical resources on demand;
space-shared in that swapped-in experiments co-exist in the testbed
with private VLANs, plus a control-net link.
- Researchers use a Web interface, to create logical experiments, "swap
in" experiments allocating physical resources, and operate running
experiments. The system is implemented in PHP and Perl with XMLRPC,
Python, MySQL, C++, and C behind it.
- Logical network topologies and link characteristics for experiments are
described in the widely-used "NS" (Network Simulator) language,
embedded in TCL. Emulab extensions to NS specify the desired hardware,
OS image and software to load, and so on for each node PC in the
experiment.
-
Emulab cluster hardware consists of 348 rack-mounted PC's, each with 5
or 6 100-Mbps or 1-Gbps network interfaces and remote power and serial
console connections, several huge Cisco switches, and several
management and server PC's.
- Other Emulab experiment node types include a wireless testbed of 100
802.11 wireless PC's spread through the engineering building, a
sensor-net with 30 motes (6 of them mobile), and a PlanetLab portal.
Major Projects:
-
Ported the Emulab experiment-node management software to Windows XP
Each Emulab experiment node runs on a physical PC, on which a saved OS
image is rapidly installed using the Emulab "Frisbee" multicast loader.
The researcher has root privileges and can install any software they want,
then make custom OS images of their own.
Normally, they start with a base OS image containing Emulab management
services that set up:
- User accounts within a project, including SSH keys and shared project
and home directories;
- Network configuration including interfaces, TCP, DNS, routings, etc;
- The Emulab event system (control plane), together with many daemons to
synchronize the experiment node with the Emulab system and
operate the experiment.
The Emulab experiment-node management software was originally written for FreeBSD and
later ported to Linux. I ported it to Windows, scripting the complete
setup of Windows XP from the "Out-Of-the-Box-Experience" to full
operation in a few minutes.
I used the Cygwin GNU environment, Resource Kit tools, many Registry
hacks, and finally Sysprep to make hardware-independent images. I
found race conditions in the XP TCP stack initialization for the
multiple NIC's, requiring much check and reconfiguration logic.
- Improved the accuracy of robot
location-sensing on a mobile wireless sensor-net testbed
This work was part of a paper published in the
IEEE INFOCOM proceedings, April 2006 . Scroll down for the pictures!
Mobility is provided for 6 of the Emulab Crossbow "Mica-2" sensor-net
nodes. They are mounted on Intel "Stargate" PDA cards, which have an
802.11 control network card and control an Acroname "Garcia"
two-wheeled motion platform.
The Garcias roam in a 60 square meter L-shaped office area, with 6
ceiling-mounted security cameras providing location information for
navigation and control. Each Garcia has a "fiducial" marker consisting
of orange and blue colored disks mounted on top.
David Johnson and I surveyed a 1/2 meter measurement grid over the
entire robot area to a couple of millimeter accuracy; positioned
fiducials at the grid points with pins; and measured that the original
location software was accurate to only 10 cm. 1 cm accuracy was
determined to be necessary for robot and wireless repeatability.
We determined that much of the error was due to wide-angle distortion
in the lenses, calibrated and corrected for that. I devised an "error
cancellation" algorithm to remove the remaining static error, using
barycentric triangle coordinates to bilinearly blend corrections from
the center and corners of each camera area to its interior points.
The result was 1.02 cm max error over the whole robot
area, and 0.34 cm RMS (Root Mean Squared) error from the surveyed points.
- Implemented a complete automated testing
framework and SQL injection vulnerability scanner for the Emulab web interface
Most web sites are implemented in PHP or ASP code, with a back-end SQL
database holding user session and persistent state. Typically, SQL
queries are constructed on-the-fly, combining HTML forms inputs from
the user with SQL query statement strings. SQL injection attack
vulnerability comes from any form inputs that are not checked for SQL
metacharacters such as single- or double-quotes, allowing a DB query to
be "hijacked" by an attacker.
Checking forms inputs is generally trivial code, but it must be done on
EVERY input without fail, since a single vulnerability can give
away control of the whole database. A defender must block everywhere;
an attacker only needs to find one hole.
Researching this problem, I was surprised not to find tools available
to do complete, automated checking of web sites. The best I found were
manual "penetration testing" tools, random "blind" site-probing tools,
and programming toolkits for manually constructing web site test
frameworks.
The Emulab web interface is served from Boss, and it is not desirable
to "beat up" the main database for testing. But Emulab has a unique
ability to run "inner" copies of itself as "Emulab-in-Emulab"
experiments, where the Boss and Ops servers and some experiment nodes
are sequestered in an Emulab experiment for testing.
So I built an automated testing framework for the Emulab web
interface, with an SQL injection scanner on top of it.
An inner Emulab is started and "activated" by scripted creation of "one
of everything" in the DB. This causes all Emulab web pages to be
presented to a "spider" pass over the whole site. The saved pages are
then mined for forms input arguments; the inputs are combined with a
small test values dictionary; and test scripts are generated to drive
the web interface.
There are two test modes, one to just verify operation of each of the
forms through setup, control, and teardown of each managed object
type. Another probes each of the forms inputs individually by
substituting in a labeled SQL injection probe string.
A "probe catcher" pattern check on the way into DB query-handling code
reports the labels of uncaught probes that could compromise the
database. It's then trivial to fix up the input checking code, sealing
off the vulnerabilities. Since the process is automated, it can be
repeated regularly with little cost as the web site is evolved.
- Created hypview, an interactive GUI tool
for interactive three-dimensional exploration of network experiment
topologies.
It became difficult to understand Emulab Testbed network experiments as they
grew from tens to hundreds of router and hardware nodes, and then to thousands
of virtual nodes. Emulab experiments are specified in a programming language,
an extension of the widely-used ns network simulation language which is
in turn based on TCL. Besides needing to look for bugs in their ns
programs, experimenters began using and building their own topology generators,
so they needed to examine the generated network topologies.
Links:
The main OpenGL display pane in hypview is based on the C++ HyperViewer
software from Tamara Munzner at Stanford. I SWIGed it into Python and built
controls for it with the wxWidgets/GTK2 GUI Python toolkit, using wxGlade as a
user interface editor.
hypview is packaged for installation on FreeBSD, Windows, and Linux user
workstations, and is open-sourced along with the rest of the Emulab
software.
May, 2003 - February 2004: Software Engineer,
Think3 Inc.
Industrial Design Applications R&D group, Salt Lake City, Utah
Responsibilities:
I worked as both the local system integrator and a software developer,
contributing to Think3's Computer-Aided Industrial Design
software product.
As a software developer, I used C++, STL and ATL/COM, together with a
proprietary GUI environment and OpenGL, to implement new functionality for the
ThinkDesign product.
As the local system integrator, I did the final merge of software changes and
additions flowing from the seven programmers in Salt Lake City, checked them
in to the weekly world-wide build cycle in Italy via ClearCase Attache,
downloaded and compiled the next official build of the system and prepared it
for the developers, and ran the official regression test suites. To support
this process, I used and enhanced a suite of Perl programs developed in the
French R&D office of Think3, extended by my own automation using Cygwin/Bash.
I also introduced software power tools for use by the whole group, including
WinMerge and WinCvs.
September, 2001 - December, 2002: Software Engineer,
Stabro Laboratories, Inc.
(Now a division of Simco Electronics), Salt Lake City, Utah
Responsibilities:
I worked with the Stabro (now Intermountain Metrology Services) Information
Systems director to create the next generation of Web-enabled calibration
laboratory work-flow software using a combination of C#.NET client apps,
XML-RPC/SOAP, and Linux servers with Apache, Zope, Python, MySQL,
OpenSSH/OpenSSL, Samba, CVS and Amanda.
Stabro Laboratories is the only calibration service in the state of Utah which
is accredited by the A2LA under the ISO Guide 17025 standard. Companies which use many
kinds of measuring tools (electronic, dimensional, pressure-force,
temperature/humidity, light...) send them to Stabro to be calibrated against
standards which are traceable to NIST standards or physical constants.
Stabro uses software to track and schedule calibration work and maintain the
necessary history and standards traceability in an accredited Quality
environment. Just to make things interesting, calibration work is done at a
main lab, satellite labs, and by mobile technicians at customer sites.
We architected and implemented an evolution to the new C# (C-Sharp)
CLR .Net environment for visual client programs. This incrementally replaces
the legacy stand-alone Visual Basic and DOS applications programs,
front-ending DBASE/Clipper and Access/ADO databases on a Novell server. In
the new system, distributed calibrations are handled by Web Services client
connections to Debian Linux Zope servers, using XML-RPC/SOAP over HTTP,
authenticated by OpenSSH public keys and encrypted by OpenSSL. Server-side
business logic is written in Zope/Python and runs against MySQL databases.
We also implemented a Web Application server for calibration work status
queries by Stabro customers. This was done using the FCGI-Python interface to
Zope from the company web site on an Apache/HTTP server. Python code
processes data which was submitted by customer forms and queries the MySQL
database tables, dynamically generating HTML/JavaScript pages in response.
January-August, 2001: Systems Programmer, Halosoft, Inc.,
Pittsburgh, Pennsylvania
Responsibilities:
I created extensions and TechMetrix applications server benchmark code for the
Viva system as part of a small core team.
Our first two goals were to prove Viva on its own as a very high-speed
applications server, and to implement very high-speed Java J2SE applications
code compatibility.
Viva is the brain-child of Professor Levent Gursoz of CMU, who is the
founder and CEO of Halosoft. Viva is a remarkable technology including a
powerful, elegant programming language named V, together with a
network-distributed, platform-independent operating system environment. V
includes the ability to define language syntaxes as a low-level part of its
own self-bootstrapping, as well as native language-specific datastructure
primitives. It can thus naturally be used to implement multi-language
compatible development and runtime systems for a networked virtual computer.
Responsibilities:
I served as the first research staff member, chief system architect and a lead
implementer of the
Alpha_1 software project.
Alpha_1 is an extensible, portable, object-oriented, research
software testbed for Computer Aided Design and Manufacturing, Geometric
Computing, and Computer Graphics applications. Within that framework, I
personally advised the software portions of at least thirty M.S. and
Ph.D. research projects, as well as the continuous software evolution work
of a staff of up to eight full-time programmers.
Major Projects:
1980-2000 - Led research in B-spline (NURBS) sculptured shape modeling,
subdivision, refinement, trimming, and adaptive tessellation and graphical
rendering algorithms, as well as portable and object-oriented implementation
techniques. Mentored many generations of graduate students, some of whom then
remained in our research group as staff or faculty members.
1986-1995 - Led research developing a feature-object based mechanical
engineering language and manufacturing process plan representation, together
with automatic CNC machining program generation methods. Sub-projects
included CIDAM:
Concurrent Integrated Design and Manufacture , RaDEO-MIND: Multiphase
Integrated eNgineering Design , and
MADE/MadeFast . This work culminated in the FeatureCAM
commercial product of our tech-transfer company, Engineering Geometry Systems.
I am one of the four inventors granted
U.S. Patent number 5,726,896 for a real-time CNC machining servo-control
method which added NURBS curves and surfaces to the usual lines and arcs
handled by embedded machining controllers.
1982-2000 - Created and led the evolution of the
Shape_edit interactive design and geometric modeling environment,
featuring:
- A hierarchy of object vocabularies such as constructive and
sculptured geometry, volumetric primitives, and mechanical engineering
design and manufacturing process planning.
- Parametric procedural modeling and incremental user extensibility,
including the definition of new design vocabularies which inter-operate
smoothly with the rest of the system.
- Automatic model object relationship capture and dataflow incremental
change propagation algorithms, which automatically maintain consistency in
the model with minimal recomputation.
- Integrated procedural and graphical user interfaces, where either
interface representation may be used to evolve the underlying model object
graph, and the changes are automatically reflected in the other.
1982-1993 - Maintained and extended ports of the Utah PSL (Portable
Standard Lisp) system implementation and a series of Lisp object class
definition packages and inter-language Lisp-to-C/C++ interface linkages. This
was the base of our Shape_edit interactive modeling language, before
we built our own C++-based language. PSL is a self-bootstrapped
system, written in a dialect of itself called SysLisp, a variant of the RLisp
infix surface language developed for the Reduce symbolic algebra
system. PSL includes interpreted execution and both incremental and
batch native machine-code compilation and loading.
1980-2000 - With Beth Cobb, created StructGen, an object-oriented
class definition system on top of the C language, and used it as the basis for
evolving Alpha_1. The initial version was based on the system design
developed in my Masters thesis and predated C++ by at least five years.
StructGen is based on a meta-definition of the object structures
similar to the current C++ dossiers or Java reflection. It
includes generic method dispatching and polymorphic services such as deep
copying, and very efficient interprocess serialized binary communication of
structures of objects. Converted to C++ by Robert Mecklenburg in 1990, the
higher levels are still the basis of distributed client-server interaction and
persistent model state storage in Alpha_1. This has all been
portable across more than a dozen Unix platforms, including Linux and
Windows XP/Cygwin ports.
1990-2000 - Contributed to telecollaborative design research in our
five-university NSF
Science and Technology Center. This has included multi-way
teleconferencing with H.263 over T1 lines and H.323 over IP, combined with
real-time design refinement on networked computers. Concurrent distributed
engineering design and CNC machining projects using our Alpha_1 and
FeatureCAM software have included creation of a series of immersive
augmented-reality research instruments with the UNC group, and development of
a combined version of our design system with a post-WIMP gestural interface
with the Brown group.
1977-1980: Scientific Applications Programmer,
Envirotech Information Systems Division, Salt Lake City, Utah
Responsibilities:
Engineering and manufacturing support, including computer graphics
programming.
Major Projects:
- NC programming support for the Eimco Process Machinery and Tunnel
Mining Equipment Divisions: selected and installed an APT processor,
terminals, and plotters. Developed post processor programs, an NC tape
translator for an NC controller retrofit, and an automatic part nesting
program for NC flame cutters.
- Co-authored Sketch, a graphical editor/front-end for an
in-house structural analysis and automatic member sizing program for frame
and truss structures, as well as commercial analysis codes.
- Supported the Sap-4 and STRUDL finite-element
engineering analysis programs.
- Evaluated CAD/CAM systems for engineering design and NC programming
user groups within the corporation.
- Installed and maintained the DCLASS group technology (GT)
part classification system.
- Participated in the design of a distributed shop-floor data entry
system.
- In collaboration with a computer hardware engineer, architected,
designed, and implemented a single-board process control microcomputer
system for water treatment and chemical process installations.
Bootstrapped all system software: cross assembler, I/O kernel, and an
interpreted high-level process control program with a simple-English
natural language process specification parser.
1975-1977: Graduate student, teaching assistant, and research assistant,
DARPA 3D Computer Graphics Project, Computer Science Department,
University of Utah, Salt Lake City, Utah
Research Area:
Portable, object-oriented geometric modeling systems
architectures.
Thesis title:
Richly Structured Models and Modeling Systems
Advisors:
Martin Newell, Martin Griss, and Richard Riesenfeld
1973-1975: Computer Center Operations Manager and Systems Programmer,
Parks College of Aeronautical Technology, Cahokia, Illinois
Responsibilities:
Administrative and engineering data processing
Major Projects:
- Maintained and directed operations of the college-wide Registration
System, supporting the data cycle from class registration and classroom
scheduling, through tuition billing and report card generation.
- Data analysis programming in support of contracts to evaluate military
aircraft parts maintenance records.
- Aeronautical engineering computing support, including wind tunnel data
collection.
- Instructional computing support, with computing instructor John
Lamb.