Jeff Duntemann's Contrapositive Diary Rotating Header Image

June, 2010:

Review: The Calibre Ebook Management System

I tried Calibre when it first came out a little over two years ago (v0.4.83) and was reasonably impressed. It did everything it said it did, reliably and without much fuss. Alas, I didn’t test most of its features back then, especially its file conversion modules. I’ve done a lot more in the past week, and overall I’m pleased.

The current version is 0.7.6, and author Kovid Goyal posts updated releases frequently, as often every couple of weeks. That’s amazing for a GPLed app, but Calibre itself is amazing in its way. If you install no other ebook reader or manager, get Calibre. It’s a Python app, and can be downloaded for Windows, Linux, or Mac.

There are three general aspects to Calibre:

  • It’s a sort of jukebox for ebooks: a simple database manager that allows you to browse your ebook collection, search for individual titles, and edit metadata by individual title or in bulk. It can send books to any of a growing list of hardware readers.
  • It’s a collection of import/export modules behind a GUI, allowing you to take an unencumbered ebook in one of a long list of formats, and export it to a different format out of that same long list.
  • It’s an ebook viewer that can render ebooks for reading in most popular formats. When a format isn’t supported, Calibre attempts to launch the associated app to render the book.

All three aspects work well, though I ran into some problems with format conversion. I tested Calibre by importing basically every ebook I have on disk, which at this point isn’t all that many. I still don’t have a portable reader device that I like, and I don’t read a lot on my PC display. So I went and got a bunch of things from Project Gutenberg (including all the pre-1923 Tom Swift Senior books) plus some religion journals and other PD oddments from Google Books, and ended up with about 150 titles.

Calibre copies imported ebooks from their original locations to a separate directory, and it operates only on those copies, leaving the originals alone. (This means that the space your library takes on disk will basically double, though I doubt that this is an issue in an era of 2 TB hard drives.) It controls the filename of each file, and imposes a filename by running a regular expression against the title and author name in its database. Change a book’s title in the database, and the filename changes in sync. Delete a book, and only the imported copy in the Calibre directory goes away. Your originals are not touched.

Once you import the ebooks you own, plan on spending some time editing the metadata. Calibre uses a regular expression to extract an author and title string from each file, and although you can change the regular expression if you want, there’s no broadly accepted standard for ebook filenames, and you’ll find that many of your books have the author name in the title field or vise versa irrespective of the expression Calibre uses. You can specify a series name and number for books in series; e.g., Tom Swift, Sr., Volume 12. There are additional fields for publisher, ISBN, pub date, and comments, and if a cover image is present in a book, a thumbnail will be displayed. There is a tagging system with a tag manager.

Sorting out the metadata was a fair bit of manual labor, even for only 150 books. You can do updates on several books at once; for example, I highlighted all the Tom Swift books and set the Author field to Victor Appleton in one operation. If you have many hundreds or perhaps thousands of ebooks (and I know people who do) good luck; you’ll need it. There is autocomplete on fields and that helps, but there’s an irreduceable amount of keystroking that has to happen to get the most from the database browser.

The ebook viewer is as good as I’ve tested so far. It renders almost every ebook format I’ve ever heard of, including the comic book formats and PDF. (You can configure it to launch an external app to handle a specific format if you choose; for example, I open CBZ and CBR files with Comical.) For EPub and MOBI files, at least, the reader automatically maintains a bookmark to the last opened location in the book, and when you reopen a book, the cursor goes right to that bookmark. (This is not true for LIT, PDB, , and LRF books.)

About the conversion modules I have mixed feelings, and the problems are probably not all with Calibre. I converted my EPub version of the Beyschlag Old Catholic history to LRF, MOBI, and PDB. Results were so-so. One problem with the LRF export was that the font size was inconsistent: Parts of the text were rendered in larger type than others, and I can’t tell (yet) if that’s an issue with Calibre’s LRF viewer module or with the conversion process from EPub to LRF. The conversion to PDB stripped out all the formatting, including italics, and that does appear to be a problem with Calibre. MOBI kept the italics but didn’t center the author lines. Calibre seems happiest dealing with EPubs, and conversion from other formats to EPub works better.

Note that Calibre doesn’t deal with DRM-encumbered files at all. That’s fine with me, as I won’t buy DRM, but you need to keep it in mind if you’re looking to read DRMed books on your PC; Calibre is not the item for that.

I also installed Calibre under Linux, and I moved my entire Calibre database over to the Linux machine by simply copying the Calibre books directory to a thumb drive, and then copying the directory from the thumb drive to a folder in my home directory and telling Calibre to use it. As best I could tell, there were no functional or performance differences between the Windows and Linux versions.

There isn’t a lot of downside to Calibre. Opening and rendering an ebook on the internal reader can be slow if it’s one of the more sophisticated formats. (Txt and .rtf files open very quickly.) The viewer doesn’t downsample cover images very well when displayed at less than their native resolution, though that’s a quibble. (Reduce the display size on my Old Catholic history epub and you’ll see what I mean.) Adding bookmarks seems to take more time than it should, especially on longer books. The program crashed once when I had a lot of windows open. (These included Thunderbird 3, which seems to be causing a lot of weirdness recently.)

Calibre doesn’t help you create ebooks; that’s not what it’s for. And some issues with the conversion modules are going to keep me looking for reliable ways to make MOBIs, LRFs, and PDBs out of my EPubs. However, in terms of an ebook manager, it’s just short of stellar. The viewer modules work reasonably well, particularly with files created “natively”–that is, not converted from one format to another.

Basically, the ebook business is still mighty young, and I’m not surprised at how random things still are. Among ebook-related software products, Calibre is the least random of anything I’ve yet tested, and at this crazy stage of the game, that’s high praise.

Highly recommended.

How Old Am I Again?

58 today. (I checked.) However, some weeks ago, when Carol asked, “What do you want for your birthday?” I had to think a little bit to remember which one it was. Am I 57? Or 56? Oh yeah, I’m 58. Wait…not yet. 10-2=8. I think…

This isn’t a classic 50s moment. I recall the occasional mental strain of remembering how old I was back in my late 30s. Am I 36? or 37? Same deal in my early 50s. 52, 53, well, they all run together. Sometimes the remembering is easier: Nice round numbers like 50 and 55 come easily to mind. 55 had the memorable cachet of granting me senior discounts at places like Denny’s. I’m guessing that when I’m 60 I won’t have any trouble.

It was easier knowing how old I was when I was a kid. Part of it was a constant if poorly understood preverbal ache for the privileges of age; more freedom, bigger toys. When I was 10 I was desperate to be 11, and when I was 11 I was desperate to be 12. If I’d known what was waiting behind 13 I might have turned around and been happy to stay 12. I liked 12. I hated 13. And 14. And 15. And 16. 17, now…

Like them or not, the ache made sure I always knew which year I was. However, once you’re in your 20s, the things you want aren’t strongly tied to age, and a lot of the birthday magic just goes away. Besides, much of the American Dream was mine before I even turned 30: I had a cool job writing computer programs, an active SF group that met twice a month, several SF stories in print, a pretty white house around the corner from the Cleavers, a great dog who could dance on his hind legs, milk cartons full of tube sockets, and a loving wife who looked like a supermodel and was my best friend. I lived as men might choose, and mostly what I wanted for my birthday was to keep what I already had.

So far so good. I now have an amazing house with CAT5e in the walls, twice as many tube sockets, four dogs who can dance on their hind legs (though one of them still needs a little prodding) a nerd gang I can hang out with, computers stacked like cordwood, and the love of a brilliant and interesting woman who has remained my best friend past forty (count ’em!) birthdays, and was always there to keep me aimed in the right direction when the inevitable bad patches turned up.

58, heh. It is a happy birthday. Thanks to all of you who sent best wishes and wrote on my Facebook Wall. You’re all a big part of the reason I don’t mind being 58. Oh brave and always new world, that has such people in it!

Odd Lots

Daywander

hatchetman.jpgWell, as a fair number of people have told me, the logo Carol and I saw the other day was the “hatchet man” icon of Insane Clown Posse, a hip-hop duo from Detroit that I’ve never heard and probably won’t. Key to finding the figure online is knowing that what he’s holding isn’t a map or a piece of paper but a hatchet. (In fact, it looks a lot more like a meat cleaver.) There’s also a girl-version of the icon, with a ponytail, but what we saw on the gate of a pickup truck was almost precisely what I show above left.

We had a relatively small gathering last night, but that was all right, as there were few enough of us to all sit on the two couches and talk about everything from dogs to SF to classic aircraft of the Strategic Air Command. We spoke of that lunatic Lt. Col. Bud Holland, whose lifelong ambition appears to have been to roll a B-52. (Detailed discussion here.) He tried, he failed, and you can see a video of the results here. Eric Bowersox and Sabrina Hoyt brought some Mountain Dew Throwback, made with real sugar instead of corn leavins’, and the original product artwork on the cans. There were intermittent thunderstorms all afternoon, but we had enough time between microcells to grill a batch of smoked brats and Ranch Food Direct burgers. By sheer coincidence both Mike Reith and Peggy Sargent brought cream puffs, and it had been so long since I’d had one that I’d mostly forgotten what cream puffs were. That memory came back in a big hurry, heh.

Alas, the thunderstorms prevented me from getting any Field Day time in yesterday, and with less than an hour remaining in the contest and yet another thunderboomer passing overhead as I write, I doubt I’ll get any time in this year at all. I created what I had hoped to be a low-profile inverted vee, and in truth, when I told people I had antenna off the back deck, several people looked and just didn’t see it, when when I was pointing right at it. It’s designed to be portable, and is attached to the deck railing with bungee cords. I’ll try to get a couple of days’ contacts with it, then roll it up and put it back in the garage.

There was more bear action yesterday. Late afternoon, our doorbell rang, and it was our new neighbors from across the street. Heather and Glen had gone for a walk with their two small boys, aged two and four, and left their garage door open. When they returned, sho’nuff, a bear was in their garage ransacking their garbage can. Heather asked to bring her boys inside, but about then Glen came back and said he’d driven the bear off by throwing rocks at it, after which it vanished up the street and ran between two other houses. (Glen’s an Army officer. Spend some time in Iraq and bears lose a lot of their mystique.) I’m guessing it was the same bear I saw yesterday about lunchtime, eating dog food down in our gully near our back door. It seems a little too comfortable with people and a little too willing to be out and around during the day to stay here, and if it comes back too much we’re going to have to put a call in and see if it can be relocated.

Lots of leftovers from last night, and I’ll be grilling Ranch Food Direct burgers again this evening if the rain will just stop for half an hour. The West is getting soaked this year. Our local reservoirs are full, and western Nebraska’s massive Lake McConaughy is refilling (after a 9-year drought that the doomsayers warned would be permanent) at a rate of two feet per week. When we first saw it we marveled at the broad sand beaches, which were not in fact beaches at all but recently exposed lake bottom. It was about 30% full when we first saw it several years ago. It’s now over 80% full and the water level is rising fast. (Note the end of the curve on the graph, and then see this graph to get a sense for the insane amount of water flowing into it this year.) We hope to take a long weekend up there before the summer’s over.

This coming week should be fairly peaceful. I intend to do some fiction writing and perhaps even finish an experiment I have on the bench downstairs, concerning how well IN23A microwave diodes serve as AM BCB detectors. What I know of detector theory tells me that such detectors should be socko. We’ll find out–that’s what science is for.

Ursa Muncher

BearUnderTree2.jpg

I got home from shopping for tonight’s nerd party an hour or so ago to find a phone message from Collette next door. She told me that there was a very large bear sitting in the trees behind our houses, eating a bag of dog food. I grabbed my V530 and snuck out the back door. Well, yup: There he was, about forty feet from our lower deck, with his nose stuck in a huge honking bag of Old Roy or something. Crunch, crunch, crunch.

Wow. We’ve seen bears here a time or three, though generally at dawn or dusk. Pete Albrecht and I were hanging out on our back deck a few years ago, talking astronomy about 11:30 PM, when we heard some crunching down in the gully. We looked over the deck railing, and there he was, looking up at us. He’d been harvesting the summer’s choke cherries, I’d guess. One leg of my improvised Field Day inverted vee terminates down there a few yards from the bear, and I was doing that only yesterday.

We went back and looked again when Carol got home a few minutes ago, but he was gone. So was the dog food bag–so I guess he got tired of being stared at, packed up his Old Roy, and went elsewhere.

Don’t know whose dog food it was, but in any event, better the dog food than the dogs.

Query By Sketching

MysteryLogo.jpgEarlier today, while Carol and I were out on an errands run, we were stopped for a light behind a beat-up pickup truck. On the back of the truck was an emblem on a sticker, and Carol asked me what it was. And in truth, I don’t know, though I’ve seen it a time or two before. It looks like a band logo, though not of any band that I’ve ever listened to.

It was a right profile of a cartoonish man running, with his hair streaming in the wind. In one hand he’s holding a sheet of paper in front of him. The whole thing is in red, inside a red circle. There’s no text of any kind. (The figure is filled in with red; my sketch above is in red Sharpie. Also note the painfully obvious: I’m a words guy, not a pictures guy.)

The challenge intrigued me when I got home. How would I look something like that up? I tried text descriptions in Google Images: “little red guy running”, “red logo running man,” and so on. Saw lots of interesting things, but not that logo. I didn’t spend a great deal of time on it and gave up after a couple of minutes.

We don’t really have a search system for pictograms, and we probably don’t need one all that badly, but it made me wonder how we would make the attempt. Text descriptions? “Right-side profile of cartoon man running, holding a sheet of paper in front of him. Enclosed in circle. Color solid red.” Or perhaps a sort of Visio interface where we could drag across cartoon fragments of describable things and drop them into a rough sketch that the computer could compare against images in its database. This would require machine abstraction, but would be useful for identifying more than just band logos.

As with “query by humming” for music that sticks in your head, it’s a difficult problem computationally, and not as useful. My guess is we that won’t do it, not because we can’t, but because there’s no payoff. And thinking about it for a few minutes reminds me how really really far we still are from genuine “strong” AI.

In the meantime, does anybody know what the little running red guy represents?

Those Gnarly Duntemann Brothers

DuntemannBrothersCropped500Wide.jpg

A woman contacted me recently who is evidently a fourth cousin; we have a set of great-great-great grandparents in common. She sent me a scan of an old undated photo and told me that the second man from the left was her great-great grandfather, Frederick Duntemann 1846-1927. She thought that one or more of the other men were Frederick’s brothers. What did I know?

HermanDuntemannHeadshot.jpgWilliamDuntemannHeadshot.jpgNot much. But it’s an interesting sort of detective work, this family resemblances stuff. I do know that my great-great grandfather Heinrich Duntemann 1843-1892 had four brothers, all of whom long survived him, who died of an infection from a farm injury at 48. I have photos of two of his brothers, William Duntemann 1849-1921 (left) and Hermann Duntemann 1859-1933. (right). William’s photo was taken when he was in his sixties, as best I know. Hermann’s was taken when he was 26. If I had to guess, I’d say that the leftmost man in the group photo was William, and the rightmost was Hermann. The remaining man may have been Louis Duntemann 1851-1928. I can’t tell, as I’ve never seen a photo and know very little about him.

Well, they certainly look like brothers to me, and in fact far left and third from left could almost be twins. The guy on the right seems like a shoo-in for an older version of Hermann. That said, I’m not sure how fair it is to say: “This is a photo of the four surviving Duntemann brothers, circa 1920.” Hermann left no descendants, but at least a hundred people descend from the other three brothers. If I say that that’s what it is, all those people will likely take my word for it. (I’m the de facto family history expert, simply because I know a little and everybody else knows nothing.) It would be great to have such a photo of the four brothers, and maybe I do. But I think I have to be real damned careful about saying so. Uncritical acceptance of expert opinions is dangerous, when the experts know only a little more than everybody else but still want the prestige of expertise.

So I will lead by example: These guys may just possibly have a greater-than-zero chance of perhaps being your great-great (and perhaps greater) grandfathers. It is impossible to know. We might wish it were otherwise, but wishin’ don’t make it so.

Daywander

newfawn.jpgIt’s fawn season again, and yesterday we saw a mother deer leading a fawn that was no bigger than Jackie, if perhaps a little taller. Figure that: A deer the size of a bichon. The poor thing can’t be more than a day or two old, and it’s wobbling unsteadily around the First Curve on Stanwell St., where teenagers roar by in their parents’ elephantine Escalades and probably wouldn’t even notice if they had small animals wedged in their grilles. (We’re mostly thankful that they don’t miss the curve and plow through my office window.) Last night about 8 or so, mom had gone off somewhere, and junior was simply lying on our neighbor’s mulch, about six feet from the pavement. It wasn’t as obvious as it could be, but there are much better hiding places in the area. I guess we can think of it as evolution in action.

BrianCarolRingDazzle.jpg

Our nephew Brian was out for a few days last week, and we all went down to the Garden of the Gods for a vigorous walk around the rock formations. I took a photo of Brian and Carol and something very weird happened: A dazzle from one of Carol’s rings just happened to hit the camera the moment the shutter snapped. Green Lantern must have that problem a lot, but this is the first time I’ve seen it from Carol.

My low-key inverted-vee antenna should be up and running off the back deck by Field Day, and will be 32 feet on each leg. That will get me the 20 meter band and up, and given that I’m feeding it with a short run (~10′) of open wire line through an MFJ Versa Tuner 2, I may get 40 as well. I’ll certainly try.

I’m still testing EPub readers. This morning, at Jim Strickland’s noodging, I installed the Barnes & Noble Desktop Reader. Not a bad item, but as with all the readers I’ve tested so far, doesn’t quite get it right. The presentation on my test files has been pretty good so far, but this time the software does use the title tag, and thus puts up only half of the Beyschlag ebook’s title. Also, it puts my test books up in two-column format, and I still haven’t figured out how to control the column settings. Neither of my two test books with cover images show their covers as thumbnails in the library pane. To its credit, the reader renders PDF documents pretty well, though of course there’s no metadata and thus no display of title or author.

Most annoying is the User Guide button, which brings up a longwinded sales pitch but no user guide. I assume you have to sign up for a B&N account to get the user guide, and I will at some point, but probably not today. I do understand that the product is designed to work tightly with B&N’s online bookstore and won’t slam them too hard for that integration, but basic “here’s how to do it” information should be there long before the sales pitches begin.

Nobody’s perfect, but the winner so far is FBReader, even though it inexplicably displays my copyright notices in ancient Greek. We’ll get there. Just not as soon as I’d like.

Coding vs. Compiling EPubs

It’s always unsettling to admit that the other side has a point, but it’s good practice and often absolutely necessary. I am the VDM guy, after all, and I’ve never been one for hand-coding what can be generated automatically. As I’ve mentioned here earlier, an awful lot of people take their text and hand-code an EPub framework around it to create an ebook, which I found borderline ridiculous…until this morning. Now I think I know why they do it.

It’s simple: Our EPub compilers have a very long way to go.

The process of creating EPub-formatted ebooks can be done two ways: Write your own XML/XHTML by hand, or let a utility of some sort generate it for you. I’ve done both in recent days, and I was bowled over by the conceptual similarities between that and the gulf between writing a program entirely in assembly and writing it in an HLL like C. I’ve done a fair bit of tracing through assembly code as compiled by GCC, and I’ve been very impressed by the cleanness and comprehensibility of the assembly files it produces. GCC is one helluva compiler, as is the Delphi compiler. (And that’s where my low-level code tracing experience begins and ends, mostly.)

Well, I’ve been spoiled. Compared to GCC (or even Delphi, which is now 15 years old, egad) the EPub format is a babe in diapers: poorly understood, still growing furiously, and, as often as not, smelly as hell. All of that will pass. (I remember my nephew Brian in his diapered era; he is now 27 and an investment banker.) But in the meantime, well, the immaturity of the EPub technology must be dealt with.

I did another, larger test case EPub yesterday. I took a 15,000-word article from an old theology journal, extracted the text via ABBYY PDF Transformer, cleaned up the text (which was in fact pretty damned clean to begin with; ABBYY does a superb job here) and loaded the text into the Atlantis word processor. Without a great deal of additional editing, I exported it to an EPub file. That file may be downloaded here. (40K EPub.) There are no images, and all the text exists in a single XHTML section. It’s about as simple structurally as an EPub can get, and what you see is just as it came out of Atlantis. I did not tweak it at all post-Atlantis, neither manually nor in Sigil. (Note well that Atlantis can export EPub, but it cannot import EPub files, nor display/edit EPub XML/XHTML.) I then took that file and loaded it into Sigil, added a cover image, and split the text into two sections. You can find that file here. (1 MB EPub.) Both of these files pass EPubCheck without errors.

The Atlantis EPub renders (reasonably) well in all the local readers I have here, as well as the online Ibis Reader. It’s small (only 40K) and if you can do without a cover it’s a perfectly reasonable ebook. The Sigil copy does not do nearly as well. The online Ibis Reader refuses to render any of the images at all, including the cover image, the copyright glyph, and the generated images of the two grapevine glyphs that I inserted into the title page as decorations just to see what would happen. The copyright glyph issue is disturbing for legal reasons, but worse, it’s a standard character with a standard HTML encoding, and should be renderable irrespective of font. Ditto Azardi, which renders the Atlantis EPub well but not the Sigil copy. Over and above Azardi’s leaving out all the images (including the copyright glyph) the Sigil copy of the EPub loses what little formatting it had in the Atlantis EPub. None of the centered text remains centered, for example.

There are some additional weirdnesses in the readers themselves: FBReader renders both files well, but (weirdly) the Go Forward button moves the reading window toward the beginning of the file, and the Go Back button moves the window toward the end of the file, perfectly bass-ackwards. Ibis displays the title three times, which is overkill. FBReader handles the images just fine, but renders the copyright notice for both versions in Greek letters, sheesh.

These rendering issues are probably reader failures, since the files themselves are EPub-compliant. However, the autogenerated XML/XHTML code is often obscure, and in one case, at least, dead wrong: The title tag includes only the first line of the title. I understand that the title text is split into two lines, but I was never asked to define the text within the title tag and can only assume that Atlantis picked the first Heading 1 style it found and plugged its text into title. (The metadata for the title was stored correctly, and all readers displayed the full title text. I don’t think that the title tag is used by the readers. An empty title tag is perfectly acceptable to EPubCheck.) The gnarliest part of the compiled EPub (in both versions) is the CSS. Atlantis took the page format settings and translated them into generically named CSS classes, which are accurate representations of the word processor settings, but not easily identifiable and in no wise good quality CSS.

This isn’t insurmountable, and most of the problems I’ve had so far can be blamed on incomplete and buggy reader apps, but it shows how young a business this is. The hand coders still have the edge, and I’d be better off on the readability side creating the ebook text in a WYSIWYG HTML editor like Kompozer or Dreamweaver and hand-coding the CSS myself. That is, however, precisely what I’m trying to avoid. Sooner or later, Atlantis or something like it will offer pre-written CSS style sheets designed specifically for text intended for EPub export. That will help a great deal. In the meantime, some manual futzing is unavoidable, and my opinion of Sigil has been greatly tarnished. I may have to try something else on the EPub editor side; suggestions always welcome.

And the readers, yeech. Don’t get me started. I may have to buy an iPad just to see what my own damned books look like!

Odd Lots

  • The rate of toxoplasmosis infection in a given nation appears correlated to the level of neuroticism in that nation. I’ve mentioned toxo before, but it appears that we have better numbers now, and that the UK is nowhere near 50% infected, as the source I quoted in 2003 implied. France, well, now…
  • Here’s a nice piece that explains why the atmospheric CO2 measurements taken atop Mauna Loa are accurate. And here is NOAA’s explanation of how they do it.
  • Bruce Baker sent a link to an article describing how a few scraps of odd film allowed some dogged engineers to re-create the long-lost pallophotophone technology (later known as RCA Photophone), and by doing so give voice to 1920’s recordings of Thomas Edison speaking affectionately about his friend Henry Ford.
  • This weekend is ARRL Field Day, in which ham radio ops head out to the hinterlands to see how well they can get up to radio speed from a dead stop, using portable (not mains) power, from a place not previously set up for radio gear. I’ll be trekking out to my back deck and working the world on an inverted vee, draining 829Bs (Diet Mountain Dew over ice in peanut butter jars) Saturday afternoon, and showing all my geek friends how it works that evening during one of our semiregular geek parties.
  • We can look forward to the Roman Missal on iBooks soon. But will the priest process down the center aisle holding an iPad over his head?
  • I’ve been testing Windows-based EPub-capable reader apps for the last week or so, and guess what: They all suck. Bigtime. Why is it so hard to render reflowable documents that are basically HTML-in-a-sack?
  • If you’ve seen The Music Man as often as I have, you’ll remember how there’s trouble in River City, because the kids are memorizing jokes out of Captain Billy’s Whizbang. Well, I’d long thought that Meredith Willson had made it up, but not so: I found a scan of a 1921 issue of Captain Billy’s Whizbang (which is now in the public domain) and put it up in my pub directory so you can see it too. (Note: It’s a 15 MB .cbr.) My reaction? It’s not very funny, but in a world without Lileks, I guess people laughed at whatever they had on hand.
  • Ok, there’s a little profanity in it (like that’s unusual in Slashdot comments?) but damn, I like this one.