Resume and Career

Latest resume as text or .doc (written using Open Office Writer), or PDF.

Thirty Seconds

My thirty-second elevator pitch would go something like:

"I figure out tricky technical problems, create tools, brainstorm and test ideas, design and build electronic and software systems and develop techniques to push beyond what was thought possible, to serve worthwhile purposes in art, manufacturing, science and education.

While not a deep virtuoso expert at all of the things i work with, i'm expert enough in several areas, so i may draw upon ideas from audio, visual arts, physics, electronics, and even the performing arts to come up with and implement technical solutions. If i had more than thirty seconds, i'd tell you about my horde of monkey slaves who do the actual work."

Summary

The unifying theme is handling of science and engineering data from sensors to display. I am a creative thinker, artist, and engineer with technical skills in electronics, physics and computer graphics, experience in image processing, photography, art and software development, and a passion for applying these to engineering and science instrumentation, planetary science, visual arts, solar energy and sustainable living.

The unifying theme is handling of science and engineering data from sensors to display.

Selected Positions and Projects

cover of National Geographic December 2006, showing high-phase angle image of Saturn that i worked so hard on

Graphics Software Researcher

Planetary Science Group, Univ. of Central Florida

Using VTK, Mayavi2, Python and Numpy, C++, and more to examine data from physical simulations, investigate data from Spitzer in the hunt for exoplanets, and other projects.

Cassini Image Analyst

Space Science Institute, 2003-2008

Calibration, defect repair, enhancement and panorama assembly of images from the Cassini spacecraft, working directly for Dr. Carolyn Porco. Results of our work have been prominently visible to the world.

A Pleasing Comment

One pleasing moment several years ago, when i had been working at a manufacturer who had invested in some fine and pricey electronics equipment, but not getting any value from it due to nonfunctional interfacing software. Every so often, the supplier of this equipment would send a sales engineer or consultant to give us a dog-and-pony show, trying to persuade us to use their terrible software. They even had a software engineer at our location for months to work on it, but with little success. This vendor seemed to have no concept of safety, integration into existing control software, or operational simplicity.

My colleagues and i got it working with our own from-scratch software with a marvelously streamlined user interface well-tuned to our facility's needs. We made a reliable well-documented interface to our software and data. We were happy. It met our safety requirements, and the people in the shop actually using it were pleased. We took their every request into account.

One day, some of the equuipment maker's guys came for a visit and we showed them what we had made. A big bright user interface, no mouse action necessary during safety-critical activities, data being passed in real time from sensors to laptop display and recorded in human-readable files, and generating reports according to an busy-engineer-friendly scripting language i had invented. They were amazed at how their efforts came nowhere near what we accomplished. I don't recall the exact words one said, but something like "Man, what you guys have done... is... just way beyond anything we ever thought of!"

I enjoy creating systems that lead to such comments.

Even if i work on more mundane, non-envelope-pushing systems, i always aim to:

  1. Understand what's already in use and why it falls short
  2. Think of something better
  3. Design it clearly, so that others can understand it. No clever algorithms only a Mensan can unravel or strange obfuscations
  4. (there is nothing interesting between these parentheses)
  5. Make the thing work
  6. Supply APIs, file formats, etc to staff software engineers
  7. Document it clearly, for users and for programmers and technicians, so it can be maintained and modified.

Skills, Tools, Areas of Expertise

Electronics

Analog circuit design, components, circuit simulation using QUCS, SPICE and the like. Drawing schematics, documenting, ordering parts. Prototyping, making PCBs by hand, soldering, troubleshooting and improving circuits. Familiar with all the usual lab tools and instruments: oscilloscopes, spectrum analyzers, meters, soldering, etc. Built an oscilloscope from a kit in 7th grade (or was it 8th?), and designed and built a specialized digital computer using 7400 series TTL for high school science fair. Lab instructor for the digital electronics course for computer science majors at Indiana Univ.

Physics

Particle accelerator beam position monitors. Quantum field theory. Supersymmetry (not an expert!) and other esoteric theories on the fundamental structure of space time and matter. More practical: solid state physics, QED, optics, and general physics teaching and lab instructor.

Photography

Digital and film, though film matters less and less as time goes on. F-stops, exposurs, light meters and all that technical stuff. Image retouching, enhancement. Panorama stitching. Special effects shots and compositing. Artistic effects. Often get favorable comments on color, composition. (Sorry, i don't do weddings!)

Audio, Video Production

Scripting, storyboarding, planning. Video cameras, CCUs, video switcher, studio lighting, video editing, video special effects including green-screen (actually, i once used magenta-screen; we were shooting a green subject) and silhouette shots. Producer/Director of stop-motion 2D animation student production at Specs Howard.

Play saxophone, clarinet, keyboard, and electric bass guitar. Dynamic, condensor and ribbon microphones, audio mixers, compressors, filters, etc. Troubleshooting bad connections, hum, digital interference. Audio editing and processing with Ardour, Audacity, Jamin and Cakewalk Sonar (commercial) and, a while ago, razor and reel-to-real.

Production Ass't and Ass't Director at WTVS-56 in Detroit. Productions include Health Matters, Detroit Black Journal, Club Connect, and pledge drives. Bass player and studio wiz for Tami Deal. Sound board op at Harbor Fellowship church, Fort Collins.

Computer Graphics

Ray tracing, radiosity. POV-Ray, Radiance, Yafray, OpenGL and other rendering software. Color theory and human perception of color, shapes, illusions. Blender for modeling.

Math

Differential equations, Fourier transforms - fast, slow, and fractionally iterated, classical filtering theory, 3D and any-D geometry, group theory, differential geometry, symbolic algebra (wrote my own primitive system, nothing compared to free and commercial packages like Maple, sympy, Mathematica, etc.), combinatorial and probability theory, genetic algorithms, etc. etc. and etc. Invented and published a new way to fractionally iterate the exp(x) function. LaTex for typesetting equations.

Programming Languages and Tools

To keep my resume short, otherwise it wouldn't be a "resume", I've left off many minor languages and tools that were of some use at one time or another. No list will ever be complete, but here are some of the more important and interesting languages and tools I use:

C++
Fairly expert at C++. Using since 1991. Great for close-to-the-silicon work, high performance graphics and number crunching. While i am aware of templates, operator overloading, multiple inheritance and so forth, i usually try hard to avoid these fancier features. The code i write often must be understood by scientists, managers, federal inspectors or be handed off to less experienced programmers, so i like to keep it comprehensible. You might call it "C+" programming.
D
An interesting language i've tried but am not yet expert at. An improved language from Walter Bright based on C++ and other languages. What Java should have been, had the designers put more thought into it. Most of the time, i'm either using Python (writing extenstions in C++, i mean, "C+"), writing small experimental programs in C++, or doing something requiring high performance, so I don't know if D will be useful anytime soon.
Java
Not an expert. It could be argued that due to its use nearly everywhere these days, every software developer should know Java. To write "Hello World" i need a cheatsheet or an example to follow. I have, however, altered image processing routines written in Java to improve the image ingestion process at CICLOPS, and have had other occasions to tweak existing Java code elsewhere.
Python
Aiming at high expertise, but this language has grown so popular in many realms, i'm going to ignore entire sectors of libraries, extensions etc. I've written extensions in C++ to read archaic file formats, do special number crunching (with or without numpy) and interface with other software. With numpy this is a fantastic language (not perfect, merely fantastic) for number crunching, exploring data from remote sensing or simulations, and creating graphics for science or art. Some of my photographs processed to look like ink drawings were made with Python - see my Zazzle gallery for examples.
Ruby
Far from expert, but found Ruby to be great fun, the easiest language for serious OO programming. Very easy to read in archaic formats like Cassini's VICAR image files. Useful for quickie scripts and odd jobs where for some reason i don't want to use Python.
IDL
Expert at language, never used some of the fancier features. The Interactive Data Language from ITT-VIS (used to be RSI), popular in science and engineering. I use it heavily every day to calibrate and enhance Cassini images. First contact was back in the 90's when i studied the syntax, but not actually using it beyond tiny sample code, along with MATLAB and other interactive languages when designing a new language for a project. IDL, with all the varied extra tools, has something for every kind of scientist and engineer, but no one individual is likely to use even 1/2 of it all.
Haxe
Not so well know, Haxe is great for creating Flash .swf files on Linux. No need for Adobe's (are they the current owner now?) Windows/Mac GUI software. Can also create standalone apps using the neko
x86 Assembly
Great for speed optimization, in certain cases. Besides x86, i've written assembly, or bare naked machine code, for 6502, Motorola 6800 and RCA 1802. Not so useful these days, since whatever opcodes you write don't map directly to registers and operations as actually carried out.
Ada95
Not much useful at the places i've been, but an admirable language. Certainly runs circles around C++ for ease of learning, maintainability while having same close-to-silicon feel and performance. Would like to find a project where i could use Ada95 in depth.