Galin Iliev's blog

Software Architecture & Development

C# 3.0 and LINQ Tutorial

After speaking with my friend Marto I decided to write a tutorial about forthcoming features in new version of the very popular language C#.

As always there is a lack of development materials in Bulgarian so it is written in Bulgarian and there is no language barieer for bulgarian developers who wants to take a look behind the corner to new version of our favorite C#.

There is posibility to translate the whole tutorial in English (when it si finished) so this could be good starting point for all English speaking devs but this depends on the interest (and my availability).

I have posted first two parts (of total 13 so far): Introduction and Acknowledgment with LINQ and basic capabilities.

I hope I will be able to post next part very soon (projected within next two weeks) and I will announce it here.

In the meantime I will be very grateful for your feedback. Any comments, reccomendations and request for more detailed reviews are welcome. You can post them as comments on the blog or to my emails stated on here.

Thank you

LINQ projects in VS "Orcas"

Yesterday I installed VS "Orcas" January CTP on my machine in order to take deeper look at things that are comming.

I was a bit surprised I could not find VS LINQ project templates and compiler throws compile error on correct linq statement.

This was kind of strange - The VS version that introduces LINQ return compile error on correct LINQ statement ???!?!?!?

The problem was only in referenced  assemblies as this post says.

So to have LINQ syntax in your VS "Orcas" you have to:

  • Add reference to LINQ assemblies located in C:\WINDOWS\Microsoft.NET\Framework\v3.5.*. You can reference them all or only those you need (The important ones are System.Core.dll, System.Data.Entity.dll, System.Data.Linq.dll and System.Xml.Linq.dll
    The core is for the standard linq queries, where Data.Linq and Xml.Linq are what the old DLinq and XLinq were. )
  • Add using clauses at the top of source files.
    using System.Linq;
    using System.Data.DLinq;
    using System.Xml.Linq

Skype and Internet Explorer BHO

Have you seen new Skype 3.0? Although it becomes more colorful it has too many new features.

The new Skype Web Toolbar for Internet Explorer is fascinating.

The Skype Web Toolbar recognizes phone numbers and Skype Names on web pages, so that you can call with one click, through Skype.

But how do they do it?

Is it some ActiveX? Something else? Should I go back to C++ in order to create something similar?

Not really!

This is (simple) HTML and JavaScript. Well... probably not that simple but still not ActiveX.

But why I do not see it when I am viewing Page’s Source?

This is tricky part – you are not able to see this additional code because it is added after browser complete downloading page from the site.

And how I can create something similar?

You don’t have to write it in C++. But still you will have to know how to create COM object that is attached to IE or Browser Helper Object (BHO). Fortunately there are some sites that explain that like:

·         Good Steven M. Cohn's  post  - IE Browser Helper Objects

·         AutoSig: A browser helper object that automatically adds a different signature when you post a message to a CP forum – I deeply suggest you to explore this article and demo code in it.

You will see similar code in articles above:

browser.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(this.OnDocumentComplete);


With this code you get control when browser completes downloading the page. And in this handler you have access to the page with:

IHTMLDocument2 document = (IHTMLDocument2)webBrowser.Document;


And having access to document you are able to modify page’s source. Thus you can put what you want where you want. The limit is your imagination J (and web design skills)

Ooh… I almost forgot: you can add additional script tags and images in web page. This is not big deal as you can reference them in client’s computer (that’s right this is not pure web development).



Add-Ins for your applications

I suppose most of you are pleased when some new cool add-in is released and it adds new feature to your favorite tool/utility. Most of us - developers - know about Reflector and it's ecosystem of useful add-ins.

Have you ever wanted to be able to create such applications without having to code by hand all these add-in infrastructure classes?!

Guess what?! New System.Addin namespace is coming with VS "Orcas" to facilitates you.

SideShow Gadgets with C#

Here are components that allow creating gadgets for SideShow with our favorite c#.

Microsoft called it Windows SideShow .NET Framework Components 1.0 (link) and...  unfortunately ... must be deployed to the client. But still this is very cool

Here short description from MS:

The Windows SideShow .NET Framework Components installs the runtime and development components that are required to build and run gadgets for Windows SideShow using the .NET Framework version 2.0. This download facilitates gadget development and enables developers to build compelling applications to support Windows SideShow-compatible devices. Users are required to install this component in order to run gadgets that have been built using the component.

Developer documentation can be found in the Windows SDK.

UPDATE: I just found that this is creating of great Jeffrey Richter

Here you can find how to use these APIs (

MS Word 2003 menus in Word 2007

There was a lot noise about new Office 2007 User Interface and the Ribbon. Many people had difficulties getting used to new ribbon although after initial confusing it is quite easy to use.

For people who learned Word 2003 and feel in calm waters when see menubar we decided to start new project. This project is in its CTP and we haven't decided if we want to finish it yet.

The project utilizes Riboon to create good old menus in Word 2007. It would look like this:

Word 2003 Menus

We have some functionality implemented in menus already :).

I will be glad if you vote For or Against such initiative (By clicking on comments[x] link below ).

Thank you in advance

Skypeout and .NET

As a typical geek I am spending my vacation playing with new technologies. Today I discovered something very interesting: Skypecast( ). This is like conference call but it is public (with option to be hidden). I think this is nice idea and could be next extension of our virtual world.

I decided to create new room where .Net geeks can freely discuss … well.. whatever they want J. I think this way we can easily help each other in solving tough problems we meet all the time in our job.

You can join by calling +99001110022186965 from skype or press here(skype:+99001110022186965). And the fun doesn’t stop here. You can add this number as contact in your list and easy dial it whenever you want to enter in room J

I will be glad if we expand this room.

Note: You will need Skype 3.0 to join