Jeffrey L. Keegan
12 Brookside Ct
Methuen, MA 01844-1245
(978) 682-2573
jkeegan@keegan.org        http://www.keegan.org/jeff
Summary Principal-level Software Engineer with a proven history of bringing projects from conception through to completed sale. Lots of work designing and implementing applications, low-level services, and web-based applications (back-end and front-end) with Java (J2EE/J2ME/J2SE), C/C++, XML, and XSLT. Recent work history includes large-scale mobile robotics systems and industrial automation, mobile and settop video applications, embedded device work designing a Java operating system for cell phones, and the design of knowledge management, search, and data aggregation applications.
Technical
Skills
Programming
  • Fluent in Java (J2EE/J2SE/J2ME + AWT and Swing), C++, C, JavaScript, perl, XML, XSL/XSLT (including XPath), Bourne Shell, csh, HTML, WML, and Tcl
  • Experience working on embedded systems, involving tight footprint limitations (code size and runtime usage), power management demands, low-level hardware interfaces, and constrained display size
  • Heavy use of both the older NMI and newer JNI methods of calling between C/Java
  • Extensive work writing servlets, CGIs, fastcgis, Apache modules, and Java Beans to create web-based products
  • Video format experience includes previous work with MPEG-2, recent work with MPEG-4, 3GPP, 3GPP2, and various audio/video codecs (including H.264)
  • Good working knowledge of XForms, XQuery, Python, SQL, JDBC, HDML, VRML, Java3D, JSP, JMX, SOAP, XML-RPC, .NET, and the DirectX API
  • 24 years of Unix development experience (Linux, SunOS, Solaris, HPUX, IRIX, Ultrix, and AIX)
  • 13 years of Macintosh development experience
  • 18 years of Windows 95/NT/2000 development experience

Environments / Tools
  • Subversion(svn), BitKeeper, Perforce, ClearCase, CVS, RCS, and SourceSafe
  • Xalan (Apache's XSLT Processor) and Xerces (Apache's XML Parser)
  • Java Wireless Toolkit
  • Jakarta Ant, make
  • JBuilder, Eclipse
  • JUnit, Cactus
  • Rogue Wave Tools.h++
  • Microsoft Visual C++/J++
  • Apache, Tomcat, Resin, Jetty, Netscape Commerce Server, and MS IIS
  • MySQL, GDBM, ObjectStore (ODI)
  • Jira, Bugzilla, phpBB, DDTS, TestTrack Pro
Work
Experience
Kiva Systems - Woburn, Massachusetts
Senior Software Engineer
January 2008 - August 2009
Skills used: Java, C, C++, SQL, Swing, Ant, Maven, Subversion (svn), JUnit, Jira, Embedded device work, low level protocol design, mobile robotics, wifi, emulation, AB DF1 protocol, programmable logic controllers (PLCs), hardware testing, RSLogix

  • Sole developer responsible for Kiva's Emulator. Heavily modified, enhanced, and maintained Kiva's Emulator, an application responsible for simultaneously emulating 1000+ Kiva robots, tens of thousands of movable storage pods, sensor equipment, multiple vertical reciprocating conveyors (VRCs - elevators for automated non-human use), and large industrial hardware. Kiva's Emulator is the key development tool for Kiva's software team, allowing every developer to test their code changes against a full virtual warehouse floor (without contending for the physical resources of an actual test floor). Over a thousand unit and integration tests made use of the Emulator to ensure that systemic problems would be caught almost immediately after introduction. Added collision detection to mobile robot emulations, triggering the appropriate front/back bump-sense errors for the MHS to react to. Designed and implemented an Emulator Control User Interface to allow monitoring and manipulation of individual emulated robots, storage pods, VRCs, equipment sensors, and controlled heavy equipment. Wrote emulations of several hardware devices which became part of the Emulator.
  • Equipment Communications. Designed and implemented the communications infrastructure through which Kiva's Material Handling System (MHS) talks to equipment, with pluggable protocol layers for communication via different types of devices, and runtime-switchable transport mechanisms (which allowed serial-line protocols to be tested via TCP/IP-based unit tests). Wrote a BB232SDD16 layer for communication with an array of presence sensors used on both the Automated (Unmanned) Shipping station and the Tape and Dunnage station for diapers.com (as well as creating an emulation for those presence sensors). Wrote an ABDF1 layer (including a full Allen Bradley DF1 stack created from scratch in Java) for communication with both our VRCs/elevators and with a large automated trash dumper for Walgreens (again, along with emulations of the VRCs and trash dumper). Designed the system to be modular/expandible, allowing rapid prototyping of new hardware and hardware emulations.
  • Mobile Robot Communications. Maintained the dua (drive unit agent - the code that communicates with the robots via wifi and tells them specifically what to do). This multi-level state machine implements the various high and low level missions that a robot needs to perform, such as starting up and determining where a robot is on the floor, driving to a charging station to recharge its internal battery, or fetching a storage pod and presenting it to a human picker. Added automatic recovery of lost wifi comm, a problem which was costing customers serious amounts of time and lost profit. Added various data reporting features to collect information on the robots' battery charge levels, internal state, maintenance-cycle-requests, etc. Did extensive work on the lifting procedure for the pallet-lifting model of Kiva robot.
  • Automated (Unmanned) Shipping station. Team Lead on a complex feature for diapers.com called Automated Shipping (also known as Unmanned Shipping). Robots carry special shipping pods/shelfs which hold completed ready-for-shipping boxes. They are called to a shipping station by the MHS, they arrive, and then ask the station for permission to enter. The station then communicates with an array of presence sensors mounted to a conveyor belt to see if the conveyor is empty. When the conveyor becomes empty, permission is granted for the robot to drive beneath the conveyor, with the shipping pod/shelf being held above the conveyor. The robot turns, then drives beneath a scraper bar that holds back the shipping boxes, depositing them on the conveyor. That conveyor leads to a flexi-conveyor, which is extended and routed out into a shipping truck. After logging into the unmanned shipping station the ship worker selects which carrier's truck was there (UPS, USPS, Fedex), takes the flexi-conveyor into the truck, and then boxes specifically for that carrier arrive and he/she starts packing. There is no danger of boxes arriving too fast, because of presence-sensor-based control at the station. In addition to leading the team, wrote the workflow code (the business logic for the shipping station), the controller communications, emulations for the presence sensors, several unit and integration tests, and a median filter to eliminate sensor noise experienced with the first hardware prototypes.
  • Work on 2 and 3 floor Mezzanines with VRCs. In-house, Kiva had constructed both a 2-level mezzanine and a 3-level mezzanine, for mobile robots to drive on and fetch storage pods from. The former had two controlled VRCs (elevators) and the latter had a new double-carriage VRC (able to lift multiple robots simultaneously). Worked heavily on the code that both controls these VRCs and keeps robots from using them until it's safe to do so. Had code residing on a Soekris embedded linux board that acted as a bridge between the MHS and the Micrologix 1100 PLC tied to the elevator control lines. Contributed to the design of the 3-floor mezzanine/VRC, and after its construction, was the sole software-team developer getting it fully operational.

Gotuit Media - Woburn, Massachusetts
Principal Software Engineer
November 2005 - November 2007
Skills used: Java (J2ME, CLDC 1.1, MIDP 2.0, JSR-135), C, PowerTV settop box environment, SARA (Scientific-Atlanta Resident Application), BlueStreak (Adobe Flash/ActionScript-based STB platform)

  • Single-handedly brought Gotuit Media from a two-medium (broadband and cable) company to a three-medium company, by prototyping, demonstrating, designing, and then implementing Gotuit Media's J2ME-based mobile video platform. The first commercial application of this was the NFL Fantasy Football Video product for Sprint (see below), which was followed up by a more generic customer-customizable mobile video player for large customers of Gotuit Media.
  • Designed and implemented Gotuit's NFL Fantasy Football Video product ("NFL Fantasy Video") for Sprint, which sold during the 2006 and 2007 football seasons. Team lead for three other developers and one QA engineer, implementing our J2ME JSR-135 video-playing midlet for 12 EVDO phones in 2006 (Samsung A900, A920, A940, A960, M500, Sanyo 7500, 8400, 9000, Motorola SLVR L7c, KRZR K1m, RAZR V3m, and LG Fusic) and an additional 4 phones in 2007 (Samsung M610 Glint, M620 UpStage, M510, and LG Muziq). The midlet (which sold for $6 per month) allowed users to pick their fantasy team of any players in the NFL, and each week see all of their player's plays from actual games via streaming video to the phone. Users were also allowed to go all the way back to the beginning of the season and see any plays by any individual player in the NFL. In addition to being responsible for most of the implementation of the product and for the directing of other team members, other responsibilities included scheduling, coordinating with production, discussions with Sprint, marketing, and kitting.
  • Designed and implemented a generic "white-label" mobile player app, to allow mobile access to Gotuit's customers' video assets. This midlet was easily adaptable to individual customer demands, and formed the mobile portion of the Gotuit video platform. Successful demonstrations were done using this white-label app for EMI, UMG, and Sports Illustrated. Device support for the white-label app included all of the phones mentioned above, plus the Sanyo M1, Sanyo 8500 (Katana DLX), Motorola ic902, Motorola RAZR2 V9m, and AT&T's Samsung a707.
  • Team lead for the project of implementing our indexed video-on-demand client for the BlueStreak platform, including the user interface and negotiation with the backend to stream the correct video from the correct location. Implemented this on a BlueStreak implementation running on top of the SARA (Scientific-Atlanta Resident Application) platform. New client code incorporated all of the functionality of the original "vanilla" VOD client, plus features from our Fantasy Football implementation.
  • Created GDMS (Gotuit Digital Media Server) daemon to serve up multi-streamed MPEG video. This is used by our DNCS to create the barker channels that our settop box client code uses for the upper right corner of the screen for each channel.

SavaJe Technologies - Chelmsford, Massachusetts
Member of Technical Staff
April 2004 - September 2005
Skills used: Embedded device work (low memory considerations, power management, thread management, maintaining small footprint, etc.), Java (J2SE, J2ME), C++, C, JNI, NMI, Swing, Ant, BitKeeper, CVS, JUnit, Midlets, Xlets

  • Kernel developer for SavaJeOS, SavaJe's cellphone-based Java operating system (implemented in Java, C++, and C). Platforms included multiple phone prototypes, test boards, Compaq IPAQ Pocket PCs, and an emulator.
  • Team lead for Browser group. Designed and implemented device layer to integrate 3rd party C++-based browser (OpenWave v7.0) into SavaJeOS. Work included implementing support for networking, key input, a framebuffer-driven display, timing, font support, memory management, file I/O, settings-store, threading, startup/shutdown, content plugins, focus management, and input methods (T9).
  • Created browser service to maintain the lifecycle of OpenWave's environment, handle error-recovery, and to provide a common way for other parts of SavaJeOS to interact with the browser. Communication between this Java-based service and our C/C++-based devlayer implementation involved heavy use of NMI, worker threads, and a careful examination of the call path to ensure that SavaJeOS limitations were met (such as not calling back into Java from a thread started from C).
  • Replaced SavaJe's homegrown media engine with 3rd party media engine from PacketVideo Corp. Implemented PacketVideo's OSCL (OS Compatibility Layer) for SavaJeOS, providing support for the display, timing, memory management, threading, logging, network, and JSR-135. This work provided the ability to playback, stream, and author MPEG-4 (video: H.263, audio: AAC/AMR).
  • Repeatedly performed extensive code optimization to ensure that SavaJeOS's kernel still fit onto all target devices after each major increase to its size from 3rd party additions. This included compiler optimizations, switching to a thumb-based compiler, the creation of glue layers to reuse redundant libraries shared by SavaJeOS and third-party code, and the repartitioning of persistent flash memory. This work resulted in SavaJe's ability to continue to function on a 32-meg flash phone instead of the competition's move to 64-meg phones, saving the customer huge costs in increased hardware per phone.
  • Implemented memory management checks such that the browser and the media player could, if not in use, be terminated by the OS when memory use was at a critical level. Ensured that common memory-critical cases performed as designed, such as browsing while playing music with the media player running in the background.
  • Automated the process of extracting, converting, resizing, processing, and re-encoding video from a TiVo for use on SavaJeOS phones for media testing purposes (using open source video tools such as tydemux, mplex, and ffmpeg).
  • Wrote the Digital Rights Management user interface application for SavaJeOS, which handles OMA rights-object delivery cases such as separate delivery (super syndication), combined delivery, forward-lock, and the arrival of rights objects for Midlets.
  • Enhanced SavaJe's flash-update utility to allow the installation of the kernel, resources, platform compatibility layer, and applications all at once.
  • Implemented support for provisioning dialogs to be displayed when data is provisioned to a user's phone. Tested these extensively via use of NowSMS to send provisioning data wirelessly to phone.
  • Implemented several additional OpenWave support applications, including the Root application to handle browser termination, a Proxy application to handle suspend/focus issues, another Proxy application for content handling (so SavaJe applications can handle arbitrary mimetypes via the browser), and a special-case scheme service to pass rstp:// URLs to the media player for streaming.
  • Wrote company build script to automate individual and nightly builds.
  • SavaJe builds had previously pulled in libraries via scp, requiring a network connection. Wrote cached_scp script that cached the results of successful fetches, so that when a network wasn't present it could use the cached copy of the library. Performed remote and local md5 checksum first to eliminate unnecessary network traffic and ensure the correct version was always used, failing if the correct version wasn't available. This permitted developers to do builds while traveling.

Author of Hacking TiVo: The Expansion, Enhancement, and Development Starter Kit
(Wiley Publishing, 550 pages, ISBN: 0-7645-4336-9)
December 2002 - September 2003
Skills used: Writing, reverse engineering, development, Tcl, cross-compiling

  • Number 5 bestseller (overall) on amazon.com for 3 days
  • Number 1 in Computers/Internet category on amazon.com for over 6 weeks

AltaVista Business Solutions - Andover, Massachusetts
Principal Software Engineer
December 2000 - December 2002
Skills used: Java (J2EE), C++, C, Swing, JavaScript, XML/XSLT, JMX, JSP, SOAP, ClearCase, Ant, JUnit, SQL, JDBC, HTML

  • Owner of the Management User Interface portion of the AltaVista Enterprise Search product.
  • After a year of work with the existing codebase, designed and implemented new architecture using servlets, XML, XSLT, and JMX. This new architecture allowed for easy internationalization of the UI, customer-modification of the look and feel of the UI via XSLT stylesheets, and seamless management of all components (including custom-written plug-inable components) without needing any changes to the code for the UI.
  • As part of this new architecture, wrote code to modify any XML document (of any layout) via an HTML browser. This work pre-dated XForms, but exceeded XForms' abilities in various ways that resulted in its continued use.
  • Wrote layout engine that divided an editable XML file up into logical groups for editing in HTML. This was used to render tabs for an "edit" view, and to render separate pages in a "wizard" view.
  • Prior to this rearchitecture, maintained and added features to the previous Java/Swing/Applet-based codebase.
  • Heavily contributed to creation of MailScooter crawler, which fetches mail to be indexed from mail servers. This contribution consisted of writing the entire UI, as well as some of the core of MailScooter.
  • Implemented solutions for TicketMaster and Monster.com, both resulting in sales (of $1.2 million and $1.4 million, respectively). This lead position involved interfacing with the customer, writing custom code for their needs, and stress-testing the solution.
  • Headed up work for NewsEdge relating to network problems with federated searches. This involved debugging the problem on-site, developing the solution, and issuing them a new release.
  • Redesigned existing build system from ground up, using Jakarta Ant instead of make. Orchestrated move of components from old directory/package structure into this new system. During the process, added such things as JavaDoc automation, XML validating of any XML files in clearcase, and new kitting commands.

CMGI (InfoMation, PlanetDirect / MyWay, CMGI Solutions) - Burlington (& Andover), Massachusetts
Principal Software Engineer
August 1997 - December 2000
Skills used: C++, RogueWave, perl, JavaScript, XML/XSLT, HTML, ClearCase, WML, HDML

  • Designed and implemented modular, hierarchical layout engine allowing the caching, display, and layout of XML and other generic objects. This included creation of several content sources to feed this system, including several customer-specific formats. This engine (OMS) later became much of the basis for CMGI Solutions' main product, SolutionsPort.
  • Enhanced this system (OMS, Object Module System) in its intended direction - to be able to support any format with the same data. Implemented stylesheets to support WML devices (Nokia and UP browsers) as well as Palm 7, AvantGo, and VRML browsers. The same data could then be accessed and edited via web browsers, cell phones, etc.
  • Designed customsearch module allowing custom searches of data scraped from the web, converted into XML, and then into the desired format. One example of this allowed a cellphone user to search switchboard.com from their WML browser, and get the results back in WML, all from regular expressions that converted the original HTML into XML, and stylesheets that converted the XML into WML.
  • Did extensive work integrating external products into OMS/SolutionsPort, including Mailspinner, Echo, and external feeds.
  • Developed Email Notification system delivering personalized internet/wirefeed news from InfoMation's flagship knowledge management product, Echo.
  • Created Filebot feed agent to retrieve files from network drives and convert them for filtering and display through Echo. Worked extensively with OEM partners in this endeavor
  • Developed PalmPilot interface that allows users to hotsync their entire paper from our product into their PalmPilot
  • Did extensive work on WebRobot feed agent that gathers documents from the web for filtering and display through Echo
  • Worked on Filterbot filtering agent that identifies which articles/documents match users' queries
  • Implemented many feature requests for new functionality to all aspects of Echo including the ability to change presentation styles of fetched documents, the ability to specify more accurately which information is desired by the user, and an overhaul of the administration interface
  • Major participant in the rewriting of the entire UI, including moving much of the implementation of the UI from server-side C++-based CGIs into client-side JavaScript for faster performance

NetScheme Solutions, Inc. - Marlborough, Massachusetts
Principal Member Technical Staff
January 1997 - May 1997
Skills used: Java, SQL, ODBC, JavaScript, HTML, Tcl

  • Created Tcl-based scriptable test harness tool that issues form queries via HTTP, then issues corresponding ODBC queries for the same data, and compares the results to verify the accuracy of DataSite's navigation server.
  • Integrated third party Java charting package into DataSite.
  • Wrote several tools to excercise various components of the DataSite product line.

Carberry Technology / Electronic Book Technologies - Lowell, Massachusetts
Senior Software Engineer
June 1992 - November 1996
Skills used: C++ (Unix, Visual C++, and Mac), MFC, Netscape plugin-API, perl, AppleScript, firmware design, X11/Motif, HTML

  • Primary developer of FIGleaf Inline, a commercial Netscape Plug-In with over 64,000 registered users (Windows 95/NT, Solaris, SunOS, and IRIX). Demonstrated this at the first Netscape Developer's conference (March 1996).
  • Developed a web-based customer-registration/product-information system to track evaluations, purchases, and general usage of Carberry products.
  • Developer of CADleaf Thumbnails (CLBrowse) product for Windows 95/NT.
  • Wrote Calcomp PCI and Versatec plotter drivers for the CADleaf product line.
  • Wrote several additions to the Windows 95/NT, Motif/X versions of CADleaf REDliner.
  • Ported the complete set of Zoom View libraries to the Macintosh platform. These make up the core graphics engine of Carberry's product line as it relates to displaying, redlining, and editing of images.
  • Developed CL-Trans graphics translation package for Macintosh.
  • Webmaster for Carberry Technology's web site ( http://www.ct.ebt.com/ )

Center for Productivity Enhancement - Lowell, Massachusetts
Project Manager
October 1988 - June 1992

  • Produced in-house Macintosh front end to Factory Simulation project
  • Project Manager for MASE (Management and Security Expert) system based on CLIPS
  • Performed systems and network maintenance on all Macintosh and Unix systems
Education
M.S., Computer Science, 1996    University of Massachusetts Lowell
B.S., Computer Science, 1992    University of Massachusetts Lowell
  • Noteworthy school projects include a ray-tracer (that supports Constructive Solid Geometry modeling), a morph program to create an animated morph between any two images, and a color-cube-visualization tool.
Additional
Information
My interests include diving, rollerblading, snowboarding/skiing, rock climbing, sailing, hang gliding, TiVo hacking, films, and riding my Segway.