June 2007 Blog Posts
Maintainability Update

This is a follow-up to the maintainability post, which was picked up by Ayende here, and then all over the place.

Quick recap of relevant points:

- I've got an application that is a working prototype, standard WinForms GUI thing.  I have to extend it for new requirements.  If it was entirely up to me, I'd use MVP, ORM, and TDD.

- I know I'm leaving.  I feel an obligation to leave code that the existing developers are going to be able to maintain.

- The developers are good people, hard working, intelligent, willing to learn.

- None of them have experience with MVP, ORM or TDD.

- There is a common architecture that is, at best, mediocre.  As an example, basically, call a stored procedure that returns three related data sets, loop through them with a reader to populate POCO objects.  Ugly.  But, it is common, so they know how to do it.  So, in the one sense I talked about in the previous post, it would be more maintainable, in this situation, with these people, to use the common architecture.

One of the developers has this thing about unit testing.  He's a very good WinForms developer.  Out of the blue, last week I'm there, he starts asking me about unit testing and how it would apply to a GUI.  I'm able to direct him to David Hayden's screencast on MVP (a very short and concise intro on it...I first thought when seeing it "I'm not learning anything new with this", then it occurs to me, "Hey, this actually makes sense because I'm starting to get proficient with it") and also Billy McCafferty's Best Practices article, which very effectively pitches ORM and TDD and MVP.  Nice.

So, anyway, two days left (after fulfilling my main obligation of passing off knowledge about the main project I was working on), I have to make a decision.  MVP, I can't do, not enough time.  TDD, not enough time, but I can do some Unit/Integration tests, and tie it into NHibernate.  I know I will have one hour to do a code review.  Fuck it.  Let's see what I can do.

I am a huge fan of Wilson's OR Mapper and have never used NHibernate.  What can I do?

Okay, let's set up a test that creates an ISessionFactory and Session.  Fails repeatedly as I try to learn in a few hours how NHibernate syntax works.  Finally get all things in order to get it to pass.

Don't even have enough time to create a true singleton class to do all this, so I'm hacking away to be able to get a *single* call to work, creating ISessionFactory in the call itself.  Ugly, I know, it's all the time I have.

One of the best developers I've ever worked with (unfortunately, never really got a chance to work with him since he's in a different part of the organization, learned tons from him, feel I paid back at least a little by pushing him in the direction of Rhino Mocks, but hope to pay it back better in the future) is using NHibernate in his stuff, so I'm IM'ing him a bit through all this.  I tell him "I'm hacking away at a suckfest" as I implement persistence logic in POCO classes (to which he responds negatively as expected) since I'm under the gun.  He helpfully corrects NHibernate syntax errors.

I implement one of the four existing system calls to use NHibernate, the other three using the common architecture.  It's all I can do with the time I have.

Last day.  Have my one hour to walk through the code with the developer.  Show the basic data structure.  Show the GUI and what it is supposed to do.  Show the old common architecture way of doing the one system call, show the NHibernate way (and this is someone who has never written a true data layer ever, because he never needed to).  Try to explain why the ORM way is better, and he eventually turns to me and says (paraphrasing) "You don't need to be trying to convince me, of course this is better.  I've done it the old way and it sucks.  I'm going to do it this way instead."

With more time, there's so much more I could have done, but I was able to plant some seeds.  They are good people, and they will be able to learn.

posted @ Friday, June 29, 2007 10:48 PM | Feedback (0)
BDUF as applied to elevators

Wrapping up at the client with some document/code reviews.  Because of lack of space, we have to reserve meeting rooms up on the top floor where the Billionaire works.

Leaving the meeting, we stand by the elevator and I notice (obviously, since it is the top floor) that the elevator call panel has no up button.

I turn to a colleague and point this out.  "Clearly, this isn't a well architected system.  What if they add a floor on the top of the building?  They should have put in an up button, but disabled its functionality."

Without skipping a beat, he replies "Yeah, and what about the left and right buttons?  You might need those later on as well."

posted @ Friday, June 29, 2007 9:45 PM | Feedback (1)
Is TDD an objectively good methodology?

The short answer is, yes, I think it is.

But, this post is in reaction to an email conversation (portion reproduced with permission) that I had with Aaron Erickson:

"I think anyone who works in the real world knows cases where TDD wasn't used, but happens to be successful.  Steve Yegge had a good analogy - you can start with warmed over shit, but if you add enough chili to it, you get chili.  People that do TDD suffer from selection bias - meaning - only good developers are doing TDD.  Which, of course, makes the results so far seem good.  Trust me - once it gets to the masses, it will have about the same success rate as any other methodology.  The good will write good software using it, the mediocre will write mediocre software with it, and the sucky programmers will still be sucky with it.

I will be more convinced when a methodology makes a bad programmer better.  I think I will spend a long time waiting for that to happen ;)"

Now, there's a certain level of cynicism/skepticism in Aaron's comment.  As a cynic/skeptic myself, I can relate to it (and how far he would go in defending this as totally serious I would leave to him). 

But there is a point to it.

I think it takes a certain level of skill and education to learn TDD/MVP/IoC, etc.  I don't think education is enough as there is a certain level of 'innate' (for lack of a better word) ability to be able to pull this off successfully.  This is where I think I disagree with the 'idealists' of the Alt.NET crowd.  By definition, elite developers are in the minority.  To be fair to the idealists, I do think you can increase the number of developers who can successfully pull off programming using these advanced techniques.

Having said that, I think it is clear that you can do TDD, etc. poorly and the wider the range of programmers who are exposed to it, the more mediocre to poor results you will get with it.  I'll use myself as an example.  I'm egotistical enough to say that I'm clearly intelligent enough on some basic level, but whether I have the skill set to be able to implement these advanced techniques is open to question.  I'm trying (in every sense of the word), but I have no realistic expectation that I will be able to code at the level of an Ayende or Jeremy Miller.  I just hope to be able to implement them well enough to provide business value to my clients.

Or at least not do it poorly.  But, a question I have raised previously bears repeating: how can you prove objectively that certain advanced techniques are in fact advanced?  I certainly believe that some of them are, otherwise, I wouldn't be trying to learn them.  But how do you prove this?

And how do you prove which techniques should be applied in particular ways?  As I implement MVP on a project, I find there are (exaggerating) 147 different ways to do it.  Well, which one is best?  Or, at least, which one is best for the project that I am working on right now?  How can I know?  The Alt.NET guys get into fights over this at times.  So, if I'm using them as guides to, well, guide me, who should I believe?

posted @ Monday, June 25, 2007 8:45 PM | Feedback (1)
Before You Get Too Cocky With Your Bad Self

2 year old kids tend to be cute anyways, as is this one.  But they don't usually have an IQ of 150.

posted @ Sunday, June 24, 2007 2:10 PM | Feedback (0)
Asshole Driven Development and other winning methodologies

Very nice and funny post here.

Definitely read the comments for a lot of added methodologies.

posted @ Friday, June 22, 2007 8:30 PM | Feedback (0)
When is an apology not an apology?

So, Scott Bellware posted something about how Boo couldn't be included in Visual Studio 2005 as an add-in because of some license thing having to do with VSIP.  Enter in one of his hilariously stupid rants against Microsoft (he hasn't descended to using the 'Micro$oft' label that good old Linux open-source advocates use, though one is inclined to believe he would love to).  Rant, rant, rant.

Except, as he was quickly informed, he was wrong, completely wrong (Scott Guthrie pointed this out in what appears to be about 2 hours, and others followed up).

So, he posted a follow-up admitting his mistake.  Which is all well and good.  Except his 'apology' turned into yet another rant about how the earlier license that had this license issue thing was the cause of some great harm, and it's all about FUD and blah blah blah blah blah.  And Microsoft should pay up to...someone...for the harm caused by this great Boo thing.

Apparently, he seems to think Microsoft should openly support all open-source projects or something.  It's hard to tell, since when he rants, he doesn't really make a lot of sense.  The point is inherently nonsensical.

It's a weird thing listening to OSS advocates in the .NET space.  The non-Microsoft spaces like Linux are at least consistent generally.  Microsoft bad, open source good.  I first encountered this attitude with a guy named Lazero I worked with in Miami who introduced me to Linux through Slackware.  He would pontificate about the evils of Microsoft and I would tell him that the black helicopters from Redmond would kidnap him in his sleep, since fighting the Borg was futile.  I learned a *ton* from him, and we could banter about the 'arguments' in a good humored fashion.

People like Scott seem to think....well, actually I can't tell what he things exactly.  It seems as if people think that Microsoft should support OSS projects, and not introduce any technology that encroaches on any fertile territory that OSS has already started on.

This is stupid on just about every level.  If nHibernate is so great, it shouldn't be threatened by the upcoming LINQ and Entity Framework.  If nUnit is so great, it shouldn't be threatened by VSTS and TFS.  And it shouldn't expect support from Microsoft at all.  The whole 'myth' around OSS is that the community can create these great tools that compete against commercial products.  Well, then do it.

And to be honest, nUnit and nHibernate don't seem to be suffering.  At all.  They sure as hell are cheaper, and they seem to work really well.  And people use them all the time. 

And I don't see Mono suffering that much.  Then again, Mono is run by non-Microsoft OSS types, who don't surrender and whine each step of the way.

But, it is always entertaining to read stuff like this.  As always, read the original posts and make your own opinion.

posted @ Thursday, June 21, 2007 9:11 PM | Feedback (2)
I Think I'm Starting To Get It

Scott Bellware has posted something about perfection.

Ayende has posted a response to a post by Nick Malik.

As always read all the originals, as I'm going to be paraphrasing a lot, and so probably misinterpreting to make my point.  Whatever that turns out to be.

So anyway, Scott, in his usual style, says in a number of paragraphs something that I think could be said in a sentence (see my own posts for a similar style):

"In software development, you cannot achieve perfection, but when developing, you should strive to achieve it."

I agree with this (well, to an extent, see below).

He includes this quote:

"The failure statistics for the software development industry is an expression of the dumbing-down of software development through short-sighted squelching of acts of perfection."

This is really wordy, but the 'dumbing-down' part is important.

Ayende, in his usual style, disagrees with Nick pretty much completely, and includes this:

"Sorry, I really can't accept this approach, and while it explains some of the stuff that Microsoft puts out, the only thing that it helps is to stifle innovation and development on the platform."

A number of things jump out at me when I think about what both Scott and Ayende said, and try to tie them together.

1) My dissertation was entitled "The Conceptual Theory of Meaning: God, The Universe, and Everything."  It was by far the longest dissertation in the history of the Department of Philosophy at the University of Miami (at something like 150,000 words, I had to make the font typeface almost illegibly small to get it to bind in the book properly), with I think the longest dissertation defense in the history of the department.

Trying to sum it up quickly, the main thrust as it relates here was something like this:

The meanings of words are tied to something I called 'Conceptual Schemes'.  To the extent that people share the same Conceptual Scheme about a subject, communication works.  But, when you talk about almost anything of complexity, a massive amount of time ends up figuring out how people's Conceptual Schemes differ.

When it comes to Nick's understanding of 'Mort', his Conceptual Scheme is radically different from, say, Ayende's, Sam Gentile's, Scott Bellware's, and a host of others.  Because of this, that portion (and more) of the blogosphere though Nick was out of his mind when talking about Mort being inherently agile.  They were all using the same term, but because of the significant difference in Conceptual Scheme, conversation broke down very very quickly.

But while I think that is important in understanding the nature of conversation in meaning, that's not the most important point here.

2) Starting with Ayende's point, though I think it dovetails with Scott's point as well, what he objects to in the proliferation of 'no code' designers/wizards/etc. is that they place a default level of 'imperfection' in the 'no code' (btw, there's always code, you just don't write it yourself, so the claim that no code is needed when using designers/wizards/etc. has always struck me as stupid) that is produced.

While 'dumbing-down' may be more pejorative than required, there is something to this.  When you use the wizards, you don't get the strictest separation of concerns that you can.  Hell, in many cases, you don't get much of any.  Ayende has been working with SSIS in places recently, and I've had experience with that.  You use the nice drag and drop stuff and for basic functionality, it works perfectly.  Get the *slightest* requirement to do functionality more than basic, and you fight with the IDE tooth and nail.  In SSIS' case, you have all these XML crap documents and if you try to hand-edit them, all goes to hell.  If you have a flat file that doesn't fit exactly the basic types (csv, fixed-length, ragged right) and you face the prospect of having to write obscure custom code, and only in VB since C# isn't supported, implementing obscure interfaces, generally you end up (in my own cases at least) jettisoning SSIS altogether and handwriting long T-SQL scripts because that's the only way I could get the code to do what I wanted it to do *precisely*.

And then I read this comment from Ayende:

"I am a Mort on quite a few levels (the entire WinFX stack comes to mind), does this mean that I am bound to write unmaintainable code and should be locked down to a very small set of "safe" choices, which were chosen for me by those Above Me ?"

And it made sense.  It was exactly (I think) the same experience I had with SSIS.  I've gotten (apparently) very good at hand-writing T-SQL.  SSIS prevents me from writing the code that I know needs to be written, because it prevents me from easily writing what I need to write.

And I started to think about Scott's claim that the Entity Framework prevents you from doing TDD/BDD.  I always thought this was an absurd claim and asked him (more or less) "Don't you just mean you can't refactor easily?"  To which he responded (more or less), "Yes."

And so, what I'm starting to 'get' is basically this: when you absolutely need to have the code do what you absolutely need it to do, Microsoft's tools almost always get in the way.  The tools generate code for you (so, so much for 'no code'), and unless you are a masochist, you don't want to try to modify that code.

This also begins to explain to me why people are high on things like Monorail.  I philosophically don't like Rails in general, the idea of throwing out (basically) all controls and having to hand-write every single control you want to use makes me cringe (you can't really use them even though they are 'supported'), and having to do it in a PHP style syntax makes me cringe even more.  But isn't this exactly what I did with my T-SQL?  Screw the pretty auto-generated SSIS stuff, I want to do *exactly this*.

3) Having said all that, Nick's general point, and Microsoft's general trend, are correct.

When I work with SSIS, a large majority of time, it does exactly what I want it to do.  I don't have to hand-write all that crap.  It just does what it needs to do.

Because I am *painfully* aware of when it fails, I know to look for this.  But, with the people I work with, most of the time, it doesn't fail.  It does what it needs to do.

And for a huge percentage of people, the John Matthews' of the world, the tools that Microsoft provides do just what needs to be done.  And for those people (and when I say 'those people', I *absolutely* do not mean it in a derogatory fashion), to force them to learn the depths of T-SQL would *greatly* inhibit their productivity, in the same way that if I had to go back and learn how to do garbage collection in a non-CLR environment would inhibit my own.  I don't *want* to have to know about any of that. 

To repeat my paraphrase of Scott Bellware's point, "In software development, you cannot achieve perfection, but when developing, you should strive to achieve it."  As I try to deliver value to clients, I try to do this every step of the way, to the best of my limited ability.  And to Ayende's point that Microsoft's tools limit (one could say 'prevent') one's ability to extend beyond what they dictate, I can't really disagree with that either.

But, ultimately, in yet another post, maybe, I would expand on why their idealistic dream that everyone who develops in .NET would even need to extend beyond the tools is, for the lack of a better term, 'silly.'

posted @ Tuesday, June 19, 2007 9:07 PM | Feedback (2)
Thank You, John Matthews, Whomever You Are

In a comment in response to a comment by Haacked in this post over at Nick Malik's blog, someone named John Matthews makes a very good presentation that ties into a lot of what I've been saying.  I can't link to the comment, and I guess I can't just cut and paste the entire thing but here are the key points:


"there is a question no-one seems to be addressing.  Why are these Access databases, VB hacks and 'quick fixes' being used in the first place."

"I was (am) a Mort...we had budgets to work to, we had to make a "do what you can with what you have" and you do it as quickly as possible to keep ahead of your competitor in the marketplace."

"In most cases (33 out of around 38 projects) the codebase was discarded once the results it was required to produce were finished."

"In the other 5 or so cases, the database and code continued to be used and expanded upon."

"Did those 5 projects end up costing more than they would have if the 'real' developers had gotten hold of them?...Yes.  Most certainly."

"Did the return on the 38 projects justify the expense of rewriting the 5.....Absolutely.  Without doubt."


Great stuff.

posted @ Monday, June 18, 2007 8:11 PM | Feedback (0)
You can tell by how they type

This is one of those interview sort of things that you couldn't defend in front of a congressional sub-committee, but is true regardless.

I hate syntax.  I can *never* remember different syntax between, for instance, C# and T-SQL.  Just can't do it.  To this day, knowing how to do 'group by order by' trips me up.

Call me a moron. 

But, as a sort of leading indicator, I can watch someone type into their IDE of choice and tell if they are good.

Best DBA I've ever worked with?  The backspace was invented for him, since he could never get it right the first time.

posted @ Monday, June 18, 2007 12:19 AM | Feedback (2)
More on Maintainability

How many of you have had this sort of discussion:

"Well, if I click on this button, I get an error message.  If I click OK on the error message, the application crashes, but if I hit 'Cancel' and then click on the button again, it works."

End users learn very quickly the deficiencies of your code.  And they learn just as quickly to get around them.

posted @ Sunday, June 17, 2007 11:56 PM | Feedback (0)

About maintainability and why certain things are easier.....

As (nearly) always, It depends on what you mean.


Suppose I have been given the task of building a fairly simple WinForm applicationt that will be used to filter data for problems, allow the users to 'clear' those problems by either saying they aren't problems, or manually overriding the values they want.

As always, the requirements are vague, but I know the range of what they are now, and what they will be in the future (someone will immediately say, "But you don't know this"....I don't know how to explain this other than to paraphrase the former Secretary of Defense....there are things we know we know, and there are things we know that we don't know, and there are things we don't know that we don't other words, there are requirements clearly defined now, there are requirements that we don't have clearly defined but we know the range of possible definitions, and then there are requirements that are completely out there......for that last category of requirements, this application will never be extended to include them, a different application will be built.  Because that's how they do things, and I know this).

How would I, jdn, prefer to build this application?  Since it's database driven (and really, what isn't), I want OR/M definitely.  I personally prefer Wilson, but it is less well known than nHibernate, which was recently approved by the committee that approves things, so I should go with that (if you understand this last sentence, you already know what my conclusion is).

Should I use TDD?  Well, let's put that aside and say it should at least have as comprehensive a test suite as possible (whether they are written first or second or third....that's often a religious argument).  Absolutely.  Now that I've drunk that kool-aid, I can't imagine not having unit tests for at least core business logic (if not also the ORM layer).

Should I use some variant (at least count, I think there are 147, roughly) of MVP/MVC?  Well, if I really want to ensure maintainability (in one sense), I, jdn, would want this.

Okay, so, TDD-like design, ORM solution, using MVP.  Oh, and talk to the users, preferably before you being coding.

One problem (well, it's really more than one).  I know for a fact that I am going to be handing this application off to other people.  I will not be maintaining it.  I know the people who I will be handing it off to, so I know their skill sets, I know generally how they like to code.

None of them have ever used ORM.

None of them do unit testing.  One knows what they are and for whatever reason hates them.  The others just don't know.

None of them have ever used MVP/MVC, and I doubt any but one has even heard of it.

All of them are intelligent, so could grasp all the concepts readily, and become proficient with them over time.  If they are given time by their bosses, or do the work overtime, or whatever.

There is a 'standard' architecture in place that they have worked with for quite some time.  I personally think it blows, and frankly, so do most of them, but it is familiar, and applications can be passed between developers as they use a common style.

I am not going to have enough time to teach them ORM, MVP/MVC, convince them of the brilliance of unit testing, because I'm leaving.

I submit to you, that my preferred way would very well be less maintainable, by that group of developers in that situation.  I don't know if I would go so far as to say that it would be irresponsible of me to do it my way, and then just toss it over the wall to them as I run out the door.  The jackass in me wants to do it, even if just to force the one guy to have to learn unit testing, because, well, I'm a jackass.

And I submit to you, that in a vast number of cases this is true.

The reason I made the comment about ODS is along similar lines.  Yes, I've used them.  Yes, they make my teeth hurt.  Yes, unless I am forced to, I will probably not use them again ever.

But, by show of hands out there in the community, how many people are familiar with ODS, can use the wizard to connect to their business objects or whatever, and make an application that works?  Or even use, gag, typed datasets, which produce some of the most hideously auto-generated code ever?

Maintainability means more than one thing.

posted @ Thursday, June 14, 2007 12:13 PM | Feedback (2)

Starting 7/18, Comcast in Chicago will have FoodTV in HD.  I love food porn.

posted @ Wednesday, June 13, 2007 10:14 PM | Feedback (0)
Novices and Sheep and Morts, Oh My!

Ayende wrote a post in response to a post by Peter Laudati.  Read the originals, both good stuff.

I'm going to paraphrase them in places to make a few points, so definitely read the originals.

There are (at least) a couple of different issues going on here.

Peter's post was a response to a general 'idea' that Microsoft caters to lower-skilled developers vs. 'alpha geeks' and generally accepts this notion, saying in a response to Sam Gentile's comment:

"My point with the post is that I acknowledge that Microsoft’s tools cater to novices.  But novices make up a much greater percentage of the user base.  In defense of Microsoft, I think it’s to be expected that the tools cater to those folks. "

In the original, he added this point:

"We'd all like to think of ourselves as 'alpha-geeks', but at the end of the day the reality is that the majority of folks in the world are not.  Those so-called 'alphas' need to get over themselves."

When talking about the types of tools (designers, wizards, etc.) that he says help support the novices, he said:

"When I see developer tools coming out of Microsoft that support this group, I get excited because it makes my former job as a 'shepherd' easier."

In Ayende's post, he objects to a number of things.  The use of the term 'shepherd' particularly bothers him:

"I have no way to express just how bothered I am by this statement. Shepherd? Developers are not sheep! Maybe a further look is needed, one that goes beyond the sheering pens."

And his contempt for things such as designers, wizards, etc. is also clearly stated:

"to get to the point where you hand dumbed-down tools is showing acute contempt for the developers in question, and I find it insulting."

Okay, so proper quotation out of the way, what about it?


Do 'Alphas' need to get over themselves?

In the aforementioned response to Sam Gentile, Peter admits:

"My suggestion that ‘alphas’ need to get over themselves may have been a bit over the top. :)"

Now, I think Peter is just being polite here.  I think it is absolutely the case that there is a significant subset (vaguely, 'subset' meaning not all, 'significant' meaning more than 2) of the Alpha-Geek community in .NET development that needs to get over themselves.  In a certain respect.

As I've noted in various places in comments to posts (including mine to Ayende's), this subset seems to be unable to espouse best practices in code development without either implicitly or explicitly denigrating or condescending the general Microsoft developer community.  'Mort' is a common term.  It can (in theory) be used as a purely descriptive term, but more often than not, it is used as a purely derogatory term, essentially semantically equivalent to mean 'moron.'

Regardless of whether the term 'Mort' is used, the attitude is evinced by many people in many ways.  'Morts' are dumb programmers who don't understand better programming practices, don't care about them, and couldn't implement them if you explained it to them.

As I'll explain later below, this is simply false.

Moreover, it is, for lack of a better phrase, 'bad marketing' to keep displaying this attitude.  It serves nothing and makes it that much harder to spread the practice of better programming practices when you insult the people you theoretically want to lead to the promised land.  I don't know if I ever qualified as being a 'Mort.'  I programmed in Basic as a teenager (goto 1000, damn, I need more lines, goto 10000) but didn't start 'professional' programming until .NET 1.0.  My programming was probably sub-Mortish to be honest.  It wasn't good, whatever it was.

And I'm fine with that.  I did a lot of RTFM, reading the writings of better programmers, etc.  Jeremy Miller says this means by definition I'm not a Mort.  Okay.  Whatever.  I'm trying to get better each day to make my services better for my clients, so whether I do or do not qualify as being 'Mort' or 'Alt.NET' or anything isn't relevant to me.

But the fact of the matter, and what I perceive Peter's main point to be, is that the vast majority of programmers aren't great.  This is so obvious a point as to be unarguable, but then the question arises: what purpose is there in insulting the vast Microsoft community base?  I don't see it.


Are Designers, Wizards, etc. inherently Bad?

The answer to this is unequivocally 'No.'  The reasons for this answer are a bit more complicated.

It is difficult to explain why, but I will start with a post by Jay Kimball.  What this has to do with designers, etc. might not be immediately clear, so bear with me.

Assuming I read it correctly, one of the points Jay was making in questioning the need to use MVC/MVP in building web sites.  He made a comment (paraphrasing) that MVC/MVP was simply not necessary for web sites that didn't have high traffic.  The 'high traffic' bit got a lot of comments, and he got a lot of heat (and condescension in the blogosphere) but in my opinion missed the point.

So, I'll rephrase it.  Is MVC/MVP necessary when doing web site development?

Of course not.  In fact, I would make the stronger statement that it is *wrong* to use MVC/MVP when doing web site development, unless it is a good thing.

I use MVP.  I love it.  I use it all the time (I use it with WebForms, and Ayende has stated that you can't do MVC/MVP with WebForms.  I think this is acceptable hyperbole.  Obviously, you can use MVP/MVC with WebForms, and so what I think he means is that you can't use it to its best ability with WebForms and that you need to use something else, and he would recommend Monorail.   I don't like Monorail because I don't like ROR in general, but that's a personal philosophical thing beyond the scope of this post.  And to be fair, I think Ayende would say that you can better WebForms without using Monorail, that just happens to be what he uses).  But it is simply not the case that you need to use MVC/MVP to develop web applications.

From a purely business perspective, what you need to do is create applications that fulfill the needs of the business users.  Full stop.  Whether the code is 'pure' from some perspective is *completely* irrelevant.

If I understand Ayende's points on this, it is that you don't know whether an application will need to be 'extended' in the future.  But I would posit that this is clearly not true.  A *large* number of applications have a clear set of requirements, and they won't be extended in the future.  You need to handle the requirements that the business users require right now.

And it is *unarguable* that it is easier to use, say, the ObjectDataSource, to accomplish this than to do MVP/MPC.  There is *no* argument against this.  None. 

And the same holds true for almost any application that uses a wizard or designer, be it web based or WinForm based.  It is unarguably easier to use a wizard or designer to design the vast majority of applications that are used by businesses around the world. 

Proving this, of course, is next to impossible.  But I would posit the following:

a) the vast number of applications that are used by businesses to support their efforts to make money do not require advanced programming techniques.

b) the code that is produced by using designers, wizards, etc. is sufficient to support those applications.

c) the code that is produced by using designers, wizards, etc. is more easily maintained by people who aren't alpha-geeks.

d) if you have someone like Ayende on your development staff, the code that is produced by using designers, wizards, etc. will never be anywhere near what your Ayende-type developer can produce.  So if you have one of those, fuck the designer.



Peter was right.  Since he's more polite, he stepped back from his 'get over themselves' comment, but his original comment was correct.

Using the 'dumbed-down' designer/wizard tools is almost always a good business decision.

In a perfect world, the designer/wizard tools could match the level/skill of someone like Ayende.

If you have skill, you can roll your own designer/wizard tools to match the level/skill of someone like Ayende in at least 75% of cases, and that's pretty good.

posted @ Wednesday, June 13, 2007 10:01 PM | Feedback (5)
How Do You Unit Test Deployments?

It is a simple question.

A large part of successful code involves writing, well, good code.  Kicking and screaming, I have been dragged into the opinion that using certain (though not all) practices that can roughly be defined as 'Agile' is probably a necessary (though not sufficient) condition to writing good code.  Specifically, unit testing.

But a significant part of it also involves being able to deploy that code successfully and maintain it successfully.  The 2nd part is tricky.  There is 'code maintenance' in the sense of being able to test and expand it going forward.  But there is also 'code maintenance' in the sense of the support staff of a company being able to troubleshoot it.

The 2nd part do you do something like the equivalent of unit testing for deployments?  A *significant* amount of time is often required to move code from Dev to QA to Prod.  It's a massively fragile process and making it less fragile would be (arguably) more productive than even writing good code.

Are there best practices to make this deployment process more agile?  How can you do this?

posted @ Wednesday, June 13, 2007 8:36 PM | Feedback (0)
If you have multiple Visual Studio IDE windows open at the same time

This is one of those things that should be obvious, but I occasionally forget.

If you change any of the Tools/Options in one window, they don't automatically transfer to any other open windows.  And when Visual Studio closes, it writes off your personal settings to a common location, so that last one that closes is the set of Options that will exist the next time you open a new window.

posted @ Saturday, June 09, 2007 8:53 PM | Feedback (0)
Porcupine Tree Concert, June 1st 2007, Park West, Chicago

As I had hoped they mixed up the set list quite a bit.

At the previous show, the opening act, 3 (yes, their name is a numeral), actually started at 6:45 PM, instead of at 7:30 PM, so I arrived just in time to hear the last two minutes of their last song.  Thought it was pretty good.

This time, they hit the stage right at 7:30.  It's hard to categorize their music (and I probably would get it wrong anyway).  Thrash?  Sort of.  Except for the flamenco stuff (more on this in a minute).  The lead vocalist (one of the two guitarists) actually looks kind of like what I would have looked like if I had been a rock star.  He also played without a pick (including playing like a bass player while also strumming chords, impressive stuff), something I used to do at times when I played.  The other main guitarist played a few too many 'whammy bar squealing' noises for my tastes, but was otherwise good.

One thing their set reminded me of was this: unless you are familiar with the group playing, you generally can't tell what the hell they are singing at any point in time, which makes it hard to track the songs later.  This is really unfortunate, because I'd like to hear a recorded version of the last song of their set.

I don't know if it was part of the actual song, but it started with a drum solo.  When it started, I thought, 'Great, maybe the drum set will rise up in the air and start spinning' (Alex Van Halen, Monsters of Rock Tour 1988, Houston, TX).  But it wasn't bad, and the 2nd percussionist got in on it (not sure about the whole biting the cymbal thing, but okay).  Then the lead vocalist, playing acoustic as he did most of the set, did this really intricate, talented instrumental thing that was like flamenco guitar.  Then he started scat-singing.  I swear, I'm not making this up.  Then the rest of the band cranked in with a really good hard rock bash, during which the singer sang plaintively about....something.  Couldn't tell what the hell he was singing.

So, you had a flamenco, scat, hard-rock song.  And it worked.  It was really, really good.

As the song came to a close, the singer did something that I just caught at the last show (so, it's a gimmick thing, but okay).  Now, keep in mind, he's playing acoustic, and he's playing without a pick.  As the song builds to a close, he strums so hard that he *breaks* the strings.  If you've ever played guitar, think about this.  With thin strings on an electric guitar, you can break a string pretty easily, especially if you do a lot of bending, etc.  This is snapping thicker strings on an acoustic by strumming really, really hard.

That had to fucking hurt.  I can't imagine doing that.

So, I'll be looking for at least one 3 song.  If that makes sense.

Like clockwork from the first show, PT came on 30 minutes after 3 ended.  They opened with 'Fear of a Blank Planet' and 'My Ashes' as they did previously.  SW then asked how many of the crowd had been to the previous show, and how many hadn't.  Then said that they were going to mix things up for those that had been to the first show.  Cool.  They then proceeded to play the rest of the new CD, and then, a bit surprisingly, left the stage for 5 minutes (the roadies took out the keyboard SW used for 'My Ashes' and 'Sleep Together').  They came back and played some of the songs they played the first time, and replaced some of the others.  Encore was 2 songs instead of 3 (SW made a comment about how they've played 'Even Less' to death on the last 3 tours, so skipped it), and they were done.  Another well played 2 hour set. 

In rough order (think I'm forgetting one or two), here's the set list:

Fear of a Blank Planet
My Ashes
Way Out of Here
Sleep Together

<5 minute break>

Lightbulb Sun
Open Car
Mellotron Scratch
Drown With Me
Blackest Eyes
A Smart Kid

Mother and Child Divided

Random notes:

Mother and Child Divided is like Rush's 'YYZ.'  It isn't bad, per se, but I don't see any reason why it gets played in concert.  It's boring.

Disappointed that my other two favorite PT songs ('Arriving Somewhere But Not Here' and 'Start of Something Beautiful') didn't make the 2nd show.  I was hoping at least one of them might slip in.  Though, I did just get in the DVD of the Blackwing tour show at the Park West from 2006, so I can see them there.

'Lightbulb Sun' was never one of my favorite songs, but it works *really* well live.

'Drown With Me' sounds like a Marillion song.

'Anesthetize' is probably firmly tied for my 2nd favorite song of all time (behind King Crimson's 'Starless'), though there's a group of about 90 songs tied for #2.  They pulled the song off almost effortlessly.

Overall, 'Fear of a Blank Planet' comes across better live than on recording.  I really like the CD, but especially 'Sleep Together' is very very good live.  It translates to a live setting well.

I had decided to pay more attention to the video display (on about half of the songs, they had video playing), but I just couldn't do it.  It doesn't do anything for me.  The one exception was the video for 'Way Out of Here' which shows a young pretty 'goth' girl walking on the train tracks, mourning the death of her friend (never made clear how she died or why...lyrics indicate goth girl had something to do with it), and then possibly being hit by a train (at the very end of the video, you see the shadow of her legs walking on the tracks, so maybe she isn't dead).  When the lyrics talk about cutting out the face from the photographs, if I saw it correctly, goth girl is cutting out her own face, not her dead friend.

What does it mean?  Most likely, absolutely nothing.

Oh, I take that back.  The video for 'Sleep Together' had this....alien on a motorcycle surfing the Internet inside a bubble.  If you ever see the video, that's highly accurate, but is sort of useless as an explanation otherwise.  I can't help you there.  At the end of the song, the video pans back and you see that there are thousands, maybe millions, of these bubbles with aliens the beat of the music.

What does it mean?  Most definitely, absolutely nothing. 

Best of all, she wasn't there.  Or if she was, I didn't see her, and she didn't see me. 

Looking forward to seeing them again.

posted @ Saturday, June 02, 2007 8:51 PM | Feedback (2)
Why is Sean Salisbury on the Radio?

Sean Salisbury from ESPN had a failed radio show in Chicago on Espn1000, where he was paired with Steve Rosenbloom from the Tribune on a show called 'Salisbury and Rosenbloom'.  It lasted about 9 months.  It failed for a number of reasons and there's a lot written out there that people can Google if they want.

One thing that I never saw anyone write about was the sheer unprofessional behavior of Salisbury in his chronic inability to actually show up for work on time (I'm not talking about the planned absences due to his father's illness, of course).  There were numerous times where Steve would open the show as 'And Rosenbloom' because Sean hadn't shown up for one reason or another.  It's pretty clear the guy had issues that made him a better candidate for an afternoon drive slot.  If you know what I mean, and I think you do.

Anyway, today, I got to listen to him on ESPN Radio with John Clayton on the show called 'The Huddle', a show Salisbury was on before the Chicago gig.  They were discussing the new ban in the NFL on alcohol on planes, locker rooms, and team functions, and the question was posed "Is this over-reaction or the right thing to do?"  Sean's answer was "Both."  Okay, that's fine.  Anyway, Sean was going on that while it was over-reaction, it was okay, because he believed in prevention.  Okay, that's fine.  He was arguing this in his normal stuttering, rambling, completely un-able to speak a complete sentence for at least 45 seconds annoying manner, when he laid out this gem (paraphrasing since I don't remember the exact words, but it was basically this bad):

"It's kind of like when one of your kids brings home a test with a 'B' grade.  So, that's why I believe in prevention."


*What?*  What the hell does that mean?  Is there even a germ of an idea in there?

So, after this rambling monstrosity, Clayton answers (paraphrasing again) "Of course, it is an over-reaction.  If you have a team function, what are you going to serve, milk and cookies?"  To which Salisbury does a virtual 180 and then discusses how the ban is bad, that it is unenforceable, that grown men will drink, etc.  In the same incoherent manner, for something like 45 seconds.

When he's on Sportscenter and talking about football, and has to answer short questions with short sentences, he's tolerable, and he knows a lot about the game.

But on the radio, he's about the worst thing.  Ever.

posted @ Saturday, June 02, 2007 8:18 PM | Feedback (0)