I HAVE A BOOK!
My Primary Blog
My Daily Blog
Interdisciplinary. If you're looking for a specialist, I'm not it. On the other hand, if you are looking for someone who is comfortable writing code, welding up a prototype, doing original research, or filming a scene, we probably have something to talk about. I have degrees in art and ecology and I make a living programming computers. One of the most interesting issues I've ever tried to address is the interface between human and machine. I've spent most of my carreer building interfaces of some kind - graphical, robotic, even exercise machines. I'm currently pursuing a PhD in Human Centered Computing, another interdisciplinary field, in order to refine my understanding of this area further.
Working quickly and iteratively, proceeding from rough working prototype to polished final product is my preferred method of development. It doesn't mean proceeding without planning, but it does mean creating the space to try things and to re-evaluate if the project is on the right track. I fight hard for a clear set of requirements to work from. If those don't exist, then the development of requirements needs to become part of the iterative development process.
What I enjoy more than anything is solving difficult problems - getting immersed in the problem until the inevitable flash of inspiration that points towards a solution, usually in an unconventional way. Even better is doing this with a group of good people. I have done large projects on my own, but working with a bunch of bright, capable folks almost always adds a sparkle to the creative process that results in something better than any of the individuals alone could produce.
Python: It surprises me that an interpreted language for text manipulation became the language of choice for high-performance computing and machine learning, but here we are. I prefer the organization of projects and files to the more ad-hoc organization of Jupyter notebooks. Projects are easier to maintain and organize, when you're building enterprise-level applications.
C/C++: The first language that I really loved. I've developed simulators, graphics, hardware interfaces, artificial life, and topological analysis in C and C++. I believe a well made template can be a thing of beauty. It's also served as a gateway to languages for GPUs (cuda, GLSL) and been the backbone of all my work in embedded development.
Java: Starting with Swing apps and progressing to server development, this is the language that I've probably written the most lines in. I have moslty used it for supporting data visualization, either as full applications or applets and as server code supporting webapps. One of the more interesting efforts was extending the Eclipse framework in two efforts, a Maven project management plugin and a modification of the Eclipse framework to support a configurable framework for heath and status monitoring of large networks.
Perl: When webpages were just starting to get interactive and it was possible to interact with the server, I used Perl quite a bit on servers that wouldn't support Java. In this same catagory I'd add PHP and Python. All interesting and useful scripting languages.
Forth: The second language that I really loved. So fast. So small. So different from everything else. I initially used it as the control language for Elicon robots, but later when working at ATR, we used it extensively on several large-scale projects. I still value and use the data dictionary pattern that I used with Forth.
Pascal: My programming training wheels. Without knowing any better, I developed a full motion-control system with memory-mapped user GUI in Pascal. Then somebody introduced me to C. Still, a better language than many give credit.
FORTRAN: There have been occasions where I have had to work with developers who have developed specialized applications in FORTRAN. I've had enough experience so that I can communicate and debug effectively, so my job has been to integrate FORTRAN with C/C++ and Java applications.
Tech Mgt: I've managed small to medium (20-ish) teams for short, medium and long-term projects. One of the reasons that I wind up in charge of teams is that I'm good at communicating with management, developers customers, keeping goals in focus for all parties. I am particularly good at figuring creative ways out of show-stopping problems.
Visualization: I have spent most of my career and education figuring out how to present information (in the form of stories and data) beautifully and effectively. It's been an interdisciplinary effort, involving, motion picture special effects, simulation and most recently, the pursuit of a PhD in Human-Centered Computing. Because all that data won't be all that helpful if we can't understand what we're looking at.
Simulation: Simulation is one of the best ways for people to interact with computers. It allows us to interact naturally where we can bring our full body and all its information processing to bear. I've worked in most aspects of this field, from interface devices to physically-based models, to high-performance graphics. I've used simulation to train surgeons, model population dynamics and determine the best way to deliver the mail.
Genetic Programming: This is without a doubt, the spookiest development I've done. The computer is thinking, in its own way, and can arrive at some very interesting answers. One of the most counterintuitive things about GA's is how fast the initial convergence on an anwer is, but how slow the final few percent to a particular goal can be. I put together a small demo to show this here.
Machine Learning: This has been a very natural extension to my work with GA's. The availability of powerful frameworks like Tensorflow and PyTorch have let me do things that I could not do with hand-rolled GA code. I have particular interest in generative systems such as the GPT models and GANs. I think they have the opportunity to provide deep insight into how we as humans deal with information as groups and individuals
User Interfaces: As a user of my own systems, I have had to pay a lot of attention to user interfaces. One of the biggest lessons is that if someone is having problems using a computer, it is almost always a failure in the interface. Unfortunately, users seldom hear that, so there is a population of people that believe that they are stupid because they can't get their computer to do the right thing. A good interface should stand on its own and not need instruction. It should support exploration through play. It should give reasonable feedback. These are things that as developers we should never lose sight of.
Web Development: Coming up with effective ways to balance the back and forth of client/server resource allocation and development has been a major part of my work, even beyond data visualization. How to make widespread interaction effective and useful is a big problem and not one easily solved. A lot of the patterns that I use for this comes from my work in control systems, where systems cannot fail, but can gracefully degrade. Applying this to client-server architectures from simulators to websites has been particularly interesting.
Hardware Interface: There is only so much that you can do with a mouse and keyboard. Making an interface more natural and intuitive can greatly enhance performance and learning. I have developed and built numerous interfaces, some based on libraries such as Open Haptics and Phidgets as well direct access of chip memory. This has been in support of robots, simulators, game interfaces and pure research.
Statistics: I've oten had to use some level of statistical analysis to ensure that, for example, manufacturing error rates are going down. In the course of my PhD work, I've become much more involved with using statistics for research, and have become quite familiar with packages such as SPSS and [R].As part of my studies, I put together a web interface to [R] using Flex, Java, and the RServe application.
ASRC Federal:: Currently leading the development of Supervised Machine Learning, AI and Network Analytics for a project used by health care organizations to monitor staff and applicants for positive and negative behaviors. The system uses analysts to guide the learning of various 'profiles' that are then used to generate flags with respect to the person of interest. An ontologically-based network is associated with the retrieved information in such a way as to provide dynamic, interactive exploration of individual and group behaviors from a variety of contexts including cost, performance, team cohesion and morale.
Novetta: Project lead and senior developer on a project to provide a complete web-based visualization framework for the creation of interactive dashboards. Senior developer on mobile data visualization project. Developed several haptic interface technologies for telepresence and virtual reality integration.
Proteus: Led the development effort to implement a web-deployed health and status visualization in Flex. Developed a variety of visualization systems and frameworks within an Eclipse/Subversion IDE using Java 1.5 and 1.6.Responsible for developing a J2D-based system for system health and status monitoring that displays very large information datasets in real-time.Implemented a 3D geographically-based network status monitoring tool. Implemented in Java 5 utilizing the JOGL API.Designed an agent-based simulation for the production of very large amounts of data that in turn provide a baseline framework for determining optimal pattern extraction techniques.
Powergrid Fitness: This is a company I co-founded to produce exercise equipment that exploit the tremendously motivational nature of videogames to provide an entertaining, addictive workout. Due to Powergrid's small size, I was involved in every aspect of the company, from writing parts of the business plan to welding up the trade show booth. My particular duties were the invention and development of the core isometric technology and the design of the entire product line. This included the core isometric/strain gauge technology used, determining the ergonomic constraints for exercise/gameplay, supervising the initial mechanical and electronic design, as well as the actual design and implementation of the derived products. In other roles, I designed and implemented iterations of the website, sourced materials, authored patents, written STTR proposals and have been interviewed by everyone from NBC Nightly News to the Laurel Leader newspaper -- in other words, everything you'd expect from a small, high-tech startup.
Consultant: Developed 3D agent-based simulation system based on GeoGraphs, the RePast platform (Java) and XML. This contract was with the Office of Naval Research through the University of Maryland. The system provides methods for using geographic agent networks to model generic social situations, ranging from epidemics to terrorist threat and response. Developed large-scale LIDAR point visualization and manipulation software for NIST. Developed in C++ and written to be cross platform between Windows and Linux, the system provides the user with the capability of manipulating and aligning datasets consisting of up to 50,000,000 points in real time.
Immersion Medical: Implemented a proof-of-concept 3d graphic simulator for vascular access and rigid bronchoscope simulators. This led to a transition from SGI to PC platforms for HT simulator products. For a vascular access project, developed driver software for Win95 and NT platforms, and designed and produced mechanical prototypes for over 50% of the design. Supervised the software development for three product lines - Peripheral Vascular Access, Endoscopy, and Interventional Radiology, with a staff of 12 - 15 throughout the development process
ATR: Developed and implemented a graphics-based CASE tool for a C-language implementation of a state-table/dictionary-based control system running on a Silicon Graphics UNIX platform. Wrote topological study and high-speed analysis software to develope the â€œneighborhoodâ€ mail handling scheme currently being implemented in USPS General Mail Handling Facilities. Developed and implemented simulation and graphics for a demonstration project involving the simulation of a 637-class submarine. Generated and implemented simulations of various large scale mail handling system prototypes. These simulations were developed to run in real time and provide the user with a detailed, three dimensional view of the facilities, with full walk-throughâ€ capability.
Daedalean: Project Engineer on the CQCR training system, a classified system involving the real-time combination of video, computer graphics, and mechanical control in a building-sized environment. Co-project engineer on the GUARDFIST appended tank training system. This included: the development and implementation for the proof-of-concept system, development and implementation of the physics simulation for the production system, and supervising the development of the real-time graphics for the production system.
R/Greenberg Assoc.: Developed a system for tracking a camera position in space with extreme accuracy in real time. Depending on the size of the environment, the camera could be tracked using mechanical linkage, emitter/camera, or laser-based systems. Accuracy on the order of .0001 inch were required for the system, which also had to be lightweight enough to be hand held. Worked on motion control, lighting and camera for a number of commercials, including spots for Pillsbury, Rayovac, Citrus Hill, Coronet, Grundig and Krupps. Assisted on the feature Predator.
Perceptronics: Designed and built multi-axis robotic motion control systems for filming DoD maps for later incorporation into videodisk tactical displays. Also programmed videodisk map viewing.
OpenGL: From the initial SGI GL through all the flavors of OpenGL to include GLSL, this has been the framework that keep on returning to. It's fast, clear, and remarkably reusable and portable. And now with apis like WebGL and famo.us, it looks like it's finally making it to the browser (mobile even!). When makes things fun for those of us who like high performance visualization. And now that IE supports it, this version of my resume is in WebGL.
FLTK: I've developed a lot of Windows applications. Sometimes even using the Windows APIs. Sometimes on Linux. But when I want to do something quick and easy that supports OpenGL in a simple, intuitive way, I turn to FLTK. It's 90% of what I need in a windowing framework, without the cognative headaches that Microsoft's frameworks engender. If you haven't tried it, you might want to the next time you need a simple windowing framework.
[R]: I've used SPSS and various statistical plugins for Excel, but when I need to add statistical capability to programs, I really like R. First, it can do pretty much anything. Second, it has RServe, so if you have a network connection to a webserver running it, you have a heavyweight statistics back end. I've used this very effectively for a web-based statistical package, and would love to see what I could do with a mobile app.
Haptics: This was originally going to be about OpenHaptics, but in reality I've used quite a few APIs to provide haptic stimuli. With respect to OpenHaptics, I've used the HD libraries for a variety of reasons. I can put them into a separate thread, which gives greater stability and the higher level APIs use OpenGL 1.x, so graphics are pretty limited. For vibrotactile work I actually like XAudio2. You get control of up to 8 actuators. Pror to that I used Arduino for vibroacoustic and Phidgets for haptics.
Angular: As is the way with things Internet, Yahoo pulled the plug on YUI and I had to find another framework. After more research, and also based on it's growing popularity, I chose to focus on AngularJS. I'm currently working on WebGL charting and using TypeScript as a mechanism for enforcing good coding practices.
B.A. (University of MD, 1983): An interdisciplinary degree focusing on filmmaking, multimedia and photography. Part of my fimmaking efforts was in animation, which resulted in the building of subsequently larger and more capable systems. The machine that I did my final project on was a 5 axis motion control system, and was probably more work than any official project that I did in the department. It's what got me started in programming and robotics.
M.S. (Johns Hopkins, 1995): Another interdisciplinary degree. The emphasis of this degree was ecology. At the same time I was developing simulations at ATR, and became interested in genetic computation and artificial life. My Mater's Thesis was The Coevolution of Weapons and Aggression, which reported on the simulation of population behaviors when technologically derived weapons were introduced.
Ph.D. (University of MD, 2020): My research has been focussed on the development of Stampede Theory, which describes the patterns of behavior that emerge as humans interact with information, particularly when mediated through technology. This is particularly useful in identifying and treating misinformation at scale, when it is difficult for automated systems to identify and respond effectively to dangerous misinformation in time to have an effect.
Robotics projects: Animation stand (BA), animation stand (Perceptronics), vascular access, bronchoscopy and colonoscopy interface devices (Immersion Medical), testing rigs (Powergrid fitness), force-input/motion feedback full hand interface (Novetta), and enhanced Phantom Omni with force-sensing vibrotactile actuators.
Virtual Reality projects: Augmented reality camera prototype (R/Greenberg Assoc.), immersive tank trainer (DAI), flight simulator (ATR), endoscopic view simulators (Immersion Medical), Immersive videogame platforms (Powergrid Fitness), and mediated telepresence (PhD/Novetta)
Filmmaking projects: President's Council on Physical Fitness PSA (BA), DoD videodisk maps (Perceptronics), numerous ads, trailers and FX work (R/Greenberg Assoc.), corporate and instructional videos (DAI, ATR, PhD)
Simulator projects: M60A3, M1A1, forward observer, 360 engagement(DAI), USPS, 637-class attack sub, LCAC, automated mining (ATR), vascular access, interventional radiology, bronchoscopy, colonoscopy, pacemaker leads placement.
Data Visualization: Animation system Health and Status(Perceptronics) CASE tools, topological analysis, Neural Nets, factory simulations (ATR), Medical simulation of heart and blood behavior, tissue modelling, student performance (Immersion Medical) agent simulations of multiple populations, LIDAR information (Consultant), testing and defect tracking, sensor development (Powergrid Fitness), Health and Status machine and network monitoring, 3D geographic information, agent simulation (Proteus), Graphical data analysis, interactive statistics, financial reports (Novetta)
Software Agents: Markov model OPFOR vehicles (DAI), stochastic factory workers, GA/GP Alife simulations (ATR) CA blood, stochastic in-game characters, medically accurate heart electrical model (Immersion Medical) stochasitc social agents (Consultant), stochastic social agents (Proteus)
3D Graphics: Graphics for Augmented Reality proof-of-concept (R/Greenberg Assoc.), M60A3, M1A1 simulators, environment simulation for vehicles, factory visualization (ATR), Medically accurate tissue and X-Ray visualizations (Immersion Medical), social network displays, LIDAR visualization (Consultant) gloabal Health and Status Monitoring (Proteus), mediated teleoperation, WebGL (Novetta/PhD)