I am a computer programmer. Recently, I have been working as a contract programmer, which seems to suit both me and my customers. I enjoy building new systems, rather more than fixing old ones. I believe in good definition, forethought, and carefulness.
For many of the projects mentioned here, I used C or C++. But I have also used Java, Pascal, and miscellaneous mini-languages. (various assemblers, AWK and Perl, shell scripts, etc.) And of course, I use good ol' English for specifications and designs.
BigBangwidth is building optical communications equipment, for use in optical Local-area networks. (And perhaps other networks, someday.) I'm helping to architect the system software.
Pulmonox is building a nitric-oxide gas delivery device for hospital patients. I wrote the firmware for the touch-screen panel and chemical sensors' microcontroller.
Z. I. makes and sells gas-well monitoring devices. Beforehand, these communicated with home base, through line-of-sight cellular towers. My satellite-communication firmware allowed remote placement of the devices.
At TCP, I wrote mathematical software for a ``CAM editor'' product. The editor let a user define the motion of an electronic cam, while keeping speed and acceleration under control.
Neuromotion made (not ``makes,'' alas) neural stimulators for disabled people. My main contribution to their product line was the firmware.
The company's first product was the WalkAide. That helped a person walk, who could move his legs normally, but not an ankle. (Thus his foot would drag along the ground.) The WalkAide, after suitable configuration, monitored the person's stride by means of an accelerometer; recognized the current point in the stride cycle; and zapped a nerve to lift the foot at the right time.
Well, that's the main function of the firmware. There were other bells and whistles: it communicated with an external system, over an IR port; it performed self-diagnostics, and flashed when something looked wrong; it monitored and obeyed the manual controls.
My firmware was actually a replacement of an earlier version. It was an improvement, I'm told, in a few ways:
The company's second product would have been the Glove, a stimulator which helped a suitably disabled person to clench his fingers and release them. After the WalkAide, I was invited back to do the Glove firmware. The project was quite similar. Alas, misfortune compelled the company to cancel the Glove product, and not very long before it would have been finished (snif).
The WalkAide firmware was not my first project at Neuromotion. Before then, I designed the protocol which was ultimately used by the WalkAide, and implemented the Apple-Newton end of it. The WalkAide's stimulation-timing algorithm was poorly specified: I wrote a proper specification. And I built some reporting software for the Newton, part of the company's WalkAide-setup software.
I had been an employee at MRC, and continued with MCT after the collapse of the former. Much later, I became a contract programmer, and of course, found contracts with my friends at MCT. The projects were understandably technical in nature...
I researched and implemented seismic processing algorithms,
under the direction of a seismologist.
We endeavoured to show that ``three-dimensional depth migration'' was
possible, and possible even with Myrias' software.
(It was, but no-one cared.
This was so long ago, I hardly remember what the terms mean.
Displaying the resulting image (by cross-sections) was easy: in those days we Myrioids were quite familiar with X-windows, and did the ``imaging software'' in sleep.
I built a very fast Fourier transform code generator. The user specifies the vector-size, floating-point size, real or complex input, forward or inverse transform: out pops a highly optimized FFT routine. The guys at CNSR were impressed.
I tested and benchmarked a parallel computer, investigated performance bottlenecks; maintained compilers and the operating system. This was considered ordinary work, for Myrias programmers.
I revised and rewrote some user manuals. (Am I the only guy who can do this?)
Long after that, I had two contracts at MCT.
For the first, I added a memory-mapping facility to the operating
This was rather like Unix
mmap, having a similar
interface and semantics, but made parallel for the Myrias system.
(A popular Fortran run-time library needed it.)
For the second contract, I built a parallel debugger. It was built on top of a Unix debugger. A pseudo-tty between the user and the Unix part intercepted commands, passed along those which could be performed by the Unix part, and my debugger did what was needed for the parallel-program commands. This entailed a bit of work within the Myrias OS: starting and stopping Pardo tasks at the user's behest, and the like.
Shana makes forms software: software which can replace your cumbersome paper avalanche with an elegant electronic system. Their original product was for the Macintosh, but dismayingly, Windows PCs came to predominate. I helped them port their product. That's all.
I ventured to Winnipeg, shortly after the collapse of Myrias Research. Ubitrex was making ``point-of-care'' systems for hospitals. Interestingly, they were doing the software in C++, which was a fairly modern thing to do, just then. That job gave me an opportunity to study the C++ programming language and OO concepts.
The programmers there were young, adventurous, ambitious, and a delight to work with. They were also under terrific pressure from management, and pressure works well on the young. Good process is the first thing to fall away, if it even gets started.
A few of us became champions, promoting proper software development processes, establishing coding standards and code review policies. I edited the coding standard document, and wrote a ``canonical'' design document. But then the company was sold, and the development site moved far, far away.
Among testing and debugging activities, my main project was an ordinary reporting subsystem. But this time, my analysis, design, and implementation were models to behold. After all, young careers were beholding.
It was the strangest thing: a company on the north edge of civilization, not only building a new computer, but a new kind of computer: a massively-parallel computer.
Myrias built it from the ground up. The hardware and programming model were original. They needed a custom operating system, custom program-development tools, and application-software tailored to the Myrias system. Yes, they needed a lot of inventive programmers: I was one such.
I began with an entry-level job, in the Applications group. Here I could apply my mathematical talent: I built a transcendental function library. And I wrote some applications and some test software.
Soon, I was promoted to the Operating Systems group. First, we built the prototype Kernel (the core of the OS). For that, I wrote the first task distribution and scheduling system. I implemented half of the distributed paging system, and invented algorithms to improve its scalability and performance. I did some work on deadlock avoidance algorithms. Ultimately, the prototype Kernel progressed into the real Kernel, as we made improvements throughout, affecting both performance and robustness.
The rest of the company needed to be kept informed. I developed a nomenclature for tasks and pages within the Myrias programming model, and gave seminars on our parallel algorithms and distributed data structures. And as always, I wrote manuals. (You should have seen the size of the patent application! My contribution was but a tiny part of it.)
After a few years, I seized an opportunity to diversify, and joined the Compilers group. This proved to be a sideline, but an interesting one. I ported and tuned scientific libraries for use on the Myrias system. I specified user interfaces for source-level debugger and profiler, and implemented the latter.
Myrias Research Corporation crashed before the debugger really got started. It was a while until the successor picked up that particular piece.
Back then, Telus was called AGT.
For the most part, I was a computer operator. (Had I been a programmer in title, I would have used COBOL. Exclusively. I might never have recovered.) We ran two state-of-the-art IBM/370 MVS/JES3 systems.
After a while, I started to do some programming.
I designed and implemented small systems for resource management
and system performance measurement, and did some maintenance
And as new 1970's technologies were introduced to the workplace,
I kept abreast, and provided TSO/SPF, and RACF training for new
I even taught some JCL. Am I still unforgiven?
It wasn't long before I realized that I should get a degree. AGT was especially helpful, hiring me back each summer. (I rather enjoyed filling out that job application, on company time, during a hiring-freeze. Apparently, someone thought I was handy.)
For the sake of completeness, my first job: a mail clerk. I filled stationery orders for grain elevator operators. It got me started.
obtained a BSc in Computing Science and Mathematics at the
University of Alberta, Edmonton.
One extra-curricular activity stands out: our team of four achieved third place in the 1984 ACM international programming contest, in Philadelphia. We saw the Liberty Bell, too.
studied computer programming at Herzing Institutes, Winnipeg.
This is a trade school, almost equivalent to NAIT. Some of us students started a school newspaper. It wasn't much, but it was fun.
completed high school at Concordia College, Edmonton.
I tried my luck in the 1975 Canadian Math Olympiad. Tied for fourth.