Environments / Tools
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
- 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
- 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
|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
Gotuit Media - Woburn, Massachusetts
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.
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
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.
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)
SavaJe Technologies - Chelmsford, Massachusetts
- 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
- 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
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
Author of Hacking TiVo: The Expansion, Enhancement, and
Development Starter Kit
- 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.
(Wiley Publishing, 550 pages, ISBN: 0-7645-4336-9)
December 2002 - September 2003
Skills used: Writing, reverse engineering, development, Tcl,
AltaVista Business Solutions - Andover, Massachusetts
- Number 5 bestseller (overall) on amazon.com for 3 days
- Number 1 in Computers/Internet category on amazon.com for over 6 weeks
Principal Software Engineer
December 2000 - December 2002
SOAP, ClearCase, Ant, JUnit, SQL, JDBC, HTML
CMGI (InfoMation, PlanetDirect / MyWay, CMGI Solutions) - Burlington
(& Andover), Massachusetts
- 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"
- 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
- 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
- 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.
Principal Software Engineer
August 1997 - December 2000
NetScheme Solutions, Inc. - Marlborough, Massachusetts
- 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
- 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
- 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
Principal Member Technical Staff
January 1997 - May 1997
Carberry Technology / Electronic Book Technologies - Lowell,
- 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.
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
Center for Productivity Enhancement - Lowell, Massachusetts
- 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
- Developer of CADleaf Thumbnails (CLBrowse) product for Windows
- Wrote Calcomp PCI and Versatec plotter drivers for the CADleaf
- Wrote several additions to the Windows 95/NT, Motif/X versions of
- 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
- Developed CL-Trans graphics translation package for Macintosh.
- Webmaster for Carberry Technology's web site
( http://www.ct.ebt.com/ )
October 1988 - June 1992
- Produced in-house Macintosh front end to Factory Simulation
- Project Manager for MASE (Management and Security Expert) system
based on CLIPS
- Performed systems and network maintenance on all Macintosh and