Archive for August 2008
Greg Wilson put out a call for speakers a while ago. If you weren’t included on that email and want to speak, then email him at greg at solidrockstable dot com and he can help you out.
Javier Lozano has already lined up DMACC as our facility. If you haven’t been to their campus check out their website here. It’s an excellent high-tech facility and I think it will be a fantastic location. If you are interested in sponsoring the event please contact Javier Lozano as well at javier at lozanotek dot com.
To round out the list of leaders there is Greg Sohl (master of logistics), Bryan Sampica (marketing), Tom Burns and myself.
I’m doing a talk at CodeApalooza called “Rendering Great Client-Side Controls with ASP.NET MVC“.
One of the main examples we’ll build is a really slick pageable and sortable grid. I think you’ll be pretty impressed with what you you can accomplish if you haven’t tested any of these libraries.
CodeApalooza is happening in Wheaton, IL (think Chicago) on September 6th. If you haven’t signed up already, do quickly before it fills up.
It looks like Microsoft just picked Des Moines, Iowa for it next data center location. That is pretty cool for Des Moines and the state of Iowa. Des Moines is on I-80 which is close to some very high speed/high capacity fiber lines which I’m sure helped Microsoft make the decision.
I was asked today in an interview what I thought a company was responsible to do for their employees. Or, “what does a company owe its employees.”
What would you say?
In the second half they discuss the CRIneta.org, the 2008 launch event we did this spring and Iowa Code Camp. If you speak Portuguese or can at least understand it, definitely listen to their third podcast to hear more.
É muito bacana isso!
Some friends of mine Dave and Julie Yack put together a very good book targeting techies ramping up to develop for Dynamics CRM 4.0. Dave wrote the content and Julie did the editing. I had the privilege of tech reviewing several chapters as well, so that was pretty cool.
If you are starting out with Dynamics or you want to increase your knowledge, then definitely go to the CRM book site and pick up the book. It’s well worth the money. There is 645 pages of good content that hit every major aspect of the Dynamics framework.
I’ve finished all of my upgrades to .NET 3.5 SP1 with no significant glitches or broken code. The upgrade included 3 Vista development machines and 1 test server (Server 2003). One Vista machine was 64 bit and the other two were 32 bit.
I realize that the Visual Studio 2008 SP1 installer will install .NET 3.5 SP1 as well, but I still went the route of installing the .NET service pack and then installing the Visual Studio service pack.
One of the Vista installs did give an error at the end of the install, but after rebooting, it had installed correctly. If you are patching your servers, be fully aware that you’ll need to reboot at the end, so don’t expect to get away with a live patch without taking down your server.
A friend of mine, Laurent Duveau, posted some simple instructions on performing a successful install. Make sure to do step #1 from his post if you have previously installed beta versions of .NET 3.5 SP1.
Yesterday morning I mentored two people for about 3 hours on how to think about and how to do TDD (Test Driven Development). I was a bit nervous beforehand as it was the first time I’ve formally explained and demonstrated TDD.
We started by talking about how TDD gives you a set of test cases that can help you validate the function of your libraries at a low level (now and in the future). Even more, how it encourages you to think through the design of your classes and methods because it forces you the be the first consumer of your code.
We started with what many people would consider a dangerous beginning, but it turned out really well. We began by writing test cases for existing methods and retrofitting the tests.
One method we tested just generated a random string that was then used by a CAPTCHA component. The length of the string was determined by an Integer parameter on the method. Our first step was to write a test that expected an exception if you put in a negative number. We pretty quickly decided that any length <=0 was an error condition, so we did a bit of refactoring to support that change in the method.
Next we verified that if you passed in the numbers 5, 10, 15 etc; that the length of the string actually matched. No problems there.
We were running out of interesting tests pretty quickly when Shirley stated the obvious that Carl and I had overlooked. We needed to validate that the numbers were actually random. So we put in a test that passed in the number 7 four times and sure enough the Random implementation wasn’t being seeded properly.
So in a short time, we were able to significantly improve the design of a preexisting component using TDD. There were three of us coding and discussing it, so it was very interactive and tied to real code they were using. TDD really is primarily a design technique first and a testing technique second.
We found that even though the methods were already implemented, we were able build up a great set of test cases that will keep those methods from being messed up in the future even if their implementation is updated later on. Better yet, we were able to fix the design in some significant cases. Who wants a random string generator with non-random output?
Best of all, when we were done Shirley walked away with a smile and said “this is really cool.”
I picked up book called The Waite Group’s Object-Oriented Programming in Turbo C++ recently to look at what Robert Lafore was saying about OOP 17 years ago. The book was published in 1991. I’ve just read chapter one at this point, but it was rather interesting.
Before we look at Lafore’s views, lets talk about where we are now.
A fairly common complaint we hear in 2008 is that people write their programs in a very data-centric way. They write objects for the sole purpose of CRUD but the life of the application in is the database. They might throw in bit of inheritance to make their objects feel more OO, but end of the day they are making glorified data containers that map directly to the database tables.
I was recently in an interview where one person admitted that it was easiest to start with the database and work out from there. So their “business objects” were just in-memory data containers for performing CRUD with a few useful utility methods hanging off the objects.
If you talk with people working with NHiberate, people doing DDD, an Alt.Netter or Rocky Lhotka (I realize there are very diverse view in these groups), you’ll get the view that your domain objects or your business objects should be the core of your application. I buy into this view by the way; the database is a good place to persist your data, but it shouldn’t be where you start in application design.
So what was Robert Lafore’s concern with procedural programming? Remember that in 1991 OO wasn’t mainstream. Here is a direct quote from a section called Data Undervalued in Chapter 1:
What [functions] do may be more complex or abstract, but the emphasis is still on the action.
What happens to data in this paradigm? Data is, after all, the reason for a programs existence. The important part of an inventory program isn’t a function that displays the data, or a function that checks for correct input; it’s the inventory data itself. Yet data is given a second-class status in the organization of procedural languages.
He goes on to explain that functions/methods/procedures don’t let you model the world very well. How do you model a windowing system with dropdown menus with just methods? And he is right, there needs to be more than verbs in our programming languages, we needed first-class nouns (beyond local variables) to be able to model the world better.
17 years ago coding was too action centric but Robert claims it should have been more data-centric. Now that OO is fairly mainstream coding is too data-centric, and the claim is that we need to be more model-centric.
None of these views stand on there own. If you took away functions we wouldn’t have programming; if we didn’t have data we wouldn’t have a reason to program. But I think that building out a good model that is object based and is independent of the database is just as important for application design.
What do you think about this progression? Where are we going from here?
I remember learning vocabulary words in middle school and getting tired of making so many practice sentences for the new words. Now I’m working on my vocabulary 15-20 years later and I’m really understanding how valuable those practice sentences were.
Raw memorization of words and definitions don’t stick well in my mind. I process so much information each day that I have to work quite hard to make vocabulary words memorable.
But if I can craft a well-phrased sentence around the word it helps me remember much longer because it gives the word some context. Also, the sentence takes you through the process of using the word well, which helps it stick.
It’s sometimes hard to see how valuable context is because it is so intermingled in what we do, think and say. Context is like the air you breath, you rarely think about it but it is essential.
Here are some words for the you:
profligate – adj – excessively wasteful
execrate – v – to abhor or loathe
perspicacious – adj – acutely perceptive or keenly aware
inveigle – v – to obtain by deception or flattery
You can write sentences for for these words in comments below.