18 February 2008

CodeCamping near Sofia

Last Friday I was thinking - "I this weekend will be a very exciting one!" I did not realize then exactly how exciting it will actually be. I was one of the organizers of the premier CodeCamp event here in Bulgaria. Together with Stefan and Martin we took care for organizing the event willing to see will it be useful and if so make it a regular gathering.

The format of the event was something that we somehow managed to arrange perfectly - an informal lectures with a good mix of discussion from any kind. Gathering a bunch of people with different interest and tastes for technology actually allows for every one having some knowledge to share it. Martin wrote a good blog post discussing the subject that you can review to get a general view of the things :).

I must express my deepest gratitude towards the lectors that presented such interesting topics :

Emil Stoychev, Hristo Iliev, Ivaylo Bratoev, Vladimir Dimitrov and Peter Velichkov. Thanks guys! You were all awesome and I learned a lot of new things from you. I hope we will meet again and have such a fun again.

Despite the good lectures and useful discussions, there were a few drawbacks that we will take care to remove next time. I won't explain in details what were all lectures about. You will pretty soon be able to see them online and read the content.

Only one thing that's worth mentioning - if you or someone you know ever need to know how to start a diesel jeep after being 2 nights in a freezing cold with exhausted battery using a newspaper, don't hesitate to contact me I'll tell you the whole story ;),

13 February 2008

Retrospection

This will be a short post, just to share some thoughts that accidentally came through my mind recently.

A friend of mine (Stefan) brought to my attention a new blog that I was not aware of. Its address is - http://vizibility.blogspot.com. Its posts are written in Bulgarian and specifically created to discuss and share thoughts and opinions on Vizibility - my ex-company.

Although I must agree with most of the things shared there (probably even all of them), I must express my doubts whether it is appropriate to have such kind of forum. I don't want to be misunderstood - every person, who wants to work somewhere deserves accurate information about the company, the people that are working there, the management and all other stuff. Any employee mustn't be misled with false promises, half truths and honest lies to join a company that is no match for his/her needs. However, a lot companies practice this kind of misleading policy for recruitment. Still, having an open blog that discusses all kinds of negative feedback on a particular company more or less predisposes over-exaggeration of facts and situations. Yep! Internet is an open and democratic structure that allows everyone's opinion to be expressed and heard and this blog may be just right.

On the other hand, I have always thought that when someone wants to say something he should always have that chance and be heard no matter whether it is right or wrong. And if his position is out of the truth there should be a right response. However, when I want to say something I say it and stand for my words. I don't hide behind nicknames and anonymous accounts.

I don't know who is the person behind that blog. It is certain that we have worked together in the company and most certainly we know each-other. I'm quite disappointed that he/she is not revealing his/her identity and I hope that honor and dignity will come to his/her senses and will he/she publicly reveal himself/herself.

I really think that people should know what's there and deserve it. So if this is the best way ... may be it will help. I'll still keep my feedback away from the public space but if there is a person wanting a feedback from me as an ex-employee of Vizibility Bulgaria - you can contact me any time. :)

14 December 2007

My Daemon - Is that really me ....

Just now I was looking through the web site of "The Golden Compass" movie and took a couple of minutes to take a quiz that determines what my daemon should be. It appeared that is should be called Calista and is a Hare Daemon. Below you can see more details on it and for those of you who know me can apprise whether it is right or not, so that in 12 days it will settle to the character that really represents me. Please take that few moments to rate my daemon :).

P.S.: If you want to direct someone to apprise my daemon you can also use this link:

http://www.goldencompassmovie.com/?698059

08 December 2007

Facebook for bloggers

tmpCB71



for

tmpCB73

Obviously, I have quite some time on my hand lately and somehow I got to install Windows Live Writer (WLW). To be honest, I know about it for quite some time but never had the chance to experience it first hand. As I was not blogging very often, the need for a good blogging tool never came to me - I just used MS Word 2007. So after checking it out for just a few minutes, I realized how much time I wasted fixing blog post design after publishing it. For everyone who is still struggling with Word or those nasty WYSIWYG editors - check WLW out!

Being always ready for interesting new stuff, I spotted that it also supports plugins. I started searching for what kind of plugin there are on the web. And it turned out that there were quite a few of them, bringing additional functionality to the tool - adding pictures and video content from different source (Flickr, Picassa, Soapbox, YouTube... etc.). Other plugins allowed starting up WLW and pre-populating it with different content. Suddenly, I started to realize that it will be great have such integration also with Facebook. It has great developer friendly platform and it will be a waste not to use it. There had to be someone who has done something on that end. Unfortunately there weren't any!

Cheer up pals! Nothing's lost. This was a good opportunity to start something new and build that kind of integration.

Windows Live Writer

tmpDA71

Developed as part of the Windows Live platform, WLW appears to be very powerful blogging tool - the best of all I have tried by now. It integrates great with a numerous blogging platforms - all of the most popular (Community Server, Blogger, WordPress, Spaces etc.). What I love about it is that it is fast, accurate and gives you the exact preview as it will look when you publish the post. What is even better, it is written in .NET.

Built on .NET 2.0

tmpDA91

Built on top of .NET Framework 2.0, it gives very easy way to see what it is doing and how (remember Reflector ;) ) and second it gives great ways to integrate with and extend its current functionalities. You can plug your own functionality or even export into it a whole blog post from somewhere.

How to get the plug in ...

tmpDAC1

Basically, you have two ways to integrate with WLW. The first one is by creating a "Blog this" kind of functionality. This is not exactly creating a real plugin, but more or less integrating with WLW. A good example for this is a FireFox plugin that allows you to blog the page you are currently on - you go to a page or blog post where you like something and want to blog about it, click the plugin button in the toolbar and in a few seconds you have WLW loaded with pre-populated content form the site .... cool ah ;). So this is one way of integrating that I will talk about very soon ... stick with me a little while and I'll explain more.

The second one is by creating a real plugin for WLW. This is the thing I'll be talking about in more details. The architecture beneath is quite simple - two base classes and a bunch of attributes for them. The classes are ContentSource and SmartContentSource - one for simple content and one for more complex suppliers. You build a class library with class deriving from one of them, override one of more methods (if necessary), compile the solution and drop the DLL into WLW Plugin directory. This is the simplest way you can do "the thing". Sure, there are more complicated ways of building and registering a plugin - adding registry keys etc., but for starters this is good enough. A good source of materials that can guide you through the process of building a WLW plugin is Windows Live Writer SDK pages in MSDN. There you can learn the basics and start experimenting.

Facebook and .NET

tmpDB00

Facebook is the most recent passion that has infected a huge number of people. Stefan had a talk a few weeks ago about developing Facebook application with ASP.NET and also created a add-in for Bookvar that imports friends and their pictures. What differentiates Facebook from the other Social Networking sites is the ability to extend the platform by creating your own addition (applications for it). You can develop you own application that shows then into your profile, everyone can see it and can also add it to their profile. Quite darn cool! This not only gives great flexibility but also allows for very fast spreading of your application. One can even make money by creating such applications.

Facebook.NET

In order to create such applications first you need to register in Facebook. Then register a new application and right after that you can start developing. In order to develop Facebook application in .NET you will need some wrapping library to do the service calls to Facebook for you. You can choose between two options - one is Facebook Developer's Toolkit and Facebook.NET. Both of them are open source and hosted on . I chose to use Facebook.NET created by Nikhil Kothari. Why ... I had a good look on both and this one I consider better for my case.

Building the plugin

What did I use and howtmpDC49

I used Visual Studio 2008 RTM (the latest and greatest), also the Facebook.NET library and in addition to that the WPF Samples Library for more friendly user experience.

For building this plugin, I decided to take as a reference Rick Strahl's Extended Amazon book plugin as it was doing similar things to what I wanted to achieve. There are a lot of open source plugins for WLW that you can explore and take advantage of.

As always happens, the first step is to get the ball rolling. Namely, download the code and play with it. This part is always easy! Rick did the hardest parts by doing the plugin and explaining who it works. Then comes the funny part - cutting and chopping it into pieces! Pieces that you need and pieces that you throw away. Finally, comes the hardest part - actually adding the new functionality that is necessary and stitching it all together. The good news is that Nikhil did a hell of a good job on Facebook.NET architecture and APIs, so to a developer, using it is almost as intuitive as having a walk in the park. The bad news is that there are still use cases in which the library returns errors - for example when the user has no albums in Facebook, or no photos in an album. Well nobody is perfect and I'm sure that this minor stuff will be fixed in future releases. For now I worked around those error with a bit more checking and a little work with FacebookRequest - FacebookResponce objects.

Finally, comes the sweet stuff - making the whole thing look and feel better with WPF image listing.

The code for the plugin is simple and where it becomes more complicated I took care to put appropriate comments.

image

Deployment

tmpDC88

Live.com requires a packaged msi installer for any plugin to be published. In the beginning I hesitated whether to publish it to live.com merely because of that requirement. Then I got back to searching the web for any tutorials on WLW plugin setup creation and there it was. Ben Hall wrote a very useful blog post on creating WLW Plugin Setup and I took advantage of it ;).

Yeah ... "My name is Deyan and I like learning from people's experience." And why not ... Should we reinvent the wheel and discover hot water every time ... You're getting what I mean :)

So that was it actually... Following Ben's simple guide I managed to package to all up and submit to Live.com. As by this moment, it is still pending approval ... may be soon it will be part of the huge gallery of WLW plugins.

Publishing

tmpDCC7

While doing this tiny plugin for Windows Live Writer I had to delve deep inside Facebook's APIs and I couldn't stop thinking of all those different possibilities of integration that could be achieved using that platform.

It is a tendency that people start to learn new stuff more from other people's blogs than from some book or article. Yeah, books and articles give you the basics but what you really need is not there. Event look at this post. I'm explaining how I did this plugin and mostly it is by using someone's experience on that matter.

So, back to the subject. Blogging is something that is very hot now and will be here to stay. Definitely a tool like WLW needs plugins to allow better blogging and why not bring them to it. I think there is much more space to extend Facebook and WLW integration and so I decided to publish this tiny bit to CodePlex. This way, everyone who feels capable and willing to contribute to the idea and the plugin set, can do it. In the future I'll try to expand the current plugin functionality and further add more stuff to the set. I see that Nikhil and Facebook will do the same thing, so I guess we are going to have a lot of fun. If you have any ideas or suggestions on the subject, please feel free to contact me or propose them in CodePlex.

Download and try!

If you are eager to see it working there are 2 things you need to have in mind. First and most important - you need to have Windows Live Writer installed - this is the tool that is running the plugin :). Second, as the plugin is using WPF, you need to have .NET Framework 3.0 - those of you with Vista don't worry, it comes as part of the installation. For the others with Windows XP SP2 and above - you need to install it if you don't already have it. For other OS, there is no need to discuss, as the first prerequisite - WLW - will also not work there. Here you can download the msi installer and from here you can download the source code.

Download, install and enjoy folks ... And again, if anyone wants to help in getting this forward, please feel free to contact me.

What' next to come

Currently, the plugin is using Facebook.NET's official release. For starters, I want to keep it that way. I tried to port the thing to the latest fixes that Nikhil did, but found some bits that become very rough. Tried fixing them messing a little bit with Facebook.NET's code .... and it took me much more time, than to do the plugin itself. Probably next week I'll spend some time extending Facebook.NET's support for desktop applications and submit a patch, so that the next release supports better Facebook's functionalities and the Facebook4LiveWriter becomes a better app for everyone.

Currently it allows you only to add photos that you have from Facebook with no formatting of sizing options. Other thing that will be good to add is allowing you to add photos your friends albums. You might have even crazier thoughts on Facebook photos integration ... Give them to me ;)! I hope this will become a full plugin set for live writer that will allow you easily add to your blog posts much more FB stuff.

P.S.: You will probably see that I have attached a file with the extension .bmm to this post. This is the format that our tool - Bookvar saves mind maps that you create. Yes, this post was not totally written in WLW! In fact, very little was done there. Most of the job I did by creating a mind map of it and started filling more notes. So, you can check it out in that "non-linear graphical format". With the next release of the tool, we will be having this kind of Bookvar - WLW integration - export a mind map into a blog post to WLW. Stick around for more info in later posts.

Bookvar Mind Map: Facebook for bloggers.bmm

30 November 2007

ASP.NET 2.0 execution – how does ASP.NET developers life looks like

The Story

A long, long time ago Microsoft Bulgaria asked us (me and my colleague Stefan) to write an article that is for something concerning ASP.NET 2.0. We decided to take the challenge and write an article about ASP.NET 2.0 Execution process. Now, after .NET 3.5 release and just before the new wave of great ASP.NET 3.5 things start to come to the public (MVC, Astoria etc. – read more in the latest post of Scott Guthrie), I thought it is high time to give that “piece of art” to you all.


The thing

It was supposed to be published in some newspaper or magazine here in Bulgaria but we kind of forgot to follow when that happened or whether it happened at all. I guess they published it but even if they didn’t, I’ll do it J. So here you can find the document containing the article. Yes, I know … this is nothing new but for those of you that have just started with ASP.NET and for those of you with less experience in the field I think it will be quite helpful to read it. I can tell you from personal experience that a lot of troubles can be handled much faster and elegant if this kind of knowledge is available to ASP.NET developers. The article goes in great depths and explains a lot of details on the process of application execution – read it, benefit from it! The subject can hardly be explained as detailed as necessary in 11 pages but … You know, we had some limitations – magazines are not endless. One thing I would recommend you checkout is the Page lifecycle diagram that we have created – it is a modification of a well known one that we think can help you in day-to-day tasks.


P.S. If you think there are parts of the article that are unclear, can be improved or extended with more details … Please, feel free to comment or contact me to fill in the gaps.

P.P.S. For all English speaking guys …. Sorry for the Bulgaria text of the article – it was supposed to be for Bulgarian magazine and in future I may translate that to English – the good thing is that all diagrams are in English so you may catch the key concepts.

29 November 2007

Silverlight in action – Part 2

New version of the sample

As I explained in the previous post on the subject, the sample’s code was to be opened and used with Visual Studio 2008 Beta 2. Now one week later I’m happy to inform you that the code can now be opened and used with Visual Studio 2008 RTM. It was seamlessly ported to the latest version as now the “Silverlight 1.1 Tools for Visual Studio 2008 RTM” free download is now available. You can download the latest code for the sample from here.

Silverlight basics

What I came across while explaining Silverlight to students and even more experienced developers, is that some of them did not realize quite how “the magic” works. First and most important thing to understand is that you can have Silverlight application running on your site no matter how that site is built. Whether it is pure html (no server side code), PHP driven, JSP, ASP or any other web platform used to create web sites. To the server that serves Silverlight enabled pages any Silverlight application is just a bunch of files that need to be streamed to the client. Surely, the application can be much more flexible and dynamic by using some server-side interaction but again that depends on specifics on the application. Applications are always executed on the client machine and depend only on whether the client has Silverlight plug-in installed.

Creating Silverlight objects

Created to run inside any HTML page, any Silverlight application need to be included inside a page where we want to use it. For this to happen, we need to do two things – first create the HTML page and create a hosting element for the application(some element that will contain the app in itself) and second, to actually create the application object. For our sample application the page is quite simple :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>

<title>PosterDemo</title>

<script type="text/javascript" src="Default_html.js"></script>

<script type="text/javascript" src="Silverlight.js"></script>

<style type="text/css">

.silverlightHost {

height: 1500px;

width: 1000px;

}

</style>

</head>

<body>

<select id="posters" onchange="Changed()" >

</select>

<div id="SilverlightControlHost" class="silverlightHost">

<script type="text/javascript">

createSilverlight();

</script>

</div>

</body>

</html>

From top to bottom here is what it contains. First there are two JavaScript files included – Default_html.js and Silverligh.js. I’ll explain the first later, the second is given by Silverlight SDK and is obligatory for every Silverlight application. It allows cross-browser plug-in installation detection plus object creation objects and methods. Right after including the JavaScript files, there is some CSS styling added to expand the application host element as much as it’s needed.

The body of the page contains only two elements – one <select> that will hold universities names so that users can select other posters, and the other is the actual host for the application <div id="SilverlightControlHost"… . Inside that host there is a simple JavaScript added that calls a method createSilverlight();

This method is defined in the file I said I’ll show - Default_html.js. It is a custom added js file that holds this code:

function createSilverlight()

{

var controlID = "SilverlightControl";

Silverlight.createObjectEx({

source: "Page.xaml",

parentElement: document.getElementById("SilverlightControlHost"),

id: controlID,

properties: {

width: "100%",

height: "100%",

version: "1.1"

},

events: {}

});

// Give the keyboard focus to the Silverlight control by default

document.body.onload = function()

{

var silverlightControl = document.getElementById(controlID);

if (silverlightControl)

silverlightControl.focus();

}

}

function Changed()

{

var posters = document.getElementById("posters");

var posterName = posters.options[posters.selectedIndex].text

var control = document.getElementById("SilverlightControl");

control.Content.basic.ChangePoster(posterName);

}

As you can see there are two functions here – the first is used to create the application object, the second is called when selection inside universities dropdown is changed. I will focus on the first function as the second I will explain in future posts on the sample. So what does this function do? Here we create a variable that holds the string of application control id value – "SilverlightControl". Then there is a call to a static method of Silverlight class - createObjectEx. Both the class and the method are defined inside Silverlight.js file. This method is used to create the application – “the key to the tent”. Here are passed some parameters. More of them can be passed to customize the application if needed. As an alternative to this method there is another one – createObject. Both do the same thing and the result is the same – the difference is the way parameters are passed. I the method we used – we pass the parameters as JSON object, and so we name each property and assign a value to it – just as in C# 3.0 you can create objects from anonymous class. The second method receives all parameters as usual. You probably will ask - what parameters can you pass to this initializing method. I will not go into more details on this as there is a good article written in Visual Studio Magazine on the subject. Through this parameters you can pass not only property values but also function pointers that will be called on some events, startup parameters that can be used for application data and others.

I want to point out only one parameter – source. It is an obligatory parameter that needs to be passed to initialize the application. This parameters holds the path to XAML file with application’s main interface. As you probably realize, you can put this file anywhere you want in the site, have it automatically generated, streamed from an embedded resource or other way you like.

The final result

So what the hell happens when this “magical” method “createObjectEx” executes?! Well, this method dynamically generates HTML object and includes it inside the page’s DOM. To see what that method creates, you can use a browser plug-in that shows generated source. For IE you can use – IE Developer Toolbar. Here is the source that was generated for the sample application:

<DIV class="silverlightHost" id="SilverlightControlHost">

<OBJECT id="SilverlightControl" type="application/x-silverlight" height="100%" width="100%" data="data:,">

<PARAM value="Page.xaml" name="source" />

<PARAM value="__slLoad0" name="onLoad" />

<PARAM value="__slError0" name="onError" />

</OBJECT>

</DIV>

So what is the end result from calling “createObjectEx” method – it is an HTML object element with specific parameters assigned to it. When the Silverlight browser plug-in is installed such object elements are handled by it and the application is being executed on the client. Probably someone may be tempted to just put the <Object> html with proper parameters than to use Silverlight.js file. Yes you can do it like that but I guarantee you that it probably not run on all supported browsers and if the user does not have Silverlight installed it will fail to load and the user will not know how to have that working (where and how to install Silverlight).

For now I’ll stop here … Expect soon more details on other aspects of this demo application and Silverlight development in general.

P.S.: If you have any questions on the Demo or want just to send me a message you can comment or use Facebook messaging.

28 November 2007

Bookvar alpheta 2 ready for you

Yesterday, we shipped a new release of Bookvar - alpheta 2 as we call it. On the official blog of Bookvar you can find more details about what has changed and what new things are there for you. Probably the key thing here is that it is no more based on Beta technology - as from last week .NET Framework 3.5 is oficially released and Bookvar is now ported to it. You can download it from here.

20 November 2007

Silverlight in action – Part 1

The Road Show

Recently, I participated in this autumn's Microsoft Academic Road-show around Bulgaria's universities. I was talking to the students about Silverlight and sharing my experience from Imagine Cup finals. To be honest I was expecting more people to have interest in the competition. Still I expect more competitors this year as more people now know about it compared to last year.

Lecturing about Silverlight, I realized that a few people in Bulgaria know about it. Gladly to say, now this has been corrected as a few hundred more students know what it is now and what it can do. For each presentation I gave, I was using Bookvar and build a map for the subject. The presentation can be found here in the form of a zip archive. Unzip it and use Bookvar to open the .bmm file.

Demonstrations

As part of the demonstration I used some sample Silverlight applications – Popfly and others from Silverlight.net. Additionally to that, I created a sample Silverlight application to show key features of the technology. It is an application that presents the program for the event in some university. Primarily I thought to make it for a single university but to be more generic I decided to make it customizable. Now data is supplied to the application from a service and thus it can be easily changed.

The PosterDemo App

It consists of two parts - one is a simple web service with only one method - GetPosters() that returns all available posters. This serves as the backend of the application and allows demonstrating the seamless integration with web services. The backend returns a list of objects from type Poster. Here all backend objects serve only to hold and transfer data. For this demo application the objects that are returned are dummy ones – not taken from a database – so that things are simpler. So the Poster class has the following properties:

public string Title { get; set; }
public string UniversityLogo { get; set; }
public DateTime EventDate { get; set; }
public DateTime EventEndTime { get; set; }
public bool IsEnabled { get; set; }
public List<ProgramItem> ProgramItems { get; set; }

Each one of them is self explanatory and I will skip explaining what they are for. The last property is a collection of type ProgramItem. It holds all items (meaning lectures) that are in the particular poster instance. Here are the properties of that class too:

public string Title { get; set; }
public string LecturerDetails { get; set; }
public DateTime StartTime { get; set; }
public string Color { get; set; }
public string LecturerImage { get; set; }
public string LectureDescription { get; set; }

To integrate a silverlight application with a web service is as easy as it is for standard .NET application (web or windows). For the alpha version that is available now the only different thing that you must do is put the ScriptService attribute to the web service so that the data is transferred in JSON instead of SOAP format. Eventually for version 1.1 the SOAP will also be supported for Silverlight. The application looks like this:

On the top of it there is a dropdown which lists all enabled posters for viewing. When you change the dropdown – details on it are changed. Everything on it (except the main image and the text "ПРОГРАМА") is dynamic. Key features that I wanted to show is simple animation creation with Blend as well as other – more "developer friendly" stuff.

One is LINQ support. The service as you saw does filter posters in any way. To filter only the enabled posters I've used a simple LINQ query:

private void FillInPosterNames()
{
var posterNames = from p in posters
where p.IsEnabled == true
select p.Title;
HtmlElement posterElements = HtmlPage.Document.GetElementByID("posters");
foreach (string title in posterNames)
{
HtmlElement option = HtmlPage.Document.CreateElement("option");
option.SetProperty("innerHTML", title);
posterElements.AppendChild(option);
}
}

After filtering, we take the dropdown html DOM element, create an option for each poster title and add it to the dropdown. Here also there is the way you can manipulate Html elements form C# code ;)

For the list of program items I have created a custom control ProgramList and for each item a control ProgramListElement. Each one of them has quite a number of specifics which I will start explaining in other posts.

Download it!

The whole sample can be downloaded from here. To be able to open and start it you will need Silverlight 1.1 Alpha Refresh and Visual Studio 2008 Beta 2 with Silverlight tools for Visual Studio 2008 Beta 2. Unfortunately, yesterday Visual Studio 2008 was officially released without Silverlight Tools for VS 2008. In a couple of weeks the tools are expected so then I'll be able to post an updated version.

What next …

In next few days I'll take care to explain more details on the demo that will uncover tricky parts while working with Silverlight.

15 November 2007

And again the show begins ….

I have delayed this fist post for a long time and now came the time for it. The weeks after I left my previous company were a bit rough… New tasks …. New job to do…. For a long time before leaving the company I was thinking …. What should I be doing if I leave the company…. Should I go to some big company here in Bulgaria or should I aim at a smaller one and keep the cozy feeling working on what I like the way I like it. To be honest none of them were good enough for me and I decided to take the roughest way … I decided to start a company. Together with my Imagine Cup team mates from Team BrainStorm we founded a company that we called AVAXO. It will primarily serve as the company owning all rights over Bookvar and under its hood we will start working on Freelancing projects until Bookvar is fully ready to become commercial product that we can gain money from. Currently you can download and use it for free and if you are passionate on it provide us with any feedback that you have.

This week I and Stefan are traveling with Microsoft's road show all around Bulgaria evangelizing new technologies and the Imagine cup competition as former competitors in Korea. We are talking about Silverlight and WPF technologies. Next week I will post a detailed post on Silverlight with link to the map that I use to present the technology and a complex demo using a large range of Silverlight's capabilities. I will be blogging more frequently now that I'm a boss to myself. More on latest MS technologies and cool samples are coming so keep in touch ;).