I Want to Say ‘He’ Looks Like You

…is the quote heard upon viewing my one musical TV appearance. ‘He’ of course, being me, but about 15 years previous or so. I was blathering about a completely different set of geeky things, wearing completely different clothes, and I am immune to hockey hair because I already had it–from 1987 to 1992. Sheesh, I didn’t even wear glasses then.

Just goes to show that if you miss one of my parties, you really miss out.

Uncompress DiskDoubler Files on OS X

If you are an old Mac hand, as, young and vital as I am, I seem to be, you may have odd old files lying around, possibly on floppies.

Assuming you can get them onto your Mac OS X system (floppies? How…1984), you may find they are unreadable. You might even find they are labeled “DD”. Stuffit Expander doesn’t know how to deal with them. However, it turns out you can trust that backwards compatibility on a Mac will actually rival Windows.

Go to ye olde HyperArchive, a site you may dimly recall from the mists of time. Find the line that says:

Abstract of dd-expand-40.sea.hqx 181K (12/20/1993) Download

And click the “Download” link. Yes, the file date is 1993, and yes, that’s a 181K file. That app will browse your filesystem to this day and expand any DiskDoubler archive. This is what we used before hard drives were cheap. It used the LZW compression algorithm, apparently, which is why open source tools don’t decode it. It is now basically abandonware by Symantec. Thanks, Symantec.

But anyway, this file from 12 years ago opens and runs just fine in emulation, and it managed to get a bunch of my old files recovered.


Simplication in Action

Simplicate (SIM-pli-kat), v.
To make more complex by attempting to simplify.

So can you read this mess?

||{B,t,w=4,s=padding:10px} !SyntaxCMS Engineering ||{B,t,w=4,s=padding:10px}Sandy Smith||{s=padding:10px}Establish SyntaxCMS RoadMap||{c,s=padding:10px}W,C||{c,s=padding:10px}O||{c,s=padding:10px}O||{c,s=padding:10px}O||
||{s=padding:10px}Aggregate and centralize features wish list, and procedures for all staff to contribute||{c,s=padding:10px}W,C||{c,s=padding:10px}O||{c,s=padding:10px}O||{c,s=padding:10px}O||
||{s=padding:10px}User Documentation||{c,s=padding:10px}B||{c,s=padding:10px}C v1||{c,s=padding:10px}C v2||{c,s=padding:10px}C v3||
||{Rs=border-bottom:1px solid #000,s=padding:10px} Re-usable templates, Administrative ability to select template to use for a specific section ||{c}C||||||||

Neither can I. Supposedly that’s table code, but it’s in Wiki-language. Now, it’s funny, because it implements things that are already in HTML, but because the Wiki-authors were too scared to try to filter out cross-site-scripting attacks, they came up with this simplified markup language. However, their users wanted to do everything you can with HTML. So what do we get? This horrible, unreadable piece of crap that is far worse for the user than just using a frickin’ table like I intended.

Mind you, I have years of experience, but it took quite a bit of hunting to figure out why adding a row didn’t work correctly–an hour, in fact. Maybe I was having a blond moment, but there are real, live idiots who run Internet Explorer with no virus protection and have their geek friends come over to install Office who will be using this application. So in an effort to simplify things, the Wiki-authors made it more complex.

And, of course, they made it so any creep who wants can come along and automatically replace the content with German porn.

So basically, Wikis are only useful in intranets anyway (which eliminates the worry about cross-site scripting attacks, unless you have hired a bunch of porn spammers, in which case, you should be fired), and only then if you use the absolute, most basic features, or find one that allows HTML.

For jebus’s sake, don’t try to mix the two.

Good News: Royal Mail Edition

Looks like almost two centuries after the US government muscled out private competition in letter carrier services, such as Lysander Spooner’s American Letter Mail Company, the UK may offer up competition to Royal Mail a full year earlier than previously planned.

In fact, this is part of a larger European Union policy of opening up competition to national mail services. It at first seems strange that the EU should be fostering competition, as they are known for overweening bureaucracy and propping up France’s agriculture and aerospace markets with anticompetitive measures, but in the larger, original mission of the EU, it makes sense. Having letter mail still being handed off from government monopoly to government monopoly is an atavism in the age of greater political and economic integration.

A cynical part of me (OK, so pretty much most of me) thinks that this is an easy end-run around the problem of a declining need for non-parcel post. With DHL and FedEx delivering everything from furniture down to legal documents and e-mail making the personal letter an anachronism, there is not going to be enough work for the postal infrastructures devised in the 19th century. So rather than take the political heat for directly cutting those services and turning out legions of postal employees, the EU is providing a fig leaf of competition so governments can point to the big, bad market as the reason they’re having to sack Kevin Costner. (Side note: I searched for a better-known example of a postal employee and thought I’d use Mr. McFeely (“Speedy Delivery!”) from Mr. Roger’s Neighborhood, but it turns out the most popular postal character for children in America is in fact an employee of a private package delivery service.)

Either way, this should improve and reduce the cost of postage in Britain, unless the EU and/or Labour come up with onerous new regulations to make things less efficient than they were. But one can hope, and that’s more than we have with the alleged free-marketers in place in the US.

The Pain of Types in PHP

The only way to check an uncast scalar variable in PHP for being truly non-empty (i.e., not being null or an empty string (''), but allowing any valid boolean, integer, float, string, or decimal, is:

'' !== $x && null !== $x

A caveat to this is you’ll have to detect arrays separately, because a garbage array could be array(), array(''), array(null), or even array('', ''). At some level you just have to accept that as long as you document what a method or function expects, whoever uses it will have to check that stuff themselves or expect garbage results.

In a strongly typed language, all this would be detected at compile time, but then again your development time would be longer and you couldn’t grab just any newbie off the street and throw them at it.

Unfortunately, newbies off the street generate garbage, so I end up either wanting an expensive (in terms of processing time) function that checks if anything I get is either a non-empty scalar or a non empty array of non-empty scalars (or arrays that meet the same criteria). Simpler just to have strong types that will produce a nice, ugly error if your function expects an integer and you pass it a string.

Happy Birthday, Bird

And in that conversation with the aforementioned Buffi, I realized that today is my cockatiel Squeak’s arbitrarily-decided birthday. I actually got him some time in April, but it had been between 11 and 13 weeks since hatching, so I picked February 15 as a likely hatch-date.

So, rock on you pro-tech, anti-pen-and-paper anarchist, noisy, cute birdie:

No, it's German: 'The Pen, the!


For various and sundry reasons, I had lost touch to varying degrees with some of my friends–some for only a year or so and others for nearly a decade. Fortunately I’ve managed to locate a couple of the better ones, and I love how I have cool friends. One such is my friend Buffi the cellist, who after some typical running around, I managed to talk with tonight.

To wit, I present Buffi J, with her cool purple electric cello:


(click to see the full size)

She had just played a Rocky Horror tribute show before talking to me. As I said, cool.