Tick times: Windows GetTickCount() and Linux times()

In ancient days, when assembly language programmers roamed the earth, we were advised to stop using timing loops in our programs — do-nothing waste-time loops like

    ;WAIT A MILLISECONDS.
    MSA: PUSH BC
    MSA10: LD B,95
    MSA20: NOP ;4
    NOP ;4
    DJNZ MSA20 ;13.
    DEC A
    JR NZ,MSA10
    POP BC
    RET

These were bad bad bad, because whenever the program moved to a different computer, all the timings would be wrong — your Kaypro and your Osborne (prehistoric CP/M machines) would play different! ... But in those dark days, we didn’t actually have any way to fix this1. ... When we graduated to the wonderful new MSDOS world, IBM-compatible PCs had a timer interrupt, and with some fairly hairy programming one could derive useful timing functions. ... Things toddled-along nicely until Windows95 and Win32, whereupon Microsoft introduced GetTickCount(), and all was made anew.

GetTickCount()

The Win32 GetTickCount() function returns a 32-bit unsigned number representing the number of milliseconds since the machine was turned-on. It isn’t necessarily accurate to the millisecond, but that’s never been a requirement in our innocent endeavors. ... As for using it, when I googled for GetTickCount() recently, the first thing I found was a Microsoft page with this example:

    DWORD dwStart = GetTickCount();

    // Stop if this has taken too long
    if( GetTickCount() - dwStart >= TIMELIMIT )
    Cancel();

So What Happens When You Run Out of Ticks?

1. Well, that’ll never happen! ... At least it certainly never happened in the fledgling years of GetTickCount(), since the ticks last for 49.7 days — and nobody had PCs that stayed-up 50 hours, much less 50 days....

2. Ok, stupid answer. ... Here’s a better one: if you follow the style shown in the example, your timing will survive the 50 day limit with impunity. ... Amazing, eh? How does that work? ... Well I think we’ve reached the appropriate point in the discussion for an incomprehensible chart. ...

Maximum Time

Maximum Count

Next Count After Maximum Count

Windows GetTickCount()

49.7 days

4,294,967,295 (FFFF.FFFF hex)

0

Linux times()

can vary; usually 497 days?

4,294,967,295 (FFFF.FFFF hex)

0?


Assembly Language Programmers Versus Everyone Else

I started thinking about all this after reading Jack W. Crenshaw’s Embedded Systems Programming column, 6/05, page 11, where he related mysterious failures associated with Windows CE and the magic 49.7 day interval, noting that he had been blogged by two Microsofties who pooh-poohed such reports. ... And I must opine, I think the softies are almost certainly right; the reason these systems fail is probably because naive programmers wrote code like

    DWORD dwStart = GetTickCount();

    // Stop if this has taken too long
    if( GetTickCount() > (dwStart + TIMELIMIT) )
    //BAD BAD example
    Cancel();

which can indeed fail after 49.7 days (although to make it worse, you could pass the 49.7 day boundary without error, depending on random factors). ... I suspect the reason these programmers don’t or won’t follow the simple example above is because they think it’s gobbledygook — how can it make a difference how you form the expression, they wonder, how can it make a difference whether you use addition or subtraction? ... The basic problem is these naive programmers don’t know — or believe — that ...

4,294,967,295
+ 1
0

... or, to put it another way, they don’t understand “2s complement arithmetic” — which is how integer arithmetic works down there in the real computer (well, in most of our real computers; 2s complement, like everything, was young and new once) — which is the kind of thing all us assembly language programmers are born knowing. ... Maybe this makes more sense (less?) in hex

FFFF,FFFF
+ 1
0

— the idea being that if you increment a 32-bit register containing FFFF,FFFF the result is 0. This leads to all the additional 2s complement magic like

3
- 4,294,967,295
4

and so much more — that’s what the computers are really doing down there!2

Linux times()

This informative diatribe used to be known as “GetTickCount() versus Linux times(): The Rollover Smackdown!” because http://www.die.net/doc/linux/man/man2/times.2.html (among others) says of the Linux times() function

RETURN VALUE

The function times returns the number of clock ticks that have elapsed since an arbitrary point in the past. For Linux this point is the moment the system was booted. This return value may overflow the possible range of type clock_t. On error, (clock_t) -1 is returned, and errno is set appropriately.

and I foolishly believed that the last two sentences — about “overflow” and “-1 is returned” — were connected — and the times() function was essentially broken after 497 days or less. ... Then, at the instigation in an email from one of the very few people who have actually seen this site and doubtless wishes to remain anonymous and unassociated with my diversions, it’s occurred to me that I was probably wrong.

... My guess now, recollected in tranquility, is the Linux times() function probably never returns -1 for an error; that was just a fairly obvious effort to obfuscate things, probably thrown-in years ago by some well-meaning type who thought it might want to do that, perhaps, someday, and people should be warned....

And indeed I was warned; and concluded, probably erroneously, that the obvious error it was talking about was the overflow mentioned in the previous sentence.3

But I’m going to change my world-famous OwenShow so it assumes times() never returns a -1 error, because that now seems most likely to me, and because it concerns something that’ll happen in 497 days and I just don’t care.5 ... Which, of course, is at least partly why the Linux so-called documentation was so free and easy about it — because, for goodness sakes, that’ll never happen!

Not As I Do

I couldn’t decently advise you to go and do likewise; and this is a classic demonstration of what’s wrong with bad documentation. ... My guess is times() works, and never returns -1 (except of course when that’s the tick count); but any program that assumes that could, some bright shiny morning, be wrong! ... Someone somewhere may rewrite the function and, reading some version of the documentation, assume that times() should return -1; maybe early and often!

... So you might start programming defensively by clearing errno before each times() call, and discarding the result if it’s -1 and errno isn’t zero. ... But what if our industrious rewriter concludes that times() should continue returning -1 if an error condition persists? Which, presumably, it would, if any of the counts overflow; that is, he would want to make sure the caller did not act on an erroneous timer value, and so he returns -1....

I hope he doesn’t do that; I’m guessing times() doesn’t do that now. If Linux were actually documented, on the other hand, we’d know under what conditions times() was supposed to return -1 or — preferably — that times() never returned -1. ... But instead, the function might return -1, for any reason whatever, according to the existing description.

But what the heck.... It’ll only happen after 497 days (which I typoed throughout the “smackdown” version of this diatribe as 479!).

Linux clock()

And then there is a Linux library function clock(), of which http://www.die.net/doc/linux/man/man3/clock.3.html says

The clock() function returns an approximation of processor time used by the program. ... If the processor time used is not available or its value cannot be represented, the function returns the value (clock_t)-1.

which pretty-much guarantees the return value can be -1 on odd-numbered Tuesdays — and no nonsense about errno! ... Since the clock() and times() functions are sort-of in the same bailiwick, I take this as an argument against my recently new-found faith in the times() function’s likely behavior. On the other hand, the same document carefully notes “the time can wrap around”. ... My guess is clock() never returns -1 either, but its story is more ambiguously wrong, compared to times(). ... (Incidentally, blame not www.die.net; they present the documentation in a handy format, but the same stuff appears at many places on the web with practically the same words.)

And it’s all just guessology — also known as the Linux documentation science! ...

Source as Documentation

Well really what the Linuxoids think is that real programmers’ll go to the source to find-out how things work; that is, the source is the documentation. ... This is one of those extremely stupid ideas that demonstrate that even really smart people like kernel hackers can be idiots. ... (Indeed later I got hold of the source and couldn’t find the times function — in the standard OwenLabs several-hours stupid documentation maximum allowed period.)

Mea Culpa4

I mustn’t leave this topic without noting that after reading the Crenshaw column, I vaguely recalled I had been bad somehow on this — and checked into my very own OwenShow: the sin I found there was not, of course, misusing GetTickCount(). ... No, since there’s no GetTickCount() in Linux, I used DateTimeToTimeStamp(now), a Delphi thing that supplies the current date/time with a high degree of (apparent) precision in Windows or Linux.

Unfortunately, I used it wrong. ... But whatever, it’s a bad solution no matter how I used it: instead of waiting for 49.7 days or 497 days to exhibit my incompetence, OwenShow could’ve hiccuped whenever the user set the date/time! ... And this is no idle menace; judging by some kernelish chit-chat on the web, some guy’s Linux MP3 player was unhappy because of this situation! ... So I “fixed” the next version of OwenShow by using GetTickCount() in Windows and times() in Linux — correctly, or at least as correctly as I know how, so it’ll never fail....

— Monday, April 24, 2006 10:09 am

__________________
NOTES

1. Actually I recall using a spare UART to ingeniously provide timing; you’d set it up just right, send a meaningless character, and check for TXEMPTY. To be sure, this was hardly portable either.

2. Floating point numbers are handled with entirely different mechanisms. ... I should also note that this undoubtedly makes even more mysterious sense in binary notation, i.e.,

1111,1111,1111,1111,1111,1111,1111,1111
+ 0000,0000,0000,0000,0000,0000,0000,0001
0000,0000,0000,0000,0000,0000,0000,0000

See, the 1 provokes a carry in all the bits. ... This is like the old mechanical adding machines and comptometers, where you could fill the thing with 9s, add 1, and produce zero; same trick, basically. Indeed, old comptometers have 10s-complement markings on them, for doing subtraction.

3. The other times() returned (in a structure passed to the function) might be more vulnerable because they might count faster — so they could be the source of error also, and this is noted on the web somewhere I forget. ... Without, you understand, explaining anything about what times() might return....

4. I fully expect my insightful thoughts to be lambasted by some Linux know-it-all. Actually, so far that’s the only way I’ve found of eliciting information from the caring feeling cooperative Linux community, q.v. ... And, of course, that’s what happened here! ... Owen still scores, in a perverse way....

5. Actually I chickened-out; I have OwenShow zero errno before the call to times(), and if the return value is -1 and errno is non-zero, allow the user to ignore the error, and mention that if he sticks a file with a particular name in the OwenShow program directory, it’ll never happen again. ... Of course if Linux ever actually does this, OwenShow and anyone who uses times() is probably sunk.

The Years of Microsoft: Owen Relents

I was coding away at Microsoft’s Visual Studio 2005 Beta 2 and I realized: these folks are peddling as fast they can! ... I mean I really haven’t done much with NET, and I was struck by how even today the RAD is noticeably inferior to Delphi — a product from a company that couldn’t be more on the ropes! ... I mean Microsoft hired-away the Delphi guru himself Anders Hejlsberg to do NET!

... Also I was struck by the pictures of models posing as programmers that decorate the endless VSß installation: they were all furriners! ... I mean, America is still the exploding pot, so they could be muricans — but no average blondish low-browed type even remotely like myself, even when I was young and thin, was included. ... And indeed, when I googled for various NET obscurities, whole pages were half ideographs! I saw one I think in Farsi! ... If anybody thinks this means Microsoft is fat and happy — well of course they are f&h by the pathetic and latter-day standards of most of us in the software biz — but there are clouds ahead, and they, like us all, quail before the storm. ... This NET thing certainly isn’t working out the way they hoped; it’s not so much the NET technology good or bad, it’s just that the way things are going, nobody’s writing great piles of software anymore, at least for PCs, not like they used to. Everyone’s outsourcing everything to strange foreign lands, and maybe Microsoft will somehow adjust to this completely different market, with different rules and most notably much lower prices — or maybe the Americans will finally rear-up and stop that evil outsourcing. ... And maybe pigs will fly. ...

The Years of Pain

Of course Microsoft has been toweringly annoying over the years, and I have been annoyed. ... But in my dotage, I must concede, what fun we’ve had! ... I mean, gee, sure Gate’s might be a little over-monopolistic — but I lived through the CP/M era and worse, and as far as I know, Gary Kildall was a nice guy. ... And after all, you can always buy a Macintosh! (As we did eventually!) ... So I’m going to stop the ritual Microsoft bashing ... mostly because I guess I’m tired of it. ... Then of course, however bleak the days ahead, Microsoft still has lots of money and they might give me some! ... (But I’m afraid I was overwhelmed, and staged a tiny Vista-memorial intermission.)

Windows versus Linux

I just can’t pretend any more that the Linux desktop, for instance, is obviously superior to Windows — au contraire, and so I’ve left my whining about Linux in these pages, since by now that’s the minority hard-to-find opinion. ... The truth is, the Windows desktop is still incomparably superior to Linux: for the little people, yes, and even for idiots — oops, “skilled professionals” — like me who want to play with software and write programs and maybe occasionally make a little spare change. ... On the other hand, I suspect the future still holds ever-increasing hordes of Linux servers which, usually, don’t have desktops. ...

The Experts: System.IO.Ports.SerialPort

But I can still rip the gurus! ... Each one filled with glittering wisdom, incredible insights for NET pilgrims. ... I could hear the locust-like humming on the web, as they swarmed to feed — maybe Beta 2 will open the flood gates, they murmur! ... Flood the parched desert with money at last! ... One particularly egregious — but I must say nevertheless unintentionally helpful — suspect had a System.IO.Ports.SerialPort (new new new in the ß2 framework) demo. ... But no download with forms and stuff; he actually advised a poster “just copy the code and paste it in [the IDE and] it will work fine” — which is very much like the old joke, “here’re the basketball scores: 20-10; 89-17” etc. ... I don’t believe he’s actually that dim — although his code raises the possibility — but no it’s just another resume-enhancer. ... Could be both I suppose....

... Whatever, Owen triumphs; I wanted to learn a little Visual Studio anyway, and this ridiculous gormless source was just the sort of trial-by-fire thing I could use. ... So I got it working, fixing a few silly things along the way. ... Score: Owen:1; Gurus:0. ... And, I must add, the MicroSoft IDE didn’t crash once. ... The MSDN “help” had a problem once, but not the IDE. ... And now, just to rub sand in all their faces, here is my very own rendition of “The Resume Enhancer”, so much louder and so much worse. .... No mine comes with forms you lucky pilgrims! ... The illustration above is the MSDOS Lync terminal emulator chatting with it in a W98 DOS box.

... This just in! ... Compiles and runs without a single complaint in “Express” Visual C# 2005 version 8.0.50727.42, NET version 2.0.50727! ... Not a burble! Not a whimper! And free free FREE! Go Microsoft! ...

— Wednesday, January 4, 2006

______________________________
NOTES

Gary Kildall ran Digital Research, and was Mr. CP/M.

Microsoft, the Underdog: It’s true, every other page of the computer mags does seem to be a Microsoft ad, but I am confident no sentient being pays attention to these things. ... I actually suspect it’s Microsoft’s way of subsidizing the magazines, which to be sure still fade away day by day since before the dot com crash.

XP Shortcuts: They Toggle with the Alt Key!

Who knew? For years both I and LOL noticed the shortcut underlines disappeared from the menus — sometimes ...

that’s not the electric light
my friend that is your
vision growing dim

Dress Rehearsal Rag, Leonard Cohen

But, no, it was the computers! A tremendous wonderful feature introduced somewhere in the toils of XP makes the shortcuts invisible when the window first appears and then, depending on how much you offered the consigliere, they toggle by pressing and releasing the ALT key or, for the better-class of customers, say your latest NET thing, they stay on. ... It’s a feature! Those underlines were so ugly and annoying, now they’re not there unless you want them — and happen to know that if you want them, you should press the ALT key. ... Which, of course, absolutely nobody knows — except me, the LOL. And now you....

And then in the fullness of time, I came across “right-click desktop, properties, appearance tab, effects button, uncheck Hide Underlined Letters for Keyboard Navigation Until I Press The Alt Key”. ... So EZ eh? ... As oft I’ve opined — if only these programmers could speak. ... Of course XP help has nothing useful for “alt” and nothing at all for “alt underline”....

— Monday, March 6, 2006 6:59 pm

Miscellaneous Acronyms etc.

With a tip of the soldering iron to the Jargon File and Eric Raymond, the amazing Stan Kelly Bootle, whoever....

ACM: Interestingly, ACM Queue magazine won’t admit what the letters stand for — but that’s not going to stop me: it’s the Association for Computing Machinery. ... I don’t know what they’re hiding; it’s not like the “A” stands for something filthy like “America”. ... I suppose it’s the “Machinery”; but I thought retro was good. ... Founded in 1947, for most of my life these folks would have nothing to do with slugs like myself, mere practitioners with no engineering degree, barely-frocked Computer Science toilers. ... But today, I have the satisfaction of being the honored recipient of many many offers of membership — for a price to be sure, still quite large and somewhat indeterminate — and, as an important leader in the software industry, free copies of the ACM Queue magazine. ... Which, I hasten to add, is quite an amusing magazine, especially since Stan Kelly-Bootle’s column became a regular. ... But sadly, no longer with us, having graduated to the great magazine subscription in the sky — i.e., the post-mortem on-line version....

AFN: Ambiguous File Name — a name like BINGO* or B?N?O, that is with asterisks or question marks. ... Under various useful conditions, our hard-working operating systems will often provide files with any characters (asterisk) or any single character (question mark) in the specified position. ... Of course if you use a GUI this is all intolerable gobbledygook....

AOL: America On Line. The largest and, for many years, by far the most annoying ISP. ... But now, in these last days, you can get a free aol.com email address!

Assembler: See the exciting discussion of high-level languages.

BBS: Bulletin Board Service. What we dialed our 300 baud modems at. They had the most amazing things, but it was a dark time before the world wide web, and we were easily impressed. Nevertheless, a lot of software got strewn-around that way. ... I of course didn’t go for the dirty pictures....

BDE: Borland Database Engine. In the olden days, Borland’s anti-ODBC, but now gone and mostly forgotten....

BSD: Berkeley Software Distribution. A FOSS Unix-like system that isn’t Linux. ... BSD License: a FOSS license that’s not GNU which means, basically, that BSD-licensed software can be used any which way you like without genuflecting to Richard Stallman.

BUS: A set of circuit wires connecting like-minded digital components together. The 8-bit computers of my formative years, for instance, would exchange data over an 8-wire “data bus”. ... Once upon a time, the concept of a “bus-oriented machine” confused things — or me, at least, when an acquaintance insisted his big iron didn’t need no stinking bus. But of course he was a software guy. ... The confusion was between systems that exposed a system bus including a complete set of computer signals for the convenience of plug-in cards — like the PCI cards in today’s PCs — versus computers without such arrangements which, nevertheless, used address and data buses just like all decent digital devices....

CIS: Compuserve Information Service. One of the older ISPs. Absorbed by AOL some time ago.

CLI: 1. Command Line Interface. You can still get one of these with a “DOS Box” (in Windows) or “shell” (Linux). It’s where you laboriously type commands to get things done: instead of accidentally erasing your hard drive when you click the wrong button, you just type “xtr del *”. 2. A recent “overlay” is Common Language Infrastructure, invented so the vast hordes of Linux “mono” programmers won’t have to wash out their mouths after saying CLR.

CLR: Common Language Runtime. The interpreted thing underneath all Microsoft’s NET languages, guaranteeing they all inter operate and don’t push ahead of each other.

CP/M: Control Program / Microprocessor. Yes there was something before MSDOS: this was what our microcomputers ran in a time so ancient cell phones hadn’t been invented!

CPU: Central Processing Unit. The electronic component that rules our lives and world, and with which I have such an intimate personal understanding....

CRT: Cathode Ray Tube. This is the antideluvian device in our TVs and monitors, until LCD sets were discovered. CRT sets are cheaper and have better and more flexible video; LCD sets are more expensive, have relatively inflexible video, and poorer performance. They do weigh less, of course. ... See also HDMI.

Delphi: The obsolete Pascal-based programming environment with a GUIRAD. ... The easiest way to program Windows, and therefore the loser to MFC in the programming wars, now officially moot. Friday, August 11, 2006 4:43 pm. Wait! Hold the phone! Delphi may not be down for the count. ... Oops maybe better hang-up anyway; things still aren’t looking good over there. ... Then there’s the Lazarus work-alike open-source product which is still, sadly, not ready for prime time....

DHCP: Dynamic Host Configuration Protocol, usually as in “DHCP Server”. ... When your network doesn’t have one of these, you’re screwed. ... Unless you’re a hopeless renegade and use numeric addresses like me....

DMA: Direct Memory Access. Sounds like a great idea, no? ... No, no, it means Direct etc. by someone other than the CPU, who of course does that kind of thing constantly. ... The idea is that the CPU, memory, and other components all sit on a common bus, and it’s often a good plan to allow devices to talk directly to memory instead of going thru the CPU middle-man. I believe the whole idea is mostly old-hat these days....

DSLR: Digital Single Lens Reflex — an expensive camera flavor. ... For years I thought this was pure B.S. but then I bothered Wikipediaing it — and apparently they actually sell expensive cameras with an intricate tiny mirror mechanism through which the pathetically-addled expensive camera fan (aka skilled photograph professional) can see the picture; then, when he presses the button, it flips out of the way and lets the electronic sensor have its turn. This was a wonderful thing with the chemical film of olden days, because that way you got to see exactly what the film would see. On the other hand, it’s extremely stupid with electronic cameras, because all you have to do to see what the electronic sensor sees is to connect the electronic sensor to a viewing mechanism, like the LCDs commonly used on digital cameras: a big display on the back, and/or a viewfinder gadget so you can see the the thing when it’s sunny. And the electronic display is undoubtedly a better indicator than the stupid mirror, because you get to see what’ll be wrong! ... Sadly, I’m pretty certain the DSLR was introduced so the already-disappearing geriatric professional media camera throngs would hear that reassuring “thunk” when they took a picture; and so they would know they’re seeing the “real thing”, not some of this suspicious new-fangled electronic gimmickry. ... Indeed, the “thunk” is reproduced by many point ’n’ shoot cameras these days, presumably to make the rest of us geezers feel good about the things. ... And now, a magazine article celebrating “Real-time photo data” in top-of-the-line DSLRs (page 38, British PCPlus, 8/08)! ... I.e., the utterly standard “digital compact camera” LCD is coming to super-expensive DSLR products! ... The advanced camera professional — in software, I call this level of product “insane millionaire” version — can now take advantage of this astonishing years-old technology — with expensive trickery of course, since that little mirror gadget is still in the way! ... Wowsers! ... I do feel myself reaching for ways to express the surpassing stupidity of this ... but I fail....

EMI: Electromagnetic Interference. We used to use this as an excuse for everything, as in “oh that thing crashes all the time from EMI”. ... Even today you can ask a technical specialist why your stupid piece of mediocrity usux junk crashes constantly, and they’ll mumble about EMI and insist you need a separate power line to “get a good ground”. ... Ah but you kids don’t know anything! A place I worked at had really marvelous S100 computers that would reboot if you looked at them; definitely EMI problems....

EPROM: Erasable Programmable Read Only Memory. ... I just realized these are antiques now, their time gone and forgotten! ... But back in the day, this was how I got software into my gadgets. The little window in the illustration was how you’d erase the thing, with ultraviolet light! ... Those were the days! ... Well actually I still support products that use these things....

FOSS: Free/Open Source Software. Like Linux. And I must admit for years I had no idea what they meant by “free as in beer” (i.e. as opposed to “free as in freedom”) — until I realized these fellows mostly come from the groves of academe where I would guess beer is often available without cost! ... But not when I was a barefoot boy on Broadway!...

FX: “Framework”? Especially Microsoft? ... This one snuck up on me. Once everything was “NET 2.0” or something, and then — voila! — it’s “NET FX 2.0”! ... Wikipedia claims “WinFX [is the] Codename of Microsoft .NET Framework 3.0” but does not use “FX” to mean framework generally in their NET article. ... So who knows?

GC: Garbage Collection. A software mechanism used in Java and .NET (most famously) and other languages instead of the old-fashioned and extremely-error-prone manual memory allocation/deallocation of C language and other primitive tongues. ... GC never stops everything for a few seconds to do its stuff — while, for instance, running the laser brain surgery machine....

GNU: “GNU’s Not Unix” — note incredibly cute recursive definition there — and I don’t care, doo dah etc. ... Actually GNU and its patron saint and originator Richard Stallman are responsible in so many ways for numerous projects including Linux, but Stallman’s insistence that it should’ve been called “GNU/Linux” typifies an occasionally intransigent attitude — well, OK, Stalinist ... perhaps “Stallmanist”?

GUI: Graphical User Interface. The pathetic unmanly thing you’re looking at. Back when men were men, we used CLIs, and the earth thundered when we roared.

GUIRAD: A term I made-up (“RADGUI” was taken!) which I hereby decree should denote a two-way GUI RAD: an IDE that automates GUI composition, ameliorating the grinding obscenity of “handmade” GUIs, where “two-way” means that the mechanism remains usable after the first go-round. ... This sort of thing is/was a key feature of various IDE offerings from Microsoft’s Visual Basic of yore to the latest Visual Studio, Borland’s Delphi, and numerous Java environments back when Java had applets. ... The Linuxoids claim they have GUI RADs, but what I’ve mostly encountered are one-way tools where you (1.) “draw” a GUI in a special window, (2.) translate it to code, and then (3.) add your own code — after which you can’t go back to step #1; if you want to change anything in the GUI ever again, you have to do it by hand with no stinking automation. ... Unlike the composition tools of Microsoft, Java, and my beloved Borland, which allow endless elaboration of the GUI no matter how much code you’ve written. ... Another way to put this: one-way bad, two-way good....

GWBasic: “Gee Whiz” Basic? A guy named “Greg Whitten” who is somehow responsible for the language isn’t sure, Wikipedia says. ... Anyway, it’s what came with MSDOS in the olden days, and was pretty vile. ... Although a lot of people including me wrote a lot of code in it or its dialects....

HDMI: High Density Multimedia Interface. ... We peasants mostly see this as an inevitable part of the LCD TVs at the big box store, denoted as “HDMI TV”. ... “High Density” probably means increased resolution as compared to your old boring CRT TV or computer monitor; I believe actual man-in-the-street tests have demonstrated hardly anyone can tell the difference without special optical equipment. ... “Multimedia Interface” means, as far as I can dope-out, “copy-protection” — which, as far as I can guess, probably doesn’t work. ... At least, it didn’t work for some years, and it probably still doesn’t, although the crack technologists at large would-be monopolies are hot on the trail. The idea is you try plugging your “HD” DVD player (which I think means “Blue Ray” these days but who can tell?) into your HDMI TV set, and it’s bound to work perfectly. ... See also my panegyric to LCD aspect ratios....

High-Level Language: Decent useful languages like Pascal or C, as opposed to the barbaric chicken tracks of assembler. Although some sensitive folk sniff that C is practically assembler. ... Assembler, on the other hand, is machine language with symbols, i.e., “ldx #bingo” would load the X register on a particular processor with whatever value is represented by “bingo”. A high-level language doesn’t know about processor registers, at least until you’re through with it, and you might go instead “Gwhat := BINGO;” (Pascal). And actually, for most people all computer languages look like chicken tracks. ... Note, incidentally, that both high-level compilers and assemblers eventually output machine code; that is, they are both language translators that take a hideous subset of English as input, and produce machine code for a particular processor as output, and in a way are indistinguishable except for what many normal human beings would consider stylistic quibbles. However, an assembler is at least supposed to be deterministic: even if I use assemblers from different companies, if they target the same processor I expect the same input to always produce the same output. This is not true of high-level language compilers; the designer of the compiler is expected to exercise his guile producing clever code and, back when there was competition between compilers, such optimizations were considered important selling points.

I” as in iMac, iPod, ipw, etc.: “internet”. I realized this in a vision last night, and then found it confirmed at Wikipedia. ... And so my “ipw” program name — which I chose just because of the Apple “i” mania — makes perfect sense!: “Internet PassWords” — which is indeed what it is!

IANAL: I Am Not A Lawyer. ... An indispensable phrase in our modern bustling software world — so you don’t get sued when you voice any opinion, however small or ignorant, about anything legal — or make that, just anything. ... Of course, IANAL, so I don’t know if it works!

ICE: In-Circuit Emulator. A fairly elaborate gadget we advanced professionals plugged into our boards so that we could see what was going-on inside the microprocessor. These are mostly gone in modern times. ... Also see an even more antique version.

IDE: 1. Integrated Development Environment. A thing where programmers can compile, run, and most importantly, debug. Borland really invented it with Turbo Pascal for MSDOS (and CP/M, as the invaluable Wikipedia entry confirms and I vaguely remember). ... For me and probably others, it subsequently acquired the connotation of being able to manipulate the program’s GUI (that is, idiosyncratically, it was a GUIRAD) because that’s what Microsoft did with their Visual Basic, and of course Borland then copied with their Delphi (Pascal) and C++ Builder. ... But now in these latter days, the GUI aspect is receding, as vendors strive to make programming more laborious and error prone. 2. Integrated Drive Electronics. Forgot this one for a while! You usually see “IDE/ATA”, or just the shriveled “ATA”, which, weirdly, stands for “AT Attachment”, where the “AT” probably stands for “Advanced Technology” — which was the acronym for those wonderful 286 computers that succeeded the XT 8088 ones.... Googling “integrated drive electronics” leads to many informative pages....

ISO: International Organization for Standardization (i.e. in French or something), but in my computerish world usually refers to sizeable (~700 megabytes and up) “image” files with an “.iso” extension which, with the appropriate software, can be burned onto CDRs. Linux distributions are often conveyed in this form.

ISP: Internet Service Provider. Those guys who we used to dial our telephone modems at. But even the shadowy forces behind your big pipe connection constitute an ISP....

IT: Information Technology. I.e., generally referring to the humble drones who serve the servers, or perhaps anything in business involving computers.

LAN: Local Area Network. For me, it began with Windows for Workgroups; well actually a little afterwards with Windows 98; the general term for all that wiring (usually ethernet) that hooks-up the average office computers together.

LIFI: LIterary FIction; the junk supposed intellectuals supposedly read. As opposed, at least, to “SCIFI”, SCIence FIction.

LOL: Light of Life, my esteemed co-conspirator.

MFC: Microsoft Foundation Classes. An obsolete easy-to-use Windows programming tool with which numerous boring second-rate programs were created. ... Actually, it’s extremely difficult to use; it has no GUIRAD. As opposed to the almost perfect Delphi.

Linux: After Linus Torvalds, the creator of this magical FOSS operating system — but surely you knew that already! ... I mean, google it....

LINQ: Language Integrated Query. The astonishing ability to stuff SQL-like statements into 2008-or-so Microsoft C# and VB .NET script languages. PLINQ is naturally “Parallel” etc. — and probably the reason for it all....

MIDI: Musical Instrument Digital Interface. Still alive and among us, it’s the way your computer (usually) makes an attached electronic musical instrument sing and play. Of course that’s pretty old hat now — the computers like to make the music all themselves in the CPU, but I gather it’s still used for live performance a lot....

MSDOS: MicroSoft Disk Operating System. Not to be confused with a real operating system. What we ran our pitiful PCs with, when the earth was still cooling.

NAS: Network Attached Storage. These things are getting cheap; it’s basically a box for a few $hundred you attach to your small business LAN and then with a little secret sauce software — voila! you have 80 gig or who knows how much everybody can use. ... I.e., so you don’t have to buy a Windows server if all you really need is common file storage. ... Look around the web for them; www.provantage.com had some, although I have no idea which are good/bad. Although I’m pretty sure many of them are Linux-based, which is probably good.

.NET: The Microsoft anti-Java.

NFS: Network File System. Sun Microsystems created this thing in the age of the dinosaurs, and today it still connects Linux/Unix computers to each other now and then. ... But, I suspect, it’s gradually being succeeded by Samba — ’though the Linuxoids won’t admit it, because of the evil Windows taint....

NIB: The file extension for Next-step Interface Builder, in the astonishing Xcode environment.

NIC: Network Interface Card; the hardware that connects our PCs together in a seamless web in our LAN.

Fixed Numeric TCP/IP Addresses: like “10.1.1.8” instead of “myMachine”. ... These are used by cogniscenti and lunatics like myself to connect our silly attic networks together without using DHCP.

OC: Xcode’s Objective C.

PE: Microsoft’s “Preinstallation Environment”. It used to be something like a pitifiul MSDOS command-line interface, but I gather has blossomed into a vast and wonderful thing, with numerous flavors and versions. ... It is used by IT staff to install Windows, see? ... This one is hard for me, because of a strong overlay for “Physical Education”; with which I was always tormented in my misspent youth....

ODBC: Open DataBase Connectivity: Microsoft’s database domination attempt. I’m pretty sure for at least a while Microsoft tried to divert us to better and more-wonderful object-oriented versions, but now Wikipedia claims it’s open open open and Microsoft does seem to have lost interest....

PCL: Printer Control Language, the stuff the HP LaserJets printed-with. Those were the days; true HP fanatics could compose directly in the stuff, which had a lot of ampersands as I recall....

PIP: Peripheral Interchange Program. The appalling way you had to copy files in CP/M. ... As I suspected, the name was stolen from, apparently, the PD6 or so says Wikipedia....

RAD: Rapid Application Development environment. I used to think it meant an IDE that speeds-up program development by doing something about the program’s GUI code, but ... I have since learned the proper definition is “any guru-linked scheme that has something to do with software” (see Wikipedia). ... I must say, I am so disappointed. ... But there you go; the comp biz may get around to finding an acronym for the automation of GUI composition, but I’m not waiting: see GUIRAD.

RAM: Random Access Memory. And on my equipment, it’s particularly random! ... No they really meant “arbitrary”: access to any location in RAM is supposed to take exactly the same amount of time which, hopefully, is real fast, since this is where all the programs run from, more-or-less....

RTOS: Real Time Operating System. These are flogged relentlessly in the few publications devoted to embedded systems and constitute a major advertising source for such. The idea is you’re faced with some challenging project with megabytes of contemplated code, so instead of going amateur night and rolling your own, you’re supposed to buy one of these — although there are open-source/free examples available too. I am obviously not the only one who feels no particular attraction to these systems, but then I suspect I’m already off their radar since most of my embedded work has been in assembler instead of decent high-level C.

SAAS: Software As A Service: bringing the suppleness and agility of your web experience to the desktop.

SAMBA: It doesn’t mean anything, but was chosen randomly to denote the Linux software that can communicate with Windows’ SMB “Server Message Block” protocol — i.e. so Windows clients can see files on Linux computers (and vice versa). Invented by Andrew Tridgell.

SCM: Either “Source Control Management” — Linus Torvalds — or “Software Configuration Management” — almost everyone else. ... I presume Torvalds has the original old definition, and the TLA degenerated into the broader definition, which can basically mean anything....

SMP: Symmetrical Multi Processing, the advanced new technology which will support 2,000 users simultaneously on your PC. ... Sadly they haven’t figured-out how to do much else; see my exciting revelations. ... The “Symmetrical” means we’re talking multiple more-or-less identical hardware entities working together; your PC — heck, your cellphone — is already a hotbed of parallel hardware, from the wretched thing in your keyboard to graphics chips modems etc. ... But they all perform specific different tasks — which is why, in general, they’re more useful to you than 2,048 cores in your SMP gadget....

SOA: Service-Oriented Architecture. Careful testing at the laboratories indicates that this is total guru-driven BS. ... Instead of sensibly writing one giant program in assembly language, the idea is you’ll have web servers all over the place offering services. ... Like Human Resources might provide an employee records service, or manufacturing could have a widgits-made-today service. Then anyone in the company can use these services to provide purpose-built software for any old purpose you can just lash up in a moment....

SP: Service Pack; an organized software upgrade. Notoriously, the mechanism by which Microsoft makes its operating systems nominally less dangerous than the initial release.

SQL: Standard Query Language. The venerable database query language which has done so much for so many. ... Pronounced for some reason “SEKEL” by old hands; I have always shunned pretension and am content to pronounce it ES-KEW-EL, i.e. like any normal TLA. The Standard Query Language comes in about five million flavors, none of which are compatible with each other....

STL: C++ Standard Template Library, a fiendishly-clever assortment of macro-like code that supposedly provides programmers easy-to-use lists and collections. See my thoughtful reflections.

T-SQL: Terminally-Stupid Query Language. ... Well, no, that’s just my little witticism. ... The term showed-up suddenly in a few of the pitiful remaining computer magazines @ 11/08 without the slightest excuse — i.e., “you stupid fool you didn’t go to our seminars or conferences or anything and you’re totally ignorant!” ... By context, T-SQL appeared to mean “SQL”, but supposedly it really means, at least according to http://en.wikipedia.org/wiki/T-SQL, “Transact-SQL”. ... Which, as far as I can figure-out, means “SQL”. ... To be sure, with all the little syntax uniquities that make the particular SQL dialect non-standard and non-portable but, I mean, presumably these fancy SQL servers are already transaction empowered....

TLA: Three Letter Abbreviation. This is more useful than you might think; of course there’s also FLA.

UML: 1. Unified Modeling Language. Incredibly advanced comp-sci something. Actually, a glorified flow chart. And, as has happened so many times before, any day now you will be able to just cook up your UML stuff, and the program writes itself! 2. User Mode Linux is probably not what you had in mind.

WordStar: For the children in the audience, WordStar was a neolithic word-processing / text editor program that dominated the primitive computer world in a long-ago era. ... The WordStar “diamond” aka the cursor movement keys control-E, S, D, and X are still fondly remembered — and used, in my case — by hundreds. ... A story in the British Linux Format recently celebrated the talented WordStar-influenced Joe’s Own Editor’s help screens, available at the touch of a keystroke — but apparently not realizing the feature was inherited from WordStar! ... And were they a revelation in 1983, or whenever I first saw them!...

UAC: Vista’s User Account Control: the moronic Vista robot who dims the screen and ostentatiously calls your attention to possible security infractions. I think it’s somewhere in “Control Panel / User Accounts” you can turn it off/on....

UPS: Uninterruptible Power Supply — like a flashlight, often a container for dead batteries. When not occupied that way, they keep the computer on when your power company decides to rearrange the extension cords. ... Note that the idea is not to keep working; the idea is for the UPS to provide enough power for an orderly shutdown, and then go to the motel and await the power company’s mercies. ... There are presumably UPSes designed to continue operation, but I think expecting that from the things one finds in the computer stores is unduly optimistic....

UNC: Universal (or Uniform) Naming Convention: a file path containing “\\” (in Windows) as a way of referring to something on the network — not on your local computer; “c:\elsecoms\bong.bat” is a batch file on this computer; “\\xp300\c\elsecoms\bong.bat” is a batch file on the xp300 computer, wherever that is. See http://en.wikipedia.org/wiki/Path_(computing) for endless elaboration....

USB: Universal Serial Bus. ... Once, there was RS-232, a designation which means nothing, and it connected our computers and printers and modems together, and almost never worked. ... Actually it still connects my printers together and of course works flawlessly. ... So USB was born, which works frequently — if you devote adequate technical development attention to it, which can be briefly summarized as “a lot”. ... Anyone else — i.e. the kind of slugs who used to connect their stuff with RS-232 — need not apply. ... And strangely, even ’though USB has conquered and triumphed for years, and the latest PCs don’t have RS-232 ports, the old ways still live-on in my industrial world. ... USB/RS-232 adapter gadgets are still sold for $30 or less, so that RS-232-less computers can use the stuff. ... This peculiar persistence might have something to do with that strange arcane technical parameter known as “price”, i.e. RS-232 was and is much cheaper than USB — at least to design into your gadget....

VB: Visual Basic of course. The original Windows EZ-programming environment, perfected in my beloved Delphi Pascal.

ZIF: Zero-Insertion Force, usually a socket, i.e. so one can put a chip in it and take it out and put in another without overly stressing the chip or the socket. They were used in the Golden Ages on EPROM burners. ... But of course there are no more EPROMs, nor pins to insert, in our brave new world. ... But we can still burn old-fashioned flash CPU parts in them....