I worked in Germany for 5 years, between 2002 and 2007. My most recent project was software development for toll enforcement gantries. A toll enforcement gantry carries out enforcement procedure for the German Truck Tolling System. There are hundreds of gantries deployed across the German motorway network.
As member of core software development group I worked on the gantry software, mostly written in C++. I designed operational data storage structures and provided assistance to the system delivery process. Additionally I provided technical leadership and coordinated the work of developers and testers to create test specifications. Gantry software was implemented under hard real-time constraints necessary for free flow toll enforcement.
Lorries with installed on-board units (OBU) communicate with the gantry
over DSRC (Dedicated Short Range Communication).
I developed DSRC communication module for real time
handling of OBU data in multi-lane free flow environment.
As responsible for the data management and communication I also implementated various security software parts. I gained solid working knowledge of security concepts as well as practical skills in cryptographic algorithms and safe coding practices. I contributed actively to the security of the system and played key role in most cryptography related tasks across the project.
For the project I have personally programmed more than a hundred thousand lines of code, tested it, written specifications and design documents. I provided appropriate solutions maintaining a degree of balance between technical innovation and pragmatic design.
Our team used very strong development and delivery process supported by configuration management, version control and error tracking tools. In-house automatic software build server was a cornerstone of the process. As a result, I learned a lot about system lifecycles and software engineering practices applied to development of mission critical systems in a large distributed team.
After the release of gantries into production environment I was involved in most major incremental system enhancements.
Between 2002 until March 2003 I worked at now-defunct research institute FAW. FAW was formed in 1988 in the Science Park Ulm to be a leading research institute for artificial intelligence in Germany. I worked at the Business Processes and Telematics department.
The EU-funded project WINGS-FOR-SHIPS (Maritime Intelligent Workplace for weather Information Network, Guidance and Supervision onboard ships) designed telematics system that would provide ships with shared weather information and sea condition data. The system was supposed to enable real time route evaluation and ensure efficient and safe navigation. The system would be especially helpful for shipmasters on board of High-Speed Vessels.
In this project FAW was one of the numerous project stakeholders. We were responsible for the overall software architecture including server data model. The system had a central server and distributed clients. Having evaluted a number of open source technologies and products we went with Java platform, Apache Tomcat, PostgeSQL and RedHat Linux for the central server.
As part of a 3-man development team, I designed the database schema for PostgreSQL RDBMS. Initially, the schema contained about 30 tables to store information about weather, ships, ports and routes.
Such EU projects primarily focus on initial phases. Design discussions, knowledge sharing and expertise exchange between carefully selected project participants seems to be much more important than a system delivery. As a result, the project involved significant liason as well as presentation activities. Actually, the project never went into development.
WINGS-FOR-SHIPS gave me good exposure to various aspects of international projects involving a wide range of participants.
Before the project WINGS-FOR-SHIPS at FAW in Ulm, I was involved in the development of a bespoke KM application POWM (prozessorientiertes Wissensmanagement - process oriented knowledge management) for a renowned German car maker. Following the philosophy of knowledge management as a way to gather and reuse knowledge acquired within an organization, we built an enterprise system that helped the client to capture knowledge about their complex and weakly structured engineering processes. Engineers partcipating in a particular development project were enabled to record their experience and activities. This has facilitated converting of implicit personal know-how into explicit process knowledge encoded in form of process models with supporting documents.
The POWM was a n-tier, Oracle based Java application with a rich Swing-based GUI. During my 8 months in the project, I worked primarily on the front-end developing the module MyPOWM, a personalised table and tree based display of process, activities and documents. The effectiveness of the graphical user interface was the main requirenment for MyPOWM so that engineers would feel comfortable with frequent use of the tool during their daily project routine.
Initially focused on software development, my role at FAW has expanded to technical leadership. As an example, I introduced the team to code and build management tools and integrated WinCVS, JUnit, Java Ant into existing development environment based on IntelliJ IDEA. I dealt with many aspects of configuration management raging from configuration of the CVS server to writing Java Ant scripts.
I developed an open-source framework "Tabular Data Manipulation" in early 2002 when my experince with Java Swing in the project POWM combined with good undestanding of MVC gave me good insight on how to perform effective data manipulations on tables and lists in Java 1.4.
Applications that display data in tables or lists usually have to allow users to sort the data on columns or apply a filter criteria. Although it might appear straitforward to implement sorting or filtering directly on the model level, developers can end up with an irresponsive and slow GUIs especially when the model contains large volumes of data.
TDM addresses performance issues caused by expensive data copying in models. It adds just another level of indirection between the data model and the view introducing the data manipulation layer that is responsible for data representation manipulation without altering the data itself.
Although the Swing API in the Java 1.6 release supports filtering and sorting of tables out the box, the TDM can be used as an alternative implementation. The TDM framework is better aligned along the concepts of the MVC Architecture and clearly separates data storing, data representation and data manipulation issues.
Here you can read the TDM overview and download the binaries, sources and documentation.
At InterObject I developed a SMIL (Synchronized Multimedia Integration Language) multimedia player. A SMIL 2.0 basic profile compatible product was able to play complex multimedia presentations combining audio video and text. It was developed in C++ for desktop and mobile Windows.
I was involved in the project from the early phase. Working as part of a 5-man development team, we established the 3-layered player architecture. The lowest layer handled audio and video playback (e.g. DirectX API). The top layer represented GUI and parsed SMIL files for playback. In between was the execution engine responsible for interpreting the SMIL presentation structute, orchestrating its media elements and layouting the presentation.
I designed and developed the execution engine of the player according to SMIL Time and Layout Models. The engine controlled temporal behavior, presentation layout and handled media hyperlinks. It supported time graphs, time containers, syncbases, instance time lists, instance times, regions with absolute and relational sizing and fitting, background regions and z-index etc.
I performed OO design of the engine using UML and Rational Rose. C++ development made heavy use of STL and GoF design patterns. The NuMega tools BoundsChecker and TrueCoverage along with CppUNIT helped to debug and unit test the component. The execution engine was ported to the Pocket PC platform using eMbedded Visual C++.
Working on the engine I gained solid experience with Microsoft Windows technologies (COM, ATL and DirectX). I learned a lot about software design, patterns and one of conclusions was that is makes few sense to do a full detailed component modeling before the design is proved with code. Since then I'm a follower of eXtreme Programming and Agile methodology.
The SMIL Player has grown into the InterObject MMS technology.
At InterObject I developed Smalltalk software for semiconductor manufacturing industry. During 2000, I had been involved in the development of control systems for ProCell DUV Coat/Develop photo-resist processing tool from Silicon Valley Group. ProCell was a cluster tool and its control software was based on the ControlWORKS Framework. The ProCell consisted of many bidirectional process modules and four robot arms to move wafers between them. The deployment model of the ProCell software architecture incorporated two binary units, the maschine controlling image and the host image that run on two hosts.
My area of responsibility within the project was design and development of maschine scheduler and machine GUI. The maschine scheduler was very complex subsystem providing precise wafer transport control necessary for consistent wafer processing. The rules-based scheduling engine allowed implementation of complex wafer flow logic. The ControlWORKS decision mechanims evaluated the configured set of rules using a score table to determine the next operation on a wafer.
I designed and implemented the pilot wafer flow feature which was a challenging task, since the machine scheduler, already at its limits, had to be extensively modified to introduce new processing scenario when only one wafer runs through the system. As solely responsible for pilot wafer flow I worked on-site at the client company in San-Jose, USA to roll out the feature. The feature was delivered within very tight time-scale. Dealing directly with our clients I also provided expertise in Smalltalk and ControlWORKS to their development team.
Projects Procell and Lynx gave me great insight on development of large-scale, distributed control systems. As a result, my master's thesis that I wrote during my work on Procell, focused on development of a control software for semiconductor manufacturing automation.
The project Lynx, I started working on in March 2000, had been building a thin film deposition equipment for chemical vapor deposition (CVD). For this project we developed large parts of the SCADA (Supervisory Control And Data Acquisition) software in Smalltalk. Being a cluster tool (a machine that combines many wafer processing modules that are managed by a centralized control system), similar to ProCell, Lynx was also based on the ControlWORKS Framework.
The Lynx software system had a client server architecture and was deployed as two software images running on two computers. The mashine controlling image responsible for direct communication with actuators and sensors run on an embedded computer and served as a server for the host image. The host image implemented the HMI and provided a whole range of typical SCADA software features including data logging, recipe management, wafer movement coordination and scheduling, alarm handling, event management and machine maintenance.
I developed the host software tier. I prototyped and developed parts of GUI and fixed numerous bugs throughout the project. Developing custom widgets for operators GUI required deep understanding of the MVC paradigm in Smalltalk. Software was developed using VisualWorks 2.x and Rational Rose with version control management built on the ENVY/Developer.
The project Lynx has taught me the fundamentals of OO, design patterns, multithreading, and basically the software development process for large scale mission critical systems. Besides, I got into automated code refactoring utilizing the VisualWorks add-in Refactoring Browser.
My first project InterObject was implementation of Switch Configuration Utility for IP-Telephony Gateways. We developed a n-tier Java application for access to the equipment configuration database. My work was implementation of the front-end and linking it to an Oracle RDBMS via a middle layer which utilized an in-house object-relational mapping layer on top of the JDBC for the database connectivity. The GUI was built as a Java applet using the JFC library.
Although I was in the project team only for 4 months (moved shortly after it to 2 large Smalltalk projects), I built up solid grounding in software development process.
From July 1998 to January 1999 I was in practial training at the research institute FAW in Ulm, Germany taking part in the IAESTE exchange program. I was engaged in research of information visualization, in particular its representation with various graph layout algorithms using Java platform. The goal of the research was to find the optimal layout for different sorts of complex hierarchical strcutures in order to make them clearly arranged and hence easily gpasped.
I developed of web-based application for representation of search results from the Yahoo! Directory in a three-dimensional virtual reality space. It generated a VRML world from the directory subtree returned by Yahoo which was displayed in a VRML-enabled web browser. Since users normally orientate themselves better in 3D spaces, the application could help to find necessary information quickly by navigating through the world and approaching particular documents for detailed information.
I used Apache web server and a CGI-driven third side Perl VRML module on server side along with the Cosmoplayer VRML plug-in for Netscape Navigator and JavaScript for the front end. I wrote a great deal of PERL scripts, to parse the obtained HTML document with search results, to create a tree structure from it and pass it to the Perl VRML module for generation of a VRML file.