Galin Iliev's blog

Software Architecture & Development

Project Astoria

I am on codenamed projects wave today and I would like to share with you another one - project Astoria (reposted from official blog):

Project Astoria Overview

The goal of the Astoria project is to enable applications to expose data as a data service that can be consumed by web clients within corporate networks and across the internet. Such data services are reachable over regular HTTP requests using standard HTTP verbs such as GET, POST, PUT and DELETE to represent the operations against the service.   The payload format for the data exchanged with the service can be controlled by the client and all options are simple, open formats such as plan XML and JSON. The use of web-friendly technologies make it ideal as a data back-end for AJAX-style applications, Rich Interactive Applications and other applications that need to operate against data that is across the web. 

                Further reading: Astoria Overview, Using Astoria        

By Mike Flasko

For those who are interested in architecture & design & process the team made another post Transparency in the design process which describes how the things happens inside MS (described for this particular project)

Microsoft codenames

I came across on posting series that describe Microsoft codenames. It is good to see all them in one place but it is a bit confusing and overwhelming :)

You won't be surprised that many new things are behind the corner... Check Mary Jo Foley's series of Microsoft Codenames.

(via DevLife blog)

There is also good list on Wikipedia. I found there that "Tuscany" is codename of online version of Visual Studio and it is currently a research project. Interesting, huh!?

The bad news and the good news

LINQ to SQL Debug Visualizer was removed from VS 2008 Beta 1... if you use LINQ to SQL you know how useful it is to examine generated SQL code from LINQ statements as well as returned results. but it was removed from Beta 1 and still missing in Beta 2...

Now the good news :) There is way to install it back. But this is not all. You can download the source code and make changes (if you want) or just examine it. I guess there are no doubts who posted it :) - Scott Guthrie wrote a post with full explanation what is LINQ to SQL Debug Visualizer, how to use and how to install.

How to build custom LINQ provider?

Many people asked this question since May 2006 LINQ Preview was announced. We know there are several providers implemented by Microsoft:

But if we have custom datastore how we can implement LINQ provider for it? For a long time LINQ to Amazon by Fabrice Marguerie, was the only third-party provider and although he explained it was still many question left opened. (I've just found that there was LINQ to WebQueries by Hartmut Maennel predates LINQ to Amazon by few days.)

Matt Warren started very nice and deep series of blog posts that covers the process of writing custom LINQ provider. Even if you don't plan to write custom provider this post can give you an idea how the things work:

Of course, it is good idea to check if the provider is not written already :) See below list of providers.

OakLeaf Systems blog has a nice post that gives list of third-party LINQ providers (re-posted): 

  • LINQ to WebQueries by Hartmut Maennel handles searches in the SiteSeer and MSDN Web sites. (This provider predates Fabrice's LINQ to Amazon provider by a few days.)
  • LINQ to Amazon by Fabrice Marguerie, a co-author of the forthcoming LINQ in Action book, was the first third-party LINQ provider that I know of. LINQ to Amazon returns lists of books meeting specific criteria.
  • LINQ to RDF Files by Hartmut Maennel handles queries against Resource Description Format files' triples. Part I of the two-part post is here.
  • LINQ to MySQL by George Moudry, based on the LINQ May 2006 CTP, was in the development stage as of January 2007, but George says it's "capable of simplest queries and updates" and "now has support for most primitive joins."
  • LINQ to NHibernate by Ayende Rahien (a.k.a. Oren Eini) translates LINQ queries to NHibernate Criteria Queries and is based on the Orcas March 2007 CTP. The documentation that describes development of the provider presently is at the Part 1 stage.
  • LINQ to LDAP by Bart de Smet is a "query provider for LINQ that's capable of talking to Active Directory (and other LDAP data sources potentially) over LDAP." As of 4/11/2007, Bart's "IQueryable Tales - LINQ to LDAP" consisted of Part 0: Introduction, Part 1: Key Concepts, Part 2: Getting Started with IQueryable, Part 3: Why do we need entities?, Part 4: Parsing and executing queries, and Part 5: Supporting Updates.
  • LINQ to Flickr by Mohammed Hossam El-Din (Bashmohandes) uses the open-source FlickrNet C# library as its infrastructure.
  • LINQ to Google Desktop by Costa Rican programming language enthusiast Luis Diego Fallas supports GDFileResult and GDEmail types. A subsequent Adding support for projections to Linq to Google Desktop implements the LINQ Select expression.
  • LINQ to SharePoint by Bart de Smet supports writing LINQ queries for SharePoint lists in both C# 3.0 and Visual Basic 9.0 and communicates with SharePoint via Web services or though the SharePoint Object Model. The SpMetal command-line utility automates C# or VB class generation.
  • LINQ to Streams (SLinq, Streaming LINQ) by Oren Novotny processes continuous data streams, such as stock tickers or sensor data. The project's home page on CodePlex includes an animated GIF simulation of a stock ticker displayed in a DataGridView. The current version supports Select, Where, Order By, and Descending only.
  • LINQ to Expressions (MetaLinq) by Aaron Erickson (the developer of Indexes for Objects a.k.a i4o*) lets you query over and edit expression trees with LINQ. Like .NET strings, LINQ expression trees are immutable; the only way you can change a LINQ expression tree is to make a copy, modify the copy, and then replace the original. MetaLinq's ExpressionBuilder lets you create an "Editable Shadow of an expression tree, modify it in place, and then by calling ToExpression on the shadow tree, generate a new, normal, immutable tree." ExpressionBuilder is an analog of the .NET StringBuilder.

* i4o isn't a LINQ provider, per se, but a helper class that can increase the speed of LINQ queries against large collections by a factor of 1,000 or more. InfoQ published on June 22, 2007, Aaron Erickson on LINQ and i4o, an interview of Aaron Erickson by Jonathan Allen about i4o's purpose and background.

Hope you'll find this useful

...and it keeps growing...

This week I spent some of these geek nights... you know - nothing romantic - you in front of PC and filled with passion about technologies :) and I was able to wrap up two of the parts of my LINQ Tutorial (in Bulgarian) - LINQ in details and Basic operators in LINQ.

I will be glad to hear your opinion...

I will try to describe LINQ to SQL 'till the end of the month and with this part most of the tutorial will be finished. Let's see how things will go after long waiting (and hopefully deserved) vacation.

Language comparison

I found some goods language syntax comparison sheets that can help you easily to write your algorithm in VB.NET even you are expert in C# (or vice versa). But remember: the most important things are algorithm and benefits for the users not which language you use! in other words if you have some genius thoughs it doesn't matter if you say them in English or in Bulgarian - people will understand you

Hope this helps

Visual Studio 2008 Beta 2, .NET FX 3.5 Beta 2, and Silverlight 1.0 RC

Well, well... The long waiting is over - Visual Studio 2008 Beta 2 is here (actually here :) )

You can download .NET 3.5  Redistributable too. Also Silverlight has its Release Candidate and it will be available for dowload in next day or two. 

It seems there is some trick with policy so remember:

After the Beta 2 installation has finished, you should run this script to ensure that the installation of .NET Framework 3.5 Beta 2 will not affect the development of ASP.NET AJAX 1.0 applications

Update: I am now installing Beta2 but these are new features for Web Development summarized on ScottGu blog:

VS 2008 Multi-Targeting Support

  • VS 2008 Web Designer and CSS Support
  • VS 2008 Nested Master Page Support
  • VS 2008 JavaScript Intellisense
  • VS 2008 JavaScript Debugging
  • If you have ever installed a previous version of "Orcas" or VS 2008 on your machine (either Beta1 or one of the CTP versions), you need to reset your VS 2008 settings after installing Beta2.  If you don't do this, you'll have an odd set of settings configured (some windows will be in the wrong place), and you'll potentially see some IDE performance slowness.  You can reset your settings by typing "DevEnv /resetsettings" on the command-line against the VS 2008 version of the IDE.