tatanka.com home > software
Computers and things related have been my vocation for over forty years. Most of my projects have entailed designing and developing software, but I've been fortunate to work close to the hardware a lot of the time. It has been almost a continuum from real-time and embedded systems to operating systems to networking, often with an emphasis on security. My work has gone into aircraft, factories, machines, tools, peripherals, consumer electronics, instrumentation, telephones, radios, and automobiles. I've helped make chips, and the machines that make the chips.
Sometimes I would get a proper specification for a job, but at other times all I'd get was a schematic or some handwritten notes, or maybe just the manuals for the other components. Sometimes, all there was to work with was a set of blueprints, or equations or control charts with expressions written in s-space or z-space. In the beginning, UML hadn't yet been invented, never mind SysML, but even after it was, most the systems guys don't think in those terms, and they're inadequate for complex systems, especially for those with analog aspects. Sometimes they'd just draw out a circuit diagram, and say, “I want a program that does what this circuit would do.” So sometimes, I'd have to draw my own schematics, hand it back to them, and tell them I needed a few changes to the system, adding an op amp here or an A/D converter there.
Along the way, I often had to develop tools where there were none. I wrote compilers and debuggers and network traffic analyzers, and even whole operating systems, when unable to find what was needed for the job. There was some porting, too, it being at times easier to re-code existing software or operating systems than to create a new one from scratch. A few times I had to create code for CPUs or other hardware, before the hardware existed: the team designing the hardware was working in parallel with the software developers. We had programs, but we didn't yet have a computer.
Times have changed. Even popular news occasionally notes that the cell phones of today are more powerful than the giant mainframes of yesteryear, that networking is a billion times faster, and so on. But they don't much talk about what has happened with software development. Forty years ago, we were building almost from scratch. Now, we're using billions of lines of library code and incredibly complex operating systems and programming languages which are astounding developments in their own rights. It's true that we're now creating applications barely imaginable only two generations ago, but that's missing the point that we're working with tools, with raw materials, and with knowledge that didn't exist back then, either.
This change in the way we work has both good and bad consequences. The best part is that we can build things we couldn't build previously, with less cost than it once took for simpler systems. But there are several adverse results, as well. Perhaps the worst part is that it's harder to think outside the box, when you're not building your own boxes. And there is also a sinister side to this, in the way businesses and projects work: companies hire “skill sets” as much as they hire people. The development environment has become less human, as the developers are more often viewed as tools with certain characteristics, rather than as people. Creativity is stifled, and the products look more and more alike. Not every project requires software innovation: the world isn't always about computers. But, when it does and is, you're not going to be differentiated from others when you're using the same components, and hence the same constraints, as your competitors.
For almost all of my career — which is now almost all of my life — I've worked on projects, on efforts more or less operated for the purpose of creating specific end results (though perhaps only vaguely understood or defined), rather than, for example, as a manager of some portion of an enterprise. Someone else can act as a shepherd for enterprise resources; I'd rather build products or investigate problems or challenges. A “project” need not involve a product: fixing a bug can be a project.
I'm currently working for Ulterior Logic, a company I helped start to act as an umbrella for some of my projects. Go there to see some of the things we're working on. (I'm sometimes farmed out to third parties; if you're interested in having me work on a project, then let me or Ulterior Logic know.)
Although I enjoy mathematics, I don't get to use it often enough on the job. Fortunately, one of my Ulterior Logic projects is coyotemath, a math problem solving tool which has forced me to brush up on topics in mathematics I haven't touched in years. It's a fun project.
I've kept some active projects to myself, however. Among these are:
cl-manpages: Man pages, in troff and in html, for Common Lisp, for the language itself and for some useful Common Lisp packages. ⇒ More information...
oloman, a set of scripts to convert OpenOffice and LibreOffice documents into troff for *nix manpages. It's done with styles: the scripts recognize certain styles and convert the styled text appropriately. ⇒ More information...
htdex, a program to locate all of the html files in specified directories, and then to build an index page. The idea is to find the html documentation for software packages, which has no standard organization. Where is the documentation for X? This, I hope, will make that easier to locate.
Moved, Inactive, and Retired Projects
These projects have moved to Ulterior Logic. The pages here haven't been updated in years:
sysjinn: A family of tools to assist with routine and tedious coding tasks. ⇒ More information...
Cats: A pre-compiler for embedding some specialized syntax and data types into standard C programs. The pre-compiler converts the embedded code into standard C, so it goes through an ordinary C compiler. Extensions include some syntax and types from Perl (such as regular expressions), CORBA (object oriented methods and types), and LISP. ⇒ More information...
sugar: Manages connections to internet service providers (ISPs). Functions include bandwidth control and connection throttling, management of individual user or machine connections, accounting, and limited firewall services. ⇒ More information...
The following have seen no active work for years. I'm not sure whether to remove them from this page, because I might revive them at some point, and they still get light traffic.
two cans voice encryption: permits encrypted conversations between telephone users, over the voice channel on a POTS phone (using a PC) or cell phone (smart phone); does not require the internet. ⇒ More information...
CORBA tools: ORBs, an IDL compiler, and some related applications and programs. ⇒ More information...
navajo: Unicode processing library for C/C++. ⇒ More information...
ad hoc solutions: Various impromptu, ad hoc programs written to solve specific problems. ⇒ More information...
miscellanea: Items not fitting into any of the above categories. ⇒ More information...
Copyright 2018 Michael Marking. All Rights Reserved.