Frank Mitchell
fmitchell at acm dot org
NOTE:
I am looking for positions in the Dallas Area only.
Skills
- Programming Languages:
-
bsh/bash (15 years),
C (20 years),
Java (11 years),
JavaScript (4 years),
Objective-C (6 years),
Python (3 years),
Ruby (1 year),
SQL (15 years).
- Operating Systems:
-
Linux (3 years), Solaris (5 years); familiarity with basic Windows and Mac tasks.
- Technologies:
-
ATG 6.3.0 (3 years),
AJAX (4 years),
CSS (4 years),
DHTML (4 years),
e-commerce (5 years),
J2EE (5 years),
JDBC (6 years),
JMS (3 years),
JSP (8 years),
RDBMS (19 years),
Spring (3 years),
Struts (5 years),
Tiles (5 years),
Tomcat (3 years),
XML (11 years),
XSLT (1 year).
- Tools:
-
Ant (7 years),
CruiseControl (9 years),
CVS (10 years),
Eclipse (5 years),
jMock (5 years),
JUnit (9 years).
Experience
Mar 2007 - Feb 2009:
Senior Programmer/Analyst,
Hotels.com,
Dallas, TX
Technologies/Environment: Solaris, Java, Tomcat, ATG Dynamo 6.3.0, DHTML, J2EE, JSP, Struts, Tiles, JDBC, JUnit, jMock, Ant, Eclipse, XML, JavaScript
Implemented architectural improvements to Hotels.com's primary e-commerce
web application, and wrote support services for QA and production
improvements, and wrote support services for QA and production
infrastructure.
Gave technical presentations on architectural changes.
Also evaluated technologies like Terracotta and
Ehcache to remove infrastructure inefficiencies.
Specific tasks include:
-
Wrote a web application that caches results from an Expedia
development web service, and emulates the booking portion of the
Expedia web services API. This application allows testers to isolate
a particular data set with minimal effort, and avoids round-trip
traffic to Expedia for Hotels.com performance and stress tests.
-
Removed all Java-side EDI calls to AS/400s that once provided
inventory, but now returned zero or error results. By removing these
calls, I allowed Operations to decommission a block of AS/400s.
-
Removed long-standing code dependencies on ATG Dynamo, in preparation
for deploying the Hotels.com and Web Sales Entry applications on
Tomcat or another J2EE-compliant servlet container. Eliminating ATG
dependencies sets the stage for deploying code currently tied to
front-end web applications into independent middle-tier or back-end
services.
-
Evaluated caching solutions for database and web service query results.
Candidates were Terracotta, Ehcache, and a home-grown solution.
-
Implemented a simple A-B test between the US Hotels.com site and
an equivalent in Europe.
-
Evaluated Jira as a replacement for a home-grown issue tracking system.
Aug 2006 - Oct 2006:
Senior Developer,
AeroXchange,
Irving, TX
Technologies/Environment: Java, Tomcat, J2EE, JSP, Struts, JDBC, Ant, Eclipse, XML, Oracle DB
Technical Lead for Aero AOG, a B2B e-commerce website allowing one member airline to
borrow, loan, buy, sell, or exchange airplane parts for grounded
airplanes. Application consisted of Java Servlets and JSPs running on
Tomcat against an Oracle database; environment used CVS, Ant and Eclipse.
Oct 2004 - Aug 2006:
Senior Programmer/Developer,
Hotels.com,
Dallas, TX
Technologies/Environment: Solaris, Java, J2EE, ATG Dynamo 6.3.0, DHTML, JSP, Struts, Tiles, JDBC, JUnit, jMock, Ant, Eclipse, XML, JavaScript
Designed and implemented various components of the Hotels.com e-commerce ebsite,
including tools for maintenance and administration. Hotels.com used
servlets, JSPs and Struts/Tiles running in ATG Dynamo 6.3.0 but using a minimum of
ATG APIs, against Microsoft SQL Server and various SOAP and EDI
interfaces; development used MKS, Ant, and Eclipse. Advised
architects and developers on technologies like JUnit and Ruby on
Rails. Specific tasks include:
-
Wrote guidelines and examples for unit testing standards, and acted
as mentor for developers writing unit tests.
Gave technical presentations on unit testing.
Also generated metrics
on the adoption and effectiveness of unit testing, via Cobertura.
-
Implemented uniform in-memory caching library for web application, and
common independent service to clear all in-memory caches on all
application servers. This caching system could be tuned by editing a
single configuration file.
-
Implemented Struts actions and underlying data structures for the
current Hotels.com "booking path", based on designer-provided
wireframes and HTML. The Booking Path comprises all pages after
hitting the "Book It" button through the Confirmation Page. Entailed
a number of tricky issues, including Fraud Detection, BillMeLater
handling, bookings handled by sister sites, and duplicate booking
detection.
-
Evaluated technologies for use within Hotels.com, including Ruby on
Rails, Cobertura, CruiseControl.
-
Designed and implemented From-Price calculation services, used to
update "From $xx.xx" text for all properties and marketing promotions.
-
Designed and implemented image upload for marketing template system.
-
Maintained various parts of the web application, as needed, including
cache optimization.
-
Wrote small tool to detect unused classes in the Hotels.com codebase.
Jan 2001 - Jun 2003:
Senior Software Developer,
Bang Networks, Inc.,
San Francisco, CA
Technologies/Environment: Linux, Java, JUnit, jMock, Ant, XML, HTTP, Applets, JavaScript, JMS, Python
Developed both incarnations of Bang's Internet messaging platform: an
Internet service to feed data from a proprietary Java API to a web
page in real time, and a network appliance using a Java Message
Service API to send data over the Internet. Both incarnations could
feed messages to a DHTML web page through a Java applet, and both
delivered data through firewalls and proxies. Specific projects
and responsibilities include:
-
Designed, implemented, maintained, and extended multithreaded client
portion of a client-server JMS implementation. Product implemented
standard Pub-Sub functionality, except for transactions and
acknowledgement modes besides AUTO_ACKNOWLEDGE, but including Durable
Subscriptions and Persistent Messages. Client capabilities ouside the
JMS specification included:
-
Transparent reconnection if the server connection was lost. The
JMS Connection's ExceptionListener would receive a distinguished
exception when the underlying network connection was lost or
regained.
-
HTTP Tunnelling through firewalls as well as connection through
a plain socket. Implementation used an abstraction called
"Conduits" to plug in new network connection protocols.
Client implementation evolved over the lifetime of the product,
including a complete rewrite of key portions.
-
Designed and implemented two regression testing systems:
-
For Bang's network appliance, implemented system using BeanShell
and the open-source test driver TDrv. Implementation included
writing Java interfaces to start and start remote servers,
execute commands using SSH, and spawn other test programs that
inherit the system properties of the driver. Enhanced core
driver to read configuration properties from configuration
files, and skip tests based on predicates on property values;
configuration files captured variant network topologies and
specific hostnames.
-
Implemented earlier in Python, for network service software.
System had basic capabilities of later, TDrv-based system above,
albeit in a more primitive form. Earlier system could read list
of tests to run.
-
Introduced JUnit testing in organization in 2001, and acted as "unit
testing czar".
Wrote support code for unit testing, such as
"TestAll" test to discover and run other tests in the class path,
and "mock server" for classes using client sockets. Also reviewed
others' tests, and optimized slow-running tests.
-
Gave technical presentations on unit testing and other subjects.
-
Implemented prototype server-side adaptor for Tibco TIB Rendezvous
in network appliance. Adaptor subscribed or unsubscribed for TIB
Subjects based on JMS subscriptions. Implemented modified JMS
clients to subscribe for Initial Images from a TIC or RV Cache.
-
Optimized server code using JProbe.
-
Hunted down garbage-collection bug in network service software.
-
Implemented and maintained build system using Ant.
-
Installed and maintained CruiseControl as a continuous build system.
-
Wrote or maintained clients for network product, including
standalone Java subscriber library. Also contributed to
applet-based subscriber using Dynamic HTML to update an HTML page,
and standalone publisher library.
-
Maintained client programs to distribute financial data over our
network to customers of GovPX.
-
Prepared demos for customers.
-
Wrote various small tools, including a JavaScript obfuscator, an XML
logfile aggregator, and a Java classfile size profiler (to optimize
applet size).
-
Intermittently maintained internal documentation web site, and wrote
documents on build and test procedures.
Jan 2000 - Dec 2000:
Senior Software Developer,
E*TRADE,
San Francisco, CA
Technologies/Environment: Solaris, Java, J2EE, JUnit, JDBC, Ant, XML, CORBA
Designed and coded parts of a customizable financial portal site,
using Java Servlets. Worked with designers, project managers, and
other developers to produce a beta version of the site to demo to
high-level management and E*TRADE. Also developed prototypes for
Clearstation portal site. Specific areas coded:
-
A module to map classes to relational database table. The subsystem
read the mapping from an XML file, constructed JDBC
PreparedStatements, and used Java reflection to create result
objects and extract object property values. A similar subsystem to
convert lists of objects to HTML tables was written, but never used.
-
Integrated mostly-real time Destination E*TRADE portfolios into the
pre-existing portfolio system. Our link to E*TRADE data was
extremely slow, so we had to cache portfolio data persistently, and
refresh the cache periodially.
-
Portfolio detail pages, including graphs and company data.
-
Pages for news and quotes, and adaptors for multiple vendor-specific
news and quote feeds such as Reuters TIC.
-
Optimized the site for speed and memory usage, by using small
refactorings of existing code.
-
CORBA servants to wrap database access and object-relational
mapping, to achieve locational transparency and caching among
multiple web servers. Servants were implemented using VisiBroker
for Java.
-
CORBA-based applet clients, and XML-based Flash clients, for streaming
quotes into a web page.
Sep 1997 - Dec 1999:
Member of Technical Staff,
Sun Microsystems, Inc.,
Cupertino, CA
Technologies/Environment: Solaris, Java, Swing, Servlets, XML, Rhino
Designed and coded a variety of Java-related projects, using Swing,
servlets, XML, and sockets:
-
Developed parts of a 100% pure Java multidimensional spreadsheet
application (JDK 1.1.5), based on Quantrix for NEXTSTEP. Specific
components include:
-
The "tile view", written using Swing, which represents each
dimension of an N-dimensional model as a tile to be dragged onto
one of three tile bars representing horizontal, vertical, or
"depth" axes. Tiles were animated to drag across the window,
and dropping the tile onto a bar rearranged cells on the
spreadsheet view.
-
A simple parser for cell input, to determine whether a typed
value was meant as a string, number or date, and to forward
parsing to the appropriate java.text.Formatter.
-
An iterator to visit all cells in the multidimensional model
represented by a contiguous two-dimensional selection, in order.
-
General implementation and debugging, particularly of UI and model
elements, as needed to bring the product to alpha.
-
Used Java servlets and XML as a data format to co-develop an
in-house requirement capture system. Primary responsibility for
code to parse XML, store requested records from disk, retrieve those
records, and generate XML-based summaries.
-
Developer on a 100% pure Java browser, a prospective successor to
the HotJava browser, which was shelved after the AOL-Netscape-Sun
alliance. Designed and began implementation of the subsystem which
forwarded URL requests to the network layer and coordinated parsers,
script interpreters, applets, plugins, and other content handlers to
produce one or more object models.
-
Added LiveConnect 3 features to Rhino, Mozilla's pure-Java JavaScript
engine. See http://mozilla.org/rhino for details.
-
Project lead and principal developer for a bridge between Java
classes and the Mozilla browser's components, using Mozilla's
component model XPCOM.
-
Project lead and principal developer for a bridge between the
StarOffice object model UNO and the Mozilla component model (XPCOM),
as part of an effort to embed Mozilla in StarOffice. Implementation
underway.
August 1991 - August 1997:
Assistant Vice President/Business Systems Analyst,
First Chicago/NBD,
Chicago, IL
Technologies/Environment: Objective-C, NEXTSTEP, OPENSTEP, NeXT/Motorola, NeXT/Intel, Sybase
Key developer, implementor, and maintainer of a trading system written
in Objective-C for NEXSTEP running on NeXT, Intel, and HP hardware.
The system, MOATS, started as an interest rate derivatives pricing
application but was later extended to handle risk management and
middle-office functions. Responsibilities and accomplishments
include:
-
Co-designed ClassInfo, a simple object-relational mapping from Objective-C
to Sybase tables which translated load and save operations into
standard SQL transactions, queries and updates. ClassInfo was
similar to, but predated, NeXT's Enterprise Objects Framework and
Sun's JavaBlend.
-
Designed and implemented MOATS's interest-rate trade object model;
maintained and extended initial design to include exotic options
priced via RPC calls to a remote server.
-
Wrote spreadsheet interface to MOATS pricing functions and trade
objects; the spreadsheet addin called a simple server to provide
trade data and interest rates.
-
Worked on-site with London traders and marketers to debug the
system, and customize it for their needs.
-
Developed initial implementation of Trade Processing subsystem, to
tie MOATS trade data to back-office entries and enforce auditing
rules.
-
Maintenance, extension, and optimization of central subsystems
including interest rate curves calculation, volatility
interpolation, trade capture, trade pricing, ClassInfo (see above),
and low-level infrastructure.
-
Ported ClassInfo and low-level infrastructure classes from NEXTSTEP
to OPENSTEP.
Jan 1990 - Aug 1991:
Programmer/Researcher,
Continental National Bank,
Chicago, IL
Technologies/Environment: Sun Sparc, SunOS, C, Sybase
Implemented and maintained trading systems for the foreign exchange
and fixed-income trading desks; all programs used C/UNIX on Solaris,
backed by Sybase databases. Collaborated with users to debug
programs, expand functionality, and improve performance. Specific
projects include:
-
Developed a foreign exchange trade entry and profit/loss analysis system.
-
Wrote XView-based interfaces to update databases and data files for
fixed-income securities application.
-
Automated Sybase nightly backups and maintenance, and warm
backups during the day.
-
As system administrator from June to August, 1991, performed SunOS 4.x
installations, tightened network security, and performed general
troubleshooting.
June 1989 - December 1989:
Programmer/Researcher,
First Options of Chicago,
Chicago, IL
Technologies/Environment: MS-DOS, C
Rewrote portions of the a PC-based program written in C with MS-DOS
batch programs. Acted as "software librarian" for application source.
Education
Bachelor of Science in Applied Mathematics, University of Chicago,
Chicago IL, June 1989. (Note: U of C had no undergraduate Computer Science
degree until 1988.)