Archive for the ‘Uncategorized’ Category

Down with the mother of all colds

Friday, February 9th, 2007

I hate being sick.

The rain stopped, sun is shining, Democrats win

Wednesday, November 8th, 2006

What’s not to like about today?  Tomorrow is my final day at big river books and I am really looking forward to my next adventure (and losing my commute).

Election Day – VOTE!

Tuesday, November 7th, 2006

Today is the day that the government returns to the people. Vote!

Also, please be aware that there are a lot of dirty tricks going on this year.

If you have received a phone call telling you your polling place has changed – call your local registrar and verify it. Lots of Democrats have received phone calls designed to discourage them from voting by misleading them about the location of their polling place, their voter registration status, or deliberately annoying them in the name of their Democratic challenger. This is all intimidation and voter suppression tricks and it is designed to deprive you of your fundamental right to vote.

Things to remember:

1) Voter registrars don’t call people. They just don’t. They have enough to do. That person calling you is someone you shouldn’t trust.

2) Nobody is ever arrested for trying to vote. They may be turned away on technicalities, but there are no law enforcement officials hanging out at the polls looking to take people away for trying to vote illegally.

3) Polling locations may change – but nobody is ever charged with calling everybody to tell them. Independently verify your polling location and go there.

4) Bring a video camera and film anything suspicious.

5) If someone tells you that you are not eligible to vote, immediately photograph them, get all details including their name, party affiliation, and reason you are being denied. Ask to fill out provisional ballots.

6) Long lines. Sorry – please tough it out and vote anyhow. It is important. Be angry about it though. Long lines are often produced by election commissioners trying to discourage voting intentionally because they know your district favors candidates they don’t like.

7) If you’ve been getting harrassing recorded phone calls – be aware that the republicans are running a misleading robo-calling campaign designed to trick people into getting annoyed at their opponenents.

8) Bring a photo ID.

Some useful links:

ProtectOurVotes.org

Election Protection 365

Video The Vote

VeektheVote (cellphone video reports)

Now go VOTE!

Happy Halloween

Tuesday, October 31st, 2006

Today is my favorite holiday of the year.  Halloween is a lovely mix of tradition (pumpkin carving, parties, trick or treats) and creativity.  The challenge is to celebrate in a completely new guise every year and I always love the challenge of coming up with a new costume.

A great example of mixing old and new is these photo-realistic pumpkin carvings.   Pretty dang cool.

A-Z Countdown Begins Now

Wednesday, October 25th, 2006

I just gave my 2 weeks notice.  Thus I begin the leap from software project management to full time Smalltalk developer and small business owner.

Exciting times. Last day – 11/9

IE7 Launches (Yawn)

Thursday, October 19th, 2006

And the early reports are that it is dog slow and has trouble with AJAX style pages.  Just like IE6 I guess.  Meanwhile, Firefox2 is out and is kicking the pants off of IE7 in speed and web standards adherence.

Time for Microsoft to exit the browser game.  They have no talent for it and I, for one, will no longer invest any effort into making sites work with it.  Instead, I’ll be including a  Get Firefox Now link on every page.

As to Scoble’s comment “If there’s a way to do AJAX that works well in both browsers, why not do that? The virtualearth.com team found some way to do that.” The answer is that it costs time and money and I don’t have any extra of either.

Message to IE team: Get faster! Get compliant! Or Get LOST!  I have no time for you.

OOPSLA Dynamic Languages Symposium

Wednesday, October 18th, 2006

I’ll be in Portland from Sunday afternoon through Wednesday morning for bits of OOPSLA and to rub shoulders with other Smalltalk fans.  Contact me via tblanchard at mac dot com if you want to meet up.

I Love You – Now Change

Monday, October 2nd, 2006

Which company would you prefer to invest in?

Company A:

“Our company is a dynamic organization with the agility to quickly adapt to new market conditions.”or

Company B:

“Our company is stable, well structured, and organized. What we are doing now is a perfect basis for everything we will do in the future.”(Sounds a little like the Bush administration)

The dynamic organization that can change quickly is going to be more successful than a static organization that is set in its ways.

So how come the software industry pundits continue to try to push static programming systems over dynamic ones when dynamic systems are generally more successful? Its senseless.

In C++ and Java, the assumption is that the superclass designer knows best. Whatever interface the original developer has exposed is expected to be the perfect and complete interface for all time. There is no way to extend an existing interface without owning the source code to it.

The implementation, it is recognized, might not be exactly correct in all cases, so the implementation is left open to extension via the one mechanism made available – subclassing (maybe – Java actually allows the most arrogant developers to forbid subclassing via the ‘final’ keyword).

The problem with leaving only subclassing is that subclassing, by itself only provides for extension of the system, not for modification. Fans of Robert C Martin or Bertrand Meyer might recognize this as The Open Closed Principle. Sadly, The Open Closed Principle is only works if you happen to work for a static company like Company B.

The harsh reality is that organizations are organic – they evolve and grow to adapt to new environment conditions. Failure to evolve is death. How can you modify your organization if the software that runs your organization is closed to modification by design? Worse, the underlying tools and technology on which your software is built actually work to enforce The Open Close Principle.

So how else to evolve your system? Objective C has a construct called a Method Category or more commonly just “category”. A category is a collection of methods for a class that may be loaded dynamically – or not. These are collections of additional methods to be added to existing classes. These additions may be made part of the organizations core software assets, or they can be application specific extensions that are too specialized for general consumption.

For instance, a web services application may find it convenient to add some methods to the string class for parsing up web requests, but the billing system doesn’t need this category of methods and so doesn’t bother to load it.

Categories can also make adapting an existing class to a new protocol easy. Not having a number of separate adaptor classes all over the place keeps the number of classes low and the conceptual size of the application architecture smaller.

Finally, categories can allow the user of a class to replace a buggy or inappropriately implemented method with a new implementation without having the source code.

Another useful tool is the ability to replace one class with another. The Objective C tool for this is known as “posing”. One writes a subclass of the original class and then says

[NewClass poseAs: [OldClass class]];

Now saying [OldClass new] actually constructs an instance of NewClass. This can be handy for sneaking superclasses into the class hierarchy and also for debugging around code you don’t own.

Using these techniques, along with message forwarding and delegation, subclassing takes a back seat to application assembly and drops from the most used tool to the mechanism of last resort. After all, its much better to simply arrange the classes you already have into the right structure than to create entirely new code with entirely new bugs.

Smalltalk has similar mechanisms and results in similar designs. Method categories exist and can be loaded as packages. Posing is done quite easily by replacing a class in the Smalltalk class dictionary with another class and executing a become: on all of the old classes instances. Its easy to insert new classes anywhere in the hierarchy and all of the code is easily accessible and modifiable. Subclassing in Smalltalk application development is a relatively rare event.

Of course, if you’re sure you know what you’re doing – perhaps Java and C++ are the right languages. If you’re sure, that is.

Blanchard’s Law

Tuesday, September 5th, 2006

When in the course of developing software, the growing feeling that code generation would be a great idea actually means that the environment or language in which you are working isn’t powerful enough for the task at hand.

Years ago I was a C++ fan. It was the first language I encountered that had user definable classes and objects and we used it to build Motif GUI’s that fronted legacy character based systems. After awhile we found that the amount of boilerplate code we were writing was becoming an impediment to change and someone came up with the idea of specifying a number of aspects of the system as models and generating the code from the model.

As I was the lead of the business domain model, this approach was particularly attractive to me as we had dozens of classes that were all implemented using the same idioms, but whose set of attributes changed in minor ways with some frequency. Furthermore, we weren’t actually implementing the business logic within the classes as they were being mapped into an inference engine that provided enforcement of cross object validation rules. So code generation seemed like a great labor saving solution.

Problems occurred fairly soon after with generated code being occasionally hand modified by some maintenance programmer and changes being lost down the road. The generated code had size impacts as well. It’s easy to generate a program too large to compile and run on your current hardware. Our compile times for the system went from 2 to over 30 hours – a problem we solved by parallelizing the build process across a fleet of machines. The project was ultimately cancelled and we didn’t have a chance to see if the giant could fly. But I was left with some lingering doubts as to the efficacy of generating code.

Later on I encountered CORBA. CORBA seemed pretty cool – like Remote Procedure Calls (RPC) but a little easier to use. Interface Definition Language (IDL) looked just like C++ with a couple minor tweaks. You generated your stubs, filled in your code, and you were off. At least until you wanted to expand or change an interface. Maintaining all the generated source files got cumbersome and once again added considerably to the build times.

Java RMI was the same kind of thing – define Java interfaces (instead of IDL) and a whole bunch of marshalling code gets generated. But you end up with an awful lot of code in the end.

A bit later in my career, I encountered dynamic languages. I got a glimpse of HP’s DST (Distributed Smalltalk) which implemented CORBA using a single proxy object that could stand in for any object. NextStep’s Portable Distributed Objects (PDO) was a similar take on this theme. These smart proxies were made possible by the dynamic typing and message sending nature of these languages. Static languages were stuck with code generation because they had to satisfy the compiler’s type constraints.

Consequently, I view the growing trend towards code generation with some horror. No wonder our systems are insanely resource intensive while delivering very little value. After a decade and a half developing software, I have yet to encounter a situation where code generation is a good idea in the end. The answer isn’t to automate your inefficiency. If this is not possible, then it is time to evaluate different tools and approaches.

I’m getting better! I feel happy! I feel happy!

Thursday, July 20th, 2006

Little snippet of Monty Python there.

Scoble points to the lastest Apple is Dying rant.

This time its not PC marketshare that predicts their demise but a drop in iPod sales. What is causing the drop? Tomi claims iPod sales are being displaced by music phone sales. I don’t doubt that more music phones are being sold. But I do doubt that people are using them to consume music.

First, I’ve got a very spiffy motorola camera phone with gps, bluetooth and a whole bunch of nifty features that have been crippled by my service provider for no apparent reason. I can’t even download the pictures I take with it to my computer over bluetooth. Apparently the phone is capable, but the feature is locked out. This is typical of dimwitted US cell phone providers – they offer spiffy phones and then cripple them to try to upsell services. Expect the music downloading to be similarly encumbered. So, for instance, I’ll bet most of these phones will let you buy music, but won’t let you upload it to iTunes.

My cell phone apparently will let me buy cartoons and video too. I don’t bother – so does this count as purchase of a video player? It shouldn’t.

Which brings me to the key point. The real service I care about is end to end service with ITMS. I like being able to buy singles for a buck and take them with me, but also add them to the home music library. Will the music phones integrate with ITMS? Can I upload them to iTunes? If not they’re stillborn for the current customer base.

I have a couple other theories for why sales have fallen. Market saturation is one. Most people who want an iPod have an iPod. Furthermore, I think the novelty of having all your music with you all the time is wearing thin for some. I see less people walking around with headsets on in general these days. Perhaps for some, the lifestyle simply didn’t stick.

Other nit is I don’t think he’s counting the ROKR as an iPod – but it is. Minor point I know. Also, I believe that the iPod will eventually converge with the phone, but I think Apple will do it either by licensing the technology as in the ROKR or bringing out their own phone.

Definitely I don’t think the iPod is doomed – too many network effects to consider. I’m certainly not switching anytime soon.