The articles listed here deal with subjects of interest to ourselves, to our clients, and to the software engineering community. The topics dealt with in these articles have been the focus of much of our work, and about which we have acquired a great deal of practical experience.

Artificial Intelligence

Artificial Intelligence (AI) is a branch of computer science that concerns itself with finding ways to make computers behave intelligently. Within this subject domain, there are sub branches whose attention is focused on some specific aspect of machine intelligence, such as symbolic reasoning, natural language processing, theorem proving, et cetera. In these articles we focus on one of the more promising aspects of artificial intelligence, the one that has been very successful in building programs capable of performing tasks once reserved for human experts.

Computer Encoding and Encryption

The schemes used to represent symbols within computer memory were once very simple, but limited in the number of symbols that could be represented. Those simple schemes are still used in revised forms. However, we now also have others that are much more complex, but that make it possible for us to represent an almost limitless number of language symbols. The need for protecting information may be as old as man. Encrypting information to protect it from prying eyes has now become a science (cryptography). These articles deal with the public, and also the very private, coding and decoding of information.

Flight and Flight Simulation

Our aim in writing this collection of articles was to derive a sophisticated and general mathematical model of aircraft dynamics capable of predicting aircraft state from motion sensor inputs, and that could also be used to compute the steering and throttle commands for guiding the aircraft along a desired track at some specified speed.

Translator Design and Construction

The application of the theory of finite and pushdown automata has made solutions to a large class of problems especially easy. Examples of systems which can be modeled as either finite automata or as pushdown automata are frequently encountered in the real world, and computer programs which mimic their behavior can be generated automatically from rather simple specifications (i.e., grammars). This collection of articles deals with several important aspects of building translators (e.g., compilers, interpreters, command language processors, web browsers, search engines, et cetera).


The popularity of relational databases is probably due to ease with which the query languages can be used to express complex operations on these databases. There popularity may be due also, in part, because of the success of powerful database management systems (e.g., Oracle and Sybase) that were implementation of the relational

Software Engineering

The goal of software engineering is to make the production of program logic as reliable and predictable as the construction of an airplane or a computer chip. In spite of real advances in computer science and software engineering, software development today relies too much on artistry, and too little on sound engineering practice. The difficulty of introducing sound engineering method into development organizations is compounded by hawkers who claim the ultimate engineering tool or method has been discovered, and by those that believe them. These supposedly magical software engineering innovations are mostly warmed-over versions of yesterday's hot item. Here we present some concepts we believe have value, lasting value.


Many of the problems software developers attempt to solve, using their own improvised approaches, already have solutions. It is painful to watch programmers waste valuable time and money reinventing solutions needlessly. It may be the artistic tendency of programmers to create something they can call their very own that drives them to ignore the valuable contributions of others. Or, maybe, they just don't realize that there are treasure chests full of time-tested algorithms in the published literature, available for the taking. The articles in this category describe just a few of the many treasures available.

Numerical Methods

Numerical methods is concerned with the practical solution of problems in the sciences and in the engineering disciplines. Solutions to many complex problems are difficult or impossible without applying approximation techniques requiring the use of computers.

Computer Graphics

The mathematics of scaling, coordinate system translation and rotation, and the projection of 3-dimensional objects onto a 2-dimensional plane are fundamentally important to the design and construction of computer graphics applications. Articles within this set describe the mathematical basis for these operations and explain how they are implemented in program logic.

Views and Opinions

Experience slowly teaches us what works and what doesn't. With time we become aware of certain inconvenient truths that force us to revise our views of programmers and of programming. The cost of creating and managing program logic coupled with our rapidly increasing dependence upon software, compels us to think carefully about how we produce it.