Rockford Lhotka

 Friday, May 5, 2006

There's a new online CSLA .NET forum, hosted by Magenic Technologies, with the Community Server software provided by Telligent.

As always, the home site for CSLA .NET is, where you can find news, answers to frequently asked questions and downloads of the framework and related resources.

This forum is a replacement for - which has served the community for a number of years. Unfortunately turns out to be rather unreliable and slow, so the forum had to be moved. If you are looking for older discussions you may want to check there. Associated with that forum is, which allows you to search the archive of that older forum.

But now we've got this new forum, which will hopefully overcome some of the limitations and reliability issues of MSN - so please make good use of the forum and enjoy!

Friday, May 5, 2006 10:01:52 AM (Central Standard Time, UTC-06:00)  #    Disclaimer
 Wednesday, May 3, 2006

My author copies of Expert VB 2005 Business Objects arrived on my doorstep today, meaning that the book is in print and is being delivered to booksellers right now. This means it should be available on bookshelves and from online sellers very, very soon.

Wednesday, May 3, 2006 7:37:30 PM (Central Standard Time, UTC-06:00)  #    Disclaimer

Microsoft is holding an architect contest at Tech Ed this year. Click here for details.

Wednesday, May 3, 2006 8:44:59 AM (Central Standard Time, UTC-06:00)  #    Disclaimer
 Tuesday, May 2, 2006

You might wonder what’s up. I go and stir the pot by saying that software development is too darn hard, and that TDD is overhyped (and broadly misunderstood) and then disappear from the conversations.


Well, so far in 2006 I completed the CSLA .NET framework (twice), finished two books, buried my last Grandmother, have been supporting my Mother through dealing with cancer (which has shut down her kidneys, so now she’s dealing with dialysis too), had the lower level of my house flood (with luck my office will be reclaimed for use late this week – at least my son has his bedroom back) and I’ve spoken at 9 events requiring travel (2 international). And things don’t look to change soon. I’m traveling 5 out of the next 7 weeks (1 international), and my Mom's chemo runs through the summer (fingers crossed).


In summary: I’ve been just a little busy, and blogging is comparatively quite low on the priority list. Certainly it falls below family, generating income and replacing carpets and walls.


It isn't that I meant to stir the pot and then disappear - but the universe decided to complicate my life in some unexpected ways. So I'm sticking my head up when I can, and I hope you understand that the frequency of my participation in any dialog is a bit restricted at the moment.


A while back I posted a blog entry suggesting that software is too hard. This was recently republished by Fawcette.


This generated a few emails from people saying that they agree; that their experience is like mine; that the process of analyzing business problems, then designing and building software to address them is fundamentally the same today as it was 15-20 years ago.


It has also generated some emails and comments from people who either disagree, or at least find the conclusion demoralizing or depressing.


Well, it was supposed to be depressing, so in that I feel quite comfortable.


Let’s face it. Most software basically collects data from users, stores that data and then displays the data back to the same, or other, users in a different format. This type of system is often called forms-over-data (or if you remember terminals it was screens-over-data, or if you are a web person maybe it is pages-over-data).


This is the software I’m saying is too darn hard. Why the hell is it so hard, does it take so much work, to create a data entry screen that dumps the data into a data store? And why can’t we just flip a switch to say we value performance over scalability, or scalability over security, or fault-tolerance over performance or whatever?


This is where I’m saying the Elvis/Einstein personas and our vendors have failed us.


In fact, I’d suggest we’re going the other way. We’re coming up with ways to further complicate the most common types of application by adding in SOA, TDD, WinFx and more.


Now let me be clear here. Most applications are mostly forms-over-data. Almost every application really does have some small bit of interesting complexity. In other words, out of perhaps 100 forms in an application, 1 or 2 might be more than simply forms-over-data. And of course, there are those precious few applications that are not forms-over-data, and you people working on those projects should consider yourselves truly fortunate!


So the problem is this: we get so wound up trying to figure out how to do that 1-2% of the application that is interesting that we complicate the hell out of the 98% that should be drop-dead trivial. We rule out tools, technologies and frameworks that could have trivialized the 98% because they can’t address the 2%. We adopt expensive methodologies to enhance productivity and/or quality because those methodologies are truly useful for that 2%. But then we apply the same ideas to the 98%, needlessly increasing the complexity and cost of something that should have taken precious little effort.


You can TDD/unit test/integration test until you are blue in the face. You can triple or quadruple the time and effort required to build a data entry form. And in the end you’ll still have a boring old data entry form. Worse yet, you can’t automate testing of the part that matters the most: the actual UI. The part that the user cares about typically remains untested until the users try it out themselves.


This is what frustrates me. See, I fully understand and support the idea that you should test the hell out of the 2% of the app that’s hard. Whether you write the tests before, during or after the development to me seems like a secondary question – but actually doing the unit and integration testing should not be optional. But I think that development of the bulk of the app, the trivial forms-over-data part, should be so automated that we don’t actually “develop” it and thus don’t need to do any sort of low-level unit testing, or probably even integration testing.


Again, let me be clear. It is this forms-over-data stuff that’s too hard. It is this stuff we’ve been building basically the same way for at least 20 years. Why? I don’t know.


This problem space isn’t that big or hard. Yet we keep rehashing it over and over and freakin’ over again. Now we’re going to rehash it with SOA and WPF, with a sprinkle of workflow just to make it really hard.


Given that we actually need to code forms-over-data, of course we feel the need to tell people to do unit testing. If you code it, you should test it. Since people struggle with the discipline to write the tests during or after development, TDD is helpful in that it (maybe) provides the discipline to write the tests first. But again, the key is that if you write it you must test it.


But what I’m saying is this: we shouldn’t code this stuff!!! Forms-over-data should be automated.


Scott Bellware saysSoftware development isn't too hard.  Software development is fun.  It's a challenge - of that there's no doubt.  And sometimes it's a tiger that won't be tamed.” And he’s right – at least in terms of that complex 2% of most applications. But no experienced developer is going to find forms-over-data “fun” after 15-20 years. And no amount of Extreme Agile anything is going to change the fact that what businesses mostly want is to have their computers store and regurgitate data.


I’m working with a client now who’s designing an application that is virtually all forms-over-data. And just like countless applications before this, more time is spent discussing the “plumbing” issues – the use of ORM, WPF, WCF, WF, ADO.NET, WinFS, ASP.NET, LINQ, Windows Forms, XHTML, Javascript, layers, tiers, patterns – than is spent discussing the business issues. You know, the whole reason for writing the damn app in the first place!


Trying to pull the client out of the alphabet soup of techno-babble that is today’s technology, so we can actually discuss the business needs and thus determine how to proceed is like pulling teeth. Books from people like Eric Evans and David West are great tools – if you can get people to step out of techno-land and into a productive level of discussion.


But then there’s that ugly 2% of the app again. Every time you talk about the truly interesting bits of the app, there’s so much worry about whether the “technology can handle it” that the conversation instantly devolves into an argument about whether the COM interop overhead in Enterprise Services will be a roadblock or some equivalent. WTF?!?


And worse. Even after you fight through that – continually bringing the dialog out of the murky depths of techno-babble and into a level where OOD is possible – the technical powers-that-be want to apply the complex technology needed for the complex parts of the app back into the trivial forms-over-data parts.


“We need consistency.” “If it can solve the hard parts, it can sure handle the easy parts.” “Someday we might need to scale higher.” “What if we want to reuse the data someday?”


So the forms-over-data must be written using overly complex technologies (for forms-over-data anyway). Thus it must be written by hand. Thus it must be tested. Thus it costs many times what it should have cost.


And the most irritating consequence? All that time and money wasted on complicating the forms-over-data reduces the amount of time and money available to address the parts of the app that are actually hard, or interesting – or fun.



Just over 20 years ago I was an intern for a summer while in college/university. The IT director told me in no uncertain terms that I was wasting my time getting a degree in Computer Science. “They’ve got this new thing called CASE” she said. “In a few years anyone will be able to program computers.”


Her presupposition was that CASE would actually trivialize software development to the point that “normal people” (presumably business analysts) would be able to create applications. Obviously that didn’t happen, much to my relief.


But it does make me wonder why there’s so much excitement around Software Factories and DSLs, since they look terribly close to CASE… Perhaps, lurking deep in the bowels of the Software Factory concept, there’s some differentiating factor that will allow it to succeed where CASE merely limped along to a slow, agonizing death.


I hope so. Because it seems to me that Software Factories and/or DSLs are the only area of technology active today that might address the fact that software (at least the forms-over-data majority) is too darn hard to build.


Maybe, just maybe, forms-over-data will be automated by some of these Software Factory ideas, so we can just slap out that 98% of the application and spend our time on the fun parts: that interesting and truly complex 2%.


In the meantime, I’ve got to get back to designing a 3D rotating, infinitely scalable form to enter customer data (to keep the user from losing interest in their dead-end data entry job, and in case the company quadruples in size every month for the next decade)…

Tuesday, May 2, 2006 2:16:42 PM (Central Standard Time, UTC-06:00)  #    Disclaimer
 Monday, May 1, 2006

One of the most important "features" of CSLA .NET is the vibrant community that surrounds it. I am humbled by, and very appreciative of, the amount of time and effort people put into this community - helping other people more effectively learn and use the concepts from my books.

The most recent examples? Updates to several of the major community contributions for CSLA .NET 2.0:

Permanent links to these contributions are, along with general errata and other information, at the CSLA .NET 2.0 home page:

Monday, May 1, 2006 7:21:14 AM (Central Standard Time, UTC-06:00)  #    Disclaimer
 Sunday, April 16, 2006

Every now and then I post a list of what I’ve been reading lately. You’ll note that I don’t read all that many computer books. I live computers day in and day out, and when I sit down to read, the last thing I typically want to do is read more stuff about computers (unless it is gaming-related)…


Vernor Vinge - Fire Upon the Deep, Deepness in the Sky and the upcoming Rainbows End


I am confident that Rainbows End will absolutely rock! Vinge has yet to disappoint. Seriously. I’ve read almost everything the man has written and it has always been excellent. This includes True Names, his novella that is wrapped together with a set of mid-1990’s essays on the Internet (which are interesting in and of themselves, especially given the perspective of reading them 10 years later). And of course The Peace War is an absolute must-read (I read it as a multi-part serial in Analog magazine so many, many years ago).


Alastair Reynolds - Revelation Space, Chasm City, Redemption Ark and Absolution Gap


I’ve mentioned Reynolds before, but he’s worth mentioning again, as these are four of the best books I’ve read in a long time. An excellent blend of sci-fi, science, nanotech and a nice, edgy, cyberpunk-ish flavor.


John Scalzi - Old Man's War


Billy Hollis put me on to this author, and he’s quite good. Not as deep or intense as the other authors listed here, but if you are looking for a fun, thoughtful and quick read this is the book for you. I really enjoyed the book, and The Ghost Brigades is on my reading list.


Timothy Zahn - Angelmass


I’m a serious Timothy Zahn fan. He wrote the best series of Star Wars books out there, hands down (it starts with Heir to the Empire). Cobra was an incredible book and social commentary that has been translated into other forms, such as a ST:TNG episode. I see that it is a full-blown trilogy now (I’ve read I and II, but I was much better than II…) I should say too that his Conueror’s series left me cold, so he’s not as consistent as Vinge… Angelmass was a really fun read though, and I recommend it.


Joe Haldeman - Camoflauge


This book is a brain-bender. He had me guessing who was who until near the end of the book. Really enjoyable and thought provoking, and it is a quick read. Haldeman is an excellent author, so make sure to check out The Forever War as well.


Karen Armstrong - A History of God


OK, so this is a college textbook – or at least it is often used as such. But if you are looking for a very thought provoking summary of the evolution of Judaism, Christianity and Islam all rolled into a single book this is hard to beat. It is particularly interesting because Armstrong puts the various events and evolutions of what “god” means and who “god” is into a historical context. She also draws on and compares various conflicting views of theologians, contrasting the interpretations of events and religious texts.


Superheroes and Philosophy, Star Wars and Philosophy


I find philosophy intriguing. In many ways it requires the same type of thought process as software design and computer programming, but it is even more abstract. These two books are part of a broader series (including two books using The Matrix movie), where philosophers write articles about philosophy, using contemporary concepts like superheroes (Superman, Spiderman, stuff like that) or Star Wars to draw out and illustrate their points. I find the approach very accessible and downright fun, because the books draw together two of my interests at the same time.


Sells, Griffiths - Programming WPF


Yes, I do read some programming books :)  At the moment I’m trying to have at least a basic familiarity with WPF and XAML. I am firmly of the opinion that if normal developers ever need to actually see or use XAML that this whole experiment is an utter failure, but for the next few years it is clear that we’re stuck in tag-land… Maybe by version 2.0 of WinFx the tools will have evolved to the point where the technology will actually be useful and productive, and humans won’t be subservient to obscure angle-brackets. In the meantime however, if you are looking to understand how WPF works, you can’t beat this book.


Eric Evans – Doman-Driven Design


This book has been sitting on my reading list for quite a while now, and I’ve finally gotten the time to skim through it. It is very good, and I appreciate many of the author’s points. Like almost all books of this sort (including David West’s Object Thinking), I really like what the book has to say, but don’t necessarily agree with all the conclusions or solutions. All choices are trade-offs, based on a set of priorities. Evans’ choices are all perfectly valid, but don’t always reflect my set of priorities and thus don’t always agree with my choices. I think this is the beauty of working in the computer field – there are such a wide variety of options that you can apply to problems that you can almost always arrive at valid solutions based on your priorities – even while other (equally valid) solutions exist in the same problem space.


Neal Stephenson – The System of the World


Stephenson rocks. I do believe he is the most talented author writing today, in terms of his mastery of language and ability to paint the most exquisite mental images with his writing. He’s also perhaps the most dense author going; in that there’s no wasted space in his books. Unlike most books (even most of them listed here) where you can often skip a sentence or even a paragraph now and then without losing the story, with Stephenson you can’t ever skip anything. You can’t gloss over anything. You have to take the time to read, comprehend and remember what’s been said, because everything becomes important later. I love it!! This book is the last of a trilogy, and the trilogy is a “prequel” to Cryptonomicon (which you should really read first though). I’ve been working on the trilogy for a very long time now (months), savoring every bit of it.


Whether you like these dense pseudo-historical books or not, I strongly recommend reading Stephenson’s Snowcrash. This book, along with Gibson’s Neuromancer, really defines the cyberpunk genre – at least for me.


Anyway, that’s what I’ve been reading lately. Of course my reading list is long, and seems to grow longer faster than I can read. Hopefully in a few months I’ll have ploughed through a few more books to list in another entry.

Sunday, April 16, 2006 11:56:08 AM (Central Standard Time, UTC-06:00)  #    Disclaimer
 Wednesday, April 12, 2006

I don't know how long this behavior has existed, but the other day I ran into an interesting (and unpleasant) side-effect of Microsoft's focus on security. I am guessing lots of people have run into this before me, but it was frustrating nonetheless.

It turns out that when you download a zip file with IE onto an NTFS drive, IE kindly puts a note in the file system indicating that the zip file came from an untrusted source (the Internet). When you unzip the contents to an NTFS drive, Windows kindly propagates that note, so all the unzipped files are marked as having come from an untrusted source.

In many cases you may not notice this flag. But if you unzip a VS 2005 solution like this and then try to open it VS will tell you it came from an untrusted source – possibly causing you some issues.

So of course the first question I asked was “how do I get rid of this note/flag so I can do my work?” There are some answers however.

You can go file-by-file and open each file’s properties dialog. Then you can click a button to mark it as trusted. You can’t do this at the folder level, only file-by-file. So this is pretty useless for a large number of source files.

You can copy the zip file and/or the unzipped contents to a FAT drive and back to your NTFS drive. Since FAT can’t store this metadata about the files, it is lost and your files are “fixed”.

You can use Firefox to download the zip file in the first place. Firefox doesn’t collaborate with Windows to protect you, so these security features (which I think are good in general terms). I’m not too thrilled by this discovery actually, as I think it illustrates a security hole (of sorts) in Firefox – at least as compared to IE.

I think you can mark the zip file as trusted (through its properties dialog) before unzipping the contents. Unfortunately I haven’t tried this (I actually stopped with using Firefox, because it did solve my problem :) )

Wednesday, April 12, 2006 5:34:54 PM (Central Standard Time, UTC-06:00)  #    Disclaimer
 Friday, April 7, 2006

Most people are aware of DotNetRocks. But fewer people are aware that the talent behind DotNetRocks has started a new venture: DNR TV. It is kind of like DotNetRocks, only with live video of the computer screen during the conversation. I recently recorded two episodes on CSLA .NET 2.0 for DNR TV:

Look for more DNR TV episodes on CSLA .NET 2.0 in the future.

Friday, April 7, 2006 9:48:59 AM (Central Standard Time, UTC-06:00)  #    Disclaimer