Thursday, April 26 2007

Hugh Macleod recently asked "How Well Does Open Source Currently Meet The Needs of Shareholders and CEO's?" It's an illogical, inconsistent post that should have scrolled out of the memory of mankind, but somehow it has been mentioned far and wide, including a mention on the popular Coding Horror, among other highly ranked blogs, many of which just muddied the waters of this misleading question even worse.

Photo by Zach McCarthyThe original post by Hugh was baffling, first confusing the Microsoft Partner program with gross Microsoft sales, and then completely hodge-podging software as a commercial product with software as a consumable.

There aren't any open source billionaires selling software as a product, Hugh tells us, so therefore open source doesn't service shareholders and CEO's (of non software-as-a-product organizations) as a consumable.

Huh?

Hugh isn't even commenting on the financial viability of building a software as a product company around open source, where such a question merits sober consideration (though there are quite a few very successful open source businesses, whether a company can survive and thrive with their crown jewels open sourced needs to be considered on a case by case basis). Instead he's claiming that every organization needs to ensure that their suppliers are making boatloads of loot (preferrably suppliers with an ownership structure that centralizes it on one or two individuals), which is a rather odd consideration. Or worse, that their suppliers share some nonsensical correlation with someone else that is very successful.

Open source is a very contentious topic, and to many it is threatening to their world. It is often grossly oversold as a silver-bullet, when often it only plays a marginal part (both Firefox and MySQL, as examples, are overwhelmingly developed by a traditional team in a traditional way, and the source just happens to be available. It really isn't the driving force of their march forward).

Yet to correlate software as a consumable so arbitrarily holds no value whatsoever, and isn't a good foundation for any discussion.

And most remarkably it uses Bill Gates as the example of the merit of non-open source software as a consumable -- yet Bill Gates is perversely probably the single biggest reason the open source market is so vibrant and alive. The anti-Microsoft rallying cry was a critical early factor in the growth of the OSS community.

   
Thursday, April 26 2007

Microsoft recently released a new technology/product named Silverlight. Many in the Microsoft-enthusiast community, seemingly only seeing the world that Microsoft delivers to them, cheered in applause at this innovation, declaring that it completely changed the rules of the game: Soon we would see fat apps and web apps dancing in the streets together, no longer segregated.

The world was freed from the awful tyranny of HTML!

Microsoft, the story goes, innovated up some vector graphics and a way to interact with and transform them from script, changing the world from the boring, raster-graphics monotony of yesteryear.

Amazing!

Wait -- wasn't SVG already a pretty mature technology at the turn of the century? Why yes, now that I think of it, I recall deploying solutions that actually used glorious vector graphics, declaratively described and transformed with layers of vector goodness. Of course Microsoft, despite being on the SVG committee, didn't actually support it themselves (by then they realized that the whole web thing was probably unhealthy to their operating system stronghold, so such an incredibly rich addition to the browser was unlikely to occur), and instead one had to use third-party plug-ins like Adobe's SVG Viewer. Then of course the banner was passed to the Macromedia cum Adobe Flash product, where rich, cross-platform, vertically-scaled vector graphics rendering primarily occurs today (though SVG is revived through its inclusion in the standard release of Firefox, and is becoming a standard graphic format for a certain domain of images on Wikipedia).

I imagine the brainstorming session that yielded the name "Silverlight" consisted of some people thinking "We're innovating up a Flash clone, so think of anything that reminds you of Flash". Silver light, aka a light bouncing from a silver-color flash enclosure, is hardly a stretch.

The product itself might be entirely worthwhile, but thus far nothing I've seen makes it any more compelling than Flash. Indeed, the limited targeted platforms of Silverlight -- both from a breadth and depth perspective, the rank immaturity of the product, the grossly conflicted interests of its host, and the massive ubiquity of Flash makes Silverlight a contender that needs to really wow to sell itself.

Nothing I've seen wows me any more than the existing Flash demos wow me (and even those aren't very compelling, and many Flash implementations are abusive overkill). The asinine sales video certainly didn't convince me.

All of that is pretty much irrelevant, though: Microsoft wants to take a run at Adobe, hoping to get some strategic control to lever in the future. That's fine, and if the product really does provide some sort of advantage above and beyond Flash to excuse the massive disadvantages, then it's definitely a product worth considering.

What really gets me irked, though, is the perceptive of some of this industry to only see the merit of certain solutions when they come from their camp. I recall when .NET was in the initial betas and having a breathless, excited peer, fresh from their Visual Basic 6 nightmare, declaring the wonderful advantages that garbage collection, JIT compilation, reflection, and so on brought to development.

"If it's so great now, why haven't you been embracing Java for years?" I asked.

He had no answer. I truly think he was completely unaware that what he was describing was already available. This sort of virgin enthusiasm, with cheerleaders completely blind to other solutions available to them, is far too common.

WPF itself is a decent addition to the .NET Framework (although the name ".NET 3.0" is absurd), and it does add a lot of whiz-bang, but they need to do a better job of selling it than videos like this. For all the talk about improving user interaction during that video, everything they showed managed to slow user interaction, reduce data density in a detrimental way, and overall just add junk that detracted from the experience of the app, but remarkably it's what people always first try to use to sell things like this.

   
Wednesday, April 25 2007

Moto QNearing the end of 2006 I put up a bit of a rant-- Two-Factor Authentication, Hashing, and Cell Phone Restrictions / J2ME -- concerning two-factor authentication, and the difficulties implementing a simple, no-cost solution on my handy new Motorola cell phone. I pretty much gave up in frustration, the many barriers and limitations just making it not worth the trouble.

I recently started using a Motorola Q, based upon Windows Mobile 5.0 and running on the Bell Canada network, and I have to say that the situation is night and day -- developing and deploying either native or .NET Compact Framework apps on it is ridiculously easy (and incredibly well supported in Visual Studio 2005 with the SDK add-ins), easily using the data network to communicate with sites over the net, and so on.

Absolutely wonderful device for developers and enlightened shops.

   
Wednesday, April 25 2007

A couple of years back I wrote a short piece titled "Edit and Continue - Valuable Tool, or Sloppy Vice?"

I pondered whether some development tools and practices -- such as test-driven development (TDD) and the reduced cost of errors (in both time and personal reputation) -- were actually making us worse developers, paradoxically decreasing productivity and the suitability and correctness of solutions.

That entry was motivated by the outpouring of demands by my peers that a particular tool continue to feature edit-and-continue functionality: what I thought would be an infrequently used frill turned out to be something that many depended upon daily, correcting their flawed code at runtime as a regular part of their process.

Today I came across DevGrind's How not to solve a Sudoku entry -- itself linking to Ravi Mohan's "Leaning from Sodoku Solver" -- where he links to a gent who implemented a thoughtful, sober design carefully, and another who pursued a TDD-approach, building his test harness, and then, it appears, flailing about madly in the hopes that some random keypresses will generate a solution that passes the test.

To demonstrate the value of TDD.

...Today's blast from the past is To GUID or not to GUID in your Database, where I describe the benefits and pratfalls of GUIDs in the database.

   
Tuesday, April 24 2007

Ventured out to the local electronics superstore last night to grab an enticingly priced Kingston 1GB miniSD card ($29 CDN). While there I spied a stack of 200GB 7200RPM ATA-100 hard drives going for the negligible price of $79 CDN, so I grabbed one of those.

Products chosen and in hand, I deftly avoiding the commissioned sales staff who so carefully avoided me when I was actually in the technology area -- where I presented a potential source of complex questions -- but now wanted to verbally "claim" the sale, however marginal.

"You all done there sir?" echoed off my heels as I retreated to the door.

Hard DriveThe hard drive enticed me as I have a dated PC that had been stumbling by with a rather old and noisy 60GB hard drive as the boot/system drive, a second, larger drive doing storage duty off a SATA wire. I have a limited interest in expensive upgrades as I just plan on replacing the whole PC, but a little extra space in the meantime would allow me to set up a bit of redundancy between the drives in addition to normal backup strategies.

Hanging the old and new drive off ATA wires, I had the data copied over with a burned image of the very useful g4u (a quick copydisk and the new was ready to replace the old). Moments later the old drive was out and the new drive was booting much quicker and quieter than the old, ready for a copious new 140GB partition to be created.

The $79 drive is actually a WD2000JB, which was originally released in late 2002. It's hardly cutting edge, but hard drive technology hasn't exactly been moving at that brisk of a pace so it really isn't that far out of the state of the art.

All in all it was a speedy little upgrade for just $79, implemented painlessly in minutes.

If there were an inexpensive external RAID-capable enclosure with ATA-100 connectors, I'd grab a gaggle of these drives and cluster them -- alone they aren't terribly fast, but several drives working together would provide some killer performance.

With desktops I've always gone for 2-drives at a minimum. Even without any sort of performance RAID, simply putting the page file on the second drive has proven to be a huge performance improvement for many demanding applications, as does the intelligent storage of work and data files.

   
Monday, April 16 2007

Being able to quickly and easily build team projects on a newly imaged PC is a development process necessity: A new team member, with not a whit of project knowledge beyond where to find the simple build instructions, should be able to follow a sequence of clearly documented steps -- automated where possible -- painlessly generating a build.

No unnecessary mapped drives and hard-coded UNC locations. No undocumented but necessary third-party tools at hard-coded locations. No byzantine by-hand registrations and muddifications.

This holds true for open source projects as well. While a grizzled kernel hacker obviously doesn't need hand-holding, they didn't start as a grizzled kernel hacker. At some point they were new to the code, and the number of obstacles they faced in those early days were probably significant indicators of the likelihood that they would stick with it, overcoming administrative type nuisances and getting to the point where they were actually working on the code itself.

Some may see the barrier to entry that often exists as a useful filter, only letting only the best of the best through, but that contention seems dubious. More likely an onerous getting-started process simply demotivates a lot of great talents from even bothering. Being an expert C++ developer doesn't mean that one wants to spend a day messing around with cygwin packages and dependencies, setting up countless poorly or incorrectly documented environment variables and configurations.

FirefoxOn this theme, I recently took a look at the state of the bleeding edge of Firefox -- I think Firefox 3 is going to be one of the most important applications in years, and is going to completely redefine the entire industry -- and was very pleasantly surprized to find how stunningly gorgeous the build process now is for a Visual Studio-using-Windows developer.

-Download and install Mozilla Build.

-Run the appropriate start-msvc batch file (e.g. start-msvc8.bat for Visual Studio 2005 users). I updated mine to set the CL environment variable the compilation flags that I wanted, as opposed to passing them on the --enable-optimize parameter of the .mozconfig file).

-In the appropriate location -- / is fine, given that it's actually in the msys subdirectory and not really at the root, get the client.mk file via the following trivial command.

 cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co mozilla/client.mk

-Navigate into that folder
 
 cd mozilla

-Do a CVS get of the appropriate project (originally I was getting the source outside of the make script using the excellent TortoiseCVS, however it turns out that you can't just wholesale grab the tree, and should stick to the integrated CVS functionality).

 make -f client.mk checkout MOZ_CO_PROJECT=browser

-Configure an appropriate /mozilla/.mozconfig file (note that Windows will block setting that filename directly. Do a mv move command in the MINGW32 shell after saving from notepad or wherever. You'll likely just copy the block on the linked page for the appropriate project, however if you're adventurous you might try out the configurator tool).

-Build it!

 make -f client.mk build MOZ_CO_PROJECT=browser

This is the slickest, most painless process for such a large scale application that I've ever seen. I can just re-checkout and build daily if I'd like to be on the razor edge, though sometimes that will mean a broken build.

Now I'm running an ultra-optimized, stack-protected custom build of Firefox 3.

Type R Firefox

I'm actually delving through the code with relative ease, testing my custom changes absolutely painlessly (in my case, curiousity brought me into the javascript engine, found in the js subdirectory. While the code is inherently advanced -- it is a remarkably complex product -- it is reasonably easy to follow around and get a feel for).

Brilliant. Absolutely brilliant. Now I just have to find a way to put some obnoxious exhaust pipes on this bad boy.

   
Wednesday, April 11 2007

A flurry of nattering erupted over the weekend regarding Paul Graham's declaration that "Microsoft Is Dead".

[Sidenote: Paul claims that he authored the piece to "say it first". While you might be widely linked for your Yahoo glory days, Paul, you're far from the first person to say it]

While Paul was obviously exaggerating to make a point (I presume he knows how to read a financial statement, and is well aware that Microsoft's revenue are still following a ballistic arc, and that >90% of PCs out there still run some variant of Microsoft's operating systems), it shouldn't come as a shock that I'm in agreement with his core point -- that Microsoft's ability to herd the industry has seen an unbelievable decline over the past several years, and that tech leaders aren't all that interested in whatever Microsoft is claiming that they'll think about maybe developing some time in a few years -- and indeed I'd said something very similar just last week, albeit without the confrontational, exaggerated title.

In today's Financial Post I see that Goldman Sachs has just removed Microsoft from their highly-rated "Americas Conviction List", specifically noting that investors are nervous about the future of retail software. Sure, Microsoft is still considered a "Buy", but this is another indication that people are seeing a future where Microsoft isn't all-singing and all-dancing.

While looking for an online link to provide for the news item (I'm still a happy reader of dead-tree newspapers), I came across this article on ZDNet, in which the author says-

"but can you really say a company with $28.8 billion in cash is on the downswing?"

YES! Of course you can!

That $28.8 billion is owned by shareholders, and if they see it squandered in failed attempt after failed attempt at buying diversity, they'll demand it back through another special dividend. Microsoft's bounty of cash, and their massive revenue, has never guaranteed them anything, and their history is rife with initiatives doomed to failures (much like the ridiculous "turn on an internet dime" myth, many have a selective memory when it comes to Microsoft, forgetting how many of their ventures have been dismal failures. Expect the whole ridiculous "Live" branding to be yet another failed direction).

Microsoft certainly isn't dead, however it will likely go through some massive, externally forced changes in coming years as the two foundations of Microsoft profitability -- Windows and Office -- start to crumble.

   


About the Author
Dennis Forbes Dennis Forbes is a Toronto-based software architect. While focused primarily on the .NET and SQL Server worlds, Dennis frequently ventures outside of this comfort zone into game development and image processing. He has been published in several industry magazines, has been quoted in the Wall Street Journal and has been interviewed by NPR.

He is a vice president and lead software architect at an innovative New York City hedge fund back-office services firm.

Dennis has been working on solutions for the financial, telecommunications, and power generation markets for over 15 years.





 
Earlier EntriesLater Entries

Dennis Forbes