JAVA
Mar2009--Aug2009
General Dynamics Information Technology
Ft Lewis, WA
Summary:
Telehealth & Technology
(T2): Research and develop
technology for Psychological Health and Traumatic Brain Injury (PHTBI)
across the Department of Defense, for military personnel and families.
Think of it as WebMD for the DoD. I was hired as a Sr. Java Developer to
update the technology and mentor Jr. Developers.
PHTBI: Application to
browse/coordinate multiple research databases that supported the DoD
mandated PHTBI. Mock UI in Adobe Flex as vehicle to communicate with
domain expert on East Coast. Export Microsoft Access database to XML
file that acted as web pseudo-database until Oracle was ready … accessed
via Flex DataGrid + HTTPService. SWFObject to embed Flex.
OWL:
Flex app embedded in HTML page
to search Oracle database for info about DoD healthcare websites.
soapUI to test/debug SOAP connections.
Struts 2: Prototype based on
TED Metaphor using Flex transition effects. Flex UI and
Web Services as
alternative to Struts 2 approach.
Presentation: Technology
Overview as series of Mind Maps.
Education: Begin T2 website to educate psychologists and developers
in latest technologies. .NET:
Explore PHTBI alternative
approach using VS2008, C#, Silverlight, and
Telerik commercial controls … (much superior).
-
Telehealth & Technology (T2) researches and develops technology for Psychological Health and Traumatic Brain Injury across the Department of Defense, for military personnel and their families.
-
Capture and communicate analysis/brainstorming via XMind Mind Mapping.
-
Convert Microsoft Access database prototype to online version using Adobe Flex, Java, and Oracle.
-
Documentation was scarce, so mock UI in Flex as vehicle to communicate with domain expert. Export Access database tables to XML … place files on Tomcat server … use Flex HTTPService to link temporary server data (XML files) with Flex AdvancedDataGrid component and other widgets. Domain expert, on East Coast, was able to login to my server and run working application. This provided working screens to glean feedback and insight.
-
Layout Flex screens that paralleled appearance of HTML versions … using Flex layout managers, gradients, styles.
-
SWFObject to embed Flex within HTML pages.
-
Explore alternative approach using Visual Studio 2008, C#, Silverlight, and Telerik commercial Silverlight controls.
-
Mentor personnel on Java, Flex, object oriented, Agile methodology.
-
Project OWL: Online Web Locator. Build Flex application that could be embedded in HTML page … allows user to select/enter options, and query Oracle database for matching DoD healthcare websites. Display results in Flex DataGrid. Build Web Service as middleware between Flex and Java/Oracle. Use soapUI to test and debug SOAP connection.
-
Build prototype of OWL based on TED Metaphor. Use Flex transition effects to animate opening of sub-panels.
-
Begin work on building Web Service front-end to research database project that was being done only in Struts 2 and HTML. Use enunciate for building web services and auto-generating ActionScript code that would be consumed by Flex components. Connect Flex UI via Web Services to Java/Struts 2/Oracle … to provide an alternative approach to the older technology the team was following. Older approach required complete page refresh from server for even the smallest edit. The Struts validations were not working because of the addition of REST, whereas validation is one of Flex's strengths. The Flex results grid allowed multi-column sorting, whereas the HTML version was more limited in features. The team was having problems with how HTML version would display on IE6,7,8 and Firefox and Safari. Using Flex version eliminates these and many other problems. A far superior approach … and more user friendly UI.
-
Capture Technology Overview (Java, .NET, Agile Methodology) as series of 10 mind maps. Present information to T2 mgmt. Suggest ways to improve their s/w development.
-
Begin work on a T2 (Telehealth & Technology) wide tutorial website to educate psychologists and developers in latest technologies. Began architecture that would use Flash animation, mind maps, interactivity, Q/A, quizzes, demo applications, code, dashboards to provide interactive 24/7 access.
Skills:
Java, Adobe Flex, ActionScript, Oracle, Struts 2, Web Services,
XML, Tomcat, VS2008, C#, Silverlight.
Jun2008--Feb2009
Topia Technology Tacoma, WA
Summary:
Topia:
Developed software mobile objects
that can handle network tasks. FAA: Prototype to demonstrate Topia mobile objects in ServiceMix ESB
to handle monitoring and maintenance. Allow dynamic re-configuration of
remote system similar to OSGi. Build producer module and deployment
document. Target was aviation weather for cross-country flights. Build
admin tool to deploy Topia mobile objects. Write code to deploy filters
to ESB. Dynamically move filters in accordance with traffic load in
order to reduce network bandwidth.
NetCDF: Prototype and parse
NetCDF weather data. Prototype code to create arbitrary number of HTTP
clients so that metrics could be taken.
Graphics: Prototype Adobe
Flex application to demonstrate online, interactive graphics as option
to Topia’s current Java 2D tool. Use Adobe BlazeDS to push events over
HTTP from Flex client to ESB.
Plat Map: Debug buggy
Plat Map application that had been outsourced … unravel logic, fix bugs,
refactor code.
-
Topia Technology leverages power of software mobility to handle complex network requirements.
-
Prototype system for FAA to demonstrate interoperability of Topia's Kolona Mobile Objects with the ServiceMix/Iona Fuse Enterprise Service Bus.
-
Goal of prototype was to demonstrate monitoring and maintenance strategies within an ESB service container environment using Topia's mobile object technology.
-
Apache ActiveMQ used for asynchronous messaging.
-
Data exchanged between heterogeneous systems.
-
JMX instrumentation attached at various points in message flow.
-
System management enterprise integration patterns.
-
Mobile object technology layered on top of standard monitoring and maintenance strategies.
-
Mobile objects allowed dynamic re-configuration of a remote system (similar to OSGi).
-
Build producer module, debug, test, author deployment document.
-
Target environment was CIWS and ITWS weather for FAA.
-
Topia's Kolona Engine was added as a plugin to Iona Fuse via JBI.
-
Microburst, Gust, and EchoTop weather simulated and fed to endpoints in ServiceMix ESB.
-
Build admin tool that deployed Topia Mobile Objects to ESB in order to monitor traffic.
-
Wrote code for Topia MDCI (remote components) which deployed filters to ESB.
-
Based on traffic load, filters were dynamically moved from the first ESB and over to ESB closer to the weather source … reducing network bandwidth.
-
Prototype code to read and parse NetCDF weather data (XML and binary).
-
Prototype code to create arbitrary number of HTTP clients using the JBI compliant HTTP/SOAP binding component named servicemix-http. This allowed the ESB system to be loaded so that metrics could be taken.
-
Build JTable console application for FAA demo … remote deployment and execution of Java Mobile Objects in Open Source ESB environment.
-
Popup window for selected cell to display XML pipeline configuration file.
-
Dynamic ability to add new table rows as XML configuration files were added.
-
Prototype Adobe Flex 3 application to demonstrate online, interactive graphics capability that could be used as an option to to Topia's current VizTool (which used Java 2D).
-
Wrote code to connect Adobe Flex client to the Java ESB via Java Message Service (JMS) using Adobe's BlazeDS … which provided the “pushing of events” over HTTP.
-
Debug Flex plat map (land surveys) application that had been outsourced, but not working. Buggy code, little documentation, poorly organized. Plat map application was a combo of Flex, ActionScript, HTML, Java, and Struts. Unravel logic.
-
Format and diff versions of ActionScript plat map code to gain understanding of what changes were made version-by-version. Fix bugs. Refactor code.
Sep2007--Apr2008
Reality Works Company Bellevue, WA
Summary:
RWC:
Created computer based cognitive
learning program to give children confidence and motivation to learn.
Status: All development had
been outsourced … I was hired as first full time software engineer.
Hierarchical database from another startup was being used … which
compounded problems. Development had been ad hoc and
undocumented. Setup: Pull
together current status into a coherent model. Add code repository and
bug tracking. Problems: Hand
crafted animation was unwieldy and often caused audio to be out-of-sync
with video. Audio was being downloaded in uncompressed format. Duplicate
files were being downloaded. ALL THIS had to be fixed.
Solution: Convert audio to
compressed OGG format. Automate manual animation scripting file process.
Add peer-to-peer architecture to download files to local repository to
reduce network traffic and increase response time.
Alternatives: Once basic
process had been cleaned up, begin evaluating alternative approaches …
primarily JavaFX and Adobe Flash/Flex. Eventually convince RWC to switch
to Flash/Flex.
-
Reality Works Company (RWC) created a computer based cognitive learning program whose goal was to give children more confidence and motivation to learn.
-
All development work had been out sourced … I was the first full time software engineer to be hired.
-
Initial development process was somewhat ad hoc and undocumented, so first tasks was to pull together all the pieces into a coherent description using Enterprise Architect to reverse engineer UML diagrams from Java, and IHMC CmapTools to create concept maps describing relationships among entities.
-
No code repository was being used, so install Fedora Linux on a spare workstation and setup CollabNet Subversion as repository.
-
Help setup Mantis as the bug tracking system.
-
RWC used a new database called POD which was written in C using Forth as the glue language. I was the only one who knew Forth, so managing the database became one of my responsibilities.
-
Primary development in Java, with scripting/glue languages in Perl and Sleep.
-
I was also the only one with development background in dynamic languages, so managing the Sleep code also became my responsibility.
-
Graphics were handled as standard JPG files.
-
Animation and audio was controlled by Sleep using ASCII cast and script files, with graphics handled by Java 2D.
-
To reduce the large amount of audio/video files/jars each student downloaded, Peer-to-Peer architecture was added using Sun's JXTA, which basically created a distributed database among the local student workstations.
-
Initial audio development used AU non-compressed sound format. To improve network performance, RWC decided to convert AU audio to compressed OGG.
-
Integrate OGG audio format into existing software ... making sure that issues such as timing were not adversely affected.
-
Preload audio into memory to reduce delays when the files are played.
-
Wrap audio clips with Threads to allow a clip to be immediately stopped, paused, or looped ... with thread dying at completion of clip.
-
Optimize download of large jar files to reduce network load time by a factor of 2 to 3.
-
Use REBOL to build utilities that automated cast, script, and jar file editing.
-
Verify Adobe's licensing of MP3 … to allow RWC to use MP3 in their applications, via Flex, without fear of infringing on Thomson's MP3 license.
-
PROBLEM: Single script file for one long activity was 230+ pages of single space ASCII instructions ... essentially hand generated via copy-n-paste.
-
Hodge-podge of languages/technologies made code very unmanageable.
-
Prototype both languages ... Flex development was faster and produced better, more game-like UI experience.
-
Implement subset of a current RWC/Java Activity into Flex 3/ActionScript 3 as a demo.
-
Convince RWC to drop present, crippled approach and switch to Flash/Flex 3.
-
BOTTOM LINE: Numerous problems (too many different technologies) with current animation framework. Example: animation controlled by Sleep script was time-based rather than keyframe/declarative approach as in traditional animation.
Mar2004--Sep2007
Coastal Environmental Seattle, WA
Summary:
Coastal: Designs professional weather
sensors for aviation, naval, military, hazmat, and Antarctic.
Air Force Bombing Range:
Convert hybrid system (VB4, C, Assembly, Scheme, Tcl) to Java. By end of
Feb 2004, project was in great danger … only three weeks remained until
delivery. I joined Coastal on 01Mar2004 … started mentoring &
development. Work almost 24/7 to successfully make 17Mar2004 deadline.
Space Shuttle: May 2004
delivery of real time Java weather application to NASA.
Swedish Military: Embedded
h/w, new weather algorithms written in Java, complete Java UI, database,
distributed access, voice.
Canada: Remote, autonomous weather stations to provide nationwide
weather for Canada. Skills:
CommAPI 2.0 for serial port data streaming, NIO, Multicast IP
Addressing, MySQL, SVN, Bugzilla, JProfiler, OpenSSH, PuTTY, Log4J,
JavaBeans, XStream, ANTLR, METAR weather.
Re-Architecture: In
first month I suggested a complete re-architecture of system into Java
was needed. Coastal decided to continue on path using
s/w tool
to automatically convert VB4 code to Java. Result was costly in terms of
poor architecture, debugging, and maintenance … which caused loss of
business due to reduced features and missed deadlines.
-
Coastal Environmental designs, manufactures, and installs professional weather stations for aviation, naval shipboard, military weather, hazmat, Antarctic.
-
Coastal licensed weather software from another company … but that company was experiencing problems converting their VB application to Java.
-
Existing software system in 2004 was hybrid of VB4, C, Assembly, Scheme, Tcl.
-
Coastal decided to deliver new applications in Java and, in Fall 2003, began first Java project (Air Force bombing range) ... but by the end of Feb 2004 the project was in great danger ... only three weeks remained until delivery on 17Mar2004.
-
On 01March I joined company and started mentoring & development on Air Force Java project, and we worked 24/7 to successfully make the 17March deadline.
-
In May 2004 we delivered a real time Java weather application to NASA for the Space Shuttle.
-
Next major project was delivery of aviation weather application for Swedish Military which included embedded hardware, new weather algorithms written in Java, complete Java UI, database, distributed access, voice.
-
A large project was system of remote, autonomous weather stations to provide nationwide weather for Canada.
-
Within first month (March 2004), I suggested complete re-architecture of application into Java was needed, but Coastal decided to continue on the path they had already started using a VB4 to Java conversion software from DiamondEdge. Their decision proved costly in terms of poor architecture, debugging, maintenance.
-
Use Sun’s CommAPI 2.0 to access serial port data streaming in from weather sensors, parsed this data stream, wrote it to file using Java’s NIO, and also multiplexed it out on multiple serial ports to other monitoring stations.
-
Setup Multicast IP Address using MulticastSocket so weather data could be broadcast via Intranet. This allowed capture of weather data that could be played back for regression testing.
-
No database or source code repository was being used. I led effort to use MySQL and assisted in setting up SVN as the source code repository.
-
Setup Bugzilla for bug tracking, JProfiler for memory profiling, and Enterprise Architect for UML diagrams.
-
Setup and install Win2000 and WinXP System Services to auto run Java applications, secure SSH network connectivity to Debian Linux platform using OpenSSH, Pageant Agent and the PuTTY SSH client.
-
Build custom JavaBeans for both visual and non-visual weather components … example: custom built graphical components for compass wind direction and lightning graphs.
-
UI development using JFormDesigner and Jigloo.
-
Java charts using JCCKit. Web Services using Axis.
-
Exploration and spikes using Groovy.
-
Logging via Log4J.
-
Java Threads to control multiple concurrent processes (database access, charts).
-
Reverse engineer VB4 binary files, and wrote code to convert between VB4 and Java (Endian differences, varying byte lengths for data types, no documentation, challenge of deciphering VB structures from sparse binary files).
-
Use XStream to marshal and unmarshal XML weather data to and from Java objects.
-
Convert METAR (METeorological Aviation weather Report) to BUFR (Binary Universal Form for Representation of meteorological data).
-
Setup VMware to run Ubuntu Linux on WinXP in order to explore Unix-only versions of BUFR parsers.
-
Converted PDF BUFR table to ASCII text format using Groovy.
-
Begin building ANTLR grammar to parse METAR.
Jun2000--Jan2001
ProductSight Corp
Bellevue, WA
Summary:
ProductSight:
eCommerce startup to accelerate decision flow for OEM and suppliers of
custom parts. Agile: Help establish XP
(eXtreme Programming) team. Participate in planning,
architecture, analysis, design, testing. Unit testing and pair
programming. PLM: Build Product Lifecycle Mgmt tool to track and index product
data scattered across multiple systems. Web app provides secure access,
workflow, and sourcing. Manage change orders and communicate with ERP
systems. Skills:
IBM VisualAge for Java, Oracle, TopLink ORM, CVS, JSP, Servlets,
Tomcat.
-
Develop collaborative eCommerce application to accelerate decision flow for OEM and supplier companies to engineer products and custom parts.
-
As member of Java XP (eXtreme Programming) team, participate in planning, architecture, project management, analysis, design, coding, and testing.
-
Control scope, features, quality, and deadlines via XP.
-
Unit testing and pair programming.
-
Oracle database via TopLink object-to-relational mapping.
-
UI was HTML generated by JSP and Servlets using custom state machine architecture to handle the stateless HTTP environment. Versioning via IBM VAJ Repository and CVS.
Jan1999--Jun2000
Appworx Corp
Bellevue, WA
Summary:
AppWorx: Developed job
scheduling and IT process automation targeted at Oracle databases.
4GL:
Existing app was written in a
proprietary 4GL language. Task was to port 4GL to Java, which at that
moment was JDK 1.0. Java:
Architect conversion process and evaluate best technologies. Select
architecture incorporating Applets, RMI, JDBC … and still-to-be-released
Java 2.0. Design object model. Java Swing to provide richer UI than
provided by HTML. Design patterns. Pluggable architecture via Java
Interfaces. Borland: Current
Java environments did not support Oracle Stored Procedures, therefore
became early adopter and tester for Java 2 version of Borland’s
JBuilder.
-
Port enterprise process automation, used by major corps for scheduling and services, from proprietary 4GL to Java JDK 1.2.2, 1.3Rc3.
-
Architect conversion process.
-
Evaluate best technologies and best network architectures.
-
Design underlying object model.
-
Select architecture incorporating Applets, RMI, JDBC, Java2.
-
UI redesign to incorporate Swing features such as trees, tabbed panels, drag-n-drop, Java 2D.
-
Design patterns such as Facade, Abstract Factory, Singleton.
-
Java interfaces to provide pluggable architecture.
-
JUnit testing.
-
Debug early Borland JBuilder Java2 code in order to implement Oracle 8 Stored Procedures.