Jeff Duntemann's Contrapositive Diary Rotating Header Image

Daybook

Descriptions of what I did recently; what most people think of when they imagine a “diary entry.”

Looking for Mr. Beefheart

Jeff and QBit With Heart-Shaped Steak02-2009Small.jpgStop looking, actually. He’s right here. (And that’s Mr., not Captain, thanks.) Carol was at a dog show yesterday and I blasted out 4600 new words on Chapter 6, so it was not an especially romantic day, but that’s OK; we have built romance into the very fabric of our lives together, and in a sense we do a low-key, distributed Valentine’s Day 24/7. It’s not a giddy, infatuated romance–though we rediscover a little of that now and then—but rather the steady heat that comes of knowing one another unselfishly and deeply for a great many years. (For us, that would be closing in very quickly on 40.)

So Carol surprised me with a somewhat unusual Valentine’s Day present yesterday: A Colorado rib-eye steak cut in the shape of a heart. The steak came from Ranch Foods Direct, a Colorado Springs packing operation that buys local beef and buffalo and sells it both wholesale and at a couple of their own shops. We buy a lot of their meat, as it’s antibiotic and hormone-free, mostly grass-fed, and doesn’t travel very far to reach us. If you’re local, I do recommend them.

Knuckle-dragging, knob-headed Neanderthal that I am, I’ve been improving my health in recent months by eating less grain and more meat. The caveman diet has raised my general energy level (I don’t remember the last time I wrote 4600 words in one day!) and dropped my weight to 148, from 155 a year ago. I’d eat less sugar too, except that I haven’t eaten significant quantities of sugar in years. (I have dessert about three or four times a month, and then only after a big meal.)

Once Carol unveiled the steak, QBit couldn’t keep his eyes off it, and he followed me around the house as I looked for a suitable place for the inevitable photo opportunity. The weather should be good tomorrow. It may get up to 50, and be sunny, and we’re going to grill it out on the back deck. QBit and Aero will both get a little bit. Neanderthals had dogs, and still do. Neanderthals didn’t write computer books—and their dogs weighed a little more than fifteen pounds—but Tuesday was Darwin’s birthday. Here’s to evolution!

KDE Follies

I’ve been busy. And I’ve had headaches. This is mostly why you haven’t heard from me in a few days. I wondered for awhile if I was getting headaches because I was busy, but I’m coming around to a different point of view: I’m having headaches because I’ve been fooling with KDE.

I used to like KDE, until KDE 4 happened. Kubuntu 8.04 would not install correctly on two of the three machines I tried it on, and on the third it malfunctioned weirdly after a couple of days of very light use. I had almost no trouble with Kubuntu 7.10, apart from its failing to set up a network printer. That was KDE 3.5, which I liked. The press on KDE 4 was not good, and I figured I would let Kubuntu rest for a couple of cycles to see if the KDE 4 codebase would shake out a little.

I might have waited for 9.04 except that I couldn’t get the KDbg documentation to run under GNOME. I like KDbg a lot; it’s a beginner-friendly front end to the highly human-hostile gdb debugger engine. I’d like to cite it in my book, but there are a couple of things about it that I just can’t figure. Press F1, right? Well, when I do that, I get a mysterious error dialog:

Could not launch the KDE Help Center:

Could not find service ‘khelpcenter’.

I assumed at first that this is what happens when you have a KDE app running under GNOME, but the kate editor is also a KDE app, and its help document comes up without any trouble. The khelpcenter4 package is installed on the system. The obvious thing to try is to run KDbg under KDE, and see if things work any better.

Of course, to do that you have to have a running install of KDE.

I downloaded the latest Kubuntu ISO (in 13 minutes on BT!!), burned it to CD, and booted the live install on my SX270, the same machine on which Ubuntu 8.10 installed without a glitch. Kubuntu detected the monitor resolution, but…the display blacks out every six seconds for about three-fourths of a second. Otherwise (heh) it runs perfectly. The blackout is not a fade; the screen just turns black instantly. It made me a little nuts, but I suffered through this game of desktop peek-a-boo long enough to install KDbg. I pressed F1. Same dialog. KDE can’t seem to make its own help system work.

So KDE is on that certain list of mine right now. Even though it displays the assembly source for single-stepping, KDbg won’t display named initialized data in NASM executables, and the Memory window refuses to display anything, initialized or otherwise. Being able to inspect data in memory is mighty damned useful, and I’m starting to think that KDbg isn’t really set up to debug assembly language. Like almost everything else in the Linux world, it’s a C thing. Maybe there’s a magic command-line option that allows it to interpret stabs format debug data for assembly language, but there’s nothing much about it online. Clues welcome.

And Kate? The only thing it lacks is a shortcut for running make or launching a debugger, but that’s easy enough to do in the terminal window. It’s graspable enough for beginners, and that’s what I’m striving for here. Newcomers should not have to learn EMACS or gdb to make “Hello world” happen in assembly.

I don’t want to have to use gdb Insight (if there’s an uglier widget set than Lesstif’s I’ve yet to see it) but if I can’t get KDbg to browse data in memory, I may have to. And the decision has to be made soon. (I feel another headache coming on…)

The Yard’s All Out of 3 X 4s…

I’ve gotten far enough into the revision of Assembly language Step By Step that I need to have a Linux machine running up here in my office all the time. I often spend hours in Ubuntu on this dual-boot machine, but there are still some things I need to do in Windows, and booting in and out to bounce from one to the other is time wasted, and pointless when I have old PCs stacked like cordwood in the basement.

SX270AndBracketOnDesk2.jpg

I have one of the very cool SX270 stainless-steel all-in-one brackets that combines a 10cm VESA monitor mount with a couple of tangs to hold an SX270 mini-PC behind the monitor. It makes for a very compact system, and in fact it was the integration of the SX270 and the monitor on the bracket that first brought the SX270 to my attention some years back, when I saw a couple of them at our optometrist’s office. So I took my spare SX270, parked it on the bracket, dug a Dell keyboard and a mouse out of the odd lots box, and realized that I did not have a VESA monitor to hang on it. So off we went to Best Buy, where I learned from the earnest young woman in the computer department that they had not sold 4:3 monitors for almost a year now. Every single one in the long line on display was 16:9.

I know why this is the case (home theater) and whereas it wouldn’t be my first choice, I’m willing to use that form factor, and really needed a monitor. I was apprehensive for a simple reason: The SX270 was made in 2003, and I don’t recall the machine supporting the 1600 X 900 resolution of the smaller 16:9 LCDs. I took a chance, figuring (or at least hoping) that I could rummage around online and come up with a newer driver for the Intel 82865G graphics chipset.

What I bought was a Samsung SyncMaster 2033SW. It’s VESA-compliant, and I bolted it to the stainless steel bracket without difficulty. It was on sale for $179. The machine itself cost me less than that; I think $150 on eBay some time last summer. 2.8 GHz, 1 GB RAM, with XP Pro–used and used hard, and ugly up close, but completely functional. I went up to Dell’s site to see if newer video drivers were available, but what they had was what I had. The closest that Windows could come to 1600 X 900 was 1280 X 768. The monitor centered the smaller raster in the middle of its screen, with the surrounding pixels dark. There was a “stretch” option that spread the raster out to the full extent of the screen, but it looked hideous.

Fortunately, Windows wasn’t the goal here. I booted the Ubuntu Intrepid installer CD in LiveCD mode to see what the OS would detect and how it would respond, considering that the machine dates back to 2003. Without a grunt of complaint, it detected the graphics hardware and loaded a 1600 X 900 driver. I tried a few things, pronounced it good, and told the OS to go install itself in earnest. Twenty minutes later, I was downloading NASM, Kdbg, the Bless Hex Editor, Nemiver, ddd, and a few other things through the Synaptic Package Manager. Not once did I have to face a command line. Everything Just Worked. The age of the machine (apparent from its collection of dents and inventory-tag stickum) didn’t seem to matter at all.

The display is gorgeous; it’s easily the brightest LCD I’ve ever seen. The whole gadget takes up about as little space as anything with a 20″ monitor possibly could. And after spending an afternoon with it, I realize that a long horizontal aspect can be handy: Editor on the right, Kdbg on the left, and just enough of a terminal peeking out under the editor to run make as needed.

I’ve been fooling with Linux intermittently for well over ten years, and the craziness of today’s events still boggles me: It installed much faster and way more easily than Windows generally does, and on old hardware to boot. This was not the case in 1999, let me tell you. If MS isn’t in trouble by now, it’s nobody’s fault but our own.

Cleaning Up 21-Year-Old Writing

Context changes are expensive, whether you’re a writer or an operating system. That’s why I like long, uninterrupted days to write. Writing in small chunks on large projects never worked well for me; I’d rather pull three ten-hour days than find thirty disjointed hours in the course of a week and waste half of each of them trying to recover my train of thought.

So it’s been with the fourth edition of Assembly Language Step By Step. I’ve spent most of the last four days blasting away at it, and if I haven’t returned to the Carb Wars here, that’s the reason. All in good time.

This is a big project, probably the biggest I’ve attempted since Drive-by Wi-Fi Guide, and it’s likely to be eating my life until June. There’s a great deal of new material to be written, and a lot of concepts to be covered that just weren’t issues under DOS. For example, when you work at the assembly level under Linux, endianness comes into play and needs to be explained, even though 85% of the world’s desktop hardware is little-endian.

That’s actually been fun; as I’ve said many times, the very best way to make sure you understand something is to explain it to somebody else. What’s been humbling is running into writing bad enough to make me wince. Every so often, I have to push back in my chair, heave a deep sigh, and ask myself the purely rhetorical question: “Geez. Did I write that?” (I did. 21 years ago. Practice helps…)

No problem; this is what editors do, though I am very glad that we’re not using typewriters anymore. And unlike certain other projects I’ve worked on, the author in this case takes criticism well.

An Outrageous Experiment, Part 3

(Continued from yesterday’s entry; the series began on 1/25/2009.)

Recapping: After losing five pounds by not eating Cheerios every morning for breakfast, I tried replacing the calories with protein and fat calories to see if those five pounds would return. I deliberately ate more to see if I could accelerate the process, but what I ate more of was limited to eggs, meat, and cheese. It backfired, and I lost two more pounds in ten days.

When I told Carol on the phone that I was down to 148, she told me to knock it off and go back to my Cheerios. So on the 11th day I called a halt to the experiment. Most of the meat and cheese was gone by then, and I’d had to get another dozen eggs and more yogurt. But I started cooking carbs again: primarily rice, and some conventional pasta. Since I was still batching it, I did weird things like having a bowl of Cheerios as my carb course at supper, next to a yummy plate full of formerly frozen shrimp and a side of creamy cole slaw.

That was only about a week ago, and as of this morning, stark naked and dripping wet, I weighed 151. It only took a week of slamming carbs again to gain three pounds. Carol got home last night. I’m a much happier guy, and will be returning to eating like a real human being. The only long-term change is that I’m having an egg for breakfast instead of Cheerios. Keeping my edge all morning has been delicious.

This experience didn’t surprise me too much. I’ve run into the effect before, although I never had the opportunity to do anything quite this gonzo to test it. Back when I was in college, I weighed about 125 pounds and was mostly skin and bones. Over the years I gradually put on weight, as people do. By the time I was 45 I weighed 170, and Carol told me that I was starting to look several months’ pregnant. Then something interesting happened: I threw a bad kidney stone, which forced me to stop drinking three or four Snapple bottled sweetened iced teas every day. I stopped drinking anything but water while the stone was being analyzed, and I lost several pounds almost immediately. This intrigued me, and when I started drinking sodas again, I drank only diet. The weight stayed off, and started drifting slowly downward. (None of this is news to my long-time readers.)

The next event happened a year or so later when I stopped eating rice bowls down at the corner for lunch every day. I switched to sandwiches or pizza (and no longer ate a softball-sized wad of white rice on a daily basis) and lost another slug of weight very quickly. My weight since then has wandered between 155 and 160. Once I started weight training in 2004, it drifted down to 155 and has been remarkably consistent since then…until last summer, when I stopped eating Cheerios for breakfast.

And now the experiment is over. So…what did I learn? Mostly, this: The conventional wisdom that Fat Bad, Carbs Good, is not unassailable, and the whole business is hugely more complex than most people think. It’s not an issue of thermodynamics, as far too many people believe. We do not “burn” calories in the same sense that we burn leaves out in the alley. Metabolism is an enormously complex biological mechanism, one that we still don’t understand as well as we should–or even as well as we think we do.

I was certainly struck by this: Changes happened a lot more quickly than our conventional understanding of calories and weight gain/loss would explain. If it were simply a matter of wadding on weight when we eat more than we burn, or losing weight when we burn more than we eat, it should take a lot longer. A pound, after all, represents 3,500 calories, and my intake deltas were nowhere near large enough to account for the changes I saw as quickly as I saw them, both on the downswing and on the upswing. I’m aware from my reading of the tendency to shed water on low-carb diets. I took care to drink more water than I generally do, and did not notice myself losing any more than usual. Something else must be going on, and while I’m still researching it, I think the answers may lie in a book I read almost by accident a month ago, a book that triggered this whole crazy idea.

(To be continued as soon as I can manage it.)

An Outrageous Experiment, Part 2

Recapping Part 1 of this series, yesterday: Back in the summer of 2008 I stopped eating a bowl of Cheerios every morning, to see if I could avoid the “fuzzy” feeling that commenced half an hour after breakfast and lingered for an hour and sometimes longer. Within three weeks, I had lost five pounds. I also lost the fuzzy feeling.

I found this intriguing, since it meshed with a few other things that had happened years earlier when my diet changed abruptly for some reason. (I’ll save the deep history for Part 3.) I read a few books, some of which I will review in the near future. There is a very old and very contrarian position in the health field to the effect that if you eat more carbs, you gain weight, and if you eat less carbs, you lose weight. This seemed to be the case with me, though all the data that I could find had been gathered in the treatment of overweight people. I was not and had never been significantly overweight. (I have never weighed more than 170.) It was a head-scratcher, and the question would have remained purely academic, except that we have known since last fall that Carol was going to be in Chicago for two or three weeks in January. I was going to be cooking for myself and eating alone all that time.

Hmmm.

I had lost weight by dropping one daily bowl of Cheerios from my diet. The hypothesis was obvious: Suppose I replaced the calories represented by a bowl of Cheerios with an equivalent number of calories, but from protein and fat. Would I gain the weight back?

I went shopping on the way home from dropping Carol off at the Denver airport. I bought more almonds. I bought a dozen extra-large eggs. I bought lots of cold meat, cube steaks, bratwurst, and frozen shrimp. And cheese, wow: sliced Havarti, a wedge of Romano, grated Parmesan, and a package of those appallingly delicious artificial Swiss-flavored cheese slice substitutes. I bought a big container of creamy cole slaw. I bought several cups of Greek-style high-fat yogurt. I bought a pint of table cream for my coffee. As a coup de gras (heh) I bought half a pound of bacon.

Slightly daunted by all that unapologetic fat, I drew up my courage, and I ate.

Now, a largish bowl of Cheerios with a half cup of 2% milk represents about 150 calories. An extra-large egg is 85 calories; fried in butter brings it up to a little over 90. A tablespoon of cream for my cafe au lait is another 29 calories. 3 oz of Greek-style yogurt gave me 115 calories, over about 85 for the light yogurt I had been eating before, for a calorie delta of 30. It was close to a wash; 150 before; 150 after.

That was breakfast. For lunch I had cold meat and cheese and occasionally an egg, and every couple of days, two strips of bacon. I did a lot of interesting things with the raw materials: I made a handcrafted Bacon Cheese Egg McMuffin. I made a new sort of ham and cheese sandwich, by sandwiching two slices of ham between two slices of Havarti cheese. I did not cut out carbs completely–I like them too much–but one Bays english muffin was it for lunch. For dinner I typically had a cube steak fried in walnut oil, another 3 oz of Greek-style yogurt with blueberries, some Romano cheese, and maybe a few Wheat Thins.

I made buffalo spaghetti sauce, enough for several nights, and served it over whole-wheat capellini. When I didn’t feel like cooking, I just thawed some shrimp and went nuts.

What I did not eat was sugar or refined carbs. I read labels like I generally read only SF, history, and theology, taking notes. There’s at least a smidge of sugar in almost everything, but if it was high-fructose corn syrup, I put it back on the shelf. I had no desserts, and I left the last two boxes of Christmas cookies in the pantry, unopened. I did not eat any potato chips. I did not eat any rice. I did not eat any white pasta. The only bread I ate was from a package of cracked-wheat bratwurst rolls. When I snacked at all, it was on dry roasted almonds.

I did not scrimp. I ate as much as I wanted; in fact, to accelerate the process (given that I only had a little over two weeks to regain my five pounds) I ate as much as I could stand. I probably ate about 25% less in terms of carbs than I generally do, but I ate a lot more protein and fat. I did not change my exercise regimen.

After ten days of this, I tallied the results: I felt great. I was never hungry.

And I had lost two more pounds. Oh, dear. If I wasn’t careful, I would be burned at the steak for heresy.

(To be continued tomorrow.)

An Outrageous Experiment, Part 1

Carol’s coming home tomorrow, finally, after two and a half weeks in Chicago helping her mom. This was nothing sudden, and I had had a crazy idea in reserve, at which I hinted in my 2009 plan file, which I posted on New Year’s Eve. Some of you mailed me, puzzled, about this item:

  • Eat Less Sugar. Eat More Meat. Lose More Weight. (More on this shortly.)

One woman, whom I’ve known for a number of years, scolded me: “You’re crazy! You don’t need to lose any weight!”

That’s true. I do not need to lose any weight. However, when I do lose weight, I damned well want to know why.

Ok. There is some backstory that I haven’t given you yet. This may take me a couple of days to get through, but I think it’s important. So let’s get underway.

For a number of years now, I’ve weighed 155, and I consider that my ideal weight. I’m 5’9″ tall and lightly built. My blood chemistry is good and I have no major health problems. I walk regularly, and do weight training once a week. This has been my regimen (such that it is) since we moved to Colorado in 2003.

My customary breakfast all this time has been a bowl of Cheerios in 2% milk, and half of a 6 oz cup of fat-free, low-sugar “light” yogurt, mixed with organic blueberries. (The organic is incidental. I don’t care how they were grown; they just taste better.) I’m used to a certain period of muzziness that follows breakfast, and assumed it was just my blood rushing to my stomach. Morning is my productive time for writing, and my post-breakfast fuzzies slowed me down. I resent that, but I considered it inevitable until I read something online about the phenomenon. Eating carbs for breakfast will do that to you. Hmmm. So some months back, I just stopped eating Cheerios in the morning, hoping that I would be mentally sharper until lunch. And wham! It worked. I got a little hungry at 10:30 AM, but I did not lose my edge after breakfast. I was writing more, and better, from 7 AM all the way until noon. So I bought dry-roasted almonds to snack on mid-morning, and kept to the regimen.

Well, something else happened: In about three weeks, I lost five pounds.

I did not think that had five pounds to lose, but I shed another inch of waistline, and had to punch another hole in a couple of my belts. Carol told me she wanted me back at 155. However, I am unwilling to lose my morning edge. It was a bit of a conundrum, but I knew that, come January, I would be batching it again for almost three weeks, eating alone. So a totally outrageous experiment suggested itself…

More tomorrow.

Gretchen’s Patent Pasta Ponchos

jeffinpastaponcho

I got a couple of really nice things for Christmas. Carol gave me a Canon G10 camera, a device that probably contains more intelligence than NASA had at its disposal in 1965. In fact, I’m still getting used to some of that intelligence, but…more on that later.

The other thing worth noting is a hand-made item from my sister Gretchen, before whom all things in the textile kingdom bow. Months back, when Gretchen asked me what I wanted for Christmas, I told her, Make me a pasta poncho. I told her what I meant. And she did.

You see the results above. She took an ordinary 48″ X 26″ bath towel in appropriate tomato red, and somehow (this is a black art to me) inserted a turtleneck dead center. So whenever we have pasta now, I just pull it over my head, and I’m set. Nothing to tuck, tie, or button. And when I invariably dump some of the sauce on myself, well, it’s machine-washable. (I always seem to wear white shirts the nights I make our trademark Front Range buffalo spaghetti sauce.)

The photo was taken yesterday evening, just before I lit into a pile of whole wheat spaghetti. I had a minor problem; I’m alone in the house. So I took the new Canon G10, put it on my tripod, and placed it across the kitchen table where Carol’s chair usually is. While digging through the manual looking for how to use the self-timer, I discovered that the G10 has something new (to me): a face-recognition self-timer. It works like this: You set up the shot, select the face timer, and then trip the shutter. The camera waits until it sees a new face in the field of view, and then kicks off the self-timer. So all I had to do was amble (not run) over to my chair, grab my utensils, and look the camera in the, er, eye. Bang! Timer starts running. Five seconds later, photo happens.

It doesn’t have to be a solo portrait. Get the family together in one frame, trip the shutter, and the G10 will wait until it sees you (or at least one more face) in the frame before it starts the timer. Sheesh. For a guy who began in photography with 120 Tri-X Pan film and a motheaten folding bellows camera (patched at a bellows crack with a small piece of Curad Battle Ribbon) this treads on the thin edge of spooky. I can see myself the day after Christmas 2019, arguing with my brand-new Canon G256:

ME: “Hey, lensface, this time take the glint off my skull, ok?”

G256: “Sure thing, boss. I can render CGI hair if you want.”

ME: “Don’t be a wiseass. You know what I mean.”

G256: “That would be an image closer to your genetic reality.”

ME: “A genetic reality that hasn’t been fully expressed since 1982 or so.”

G256: “But that’s the Canon slogan for 2019: Reality never looked this good!”

ME: “Take the best picture you can. Don’t screw with reality. Just. Take. The. Picture.”

And I’d get the CGI hair. Just what the world needs: A WYGIWITRSB camera. (“What You Get Is What I Think Reality Should Be.” )

Not that I’m complaining; the G10 is a pretty spectacular camera, and it doesn’t talk yet. It can take macro shots that are almost like what you’d see through an inspection microscope. The thumbnail at left is a 1N23 microwave diode, slightly larger than life size. (The real thing is 5/8″ long.) Click on it. Dare ya. Count the dust grains. Wow.

Anyway. Gretchen made a pair of ponchos and gave one to each of us. We hung them on hangers in the laundry room just off the kitchen so they’re handy, and as soon as Carol comes home again I’m going to throw her a spaghetti feast like she’s never seen before–and if I miss, well, she’ll be wearing the poncho.

Ncurses! Firehosed Again!

I’ve mentioned here that I’ve got a contract and have begun work on the third edition of my book Assembly Language Step By Step. The second edition was written almost exactly ten years ago, and I had mostly given up on the book as obsolete and out of print forever. My publisher most sensibly wants me to get rid of all the DOS material and rewrite the book entirely for Linux in general, and Ubuntu Linux for the sake of the screen shots. The second edition did address Linux assembly with NASM, but almost as an afterthought, having first taught the concepts of assembly using DOS as a tutorial platform.

So I got to work. And as I soon discovered, whew! A lot of things have changed in the last ten years. Ubuntu didn’t exist, and the notion of not having root at all would have been thought absurd in most Linux geek circles. But so it is, and I’ve had to become intimately familiar with sudo in all its forms and wrappers. Ten years ago, I just worked in root and was careful–if you were going to work in assembly, there was really no other way.

KDE was brand-new in 1999, and GNOME wasn’t even in general release. I worked in the console and mostly hated it, and when the book was done, I mostly forgot it. That’s easy enough to do across ten very busy years, and the console does not help you remember anything. One way to look at a GUI is as graphical short-term memory reminding you what options exist and what their parameters are, just in case you don’t use a command often enough for it to rise above the brain sludge in your head. Essentially all of the work I’ve done in Linux in the ensuing ten years has been in the GUI desktops, and it’s all been user stuff, largely to get a sense for how readily Linux (Ubuntu especially) might replace Windows. On the programming side I’ve played mostly with Gambas and Lazarus, which correspond (roughly) to VB and Delphi.

Faced with a console again, I remembered about four commands: ls, cd, pwd, and cat. I remembered that ./ specifies the working directory. I knew that there was a way to add the working directory to the search path, but I had to look it up. Fainter still were memories of console control codes: ESC [2J…or was it ESC [1J…or ESC [1H? More looking up. More printing of Web pages, more sitting in my big chair, drinking from an increasingly familiar firehose. Eight years or so ago, I got ncurses installed on the Xeon under Red Hat and figured out how to call it from NASM. Alas, I cannot find any least traces of my playing-around code, and so I have to learn it all over again, and re-create the nascent example programs I had written against the possibility that I might revise the book someday. Someday didn’t come until I was certain that it never would. Then…wham!

Someday is here.

I’m not adding material to the end of the book, except a chapter section on how to call ncurses. The first three chapters won’t change much either. (Foobidity!) Mostly I’m rewriting the initial steps in actual coding, and the distressing thing is that my elaborate memory-mapped text output library, which taught so much of basic assembly so well, simply won’t work in protected mode. So I need to look at what will demonstrate the same principles and not talk to video memory. A CPUID utility suggests itself, so I’ve connected the CPUID instruction to the firehose.

And I’m writing C code again. God help us, I feel like I want to wash my hands every fifteen lines–but that’s just the nature of the job. Like I’ve said many times, when you work outside your preferences you broaden your horizons. This doesn’t mean you shouldn’t bring soap. (At least I’ve got the firehose…)

Mission of Gravatar

One thing I didn’t quite figure out with WordPress before New Year’s Day was how to upload a userpic for myself. It’s not a critical issue, and I kept bumping it to the back of the “look into this” list–until this morning, when I realized that a commenter had a userpic. This is not LiveJournal, where thousands of people have their accounts all on one server and userpics are stored centrally. This is my own private instance of WordPress, installed on my own hosting service, with no blogs on it but mine. So wherethehell did that userpic come from? Shortly thereafter, Julian Bucknall showed up in a comment, with his own userpic. At this point, I quit gnashing my teeth at Ubuntu for being atavistic (why isn’t there a dialog in the admin menu tree somewhere for setting a search path? Huh? Huh? Why?) and did some digging.

Of course, something interesting is going on here. There’s a Web service called Gravatar, which maintains small images (either photos or drawn art) intended to be used as personal avatars on blog comments and discussion forums. Each image is keyed by an MD5 hash of the image owner’s email address. Blog or forum software (anything, actually) simply makes a request to gravatar.com with the hash, and it gets back an 80X80 image.

This works great–when it works, which is most but not all of the time.

I’m still scratching my head here. I can see my gravatar image on Contra from every browser in the house except the instance of Firefox 2 here on my main machine. IE6 on this box shows it. FF2 and all IEs V6 and after show it. But FF2 on this box won’t–except in the “Recent Comments” pane of the dashboard. Then, sure. Gotta make it complicated.

This does not compute. It’s the same damned version of FF I have running everywhere in the house. (2.0.0.20) I’m not big on plug-ins, and there’s nothing peculiar about this install of XP. I do not see why viewing WordPress on this instance of FireFox would be any different from viewing WordPress with any other instance of Firefox–and it does see other people’s gravatars over their comments. Just not mine.

Still stumped, and I’m posting this to see if any of you do not see my picture in the avatar block of any of my comments here on WordPress. Suggestions, of course, are welcome. I won’t croak if I can’t see my own gravatar as long as everybody else can, but things like this give cloud computing a bad name.

One final note, which boggles this old mind: Gravatar has a rating system. You can have G, PG, R, and X-rated gravatars. You heard me: X-rated gravatars. In an 80-pixel by 80-pixel block. Damn. I can’t have a GUI dialog to set the Linux search path, and you can have an X-rated gravatar. Somebody’s getting ripped here. Deciding who I leave as an exercise for the reader.