# Monday, June 30, 2008

Yesterday was my last day of MBA classes and needless to say I was out partying hard last night. I woke up early for some strange reason and decided to get a jump on my book chapters for the upcoming Programming SQL Server 2008 from Microsoft Press.

My VPC died on me so I decided to give SQL Server 2008 RC0 an install on a spare machine (what better to do on a Sunday morning with a hangover). I remember reading that if you have SQL Server 2005 Express edition installed you will have trouble installing RC0. So I went in and uninstalled everything on a spare machine, too hungover to reformat. I figured I am an MBA now, I should make myself more efficient.

Well, even with nothing left of SQL Server 2005, I still got a very mean error message (well after I entered in all the account, mixed mode, information):

"The SQL Server 2005 Express Tools are installed.  To continue, remove the SQL Server 2005 Express Tools."

I was not happy since I had already removed it. So I started removing Visual Studio 2005 too. That did not work. So I decided the next thing to do was Google. Someone else had to have had this pain already. Found this post from Jason Follas. He said that if you have Red Gate SQL Prompt software installed, as I did, it leaves a bad registry key and showed how to fix it. Read the blog post here.

I can't live without Red Gate SQL Compare and SQL Data Compare so I did not mind losing some time. They save me day and days of time over the year. The good news is that Red Gate left a note on Jason's blog that the issue has been resolved.

I guess the MBA was lost on me. Oh well, at least I can write TSQL and google for install problems...

posted on Monday, June 30, 2008 12:01:05 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Friday, June 27, 2008

Unless you have been living under a rock, you should already know about the controversy over the nHibernate mafia's Microsoft Entity Framework's Vote of No Confidence.  The manifesto says that the upcoming Entity Framework (to be released soon via .NET 3.5 SP1) is just not usable. As far as ORMs go, there are some valid points working against EF- in order of (my) importance:

  • Lack of Lazy Loading (The EF team said that they had "explicit" lazy loading, but that is just playing with words and the team has since retracted from that.)
  • Lack of persistence ignorance (at best this is inelegant design, at worst it will cripple the performance of your application and make it a burden to maintain)
  • Too many merge conflicts when using a model in a source control environment
  • Bad design for TDD development (and in my opinion, CI as well)

The manifesto also brings up some Domain Driven Design issues that I feel are less important than the above four bullets. To their credit the normally reserved EF team has responded quickly and nicely to the manifesto. On the heels of last week's transparent-design process announcement, Tim Mallalieu gave a detailed reply which has started a good discussion and wiki. They are listening and that is good.  Since the Entity Framework is starting work this week on v.next, they have also put together an advisory council including Eric Evans, Martin Fowler, Paul Hruby, Jimmy Nilsson, and myself.

To some degree the vote of no confidence worked, they got Tim's attention. I think that the manifesto has some very valid points, but I also think it lacks professionalism. Anyone can say something sucks, it is more important to give valid feedback, suggest solutions, and engage in a dialog. (The vote of no confidence was just too in your face-and a dialog was stated only because of the professionalism of the EF team.) In addition there are some mafia style attacks on anyone who does not agree with them, most recently against the always honest and open Julie Lerman.

So this blog post sounds like an endorsement of the Entity Framework and ORMs in general, right?


My first problem with ORMs in general is that they force you into a "objects first" box. Design your application and then click a button and magically all the data modeling and data access code will work itself out. This is wrong because it makes you very application centric and a lot of times a database model is going to support far more than your application. In addition an SOA environment will also conflict with ORM.

I prefer to build the application's object model and the data model at about the same time, with a "whiteboarding" approach that outlines the flows of data and functionality across the business process and problem set. Maybe it is the MBA talking but I tend to be "business and customers first" when I design a system. (Those of you that know me know that I have designed some very large and scalable systems in my day.) I usually like to "follow the money" as Ron Rose of Priceline taught me 10 years ago.  In addition, I prefer a very agile design process where you are constantly making changes to your design in the early sprints, the database and object model are both part of this process.

My second major problem with ORMs is that ORMs are a solution to a problem that should not be solved. Developers who write object oriented and procedural code like C# and Java have trouble learning the set-based mathematics theory that govern the SQL language. Developers are just plain old lazy and don't want to code SQL since it is too "hard." That is why you see bad T-SQL: developers try to solve it their way, not in a set-based way.

The premise of EF, LINQ, nHibernate, and Luca Bolongese’s original premise with ObjectSpaces, is that set-based theory causes an “impedance mismatch” between data access and all the other (more procedural) coding we do.  And it’s ORMs to the rescue to resolve the impedance mismatch.

So ORMs are trying to solve the issue of data access in a way that C# and VB developers can understand: objects, procedural, etc.  That is why they are doomed to fail. The further you abstract the developer from thinking in a set-based way and have them write in a procedural way and have the computer (ORM) convert it to a set-based way, the worse we will be off over time.

What I am saying (and have been saying for a long time) is that we should accept, no, embrace the impedance mismatch!  While others are saying we should eradicate it, I say embrace it.

ORM tools should evolve to get closer to the database, not further away.

One of the biggest hassles I see with LINQ to SQL is the typical many-to-many problem. If I have a table of Ocean Liners, vessels,  and ports, I’ll typically have a relational linking table to connect the vessels and ports via a sailing. (Can you tell I am working with Ocean Freight at the moment?) The last thing I want at the object layer is three tables! (And then another table to look up the Ocean Liner that operates the vessel.) Unfortunately, this is what most tools give me. Actually I don't even want one table, I want to hook object functionality to underlying stored procedures. I really want a port object with a vessel collection that also contains the ocean liner information. At least the Entity Framework does this however I have major concerns about the performance of the code it produces.

The ironic thing I’m now seeing is developers who are lazy and don't want to learn SQL using tools that will produce SQL for them. The SQL is bad, and now those same anti-SQL lazy developers are struggling to read pages of generated and near-unreadable SQL trying to solve performance problems. They’re dealing with SQL that’s more verbose and orders of magnitude harder to understand than what was needed in the first place!

So where do we go from here? We can't just keep pretending that this mismatch problem can be solved and keep throwing good money after bad. As Ted Neward said that is the Vietnam of Computer Science.

I say that developers should start embracing the impedance mismatch. I also say that Microsoft and other ORM vendors need to realize that embracing the mismatch is a good thing and design ORM tools that allow this. (This is the advice I will give at the EF council.) I am not anti-ORM (even tho I did trash LINQ on stage at TechEd last year), but I am pro using the right tool/technology for the right job. ORM is real good for CRUD and real bad at other things. Let's start from there. To quote Ted, "Developers [should] simply accept that there is no way to efficiently and easily close the loop on the O/R mismatch, and use an O/R-M to solve 80% (or 50% or 95%, or whatever percentage seems appropriate) of the problem and make use of SQL and relational-based access (such as "raw" JDBC or ADO.NET) to carry them past those areas where an O/R-M would create problems."

Hopefully "cooler heads will prevail."


Update 6/29/08

My fellow RD Greg Low brought to my attention that my discussion on Linq to SQL above is very similar to an email he sent not to long ago. At Triton Works (the ocean containers) we used his example in our own entity model debate and I realized after he pointed it out to me that the words above are just too close to his, so I am giving him the credit above. (Though he did not call programmers lazy and anti-SQL, I did.)

FYI, we went with POAN or Plain Old ADO.NET, ocean containers are old school.

The inspiration for this post came from not only the public debate on the EF vote of no confidence but also a private email discussion on nHybernate, EF and Linq to SQL between:  Greg, Andrew Brust, Rocky Lhotka, Sten Sundbland, Joel Semeniuk, Barry Gervin, and myself. I won't tell you who was on what side. If you want to know, you will have to ask them. Hint, hint, Canadians are lazy and anti-SQL. :)

posted on Friday, June 27, 2008 9:04:49 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [4] Trackback
# Friday, June 20, 2008

Looking over the PDC content for this fall you can definitely see a trend: Cloud Services. This is to counter Amazon's S3 offering.

First let's define what Cloud Computing is and what it means. Cloud computing is not Gmail, Hotmail, or even Google Documents. (This is why you won't see Microsoft Office moved to the Cloud in a very robust way, that is just web access for popular productivity software.) Cloud Computing is replacing an application's hardware and plumbing infrastructure with a service hosted by someone else. For example let's look a typical corporate system:

  • Back-end data storage (SQL Server, Oracle)
  • Back-end application server (IIS + .NET, COM+/ES, Tuxedo, even CICS (that dates me))
  • Front end machine to access the application (Either a workstation via a browser or windows app, or mobile device)

It gets expensive for small and even large firms to build the network, firewalls, domain services, user accounts and of course the hardware (with its underlying RAID arrays, UPSes, racks, power, etc.) Sometimes this is a barrier to growth (or even entry) for small to medium organizations. Not only do you have to learn all about subnets and RAID arrays, you also have to learn about UPS and power strategy, and manage a development project. (Man, I just want to write some stored procedures, who cares about an UPS and RAID array!)

This is a problem, epically for start-ups. You have to build a rack before you even build a company and product. That is expensive and an up-front fixed cost. More than likely you will build a rack that at overcapacity so you can grow, since it is time consuming to add more capacity later on. Also, you usually have to hire people to help you figure this out. Building a rack is expensive and also expensive to maintain.

Cloud computing is providing the back end infrastructure, the first two bullets, to firms as a service. The beauty of this model is you pay for what you are using, bandwidth, storage, and clock cycles. So a startup does not have to spend $20,000 on a new rack, they can pay a monthly cost to host their application in the "cloud" and only pay for what they need. In the beginning this will be a small fee since a startup has no customers and then the fee will grow (as revenue grows hopefully!) Amazon S3 is attracting many startups and is changing the dynamics of funding a startup since they don't need as much expensive hardware and IT expertise.

So many critics of Microsoft say that they are missing the boat by not putting MS Office up in the cloud to compete with Google Apps. While Microsoft may have to compete with Google one day in this space (I personally prefer offline Office + a service like SharePoint to share my documents.) that day is not today. The real battle will be over the true Cloud-infrastructure and ultimately the stack.

Selling customers on your Cloud platform locks them into your technology. So if Microsoft offers storage (SQL Server Data Services), application synchronization (Live Mesh), workflow/relying (BizTalk Services) and application tier (IIS as a service? or at least VPCs) services, they will get developers to use the Microsoft stack (SQL, .NET, etc.) for another generation. Throw in Hosted Office and Exchange, and they are really hooked.

Judging from the PDC content, with sessions all around Microsoft Cloud services, I think that they get it. Too bad we have to wait until October, but I sure hope that it is good stuff.

posted on Friday, June 20, 2008 11:05:42 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Sunday, June 15, 2008
Copy of 060308 TechEd  2008 Influencer Roundtable - Group

Somehow I got the shaft and was stuck in the back when Bill took his photo with us at TechEd. I volunteered to lay down in front but the photographer did not like that idea.

posted on Sunday, June 15, 2008 9:47:28 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Friday, June 13, 2008

Yesterday Yahoo! announced a deal that will outsource their search engine to Google. For those of you who don't remember, Yahoo use to outsource their search engine to Google about 8 years go, and Google ate Yahoo's lunch. That said, this is the final nail in the Microsoft-Yahoo merger. So the real question is "what's next" for Microsoft. They have three options at a high level:

1. Go Nuclear. Launch an all out court battle against Google-Yahoo starting with a lobbying effort in Washington, DC. We saw how effective Netscape, Sun and Oracle used the US Government to bring Microsoft to heel. (And more recently Google's complaints about Vista.) Microsoft saw how effective (some say Bill Gates was never the same after that experience) the nuclear option is and may just decide to go down this route as payback for both the Yahoo hubris and the old IE trial.

2. Do nothing. Remember how big and bad AOL was 10 years ago? Netscape? They were the hot new kids on the block that was going to dethrone Microsoft. Ten years later, Microsoft is still making buckets of money, revived interest in its development platform with a new push in 2002 (.NET) and AOL is practically bankrupt and Netscape disappeared (oddly enough at the hands of AOL, sound familiar to Google-Yahoo?) Microsoft can argue that the creative destruction of the Internet companies is more of a threat to Google than themselves. The Google model has not changed in 10 years: PageRank is old and outdated (still gives you irrelevant results and forces you to search like a techie). In addition PageRank is being gamed and people are getting frustrated. People are exchanging, buying and selling links on web pages with the sole intent of manipulating search results. Someone will come up with a better system and out Google Google. (Memo, it won't be Live Search.) Microsoft can sit back and develop its Mesh and Cloud computing offerings (Web as a platform) and watch Google struggle with growing pains, more defections, US regulatory issues, and challenges from hot new startups and see where the chips fall. My guess, both MS and Google will come out ok with this strategy.

3. Acquire a large portal. This is an attractive option, but nobody has the eyeballs that Yahoo! has. Only MySpace and Facebook have the eyeballs and they have problems making money.

So if you were Steve Ballmer which would you choose?

posted on Friday, June 13, 2008 9:52:58 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Sunday, June 8, 2008

On May 22nd and 23rd  the New York chapter of the International Association of Software Architects (IASA) held its first annual two-day IT Architect Regional Conference where I was a speaker.  This event received the highest rating of any conference run by IASA to date.  It was considered so successful that we are already planning the 2009 version. 

IASA is a vendor-neutral association of/for/by architects all over the world.  The New York IASA chapter is one of the most successful IASA chapters in the United States. Sponsors of the event included Sun, Oracle, Microsoft and Robert Half.  Although this was a regional conference attendees came from as far away as Nashville Tennessee, Boston and Redmond Washington. 

The conference featured over 30 speakers from sponsor companies, the local architect community and others arranged in common keynote sessions and four breakout tracks (Enterprise Architecture, Software Architecture, Infrastructure Architecture and Architecture Fundamentals).  Keynote speakers included presentations on:  Software Plus Services, presented by Joseph Williams, Chief Technology Officer, Microsoft Enterprise Services; Interesting Real-world Architectures and the Handbook of Software Architecture presented present by Grady Booch, Chief Scientist, IBM Corporation; The Next Generation SOA Grid--Not Your MOM's Bus, presented by David Chappell, Vice President and Chief Technologist, Oracle and Technology Strategy in the World, presented by Paul Preiss, President of IASA.  The Breakout sessions also featured many presentations by local architects from companies such as Bloomberg, Group Health, Hartford Insurance, Weightwatchers and Microsoft.  

For more information about the conference agenda see http://www.iasahome.org/web/itarc/nyc/agenda.

posted on Sunday, June 8, 2008 5:40:39 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Friday, June 6, 2008

My buddy Dan Fernandez filmed me on Channel 9 showing Ranking and Windowing and Common Table Expressions from my TSQL talk this week at TechEd. Apparently our discussion of our partying together in Istanbul, Cairo and Las Vegas was censored by the Channel 9 staff. I guess you will have to just use your imagination on that one. :)

posted on Friday, June 6, 2008 7:46:09 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Wednesday, June 4, 2008

My lunch with Bill Gates yesterday at Tech*Ed in Orlando was very cool. His first word to us was "super" as was his second.

After snapping a few photos, we got right down to it. There were about 12 of us from the community who were invited and and we were eager to chat. First question: "Hey Bill, what are you going to do with your free time?" Bill indicated that he is going to be "super" busy and will be working full time on his foundation.

We then got into talking about schools and how he envisions most schools around the world to be textbook free and just use computers. Then about how university level learning will be done via the Internet for lectures. In poor countries "best of breed" lectures can be put on DVD and repeated. Bill was blown away  by the organic chemistry distance learning made available by MIT and wants to bring this model to everyone. He said that the traditional lecture will die at the university level. He was extremely passionate about teachers, schools, and education in general.

Andrew Brust asked about the UN, and Bill complained that there were too many agencies with more TLAs than Microsoft. (WHO, WFP, etc..)

I got to finally get a word in edgewise. :) I had lots of questions sent to me by readers of this blog ranging from "What's next" to "Why not just buy the Mets, that is charity at this point."

I asked about Microfinancing. The answer surprised me. While Bill's foundation gave $300 million in total to microfinance, Bill said the micro-financing had too high of interest rates and the opportunities to make loans were not as abundant as you would think. Bill had a passion for micro-savings.

He said that too many poor people have no access to banks due to distance and bank fees. So banks become something only the rich can have access to in many countries. (Including the US in many regards too, witness check-cashing shops in the inner city.) Bill went on to say how most poor will stash their currency somewhere or buy jewelry, only to get stolen or inflated away. Or some will buy livestock as a way to store their wealth and save only to be stolen or come down with disease. Bill described a system that he worked on that will allow poor people in remote areas to make microdeposits in the bank via a local retailer. Then they can view their balance via that retailer or on their cell phone if they have one. Then can spend the money via local retailers or via an ATM. He also spoke about the need for a quality interest rate for the microsavings. This was really amazing, all you hear about these days is micro-loans, but Bill turned the tables on everyone wants to combine micro-loans with micro-bank accounts. Makes complete sense.

The last question by Kate Gregory, was on how does Bill deal with the public sector/volunteer sector's non type A personality. Bill basically indicated that he was results oriented and brings the same passion and project management skills to his non-profit work.

I can't say that I had lunch with Bill Gates since he did not really eat, we just kept asking him questions and he never really got to eat his lunch. All in all he spent about 1.5 hours with us and it was great. I have to say that it was really inspirational to talk the whole time with him about non-technical issues (not a single techie question was asked). Here is a man who is one of the greatest technical minds (still!) around, the chairman of a Fortune 500 company, and we talked about his passion for his foundation. I am looking forward to what his foundation will do with him working there full time.

posted on Wednesday, June 4, 2008 7:48:15 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback

Ever since the new ASP.NET MVC framework was announced in October, posts about it have spread about it like wildfire through the .NET blogosphere.  There's usually at least 2-3 MVC stories a day that show up on DotNetKicks.

At the last Philly.NET code camp in January, there was standing room only for the ASP.NET MVC talk (see photo to the right).  Similar crowds have shown up at the HLS DevCon in Atlantic City, Central Jersey .NET & Fairfield/Westchester .NET user groups to hear about it.

With all the buzz going on about the new ASP.NET MVC Framework, I'm happy to announce a one day Firestarter event in NYC covering it on Saturday, June 7th!  Join us for a day in New York City to learn more about the ASP.NET MVC framework and see what everyone is all excited about.

At the ASP.NET MVC Firestarter, we’ll give you a quick tour of the framework, then peel back the layers and dive deeper into how it works.   As part of that, we’ll spend time discussing the design and development practices that lead to the creation of the MVC framework.  By the time you leave, you’ll have enough knowledge to get fired up and start building web applications with it.

clip_image002More Info

When it comes to design patterns, the MVC is the granddaddy of them all.  First described in the late 70s, the MVC pattern remains very popular in the world of web applications today.  

ASP.NET MVC provides a framework that enables you to easily implement the model-view-controller (MVC) pattern for Web applications. This pattern lets you separate applications into loosely coupled, pluggable components for application design, processing logic, and display.
ASP.NET MVC is not a replacement for Webforms. It provides an alternative choice when designing a Web application. Using ASP.NET MVC offers the following advantages:

  • It enables you to achieve and maintain a clear separation of concerns
  • It facilitates test driven development (TDD)
  • It provides more control over the URLs you publish in the application and over the HTML that is emitted by the application

Registration is now open. Don't wait as this will likely fill to capacity quickly:

Register Here!

Lunch will be provided.


·        Intro to ASP.NET MVC & .NET 3.0/3.5   9:00-10:30

·        Intro to MVC/MVP patterns   10:30-11:30

Lunch 11:30-12

·        Intro to Test Driven Development 12:00-1:00

·        Routing  1:00-1:30

·        Controllers  1:30-2:30

·        Break 2:30-2:45

·        Views  2:45-4:00

o   Strongly- vs. Weakly-Typed

§  What’s the difference?

§  Why would you choose one over the other

§  Ways to effectively use Weakly-typed

o   UI Helpers

§  Overview of framework helpers

§  Rolling your own

o   View Engines

§  Overview of WebForms ViewEngine

·        File location/mappings

·        Using “standard” ASP.NET stuff:  ASPX, ASCX, Master

·        REST & AJAX – WCF, Dynamic Data, MVC AJAX  4:00-5:00

posted on Wednesday, June 4, 2008 4:01:01 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback