Archive for April 2007

Schadenfreude

Please, feel free to laugh at this column describing how I was completely pwned by hackers trading the German dub of ‘Norbit’…

It’s Much Work, Measuring Turtles

Self-Righting ObjectThis object, which is of uniform density, is self-righting. It has a second balance point that is “unstable”/highly susceptible to perturbation (when I first read the article I thought it said it didn’t have such a point, which freaked me out). I love mathematical objects that are complex and yet arise from (presumably) simple causes (irrational numbers, Julia / Mandelbrot sets, etc.).

My favorite part of the article though, is that the mathematicians noted the similarity of the shape to certain turtle shells. They are now attempting to find if any turtles are inherently self-righting with no leg wiggling. But “It’s much work, measuring turtles.”

Original post by  Fabian

Ageism in Software Development

Benoit Lavigne wonders if ageism is a problem in the software development profession. Oh, hell yeah. From the minute I began editing software development magazines (when I was 25) I began hearing from professionals in their 40s and higher who faced disproportionate difficulty getting work. There is not a question in my mind that this is a real problem. True, this is a field that is unforgiving to those who don’t keep their skills current, but I’ve heard far too many stories to believe that’s the only, or even dominant, factor.

Now that I have a touch of gray around the temples myself, I worry about this myself. I’m the oldest person on my programming team right now and I’m at least two decades away from retiring. I have no doubt that it will be harder and harder for me to get work as a developer, no matter how current my coding skills stay. If I’m on the phone with a potential client and they ask about my experiences, I don’t say “Professional programmer for 27 years,” because I think that could very well trigger ageism; I say “I sold my first program when I was 16.”

I fear the day when I’m so old that the only work I’ll be able to get will be drawing lines between boxes and pretending I’m delivering value.

Hyperlinks From CD To Web Patent (#6,314,574): I Have Prior Art, How Do I Help?

Disc Link, a subsidiary of Acacia Technologies Group (an organization that basically buys up patents so that it can sue anyone who violates them), claims that it’s patent number 6,314,574 covers hyperlinks from documents stored on a CD that send users to sites on the web.
Last week, Disc Link filed suit against Borland, Business Objects, Compuware, Corel, Eastman Kodak, Novell, Oracle, and SAP, claiming they all violate its patent.

via Download Squad

The patent was filed on Nov 8, 1998.

I first put a hyperlink to the Web on a commercial CD in 1994. (The proceedings of the Software Development Conference. And, yeah, to the Web.) I continued the practice on several subsequent CDs that shipped before ’98. I have copies of several of these CDs sitting on my shelf.

I can’t see how the claims of the patent cover such links, but if anyone involved in the lawsuit thinks I could be of help, let me know.

Coincidentally, I have a press release in my Inbox from the “Coalition for Patent Fairness” praising the Patent Reform Act of 2007. Maybe, but the bullet item “Reform to make it easier to file a patent application without the inventor’s cooperation;” doesn’t seem very nice. Intellectual Property legislation has been such a disaster in the past decade that I fear that the only thing worse than the current patent system would be “reform” written by the same people who brought us the DMCA.

TurboTax E-Filing Server Bogged Down

Well, looks like I might have to run down to the Post Office after all. The TurboTax filing servers have not been working for hours. I thought that after midnight EST, things might calm down, but I don’t know how long to waste before just printing out the forms and taking a trip into town.

Update: The answer turned out to have been “about an hour.” Given that the whole point of e-filing is convenience, for which they charge you $34 ($17 for Fed, $17 for State), there didn’t seem to be any point in online drama. A big screwup on Intuit’s part, but not enough to make me switch products. I have Quicken records going back years and TurboTax is actually a heckuva good piece of software.

DeveloperWorks Podcast About Jolt Awards, With Rosalyn Lum and I

DeveloperWorks interviewed Rosalyn Lum and I about the Jolt Awards (IBM was a big winner this year).

Frontpage of Microsoft.com today

 

via Dan Fernandez

Override Chicago Manual Of Style 13th Edition Rule 8.3

Eye-tracking studies by Jakob Nielsen lead to the recommendation “Show numbers as numerals when writing for online readers.” This contradicts the traditional style rule of writing out numbers less than 100 (or sometimes 10) (I really had to stop and consciously use numerals for those!).

Map, Everything’s An Object, and Inline

 One of the reasons that functional programming is worth studying is that it abounds with opportunities for implicit parallelization. As Jon Harrop discusses in this post, the map function takes a function object f and an array [a, b, c, d] and returns [f(a), f(b), f(c), f(d)] (syntax varies from language to language, of course, but you get the point).

The optimist sees this and says “Ah hah! The compiler can simply distribute these calculations to a thread-pool and have a performance advantage on a manycore machine.” And this is true if (a) f is quite lengthy or (b) the array is quite large. Otherwise, the overhead of distributing the calculation across cores / processors can very well be greater than performing the map “in core.” In the worst case, when function and data are already inside the initial core’s cache, the performance hit for distributing it would be very substantial.

This is a familiar theme in programming languages: a theoretical capability runs afoul of implementation realities. The best design decision in Java was “(Almost) Everything’s an object”: numbers and strings — the most commonly used data types — have different semantics (what the .NET world calls “value semantics”) because they aren’t pure objects. And they aren’t pure objects for performance reasons (immutable strings are also good for a couple other reasons). To this day, you can feel an occasional performance hit with pure object-oriented languages (before you flame, keep in mind that I’m about to deploy a Ruby-based service right into the middle of a live multimillion-dollar application and Ruby’s not only pure objects, it’s interpreted. So I’m not one of those who doesn’t understand that performance, productivity, and responsiveness are different things).

Another situation is C/C++’s inline keyword. Structured programming theory tells us not to repeat ourselves — to define functions rather than writing the same code in multiple places. But in the not-terribly-distant past, the cost of a function call was large relative to local operations (a situation that holds today with some embedded processors). So C and C++ have an inline keyword to say “don’t generate a function call for this, generate the code inline.” But unlike Java’s success with “Everything’s an object: almost” the inline keyword turned out to be pretty much a disaster. Now, to this day some people doing embedded systems undoubtedly use inline to great effect. But most developers do a poor job estimating the benefit of the inline keyword. Because, just as distributing map can be counter-productive, inlined code can decrease performance (the on-chip caches of modern processors make code size and data locality very important to performance). (And don’t even get me started on template metaprogramming.)

So, what does this history suggest for the manycore era?

  • Languages that promise that the solution is “every call’s distributed” (or other “pure” approach) will either fail outright to deliver performance gains or will require very sophisticated just-in-time code generators (this is similar to the situation with pure object-oriented languages such as LISP and Smalltalk, where commercial VMs are leaps and bounds beyond academic “proof of concept” interpreters / VMs). The problem with this is that the development of sophisticated JITters requires time and experience, so “the language takes care of it” solutions face a very big chicken-and-egg problem.
  • Languages that shift 100% of the burden of parallelization to the programmer (a ParallelAttribute that can be applied to blocks or functions, say) will work in the hands of experts but will be disasters in the hands of the mainstream.
  • Some kind of hybrid approach that purists decry as tainted but that solves 80% of the problem (a la Java’s “(Almost) Everything’s an object”) will be the winner.

(No, I don’t know what the hybrid approach will be.)

System Freeze Update: Acronis Rescues Me

In the way of computers and their miserable antics, my attempts to figure out my system freeze led to a disaster. After determining that my system continued to freeze even when using the “VgaSave” graphics adapter, I began to suspect that it might be my Wireless Network Card (a WMP54GX). I hadn’t updated the driver but freezes definitely seemed more common while accessing the Web (causing my initial misguided suspicion of Firefox) and background behavior could additionally trigger network access for the other, seemingly random freezes.

So, using Device Manager I disabled my network card. I rebooted and the system had lost my identity. That is, somehow, c:\documents and settings\larry was not-quite-deleted, but I think all of its sub-directories were. All of my start programs, desktop, settings, etc. were gone. Further, so too were directories gone from the ‘all users’ account. And there was something weird about the registry — when I tried to switch “View options” in Explorer (so I could see hidden files and show extensions and all that sort of stuff), it “wouldn’t take.” As if data wasn’t being properly written into the Registry under CURRENT_USER.

So that kind of sucked and I played around for a bit before deciding that the system was so screwed up that I had to take the ultimate risk — restoring from backups. I have Acronis TrueImage on a daily backup to an internal drive. I pointed at the OS partition (I have partitions on various drives for OS, bin (Program files), data, media, and a non-backed-up “volatile” partition) and chose a restore point of last Thursday, before the freezes started. Acronis rebooted into itself and a few hours later told me it was finished.

I think this is the first time in my life that an emergency restore worked perfectly: the very stuff that I had lost came back and because I keep my data on another partition, I didn’t even lose any email. I may have lost some files I’d temporarily stored on the Desktop, but otherwise, I feel like the luckiest guy on Earth. Now all I have to fear is my deep suspicion that the problem was caused by some auto-update facility.

So… Acronis TrueImage 8 (I think they’re up to 9 or even 10 now) on a daily backup to an internal SATA drive. (N.B.: If I’d relied only on RAID, I’m fairly sure I would have been screwed.)

OK, back to posting about software development issues, I promise…