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.

Spectrum MonitoringCustom Application Suite

This suite actually consists of over half a dozen applications that control a selection of radio frequency test instruments (including Rohde & Schwarz test receivers, Hewlett-Packard and Advantest spectrum analyzers, ICOM professional receivers, and other devices) over GP-IB and serial interfaces. The suite's client-server model allows users to connect and utilize instruments that are deployed at remote locations. Incorporating an adaptive rate algorithm, the suite makes it possible to control instruments while simultaneously receiving compressed digital audio even over a narrowband dial-up connection. A scheduling module allows the user to configure unattended measurement and voice recording sessions.

odp.jpgResearch Application

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.

NORTEC.EXECustom Application Suite

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.

MaximaComputer Algebra System

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.

EDGE.EXECustom Application

The problem is simple to state but difficult to solve. Given an annotated map of a city district and a database containing records that describe letter carrier routes, color the map to show a letter carrier's area. Complicating the problem is that a street has two sides, which may be served by separate carriers. The algorithm that I developed correctly colors complex maps, and it completes the coloring of even the largest map in a matter of minutes.

Pocket TELNETCommercial Application

Pocket TELNET is a TELNET utility I wrote for my recently acquired HP Jornada 720. It incorporates the same features that are found in the standard TELNET program in Windows 95/98/ME/NT/2000, and it supports ANSI color and Web browser integration. A demo version is available for download, and a registration key can be purchased on-line for $14.95.

RES-ReachCommercial Application

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.

erof800.jpgHardware Driver

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.

RSKEY.ORGNon-profit Web Site

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,, has since become a popular Internet resource among calculator and mathematics enthusiasts.

WEducational Application

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.

Viktor's Amazing 4-bit ProcessorHardware Construction

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.

marsmap.gifWeb Application

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.DInteractive Multi-user Application

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 since early 2000.

Gamma(z)Research Application

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.

ntms_thumb.gifCustom Application Suite

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.


Project Plan

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.

Save Me Brave Knight!Commercial Computer Games

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.

tu154.jpgNumerical simulation

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.