I have worked at IBM for 17 years on a variety of projects from desktop applications to hosted web applications. These projects are listed here with descriptions of the project, what I worked on, any interesting technologies used, and screenshots (when available and applicable).
My first project at IBM was on a client which transferred free-format email and EDI messages to/from Information Exchange. It was called Expedite and I worked to port it from a simplistic console application that used text-based configuration files and was written in C, to a modern, object-oriented, C++ Windows application with full GUI configuration.
The old Expedite Base was a cross-platform product that worked on a wide variety of operating systems including AS/400, MS-Windows, MVS, OS/2, and UNIX (ex. AIX, SCO OpenServer, Linux). The new Expedite was also built with cross-platform support using XVT, Rogue Wave Tools++, and Raima
Home Page Creator was an online web site creation tool. It was targeted as small businesses to allow them to create an online store that included product catalogs, a shopping cart, and the ability to process credit cards online. Created sites were then hosted on IBM servers.
I worked on a project to re-factor the existing product into a Lotus-ASP (application service provider) based product. I was the technical lead of the registration and billing system which was to be built using web services and EJBs.
This project successfully exited the planning phase, but was not implemented due to IBM's decision not to compete in the ASP market. However, initial prototyping and development was done using VisualAge for Java.
Data Interchange performs any-to-any transformations of EDI, record-oriented, and XML application data formats. I worked on the Windows client which is used to setup the transformation mappings. I worked primarily to add the XML mapping support. The windows client was developed using Visual C++.
I also developed a prototype web-based interface to replace the host-only (3270) interface used to setup and control the Data Interchange server. This prototype utilized XML configuration files to define the necessary UI form elements and associated validation for each form element in a generic way. This prototype used Java servlets and JSPs and was the concept later improved upon for my Server Resource Management work.
I lead the design and development of a J2EE application to be a central message processor for IBM Global Services billing. This message processor utilized a Message-Driven EJB to receive XML messages via JMS on MQ Series. The message processor processed the messages it received according to business rules defined in message profiles which included validation of the message against XML schemas, logging of all messages to DB2, other message-specific processing, and returned XML response messages via JMS on MQ Series.
The message processor functioned as an ESB (enterprise service bus) in an SOA (service oriented architecture) supporting multiple messaging mechanisms such as request-response and store-and-forward. This application was ASCA certified and was developed using WebSphere Studio Application Developer. It was deployed to a environment consisting of WebSphere Application Server, DB/2, MQ Series, and WebSphere MQ Integrator.
In addition to the message processor, I also designed a web user interface based on XForms technology. The visual layout of these forms was very basic as it was only intended for a few administrators to see and use, however the use of XForms to determine form content and XML schemas for validation created a very flexible and robust interface.
The feature matrix is a representation of the model to feature code relationships for a set of products. Sales or support personnel select the particular model, or family of models, for which they need to see supported features. Some reports are available online while others are sent as email attachments.
I helped migration the Feature Matrix system from a stand-alone PC program written in Pascal to an online J2EE system. I introduced XSL transformations into this new system in order to produce a variety of reports on common XML data set and thereby eliminated unnecessary database access and Java coding. I wrote the first XSL reports and then mentored the team for how to write XSL files for additional reports..
Server Resource Management (SRM) is an IBM Global Services web application that reports historical trends of key server resources, such as CPU, Memory, and Disk in support of customers worldwide.
Following the report viewer, I architected and implemented a rich form builder for the account and server registration system. This form builder dynamically builds full featured interfaces that are complete with sophisticated field validation, complex field dependencies which can hide/show/disable other fields or complete form sections, provide field help, and retrieve field values and options dynamically via Ajax. New forms are defined with a simple XML file listing required fields and their dependencies.
Subsequent to the report viewer, I was given the task of architecting a solution to migrate SRM from a pull system where data files were retrieved from each server each night using FTP/SFTP, to a push system were each server sends in their data using HTTPS. The delivery mechanism needed to randomly distribute the delivery time within each server's time zone, gracefully recover from errors, and retry at various intervals. Once successfully delivered by the customer server, the data was transfered to SRM through MQ queues to provide ensured delivery and scalable processing.
In conjuction with the Push architecture, I built an error reporting application called IBMExceptional. This application is written in Ruby on Rails, but in order to run in the IBM eco-system which means WebSphere Application Server and DB2, it uses JRuby and is packaged as a WAR file with Warbler. It is similar in concept to Exceptional for Ruby apps, except that it captures exception information from Java applications. It can either automatically record all exceptions that are subclassed for a provided IBMExceptional Java base class or alternatively includes a log4j adapter to record logged exceptions. I also used iui to add a mobile interface to give support staff greater flexibility in responding to problems.
With IBMExceptional in place demonstrating that I could run Ruby on Rails applications successfully in IBM under WebSphere connected to a DB2 database, I was able to leverage that knowledge for the next assignment I was asked to build concurrent to the SRM Push work. For this assignment I was to deliver a simple web interface to that provided a means for outlying servers, which needed to be accounted for in SRM but was unable/unwilling to run the full SRM collection agent, to record the essential utilzation metrics. Leveraging Rails, this application was quickly implemented and delivered (much faster than I could have done with Java which I am fully proficient with), it included both a standard web interface and a mobile web interface, and within 3 months was already accounting for over 30,000 servers around the world.