Experience and skill primarily in the following areas:
Core Java programming, J2EE architecture & design
Database schema design, data mediation & migration
Object-oriented analysis & design, API & interface design, design patterns.
Core web technologies and web standards (HTML, CSS, Javascript).
Data modeling, transformation and presentation with XML, XSLT, XPath, and XML Schema.
Automated building, testing, and continuous integration with Ant, Maven, JUnit/TestNG and CruiseControl.
Core Python programming including the usual object-oriented techniques, as well as XML parsing, XSL transformations, and imaging.
Software development methodologies such as XP, TDD, Agile, Scrum, and CMMI.
“Grassroots” Linux administration (mostly with Debian), including installation of packages (using apt-get or “configure, make, make install'), service management and maintenance, security, and an abundance of shell scripting.
U.S. Citizen with active Top Secret security clearance.
Languages: Java, Python, Ruby, XML, XSL, XML Schema, XPath, SQL, HTML, CSS, Javascript, Unix shell scripting, PHP
Technologies: Web Services (WSDL, SOAP), AJAX
Java tools: Ant, Maven, JUnit, TestNG, Ibatis, Hibernate, Spring, Axis, Webwork, Struts, Sitemesh, HttpUnit, JWebUnit, CruiseControl, Log4j, Jakarta Commons (Beanutils, Betwixt, Collections, Digester, IO, JXPath, Lang, Logging), Xdoclet, Xstream, Quartz
Java technologies: J2EE (Servlets, JSP, JPA, EJB, JNDI), JDBC, JMS, JavaMail, Portlets, Swing, RMI
Java application servers and servlet containers: JBoss, Websphere, Weblogic, Jetty, Tomcat
Ruby tools: Ruby on Rails, Rake, Capistrano
Databases: MySql, PostgreSql, Sybase, Oracle, SQLite, Hypersonic
Operating Systems: Linux (Debian), Mac, Windows XP/2K. Also a little Solaris, HP-UX, BSD
Other tools: Subversion, CVS, Apache/HTTPD
Software Developer (6/2007 - present) -- Comcast Interactive Media -- Philadelphia, PA
(CIM is a division of Comcast responsible for numerous web-based software projects.)
Authored component to download RSS feeds from E! Online, transform into Atom, and store in a CMS. Along with automatic publishing of articles, editors could mix and match article content (text and images) for display on comcast.net.
Tools and technologies used: Java, OSGi, Xquery, Apache Jackrabbit, Echo2, Jetty, MySQL.
Software Developer (7/2003 - 3/2007) -- FGM -- San Diego, CA
(FGM provides software and services for the U.S. Department of Defense. I worked in the Navy Division, but was also involved in projects for other defense agencies such as DISA and JPMIS.)
Created components for mediating data between applications and web services using a large XML Schema which defined all relevant domain types. The translation between the schema and web services ranged from simple terminology differences to complex type mappings involving unit conversions and derived data. It was implemented by building simple converters for primitive types and using them to compose complex conversions, tied together dynamically via reflection. Also implemented a callback mechanism for long-running service requests.
Created an API to access user information from an LDAP data store. It allowed creating, editing, and deleting of users and groups, as well as adding or removing users from groups.
Researched and prototyped a Portal intended to integrate the capabilities of several applications. Investigated different portlet delivery techniques, from referencing resources within HTML iframes, to local deployments, to remote deployments connected via WSRP. Investigated the use of SAML and smart cards to transmit security credentials and provide single-sign on functionality.
Authored a component that calculated prospective fuel usage by gathering large data sets and performing analysis using business rules provided by military experts. Each period of time in a vehicle's schedule was categorized into a specific state, for which an associated equation predicted the fuel usage. State transitions were determined by date, location, and vehicular attributes such as ship class and command authority.
Wrote an algorithm to synchronize our system's geographic data with an external data source (~100,000 records). Interpreted and translated data fields from an external format, and used reflection to dynamically compare the records. Maintained referential integrity for existing data by marking records as “obsoleted” instead of physically deleting them. Created a detailed log to display the performed modifications in a simple, easy to read format.
Designed and implemented a job scheduling component using Quartz. It allowed for periodic calculation and storage of derived data, as well as system integrity checks.
Created a component for managing and sending system email notifications. Each type of message contained lists of addresses to CC and BCC, as well as a flag to indicate whether the “from” address should be the system or the user who initiated the action.
Created an application-wide exception handling policy which specified best practices, “what not to do”, and sample exception class hierarchies for each layer. Presented document to development team and led discussion on design choices and alternatives.
Designed and configured automated build systems using CruiseControl, Ant, and Maven. The most recent system created builds every few hours, and also allowed for easy on-demand builds for the latest code, as well as builds for any existing tagged versions in our source control repository.
Designed database schema, data layer, and business layer for initial iteration of a new project. The business layer used stateless session beans as a facade to CMP entity beans which interacted with the database. The session beans were exposed as web services (to satisfy a customer requirement) and communicated via thin data transfer objects which were serialized into SOAP messages with Axis.
Created a mechanism to import a large external data set into our database using Python, XML, XSLT and Java. The data was read and transformed by a client application before being consumed by our system's web services.
Analyzed and redesigned high-traffic components in order to optimize performance. This included refactoring of the database schema and data access layer (improving SQL, adding indexes) as well as refactoring of the web service interface (changing structure of serialized object model to store references to an internal object “repository” instead of duplicate objects).
Created Swing application to parse and display log files, allowing easy and flexible sorting and searching.
Created API which abstracted JMS topic and queue functionality into a more domain-friendly interface.
Tools and technologies used: Java, J2EE, Weblogic (Portal & Workshop), XMLBeans, LDAP (ApacheDS), Portlets, Ant, Ibatis, Quartz, CruiseControl, Websphere, Sybase, Jython, JunitEE, Axis, EJB, Struts, XSLT, Python, JBoss, PostgreSql, Maven, JMS, Swing
Software Engineer (5/2001 - 5/2003) -- TMP Worldwide / CDI Corporation -- Pittsburgh, PA
(TMP/CDI had many consultants working onsite at the Westinghouse Electric Company. I worked in the Core Technologies division, writing nuclear engineering software.)
Designed an XML schema used to communicate nuclear calculation data between a J2EE server and a Perl mediator to legacy C and FORTRAN applications.
Created a “mini-protocol” for remotely invoking business and data services on a shared server from multiple Swing clients.
Created an ORM component to translate data between our domain model and the database. Functionally, it was very similar to Ibatis (it used XML files to map database columns to JavaBean properties), just a bit less thorough.
Authored a developer's guide, containing design documentation and examples, to assist others when working with the Java and database components of our integration framework.
Tools and technologies used: Java, J2EE, XML Schema, Jakarta Commons, Ant, Tomcat, Oracle
Software Engineer (6/2000 - 2/2001) -- Soleil Technologies -- Pittsburgh, PA
(Soleil was a startup company that built software for clients in various industries.)
Worked at a customer site to assist in-house development team with some last-minute redesign and refactoring. The necessary improvements were made and the application was launched on schedule.
Reverse-engineered and refactored some particularly cryptic pieces of an application that had been outsourced. The performance, design, and documentation were greatly improved.
Trained developers on best practices and design techniques for Java and Silverstream.
Tools and technologies used: Java, J2EE, HTML, Javascript, Silverstream, SQL Server
Engineer (intern) (9/1999 - 12/1999) -- Goodyear Tire & Rubber Company -- Akron, OH
(I worked in Goodyear's Technical Computer Operations division, which provided technology solutions to other parts of the company.)
Collaborated with project manager and DBA in order to identify necessary modifications to applications.
Worked with users to create requirements, maximize usability, and finalize testing procedures.
Tools and technologies used: Java, Swing, RMI, JDBC, Oracle
Apache Software Foundation (2003 - present)
Developed initial version of mutable numbers package for Jakarta Commons Lang.
Created initial version of a combined List/Set implementation for Jakarta Commons Collections.
Improved test coverage, as well as the overall consistency and cleanliness of the Jakarta Commons IO API.
Created (incomplete) sorted and unsorted bidirectional map implementations (mapped values to keys as well as keys to values) for Jakarta Commons Collections.
Added the ability to set parser properties (to, for example, set the location of the XSD file) to Ant's “xmlvalidate” task.
Contributed some simple extensions of standard exceptions to Jakarta Commons Lang.
Improved the classloader handling in Jakarta Commons Discovery to be more tolerant of JBoss' class reloading techniques.
Added type safe collection decorators to Jakarta Commons Collections.
Nominated for FGM company-wide technical achievement award in 2004. Officially recognized by division management in 2003 and 2004 for technical achievement and dedication.
Voted in as Apache Jakarta Commons committer in 2003.
Earned an invitation to present alongside a colleague at the 2003 JavaOne conference ("Integrating Complex Legacy Engineering Applications Using J2EE and Swing").
University of Pittsburgh (8/1996 - 5/2000) -- Pittsburgh, PA
Bachelor of Science, Computer Engineering, 3.17 GPA