Donald Edward Hopkins
dhopkins@DonHopkins.com
Don.Hopkins@TomTom.com
http://www.DonHopkins.com
Oosterpark 83-II
1092AV, Amsterdam, The Netherlands
+31 617 659 537
US Citizen
Integrating diverse software components; scripting languages; extensions; modules; plug-ins; open source; portable cross platform code; software configuration; source code control; build systems; content pipelines; integration tools; data driven software; template and macro systems; databases; object/relational mappers; XML applications; XML schemas; Relax/NG; validation; data binding; content management systems; user interfaces; direct manipulation; virtual reality; user generated content; authoring tools; simulations; games; storytelling; educational software; serious games; ebooks; using and developing frameworks, plug-in interfaces, extension mechanisms, software development kits; technical writing; documentation; white papers; tutorials; articles; technical evangelism; designing and writing clean, well commented exemplary source code; developer examples; software testing; demos; reviewing technical books, manuals, and software source code; motivating and mentoring teams, co-workers, developers and customers; supporting and inspiring third party developers.
Programming languages. Visual programming. Cellular automata. Educational software. User created content. Content creation tools. Online communities. Developing the open source version of SimCity, which I've worked on for 16 years, into an educational game, Micropolis, for the OLPC XO-1 laptop, Windows, Mac and Linux desktop, and web based Flash user interfaces.
C++, C, Python, JavaScript, OpenLaszlo, Java, PHP, Lisp, Forth, PostScript, Lua, C#, SAS, Kaleida ScriptX, 3D Studio Max MaxScript, SQL, DHTML, XHTML, CSS, Bounce/Body Electric (VPL's virtual reality visual programming language), SimAntics (The Sims behavior visual programming language), Assembly (6502, 6809, 68k, SPARC, x86, PowerPC Altivec, StrongARM).
Rigorous understanding of XML theory and practice, and a wide range of experience using and designing XML applications. Expat, Pyxml, XmlElement, DOM, SAX, Streaming Pull Parsers, XML Processing Pipelines, Unicode, DTD, XML Schemas, Relax/NG, Jing, XPath, XSLT, Kid Templates, TAL/METAL Templates, XUL, Oxygen/Eclipse, Ant, SVG, VML, XHTML, RSS, OPML, XOXO, XML/RPC, SOAP, Atom, ReST, JSON, DHTML Behaviors, XUL, XBL, SAPI Speech Recognition Grammar Specification, OpenLaszlo, Web Server Scripting Languages and Configuration Files, Slats Robot Dialog and Personality Simulation Format, Pie Menus, ConnectedTV GUI Format, TitanTV Program Guide Format, The Sims Transmogrifier Export Format, many special purpose formats.
Microsoft COM/ActiveX/ATL/OLE Automation, Macromedia MOA, XP/COM, Web Services, HTML Screen Scraping, SWIG, Python win32com, GObject.
Blogger API, Meta Weblog API, Movable Type API, Technorati API, Radio Userland, PayPal IPN, Facebook, Flickr, YouTube, Amazon, Laszlo Mail, Internet Archive, NutritionQuest, BitTorrent DNA.
Stupid Fun Club: Research and development of speech technology for talking toys and robots: IBM ViaVoice, AT&T Natural Voices, Dragon Naturally Speaking, Microsoft Speech API, Expression Facial Animation System, SAPI Speech Recognition Grammar Specification, XML Robot Dialog Specification, Speech Feedback "Robopoetry", Festival Speech Synthesizer, Edinburgh Speech Tools, Festvox Voice Building Tools, Flite Speech Synthesizer, LPCC, Python, Talking Toys, Expressive Speech Phonelope Editor.
Independent WinCE project development: Cepstral Swift Speech API and Voices, WinCE, Lua scripting, SWIG integration, C++, Talking Pie Menus, Facial Animation.
SCCS, RCS, CVS, Subversion, Perforce, Git, rsync, make, Gnu Configuration Tools, jhbuild, Ant, Eclipse, Sun Java Studio, Microsoft SourceSafe, Microsoft Visual Studio. Metrowerks CodeWarrior.
TomTom, Amsterdam, NL (November 2007 - Present):
Using Mozilla xulrunner as a framework to develop TomTom Home 2.0. Developed a BitTorrent based content distribution system to save TomTom millions of Euros per year in bandwidth charges. Developed a system to share user created content. JavaScript, xulrunner, XUL, XPCOM, C++, Boost, wxWindows, libtorrent, BitTorrent DNA, PHP, Java, Eclipse.
Gave three presentations at TomTom Developers Day about OpenLaszlo, Lua, and TomTom's new user created content sharing system. Giving a regular monthly presentation to TomTom developers called "Outside of the Box".
The Albany Group, Amsterdam, NL (July 2007 - November 2007):
Managed by The Albany Group, relocated to Amsterdam, and worked as a contractor for TomTom. Obtained Dutch work visa, residence permit, and 30% skilled knowledge worker ruling. Sucesfully worked for the entire four month term of the contract, then hired full time by TomTom, to continue the work described above.
Block Dietary Data Systems, Berkeley, CA (September 2005 - July 2007):
Worked with Torin Block [reference available on request] to develop and administer the NutritionQuest Home Page, and its associated web services.
Project "Alive!": Designed the software architecture, developed the code, and administered Project "Alive!", an email based nutritional and physical activity behavior intervention program. Designed and developed a Facebook application interface to Project "Alive!" that leveraged Facebook's social networking features to motivate users.
Project "Alive!" was developed with Kaiser Permanente, with support from the Centers for Disease Control. Worked with Kaiser to implement and run an empirical study to evaluate the efficacy of Project "Alive!".
"Project Alive!" Email Based Nutritional and Physical Activity Behavior Intervention Program:
Example Alive! Email Messages and Web Pages.
Live demo of Alive! Baseline Questionnaire.
Live Demo of Alive! User Home Page.
Purpose of Project "Alive!": help users improve their diet and physical activity, by providing personalized analysis, goals, coaching, email reminders, motivation and education.
Users fill out a detailed questionnaire about their diet and physical activity habits, and are presented with a personalized nutritional analysis. They can enroll in one of three 12-week programs to reduce fats and carbs, increase fruits and vegetables, and increase physical activities, which are personalized to their lifestyles.
The user's home page features a personalized Interactive "What If...?" slider tool (live demo) for experimenting with the benefits of changing your eating and physical activity habits. The slider is implemented in OpenLaszlo (XML/JavaScript), and runs in the Flash player.
The backend "Alive!" server includes an XML based personalized email formatting, web form generation, validation and response processing system, which provided helpful error messages, and guides users through the process of completing complex questionnaires (live demo) completely and accurately.
The server is written in Python, with the TurboGears web framework, SQLObject to drive database in MySQL, and numerous Kid templates to format personalized web pages, validate questionnaires, and send HTML email messages. Kid templates translate data driven XML templates into HTML, collect and validate responses, display error messages, render personalized user home pages (live demo) and administrative web pages, and send personalized HTML email.
The server includes a data driven nutritional and physical activity analysis system implemented in Python. The OpenLaszlo slider tool client implements an identical analysis algorithm in JavaScript, based on the same data and questionnaire answers, which enables users to interactively play around with the benefits and trade-offs of changing their behavior.
Technologies: Linux, Apache, MySQL, Python, TuborGears, Kid templates, CherryPy, SQLObject, XML, Relax NG, Subversion, PHP, JavaScript, OpenLaszlo, DHTML, Form Processing, Web Services, JSON, AJAX, MIME E-mail, Lotus Notes.
NutritionQuest Online Food Frequency Questionnaire and Analysis System: Re-architected, overhauled and extended the NutritionQuest Online Food Frequency Questionnaire and Analysis System, rewriting and enhancing the OpenLaszlo online questionnaire user interface, renovating old PHP code, rewriting old C and SAS analysis code in PHP and Python, designing and implementing a new open-ended extensible analysis system, and using spreadsheets, XML, PHP and MySQL to configure the analysis system.
The Online Analysis and Data Management System is an extensible, customizable nutritional analysis and questionnaire processing system, supporting online, offline and scanned paper questionnaires. It uses PHP, Smarty templates, Pear::DB and MySQL, to implement a web based user interface, researcher interface, and administrator interface. It uses OpenLaszlo and SWF Studio Professional to implement the online and offline questionnaire user interfaces.
The analysis system uses Python and OpenLaszlo, to validate and compile spreadsheets and XML questionnaire specifications into PHP data and code that performs the analysis, and SWF files and a Windows application that users downloaded to administer the questionnaire online or offline.
Technologies: PHP, Python, OpenLaszlo, XML, CSV Spreadsheets, SAS, Perl, DHTML, Smarty Templates, Pear::DB, MySQL, Apache, Linux.
Connected Media, Berkeley, CA (December 2001 - August 2005):
Developed the ConnectedTV service, Palm application and desktop tools.
Purpose: ConnectedTV turns your Palm into a handheld universal remote control integrated with a personalized television guide. Implemented all software, from server to desktop to Palm device. Subscription based online service. Free trial demos. Credit card processing. Personalized content. Filtering and favorites. Personalized TV guide data content processing pipeline, written in Python with MySQL. XML user interface configuration. Touch screen pie menus.
Technologies: Linux, Apache, MySQL, Python, Zope, DTML, MySQLDA, ZSQL Methods, External Methods, XML, Java. ORLib. Pie Menus.
ConnectedTV Palm application: Metrowerks C++, PalmOS, XML, pilrc.
ConnectedTV GUI Skin Editor: Hypertext Application, JavaScript, DHTML, XML, XML Schema, Templates, Property Sheet XML Editor, WYSIWYG User Interface Editor, Internet Explorer Rendering Behavior ActiveX Plug-In, Dynamic HTML Behavior Controls.
ConnectedTV Toolbar: Internet Explorer Toolbar Plug-In, C++, ATL, OLE Automation, JavaScript, DHTML, XML, Templates, Embedding Internet Explorer.
ConnectedTV Cell Phone Browser: Java, J2ME, J2EE, Tomcat, SunOne Studio.
TitanTV Feed Importer: Java, J2EE, Eclipse, XML.
Maxis / Electronic Arts, Walnut Creek, CA (January 1997 - March 2000):
Worked on a small, agile programming team directed by Will Wright [reference available on request], and managed by Jim Mackraz [reference available on request], developing The Sims for three years. Delivered an ambitious, high quality product on schedule, which became the top selling PC game of all time, and won critical acclaim and numerous awards.
Designed and implemented The Sims character animation system, content creation tools, visual programming tools, user interface, pie menus, architectural editing tools, and other parts of the game and supporting tools. Implemented the character animation, skin and skeleton exporter for 3D Studio Max and Character Studio (MaxScript, C++, OLE).
Contributed to The Sims user interface and game design, implementation, pie menu user interface, architectural editing tools, dialogs, etc. Edith SimAntics visual programming language user interface. SimShow skin preview tool. Made significant contributions to the game and user interface design, and developed important tools (SimShow, Transmogrifier, RugOMatic) that enabled players to create their own content, which helped personalize and popularize the game.
The Sims has turned out to be the top selling game of all time, by shipping over 70 million units worldwide. It won three of the top Interactive Achievement Awards from the Academy of Interactive Arts and Sciences at the 2000 Electronic Entertainment Expo: Outstanding Achievement in Game Design, Outstanding Achievement in Game Play Engineering and Game of the Year 2000. And it won the top honor in Computer Gaming World's annual game of the year awards (April issue) by being named the 2001 Game of the Year.
"And this is the elegance of Will Wright's designs: Taking the abstract concept of functional architecture and resolving it into a game with so many open-ended options and parameters that it will no doubt redefine the paragons of game design." -GameSpot
"The Sims not only lived up to the hype, but it also proved all the skeptics and critics wrong." -GameSpot E3 1999 Review
Technologies: C++. Windows. DirectX. Direct3D. DirectSound. MFC. SimAntics. Gonzo (Maxis's GUI Framework). Designed, implemented and tested "VitaBoy" character animation pipeline and engine. 3D Studio Max. Character Studio. Biped. Physique. Skeletons. Suits. Skills. Animation cross fading and mixing. Partial body animation. Pixelization censorship. Head faking. Deformable meshes. Blended vertices. Texture mapping. Smoothing groups. MaxScript programming. Exporter user interface. Database driven batch exporting and content validation. Object tagging conventions. Tool integration. (3DSMax, MaxScript, Access, SourceSafe, via OLE Automation.) Animation compression. Animation playback engine. Walking engine. Route following. Walking, running, swimming, sitting. Carrying animations. User interface design and programming. Pie menus. Live head in pie menu center. Transparent feathered desaturated shadow effect. Action queue. Buy and Build mode tools. Framework and user interface. Ported gui framework and Edith visual programming tool from Mac to Windows. Overhauled and cleaned up the source code. MFC control panel building and programming. Documented the virtual machine (SimAntics visual programming language interpreter). Content previewing and glitch debugging tools. Character animation and skin browser. In-game animation recording and playback with event logging. SimShow. Stand-alone skin previewer. SimAntics programming (Sims Behavior Visual Programming Language), Edith development (SimAntics programming and debugging tool), SimShow (character animation previewer).
Interval Research Corporation, Palo Alto, CA (January 1996 - January 1997):
Worked with David Levitt [reference available by request] as a Multimedia User Interface Research Programmer. 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 and wrote about 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.
Kaleida Labs, Mountain View, CA (November 1993 - January 1996):
Worked for Tim Oren [reference available by request] 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".
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".
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.
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 "ScriptX and the World Wide Web" and "ScriptX Web Module Documentation".
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.
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 video transcript "ScriptX DreamScape Demo".
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 "DreamScape Documentation", and "DreamScape, a ScriptX Design Example". DreamScape uses the Tracking and Animation modules, and the Director importer toolkit, to compile Director scores into articulated ScriptX animations. 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 written 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.
Carnegie Mellon University Computer Science Department, Pittsburgh, PA (September 1992 - May 1993):
Worked for Brad Myers [reference available on request] 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".
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.
Turing Institute, Glasgow, Scotland (February 1992 - September 1992):
Worked with Arthur van Hoff [reference available on request] in Glasgow, Scotland, at the Turing Institute. Developed 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, and the "HyperLook (aka HyperNeWS)" page, and the "Video Tape Transcript of HyperLook SimCity Demo".
Sun Microsystems / SunSoft, Mountain View, CA (July 1990 - October 1991):
Worked for Rafael Bracho [reference available on request], on the NeWS toolkit (TNT), an Open Look user interface toolkit written in object oriented PostScript, for the NeWS window system.
Designed, implemented, tested 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 NeWS Toolkit screen snapshot, and "NeWS - Network extensible Window System".
UniPress Software, Edison, NJ (June 1988 - August 1988):
Worked with Mike Gallaher [reference available on request] 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.
University of Maryland Human Computer Interaction Lab, College Park, MD (January 1988 - May 1990):
Worked for Ben Shneiderman [reference available on request], 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. Implemented a hypertext markup language interpreter in Forth and C, 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.
Wrote a text and graphics 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 compelling 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. Plugged the formatter into Mitch Bradley's Sun Forth, and wrote a prototype HyperTIES markup language interpreter in Forth. Transplanted the C formatter library into the new markup language interpreter after it was implemented.
Spent the summer working at UniPress on the multi-window NeWS version of Emacs. Used Emacs to implement a hypermedia authoring tool for HyperTIES. 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".
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 "University of Maryland Human-Computer Interaction Laboratory".
Sun Microsystems, Summer Intern, Mountain View, CA (June 1987 - August 1987):
Worked as a summer intern for Forth Guru Mitch Bradley (the developer of the OpenFirmware Forth boot ROMs used by the OLPC, Mac, Sun, etc) [reference available on request].
Extended the CADroid schematic board design CAD system with CForth, and implemented a higher level, user friendly, "programming by demonstration" scripting interface. Integrated a Forth system written in C into the CADroid code, exposed the application's functions to Forth, and designed and implemented a command processor in Forth that executes, records and replays CADroid commands.
Added higher level control statements, loops, conditionals, variables, expressions, macros, argument prompting, and a mouse interface. Supported user friendly syntax, helpful 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 positive letter of recommendation, available on request.
University of Maryland Computer Science Department, College Park, MD (September 1985 - January 1988):
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, ARPANET liaison, installing and improving the X10 and NeWS window systems, running an international mailing list (NeWS-makers), and many other tasks.
Promoted to the Heterogeneous Systems Lab, to research window systems and user interfaces for the late 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.
Worked with Jack Callahan, Ben Shneiderman and Mark Weiser, to implement and carry out a human factors experiment comparing pie menus and linear menus. Integrated the X10 "uwm" window manager with Mitch Bradley's 68000 Sun Forth, and programmed it to carry out the experiment and record the results. The experiment showed that pie menus were faster and more reliable than linear menus. See "An Empirical Comparison of Pie vs. Linear Menus", by Jack Callahan, Don Hopkins, Mark Weiser, and Ben Shneiderman, in the Proceedings of the CHI '88 conference, Washington D.C.
Worked with Sarah Allan [reference available on request] to develop the OpenLaszlo streaming video and webcam components, tests and demos.
OpenLaszlo Video Components. Purpose: Enable OpenLaszlo developers to easily plug together and script their own applications with streaming video, webcams, etc. Low level video streaming and webcam components: rtmpconnection, mediastream, mediadevice, camera, microphone, videoview. High level user interface components: videoutils, rtmpstatus, videoscreen, videoslider, videotogglebutton, videoplayer, videothumbnail, videolibraryicon, videolibrarypopup. Video demos and tests: videolibrary, youtube, many tests.
The YouTube player demo is currently featured on the OpenLazlo Home Page, and described on my web page with links to its source code, at OpenLaszlo YouTube Player Demo and Source Code.
Laszlo Mail. Purpose: Rich web email reader application. Developed on OpenLaszlo by Laszlo Systems. Used by Earthlink. Free demo available. Programmed Email folder outline editor drag and drop user interface, and client/server XML protocol. Developed cross browser email attachment upload component (client in DHTML, JavaScript and OpenLaszlo, server in Java). Technologies: OpenLaszlo, XML, JavaScript, Java, HTML, IMAP, SQL, Tomcat, Spring, Perforce.
Technically reviewed an upcoming book about OpenLaszlo application development and user interface programming.
Slats Robot Brain. Purpose: Worked with Will Wright [reference available on request] to developed a robot brain and remote control software in Python to run on "Slats" and the "Sad Robot", experimental social robots created at the Stupid Fun Club. Developed ideas for toys and games, implemented and demonstrated proof of concept prototypes, for patent applications, concept demos, and TV show pilots. Helped develop and perform hidden camera "One Minute Movie" robot reality shows.
Software Development Magazine Article: Inside the Stupid Fun Club.
Programmed the robot brain AI, behavioral simulation, XML dialog scripting, wireless remote control, Speech synthesis, recognition and facial animation system in XML, Python, SWIG, C++, ActiveX and OpenGL. Running on a Windows laptop embedded in mobile remote controlled robot.
Developed a real-time HTTP and IRC based telerobotic interface for remotely controlling robot behavior, speech synthesis, facial animation, personality simulation, etc. Used for human/computer interaction research, improvisational performance, and reality TV show pilots.
Helped brainstorm, develop and perform hidden camera reality TV spots, written by Will Wright and produced by NBC, about a Broken Robot (Empathy), and a Robot Waiter (Servitude). See One Minute Movies: "Empathy" Sad Broken Robot, "Servitude" Obsequious Robot Waiter).
Technologies: Python, pywin32, OLE Automation, Internet Explorer, SWIG, C++, OpenGL, PIL, PyExpression, XML, IRC, ALICE, HTTP, HTML, Microsoft Speech API, AT&T Natural Voices, Cepstral Voices, speech synthesis and recognition, facial animation.
Talking Toys Simulator. Purpose: Developed a simulation of talking toys that communicate with each other by sending and receiving IR signals with a coded conversational protocol. Toys will have embedded speech synthesizers, and vocabularies of phrases and words. Technologies: Python, Tkinter, Microsoft Speech API, XML.
Phonelope Expressive Speech Synthesizer and Editor. Purpose: Synthesize, play, display and edit inflected synthetic speech. Represent and edit synthetic speech as a "phonelope": a stream of timed diphones, along with a pitch curve and an inflection curve. Speech synthesizer translates text to speech and exports it as an XML phonelope file. Python tool reads and writes XML phonelope files, displays editable graph of speech with stretchable diphones, draggable control points on pitch and inflection curves, spectral backdrop and automatic pitch tracking to enable "phonescoping" of natural speech. Technologies: Python, Tkinter, SWIG, Flite Speech Synthesizer, Edinburgh Speech Tools, Cepstral Voices, C++, XML.
John Gilmore, Entrepreneur and Civil Libertarian:
John Gilmore [reference available by request] has contracted me to work on various open source projects.
Porting SimCity to the OLPC: Adapting SimCity to the OLPC hardware, Linux operating system, Python language, and Sugar user interface, cleaning and renovating SimCity source code in preparation to EA relicensing it under the GPL, integrating SimCity with Python and the Sugar environment, opening up and documenting the source code to enable other programmers to modify and extend SimCity. Technologies: C, TCL/Tk, Python, Sugar, C++, SWIG, Cairo, Pango, Pie Menus.
Helping the OLPC project develop the OLPC eBook Reader ("Read Activity"), supporting eBook mode, game controller inputs, putting the processor to sleep to conserve power, supporting GTK Actions, UI manager and accessibility, integrating multiple renderers like poppler, evince and mozilla, and improving the user interface. Technologies: Python, Cairo, Evince, Poppler, Mozilla, GTK, Sugar, Pie Menus.
Developed a Python module for plugging together, configuring and testing Gnu Radio signal processing modules. Used SWIG to integrate template based C++ code with Python. Technologies: C++, templates, SWIG, Python, Gnu Configuration Tools.
Purpose: Enable Python scripting, configuration, testing and driving of Gnu Radio digital signal processing software components. Scriptable toolkit for building signal processing systems for decoding radio signals in various formats, from AM/FM to HDTV. Integrated C++ library of plug-together DSP modules with Python, using SWIG. Advanced use of SWIG to wrap complex C++ templates. Modified GNU tool configuration script to invoke SWIG and compile Python module.
Purpose: Developed the OLPC eBook Reader to render Internet Archive's PDF eBooks efficiently, by developing a "poppler" PDF module for Python. Technologies: OLPC, Python, Cairo, Evince, Poppler, Sugar.
Porting SimCity to the OLPC: Cleaning up the code, setting up Fedora Core in VmWare for development and testing, assisting with the QA process, fixing bugs, and adapting it to the OLPC hardware and software environment, in preparation for relicensing SimCity under the GPL.
Developing, documenting, distributing, supporting and upgrading The Sims Transmogrifier. Purpose: Transmogrifier is a tool for cloning and modifying Sims objects. It enables The Sims players to customize their game. Spawned a cult cottage industry of web sites catering to Sims players. Scriptable through OLE automation, imports and exports XML and images, so Transmogrifier can be scripted and integrated with other components, to build higher level object cataloging and personalization tools. (Like RugOMatic, ShowNTell, SimFreaks catalog, etc.) Technologies: C++, MFC, GDI+, OLE Automation, XML.
Maintained The Sims character animation exporter plug-in to 3D Studio Max. Updated the character animation plug-in I developed in C++ and MaxScript, to support the new version of 3D Studio Max. Technologies: C++, 3D Studio Max, Character Studio, Physique, MaxScript, VitaBoy, character animation.
Ported The Sims from Windows to Linux and optimized it to run as a "headless" server without graphics and sound, to support The Sims Online. Technologies: C++, Windows, Microsoft Visual C++, Linux, Gnu Tools Pro, GCC, Perforce.
PeopleAggregator Screen Scraper: Purpose: Developed an open-ended Python web page scraper and web service client for hot-syncing text and multimedia data with social networking services. Supports MySpace, Facebook, AIM, Flickr, YouTube, Google Videos and other social networking and web services. Technologies: PHP, Python, TurboGears, urllib2, cookielib, BeautifulSoup, feedparser, SQLAlchemy, MySQL, XML, RSS, JSON.
Worked with Sherman Kennedy [reference available on request] on challenging multimedia contracting projects.
Big World Terrain Importer. Purpose: Program the "Big World" MMPORG editing tool in Python and C++ to import terrain geographical data, and draw roads and features on the map. Extended the Python interface to the C++ terrain editing tools, and wrote Python scripts to import data and drive the editing tools from data under program control. Technologies: BigWorld MMPORG, C++, Python.
Video Mad Libs. Purpose: Real time digital video blue screen compositing. Composite video camera source over DVD source. Record results to DVD. Matrox video graphics hardware drivers. Programming DirectShow filter graphs. Technologies: C++, Matrox Digisuite SDK, DirectShow, ActiveX, MFC, Filter Graph Editor.
Hand Held Devices. Embedded StrongARM programming and debugging. Technologies: C, StrongARM Assembly, Dragonball Processor, SD Card Hardware, Metrowerks Codewarrior.
Wrote a three part tutorial series for IBM's DeveloperWorks web site, about OpenLaszlo and PHP: Spice Up PHP Applications with OpenLaszlo. Technologies: PHP. OpenLaszlo. XML. JavaScript. ReST. SQL. Derby.
Performed a code review and quality evaluation of OpenLaszlo source for ReQuest's touch screen media player home automation user interface. Answered questions about OpenLaszlo and Flash player optimization.
Worked with Mark Bartlett [reference available on requests] to develop and maintain Zope web sites, Plone content management systems, Versant coporate community web site, and develop the SOXPro content management system.
Versant Web Site. Purpose: Corporate presence and developer community web site. Product and company information. User registration. Developer community support discussion groups and wiki. Documentation and white paper download. Software download and license key generation. Sales lead notification. Employee blogging. User sign-up, management and user database integration. Customer activity and download activity reporting. Internationalization. WYSIWYG content editing. Staging.
Technologies: Linux, Apache, MySQL, Python, Zope, Plone, TAL, METAL, Skinning, I18NLayer, I18NFolder, Epoz, exUserFolder, MySQLDA, ZPsycopgDA, CMFBoard, CMFWeblog, ZWiki, VirtualHostMonster, Cold Fusion, Java, Linux.
SOXPro. Purpose: SOX (Sarbanes/Oxley) Compliance Content Management System. Business practice documentation. Compliance verification. Auditing. Procedure flowcharting. Graphical flowcharts and swimlane diagrams. WYSIWYG editing. Typed linking and cross referencing. Keyword tagging and searching. Task assignment and management.
Technologies: Linux, Apache, MySQL, Python, Zope, Plone, Archetypes, TAL, METAL, Kupu, Subversion, XML, JavaScript, DHTML, SVG.
Network Firewall Monitor. Purpose: Remote network firewall management and monitoring interface. Remove device management. Graphical device status displays and network activity log graphs. Interactive AJAX SVG/XML based interface. Fallback to server side rendering with Batik for non-SVG browsers and phones.
Technologies: FreeBSD, Linux, Apache, MySQL, Python, Zope, pyexpect, SSH, screen scraping, MySQLDA, ZSQL Methods, External Methods, XML, JavaScript, ReST, SVG, Batik, Java.
Technorati Internet Explorer Toolbar. Purpose: An internet explorer toolbar that lets you search Technorati for reference to the current web page. Post a blog entry about the current web page. WYSIWYG editor for blog postings. Linking with vote-for, vote-against, and other typed relationships. Generic blog-tool plug-in interface with support for Blogger API, MetaWeblog API, Movable Type API, Atom API, Technorati API. XOXO and attention.xml support. Implemented with IE browser in toolbar, so most code is written in JavaScript, with OLE automation interfaces for special features implemented in C++. XML/JavaScript template system for dynamically generating data driven DHTML user interfaces.
Technologies: Internet Explorer, ActiveX, Browser Toolbar Plug-In, IE Browser Component, OLE Automation, C++, ATL, JavaScript, DHTML, XML, templates, AJAX, XML/RPC, ReST, Atom, Blogger API, Meta Weblog API, Movable Type API, Technorati API, XOXO, attention.xml.
Noggin Video Art Installation. Purpose: Developed a real time video art installation incorporating live adaptive video background removal, warping, compositing, video feedback, cellular automata, gestural control, automatic and interactive modes.
Technologies: MacOS 9, Metrowerks C++, PowerPC AltiVec Programming, QuickTime, Adaptive Background Removal, Media Filtering Noise Reduction, Real Time Image Processing, Digital Video.
Wrote a chapter about pie menus for the book Game Programming Gems 3, titled "Natural Selection: The Evolution of Pie Menus".
Worked with David Levitt [reference available on request] on Bounce, an interactive real time 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.
Hacked the ANSI C Bounce language source code, using Think C, as well as programming visual data flow modules in Bounce itself. Worked on the interface to the MacroMedia Director projector, that David had originally developed for his earlier visual programming language "Hookup". 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 "Bounce Stuff", and "The Electric Carnival at Lollapalooza".
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).
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, 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 "Video Tape Transcript of X11 SimCity Demo".
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, and "SimCity Info".
Worked with John Gilmore [reference available on request], Julia Menapace and Hugh Daniel, 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".
Wrote a VT100 terminal emulator in PostScript, for NeWS 1.0 running on the Mac under MacOS.
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.
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.
Developed a 6502 based Forth programming environment for the Apple ][, and programmed a graphics animation libraries for games and educational software, in 6502 assembly language and Forth.
Used it to develop animated promotional demos, evangelizing Forth as a cross platform game programming language across Apple ][, C64, and BBC microcomputers. Designed some video games and animated sprite packages, 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.
Graduated from the University of Maryland, May 1990. BS, Computer Science.