Object-oriented Java developer working with Java since 1996, as well as previous C/C++ programming experience. Approaches all software development from an object-oriented perspective. Primary experience is with Java's Swing package (since 1999).
Email:
Phone: (812) 926-1828
Skill | Experience |
---|---|
Java | Continuous experience working with jdk versions from 1.02 to 1.6; routinely use swing, collections, xml, threads, reflection, many other features. |
Swing | Continuous experience since 1999; primary development focus; commonly use many Swing components, often including JTree and JTable; have experience with JGoodies. Rated "master" on Brainbench Java GUI exam (transcript ID 5864368). |
Object-oriented analysis and design | Many years experience; worked on design teams; functioned as architect on one assignment, including leading design sessions; used several UML design tools, most recently MagicDraw UML. |
XML | Used with Java since 2001; solid experience with DOM, basic knowledge of SAX; have used XSLT with Java. |
Database | Basic knowledge of relational database principles and SQL; used jdbc-odbc bridge and MS Access on several projects; manual object-relational mapping. Called Oracle PL/SQL stored procedures on one assignment, using custom xml-based object-relational mapping. Called RPG stored procedures and made SQL queries on AS-400/DB-2 on another assignment. On latest assignment, developed persistence layer using H2 database with hibernate, JPA and plain jdbc. |
Web | Basic knowledge of web development; extensive servlet development on one project, defined and used EJB session beans on another. Some recent experience with JSF and richfaces, as well as CSS and DOM scripting using JavaScript. |
Documentation | Skilled writer; known by some co-workers as "Mr. Documentation" due to attitude toward design documentation, as well as speed and quality of documentation production. |
Team development | Enjoy working either solo or on teams of various size and composition; develop good relations with co-workers; enjoy and skilled at mentoring; had good results in leadership role on assignment at Bayer. Used SCRUM methdology on some assignments. |
Tools |
Java IDE: many years experience with JBuilder; 6 months Eclipse; several
months NetBeans UML: Together Developer, MagicDraw UML XML: XMLSpy on one assignment Version control: Visual SourceSafe, CVS, Subversion Software installation: developed several installers using InstallAnywhere Unit testing: JUnit Frameworks: some exposure to Spring FIX protocol: quickfixj framework |
Platforms | All versions of Windows |
Domain experience | Health insurance, medical record, hospital clinical management, manufacturing, mechanical product configuration, e-learning courseware, public utilities, stock exchange, factory automation. |
Miscellaneous | Native code: developed adapter DLL for accessing Delta Tau Systems PMac motion control card. |
FedEx – November 2014 to October 2015: Sole Java Swing developer on two major applications: an alerting system for aircraft flight events, and a pilot management system. Added new features using Swing, accessing a WebLogic server.
OneChicago – July 2014 to August 2014: Sole Java Swing developer on a project with a very aggressive schedule, to create a trading application for OneChicago’s investment products. Other team members developed the server. The Swing client uses the FIX protocol and the quickfixj library for client/server communication. The app processed asynchronous messages in many threads while keeping the Swing GUI responsive. Worked remotely on this project.
Quest Diagnostics – September 2013 to March 2014: Java Swing developer working with Quest’s AutoReceive software, which is installed in healthcare organizations to automatically retrieve lab results from Quest using web services, and print them. Updated the InstallAnywhere installation script to work in Windows 8 and 8.1. Updated AutoReceive itself to work in Windows 8 and 8.1. Worked on converting AutoReceive’s web service access from JAX-RPC to JAX-WS. The team used the Scrum methodology. Worked remotely most of the time on this project.
Outokumpu Stainless USA – February 2013 through July 2013: Java Swing developer on two projects, both creating Java Web Start applications based on existing Oracle Forms systems. Applied the pre-existing home-grown MVC GUI framework to create new application modules. Did significant refactoring of the framework and existing application modules, which allowed the removal of many Java classes and simplified the development of new functionality.
Nokia/NavTeq – September 2012 through December 2012: Java Swing developer creating functional tests for the client’s map editor’s Swing user interface. Used an open source UI testing framework called UISpec4J to instrument the application and test scenarios, invoking UI components and confirming correct results. Significantly increased testing code coverage.
FedEx – January 2012 to August 2012: Java Swing developer programming new features for a complex aircraft maintenance document and workflow management system. Was one of two Swing developers working with several server side programmers. Sole developer of a utility for visually comparing cgm (computer graphic metafile) files.
Data Recognition Corp – October 2011 to December 2011: Java Swing developer adding features and making bug fixes to the company's computer based achievement testing client. Worked entirely in client code. Was very successful at tracking down very difficult bugs, especially related to tabbing and painting on JLayeredPanes. The team used SCRUM methodology on this assignment.
LifeTouch Portrait Studios – May 2011 to August 2011: Java Swing developer adding features to the application used in LifeTouch studios to sell portraits to customers. Integrated new code into the client’s existing very complex binding framework. Worked in both client and server code; made database changes and created new hibernate entities as needed. Used SCRUM methodology on this assignment.
FedEx – February 2011 to May 2011: : Java Swing developer on several projects. Wrote a variety of custom JTable and JTree custom cell renderers and JTable custom table models. Interfaced client code with proxies for stateless session beans running in WebLogic. Also worked on debugging Fit test cases for machine-generated Java code.
Rockwell Automation, Mayfield Heights, Ohio – June 2010 to December 2010: Java developer working on software for managing factory automation controllers. The work has focused on developing a persistence API using Hibernate annotations and the H2 database, with heavy use of Junit unit tests and code reviews in Code Collaborator. Later work involved re-implementing with straight jdbc after removing hibernate and JPA. Used SCRUM methodology on this assignment.
Health Management Systems (HMS), Nashville, Tennessee – July 2008 to January 2010: Java developer working on hospital clinical management software implemented as Swing applets. The work is a mix of bug fixes and development of new features. Also worked for several months on an intranet project using JSF and Richfaces.
New feature development included nursing orders, co-signature of all types of orders by physicians, and many smaller features. Wrote a utility to recover data that had been saved using default Java serialization and could not be read by newer versions of the software.
Every project, whether bug fixing or new feature development, required reverse engineering of undocumented code, honing analytical skills.
Chicago Stock Exchange, Chicago, Illinois - July 2006 to July 2008: one of two Java developers on two teams, working with users, project managers, business analysts and PL/SQL stored procedure developers. The major challenge on this assignment was using the client’s powerful but complex and undocumented architecture and application framework. Advanced analytical skills were required to research class relationships and sequences of operations used by the framework. The applications were client-server based, using Java Web-Start for client deployment, JINI for client-server communication, and Oracle for data storage.
One project involved producing a new version of legacy Java software for investigating violations of trading rules by brokers. The purpose of the other project was to develop a maintenance application for stocks and other entities used by the stock exchange. The latter project was still in progress when the assignment ended.
In both projects, developed Java code for the Swing user interface down through calling of stored procedures. Also developed much xml for object-relational mapping and externalized rules for market regulation.
Bayer HealthCare, Elkhart, Indiana – March 2006 to June 2006: Worked on a team of six developers to create a diabetes management desktop application using Java and Swing. The project was postponed due to external factors, so the software was not completed during the period of the assignment. In addition to the official role of Swing developer, served unofficially as OO architect and lead developer.
Most of the time on this project was spent on analysis and design, including writing design documents. Bayer’s software is classified by the FDA (Food and Drug Administration) as a medical device, so a stringent development process is observed, with every step being carefully documented. In addition, on this project the process included test-driven development.
Used MagicDraw UML daily to create class and sequence diagrams; conducted team design sessions; participated in design reviews. Mentored team members on design and Java implementation. Used JBuilder and its Junit support to create and run unit tests for most classes.
Responsible for implementing main application classes and a mail merge feature. The latter used localizable tags inserted into a Swing StyledDocument as JLabels with tags attached as client properties. Each tag encapsulated all necessary information for merging with the recipient’s data.
Steel Tools LLC, Noblesville, Indiana - November 2004 to November 2005: Developed Tool Manager, a client-server Swing application to manage maintenance of tools and dies in stamping plants. The major benefit of the software is that it makes it possible to do the right maintenance at the right time, thus preventing breakdown of tools during a press run and reducing maintenance costs. It can also manage re-use of certain steel scrap, further reducing costs and improving competitiveness of the plant. Steel Tools is testing Tool Manager in one medium sized stamping plant, and is actively pursuing licensing to other plants.
User interface: The client user interface presents varying capabilities to several user types: administrators (software configuration and user management), supervisors (reading and writing data on tooling components, presses, work orders etc), crib attendants (tool crib inventory management functions), and toolmakers and other read-only users. It is Swing based, and relies on the JGoodies libraries for look and feel as well as binding data to the gui. Search results are presented in a JTree, which is the base from which all tooling objects (tools, presses, etc) may be viewed, edited or deleted.
Server: Data is managed by a server application. Client-server communication is accomplished by passing objects through sockets using ObjectInputStreams and ObjectOutputStreams. The database used by the server is the MS Access engine built into Windows XP, accessed using JDBC and SQL.
Logging: Server actions are logged using the Apache Jakarta commons logging api.
Modern Die Systems, Elwood, Indiana – September 2004 to February 2005: Teamed with mechanical and electrical engineers, developed a Swing application to control a machine that measures dimensions of an aluminum extrusion and uses a servo motor to make a correction to one of the dimensions. The machine was custom designed for Alcoa in Auburn, IN.
User interface: The user interface presents both operator and administrator views of the machine's operations. The administrator is able to manage administrative and operational users, configure machine operation (e.g., set target dimensions and tolerances), and search the archive for historical data on parts processed. The operator is able to start and stop the machine, and observe the software's perception of the machine's current state.
Interesting features of the user interface include a machine state diagram, in which the current state is highlighted by color change. This is implemented as a custom Swing JPanel. There is a graph for viewing series of processed parts. As the mouse traverses the graph, a vertical line highlights a particular part and that part's individual data appears in JTables outside the graph. Heavy use was made of the JGoodies libraries for look and feel as well as binding beans to the gui.
Threading: The machine interface has some near real-time requirements. The user interface must be able to report safety or other operational problems with little or no delay; and the software must be able to detect those problems and immediately take action to prevent damage to the operator or the machine. In order to meet these requirements, the software heavily utilizes Java's multiple threading capabilities.
Persistence: Data on parts processing and software and machine configuration are retained in a database. For this purpose, used the MS Access engine built into Windows XP, accessed using JDBC and SQL.
Logging: Software actions are logged using the Apache Jakarta commons logging api.
Hardware interface: The interface to the machine itself is a Delta Tau Systems PMac motion control card. The software interface to this card is a Windows dll. To use this dll in the Java application, wrote an adapter dll using C in MS Visual Studio .NET 2003. The dll allows the software to send ASCII commands to the PMac. By this means, the software is able to read the states of various sensors, including optical switches, proximity sensors, digital position indicators and servo motor position. It can also turn switches on and off, activate pneumatic cylinders through solenoids, and control the motion of the servo motor.
NeuSys, Inc., Aurora, Indiana - April 2002 to present (ongoing development): Sole developer of a Java 1.4 framework for technical manufactured product catalogs. I started development of the framework concurrently with its first use on a project (April 2002 to March 2003) for Ortman Fluid Power (Quincy, IL). Ortman manufactures several lines of pneumatic and hydraulic cylinders. The software I developed for them makes it easy for a user to specify features of a cylinder from any of Ortman's product lines. It then generates a catalog number, product spec sheet and drawing of the selected cylinder. It provides printing capability for the spec sheet and drawing, as well as zoom and pan for the drawing. The user can also export the drawing to an AutoCAD DXF or PNG file.
The framework uses manufacturer-specific catalog data that are externalized in XML files. The externalized data include product features, rules for mutual compatibility of features, drawing dimensions, drawing instructions and a spec sheet template. The XML drawing instructions include expressions that are evaluated using a postfix expression evaluator included in the framework. The externalized spec sheet template is written in XSLT, to convert an XML product spec generated by the framework to HTML for display and printing. All user interface text strings are externalized in a properties file to facilitate localization.
I developed several user interface features for the framework. A panel for selecting product options presents Swing components of different types for the various options types. For example, the "double rod end" option is Boolean (true or false); it is represented on the option selection panel as a JCheckBox. Mounting style is a selection option, with several possible choices; it is represented as a JComboBox. Floating point and integer options are represented using custom JTextField components. The option selection components are arranged vertically down the area of the selection panel using a GridBagLayout.
The framework also contains a DescriptionBar class that displays an icon and description of each option as the user moves the mouse over the components in the option selection panel. This includes a different icon and description for each item in any of the JComboBoxes in use.
Product specification sheets are displayed as HTML in a JEditorPane. The html content for the spec sheets is generated using an XSLT template. Drawings of the selected product are displayed on a ProductDrawingPanel of my own design. This class uses Java2D to render a product drawing. It supports layers (such as dimension line, English and metric unit layers), infinitely variable zooming, and panning using scroll bars.
The Ortman application of the framework presents the option selection panel on the left side of a JSplitPane. The spec sheet and drawing panels are on tabs in a JTabbedPane on the right. Below these is the DescriptionBar described above. Buttons on a JToolBar duplicate the most commonly used items in the menu system.
UML design and JavaDoc system documentation for this project is performed using TogetherSoft's Together 6.0 application. I used various releases of JBuilder (6 through 9) as the IDE for the project, though all user interface code was hand-coded, not generated by JBuilder. While using JBuilder 6 for this project, I wrote a review of that product for the web-based publication Journal of Object Technology, (http://www.jot.fm/products/review1) along with Dr. Richard Wiener, editor of that publication. I used Java SDK 1.4 for all code in the project.
For application deployment, I developed an installer using InstallAnywhere 4.5 Enterprise. I also used my experience with this and other installer products to collaborate with Dr. Richard Wiener in writing a review of installer software for the Journal of Object Technology (http://www.jot.fm/products/review2).
The basic web features of the framework are complete. A catalog developer now needs to add only a few more lines of xml to list options to appear on wizard pages, and create xslt templates, in order to dynamically generate appropriate web pages for a product selection wizard.
My present work involves further extending the framework to handle hierarchically organized product lines; adding a solid model view of the selected product, implemented using Java3D; and developing a gui tool for entering product line data and drawing instructions. I am also busy marketing my catalog development services to manufacturers in the fluid power and linear motion component industries. This involves interacting with potential customers via phone, email and personal visits.
October 2001 to April 2002: Developed a personal information manager (PIM) called ChaosBane for NeuSys to market via shareware. ChaosBane is a hierarchical PIM written using Java 1.4. It uses a JTree on the left side of the window to organize information by category. When the user selects a tree node using the mouse or keyboard, the textual content attached to that node (category) is presented in the JTextArea that uses the remaining area of the window. Menu items and toolbar buttons provide means for the user to edit and rearrange the JTree's nodes.
The JTree uses a custom TreeModel designed to allow using a title that is part of the textual content to serve as the text of the tree node. The model also facilitates searching of the tree and textual content by ChaosBane's search function.
Data for ChaosBane, including the tree structure, textual content and indices for searching are stored in an XML file. The XML is ZIP compressed to minimize disk space consumption.
August 2001 to October 2001: Java developer on a project for Manugistics, a major supply chain software provider. Worked on the presentation layer of a system that allows an auto manufacturing company to collaborate with its suppliers in scheduling production of purchased parts. The presentation layer uses JSP, servlets and Struts communicating with a server via stateless session EJBs (Enterprise JavaBeans) running on the WebLogic application server. Web content is generated using XML and XSLT.
My responsibility was to implement web page presentations starting with prototype HTML/JavaScript code produced by a web designer. To do this for a given page, I determined the requirements for data from the server and designed stateless session bean interfaces to obtain that data. Server-side developers provided implementations of those interfaces.
Working with data provided by the session beans, I developed JSP code to produce XML representing the data, and wrote XSLT to render that data in the format determined by the HTML prototype. I also developed Struts Action and ActionForm Java classes as needed, and added information to the struts-config.xml configuration file to fit a given page into the flow of the application.
My work on this project was performed primarily in our NeuSys home office.
April 2000 to June 2001: Java GUI developer for Peer3 (a now-defunct division of TSC), a producer of e-learning tools. Used Java 2 and Swing/JFC. My time on this project consisted primarily of developing and debugging a styled text courseware content editor based on classes in the javax.swing.text package. The editor had provisions for incorporating images, tables and lists into the text. My work included customizing subclasses of DefaultStyledDocument, JTextPane, View and related classes.
I was also responsible for researching the internationalization of the software, so I became pretty familiar with Java localization. The project was terminated before I had any opportunity to make use of that knowledge.
In the course of this project, I developed an installer for the courseware editor using InstallAnywhere. I exercised the custom code features of that product to configure the editor during installation.
My work on this project was performed in San Francisco, Carlsbad, CA and our home office.
September 1999 to April 2000: Responsible for developing GUI client software using Java 2 and Swing/JFC for Innovatec in Milwaukee, WI. The software was to be used to administer a network of automated utility meter reading devices. Got extensive experience with the Swing JTree class. Used Java RMI to communicate with servers. Performed object-oriented design, documenting with the Visio UML tools. Did GUI design for the software. Work performed in Milwaukee, WI and our home office.
January 1999 to September 1999: On a project for Ericsson in Richardson, TX, developed GUI client software for a news story authoring and administration tool using Java 2 and Swing/JFC. Used JDBC to interact with MS SQL/Server database. Work performed in Dallas, TX and our home office.
February 1998 to January 1999: Visual C++ front end developer for Anthem Blue Cross - Blue Shield. Responsible for developing GUI subsystems for a large managed care system running on Windows NT. Also developed software using Java 2D to graph remote procedure call performance data in near real time.
February 1997 to November 1997: Java front end developer for an Anthem Blue Cross - Blue Shield health insurance information system. The application was intended to be deployed on web sites on the Cincinnati Health Bridge intranet and the Internet. Participated in the design of the system, and developed several Java applets that served as the client side of the application. Also responsible for the HTML coding and graphic design and layout of the web sites.
April 1996 to December 1996: Visual C++ and Java developer on a large managed health care system project for Anthem Blue Cross - Blue Shield. This started out as a Visual C++ assignment, but quickly evolved into a small side project to develop a Java prototype. The prototype was to demonstrate that the agent technology developed for the C++ project could be used by a Java client to access legacy health insurance data.
1987 to March 1996: Sole Proprietor of Neuendorf Systems
Responsible for all phases of developing and supporting many Windows and DOS programs. Development projects included a line of commercial software packages for AutoCAD users, and custom software developed for clients. All software was developed in either C or C++.
Commercial Software Packages (developed in C for DOS): Developed about a dozen programs for AutoCAD users as an Autodesk Registered Developer. Most were file translators to import and export data between AutoCAD and mainstream PC applications such as spreadsheets and presentation graphics programs. Included a TSR application to allow text mode DOS programs such as databases to display graphic files from AutoCAD and other applications. Our best seller was a fax driver for AutoCAD that automatically tiled a drawing for faxing as multiple pages.
Custom Software for Clients (developed in C++ for 16-bit Windows): Developed four hydraulic/pneumatic cylinder selection programs for Hanna Corp., Chicago and Mannesmann-Rexroth Corp., Lexington, KY. These programs performed engineering calculations in response to user specifications of cylinder application requirements, leading to recommendation of a particular cylinder. They produced cylinder drawings in a window, allowing the user to zoom and pan around the drawing. The drawing could dynamically change which cylinder views (e.g., side, top, etc.) it displayed in response to user input. Printing, copying to the clipboard, and file export (as DXF or generated AutoLISP code) were supported. These programs are provided by the cylinder manufacturers to their customers and distributors as a marketing tool and engineering aid.