Deadprogrammer.com is Moving

Once again instead of writing something good for you to read I am changing my blogging software. Movable Type was a little better than Livejournal, but looks like WordPress is the right tool for me.

It will take some time for me to fix the feeds, lins, etc, so bear with me for a while.

Side Effects Of Programming

“Nelson: Ah, he’s the greatest showman since that kid who eats worms!
Kid Who Eats Worms: My 15 minutes of fame are over!”
The Simpsons, Episode 3G02

The post about Durian seems to have been the most popular one in the recent history of deadprogrammer.com . This once again proves that eating gross things is entertaining to the masses. To prevent the surging popularity of my blog I absolutely must write a little bit about something that I almost never write about. Programming.

My co-worker who could not understand why he could not increment a variable in XSLT found an amazing piece of technical writing in an O’Reilly book about XSLT. Here it is:

“Although these XSLT variables are called variables, they’re not variables in the traditional sense of procedural programming languages like C++ or Java. Remember that earlier we said one goal behind the design of the stylesheet language is to avoid side effects in execution? Well, one of the most common side effects used in most procedural languages is changing the value of a variable. If we write our stylesheet so that the results depend on the varying values of different variables, the stylesheet engine would be forced to evaluate the templates in a certain order.

XSLT variables are more like variables in the traditional mathematical sense. In mathematics, we can define a function called square(x) that returns the value of a number (represented by x) multiplied by itself. In other words, square(2.5) returns 6.25. In this context, we understand that x can be any number; we also understand that the square function can’t change the value of x.

It takes a while to get used to this concept, but you’ll get there. Trust me on this.”

(full text here)

The quote that I highlighted in bold absolutely gets me. Yeah, that’s one good side effect. I get the feeling that XSLT was committee designed with the specific purpose to make life miserable for programmers. Also that committee must have had some really good stuff to smoke.

Update
Uh, see, now this is what happens when you try to write programs without actually understanding computer science fundamentals. I did not realize that XSLT was functional, not procedural. Like most mediocre programmers out there I was not exposed to much functional programming (I did try to teach myself Lisp, but quickly gave up). Having to do a lot of SQL(which is near-procedural) over the years improved my understanding of functional programming, but not enough to realize what the XSLT book was talking about (reading it from beginning would have been helpful too). Now hardware XSLT accelerators, which made me laugh when I first heard about them, make sense too.

iPhoto Retro or John Sculley’s Gift To The World of Photography

I collect 20th century technology antiques. They are not expensive and don’t take up much space – perfect for my cubicle museum.

My shelf at work houses a small, but growing collection of monstrous early cellphones. There are a couple of gigantic vacuum tubes (some from an early Univac), a core memory plane, a multiprocessor unit from an Amdahl mainframe, a weird hardwired logic unit from a forgotten computing machine. My latest purchase is rather interesting – the first consumer digital camera.

A $700 piece of equipment in 1994 Apple Quicktake 100 cameras sell for just a few bucks on eBay. I first saw one mentioned in this outstanding livejournal post. This guy’s camera still had some images in it which provided a weird time tunnel into some office party in 1994. I guess the people in the photos were celebrating extravagant Mac purchases.

I bought two cameras on eBay for just a few bucks each, and one came with a cable and a floppy with PC software. Not even hoping that it’d work I plugged in the serial cable, installed the software on my Win 2000 machine, turned on the camera and ran the program. It worked the first time.

Here are the two Apple QuickTake 100’s that I purchased. I bought two so I could take stereo images and view them on my 100 year old stereoscope. In a couple of years I think I’ll be able to buy a couple of iPod photo thingies for a few bucks and do what this guy did.

Times Square at night in full .3 megapixel power (compressed to 500 width).

Times Square at night with lower resolution option turned on

Snow storm in Brooklyn

Considering how difficult lighting conditions were the results are respectable. Usability wise these cameras are lacking. Even though they look like those binoculars from Star Wars movies, they have a very nasty lens cover that is very hard to open without leaving a nice fingerprint on the lens. Taking portrait orientated pictures is rather hard.

So here I am, paying tribute to one of the last Apple products of John Sculley’s era at Apple (note how Apple CEOs are arranged in a timeline at Wikipedia – just like kings). I wonder if Steve Jobs will ever consider making an Apple digital camera. So far the fate of Apple Newton shows that to Jobs anything ever touched by Sculley is taboo.

Creative Time Wasting 404

Dear readers, let me vent some useless thoughts about HTML and share the fruit of my procrastination with you today.

It occurs to me that HTML code has finally become a third rate citizen of the World Wide Web. Back in the day, there were horrible WYSIWYG editors that mangled poor HTML, raped it by adding their own non-HTML tags and in general produced bloated and unreadable mess. They still exist today. But now most sites are script generated, so rarely do you see clean, beautiful and handcrafted HTML code when you view the source.

One of the worst offenders is Microsoft, of course. It gave FrontPage, an unholy product of a dying company called Vermeer Technologies (I’ve read in this book that the price of FrontPage was huge and number of copies sold – miniscule) an eternal life as a part of the Office Suite. Other Office programs always produced horrendous HTML. And now, they don’t even want developers to touch HTML directly. They added extra layers – Server Controls (again, plans for VTI extension and FrontPage come to mind) and Web Forms to isolate them from the language that can be learned in 20 minutes and mastered in a few years.

I can’t say that positive things did not happen. For one, fewer people write in old skool all-caps HTML tags. All lowercase tags are so much more readable.

Also now it’s probably safer to put little Easter eggs and funny notes in HTML comments. Are there more of those around? I don’t know. But the oldies but goodies are still out there.

Famous hacker JWZ’s enigmatic page contains this haughty comment:
<!– mail me if you find the secret –>
<!– (no, you can’t have a hint) –>

Smarter people than me tried, but failed to find meaning in in the 404 lines of what seems to be a hex dump. Former Livejournal user mcgroarty, for instance, wasted a good chunk of his time on this. Where is his blog now, by the way? Does anyone know?

What I noticed though is that the page is not static as mcgroarty probably assumed. It changes with time. More than that, it seems like it is not the same data – it probably cycles through different files. You can clearly see that if you look at http://www.jwz.org through the wayback machine. Meanwhile you can see the old design featuring the Jamie’s cool terminal graphics likeness. You can see the old design get resized, then get replaced with the 404 line nightmare. Then “mail me if you find the secret” gets added. Enough people send emails and JWZ, always eager to save some time, adds “(no, you can’t have a hint)”.

Are these 404 a cruel joke – meaning not found?

I suspected that the 404 lines show chunks of the old green image that I mentioned, or are generated from web collage. When I looked at the famous animated compass gif (the one that replaced the Netscape diddler when you typed in about:jwz or went to JWZ’s old homepage in Netscape 1.1 and some other early Netscape version I think) I found another hidden message from JWZ:

“You have a lot of free time on your hands, don’t you?
Tell jwz@jwz.org that you found the secret message!

http://www.jwz.org/
about:jwz

“Some people will tell you that slow is good — and it may be, on
some days — but I’m here toò tell you that fast is better. Being
shot out of a cannon will always be better than being squeezed out
of a tube. That is why God made fast motorcycles, Bubba.”
— Hunter S. Thompson

Oh, Jamie, I have very little free time. But whatever free time I have I usually end up wasting on stupid things.

This does not seem to be the solution to the 404 line homepage puzzle, but the heck with it.

Russian-speaking readers can entertain themselves with reading comments over at tema.ru. There are a couple of hints of hidden links, a few sprinkles of profanity, showing off about Photoshop mastery. Outstanding advice to journalists that was there in the earlier version is gone. I also remember seeing a completely blacked out page about his photo equipment there (you needed to do control-a trick to see it) in a very old version of the site. http://www.design.ru has its share of rowdy commentage.

Commentatore

I really hate email these days. Gmail might have solved (at least for me) the storage problem and mostly solved the spam problem (the filter is very efficient), but there is soooo much crappieness in email.

Email servers and clients are just out of whack lately. Even Gmail checks zip files for executables somehow (neat trick) and refuses to add them. It works ok if you change the extension to .zip.foo or something like that. But this at least is a decent way of dealing with the problem of people sending virus laden executables – warn that you are not sending it and let through people who are smart enough to rename the extension.

On the other hand I’ve encountered every type of nastiness – from silently dropping emails to stripping the attachments (again, silently) to bouncing the email back with absolutely unintelligible error messages.

Filter stupidity similar to what excellent Joe Grossberg is describing here is also rampant.

Oh, and trying to send out an email in Russian. Fugedaboudit! The extra bits in Unicode or KOI-8 get chewed off every which way rendering my laboriously typed and spelling error infested emails unreadable half the time. If there is a way to reliably send Russian encoded emails without using attachments – I was not able to find it yet.

Worst of all, you sit there waiting for a replies wondering – are people just ingnoring me? Did the message get silently dropped, swallawed or chewed up on the way? Did it get lost amongst spam about Ciagra and Vialis? (As a side note, my co-workers were joking this morning about how I should write on my cubicle dweller’s box that contains vitamins, painkillers, antiacid and caffeine pills “V1A8RA” in marker). Did the person mean to answer me but forgot lately? Did something happen to him or her?

But you know what I hate even more than email? Public comments in blogs. Letting my own often illiterate and/or stupid comments spill out onto the Information Superhighway and having them fester and petrify there for future generations is not a good idea. From now on my policy is not leaving any comments whatsoever. I’ll use exclusively email from now on. If you want to leave me a public comment in Livejournal – go ahead, but I’ll probably answer via email. I do try to answer most comments.

Also a part of this policy is not reading or writing any private posts in Livejournal. Nothing good ever comes out of them.

In other news, I am thinking about leaving a little note at the bottom explaining obscure puns in my topics. For instance this one is based on the Sopranos Episode 204 title – “Commendatori” (Knights). Babelfish tells me that “commentatore” means “commentator”.

FUD You

A common IT worker in computer related conversation spews more acronyms than a Soviet Commissar, but chances are he or she won’t be able to decipher half of them. Managers often don’t even know the meaning of the concepts that the acronyms represent.

Some acronyms are meaningless by design and recursive to boot. GNU? GNU’s Not Unix!

Others seem like acronyms, but aren’t. I always thought that TWAIN stood for “Technology Without An Interesting Name”, but it turns out it originates from “The Ballad of East and West” – “and never the twain shall meet”. Sometimes when I try to reinstall my scanner for the hundred’s time it seems to be very appropriate.

Some apparently stood for something at some point in time, but then lost their meaning. People understood COM to stand for “Common Object Model”, then “Component Object Model” and now it stands for that old difficult technology that only Don Box used to completely understand. You need to use .NET instead, which is an acronym looking non-acronym which stands for whatever Microsoft wants it to stand for. Now Expect Trouble. Never Edit Text. Next Exciting Technology. What is the dot for? Come on, every developer knows that dots make your code more powerful.

An acronym that is often used in conversations about Microsoft is “FUD”. It always made me think of Elmer Fudd (because people using it often sounded like him), but it’s actually a term coined by a computing pioneer, Dr. Gene Amdahl.

It stands for “Fear, Uncertainty and Doubt” – tactics that IBM salesmen used against Dr. Amdahl’s company. Amdahl made mainframes that were fully compatible with IBM’s, but cheaper and faster. It’s easy to use FUD on managers that were in charge of purchasing those multimillion dollar big irons. “Nobody was ever fired for going with IBM”, right?

The sheer existence of Amdahl was a huge boon to mainframe purchasing customers. The rumor was that if you placed an Amdahl mug on your table, IBM salespeople were gonna give you million dollar discounts.

Let me present an artifact from my collection: the famous “Million Dollar Mug”:

IHA: I Heart Acronyms

I am reading blogs with bloglines.com aggregator these days. I have four categories of blogs there : FIMB, PIMB, RB and LJ.

FIMB stands for Famous Incontinent and Mostly Boring. These are “A-list” blogs like Scobelizer, which are updated with the frequency of bunny poop and are so full of mentions of wiki, podcasting and other buzzwords that it’s not even funny. Still, amongst bunny pooplets there are often interesting links. FIMBS rarely generate original content, but mostly comment on what’s going on. Being gadflies they do that pretty well.

PIMB stands for Pompous Incontinent Multiauthor Blogs like Gothamist. These are usually for-profit blogs with several authors that post even more frequently than FIMBs. There’s mindless link and meme propagation galore, but with a twist. First of all they often have a unifying topic, like NYC or gadgets or politics. Then there’s the attempt to emulate print journalism with things like editorials. The most bizarre trait of some PIMBS is when different authors start to express opinions on behalf of the blog : “Gothamist will go back to finding baseball kinda boring” or “All Gothamist can say is we can’t wait to see Douche or Turd”. My guess is that PIMBs happen when a couple of IMBs or FIMBS get together. I separated PIMBS because they are not as boring as FIMBS, but left unchecked they fill my reading with buzz and white noise.

RB is a set of regular blogs, authors of which make well crafted and original posts. There are some FIMBsh blogs lumped in there, but those usually don’t have the most annoying traits of FIMBs. LJ is a set of all of my livejournal reading.

Top 10 Reasons Why Deadprogrammer Left Livejournal

1) Old entries are hard to get to: “back n entries” works only for a while, after that you need to go day by day. Which makes paging through a blog that is not updated daily a nightmare.

2) Can’t run ads.

3) The degenerate “friends” system with it’s stupid add/remove politics. It’s better to read stuff in an aggregator.

4) Livejournal is widely known for drama and teenage angst. Having a Livejournal blog is similar to having an AOL email – it doesn’t matter that the famous hacker JWZ has one. People will still think that you are a loser.

5) No categories. You have to keep a separate journal if you want to give your readers an ability to read only stuff that interests them. I want to write some entries in Russian, but do not want to have a separate journal for that. Also some of my readers might be interested in my photos, but not in what I think about Livejournal.

6) Constant outages, lost posts, slowness and other technical fun. What else can you expect if you share your servers with a million teenagers frantically refreshing their “friends lists”.

7) No trackback.

8) Image hosting that is still in beta, but a fully released “phonepost” system that instead of using MP3 format uses OGG. I spent a couple of hours trying to find a player that would actually play these files when I click on them, but for the most part miserably failed. Those are a couple of hours of my life that I’ll never get back. I mean, what the hell is wrong? You click on a file, the player opens, but doesn’t play anything. You click play button – nothing. You click again…. Arrrgh, it’s driving me nuts!

9) No web logs – you have no idea how many people actually read your stuff. The only indicators that you might have are how many “friends” you have and how many comments you get (both of which are poor indicators). Since you can’t run JavaScript, you can’t have a reliable third party tracker either. I’ve had a visitor from northropgrumman.com at my new shiny (well, not so shiny yet) MT based site, and I would not have know that if it was still at Livejournal. Hey, Northrop Grumman reader, who are you?

10) If you set an article with a future date in Livejournal, instead of showing up if your readers lists normally, it sometimes disappears. There’s a bug there somewhere.

Livejournal does have a superior comment system, but since I don’t get too many comments it doesn’t matter that much.

Did you expect the Spanish Inquisition? No? Well, nobody does. But it brings you 11th reason:

11) No integrated search.