Wednesday, December 31, 2008

Breaking ADO.NET Issues with .NET 3.5 SP1 Fixed by Update KB959209 of 12/20/2008

The .NET Framework team released an update (KB959209) on 12/20/2008 that received little publicity. Following are the three ADO.NET-related fixes (including ASP.NET Dynamic Data fixes) that affect developers using .NET 3.5 SP1:

From KB958481: List of the breaking issues with the .NET Framework 2.0 Service Pack 2 after you upgrade to the .NET Framework 3.5 Service Pack 1

The new [ASP.NET] dynamic data feature that is included in the .NET Framework 3.5 SP1 cannot navigate one-to-one relationships. Because of the inability to navigate one-to-one relationships, any attempt to create a dynamic data Web site that is running on an entity framework data model fails.

The ADO.NET Data Services client enables a client developer to insert a new entity into the service and to associate that entity with other related entities. If the client is talking to a data service that is backed by a relational database, the schema rules of the database are enforced on inserts to the service. In databases, it is common to put a NOT NULL constraint on foreign keys in tables. In such a case, an insert to that table must include a foreign key to the related entity. However, because of a code defect in the ADO.NET client library, new entities and reference associations cannot be set at one time. Therefore, you cannot use the ADO.NET Data Services client together with common foreign key table constraints.

From KB958483: List of the breaking issues with the .NET Framework 3.0 Service Pack 2 after you upgrade to the .NET Framework 3.5 Service Pack 1

After you install the .NET Framework 3.5 SP1, [ASP.NET] dynamic data cannot display foreign key IDs in a one-to-one relationship. Web sites or applications that are created by using ASP.NET dynamic data are broken because dynamic data assumes that property descriptors exist. Dynamic data uses the property descriptors to obtain labels for links.

Note the subtle differences in wording from the first breaking issue above.

AutoCommit behavior in Oracle transactions is different in the .NET Framework 2.0 SP1 from the behavior in the .NET Framework 2.0 SP2. In the .NET Framework 2.0 SP2, if an application starts a transaction, completes the transaction, and then starts a new transaction on the same connection, all the commands that are executed in the second transaction execute in auto-commit mode. The changes that are made by those commands are committed to the database even if the transaction is rolled back.

From KB958484 List of the breaking issues with the .NET Framework 3.0 Service Pack 1 after you upgrade to the .NET Framework 3.5 Service Pack 1

Same as KB958483 above.

Thanks to Scott Hunter for the heads-up in his Update for .NET 3.5 SP1 Released post of 12/30/2008.

Does Anyone But Me Miss Technorati’s RSS Feeds for Specific Tags?

I’ve subscribed to Technorati’s tag-based RSS 2.0 feeds for more than a year. Tag-based feeds provided me links to new posts tagged LINQ, Entity Framework, LINQ to XML, Azure, Cloud Computing and the like. These links often are in addition to those from blogs with feeds to which I subscribe.

On about 1:30 AM on 12/17/2008, IE 8 Beta 2’s feed reader suddenly started returning error messages for popular tag feeds, such as those for LINQ:

Firefox 3.0.4 returned the infamous “Doh! The Technorati Monster escaped again” page.

RSS Bandit displayed this IE error message:

The following tags were not closed: rss, channel. Error processing resource ''.

Here’s Fiddler2’s capture of a current request for recent LINQ posts:

GET /tag/LINQ HTTP/1.1
Accept: */*
A-IM: feed
Accept-Language: en-us
User-Agent: Windows-RSS-Platform/2.0 (MSIE 8.0; Windows NT 6.0)
UA-CPU: x86
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Pragma: no-cache
Cookie: tvisitor=; TECHNORATI_MEMBER=497505af64ce1835caa9fa1ece590cb7; __qca=492dc786-a1a11-5e3a1-d9b67; __utma=39112614.974384128884774300.1229550691.1230230604.1230305278.9;|utmccn=(referral)|utmcmd=referral|utmcct=/; s_vi=[CS]v1|494FD9BB00003618-A0208390000043A[CE]; VWCUK200=L122208/Q22273_3696_1056_122208_1_033109_94744x91717x122208x1x1

and following is the malformed response with XML formatting added:

HTTP/1.1 200 OK
Date: Tue, 30 Dec 2008 20:29:33 GMT
Server: Apache
Cache-Control: max-age=1800
Expires: Tue, 30 Dec 2008 20:59:33 GMT
Content-Type: application/rss+xml
Vary: Accept-Encoding,User-Agent
Content-Length: 529

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:tapi="">
    <pubDate>Tue, 30 Dec 2008 12:29:34 -0800</pubDate>
    <generator>Technorati v1.0</generator>
      <title>Technorati logo</title>
    <webMaster> (Technorati Support)</webMaster>

It’s not surprising that all three feed readers returned error messages, but the different response to Firefox requests is strange. Some requests from IE 8 B2 and RSS Bandit, such as for SQL Data Services tags (GET /tag/SQL+Data+Services HTTP/1.1) return the “Technorati Monster” page.

Technorati Won’t Acknowledge the Problem or Respond to Requests to Fix It

I’ve sent numerous messages to which Technorati ignores. They don’t acknowledge the messages nor do they respond to them, whether sent by email or Twitter.

Technorati Stopped Indexing the OakLeaf Blog 12 Days Ago and No Longer Resumes Indexing When Requested

Starting in early September 2008, Technorati periodically stops indexing the OakLeaf Systems blog. Manual pings don’t solve the problem. In the past, they have resumed indexing this blog for brief periods after I send an email to support, but then stop indexing after a few days.

Scott Watermarsysk replied to my Twitter complaint about Technorati’s earlier failure to index the OakLeaf Systems Blog:

Now they haven’t indexed the blog in 12 days despite several requests, which they won’t acknowledge:

Here’s a reverse chronological list of my posts about earlier problems with Technorati:

It appears to me as if Scott is right: No one has told Technorati that they’re dead.

What’s worse is that it appears to me that I’m the only one who cares. Searches for Technorati in Google’s Blogger Help Group doesn’t return any indication of tag RSS problems detected.

Update 12/31/2008: Technorati Responds

Technorati indexed this blog on 12/30/2008. Tag feeds aren’t up. I’ll update this post when and if they appear.

Technorati Tags: ,

Monday, December 29, 2008

LINQ and Entity Framework Posts for 12/22/2008+

Merry Christmas!

Note: This post is updated daily or more frequently, depending on the availability of new articles.

Updated 12/29/2007 5:00 PM PST: Additions
Updated 12/25/2007 8:00 AM PST: Additions
• Updated 12/23/2007 1:30 PM PST: Additions

Entity Framework and Entity Data Model (EF/EDM)

Justin Etheredge’s Making the Entity Framework Fit Your Domain - Part 1 post of 12/29/2008 is a detailed start to a series in which he explores the Entity Framework to see if he can “make it palatable for [him] to use.” Justin says:

My goal with this post is not to trash talk the entity framework, but instead to take it as far as I can toward a usable solution that I would be okay with putting into a production application. This post is going to be written as I explore, so please let me know if you see anything that is wrong or missing.

And concludes:

In future parts of this series we will break down the base entity class that I have created and take a look at the different entities and how we can create them. We will also take a look at creating an ObjectContext and show you how we can use and query these entities just like we could if we created them through the EDM designer.

Simon Segal adds links to Stefan Cruysbergh’s personal Web site, books about Entity Framework, and his prior posts in Entity Framework Learning Materials (continued) of 11/27/2008.

Shawn Wildermuth’s Caution when Eager Loading in the Entity Framework post of 12/28/2008 warns that the Include() method to eager-load associated entities is a hint, not a guarantee that the query will return the expected entities.

He notes that grouping and subselects are the most common cause of missing entities and quotes Diego Vega’s response of 11/30/2008 to the Include() is ignored in a subquery thread in the ADO.NET Entity Framework and LINQ to Entities forum, which explains the behavior of the Include() method.

Shawn also observes that “you can use the EFExtensions Include Extension method to add includes on the complete query.”

• Simon Segal provides the entire code base from this previous post (below) in his Entity Framework - Specification Pattern Code Update post of 12/22/2008.

Simon Segal’s Entity Framework and the Specification Pattern post of 12/22/2008 shows how to implement his LINQ to SQL Specification for Entity Framework with the aid of Colin Meek’s use of the the ExpressionVisitor class.

Scott Hunter’s ASP.NET Dynamic Data 4.0 Preview 2 post of 12/22/2008 in the ASP.NET Dynamic Data Section contains updated data on its support for the Entity Framework.


Scott Hunter’s ASP.NET Dynamic Data 4.0 Preview 2 post of 12/22/2008 in the ASP.NET Dynamic Data Section contains updated data on its support for LINQ to SQL.

LINQ to Objects, LINQ to XML, et al.

Eric White shows you how to Convert XElement to XmlNode (and Convert XmlNode to XElement) with LINQ to XML in this 12/22/2008 post.

ADO.NET Data Services (Astoria)

Scott Hunter’s ASP.NET Dynamic Data 4.0 Preview 2 post of 12/22/2008 in the ASP.NET Dynamic Data Section contains updated data on its support for LINQ to SQL.

Stan Kitsis’s Accessing SQL Data Services (SDS) using ADO.NET Data Services (Astoria) of 10/31/2008 is his first and only post about the Astoria “head” (front end) for SQL Data Services that Pablo Castro discusses at length in his ADO.NET Data Services in Windows Azure: pushing scalability to the next level of 11/1/2008.

I discovered Stan’s post as a result of my Availability of Experimental Astoria Interface for SDS? thread started on 12/20/2008 in the SQL Data Services (SDS) - Getting Started forum. Stan notes that this head doesn’t support the complete Astoria syntax and only works with entities (not authorities or containers.)

ASP.NET Dynamic Data (DD)

•• Phani Raju’s Working with Inheritance in Data Services post of 12/23/2008 explains how inheritance works in Astoria using the classic Person, Employee model.

David Ebbo explores Two worlds of Dynamic Data customization: generic vs schema specific in this codeless 12/22/2008 post.

Scott Hunter’s ASP.NET Dynamic Data 4.0 Preview 2 post on CodePlex of 12/16/2008 provides sample code that demonstrates new DD features that .NET 4.0 and VS 2010 will implement:

  • SampleProject – illustrates the next generation of Dynamic Data features including support for Entity Framework and Linq to SQL inheritance, many to many support for Entity Framework, Entity templates and the new templated filters that are based on the QueryExtender.
  • Futures - contains the existing Dynamic Data Futures sample that has been available at This sample does not add any new functionality in comparison to the old Futures project except for running on new Dynamic Data assemblies.
  • BusinessLogicDataSource – a showcase for a new BusinessLogicDataSource that combines customizability of ObjectDataSource with the flexibility of LINQ and the IQueryable interface. Also, a new QueryExtender feature allowing high-level query composition in markup is demonstrated.
  • DataServicesServer and DataServicesClient - illustrates the use of ADO.NET Data Services with Dynamic Data. NOTE: the DataServicesServer project must be running before DataServicesClient.

Azure, SQL Data Services (SDS) and Cloud Computing

••• David LemphersWindows Azure - Final Updates to PhotoStore App! of 12/28/2009 describes his new Azure blob application that’s accessible here. When I tested the app, I was able to add an album (Container), but not upload an image. He says:

The one area of functionality I did not implement for this sample was the support for large files which would have required the use of the block operations (put block, get block list, put block list).

The RestBlobStorage.cs file’s PutLargeBlobImpl() method automatically uses block operations for blob creation when the input stream’s length exceeds 2 MB. (RestBlobStorage.cs is part of the StorageClient class library.)

••• Chris Hay offers his Windows Azure Blob Browser WPF application for CRUD operations on Azure blobs that you can download from here. Here’s a screen capture of Chris’s app displaying some blobs created by a demo app that I’m working on (click image for full-size capture):

My only suggestion is to make the Blob Details section expandable to the right so as to display long blob names and URIs.

•• Alin Irimie questions Microsoft’s presentation of Azure’s features and the company’s cloud strategy in his I Have A Bad Feeling About Windows Azure Azure Journal post of 12/29/2008. His points:

First of all, everybody is using nowadays “cloud” to describe anything that runs on the web. Cloud is the new buzzword, and Microsoft jumping on the bandwagon doesn’t make things any better. … I believe Microsoft should have come up with a different buzzword to describe their Software as a Service/Software + Services offerings, one word, not many. …

Second, Microsoft should clarify better whether Windows Azure platform is a .NET platform or a “mixed” platform where legacy application can run. …

Third, Microsoft needs to let us know at least the year Windows Azure will be released. When are we going to have an SLA. …

On the whole, I agree, especially with Alin’s third point.

••• Wally McClure’s ASP.NET Providers with Windows Azure post of 12/27/2008 warns that ASP.NET Providers in a separate application might fail because the Development Table Storage Service doesn’t support creating new tables dynamically.

•• Wally McClure hosts ASP.NET Podcast Show #133 - Windows Azure Table Storage – video posted Christmas Day.

•• Alin Irimie’s - 100% on Amazon Web Services post of 12/24/2008 to the Azure Journal links to Simone Brunozzi’s 100% on Amazon Web Services: 12/23/2008 Amazon blog post about the IT infrastructure of’s "one address book solution to contact management."

Alin also includes an earlier link to Bizo’s Open Source Simple DB Firefox Plugin: SDB Tool, which does for SimpleDB what S3 Firefox Organizer did for S3 blobs. Bizo runs business-to-business ad targeting network on Amazon; here’s how they describe it:

Bizo is an advertising network and targeting platform designed to allow B2B marketers get their messages in front of the right people. We have over 15 million targetable unique business users in our network, and we help marketers target the right segments with their products and services.

Marzia Niccolai announced the availability of Google’s App Engine Site Creator on 12/22/2008. She describes the new tool as:

[A] lightweight content management system with a full GUI for content creation and administration. It provides a hierarchical site structure, an authentication system, user and group level access controls, file attachments and a WYSIWYG interface for editing page HTML.

She also noted:

For those used to rapidly developing apps with Zoho Creator, we are happy to announce that Zoho have made it possible to deploy [Zoho Creator] apps using Google App Engine.

Zoho Creator enables you to develop data backed business applications, and once you have developed your app in Creator, simply download the Python code and upload it to Google App Engine.

Wally McClure offers ASP.NET Podcast Show #132 - Windows Azure Blob Storage – video as a 12/23/2008 sequel to the podcast below.

David Lempher’s Windows Azure Storage - More Blobs! post of 12/22/2008 extends his earlier Windows Azure Storage - Exploring Blobs! post of 12/20/2008 with BlobRequest() and BlobResponse() methods.

John Udell begins development of a Azure calendar aggregator: Part 1 in C# with an Azure Queue Service on 12/22/2008. John says:

I’ll have more to say about this project, and of course code to share, as things evolve. Meanwhile, though, I want to acknowledge Doug Day at DDay Software. When I switched from Python to C#, the key component I needed was an iCalendar module equivalent to MaxM’s excellent Python iCalendar module, which I’m using at Doug’s DDay.iCal met the need. It’s a solid, cleanly-built, open source .NET component that enables code written in any of the .NET family of languages to parse, and generate, iCalendar (RFC 2445) files.

Wally McClure and David Penton interview Scott Cate in ASP.NET Podcast Show #131 - General discussions on Cloud Computing with Wally, David, and Scott Cate - mp3 audio of 12/22/2008. Scott describes his startup named CloudDB, which purports to compete with Windows Azure and Amazon Web Services, but his description of provisioning a database with a UI reminds me more of Intuit’s QuickBase. (The site was only partially operational when I tested it on 12/22/2008.)

Scott Watermasysk describes the primary differences between Azure Storage and SQL Data Services of the October 2008 CTP in his Microsoft Cloud Data Options post of 12/22/2008.

Tim Anderson asks “Windows Azure: since PDC, how it is going?” on 12/22/2008. Tim remarks about the paucity of messages (from other than users having problems gaining access to the Azure cloud) in the Windows Azure forum concludes:

It’s possible then that most developers are wisely waiting for the beta of Azure before doing serious experimentation. Alternatively – the bleakest outcome for Microsoft – they are ignoring Azure and presuming that if and when they do migrate applications to the cloud they will use some other platform.

John Foley’s Chief Of The Year: Amazon CTO Werner Vogels post of 12/20/2008 for publication by InfoWorld on 12/22/2008 carries this subtitle:

Amazon's external-facing CTO is helping to devise a cloud computing architecture with customer requirements built-in.

Giving Vogels the Chief of the Year title last year would have been more appropriate, in my opinion.

Alin Irimie describes Sriram Krishnan’s forthcoming Erlang Bindings For Windows Azure in his AzureJournal post of 12/20/2008. Sriram posted a Python wrapper for Windows Azure storage in an earlier post of 11/12/2008.

Maarten Balliauw’s CarTrackr on Windows Azure - Part 5 - Deploying in the cloud post of 12/15/2008 completes his five-part series on porting an MVC CarTrackr application to an Azure Web Cloud Service. Although Maarten’s post contains a link to, the app wasn’t operational when I tested it. He also offers links to the ported and original CarTrackr source code.

Stan Kitsis’s Accessing SQL Data Services (SDS) using ADO.NET Data Services (Astoria) describes the experimental Astoria head for SDS data services (see the ADO.NET Data Services section for more details.) Neither SDS nor Azure Table Storage offers schemas, so the Add Service Reference method doesn’t work for creating a client proxy. You must hand-craft the client entity and then overlay the entity with SDS flex properties.

SQL Server Compact (SSCE) 3.5 and Sync Services

No significant new posts as of 12/28/2008 5:00 PM PST.

Miscellaneous (WPF, WCF, MVC, Silverlight, etc.)

No significant new posts as of 12/28/2008 5:00 PM PST.

Monday, December 22, 2008

“VS 2008 Kicks Off” and “The Road Ahead” make Visual Studio Magazine’s Top 5 Articles for 2008

My “Visual Studio 2008 Kicks Off” cover story for the January 2008 issue of Visual Studio Magazine hit second place in the Top 5 Articles for 2008 and “The Road Ahead” in the same issue made #4, according to Redmond Media Group’s .NET Insight newsletter, Vol. 9, No. 75 of December 18, 2008.

Both stories covered Microsoft’s release to manufacturing (RTM) of Visual Studio 2008 and .NET Framework 3.5 on November 19, 2007. “VS 2008: The MIA Features,” my third story in that issue, described technologies that didn’t make the RTM cut. VS 2008 SP1 and .NET 3.5 SP1 included many formely MIA features.

Following are decks for the three stories:

Visual Studio 2008 Kicks Off: Visual Studio 2008 is all about integrating new .NET Framework 3.x Web and smart-client technology, increasing developer productivity, and managing the application lifecycle. Find out how VS 2008's greatly expanded feature set and new .NET Fx 3.5 namespaces can boost your career as a professional developer and add to your programming enjoyment.

VS 2008: The Road Ahead: Microsoft was already well on its way to creating the next version of Visual Studio (code-named "Hawaii") when it released VS 2008. Learn what the future holds for .NET developers.

VS 2008: The MIA Features: Visual Studio 2008 is an ambitious new release and it includes a slew of new language features and tools that were required to get LINQ up and running by itself and with SQL Server 200x. Of course, not everything planned made it into the product. Here's a description of the elements that were pared back and what their status is now.

The other three stories in the top five were:

#1: Create a Data-Driven Messaging System by Paul D. Sheriff (October 2008)
Hard-coded messages don't scale well, and .NET's inherent error messages are user-unfriendly. Learn how to create a more scalable and user-friendly data-driven messaging system.

#3: Ask Kathleen: Understand Your Code Better by Kathleen Dollard (October 2008)
Visual Studio Team System's Code Metrics feature isn't perfect, but if you understand what it's measuring and how, you can use it to gain insight into your apps' overall complexity and to spot potential problem areas.

#5: On VB: Add Distinction to Your Code by Bill McCarthy (November 2008)
Learn how LINQ, extension methods, and lambda functions can help you add a bit of distinction, simplicity, and robustness to your code.

Friday, December 19, 2008

LINQ and Entity Framework Posts for 12/15/2008+

Note: This post is updated daily or more frequently, depending on the availability of new articles.

Effective 1/1/2009, Azure. SQL Data Services, and Cloud Services Posts will become a separate weekly or more frequent linkblog.

Updated 12/20/2008 5:00 PM PST
Updated 12/19/2008 5:00 PM PST
• Updated 12/17/2008 5:00 PM PST

Entity Framework and Entity Data Model (EF/EDM)

Alex JamesDefiningQuery versus QueryView post of 12/19/2008 delivers the details of when to choose DefiningQuery or QueryView in what he calls a “Paradox of Choice.”

The Entity Framework User Education Team’s New Entity Framework Documentation Topics post of 12/17/2008 provides links to the following new EF topics:

Simon Segal is Narrowing ORM options for the sake of sanity to EF as noted in this brief 12/17/2008 post. He’s concluded:

I have found to date that I can continue with using the Repository approach along with the Specification Pattern (for dynamic querying) and Fetching Strategies and that was a big criteria for me. There are of course some lingering frustrations with Version 1.0 however at this point I am satisfied that the Entity Framework team will address those in subsequent releases and for the moment I will endure.

Juliën HanssensEntity Framework and Stored Procedures post of 12/10/2008 was my first encounter with a new EF-oriented Belgian blogger. I missed his earlier Entity Framework - ArgumentException on Connection post of 10/11/2008.


Jeffrey Schwartz continues to flog the LINQ to SQL vs. EF controversy in his Microsoft Says LINQ To SQL Not Dead “Data Driver” column of 12/18/2009 for Redmond Developer News that contains an edited transcript of his telephone interview with Tim Mallalieu. Here’s the deck:

Tim Mallalieu, the program manager for both LINQ to SQL and the Entity Framework, who says Microsoft anticipated the backlash but said both data access interfaces will be better off for this move.

Brian Avery’s LINQ to SQL and Paging of 12/15/2008 explains how ASP.NET’s LinqDataSource simplifies data paging code and DataContext in LINQ to SQL of 12/10/2008 links to an interesting article on best practices for managing LINQ to SQL’s DataContext.

Andy Conrad asks What is IUpdatable? Why should I care? on 12/15/2008. See the full item in the “ADO.NET Data Services (Astoria)” section.

The SQL Server Team announced SQL Server 2005 SP3 now available for download on 12/10/2008, but the post didn’t appear until 12/15/2008.

LINQ to Objects, LINQ to XML, et al.

Rocky Lhotka reports that LINQ to CSLA indexing has been enhanced in his CSLA .NET 3.6 for Windows and for Silverlight is released! post of 12/17/2008.

• Jeff Certain’s Scaling ADO.NET DataTables paper describes how to improve performance of queries against DataTables with indexes and LINQ to DataSet. (Thanks to Beth Massi for the heads up in her Community Article: Scaling ADO.NET DataTables post of 12/17/2008.)

Eric White describes A More Robust Approach for Handling XName Objects in LINQ to XML in this lengthy 12/15/2008 post.

Charlie Calvert’s Query Data with Parallel LINQ post of 12/15/2008 explores PLINQ (Parallel LINQ) and observes:

The code shown in this post uses a pre-release version of PLINQ called the Microsoft Parallel Extensions to .NET Framework 3.5. When PLINQ finally ships, it will run only on .NET 4.0 or later. The version I'm using that runs on top of 3.5 is for evaluation purposes only. There will never be a shipping version that runs on .NET 3.5.

Vincent Home discusses an often-overlooked LINQ addition in his LINQ Dynamic Query Library post of 12/15/2008.

Juliën HanssensLINQ and Dynamic Query Expressions post of 12/11/2008 discusses creating dynamic LINQ queries with expression trees.

ADO.NET Data Services (Astoria)

Pablo Castro mentioned that "SQL Data Services ... got a new experimental Data Services interface this week to coincide with the PDC" in his ADO.NET Data Services in Windows Azure: pushing scalability to the next level post of 11/1/2008, but SQL Services Labs still has "Download links coming soon" at the bottom of I’ve been checking periodically to see if the link was live; so far, no luck.

Today, I asked “Any idea when the experimental interface will be available for testing?” in a comment to Pablo’s blog test, as well as in the start of a thread in the new ADO.NET Data Services forum. I’ll add a new post and update this when I receive an answer.

John Papa’s Now Available: Data Driven Services with Silverlight 2! post of 12/18/2008 announces that you can buy his book from O’Reilly or Amazon. I ordered my copy from Amazon today.

John Papa rescheduled his geekSpeed about Silverlight and ADO.NET Data Services to Thursday, January 8, 2009 at 12:00 PST due to his wife’s medical emergency that he describes in his When Life Takes a Detour post of 12/17/2008. John’s wife and yet-unborn baby are now doing fine.

Mike Flasko’s Design Notes: Row Count of 12/15/2008 invites reader comment on the proposed addition of a $count operator to LINQ to REST’s syntax.

Andy Conrad explains What is IUpdatable? Why should I care? in this 12/15/2008 post, which concludes:

[A]ny data source for Astoria that wants to support PUT, POST, and DELETE … must have an implementation of IUpdateable for their specific DAL. Hence why I started projects on Code Gallery to provide reference implementations of implementing IUpdatable for SubSonic and LINQ to SQL.

There actually are a few more smaller interfaces to implement to become a full fledge ADO.NET Data Service provider.  At some point in the near future, I will try to get a post up describing that stuff plus some preview of the refactoring we are doing in V2 of ADO.NET Data Services to make a nicer provider plugin model.

Shawn Wildermuth’s ADO.NET Data Services for Multiple Databases0? post of 12/15/2008 shows how to refactor Entity Framework connection strings at runtime.

John Papa has scheduled a geekSpeak on Wednesday: Silverlight and ADO.NET Data Services at noon PST, according to this 12/15/2008 post.

ASP.NET Dynamic Data (DD)

Jonathan Carter discusses the AssociatedMetadataTypeTypeDescriptionProvider in his Dynamic Data: Associated Types And The Models They Love post of 12/18/2008.

Jonathan Carter’s Dynamic Data: Annotating Your Data-Driven World post of 12/15/2008 continues his series about ASP.NET Dynamic Data.

SQL Data Services (SDS) and Cloud Computing

••• David Lempher’s Windows Azure Storage - Exploring Blobs! post of 12/19/2008 begins the development of a blob storage project. Dave says:

Now, let me explain my approach first, as this post will be one of many along this vein. I'm purposely not using the StorageClient sample, as I want to understand the atomic steps required to work with the REST API for the Storage service. 

Also, to start, I'm exploring the Blob service, and using the SDK documentation and StorageClient as a guide.

His blob post includes source code link.

Dave is a recently appointed Senior Program Manager on the Azure Engineering team who posted a very detailed description of how Azure fits into Microsoft data center(s) in his Windows Azure - What Happens in the Data Center? article of 12/15/2008.

Ryan Barrett’s Windows Azure impressions of 11/22/2008 and Windows Azure details of the same date are a detailed analysis of the Azure Services Platform from the standpoint of a developer on the Google App Engine team. Ryan spent most of his time “writing the datastore, both the backend and much of the Python API.” His conclusions are surprisingly upbeat for an employee of a direct competitor. He also posted a briefer Amazon SimpleDB thoughts on 12/16/2007.

••• Mike Amundsen’s POST to Azure tables w/o PartitionKey/RowKey: that's a bug, right? thread of 12/12/2008 in the Windows Azure forum has received considerable attention from Microsoft’s Jai Haridas and Niranjan Nilakantan about the issue of whether the ability to add an entity with an empty PartitionKey and RowKey is a bug. Microsoft claims it’s by design, despite the fact that a table can only hold one entity with two empty keys. The more interesting issue is the affect of the partition key on distribution of the Entity Group over multiple VMs or machines, which was in the process of being clarified when I added this item.

Roger JenningsImportant Windows Azure Documentation Hidden in the MSDN Library of 12/18/2008 contains links to six Windows Azure tutorials that you might overlook because they’re located under the generic “Visual Studio 2008 Developer Center” section.

Jim Nakashima’s Packaging up Dependencies post of 12/17/2008 points to Albert Pascual’s The cloud for a fast deployment of proof of concepts post of 12/16/2008, which contains a substantial number of issues, workarounds, and tips, including the unfortunate issue that libraries with dependencies don’t cause those libraries to be uploaded to your Windows Azure instance.

Ryan Dunn, Microsoft’s SQL Data Services evangelist, discusses SDS, “the future of the cloud based data services, what is currently available and how to get started” in this one-hour podcast of 12/9/2008 from SQL Down Under.

Tom Foydel recounts how HelpStream moved its Web-based “social customer service” application to Amazon Web Services in his Running SaaS in the Cloud post of 12/17/2008.

David Pallman describes Dev Fabric Status Colors and Meaning in this 12/16/2008 post about the Azure Development Fabric management console.

Mike Amundsen reports in his Azure.exe : Table continuation headers post of 12/16/2008 that:

[Azure.exe] now properly supports the custom continuation header for Table objects (x-ms-continuation-NextTableName). [T]his also allowed me to complete testing on the the possible Table query options.

His Web server is back up at a new location.

Mark Masterson’s The Enterprise Cloud essay of 12/16/2008 is a chapter-length analysis of “start-up clouds” and “enterprise clouds.”

John Foley observes potential problems for cloud computing from privacy mavens in his 'Illegal, Unethical, Untrustworthy' Clouds post of 12/16/2008.

Martin Heller’s detailed Test Center preview: Windows Azure Services Platform gives wings to .Net of 12/15/2008 concludes:

Microsoft's Community Technology Preview reveals a thoughtfully designed cloud computing architecture where seasoned .Net developers will feel at home

.NET Rocks interviews David Aiken on Azure in this 12/16/2008 podcast with Azure’s Senior Architect-Evangelist that focuses on the Windows Azure operating system.

Tom Bittman’s Data Center Executives See Clouds In Their Future post of 12/11/2008 reports:

More than half of large enterprise data center executives [attending Gartner’s Data Center Conference in Las Vegas last week] expect to get some IT services from the cloud within two years.

InformationWeek’s Bob Evans adds his take on Bittman’s survey in Gartner: Will Cloud Displace Internal IT Services For Data Centers? of 12/15/2008.

James Staten offers Should Your Windows Apps Move To The Cloud? from Forrester for US$279. Here’s his rather negative opinion of Azure in the executive summary:

With the announcement of the Azure Services Platform at the Microsoft Professional Developers Conference, new attention has been focused on Windows and its fit with cloud computing. But this interest may be misdirected, as Azure is more interesting today as a new development opportunity than as a Windows deployment option. The truly viable opportunity for Windows applications in the cloud rests with infrastructure-as-a-service cloud computing platforms such as Amazon Elastic Compute Cloud (EC2) and GoGrid. Building off traditional ISP hosting of Windows applications, cloud computing platforms are maturing quickly and deliver a hypervisor-based infrastructure that scales easily while delivering dramatically lower costs that more closely match true consumption. Firms should consider these new deployment options in their server consolidation planning.

Sys-Con’s Cloud Computing Journal is a new online magazine dedicated to cloud computers.

Geva Perry and James Urquhart Overcast Show #5 with Lew Tucker, Cloud CTO at Sun. James is a former Sun employee and currently is market manager for the Data Center 3.0 strategy at Cisco Systems and CNet Blogger. His Can Sun rise to the cloud-computing challenge? post of 12/16/2008 offers the following observation on Dave Douglas’s and Lew Tucker’s presentation “about Sun's interpretation of the cloud market, and Sun's potential place in it”:

So for Sun to simply say, "hold on, we're working on it"--in a simple Web event, for that matter--risks being a bit boring.

David Pallman’s New on CodePlex: AzureLiveID 12/14/2008 and Windows Live ID Authentication for your Azure Web Site, Part 1 12/13/2008 describe how to implement Live ID authentication for Azure Web apps. Dave is the admin for the Azure Cloud Computing User Group’s Web site.

Mike Amundsen describes Azure Tables Atom Feeds Missing Elements in his 12/14/2008 thread in the Windows Azure forum. Mike and Microsoft’s Jai Haridas appear to have a difference of opinion about what elements and values the Atom spec requires.

David Strom’s Making sense of Microsoft's Azure of 11/6/2008 and Neil McAlister’s Cloud computing isn't all azure skies of 10/30/2008 articles for InfoWorld cast a jaundiced eye on Microsoft’s Azure initiative.

SQL Server Compact (SSCE) 3.5 and Sync Services

No significant posts are available as of 12/17/2008 8:00 AM PST.

Miscellaneous (WPF, WCF, MVC, Silverlight, etc.)

••• Guy Burstein’s Getting Started with ASP.Net MVC Framework and Anatomy of an ASP.Net MVC Application posts of 12/20/2008 show you how to create from scratch a simple MVC project that displays a “Hello Guy” page.

••• John Papa provides a heads-up about DataGrid fixes and breaking changes in his Updated Silverlight 2 DataGrid Available post of 12/20/2008.

Aaron Skonnard’s Screencast: Configuring services with behaviors of 12/19/2008 shows “you how to configure WCF services with behaviors, which will allow you to customize different aspects of the runtime execution ‘behavior’.”

Scott Guthrie announces a new ASP.NET MVC Design Gallery and Upcoming View Improvements with the ASP.NET MVC Release Candidate on 12/19/2008. View improvements include:

  • Views without Code-Behind Files
  • Top-Level Model Property on Views
  • HTML/AJAX Helpers Now Enable Expression Syntax
  • Scaffolding Support
  • MSBuild Task for Compiling Views

Scott says:

The scaffolding support enables the automatic generation of views against any .NET type or object - meaning it can work against POCO classes, LINQ to SQL, LINQ to Entities, NHibernate, SubSonic, LLBLGen Pro, or any other object model. The scaffolding engine uses reflection to retrieve the public shape of a View's model type, and then passes it to a scaffolding template to populate appropriate markup based on it within the view being created.

Rick Strahl’s Removing the .SVC Extension from WCF REST URLs post of 12/15/2008 explains how to specify a UriTemplate that lets you “customize the way the URL looks when accessing the endpoint.”

Thursday, December 18, 2008

Important Windows Azure Documentation Hidden in the MSDN Library

As a result of searching for what I believed was an undocumented requirement for conformance between <Setting name="*Endpoint …> elements in ServiceConfiguration.cscfg and ServiceDefinition.csdef, I ran across the following group of Azure documentation files hidden in the MSDN Library’s Visual Studio 2008 Developer Center:

Quick Lap around the Windows Azure Tools for Microsoft Visual Studio

Jim Nakashima’s tutorial describing how to use the Windows Azure Tools for Visual Studio 2008 that covers the following topics:

  • Creating a new Cloud Service
  • Modify the web role project
  • Building and Debugging the Cloud Service
  • Modify the number of instances to run.
  • Debug the project
  • Publishing the Cloud Service

Using the Cloud Service Project Roles Node

Joe Nalewabau’s tutorial shows you how to use the tools with VS 2008 to:

  • Change a project associated with a role
  • Associate a role with a new project
  • Associate with an existing role project
  • Add or Remove Roles from a Cloud Service
  • Add a Role to a Cloud Service
  • Remove a Role from a Cloud Service

Windows Azure Tools Development Fabric and Storage Integration

Jim Nakashima’s tutorial explains how to use the Development Fabric and Development Storage features:

  • Development Fabric Integration
  • Development Storage Integration
  • Blob and Queue Storage Service Integration
  • Table Storage Service Integration

Deploying a Service on Windows Azure

Jim Nakashima explains the “Click Twice” deployment approach for Web applications running under Windows Azure:

  • Prerequisites
  • Workflow
  • Moving from Developer Storage to a Windows Azure Storage Account
  • Creating a Storage Account
  • Configuration Changes to use Windows Azure Storage
  • Debug your Cloud Service Locally Running against Windows Azure Storage
  • Create a Hosted Service
  • Setting the API Key in Visual Studio
  • Deploying the Package from Visual Studio

Enabling SSL Connections on Windows Azure

Jim Nakashima describes the ins and outs of moving from clear-text HTTP to encrypted HTTPS:

  • SSL Certificate Workflow
  • Create the Cloud Service Project
  • Customize your Web Role
  • Test an HTTPS Endpoint in the Local Development Fabric
  • Select a Certificate
  • Specify an HTTPS Endpoint for a Service on Windows Azure

Jim notes that the certificate used with the Development Fabric must be self-signed because in that scenario the private key is not securely protected. He also mentions that you can provide two <InputEndpoint> elements to enable both HTTP and HTTPS protocols for a service.

Issues and Constraints in the Windows Azure Tools and SDK

An anonymous author (probably Jim Nakashima) provides the following miscellaneous issues, tips and workarounds for Azure Services:

  • Visual Studio must be run as an Administrator
  • Cloud Services run in a modified medium trust
  • Solution and Projects: Cannot create a compute project within a solution folder
  • Debugging and Running from Visual Studio: Need to keep the Cloud Service project set to the StartUp project when running or debugging
  • Service Configuration and Definition: Configuration Settings must match in the Service Definition and Service Configuration Files*
  • Development Storage: A Blob container name must be a valid Domain Name System (DNS) name
  • Development Storage: A queue name must be a valid Domain Name System (DNS) name
  • Development Storage: Table and Property name Constraints
  • To use Development Storage with SQL Server Express 2008: Add yourself to the sysadmin role in order to use the Development Storage Services on SQL Server Express 2008.

* This is the topic I was searching for when I found this collection of white papers.

Azure testers owe a debt of gratitude to Jim Nakashima for the preceding documentation and the “lavishly illustrated” tutorials contained in his Cloudy in Seattle blog posts.

Additional keywords for searching: BlobStorageEndpoint, QueueStorageEndpoint, TableStorageEndpoint, “Invalid configuration file”

Sunday, December 14, 2008

Test Harnesses Compare Amazon EC2 with SQL Server and SimpleDB Performance

Amazon Web Services’ Elastic Computing Cloud (EC2) with Windows Server 2003 offers a choice of the following database management systems for cloud-based data-intensive Web applications:

  1. SQL Server 2005 Express Edition (default, $0.125/instance-hour, no surcharge)
  2. SQL Server 2005 Standard Edition (optional, US$0.60/instance-hour surcharge*)
  3. Amazon SimpleDB (optional, US$0.14/processor-hour) with optional S3 blob storage

* SQL Server 2005 Standard Edition requires a Standard Large instance type, which carries a surcharge of US$0.375/hour over the default Standard Small instance. (The surcharge is US$0.50/hour for Authentication Services.) Full EC2 with Windows pricing details are available here.

Most Windows developers probably will prefer use of a relational database to SimpleDB’s Entity-Attribute-Value (EAV) approach that’s limited to the string data type. SQL Server 2005 Express is limited to 1 CPU, 4 GB RAM and 4 GB database size, so it’s best suited to use with the default US$0.125/hour instance: 1.7 GB of memory, 1 EC2 Compute Unit (1 virtual core with 1 EC2 Compute Unit), 160 GB of instance storage, and 32-bit platform. EC2 instance type specifications are available here.

Scaling up from SQL Server 2005 Express probably would involve migrating to at least a Large Instance: 7.5 GB of memory, 4 EC2 Compute Units (2 virtual cores with 2 EC2 Compute Units each), 850 GB of instance storage, and 64-bit platform. In this configuration, users would choose Elastic Block Store for data storage at a cost of $0.10 per allocated GB per month plus $0.10 per 1 million I/O requests to the volume.

The US$0.60/instance-hour surcharge results in a average cost of 30 * 24 * $0.60 = $432/instance-month or $5,184/instance-year for SQL Server surcharges. This substantial incremental cost for SQL Server 2005 Standard Edition warrants investigation of whether SimpleDB could substitute for SQL Server and provide a cost saving. Data transfer between SimpleDB and other Amazon Web Services is free, but storage is $0.25/GB-month (down from $1.50/GB-month previously.) See Amazon SimpleDB for more details. S3 blob storage is $0.15/GB-month with no charge for data transfer to and from EC2.

Amazon’s Simple Monthly Calculator lets you analyze costs if you know the amount of data and in/out traffic with EC2.

The SQL Server Express Test Harness

Before deciding whether to consider substituting SimpleDB for SQL Server, it’s a good idea to compare its performance with SimpleDB for tasks similar to those to be used in production. The following test harness uses a LINQ to SQL data source, and a GridView bound to a LinqDataSource with built-in server-based paging:

An Elastic Block Store folder holds the NORTHWND.MDF and NORTHWND.LDF files. The Customers table is a copy of the original Northwind Customers table without the relationship to the Orders table, which would prevent deleting rows. Insert with the FormView control is enabled for these tests but disabled when the page is publicly accessible.

Following is the average time in seconds to perform five sets of a paged SELECT of 12 rows, iterative COUNT, single INSERT, as well as DELETE, INSERT and UPDATE operations on 91 Customers records five times (except single INSERT):

Action: Page Count Insert Delete Create Update
SQL Express 0.005 0.002 0.019 0.380 0.112 0.374

The multiple executions result in a substantial reduction of execution time due to caching (estimated to be about 50%.) An iterative (rather than an aggregate) count emulates the SimpleDB count method, because SimpleDB doesn’t provide aggregate values.

Both test harnesses time only the duration of server operations and don’t include HTTP transport time to and from the browser.

All services are beta versions. Therefore, the timing comparisons might not reflect results when providers release the services.

The SimpleDB Test Harness

The SimpleDB test harness uses the Amazon SimpleDB C# library which supports token-based paging with the GridView bound to an ObjectDataSource control for SELECT and INSERT operations. This harness’s data source architecture most closely resembles Azure Table Services because it uses a cloud-based Entity-Attribute-Value SimpleDB table and, optionally, S3 blob storage that’s not linked directly to entities.

Average time in seconds and SimpleDB usage cost to perform five sets of a paged SELECT of 12 rows, iterative COUNT, and single INSERT, as well as multiple DELETE, INSERT and UPDATE operations on 91 Customers records:

Action: Page Count Insert Delete Create Update
SimpleDB 0.048 0.094 0.048 10.094 22.142 10.855
SDB Box Usage $0.00016 $0.00028 $0.00011 $0.00184 $0.00186 $0.00231

Box usage cost is based on the current AWS price of $0.14/processor-hour. Colin Percival’s Dissecting SimpleDB BoxUsage post of 6/25/2008 provides a detailed analysis of the vicissitudes of BoxUsage calculations. Travis Reeder’s How Much Would it Cost to run Twitter on Amazon's SimpleDB? post of 7/1/2008 calculates query costs but omits Web front-end instance and bandwidth charges.

Comparison of Execution Speed of EC2 with SQL Express or SimpleDB and Azure Table Services

Following is a comparison of EC2 execution times with those of the original OakLeaf Systems Azure Table Services Sample Project that’s described at Azure Storage Services Test Harness: Table Services 1 – Introduction and Overview, et seq.

Action: Page Count Insert Delete Create Update
EC2 with SQL Express 0.005 0.002 0.019 0.380 0.112 0.374
EC2 with SimpleDB 0.048 0.094 0.048 10.094 22.142 10.855
Azure Table Services 0.215 0.188 0.155 5.820 5.310 6.561

I was surprised to find Azure Table Services’ execution to be substantially slower than EC2 with SimpleDB for single-page SELECTS, iterative counts, and single INSERT operations.

With the exception of the Insert operation, you can verify the Azure Table Services timing data because the harness is available whenever Azure Data Services is up. EC2 services will be made available on request for brief periods (contact roger_jennings[at]compuserve[dot]com).

I plan to create a similar test harness for SQL Data Services to complete the “OakLeaf Test Harness Quartet” (with apologies to Lawrence Durrell.) The initial version will allow comparison of Plain Old XML (POX) and REST wire formats (see SQL Data Services (SDS) Test Harness Updated to the Windows Azure Services Platform of 11/1/2008). When the ADO.NET Data Services AtomPub front end for SQL Data Services is available, it will be added as another test option.

Performance Issues with EAV Databases and RESTful Wire Formats

Update 12/14/2008: An anonymous commenter observes:

A major piece of work [by] OakLeaf … has confirmed my suspicions about how inappropriate all the cloud name/value entity store technologies are for serious SaaS developers.

The Google AppEngine Datastore, Amazon’s SimpleDB and Windows Azure have chronic performance problems relative to conventional database throughput. Ultimately the inherent inefficiencies of these storage options will hit hourly cloud renters in the pocket.

It’s probably a bit early to apply the term “chronic” to Azure Table Services (ATS), which has only been available in limited CTP form for less than two months, but SQL [Server] Data Services has been available to a limited number of testers since early March 2008. Although the S[S]DS team has promised to add schemas and other relational features so as to distinguish its deliverable from ATS, SDS remains an EAV database with free-form “flex[ible] properties.” Although Microsoft has produced much qualitative hype about the elasticity, scalability, reliability, and availability of SDS and ATS, quantitative data for these services is almost impossible to obtain. In particular, the SDS team has offered no information on what performance penalties developers should expect in return for the other perceived benefits of cloud-based databases.

EAV Databases for Clinical Trials

There appears to be only a small set of papers that compare create-retrieve-update-delete (CRUD) performance of EAV and relational databases with similar data. Most published comparisons are for medical databases that store clinical data, such as Yale’s ACT/DB for managing clinical trials data. Following are a few references to EAV performance:

Dynamic Tables: An Architecture for Managing Evolving, Heterogeneous Biomedical Data in Relational Database Management Systems (Journal of the American Medical Informatics Association, 2007) proposes a sparse, column-based storage, which the authors call dynamic tables. This paper is useful because it provides graphical performance comparisons of relational, EAV/CR, and dynamic table queries returning 1 to 5 attributes, with and without indexes (Figures 6, 7, 9 and 10).

Exploring Performance Issues for a Clinical Database Organized Using an Entity-Attribute-Value Representation (Journal of the American Medical Informatics Association, 2000) examines the EAV representation with classes and relationships (EAV/CR) model and concludes:

Although attribute-centered queries were less efficient in the EAV/CR model, these inefficiencies may be addressable, at least in part, by the use of more powerful hardware or more memory, or both.

Throwing more resources at a database management systems doesn’t reduce inefficiency of the data model, but it might make query execution time tolerable.

Generic Design of Web-Based Clinical Databases (Journal of Medical Internet Research, 2003) discusses the performance of EAV databases for clinical research use:

From a performance point of view, the strength of the EAV design lies in effective entity-centered queries since no joins are necessary to retrieve all facts about entities (eg, patients or medical events) as would be the case in a conventional design with facts spread over hundreds of tables. The drawback lies in inefficient attribute-centered queries, since a (self) join is necessary for each attribute that is requested.

Performance of EAV tables may not be an issue for small databases, but for large clinical repositories with hundreds of concurrent users, query time may be a critical factor. Also, the need for complex attribute-centered data retrieval differs greatly between applications. An electronic patient-record system, for example, is usually aimed at displaying patient-centered (ie, entity-centered) facts, while a research database usually must have some means of aggregating data across a large number of patients. In the latter, however, query efficiency may not be a problem, since data summaries are retrieved only intermittently and may be stored on separate hardware.

Data Extraction and Ad Hoc Query of an Entity—Attribute—Value Database (Journal of the Medical Informatics Association, 1998) describes the difficulty of creating and executing attribute-based queries:

Complex Boolean queries of a conventional table (for example, “identify all patients where sex is female AND age >=35 AND city = `New York”') can be created easily by database neophytes through graphic front ends such as GQL and Microsoft's MS Query. The EAV equivalent is significantly more complicated, because each attribute-value pair for a patient is stored as a separate row in a table. When performing a similar complex Boolean query on a single EAV table, the conceptual AND, OR, and NOT operations must be translated into the row-based operations of set union, set intersection, and set difference, respectively.

The preceding papers indicate that EAV isn’t likely to come close to matching the performance of popular RDBMS any day soon.

SimpleDB Performance Analyses

Comparative performance data for SimpleDB and RDBMSs isn’t easy to come by either. Todd Hoff writes in his The Search for the Source of Data - How SimpleDB Differs from a RDBMS post of 4/22/2008:

Alex [Tolley of] tested retrieving 10 record ids from 3 different database sizes. Using a 1K record database it took an average of 141 msecs to retrieve the 10 record ids. For a 100K record database it took 266 msecs on average. For a 1000K record database it took an average of 433 msecs to retrieve the 10 record ids. It's not fast, but it is relatively consistent. [Italic emphasis added.]

This observation might lead to paraphrases like “Relative consistency is the hobgoblin of performant queries.”

Todd’s earlier The Current Pros and Cons List for SimpleDB of 12/15/2007 makes interesting reading, although Amazon has corrected some “cons.”

If you know of any other performance data, especially comparisons, please leave a comment.

SDS Performance Hit from REST vs. POX Wire Format

I’ve bothered several members of the Astoria team, including Pablo Castro, as well as the S[S]DS folks about the performance hit I see when comparing execution speed of my SDS Test Harness (see SQL Data Services (SDS) Test Harness Updated to the Windows Azure Services Platform of 11/1/2008). Uploading Northwind data to my SDS instance takes more than twice as long with the current REST protocol than Plain Old XML (POX), but I haven’t received any reaction to my tests.

I expect moving to an AtomPub front end for SDS and an ADO.NET Data Services-style client layer will increase the REST performance differential further. Despite the major move by Microsoft to RESTful AtomPub data APIs, I’ve heard no discussion of the effect of AtomPub wire overhead on CRUD operations, especially for queries that return associated entities.

LINQ and Entity Framework Posts for 12/8/2008+

Note: This post is updated daily or more frequently, depending on the availability of new articles.

Updated 12/14/2008 10:00 AM PST: Several additions 
• Updated 12/11/2008 2:30 PM PST: Additions
• Updated 12/10/2008 10:00 AM PST: Additions and minor corrections

Entity Framework and Entity Data Model (EF/EDM)

••• Simon Segal describes a promised attempt to “implement the Specification pattern and fetching strategies with a IRepository” for EF, as he did previously for LINQ to SQL, in his More Entity Framework frustration [I want my Specification Pattern] post of 12/14/2008. (See his Entity Framework - Learning Materials recommended post of 12/9/2008 post below.)

Simon says:

Now it’s late and I am starting to get annoyed with the Entity Framework. As it turns out (as far as I can tell), LINQ to SQL is far more pliable in managing dynamic queries. Why? Well EF doesn’t play nice with Expression<T>, specifically Expression<Func<T>> etc. Errors arise when you build and invoke Expressions because the Entity Framework doesn’t support Expression.Invoke() which is required to combine Expressions.

And he concludes, “As I said it’s late and so far I have a big headache but I will persist.”

••• Ritesh Rao has a similar objective (Implementation of the Specification pattern using Expressions) for LINQ to SQL, NHibernate, and EF with his NCommon project on CodePlex, which includes frameworks for implementing the Unit of Work and Repository Patterns. His Update on NCommon post of 12/12/2008 reports on the latest changes to NCommon v0.2.

Click here for more information on Ritesh’s related Rhinestone MVC-based work item/issue tracking project.

••• Julie Lerman’s Programming Entity Framework ends up at 800 pages! post of 12/13/2008 indicates that her book grew 300 pages from the original estimated length.

•• Simon Munro categorizes the LINQ to SQL vs. EF conflict as a battle between what Microsoft’s Pat Helland calls Controllers and Doers in his Controllers, Doers and the Entity Framework post of 12/20/2008. Simon says, inter alia:

Asking Microsoft to ramp up LINQ to SQL is asking them to position a Doer framework against a Controller framework - in the enterprise.  That will simply not fly - Microsoft needs a framework that makes the Controllers buy into it and that framework is the Entity Framework.  From an EA point of view, the EF is compelling - not only are developers able to use it's artifacts but they can be re-used across a wide variety of technologies and services; EF is positioned to run RESTful through ADO.NET Data Services, be viewed by SQL Reporting Services and I am sure Biztalk, MOSS and any other MS technology along the way.

•• Beth Massi’s Master-Details with Entity Framework Explicit Load post of 12/10/2008 contrasts EF’s optional eager loading of associated entities with LINQ to SQL’s default lazy loading approach.

Matthieu Mezil describes on 12/11/2008 two new extension methods, ObjectContext.Add, ObjectContext.Delete, that substitute for the AddToCategorySet() method and a DeleteOject() methods.

Tony Sneed reports on 12/11/2008 that a Bug in EF v.1 Limits N-Tier Scenarios interferes with Danny Simmons’ AttachAsModified() extension method with entities having associations. The issue is related to EF v1 ’s disdain for foreign key values, which I’ve complained about since EF’s early days. From my Drag-and-Drop Master/Details Windows Forms Still Missing from Entity Framework SP1 Beta of 8/3/2008:

I requested that EF provide optional visibility of foreign key values as item #9 in my Defining the Direction of LINQ to Entities/EDM post of May 29, 2007 to which EF architect Michael Pizzo replied in a comment:

9. Provide read-only access to foreign key values.

This is actually a feature I’m fighting to get into our final milestone for V1. Can you describe the scenarios where this is used? Do you need the ability to query on the foreign key value, or simply expose it on the domain object?

I described the scenario to Mike as emulating LINQ to SQL’s autogenerated databound grids, which let you change EntityRef foreign key values that aren’t a component of the object’s EntityKey, such as Order.Employee and Order.ShipVia.

Tony’s Better N-Tier Concurrency Management for the Entity Framework post of 11/8/2008, which I missed, describes a CreateEntityFromObject extension method, “which accepts a DTO and uses reflection to copy properties from the DTO to the Entity and create an EntityKey.”

•• David Sceppa’s IBM's ADO.NET Provider Supports the Entity Framework! post of 12/2/2008 apparently got lost in the EF shuffle because it just appeared in my reader today. The announcement on the IBM site was dated 11/28/2008.

•• Ward Bell, V.P. of Product Management for IdeaBlade, which publishes the DevForce EF application development platform that’s based on Entity Framework, has written an Is Entity Framework For Real? white paper, which is undated but written after Tim Mallalieu’s Clarifying the message on L2S Futures post of 10/31/2008. Ward’s answer is “yes,” but obviously IdeaBlade has its own agenda.

• Stu Smith’s posts in the “LINQ to SQL” section describe his preference for LINQ to SQL over EF. Jeffrey Schwartz quotes Stephen Forte, Stu Smith, and me in his Data Access Shakout: What's A DB Developer To Do? post to Redmond Developer News’ DataDriver blog of 12/10/2008.

Rick Anderson’s Explicit connection string for EF post of 12/9/2008 shows you how to customize EF when you have “multiple data models or need to pass in the the construction string at run time.

Julie Lerman posted Downloads for DevTeach Entity Framework Deep Dive session and Full Day Workshop on 12/9/2008 to the DevTeach Web site.

Simon Segal’s Entity Framework - Learning Materials recommended post of 12/9/2008 lists his initial observations about EF after deciding to move from LINQ to SQL to EF for future projects and promises to:

[H]ave a go at getting the specification pattern working with the Entity Framework as I did with LINQ to SQL previously and think about how to deal nicely with Fetching Strategies in EF.

Zeeshan Hirani offers his 500-page PDF file of content about Entity Framework and a project using Northwind as the data source as Contributions to Entity framework community in his 12/8/2008 post. Zeeshan says:

My intent was to use this document as learning guide for me and my co-workers but I felt that content is useful enough to benefit rest of the community.


••• Scott Williams adopts the Repository pattern in his LINQ To SQL and Tight Coupling Part 4 post of 12/12/2008 after watching Rob Conery’s screencasts for his MVC Storefront project. Scott points out:

Should you decide to go with another technology, be it the Entity Framework, NHibernate, or even a non SQL Server database, you would only need to create an IRepository implementation for that particular framework/database. It can be tedious for large quantities of tables, but that is the price you might have to pay for loose coupling and a friendlier design. Of course, you could refactor that to automatically set properties through Reflection or something, but that is another article altogether.

Earlier posts in Scott’s series are:

••• Michael Desmond, founding editor of Redmond Developer News and editor at large of Redmond magazine, quotes Anders Hjelsberg in a Digital Darwinism article of 12/11/2008:

The bigger a company gets, the more there is to keep track of and the more overlap that you see because we are doing more things. Now the LINQ to SQL project was an interesting project because it was built by the C# team, but it is clearly in the data domain. We built it because we needed something real to validate LINQ, and we strongly felt that LINQ would be nothing without a strong O-R mapper to support it. …

LINQ to SQL is not dead. I can assure you, it is not dead. Nothing ever goes away. We have never done that and we never will. [Emphasis added.]

••• Andy Conrad’s IUpdateable for Linq to Sql - Fixing a few issues post of 12/11/2008 provides a fix for the IUpdateable.ResetResource() method for his IUpdatable for LINQ to SQL implementation. Andy also mentions that “there is some considerable work to do” on his ADO.NET Data Services port for SubSonic. (See the SubSonic posts in the “LINQ to Objects, …” section.”)

•• Jeffrey Schwartz quotes Stephen Forte, Stu Smith, and me in his Data Access Shakout: What's A DB Developer To Do? post to Redmond Developer News’ DataDriver blog of 12/10/2008. Jeff’s story continues the LINQ to SQL vs. EF v1 and v2 saga.

• Stu Smith rings in on the LINQ to SQL vs. EF issue with his LINQ-to-Entities: The Blackberry Storm of ORMs? post of 12/3/2008, analyzes problems and omissions in LINQ to Entities and concludes:

In my opinion, we seem to have given up on a perfectly good, working ORM solution (LINQ-to-SQL), and replaced it with a buggy, half-baked one (LINQ-to-Entities). I sure hope v2 improves matters, because for now, switching to the entity framework is a downgrade.

and continues with a list of five more objections to EF in LINQ-to-Entities: Follow-Up of 12/4/2008. He also points to Simon Munro’s Move over LINQ to SQL - you have served your purpose post of 11/2/2008. (Thanks to Kristofer Andersson for the heads-up on these posts I missed.)

Stephen Forte’s Is Linq to SQL Dead? Yes, but.… essay of 12/7/2008 proposes the list of actions Microsoft must take to make EF the “preferred data access solution in .NET 4.0. Presumably he’ll make his requirements official at the next ADO.NET Advisory Council meeting, whenever that might be.

So far, Stephen hasn’t responded to my request to provide a link to Stephen was kind enough to send me a PDF copy of:

Data Direct Technologies’s recent .NET Data Access Trends Survey (November 24th, 2008) [that shows] 8.5% of production .NET applications use L[INQ] to SQL as their primary data access method.

Be sure to read the comments. (If he or I find a link to the survey, I’ll post it.)

Mark Blomsma contests Stephen’s conclusion that LINQ to SQL is dead because it’s one of the topics of Mark’s recently completed MCTS Self-Paced Training Kit (Exam 70-561): Microsoft® .NET Framework 3.5 ADO.NET Application Development. Mark says in a comment of 9/2/2008 to the preceding post:

I've just finished up writing the LINQ to SQL chapter for the "MCTS Self-Paced Training Kit (Exam 70-561): Microsoft® .NET Framework 3.5—ADO.NET Application Development".

If you want to certify yourself as a .NET 3.5 certified developer and you pick this exam, then you'll have to learn LINQ to SQL to pass the exam.

Like you say Steve, the technology will be around for a while

Damien Guard’s LINQ to SQL templates updated post of 9/7/2008 includes a link to a 27-second, quick-shuffle mini-screencast showing how to use the templates.

LINQ to Objects, LINQ to XML, et al.

Bob Beauchemin asks Is LINQ the next OLE DB? "LINQ-ed" Server as a rowset source? and then answers with this conclusion:

The impression I get (I could be wrong) is that LINQ might become the next OLE DB. OLE DB was supposed to go beyond relational data sources to provide extensions to the column-row paradigm and provide "data access" over non-relational systems. … Anything that has any API that can implement IQueryable/IUpdateable. Yes, LINQ to SQL (or LINQ to Entities) doesn't always generate exactly the most optimal SQL that generates the best query plans. NO argument. But T-SQL/PL-SQL/etc doesn't always generate the most optimal query plans for the storage engine 100% of the time either.

The list of third-party LINQ to Whatever implementations makes me agree wholeheartedly with Bob’s conclusion.

Rob Conery reports that SubSonic 3: Alpha Is Ready as of 12/10/2008. He notes that SubSonic 3 Alpha shares the following features with LIINQ to SQL:

    • ForiegnKey properties on the Class template, so you can now access Product.Suppliers a la Linq To Sql.
    • Validation methods for each property on the Class template, so when you set a property you can override a "OnEmailChanged" and "OnEmailChanging(string value)" - just like in Linq To Sql.
    • Inflector to the Utility class, allowing you access to methods such as Pluralize(), PluralToSingular(), ToProperCase, ToPascalCase, etc. This is a class for naming only and is part of the templates. (LINQ to SQL offers PluralToSingular() only.)

Rob credits Matt Warren for the LINQ to SQL-like features:

These aren't the only changes - Matt Warren released part 12 of his Linq tutorial which addressed 99% of the issues people were finding, including the use of variables in the Linq call. Hi IQToolkit is awesome, and is the backbone of SubSonic 3.0.

Rob posted SubSonic 3 Alpha Updated later the same day.

Rob Conery asks for assistance in his SubSonic Linq Support - Help Me post of 12/8/2008. Here’s what he says is in the work for SubSonic 3.0:

I have a few ideas, but before I get to that here's what I think we'll need to handle:

  • Linq Support. SubSonic will be a "vector" for people learning linq. I want to be able to help them
  • Pattern Support. There are some new approaches in SubSonic 3 (Repository, Unit of Work, etc)
  • T4 template support and sharing. This is CORE to what I want to do, and I think these t4 files should be easy to find, ratable, etc.
  • Standard support stuff (installation, extension, etc)
  • Source integration - I want people to be able to browse the code
  • Bug Tracker - this really should be part of the site as one unit
  • Wiki?

Rinat Abdullin discusses the DbLinq provider’s dynamic expression parser in his Dynamic Linq and Expression Parsing in .NET as a hint of C# compiler extensibility post of 12/8/2008.

ADO.NET Data Services (Astoria)

••• Raju Phani’s Customizing Serialization of Entities in the ADO.NET Data Services Client Library post of 12/11/2008 explains how to prevent properties that aren’t present on the server from being serialized into the ATOM payload and throwing exceptions.

The ADO.NET Data Services Team announce on 12/10/2008 that Their Forum Has Moved! Visit the New Forums Platform Today! The forum was locked down for the move when this post was updated. Update 12/12/2008: The new ADO.NET Data Services forum is operational (without “Pre-Release” in the title.)

ASP.NET Dynamic Data (DD)

••• Steve Naughton offers 13 Great Links for Dynamic Data from David Ebbo (7), Scott Hunter (1), and Rick Anderson (5) in this 12/12/2008 post.

••• David Ebbo’s Using Dynamic Data with multiple databases post of 12/11/2008 uses LINQ to SQL and EF data sources from Northwind to demonstrate multiple database use and simulate naming conflicts. Sample code is available for download.

SQL Data Services (SDS) and Cloud Computing

••• Roger Jennings reports in Test Harnesses Compare Amazon EC2 with SQL Server and SimpleDB Performance of 12/13/2008 on his first round of comparing the performance of Amazon EC2 with SQL Server Express, Amazon EC2 with SimpleDB, and Azure Table Services with Northwind’s Customers table/entities as a data source. As expected EC2 with SQL Server Express outperformed the alternatives. (Updated 12/14/2008.)

••• Larry Dignan’s Handicapping cloud computing: The big picture post of 11/12/2008 quotes from a Bernstein Report named “The Long View: Netbooks, Wireless and Cloud Computing — Client Software’s Imperfect Storm” by analyst Jeffrey Lindsay:

Although Amazon was arguably a pioneer of cloud web services and some analysts got swept up in the “Books to Bits” hype we think the revenues generated by Amazon’s web services are effectively negligible. …

We expect the software and applications environment to remain heterogeneous for the foreseeable future – more in line with Microsoft’s vision than Google’s. We disagree with the “computers as a utility” and “device as dumb terminal” models where all applications run in the cloud.

Dignan copies an interesting diagram of “online utilities and applications” for cloud computing or software as a service, which includes the usual suspects, Amazon, Google, Microsoft, and SalesForce, along with a few other firms not usually associated with cloud computing.

Dignan adds his own out-of-context observation:

What’s notable is how much Sun has been a player in cloud infrastructure yet has failed to capitalize.

It’s ironic that Sun announced on 12/9/2008 that it was “phasing out” its service and “will be implementing in new services from its Cloud Computing division,” according to Charles Babcock’s Sun Discloses Plans To Enter Cloud Computing post of 12/10/2008 for InformationWeek. Babcock notes that “neither spokesman [at the December 9 press conference] committed Sun to supply specific [cloud] services within a specific timeframe.”

••• Pat Helland’s Building on Quicksand" Paper for CIDR (Conference on Innovative Database Research) post of 12/12/2008 contains an abstract and link to the paper he coauthored with David Campbell for the CIDR conference, which will be held at the Asilomar Conference Grounds*. The paper deals with building reliable systems with unreliable components and a “relaxed model for fault tolerance,” which implies:

1) Everything promised by the primary is probabilistic. There is always a chance that an untimely failure shortly after the promise results in a backup proceeding without knowledge of the commitment. Hence, nothing is guaranteed!

2) Applications must ensure eventual consistency. Since work may be stuck in the primary after a failure and reappear later, the processing order for work cannot be guaranteed.

Note that it’s the application that must ensure eventual consistency. Pat uses Amazon’s Dynamo Storage system (“a replicated blob store implemented with a Distributed Hash Table”) and Shopping Cart application as an example. Pat says:

Dynamo is interesting in many ways including its conscious choice to support availability over consistency. Dynamo always accepts a PUT to the store even if this may result in an inconsistent GET later on.

* The Asilomar Conference Grounds, located on the shoreline of Monterey Bay, is part of the Asilomar State Beach and Conference Grounds State Park. The original lodgings were designed by noted Northern California architect Julia Morgan, and the Grounds are listed in the National Register of Historic Places.

••• Mike Amundsen asks POST to Azure tables w/o PartitionKey/RowKey: that's a bug, right? in this 12/13/2008 thread in the Windows Azure forum. Sure looks like a bug to me.

••• Kevin Hoffman’s Azure Storage Authentication Failing when it shouldn't thread of 12.12.2008 in the Windows Azure forum complains about the amount of configuration tweaking required between local and cloud deployment. I haven’t run into that problem with Azure’s table storage authentication. I have both local and cloud config data in my ServiceConfiguration.cscfg file and comment out one or the other.

••• Mike Amundsen describes the “cleaned up” version of his Azure.exe command-line app for manipulating Azure tables in his Azure.exe command-line app posted post of 12/12/2008. He’s also posted a ZIP set that includes all the source for Azure.exe and the Amundsen.Utilities assembly.

Mike’s Azure.exe sample app posted and Azure Examples @ github threads of the same date in the Windows Azure forum provide additional details, including syntax examples.

••• Rocky Lhotka’s Some thoughts on Windows Azure post of 12/11/2008 underscores the need for Microsoft to 1) define it’s pricing model for the Azure Services Platform and solve the lock-in problem, which Rocky (and I) believe “will be the biggest single roadblock to adoption for most organizations (assuming reasonable pricing - which I think is a given).” However, the main point of Rocky’s post is:

[T]he biggest benefit to Azure is one important concept: an abstract runtime. [Emphasis added] …

I think Azure (whether it succeeds or fails) illustrates a different solution to the [inelegant and inefficient “host a virtual machine”] problem. Azure defines a limited architecture for applications. It isn't a new architecture, and it isn't the simplest architecture. But it is an architecture that is known to scale. And Azure basically says "if you want to play, you play my way". None of this random use of platform features. There are few platform features, and they all fit within this narrow architecture that is known to work.

Rocky then goes on to make an articulate and reasoned argument that abstract runtimes are “the real future of the cloud.” I agree.

Update: Rocky added Windows Azure and the value of restricted platforms/architectures on 12/12/2008 in reply to comments to his earlier post on the abstract runtime topic.

••• David Burela explains in his Silverlight hosted on Windows Azure post of 12/10/2008 how to start a Azure-hosted Silverlight project and in his WCF services hosted on Windows Azure post of 12/9/2008 how to get WCF services running under Windows Azure (despite the bugs). His earlier Guest post: Windows Azure - review from a developer article for Long Zheng’s I Started Something blog is a brief introduction to Azure.

•• David Aiken describes his Windows Azure Online Log Reader that’s available for download as of 12/11/2008. The reader eliminates the need to manually download logs and displays the data from copied logs in a GridView control.

•• John Foley’s Microsoft's Billion-Dollar Cloud Business post of 12/10/2008 for InformationWeek’s Plug Into the Cloud Blog quotes Stephen Elop, president of Microsoft's $18.9 billion Business Division, prediction at a New York analysts meeting about the future of Microsoft's software-as-a-service business:

Microsoft foresees half of Exchange, SharePoint, and Dynamics CRM revenue coming from online versions of those products within five years.

Foley continues:

Microsoft has been criticized, and rightly so, for being late to the game in cloud computing. After dragging its heels, Microsoft introduced its Windows Azure cloud operating system and the related Azure Services Platform in October. But Microsoft is noncommittal on delivery dates for its Azure technologies and services, an indication that, although its strategy has firmed up, much of the development work lies ahead. Elop had nothing new to share in terms of an Azure timeline that would help customers with their own planning.

It appears to me from the above diagram that the Azure team considers at least SharePoint and Dynamics CRM services as part of their platform, as well as SQL Services. Almost every Azure and SQL Data Services PDC 2008 session included the preceding diagram in the slide deck.

•• Andy Patrizio casts doubt on the preceding optimistic view of cloud service revenue in his Google, Microsoft Back Off on Datacenter Plans article of 12/10/2008 for Andy says:

In the case of Microsoft (NASDAQ: MSFT), a source close to the construction of its planned Chicago, Ill. datacenter said work has been scaled back and many modular containers being used at the site are just being parked but not hooked up. Also, the company has yet to begin construction on a West Des Moines, Iowa datacenter despite announcing it with much fanfare last year. …

Microsoft has publicly said it is cutting back datacenter expenses. On the last quarterly conference call to discuss the first fiscal quarter of 2009, CFO Chris Liddell said Microsoft would trim capital investments by $300 million, and he specifically said it would be on the datacenter side.

•• Jim Nakashima’s Multiple Service Configurations for a Windows Azure Cloud Service post of 12/10/2008 describes a workaround that lets you specify separate service configuration files for local and cloud deployment of ASP.NET applications. The workaround doesn’t lift the limit of one staged and one production project deployment.

•• Robert Zhu offers a “brief tour” of the The CardSpace "Geneva" Control Panel Applet in this 12/10/2008 post.

• Eugenio Pace continues setting the scene for his VeryBigCorp/SuperCloudySoftware Architecting Cloud Applications for the Enterprise saga with his Part III - SuperCloudySoftware meets VeryBigCorp CIO post of 12/10/2008.

• Mike Amundsen announces in his Azure Exampes @ github thread in the Windows Azure forum that his “plain old WebRequest/WebResponse” samples have “full support for Tables (GET, POST, DELETE) and Entities (GET, POST, PUT, MERGE, DELETE). … [S]upport for ad-hoc queries … should happen by tomorrow.” The samples don’t require Vista, Windows Server 2008, the Azure SDK or .NET 3.5+; they will run under .NET 2.0 and Windows XP.

• Om Malik’s Amazon Launches EC2 in Europe post of 12/10/2008 notes the addition of an EU site for EC2’s basic hosting service instances, but Windows 2003/SQL Server 2005 hosting isn’t available yet. Werner Vogels’ earlier Expanding the Cloud: Amazon EC2 in Europe article provides added details and links to additional resources.

Roger Jennings updated Windows Azure Test Harness Is Live! on 12/9/2008 to announce that entity deletion, recreation, and updating is now enabled for the publicly deployed version. Give the harness a test drive at (The layout problem with Firefox 3 was fixed on 12/10/2008.)

Daryl Plummer, a Gartner analyst whose purview includes Cloud Computing, describes Instant Experts Floating in the Cloud in his post of 12/9/2008. Daryl suggests:

  • Use Instant Experts like scalpels. You need them to do sanity checks on all those new things you keep hearing about and to pull out synergies with your current plans.
  • Make sure your “Instant Experts” don’t just Google all of their information. Go to the source or to trusted industry advisors (shameless Gartner plug).
  • Have your instant experts challenge one another. If they can’t explain it to each other, you won’t be able to explain it to the business.

It’s a good read.

Roger Jennings asked Is the Order of Attributes Returned by GETs on Entities Consistent? on 12/8/2008 in the Windows Azure forum. As far as I can determine, Microsoft orders their attributes alphabetically by attribute name. But, like Amazon, their response is that they make no guarantee of a consistent order.

Eugenio Pace’s Architecting Cloud Applications for the Enterprise - Part II - VeryBigCorp buys IssueTracker post of 12/7/2008 tells the story of VeryBigCorp signing up for SuperCloudySoftware’s IssueTracker™ service. (Still no sample app or source code.) Eugenio’s first episode was Architecting Cloud Applications for the Enterprise - Part I - Introducing the Actors of 9/5/2008.

Shan McArthur’s Cloud Services Introduction post of 11/4/2008 and Design Strategies to Prepare for Azure and SQL Data Services of 11/5/2008 are very useful overviews of Azure and SQL Data Services by an active participant in the Windows Azure and SQL Data Services (SDS) - Getting Started forums. (I missed these when Shan posted them.)

SQL Server Compact (SSCE) 3.5 and Sync Services

No significant new posts as of 12/9/2008 5:00 PM PST.

Miscellaneous (WPF, WCF, MVC, Silverlight, etc.)

Nicholas Allen reminds developers on 12/9/2008 that the WCF team has posted several new WCF Virtual Labs episodes, with REST, AJAX, and Web 2.0 in Windows Communication Framework being the latest. Earlier labs are:

Aaron Skonnard’s Screencast: Configuring WAS for TCP endpoints of 12/8/2008 continues his series of WCF tutorials. Earlier episodes are:

Brad Chen’s Native Client: A Technology for Running Native Code on the Web announced on 12/8/2008 the anticipated new browser OS: A sandboxed i86 instance for Firefox, Safari and Chrome browsers running under Windows, Linux or MacOS. Matthew Ingram weighs in on 12/9/2009 with Google: Fulfilling Netscape’s Original Vision, an analysis piece that concludes:

Is the world ready for a Google-ized version of ActiveX? Perhaps not. But if the company does manage to get enough support for Native Client, the web OS could become a reality — and the knife that Google is already holding to Microsoft’s neck with its web apps could cut a little deeper.