Shawn T. Rutledge

2314 E. Earll, Phoenix, AZ 85016
(602) 508-8549
shawn.t.rutledge@gmail.com

Engineer

A creative, meticulous, results-oriented engineer who consistently delivers a quality product. Significant long-term experience in object-oriented design and implementation of multi-threaded, client-server, interactive, and web-based software systems. Recent experience with embedded systems, including digital hardware design, microcontroller firmware, and multimedia Linux software. Major strengths are: learning quickly, thorough problem analysis, innovative solutions, and effective written communication.

Skills:

Embedded Systems

CSR Bluetooth

   A2DP, AVRCP

   Atmel AVR

   Linux

   QT Embedded

   J2ME

   Audio

   libMAD, Helix

   Digital design

   Eagle schematic/PCB

Java

   Thin-client GUIs

   Java2D graphics

   AWT, Swing

   Parsers

   JDBC

   Ant

   Servlets, JSP

   JNDI

   Printing

   TINI

Other Languages

   Scheme (Chez, Chicken, Guile)

   C

   C++

   PostScript

   XML

   HTML

   PHP

   bash, tcsh

   OpenGL

Software Methodologies

   UML

   Design patterns

   MVC

   Functional

OS

   Linux

   Solaris

   Windows

Databases

   Oracle

   PostgreSQL

   MySQL

   SQL Server

Miscellaneous

   Apache

   CVS, PVCS, ClearCase

   OpenLDAP

Employment experience:

Aug 2004 - May 2007 Senior Staff Engineer Motorola, Tempe, Arizona

iRadio is a Motorola project to bring low-maintenance pre-programmed radio-like music and talk channels to cell phones, so that users can expect to have several hours daily of interesting, fresh material available for listening, at home or on the go. In addition to listening on headphones, one can use Bluetooth to stream the music to a stereo system; and it was envisioned that one could use the Bluetooth cell phone to remote-control a PC playing music either locally or via a uPnP media receiver.

In 2004, the first goal was to demonstrate a prototype at CES. So I was working on two projects - a software application on the E680i Linux phone, and a Bluetooth streaming receiver.

         QT C++ app on the cell phone, using the Helix player for on-phone playing

         In streaming mode: Multiplex metadata, MP3 packets and control packets across a single SPP link to the streaming receiver

         In remote-control mode: Transmit control packets and receive metadata packets on an SPP link with the PC

         First version of the streaming receiver: a Linux application using the BlueZ Bluetooth stack and libMAD for MP3 decoding. This was deployed on an ARM single-board computer with a CompactFlash Bluetooth card.

The CES demo went well. Then A2DP began to be deployed on Motorola phones, so for the next version we no longer needed SPP multiplexing; and marketing decided to remove the PC remote-control feature. So I needed to develop a reliable, portable phone application which can play media either locally or via A2DP.

         Extended the E680i application to support A2DP and AVRCP APIs, with menus for Bluetooth connection and discovery

         Was named co-inventor of a method to send metadata across the AVRCP channel to the car stereo

         Worked around bugs in the phone Bluetooth stack to increase reliability of the iRadio application

         Helped a coworker to port this C++ application to a J2ME version

         Created an efficient binary XML representation, with implementations in C++ and Java. A YABX file consists of a string table, followed by a tree which references the strings in the table and stores other datatypes directly in binary form. The result is drastic savings in file size and very quick reading. This became popular among the team and was used everywhere in the iRadio ecosystem, whenever data needed to be exchanged between the phone, the home gateway, and the server.

Due to the fact that my coworker who took over the streaming car stereo receiver project had become overwhelmed with work, I moved back to that project. During 2005 it had evolved to a custom board containing a CSR BC03 Bluetooth chip, which implemented typical handsfree car kit functionality in addition to streaming audio; and an Atmel microcontroller to interface with various aftermarket car stereos. Alpine began to show interest in collaborating with Motorola to develop a Bluetooth handsfree box as a companion to the 2007 model stereos, to daisy-chain between the head unit and the iPod.

         Learned how to develop real-time software on a microcontroller, without an OS, and wrote all of the Atmel code for this project. It manages two serial ports, audio and serial switches so that the head unit can switch between Bluetooth and iPod modes, does a lot of serial protocol translation with various timing requirements, and stores the phonebook in SRAM.

         Worked with Alpine’s contracted Chinese software arm to do the integration, testing, and debugging. This required a lot of patience, several months of 60-hour weeks, some technical negotiation, and two week-long trips to China.

         Managed to satisfy this conservative Japanese company with the quality of the product, which is now sold retail.

I wrote new firmware for an existing BC03-based iPod Bluetooth adapter, which can stream music to our existing devices.

         Look at iPod playlists and map them to channels

         Handle all key-release events from AVRCP and control the iPod (change tracks, playlists, etc.)

         Display a logo/status image on the iPod

         Send iPod audio via A2DP, and metadata via AVRCP, to the receiver

         Now implementing the new extended metadata specification

After completing the Alpine project, I proposed to develop an evaluation/demo board for a future smaller Bluetooth module.

         Having some experience with Eagle, I used it to develop the schematic for this board.

         After getting feedback from the rest of the team, routed the PCB and ordered some prototypes.

         Wrote Atmel firmware to manage the SPI-bus VFD, buttons, LEDs, serial link to the BC03, I2C volume control chip, and a SPI flash memory for phonebook storage.

         Developed a user-friendly UI which resembles a car stereo, but has more than the usual set of Bluetooth features.

         Wrote a user manual

Apr 2002 - Aug 2004 Senior software engineer Abstrax, Mesa, Arizona

Abstrax has several vertical-market instances of an expert system for build-to-order sales and fulfillment. A salesperson can create highly customized configurations of products such as window shutters or computers using one program, and other programs guide the factory workers and operates the automated equipment in manufacturing that custom “long-tail” product. This software is written in Scheme (a simplified, high-performance dialect of Lisp).

         My first project was a Java thin client to enable web-based remote access for this existing software.

         Designed DTD for generic remote-GUI specification

         Implemented servlets to maintain HTTP communications with a Scheme application session.

         Wrote generic remote-GUI viewer applet which realizes widgets as specified in XML

         Advanced List widget and dynamic Menu classes

         Buffered canvas widget which parses XML 2D drawing commands (similar to SVG)

         Translator from GUI specification auto-generated from Scheme application, to my DTD

         Wrote an extremely fast XML parser which produces much less garbage than KXML (temporary Strings, etc.)

Since completing that project, I was adding features to the window shutter sales software.

         Compiler for a custom scripting language, run-time framework for shutter pricing models, and a lot of pricing models using this framework for various clients

         Framework to output invoices and assembly instructions by substituting live variables in PostScript templates

         Windows DLL to enable printing from Scheme to GhostScript, including pixmap images; and to generate PDF files.

         Generic textual-table utility, used to generate onscreen previews of the invoices

         GUI screen for customizing shutter frame elements

         Complex optimization algorithms to align louver positions, rail sizes, shutter tops, bottoms, and sizes of shutters

         Mentored new hires, especially regarding pricing models and GUI components

         GUI screen for designing bypass shutters, as used for patio doors

         Basic contact-management features for customers’ clients and employees, via GUI forms interfacing with SQL Server

Oct 1999 - Feb 2002 Software design engineer HomeStore, Scottsdale, Arizona

Weblogic EJB real estate web sites. This office began life as HomeBid.com; we built a customer-oriented real estate web site, and then were acquired by HomeStore, after we started to build another site to help real estate agents track the tasks and documents associated with all of their transactions, and facilitate communications among the parties involved.

         Image management interface which real estate agents use to upload images of homes

         XML/HTML parser and XML generation utility

         JMS notification system to build email messages from XML templates.

         Email layout engine (to interpret a small subset of HTML tags, do word-wrapping, line breaks etc.)

         Wrote a tool to parse XML email templates and insert them into database CLOBs, another tool to generate a report, and wrote the DTD for the XML templates. Non-programmers can use these to write notifications using an XML editor.

         Generic Table class to store an entire ResultSet from a JDBC query, sort, and do some limited queries

         Wrote XML documentation maintenance tools

         Wrote and maintained all makefiles for the projects; CVS administration; Unix and Gnome support

         Mentoring regarding SOAP, XML and other technologies

         SOAP integration of a Windows-based faxback system. Agents can use barcoded coversheets to upload documents for a specific transaction, and they become electronic documents associated with that transaction (PDFs stored in Oracle BLOBs).

         Implemented “ZIP stream” functionality for archiving all documents associated with the transaction into a ZIP file in another BLOB, to save space for closed transactions. The ZIP file is created on-the-fly as it is streaming into the BLOB.

May 1999 - Oct 1999 Software design engineer ExpressBill, Scottsdale, Arizona

Text parsing application to extract data from “print images” of medical bills into a database; integrated via CORBA.

         Java “string grid” component for selecting coordinate regions within a text file

         Used Rational Rose to design a modular OO architecture in which “rule” objects extract the various snippets of data.

         Java applet, servlet and JSP mentoring

Jan 1998 - Apr 1999 Software design engineer Essential Wisdom L. L. C., Scottsdale, Arizona

Built a general-purpose drawing and diagramming application in Java. Then, converted it into a client-server application tailored for web-based sales and consulting on customizable products (pools, landscape irrigation systems, furniture, homes, computer networks, flight itineraries, etc.) We verified that it really does “run everywhere” (tested on Windows, Macintosh and Linux).

         Designed and implemented the complete “view” and “control” portions of the MVC architecture, including advanced features such as arbitrary zoom, zoomable rulers, “infinite canvas” drawing area, several kinds of object-snap, object nesting, labeling, grouping (mostly done with intuitive mouse gestures rather than obscure menu commands), collaboration (multiple people editing the same drawing), etc.

         Worked directly with a Human Factors/Usability expert to refine its ease-of-use.

         Wrote library of reusable geometry functions

         Implemented printing capability

         Wrote native code for some time-consuming functions

         Implemented portions of Java2D functionality on JDK 1.1

         Managed server-side development (LDAP/JNDI for the directory of users and their drawing files, HTML launch page to start up the applet, setup and maintenance of Apache, JServ, and OpenLDAP on Linux, etc.)

         Built and maintained Linux mail server/internet gateway for the whole company

Jun 1996 - Dec 1997 Software design engineer Gateway Data Sciences, Phoenix, Arizona

One of the world’s first 100% Java point-of-sale packages, intended for use in small-to-medium sized retail stores.

         Architected and implemented a prototype of the Java POS application on the Taligent WebRunner application framework. With the addition of many other features by other team members, this evolved into the product that we ultimately shipped.

         Created a method to display Java AWT components on the VFD shopper display and the receipt printers.

         Several Java AWT receipt-printer drivers, which facilitated reuse of existing “view” functionality such as layout managers, text centering, justification, multiple fonts and styles, while maintaining the speed of printing text with control codes.

         Schema and code for storing “tabular view” layout information in a relational database.

         Implemented fully configurable receipts with this framework.

         Barcode and credit card scanning functionality.

Open Source projects:

         Thin-client portable UI system

         gcode2eps (CNC code preview utility)

         NetteBook web-based PIM

         Caller ID broadcast server and clients

Education:

1990 – 1994 Arizona State University Bachelor of Science in Electrical Engineering

Key courses: computer graphics, artificial intelligence, system design with microprocessors, multimedia information systems.

1988 - 1990 Central Arizona College

Engineering core, physics, mathematics, and electronics technology courses.

Misc:

         Member of the Bluetooth SIG and AV Working Group

         Hobbies include Linux, open-source projects, home automation, metalworking, electronics, Russian language & culture.

 

An up-to-date version of this resume can always be found at http://ecloud.org/resume.html. This copy last upated February 21, 2007.