Antisocial Story

When did Firebug get so terrible?

Firebug is one of those vital extensions for web developers and designers who use Firefox. I have been faithfully updating it whenever it whines at me to update it, which is usually every minor version, and it pretty much just works. Firebug and I have a romance of debugging HTML, CSS, and more recently the Javascript and JQuery that I use in Select Other, Processing, and some more recent custom development for Slight High.

The honeymoon ended recently…

A Tale of Two Chairs

It was the best of products and it was the worst of products. It was a tale of one man trying to find an affordable chair.

Several years back I shopped at WalMart and bought a card table with four folding chairs for around $50. I was really disappointed because I didn’t think a card table would be worth more than $30 or so. This story however is not about the card table, but about chairs.

JFS on Linux = Surprisingly Lossy

I set up a RAID media server a couple years ago, and decided to give JFS2 a try, since it’s touted as being fast and reliable across the spectrum of usecases. My setup is primarily write-once-read-many, for storing the terabytes of audio and video recordings I’ve made over the last decade for project ruori and the like.

Several weeks ago, the power went out for an extended period of time while I was away, and, while it was on UPS backup, it failed to shutdown cleanly and the power was suddenly cut when the UPS ran out.

When I brought the machine back up, the volume wouldn’t mount, so I ran jfs_fsck on it. jfs_fsck said that the journal was corrupt, and started block-scanning. It came up with a pretty big list of files and directories that were irrevocably corrupt. Parts of a few of them got linked into /lost+found, but the majority simply vanished.

Funny thing is, I hadn’t made any changes to these files in several years. I could understand if maybe some very recent FS updates were lost due to write-caching, but why did it lose track of these ancient files?

This reminds me of the rampant table corruption of MS-DOS’s FAT16 filesystem, which couldn’t keep track of a needle dancing on the point of a needle.

So, plus one for backups of backups, and minus one for JFS on Linux. I think I’ll be rebuilding the machine with ZFS-fuse. Or OpenSolaris, for that matter.


Steve Mokris is a developer at Kosada, Inc.

memset() vs. bzero() — Ultimate Showdown

There are a few functions used to zero out memory on most unix variants. memset(), bzero(), and calloc() are all a few such functions. calloc() isn’t very useful for clearing already allocated memory, so it won’t be appearing much more in this article. However, the other two are somewhat more interesting than meets the eye.

90% Easy, 10% Impossible

90% Easy, 10% Impossible Pie ChartFrom time to time, I get these insatiable urges to read what other Cocoa developers blog about. Sometimes they’re informative, sometimes they’re funny, sometimes they read like college textbooks, and sometimes they’re just downright terrible, but I read them anyway. It comes and goes in waves, every 2 or 3 months. A couple weeks ago, one such binge happened, and I started reading Aaron Hillegass’ critique of NSController (since I was hating it at the time, and wanted to feel justified in hating it). In the critique, the following statement was made:

QTKit QCheatKit

QuickTime LogoApple has been busily working to 64-bit-ify all of the frameworks they plan to continue supporting into the future (Snow Leopard and beyond). However, QuickTime is scheduled for some nice Cocoaification, so it didn’t get much 64-bit love. QTKit, the 64-bit impostor, pretends to be the 64-bit way forward, but unfortunately this is far from useful.

QuickTime is all C function stuff, rather verbose and boring. It’s also 32-bit only. The 64-bit front end on it is a framework called QTKit. However, 64-bit QTKit is little more than an impostor that secretly makes things messier during the 32-to-64-bit transition.

NSSound and Enumerating CoreAudio Output Devices

Cocoa’s NSSound provides a blindingly simple way to play back audio asynchronously, and even provides some metadata and control over how the audio is played back.

It uses the default sound device, by default. It gives you the ability to change the output device.

According to the documentation:

- (void)setPlaybackDeviceIdentifier:(NSString *)playbackDeviceIdentifier
 
Specifies the receiver's output device.
 
playbackDeviceIdentifier
    Unique identifier of a sound output device.

That’s it. What is the “Unique identifier of a sound output device”? What format is this “Unique identifier”? How do I get a list of the “Unique identifiers” of the available output devices on my system?

The Complete Idiot's Guide to Voter Fraud

Remember how in 2004 everyone was so freaked out about the terrific hackability of both the hardware and software of Diebold and other electronic voting machines? Well, the fuss has sort of died down about that. (Not that there was any reason for it to – there are no reports that the problems with the machines were ever adequately addressed.) And anyway, what vigilante dictator has the time or inclination to mess around with all that techno-crap involved in hacking a voting machine? Key-cutting takes all of 2-5 minutes per key, and firmware hacking involves learning boring things, like what firmware is. It’s enough to get a would-be crooked election worker or stealth saboteur to give up and go back to throwing Molotov cocktails at Planned Parenthood staff.

But don’t give up yet, all you burgeoning totalitarians out there! For here I shall reveal a much simpler (albeit slightly less efficient) method of voting fraud. Here is what I learned in my absentee-ballot-casting experience. Oh yeah, and dear internets: please use this for good and not evil. And also don’t use it at all.

Python's Flying Circus

Lately I’ve been working on integrating (or, more accurately, attempting to integrate) the Python scripting language into some plugins for an application we develop plugins for. We’ve wrapped many libraries with varying levels of success, so this one wasn’t going to be much different. Or, so we thought.

Some Wild MacBook Pro Checkerboard Graphics Corruption / Crash

Last summer Kosada purchased a MacBook Pro for the president of one of Kosada’s consulting clients. It’s been a great improvement over the old Dell laptop he was formerly using, and, though he was initially worried about whether he’d be able to grasp the new UI, he seems to have picked it up quickly, and he reports that he’s been loving it.

But this morning he called me with a rather odd problem:

“I hooked up my Treo and started syncing it, then walked away for a few minutes. When I returned, the screen was covered with a bunch of squares, and I can’t do anything.”