Saturday, December 16, 2006

What's in a name?

And as long as I'm rambling. WinFx, Avalon, Atlas, and Indigo sounded a lot more hip and bleeding-edge than the stodgy names that are so long I don't even care to type them (okay, I really mean I don't care to look them up to make sure I get them right).

And Atlas didn't even make the cut for inclusion in the otherwise technically irrelevant grouping of .Net 3.0. Can we dump the hype for Workflow Foundation and swap in Atlas?

Go read No Silver Bullet and then run screaming when your boss mentions Workflow Foundation. I am perhaps biased by the multi-million, multi-year boondoggle that my company chased with BEA's Weblogic Integration 8.x. And the plural of "anecdote" is not "data". But neither is "unfounded opinion" the equivalent of "experience". Nor does a technology evangelist have your best interests at heart.

My ego was in no little way stroked that I got to say "I told you so" when our Architects eventually got chewed out for drinking BEA's Kool-Aid.

Oh please let this be the start of the end of web-enabled everything.

I'm excited about Avalon... err Windows Presentation Foundation. The advent of Ajax has and will continue to go a long way toward deadening the pain of web-based interfaces, but I'm still clinging tenaciously to the opinion that there are way too many web apps out there that have no business being web apps.

The New York Times has the perfect excuse for being a web site, and they never really tried to be a web app, but they've done a beautiful thing with the NYT Reader. Go check it out, even if you don't care for the paper. There need to be more apps like this. Good for you, NYT. Sorry the bottom is falling out of your business model.

And here's the beauty of the system. It requires "stuff" on your system to be installed for it to work. And it will handle it automagically and securely.

(Okay, "stuff" is the dubiously-named .Net 3.0 framework. But grandma doesn't need to even know that "stuff" is required. It "just works".)

Having less than a stellar experience with Vista 64

Haven't figured out what to call it yet. x64 Vista? 64-bit Vista? Vista 64? Eventually we'll just be calling it Windows, I suppose.

Anywho, I'm actually getting instant cold restarts (twice so far, just had it installed for a few days). And many, many apps just don't run right.

Sounds like this is going to be a slow, painful experience bringing the rest of the world up to 64 bits. I'm going to try reinstalling at 32 bits and see how many problems go away, or if it's just the hard-core security stuff built into Vista now. (I blame the cold boots on the 64-to-32 conversion it has to do, probably some device driver misbehaving....) But it seems that if the software wasn't written by Microsoft, it just doesn't behave right.

Interesting too that by default they have me running the 32-bit version of IE. I can run the 64-bit version, but it doesn't appear that I can make that my default program for web pages.

Quite the disappointing experience.

Wednesday, November 22, 2006

Junfeng Zhang

Junfeng probably isn't going to win any prizes in literature, but his blog is just chock full of useful tech tips. The nitty gritty stuff that isn't documented (much).

And he's quite the friendly chap. For that, he makes my blogroll.

Wednesday, November 15, 2006

Java vs. C# vs. C++

Arno posted a little duelling performance test for a sudoku solver here. He has snobbily disabled comments on his blog (you hear me, Arno?) :)

So in hopes that he gets a trackback, I'd be really interested to see how much of a difference .Net 2.0 would make to his performance numbers, as well as java 1.5 and 1.6 (or against BEA's JDK).

And also see how much more g++ might be able to squeeze out of his code if it were thoroughly twiddled for optimizations.

I really need to hunt down the post I read long ago that argued that most application development these days is IO bound, and not processor bound, and that chasing these milliseconds doesn't really help us much. This is largely the argument made in defense of interpreted languages like Python, Ruby, and Perl. Your language choice doesn't change your bandwidth, your network latency, or the speed of your hard drives.

Perl is an unfortunate crime of history. But Python and Ruby are moving in directions we need to pay attention to. Need to break out Iron Python and see how I like it.

Of course, Arno posted his code and I could run it under those platforms, and even for fun port it to Python and Ruby (I need to get a little Ruby under my belt just to see what all the noise is about.)

At some point I'll blog my thoughts about the difficulties of a multi-language environment when you're developing with a team. Sometimes the best tool isn't the best tool when you're the only guy that knows it. And apparently I'm in a significant, but not majority subset of developers that think it's fun to learn new languages and get them to play nice with each other.

Monday, November 13, 2006

W00t! GPL Java!

With most (all?) of the "scary" viral components rendered non-issues for the average developer. And non-GPL'd versions will remain available to those still frightened off by the whole thing. (Sun retains the copyright/left, so is free to license it under multiple licensing models.)

The semi-official announcement is here.

I imagine this means that for Sun to accept contributions into their tree, you have to surrender the copyright to your contribution. Somebody correct me on that.

Java has really benefited from the competition .Net brought to the game, and it's better off for it. There's been a lot more velocity in Java in the last five years. And this will just kick in the afterburners.

Friday, November 10, 2006

New Toy! Script#

Looks like a really clean concept. I won't talk out of my butt about it, because I haven't played with it yet.

Oh, and thanks to Brennan for turning me on to this. Lot's of other nice stuff on his Power Toys post.

Wednesday, November 08, 2006

More reasons why a Web Application is a fundamentally unnatrual act.

Yes, more railing about the evils of browser-based "applications".

Follow the link for an MSDN article about how you can put a progress bar on your web page when the server is going to take a long time to process your request.


The rub lies in the fact that the operation runs on the server and there's no way for a server-side environment to push information to a page displayed in a browser (unless the server holds the connection open to the client, rendered to the unfinished page, but that's not recommended). Basically, when a classic postback is taking place the client page is virtually frozen and no other client activity can occur.


The advice in the article is actually pretty good. A perfect job for AJAX. ("A sufficiently advanced technology is indistinguishable from a rigged demo.")

But let's just not forget how much simpler it would be to accomplish the same goal in a thick client. Spin up a separate thread, and point it to a callback method that updates the progress bar. To be fair, it's a fundamentally difficult problem. You generally get fake progress bars when you'd have to pay a high cost for real progress information.

But the mechanics to accomplish all of that is much harder in a web client environment. AJAX does at least bring some sanity to the situation.

Friday, November 03, 2006

Don't chain yourself to your install base.

When I worked at The Very Bad Place, we had an MFC application with an install base of several thousand users spread all over the U.S. It talked DCOM to our corporate servers to get its data. DCOM wasn't a completely insane decision at the time it was chosen -- there were far fewer remoting choices for Windows back then.

What was insane, however, was the admins not knowing enough about DCOM and TCP ports so that the company had to leave the DCOM servers sitting outside the firewalls.

I arrived at that scene back when SOAP was the new Golden Hammer. We probably could have handled most of their security issues with the SOAP-tunneled DCOM that COM+ offered, but that involved some strange inter-departmental politics, so the idea never took flight. They also had the IT departments from a lot of their customers planting the word SOAP in upper management's ears. Thus is the nature of Golden Hammers. So they hired me to put SOAP shims on the client and server so that most of the rest of the system still thought it was talking DCOM. It was all about Microsoft's SOAP toolkit back then.

The basics of tiered design had been abandoned for so long, that not only was the client sending raw SQL straight up to the server, it was even providing the name of the server and the database instance that the SQL should be thrown at.

So, basically, a horror show. But I get my SOAP shims implemented, we release a new version, thousands of clients install it, there was much rejoicing. Even a small performance boost because of a horrid on-server temp-file hack I was able to get rid of.

So all better, yah? No. Because roughly 80% of the install base upgraded. Leaving 20% of the install base still talking DCOM. Meaning that DCOM servers still had to sit with their arses in the wind asking to be hacked at.

And those SQL queries going across the line? It means we can't change our tables until every last client is gone. But we really need to change our tables because they're basically a mirror of a COBOL database, most some 50 columns wide, and it takes 6 hours for the nightly population script to run.

So these are the reasons most shops are so keen to go with web-based applications, and it certainly sounds like I just made a fine argument in favor of them. But we've been lost in this knee-jerk web-enablement world for so long, that I think most have forgotten how much easier it is to develop a thick client app. Besides the fact that they are a lot nicer. It's not the memory consumption anymore. Right now the two biggest memory consumers on my box are Firefox at 48MB, and IE at 40MB. (Sorry, Firefox, Task Manager doesn't lie, maybe it's all those silly plugins I installed.) Microsoft had to stop calling them thin clients. Right now Visual Studio is only taking up 36MB.

But AOL figured out another solution a long time ago, and Microsoft a little (okay, a lot) later. Automatic Updates. And that whole concept is built right into .Net smart clients. Security sandboxes, code verification and signing -- everything you'd want out of a web app without sucking. Gmail is really impressive, but I'll take Outlook, thankyouverymuch. Or Thunderbird.

If you're trying to reach a huge audience of previously anonymous customers, then a web app is obviously the right way to go. Amazon has to be a web app (and an impressive one it is at that, but if they wrote a thick client, I'd sure as hell give it a spin. You hear me, Amazon?). But what if you're just going to have a few thousand users? A few hundred? And they already have to register with you and write you a check? Do you think they enjoy waiting for the page to refresh?

Obviously, there would be a tremendous increase in time spent testing installers, and the upgrade process, and OS version compatibility, and yadda yadda yadda. But development time would go down by just as much, I would think. And developers cost more than testers and admins.

And .Net has done a lot for getting rid of the compatibility and library version issues that an MFC or VB app used to have.

Of course, my Linux brethren are hissing at me right now. And I say -- Mono!

Thursday, November 02, 2006

Bamboo Technology

I googled around a little bit, and apparently this expression is not as popular as I thought. And no, I'm not talking about the content management system by that name.

Its inspiration is The Professor on Gilligan's Island. Well, I'll be darned, there's a whole article about it on wikipedia. (I go there a lot to make sure I don't say something patently stupid on here.) The coconut Geiger counter is an all-time classic.

Normally I use it as a negative, but it doesn't always have to be. I'm sure you all have your own bamboo technology you have to deal with -- you're just calling it something else. If I had to define it, I'd say it's stretching an old or limited technology well beyond its intended use. Usually you run across this in a bad way. Our accounting system runs on a "database" called Universe which is almost as old as I am, and you program it in Pick Basic. It calls itself a "multi-value database" which really means, "This group of flat files are fixed-width delimited, but sometimes inside a column you might see multiple values delimited by an unprintable character."

I had heard of neither Universe nor Pick Basic until I got here. You hit the application with a terminal emulator. It has since been bought by IBM, who, clearly by magic, have written an XA JDBC driver for it that actually works. We update our Oracle back-end and the accounting system inside a distributed transaction. I can't begin to think how it actually accomplishes that. Hat's off to IBM for that -- I'll buy their coconut Geiger counter when it ships.

I'd call AJAX an example of good bamboo technology. We've been stuck with javascript since before the dawn of time (assuming time dawned sometime after '95). And we'll continue to be stuck with it for the foreseeable future. AJAX is getting a big bang for the buck in a sensible way that makes the best out of what we have.

But I should save that up for a rant about knee-jerk decisions to do everything as a web app.

Wednesday, November 01, 2006

NStatic

(Until I figure out a more intuitive way to lay it out, the title of this post is the link to the article.)

Wesner Moise is a former Microsoftian who is working on a group of super-top-secret apps using an AI engine he has developed and is still tweaking.

He's using the AI engine as the back-end to a code analysis tool that he's calling NStatic. (N for .Net, Static for static analysis, which is the technical term for what it does. I believe the term static is used to distinguish this approach versus profiling.)

Think FxCop with a brain behind it instead of a set of rules. It explores your code with all kinds of "what-if" scenarios and can show you where things might go wrong. Kind of like virtual profiling, if I understand correctly. It doesn't actually run your code, and you don't have to provide input. It just analyzes what your code might do.

The idea is that it would just be something running in the background, analyzing your code deeper and deeper the more time you give it, and popping up warnings about the things it finds as it finds them. Like much of AI, it's all about exploring nodes in a tree. I say that like I could just whip something like that up over the weekend.

I would envision using it as part of a Continuous Integration process, so that you could have a dedicated machine digging really deep. He seems to be putting his focus on immediate feedback during development, though. Hmm, think I'll pop him a note.

And he's big into usability, so his UI looks all whiz-bang. Check out the code markup he does to show execution flow. Definitely a toy I want to play with.

Tuesday, October 31, 2006

Spec#

The first I heard of this was from Wesner Moise's Blog talking about the work he's doing on NStatic.

Monday, October 30, 2006

I'm not this guy.

There's another Brian Deacon that is doing a fine job of helping me stay anonymous on the net, but it certainly doesn't make ego-surfing any fun. Although it was gratifying to see that at least my Amazon profile showed up at the very bottom of the first page of hits on google. (W00t! I made it to the first page!)

But you can imagine my confusion one day when I got a VHS tape in the mail of a movie about Jesus and flipped it over to find that I played Jesus. I at first thought it was a very cleverly executed proselytizing gimmick, and that down the street was an identical copy of the tape, but with Joe Smith playing the role of Jesus.

But the other guy is way over in England (that place is lousy with Deacons), and as far as I can tell, he has few opinions on software.

Thursday, October 26, 2006

Welcome to the show...

Because I thought, really, the net needs Yet Another Software Blog where some opinionated geek explains to the rest of the geeks all the ways in which they are mistaken. Well, maybe not, but I thought it would at least spare my coworkers my-not-so-occassional harangues. And they're nice people and really don't deserve it.

By the way, if you yourself are not a geek, then just smile and back away slowly. You won't find anything here even remotely interesting, and probably for the most part it will just sound like speaking in tongues.

So, a little about me, as long as you're here. I'm an application developer in San Diego, California. I work for a company that I don't care to implicate, as I'd like to reserve the right to bitch about them at some later point. But mostly I have nothing but good things to say about them. They work very sincerely at creating a culture that respects the employees, with the transparent goal of not having to pay us as much. It seems to be working for them. Company culture is a big deal to me, and I'll probably blab about it some more down the road.

As far as my geek credentials go, I am currently a double agent doing both .Net and Java development. I've been programming for about 10 years, or a little longer than that if you want to call what I was doing in those first couple years programming. But I suppose we all start out that way.

I have been a number of flavors of developer over the years, but only recently have I been able to finally get paid for doing non-Windows programming. I was a C++ guy for a few years, mostly ATL but some MFC as well. But for a long time before that I was a Visual Basic hack. Oh, the horrible spaghetti I wrote in the early days!

I made two bets early on for both VB and Java, and taught myself both. I even got certified in both. But the VB was so much more in demand at the time, that I got sort of sucked into the Microsoft world without ever deciding if I'd like to or not. Eventually I got an MCSD, and I'm in the middle of re-upping to an MCSD.Net. While at the same time chasing an SCEA. I don't personally put much stock in the value or meaning of technical certifications, but studying for an exam is a good way to round out the the corners of a particular tech that you might not otherwise get exposed to.

Back in the build-up to the dot-com boom, though, when a pulse was all that was required to score a high-paying job, the MCSD thing seemed to impress a lot of people. It seems to ebb and flow in importance. Feels like people are paying more attention to certifications again.

My reintroduction to the Java world seemed to coincide with a gaining interest in all things Agile. Although Agile seems to be a newer word -- it was all about XP at the time I got interested. At that time, and still today, the whole thing felt a little culty and unrealistic. But there were and are quite a lot of really valuable pieces to be picked out of it. I am not an advocate of any One True Process, but I have definitely become a Unit Test Zealot. And I'm probably just short of being a Continuous Integration Zealot. I've seen and believed in the value of the nightly build since about '99, but once I stumbled onto CruiseControl, I thought, "There is just no good enough excuse to not be using this."

My previous soul-sucking job, which I now just refer to as "the very bad place" left me feeling no creative spark from the work I was doing, so I decided to teach myself Linux. I think getting a MythTV out of it was the original goal, but I was quickly distracted by all the other neat stuff to stick to my plan. Then I got quite bitten by the Linux bug, and some of that self-righteous OSS stuff has started to rub off on me. It doesn't help any that the open source stuff I use just keeps working. Stay tuned for a rant on the evils of Weblogic. There just aren't enough voices out there badmouthing that POS tool for vendor lock-in.

I'm hoping my bet on Linux doesn't take as long to pay off as my bet on Java. I would love to be able to pilot a Linux box all day to do my development, but since I'm planted firmly in both camps, and Java does play nice with Windows, my options remain limited.