This is a portfolio of my notable projects. These are projects on which I was the principal architect and developer, or key team member. This list is far from complete; only projects that are remarkable either due to their size and complexity, or due to their unique nature, are presented here. Of course, not all my projects are large; I have completed many small assignments to the satisfaction of my clients.
Custom software development
For years, I have been collaborating with IceFire, best known for their flagship product PointFire that helps users of Microsoft SharePoint manage multilingual document holdings. I developed many of the technologies behind TradsMan, a PointFire extension that automates the submission of documents for (machine or manual) translation. I also developed key technologies used in two other products, PointFire 365 and the upcoming PointFire Translator.
Management consulting, custom software development
In 2012, I was invited to assist Tatweer, an Abu Dhabi traffic engineering and management company, in their effort to design and implement the computer architecture of a new Smart Traffic Center, under construction at the headquarters of Abu Dhabi Police. Over the course of the next three years, I helped Tatweer formulate a Information Technology Master Plan, and I also provided assistance during the tendering process, proposal evaluation, and vendor selection.
I also developed the specifications, and ultimately the code, for an automated patrol car allocation module, which utilized a heuristic optimization algorithm to serve both as a planning tool and as a real-time tool aiding patrol car dispatchers.
I designed, developed, and continue to maintain a multifunction client-server application suite designed to facilitate interactive and scheduled monitoring of the airwaves. The suite runs on a Windows host and controls physical instruments via a variety of communication protocols including GP-IB, serial and Ethernet connections.
As part of my research of the Pioneer Anomaly, I developed a precision orbit determination program that can be used to confirm the anomalous acceleration. The program performs high accuracy numerical integration of the relativistic equations of motion, with solar system data and ground station data obtained from JPL. Nongravitational forces such as solar pressure are also accounted for. The program calculates effects on signal propagation due to gravity (including the Shapiro delay), the solar plasma, and the terrestrial atmosphere. The code calculates the Doppler frequency shift of the received signal; orbital parameters are adjusted to minimize the difference between calculated and observed Doppler data. A unique feature is the program's ability to incorporate a dynamical model of on-board generated forces due to heat radiation, computed from telemetry data. As part of the same research effort, I also developed a ray tracing code that computes the thermal emissions of the spacecraft in various spatial directions.
This application suite integrates two areas of functionality: a multimedia product catalog and an engineering design application. The product catalog provides salespeople with a portable version of the company's entire product database and includes product images, rich text product descriptions, technical specifications, and engineering drawings. The engineering design application provides a sophisticated design model that allows salespeople to configure an industrial humidification solution and generate a product selection and price offering matching the client's needs.
For the last several years, I've been a member of the Maxima development team, concentrating my efforts on maintaining and improving Maxima's tensor algebra capabilities. Maxima is one of the oldest computer algebra systems in existence, its origins dating back to the 1960s. Its tensor algebra packages were originally developed in the 1970s and early 1980s, but they have fallen into disuse. I've revived these packages and also made many improvements; as a result, the packages can now deal with relatively complicated research problems that involve, for instance, the use of nonsymmetric metrics or field equations derived from a relativistic Lagrangian.
This project, representing one of the few instances when I worked for a uniformed branch of government, was about the development of a sizable (by the standards of the day) records and document management system, for National Defence. I joined the project in the early stages and helped develop its analysis of requirements, statement of work, and tender documents.
There are many ways to integrate database records with your Web site dynamically, but few were portable across Web servers. RES-Reach was one such solution. Utilizing ODBC and providing a standards-compliant extension to HTML, RES-Reach enables you to create dynamic Web content without locking in your application with a specific server (or database) vendor. The specifications for RES-Reach were developed by RES International; I wrote a robust 32-bit implementation for the Windows server platform.
In the mid-1990s, I worked as a consultant for Bell Canada on several occasions. I also participated in the conceptual development of a network testing and management system (NTMS). While NTMS never got beyond a non-functioning prototype stage, I did end up building a client-server test suite that automated telecommunication circuit testing. To the best of my knowledge, this software was still in use nearly 15 years later.
This was the first project in my career that involved the re-development of a COBOL based legacy system using modern (well, by the standards of the day) tools. The client, the Canadian Payments Association, is the agency responsible for clearing and settlement between Canadian financial institutions. That alone made the project interesting. As my then business partner and I considered this the flagship project for our fledgling consulting company, we invested a great deal of effort to develop a top notch study. Once we were done, I lost track of the project and client, so I don't know if they were able to put our study to good use. I certainly hope that that was the case. In any case, the Financial Institutions File, an electronic directory that is used for the routing of payments, survives to this day as an important product/service of the Canadian Payment Association.
In 1988, the Canadian Patent Office was still in the planning stages of automating its operations. I was one of the four authors of the CPO's Automation Master Plan, submitted in March 1988, which was presented to form "the basis for a decision of the Government of Canada to commit resources to continuing a broad program of upgrading the strength of the Patent Office through automation, and presents a plan to achieve the objectives considered as essential with minimum technical and financial risk during an eight-year project period". In this study, we established the scope, duration, magnitude, and overall cost of the automation project, identified particular technological challenges (such as optical character recognition, the ability to manage terabyte-scale data holdings using late 1980s era technology, issues of availability and network congestion, and data security. The team of which I was a member also advised foreign patent offices in subsequent years: I personally visited the patent offices in Mexico City, Beijing, Taipei and Budapest, as well as the WIPO in Geneva.
While I was doing research for my book on Rubik's Cube (published in Budapest in 1980), I was given the opportunity to use the Control Data 3300 mainframe computer of the Computer and Automation Research Institute of Hungary's Academy of Sciences. Here, I met an engineer from Hungary's aviation authority, and soon I had a contract in my hands: I was to simulate the take-off of TU-154 aircraft at Budapest airport. The goal was to tabulate allowable take-off weights given the length of the runway at Budapest airport and varying weather conditions. The requirement was that even in the case of an engine failure (resulting in reduced thrust as well as reduced reverse thrust for braking) the airplane must be able either to take off or come to a full stop safely. Under a follow-up contract, I attempted to simulate the dissipation of carbon monoxide, produced by regular daily aviation traffic, in the volume of air surrounding the airport. I implemented this latter project in Simula-67; as such, this was my first encounter with an object-oriented programming language.
After the Great Blackout on August 14 2003, as we were threatened with rolling blackouts, I decided I needed a UPS to keep my server healthy. I had to buy one hastily, so I bought the first I found, which was an Energizer model, the ER-OF800. Unfortunately, it came without Linux drivers, and I found that it had a rather unusual, non-standard USB interface. It took a bit of an effort but I eventually managed to understand how the interface worked. I first developed a stand-alone driver/monitor program for the unit, but then I used my code to implement a driver for these models for NUT, the Network UPS Tools software suite.
The first time I ever handled a programmable number-crunching device, it was a programmable pocket calculator that I was permitted to touch. It was a case of love at first sight. I always remained fond of these machines and a few years ago, started what might be described as a professional collection of vintage portable programmable calculators. The site, http://www.rskey.org/, has since become a popular Internet resource among calculator and mathematics enthusiasts.
What kind of a programmer is the one who doesn't know how a compiler works? Well, I always pretended that I knew how compilers work, but in 2001, I actually wrote one on my own. Inspired by the power and convenience of an MS-DOS based pocket computer, I decided to create a simple programming language that could be used on this device. The language also served as a test platform for some concepts that I wanted to study, such as the utility of a keyword-less and typeless C-like procedural language.
Beware of programmers who carry screwdrivers! Or soldering irons. Experimenting with electronics is a hobby I rediscovered in the late 1990s. By far my most complex project was the design and construction of a 4-bit processor using low-level logic circuits. Although this machine has little practical utility, it serves as a useful educational tool due, in part, to its relative simplicity. Yet despite its simple design, the processor demonstrates many key concepts, including the use of microcode, a two-phase clock for controlling the processor's components, and even a primitive form of instruction pipelining.
I once saw an altitude map of Mars, generated using data from MOLA, the Mars Observer Laser Altimeter instrument on board (where else?) NASA's Mars Observer spacecraft. When I saw this map, an idea was born: why not make this map interactive and let our imagination soar? The result is The Seas of Mars, a Java-based Web application that uses real MOLA data and lets you interactively set the sea level for Mars. I wonder if one day there will be proud ships sailing that vast Northern Ocean...
M.U.D is, of course, the acronym for the world's first multiplayer computer game: Multi-User Dungeon. Developed in the late 1970s at Essex University, England, it remained very popular throughout the years. At CompuServe, it had a loyal following until the end of 1999, when their version of the game was taken off-line due to alleged Y2K incompatibilities. The original game code requires an obsolete operating environment to run. However, in what MUD's author described as a "marathon programming binge" (over 14,000 lines of C++ code in less than two weeks), I created a modern implementation that faithfully reproduces the original game (including most of its charming bugs.) This version has been running at http://www.british-legends.com/ since early 2000.
My first ever programmable calculator was deficient: it lacked an implementation of the so-called Gamma function. I quickly embarked on a quest to correct this deficiency and build a quality implementation of the Gamma function that would fit into this tiny calculator's 72 program steps. Little did I know that my quest will last more than two decades; only recently did I finally learn about a computational method that allows one to calculate the Gamma function to an arbitrary precision. I created an implementation of this algorithm in C++, using a publicly available multiple-precision program library, GMP and my own C++ wrapper classes for GMP's floating point functions.
Beginning in 1982, a number of small groups of programmers in Hungary began to develop commercial computer games. Ours was one of the first such groups, calling ourselves F°451 (based on Ray Bradbury's immortal story); we developed several titles in 1982-83 for Commodore.