# Tuesday, 15 July 2008

My view of FireFox 3.0, about 10 times a day.  Still waiting for a service pack...

ff30
posted on Tuesday, 15 July 2008 10:54:18 (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Monday, 14 July 2008

Thursday, July 17, 2008
"Speaker Idol" Competition

Subject: 
You must register at https://www.clicktoattend.com/invitation.aspx?code=129952 to be admitted to the building
Five technical presentations, with a panel of judges including Mary Jo Foley
1. Zino Lee: Introduction to F#
We will see what F# is and what features/differences there are between F# and "imperative" languages like C#
2. James Curran: Castle Monorail
MonoRail is a MVC framework for Web Development inspired by ActionPack. It is part of the large Castle Project which includes the Windsor IoC container and the ActiveRecord data mapper.
3. John Carnevale: Upgrading Legacy Code
Learn how to read the code and determine a path of action to be taken with the code upgrade. See how to evaluate what could be upgraded, what to rewrite and when to start all over from scratch.
4. Bill Fugina: Arithmetic in Generic Classes
Bill will show some examples of the benefits of doing arithmetic in generic classes and some utility classes and interfaces that make it extremely easy to do so
5. Gerardo Arevalo: Casual and More Hard-Core WCF
In his demonstration, Gerard is going to quickly build a pair of WCF client applications to demonstrate the use of the MVP design pattern to guarantee a contract with the clients and facilitate unit testing

Speaker: 
Zino Lee has been working on wall street investment banks for the past 12 years, and doing .NET for 4 years. Currently the VP and manage a group that takes care of all GUI work for a trading desk. In graduate school at NYU James did some OCaml work when F# project started.
James M. Curran is a Senior Developer at BarnesAndNoble.com and as a hobby, the Owner/Operator of NJTheater.com which is being converted into a MonoRail based site (under-development version viewable at www.njtheater.org). Previously, he was a Microsoft MVP for VisualC++.
John Carnevale is working at Purvis systems stationed at the FDNY converting legacy code to .NET for the Starfire system.
Bill Fugina works as a software developer for Coleman Insights, a music industry market research company in Research Triangle Park, North Carolina. He visits the office three or four days each month and otherwise telecommutes from his home office in Windsor Terrace, Brooklyn.
Gerardo Arevalo is relatively new to the New York (Tri-State) area. He is from El Salvador, lived in North Florida, then packed up for the North East to be closer to the techno

Date: 
Thursday, July 17, 2008

Time: 
Reception 6:00 PM , Program 6:15 PM

Location:  
Microsoft , 1290 Avenue of the Americas (the AXA building - bet. 51st/52nd Sts.) , 6th floor

Directions:
B/D/F/V to 47th-50th Sts./Rockefeller Ctr
1 to 50th St./Bway
N/R/W to 49th St./7th Ave.

posted on Monday, 14 July 2008 14:43:50 (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Friday, 11 July 2008

I know this is a technology blog (sort of). But those of you who know me, know that I have an unhealthy obsession with the New York Mets. Why would I say I would visit Yankee Stadium, the home of the enemy?

Yes I root against the Yankees on most occasions, however, I am a baseball fan. The "House that Ruth Built" has a lot of baseball history. Yankee Stadium is being torn down at the end of this year in favor of a new stadium so I had to visit one last time. (My last time there was with Andrew Brust and some Microsofties about 6 years ago, last time before that was in the early 1980s.)

But going to Yankee stadium would involve one big problem: I would have to watch a Yankees game. (I don't watch Mets-Yankees games, I get too nervous. The Mets can go 6-156 for the season, but if those 6 wins are against the Yanks, it is a good season.)

Then last year, Major League Baseball announced the All Star Game was to be played at Yankee Stadium in honor of its closing. Last time an All Star Game was in New York was 1977, and I was only 5, so I could not afford to scalp tickets on stub hub. (Oh wait, Al Gore had not invented the internet yet.) I have wanted to go to the All Star Game since I was about 5, so a life long dream is to go. (Along with both the summer and winter Olympics. Already have plans for Vancouver 2010 and working on London 2012.)

Going to the All Star Game at Yankee Stadium would accomplish two things: complete a lifelong goal of going to the All Star Game and going to Yankee Stadium one last time in its last season (with the added bonus to not have to watch the Yankees!)

By the magic of stubhub, I bought four tickets.  They arrived today. The game is on Tuesday, no rain in the forecast.

IMG_1764

PS The Mets are slated to host the 2011 All Star Game at their new park, Citi Field. Maybe I will get to go to 2 All Star Games...

posted on Friday, 11 July 2008 11:13:28 (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Sunday, 06 July 2008

The boys over at Desktop Alert are headed to Iraq on Wednesday to install their life saving mass communication software at US Military bases in Baghdad and Tikrit. Howard, the founder of Desktop Alert, was humbled when chosen for this assignment. I met Howard five years ago while teaching a class on .NET at CUNY in Manhattan-and he is as crazy as I am, so we hit it off. Since then I have acted as a business and technical advisor to Desktop alert and most recently architected the latest version of their software about six months ago. (Massively distributive application, right up my alley.)

To have played a small role in the success of Desktop Alert and to contribute in helping our brave men and women in uniform-and in the line of fire-is overwhelming. Having lost someone very dear in Iraq three years ago makes this even more special.

Good luck and godspeed Howard and team. I'm so proud of you.

posted on Sunday, 06 July 2008 18:41:42 (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Monday, 30 June 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, 30 June 2008 00:01:05 (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Friday, 27 June 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?

Wrong.

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, 27 June 2008 09:04:49 (Eastern Daylight Time, UTC-04:00)  #    Comments [4] Trackback
# Friday, 20 June 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, 20 June 2008 11:05:42 (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Sunday, 15 June 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, 15 June 2008 21:47:28 (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback