History
Wingpath was formed in 1987. We had previously been engaged in academic research in artificial intelligence, and this had given us considerable experience of problem analysis and advanced computing techniques. We wanted to apply this experience to real problems, and many (alas, not all!) of the projects we have undertaken proved challenging enough to satisfy this desire. The following selection of projects is a fairly representative mix:
-
Embedded compiler/interpreter for Basic programming language.Typical application of yacc/lex to generate a parser from the language grammar, and an object-oriented implementation of the interpreter for this archaic language!
-
Enhanced and customized versions of an oil and gas flow measurement system.Many processes distributed over several machines, with lots of TCP/IP to glue it together and redundancy to withstand hardware failures.
-
Modular system for routing print jobs to multiple printers.Another distributed system using TCP/IP and an extension of the LPR/LPD protocol to route print jobs, using standby printers in case of failure.
-
Library to support interfacing to flow computers and similar devices using Modbus and Modbus/TCP protocols.There's more about Modbus here.
-
Chronological database for storing historical financial price data.The challenge here was to compress huge sequences of mainly numerical data, whilst keeping it quickly accessible. Using an innovative variant of B-trees, we were able to compress the indexes using the same method that we used to compress the data!
-
Real-time financial data system extracting price data from multiple feeds, processing it, and outputting to several feeds.Yet another multiple-process TCP/IP based system, but with various serial communications protocols to handle too.
-
Document management system incorporating scanning, editing, OCR, indexing, retrieval and printing of images.Mainly consisted of modifying and gluing together various pieces of third-party software. The compression/decompression involved in handling different image file formats provided some interest.
-
Software to analyze floor tiling plans and produce cutting lists.Use of shape matching and combinatorial search to minimize material wastage when cutting the tiles.
-
Real-time executive for use in embedded systems.A multi-threaded system using message-passing for communication, and a pre-emptive time-slicing scheduler.
-
Locking system to enable Unix kernel to run on multiple processors.Analysis of the kind of locks needed to break up an originally monolithic kernel, and provision of automated tools to check the consistency and completeness of the locks inserted by programmers.
-
Enhancements to embedded SCSI disk controller software.Additions such as disk mirroring, support for tapes, and disconnect/reselect logic. Also re-wrote the associated Unix device driver.
-
Porting of Xenix (a Unix variant) to new hardware.More low-level kernel work.
-
Font-independent text reading (OCR) system.Application of AI image interpretation techniques to recognize characters in poor quality images.
-
Device driver for serial I/O card.Yet more low-level Unix kernel work.
-
Program that generates optimal layouts of printing plates for label printing.This deals with a variant of the 2D packing problem, where smaller rectangles have to be packed into a larger rectangle in a way that minimizes material wastage, and allows the paper to be cut with a guillotine. Our solution uses a sophisticated search algorithm, which quickly produces a first layout and then progressively generates more efficient layouts. It is guaranteed to find an optimal packing, given sufficient time.
-
Program to produce optimal piecewise-linear approximations for use in non-linear amplifiers.A satisfying application of AI search techniques to a problem in numerical mathematics.
-
Compiler and run-time environment for the AI programming language POP2.A venerable interactive language with a run-time environment that included a garbage-collector and the compiler itself. Our compiler implementation used a parser hand-crafted in POP2, and generated machine code.