Resume for Donald Edward Hopkins


Introduction:

This is the detailed resume of Don Hopkins, as of November 1996, in HTML format (though you may be reading a printed copy, in which case you look at the original at http://www.catalog.com/hopkins/don/resume.html, or you may email me at "don@toad.com" for a copy of the HTML file, so that you may more easily click on the links).
[Contents] [Introduction]

Contents:

[Contents]

Address:

Donald Edward Hopkins
3885 Magnolia Drive
Palo Alto, CA 94306
(415) 856-7548
don@toad.com, hopkins@interval.com
http://www.catalog.com/hopkins
[Contents] [Address]

Interests:

User interfaces. Programming environments. Visual programming languages. Programming by demonstration. Authoring tools. Human factors. Language. Writing. Graphic design. Animation. Performance art. Distributed hypermedia. Multimedia production. Multi user interaction. Input devices. Direct manipulation. Gesture. Pie menus. Object oriented toolkits. Window and user interface managers. Cellular automata. Signal processing. Networking.
[Contents] [Interests]

Programming Languages:

Java. Bounce. ScriptX. Lisp. Scheme. Logo. PostScript. NeWS. Forth. C. C++. Pascal. Basic. TCL/Tk. Csh. Various assembly languages. Well versed in object oriented design and visual programming.
[Contents] [Languages]

Hardware Experience:

Mac. Windows. Sun. Silicon Graphics. HP (Unix, HP3000). DEC (Unix, ITS, TOPS-20). Pyramid. Symbolics Lisp Machine. Xerox 8010. ZMob parallel processor (Z80). Apple ][. Various micros.
[Contents] [Hardware Experience]

Operating Systems:

Various Unix platforms. MacOS. Windows 95. Windows NT. MS-DOS. ProDOS. ITS. TOPS-20. Viewpoint (Xerox Star). XDE. Symbolics Genera.
[Contents] [Operating Systems]

Communication Technologies:

ActiveX/OLE/COM. Bounce visual programming language. Shockwave and MacroMedia M5 library. Multi player networked SimCity. Distributed ScriptX. Dynamic extension languages. Distributed objects. World Wide Web authoring. Interapplication communication. TCP/IP. Spread spectrum packet radio. Low bandwidth communication. Protocol design. Terminal emulation. Administration of WWW servers, FTP software archives, large Internet mailing lists.
[Contents] [Communication Technologies]

Work Experience:


[Contents] [Work Experience]

Interval Research Corporation (Jan '96 - present):

Ported Bounce, a visual data flow programming language, to the PowerPC Mac using MetroWerks CodeWarrior. Designed a cross platform language neutral multimedia plug-in architecture using COM on Win32 and MacOS, for plugging new data processing modules and data types into Bounce and other tools, games, and products.

Ported Microsoft's ActiveX Template Library to the Mac, and used it to implement the MacroMedia MOA IMoaDict interface, then integrated it and other COM interfaces and data types into Bounce, as well as Mac Common Lisp. Used these new plug-in data types together with Bounce, Lisp, C, and C++ to implement advanced technology demos.

Programmed extensively using DirectX, COM, OLE, ActiveX, MacroMedia MOA, Microsoft Developers Studio on Windows 95 and Windows NT, Metrowerks CodeWarrior on PowerPC MacOS.

Researched many technologies relating to plug-in architectures, Windows programming, game development, network communication, user interface development, etc. Wrote a detailed report about my research, as a web of more than 100 intertwingled pages of html.

[Contents] [Work Experience] [Interval Research Corporation]

Kaleida Labs (Nov '93 - Jan '96):

Worked for Tim Oren as Senior Programmer on Distributed ScriptX. Designed and implemented a distributed object messaging system, integrated with the internals of Kaleida's Objects in C, for distributed multimedia titles over interactive TV and Internet. Studied Interactive TV networking, ATM, video distribution, Kaleida's set top box, operating system, and MPEG graphics chip. Distributed ScriptX supported transparent network object proxies, multithreaded synchronous and asynchronous remote procedure calls, remote exception handling, and proxy garbage collection, using a dynamic messaging protocol.

Worked for Developer Services creating ScriptX design examples, for Devorah Canter and Chuck Stevenson. Designed, implemented, cleaned up, and documented ScriptX demos and class library modules, demonstrating the dynamic object oriented nature of ScriptX. Wrote ScriptX code and produced multimedia content for demos. Brainstormed with multimedia developers and artists, integrated artwork with code, and produced animations. Experienced with scanners, video frame grabbers, audio digitizers, video and audio recording equipment, CD-ROM authoring, Photoshop, Painter, Debabelizer, Premier, Director, etc.

Designed and implemented an Animation module that supports different media formats via a high level animation protocol. Produced sample animations in various formats like Quicktime, bitmap, filmstrip, audio, and Director. Used the Animation module for DSX, Playfarm, Slide Show, and DreamScape demos.

Wrote a Slide Show demo, that allows you to dynamically load animated objects into a presentation. Used to give ScriptX presentations and demos at trade shows and conferences.

Reworked the Playfarm design example to use the Animation module. Cleaned it up, stored persistent objects in title containers, made user interface improvements, optimized, commented, and documented. See Assaf Reznik's article, "Character Simulation with ScriptX" at "http://www.catalog.com/hopkins/lang/scriptx/drdobbs/drdobbs-1194a.html".

Worked with the Director Importer Toolkit, writing specialized importer subclasses to read the cast and score out of Director files and translate them into ScriptX objects. Studied the Director file format, the MacroMedia M5 MMP player library, and Kaleida's object oriented Director Importer Toolkit, written by Steve Riggins.

Created the ScriptX Pizza Demo, showing how to distribute interactive multimedia ScriptX objects via the World Wide Web. Uses ScriptX as a Web browser helper application, to download title containers of ScriptX objects that plug together and interact dynamically.

Designed, implemented, and used a mouse input tracking module, that supports delegation, coordinate transformation, offscreen caching, drag and drop, and direct manipulation. Simple to use but powerful. Hides complexity, provides high level services with reasonable defaults, and uses resources efficiently. Easily subclassable to implement custom tracking behavior. Used in several ScriptX demos. See the "ScriptX Tracking Service" at "http://www.catalog.com/hopkins/lang/scriptx/tracking.html".

Designed and implemented a ScriptX Web Toolkit, for creating interactive World Wide Web services, authoring tools, and browser helper applications. It provides object oriented HTML structures for dynamically generating web pages, with Lisp-like dynamic macro expansion of parameterized procedural templates for web pages. HTML objects are easily composed into nested structures that automatically render themselves as HTML text. They're subclassable to support new HTML constructs, and can encapsulate high level interaction techniques, like automatic forms and image maps. Wrote a gif exporter for ScriptX, so it can embed dynamically generated images and image maps in web pages. See the "ARPANET Psiber SPACE (circa 1986)" generated by ScriptX at "http://www.catalog.com/hopkins/arpanet/index-large.html".

Designed and implemented an interactive ScriptX web service and dialog manager, with support for forms, object reference externalization, dynamic image maps, HTML macros, etc. Demo services include a user-friendly "NORML" markup language translator, browsers for the file system, ScriptX classes, objects, DreamScape rooms, parts, and maps. Interfaced ScriptX to the web via the Web Server CGI Interface, as well as the Web Browser Remote Control Interface. See the "ScriptX and the World Wide Web" paper at "http://www.catalog.com/hopkins/lang/scriptx/scriptx-www.html", and the "ScriptX Web Module Documentation" at "http://www.catalog.com/hopkins/lang/scriptx/web.html".

Put together the original official Kaleida Labs Home Page. Translated documents to HTML. Scanned and processed images. Wrote web pages and indexes. Registered Kaleida in directories. Analyzed usage logs. See the "Kaleida Labs Home Page" at "http://www.kaleida.com".

Designed, implemented, and produced the DreamScape ScriptX design example. Demonstrated it at the Apple Worldwide Developer Conference, a video transcript of which is available on the web. See the "ScriptX DreamScape Demo" video transcript at "http://www.catalog.com/hopkins/scriptx/demo/index.html".

DreamScape is an open-ended plug-together framework for ScriptX objects, consisting of rooms connected together in a map, with plug-in authoring tools and interactive objects that you can directly manipulate, in a simulated physical environment. It enables you to plug dynamically loaded animated objects together so they interact with each other in many interesting ways. See the "DreamScape Documentation" at "http://www.catalog.com/hopkins/scriptx/dream.html", and the "DreamScape, a ScriptX Design Example" manual, at "http://www.catalog.com/hopkins/lang/scriptx/dreamdoc/index.html".
DreamScape uses the Tracking and Animation modules, and the Director importer toolkit, to compile Director scores into articulated ScriptX animations. I worked with artists and multimedia tools to produce backgrounds and animations for demos, and programmed plug-in objects that dynamically link in code, including a Cellular Automata Machine engine, and a Web Browser Remote Control interface that I wrote in C.

The DreamScape Web plug-in allows you to use NetScape to browse the state of the DreamScape environment, viewing rooms and maps as clickable dynamic image maps, interacting with rooms and the objects within them via illustrated web pages with forms that allow you to inspect and edit their properties. I also prototyped a web authoring tool using the ScriptX Web Toolkit with DreamScape, that writes out every DreamScape room and the objects they contain as an interlinked web of static HTML pages, gif images, and image maps.

[Contents] [Work Experience] [Kaleida Labs]

Levity (Aug '93 - present):

Worked with David Levitt on Bounce, an exciting visual data flow programming language for the Mac. Bounce was originally called Body Electric, developed by VPL for graphical data flow programming of virtual reality performances, interactive TV shows, dynamic multimedia simulations, etc. It's useful for real time input device processing, dynamic 3D rendering, and remote control of devices networked via midi, serial, ethernet, etc.

I've hacked the ANSI C Bounce language source code, using Think C, as well as programming visual data flow modules in Bounce itself. I worked on the interface to the MacroMedia Director projector, that David had originally developed for his earlier visual programming language "Hookup". I built data flow modules into Bounce for controlling animation, sound, projector info, sprite info, hit detection, window control, monitor volume, etc.

Tasks included testing the data module plug-in interface, making user interface improvements, Mac Toolbox programming in C, sound manager work, and MacroMedia M5 MMP director player library hacking. Programmed visual Bounce modules for 3D physics simulation, 3D vanishing point projection with scaled Director sprites, character animation behavior, etc, for the SpaceSeed demo. Ported the Isaac 3D renderer, that Bounce can remote control via ethernet, to the latest SGI operating system. Worked with the Electric Carnival MIDI Zoo, showing Bounce and Multi Player SimCity. See the "Bounce Stuff" page at "http://www.catalog.com/hopkins/lang/bounce/bounce.html", and "The Electric Carnival at Lollapalooza" at "http://www.catalog.com/hopkins/don/electric-carnival.html".

[Contents] [Work Experience] [Levity]

DUX Software (Dec '91 - Nov '93):

Ported SimCity, Maxis's city simulation game, to Unix. DUX licensed the source code to SimCity from Maxis, and they contracted me to port it to Unix. I produced and shipped two products: SimCity HyperLook Edition for NeWS, and Multi Player SimCity for X11. Multi Player SimCity for X11 was awarded best product of 1992 by Unix World (January 1993 issue).

I studied, rewrote and optimized much of the original Macintosh C and assembly source code from Maxis. First reimplemented the user interface from scratch as Open Look using the NeWS toolkit and HyperLook on OpenWindows 3.0, then reimplemented it again as Motif using TCL/Tk on X11, with multi player capability. Created an audio server to mix real time sound effects, multiple scrolling map views with shared overlays, fast local shared memory animation, with optimized remote bitmap updating fallback, talking pie menus for efficient selection of city building tools, and many other improvements to the user interface. Wrote an illustrated reference manual with FrameMaker. From Glasgow, Scotland, I successfully single-handedly produced and delivered the completed product and manual to DUX in Los Altos, California, and distributed it via the Internet and the Sun Catalyst CDROM.

Released SimCity first for OpenWindows on Sun, then for X11 on Sun, SGI, HP, DEC, and NCD audio X terminals. Designed and developed the multi-user version of SimCity for X11, extensible with the TCL programming language, called "SimCityNet", that I showed running on a couple of SGI's at the InterCHI '93 Interactive Experience in Amsterdam. It supports multi player collaboration in the same city, text telegrams, shared user interface sound effects and graphical overlays for annotating and gesturing, multi-user voting dialogs, as well as other features to coordinate players and support political cooperation. See the "Video Tape Transcript of X11 SimCity Demo" at "http://www.catalog.com/hopkins/simcity/x11-demo.html".

The fully functional demo is available via ftp, that can be unlocked by purchasing a key by phone, so it doesn't melt every 5 minutes. The latest version features a bizarre totally undocumented bouncing cellular automata surprise screen, accessed by clicking on the graphics in the "about" box. See Dux Software's SimCity anonymous ftp directory at "ftp://ftp.uu.net/vendor/dux/SimCity", and the "SimCity Info" page at "http://www.catalog.com/hopkins/simcity/index.html".

[Contents] [Work Experience] [Dux Software]

Carnegie Mellon University Computer Science Department (Sep '92 - May '93):

Worked for Brad Myers as a research programmer on the Garnet project. Garnet is an advanced object oriented user interface management system for X11, written in Common Lisp, using KR, a prototype based object oriented frame system with constraints. Redesigned the "Opal" graphics layer of Garnet to be modular and portable, by defining a "Glass" interface (Graphical Layer and Server Simplifier), in order to port Garnet from X11 to Display PostScript and the Mac. Rewrote the Garnet PostScript graphics printing module. See the "Garnet Project Home Page" at "http://www.cs.cmu.edu/Web/Groups/garnet/garnet-home.html".

Extended the "tvtwm" X11 ICCCM virtual window manager to support user definable pie menus with graphical labels, and designed a set of efficient window management pie menus. The source code is available via anonymous ftp. See the "piewm" source code distribution at "ftp://export.lcs.mit.edu/contrib/piewm.tar.Z".

[Contents] [Work Experience] [Carnegie Mellon University]

The Turing Institute (Feb '92 - Sep '92):

Worked in Glasgow, Scotland, at the Turing Institute, with Arthur van Hoff on HyperLook (formerly called HyperNeWS), an object oriented direct manipulation graphical user interface development environment for NeWS in Open Windows. Designed and implemented object oriented multimedia toolkit components for animation, video, and audio, using ANSI C, object oriented PostScript, and PdB (a C to PostScript compiler). Integrated The NeWS Toolkit Open Look components so they can be copied and pasted into the user interface and edited with property sheets. Rewrote the direct manipulation user interface editor as a separate component so it can be easily customized and replaced, and removed to create a runtime system. Rewrote the client/server communication library to use the NeWS "wire service", making it possible to integrate existing client side NeWS libraries into HyperLook applications. Wrote an interactive animated cellular automata machine, and several other HyperLook demos. Ported SimCity to HyperLook. The free HyperLook runtime system and demos are available via anonymous ftp. See the NeWS software anonymous ftp directory at "ftp://ftp.uu.net/graphics/NeWS", the "HyperLook (aka HyperNeWS)" page at "http://www.catalog.com/hopkins/hyperlook/index.html", and the "Video Tape Transcript of HyperLook SimCity Demo" at "http://www.catalog.com/hopkins/simcity/hyperlook-demo.html".

[Contents] [Work Experience] [The Turing Institute]

Sun Microsystems (Jul '90 - Oct '91):

Worked for Rafael Bracho, on the NeWS toolkit (TNT), written in object oriented PostScript. Designed, implemented, and documented Open Look user interface components. Worked on all parts of the toolkit, designing application programmer interfaces, implementing and extending user interface components, adding support for 2D and 3D Open Look, multiple screens, 24 bit displays, and internationalization. Tested, diagnosed, and debugged the toolkit and window system. Participated in TNT design reviews and NeWS architecture group meetings. Helped review, rewrite, and produce illustrations for several manuals. Ported HyperNeWS 1.3 to TNT, and collaborated with the Turing Institute in the redesign of HyperNeWS 2.0. Designed and implemented many applications, tutorial demos, and utilities, including graphical data structure browsers, ICCCM window managers, pie menus, a thin wire Gnu Emacs driver supporting "drag'n'drop", and pizzatool, which graphically previews your pizza then faxes the order to the pizza parlor. See the NeWS Toolkit screen snapshot at "http://www.catalog.com/hopkins/images/tnt.gif", and the "NeWS - Network extensible Window System" page at "http://www.catalog.com/hopkins/lang/NeWS.html".

[Contents] [Work Experience] [Sun Microsystems]

University of Maryland Human Computer Interaction Lab (Jan '88 - May '91):

Worked for Ben Shneiderman, in the Human Computer Interaction Lab, researching and implementing user interfaces. Designed, prototyped, and developed the NeWS implementation of the HyperTIES hypermedia browser and authoring tool. It involved a hypertext markup language interpreter, a formatter for structured text supporting embedded PostScript graphics, animation, user interface toolkit components, and text and graphical links, as well as a multi-window Emacs based authoring tool.

I wrote a formatting library in C that downloaded PostScript to the NeWS window server, describing text and graphics, as well as arbitrary toolkit components and interactive graphics. Developed interesting feedback techniques for "embedded menu" image map highlighting, like pop-up cut-outs with drop shadows, using interactive PostScript graphics. Streamlined the user interface with gestural pie menus for quick paging and navigation. I plugged the formatter into Mitch Bradley's Sun Forth, and wrote a prototype HyperTIES markup language interpreter in Forth, that I later transplanted into the real markup language interpreter when it was written.

After spending the summer working at UniPress on the multi-window NeWS version of Emacs, I used it to implement a hypermedia authoring tool for HyperTIES. I programmed Emacs in MockLisp to create, edit, and link hypermedia databases for HyperTIES, and run the HyperTIES browser as a sub-process, to preview the formatted HyperTIES markup language. Emacs would pop up the source to the page you were viewing in the browser, and you could click to follow the links in the source or the browser, and Emacs would pop up a window on the source, and the browser would format it.

Designed, implemented, and evolved the PSIBER Space Deck, a visual user interface to the PostScript programming environment in the NeWS window system. It provides a direct manipulation pie menu based user interface to a graphical "pretty plotter" of live editable data structures and the PostScript stack, and has many interactive programming and debugging features. See "The Shape of PSIBER Space" at "http://www.catalog.com/hopkins/psiber/psiber.html".

I produced and video taped user interface demonstrations for use in classes and seminars, and gave many live demos to visitors and at conferences and trade shows. See the "Human-Computer Interaction Laboratory" at "http://www.cs.umd.edu/projects/hcil/index.html".

[Contents] [Work Experience] [University of Maryland HCIL]

Grasshopper Group (Jun '89 - Jul '89):

Worked with John Gilmore, porting the PSIBER Space Deck to MacNeWS, NeWS 1.1 on the Mac II running A/UX. Wrote documentation, and improved the system based on user feedback. See "The Shape of PSIBER Space" at "http://www.catalog.com/hopkins/psiber/psiber.html".

[Contents] [Work Experience] [Grasshopper Group]

UniPress Software (Summer '88):

Worked with Mike Gallaher on the UniPress Emacs NeWS window system interface. Rewrote the multi-window display driver for NeWS. Implemented a popup menu interface, a menu compiler, a text selection interface, tab windows, and pie menus, including custom font and color selection pie menus. Ported the Emacs NeWS interface to the 4Sight window system on the Silicon Graphics Iris 4D. See "UniPress Software" at "http://www.unipress.com".

[Contents] [Work Experience] [UniPress Software]

Wedge Computer (Sep '87 - Oct '87):

Wrote a VT100 terminal emulator in PostScript, for NeWS 1.0 running on the Mac under MacOS.

[Contents] [Work Experience] [Wedge Computer]

Sun Microsystems (Jun '87 - Aug '87):

Worked as a summer intern for Forth Guru Mitch Bradley, replacing the extension language and reworking the user interface of CADroid, a schematic CAD system for board design, originally written at the Droid Works, that Sun used for circuit design. I interfaced a Forth system written in C to the CADroid code, and designed and implemented a command processor in Forth that executes CADroid commands. Added higher level control statements, loops, conditionals, variables, expressions, macros, and a mouse interface. Supported user friendly syntax, prompting for arguments, macro programming by demonstration, and interactive loops and conditionals. Completed and delivered the project on time at the end of summer, and received a great letter of recommendation, available on request.

[Contents] [Work Experience] [Sun Microsystems]

University of Maryland Computer Science Department (Sep '85 - Jan '88):

Ported Z-80 FIG-Forth to the ZMob parallel processor. Performed Unix system administration for the Computer Science Department staff, setting up and maintaining Sun workstations, hacking Unix and Xerox workstation networking, systems programming, serving as Milnet contact, installing and improving the X10 and NeWS window systems, and many other tasks.

Moved to the Heterogeneous Systems Lab, to research window systems and user interfaces for Mark Weiser. Designed, implemented, and evaluated pie menus, as an extension to the X10 "uwm" window manager. Integrated Mitch Bradley's 68000 Sun Forth with the pie menu "uwm" window manager, as a prototype Forth extensible window manager, foreshadowing my later experiences with NeWS. Programmed the window manager in Forth to carry out a human factors experiment designed by Jack Callahan, comparing pie menus and linear menus, that demonstrated that pie menus were faster and more reliable than linear menus. See "A Comparative Analysis of Pie Menu Performance", by Jack Callahan, Don Hopkins, Mark Weiser, and Ben Shneiderman, in the Proceedings of the CHI '88 conference, Washington D.C.

[Contents] [Work Experience] [University of Maryland CS Department]

Selfware:

Ported TypeRite, written in Forth, from the IBM-PC to the Apple ][c, using my Apple ProDOS Forth system. TypeRite is a user friendly menu driven intelligent electric typewriter program. I wrote screen, keyboard, printer, and file drivers, in Forth and 6502, and beefed up my own Forth system in the process. Shipped the product on time, and supported customers with weird printers, by updating the program to satisfy them.

[Contents] [Work Experience] [Selfware]

K.L. Ginter and Associates:

Ported the Software Express Videotex interface program, written in C, from the IBM-PC to the Apple //e. Software Express is a menu-driven multi-windowed communication package that talks to a central computer over a modem, and provides file transfer, electronic mail, and other services. Wrote screen, keyboard, printer, and modem drivers in Manx Aztec C and 6502 assembly.

[Contents] [Work Experience] [K.L Ginter and Associates]

Computer Challenges:

Implemented a Forth programming environment for the Apple ][ computer, and a graphics and animation package in 6502 assembly. Wrote an animated promotional graphics demo with it, illustrating Forth as a cross platform game programming language across Apple ][, C64, and BBC computers. Designed some video games and animated graphics that used the animation package, and wrote utilities in 6502 assembly. Supported a co-worker writing educational software using my Forth system. Ported Forth from DOS 3.3 to ProDOS, adding a real file system interface, and used it to develop numerous text editors, terminal emulators, a bulletin board, a file manager, and TypeRite, an intelligent typewriter program.

[Contents] [Work Experience] [Computer Challenges]

Education:

Graduated from the University of Maryland, May 1990, BS Computer Science.
[Contents] [Education]

Publications:

[Contents] [Publications]

Presentations:

[Contents] [Presentations]