<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:georss="http://www.georss.org/georss" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-22141639</atom:id><lastBuildDate>Mon, 09 Nov 2009 09:14:52 +0000</lastBuildDate><title>amazedsaint's .net journal</title><description>Delicious .net &amp;amp; intellectual recipes From Anoop Madhusudanan - C#, VS SDK, WPF, WCF, Design Patterns, neural nets and more</description><link>http://amazedsaint.blogspot.com/</link><managingEditor>noreply@blogger.com (Anoop Madhusudanan)</managingEditor><generator>Blogger</generator><openSearch:totalResults>71</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/amazedsaint/articles" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-8550289664384136878</guid><pubDate>Sun, 08 Nov 2009 16:24:00 +0000</pubDate><atom:updated>2009-11-09T14:44:52.504+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Design And Architecture</category><category domain="http://www.blogger.com/atom/ns#">.NET 4.0</category><category domain="http://www.blogger.com/atom/ns#">CSharp</category><title>MEF or Managed Extensibility Framework – Creating a Zoo and Animals</title><description>&lt;p&gt;MEF or Managed Extensibility Framework is cool. Firstly, it allows you to decouple your components pretty easily. Secondly, it supports various component discovery scenarios, and enables you to write better frameworks. In this post, I’ll cover few basic aspects of MEF. You may also download the source code related to this article (&lt;a href="http://amazedsaint.net/MefZoo.zip"&gt;Download Here&lt;/a&gt;), to have a look at the same as you read along.&lt;img style="margin: 20px 20px 10px 0px; display: inline" align="left" src="http://www.linkdenmark.com/images/clipart/clip_zoo.jpg" width="240" height="203" /&gt;&lt;/p&gt;  &lt;p&gt;MEF classes reside in the assembly System.ComponentModel.Composition.dll – Creating plug-in frameworks is quite easy with MEF. The main application can &lt;em&gt;Import&lt;/em&gt; plug-ins, marked with an &lt;em&gt;Export&lt;/em&gt; attribute. &lt;/p&gt;  &lt;p&gt;MEF terminology is pretty simple. To start with, you can &lt;em&gt;Export&lt;/em&gt; and &lt;em&gt;Import&lt;/em&gt; your &lt;em&gt;Parts&lt;/em&gt;. A &lt;em&gt;Part&lt;/em&gt; is anything you export or import - be it a class, method, or property. Any such composable &lt;em&gt;Part&lt;/em&gt; should be attributed with either the &lt;em&gt;Export&lt;/em&gt; or &lt;em&gt;Import&lt;/em&gt; attributes (You can find those attributes in System.ComponentModel.Composition namespace). For simple scenarios, you may use the &lt;em&gt;Export&lt;/em&gt; attribute along with a &lt;em&gt;Contract&lt;/em&gt; to mark your part as exportable. &lt;/p&gt;  &lt;p&gt;Also, you may use the &lt;em&gt;Import&lt;/em&gt; attribute to specify where you want to import the available exported parts. MEF will do the back ground work of dynamically discovering information about parts, to resolve and import them where ever you specify, based on the &lt;em&gt;Contracts&lt;/em&gt;. This step is called &lt;em&gt;Composing&lt;/em&gt; the Parts. MEF discovers information about these parts from various sources, i.e &lt;em&gt;Catalogs, &lt;/em&gt;or you may add them directly to the container. For example - you may use an assembly catalog to point MEF to a specific assembly to grab the exported parts from there, a directory&amp;#160; catalog to point to a set of assemblies in a folder etc. &lt;/p&gt;  &lt;p&gt;To make things straight, let us create a simple Zoo example with MEF, and we’ll cover MEF terminologies on the go.&lt;/p&gt;  &lt;h3&gt;Visiting the MEF Zoo&lt;/h3&gt;  &lt;p&gt;Alright, so to start with, assume that you are creating a Zoo application, where Animals can be ‘plugged-in’. I.e, if you are creating a new Animal, you don’t really need to rebuild your zoo. Needless to say – that means, your Animals will be loosely coupled with your Zoo. &lt;/p&gt;  &lt;p&gt;We have the following projects in our MefZoo solution.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;MefZoo.Lib – A simple library for keeping our contracts, to identify parts while exporting and importing them. &lt;/li&gt;    &lt;li&gt;MefZoo.Animals – A couple of concrete animals for our Zoo. &lt;/li&gt;    &lt;li&gt;MefZoo – Here is where most of the work happens – like grabbing parts from Catalogs, composing them etc. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/__Mw4iY-4nuY/Svcfp4CjInI/AAAAAAAAAbA/y1IvkfZDp3g/s1600-h/image%5B19%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" align="right" src="http://lh4.ggpht.com/__Mw4iY-4nuY/SvcfqhmuGqI/AAAAAAAAAbE/rxVmHqJVT1o/image_thumb%5B13%5D.png?imgmax=800" width="195" height="257" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In our MefZoo.Lib project, we’ve a simple IAnimal class. If any one need to create an Animal for your Zoo, IAnimal is the interface or contract they should use, to create their concrete Animal.&lt;/p&gt;  &lt;p&gt;The IAnimal interface is pretty simple.&lt;/p&gt;  &lt;pre class="c#" name="code"&gt;public interface IAnimal
    {
        string Name { get; }
    }&lt;/pre&gt;

&lt;p&gt;In MefZoo.Animals project, we have a reference to MefZoo.Lib. There we’ve a couple of ‘concrete’ animals. For now, let us have a Lion and Rabbit in our Zoo. If you are curios, here is the Lion and Rabit classes.&lt;/p&gt;

&lt;pre class="c#" name="code"&gt;  
[Export(typeof(IAnimal))]
    public class Lion : IAnimal
    {
     public string Name
        {
            get { return &amp;quot;Lion1&amp;quot;; }
        }
    }

[Export(typeof(IAnimal))]
 public class Rabbit : IAnimal
    {
     public string Name
        {
            get { return &amp;quot;Rabbit1&amp;quot;; }
        }
    }&lt;/pre&gt;

&lt;p&gt;If you’ve observed, we are using the &lt;em&gt;Export&lt;/em&gt; attribute to ‘export’ our animals, so that they can be ‘imported’ to our Zoo later. Time to visit our MefZoo project. We have a simple Zoo class there – and as you'd expect we’ve a collection of Animals there.&lt;/p&gt;

&lt;pre class="c#" name="code"&gt;public class Zoo
    {
        [Import(typeof(IAnimal))]
        public IEnumerable&amp;lt;IAnimal&amp;gt; Animals { get; set; }
    }&lt;/pre&gt;

&lt;p&gt;And before we actually discuss about loading animals to the Zoo, you might want to note that we have the build path of MefZoo as ..\bin and that of MefZoo.Lib as ..\bin\Extensions. Essentially, you need to make sure MefZoo.Lib.dll will be under the Extensions folder in MefZoo.exe's path &lt;/p&gt;

&lt;p&gt;Alright, now it’s time for the main action. Here is the Main method in Program.cs.&lt;/p&gt;
The Main method simply creates the Zoo object, and pass the same to LoadAnimals. 

&lt;pre class="c#" name="code"&gt; static void Main(string[] args)
        {
            Zoo z=new Zoo();
            LoadAnimals(z);
           foreach (var animal in z.Animals)
                Console.WriteLine(animal.Name);
            Console.ReadLine();
        }&lt;/pre&gt;

&lt;p&gt;As explained earlier, to compose all these parts together, we need to&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Specify the catalogs from where these parts are coming.&amp;#160; If you have a look at the below code, you’ll find that we are pointing MEF to all libraries under the Extension folder of the main application, and also to the current assembly, for discovering the parts (Remember, anything that is marked with either &lt;em&gt;Export&lt;/em&gt; or &lt;em&gt;Import&lt;/em&gt; is a Composable &lt;em&gt;Part&lt;/em&gt;). &lt;/li&gt;

  &lt;li&gt;Create a container, and compose the parts &lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="c#" name="code"&gt;    static void LoadAnimals(Zoo zoo)
        {            
            try
            {
                //A catalog that can aggregate other catalogs
                var aggrCatalog = new AggregateCatalog();
                //A directory catalog, to load parts from dlls in the Extensions folder
                var dirCatalog = new DirectoryCatalog(Path.GetDirectoryName
                    (Assembly.GetExecutingAssembly().Location) + &amp;quot;\\Extensions&amp;quot;, &amp;quot;*.dll&amp;quot;);
                //An assembly catalog to load information about part from this assembly
                var asmCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());

                aggrCatalog.Catalogs.Add(dirCatalog);
                aggrCatalog.Catalogs.Add(asmCatalog);

                //Create a container
                var container = new CompositionContainer(aggrCatalog);

                //Composing the parts
                container.ComposeParts(zoo);

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }            
        }&lt;/pre&gt;
At this point, if you run the application, you'll find the following output. 

&lt;pre&gt;Lion1
Rabbit1&lt;/pre&gt;

&lt;h2&gt;Feeding your MEF Animals&lt;/h2&gt;

&lt;p&gt;Now you have the Zoo, obviously the next problem is feeding your animals. For this, we’ll need our animals to make some grumble sound (a call back), to call the attention of zoo keepers. (If you are tired with story telling, this section will show you how to inject a call back mechanism to the loaded Animals). First of all, let us define a GiveFood method in our Zoo class. It is self explanatory. Only thing you might notice is, we are exporting GiveFood method as a part. How ever, we are using &amp;quot;AnimalFood&amp;quot; as the contract name, instead of a type. This is allowed, and valid in MEF – You can either use a string or a type, or both together, as a contract.&lt;/p&gt;

&lt;pre class="c#" name="code"&gt;public class Zoo
    {
        [Import(typeof(IAnimal))]
        public IEnumerable&amp;lt;IAnimal&amp;gt; Animals { get; set; }

        [Export(&amp;quot;AnimalFood&amp;quot;)]
        public string GiveFood(string animalType)
        {
            switch (animalType.ToLower())
            {
                case &amp;quot;herbivores&amp;quot;:
                    return &amp;quot;GreenGrass&amp;quot;;
                case &amp;quot;carnivores&amp;quot;:
                    return &amp;quot;Readmeat&amp;quot;;
                default:
                    return &amp;quot;Waste&amp;quot;;
            }
        }

    }&lt;/pre&gt;
Now, we have the facility in our Zoo to give food to Animals. To enable our Animals to consume food, let us extend our IAnimal class a bit. Here is the new IAnimal class - We just added a delegate property, synonymous to the GiveFood method, so that MEF can hook up the GiveFood method later, when importing the exported GiveFood.&amp;#160; &lt;pre class="c#" name="code"&gt;public interface IAnimal
    {
        string Name { get; }
        Func&amp;lt;string ,string&amp;gt; GiveMeFood { get; set; }
    }&lt;/pre&gt;

&lt;p&gt;And well, let us re-wire the Lion class a bit, so that the Lion can periodically call back the zoo keeper to request some food.&lt;/p&gt;

&lt;pre class="c#" name="code"&gt; [Export(typeof(IAnimal))]
    public class Lion : IAnimal
    {
        Timer t;

        //MEF will inject the call back here
        [Import(&amp;quot;AnimalFood&amp;quot;)]
        public Func&amp;lt;string , string&amp;gt; GiveMeFood { get; set; }

        public string Name
        {
            get { return &amp;quot;Lion1&amp;quot;; }
        }

        //Let us use a timer to get food and eat it regularly
        public Lion()
        {
            t = new Timer(1000);
            t.Elapsed += (sender, args) =&amp;gt;
            {
                string food = GiveMeFood(&amp;quot;carnivores&amp;quot;);
                Console.WriteLine(&amp;quot;Lion eating &amp;quot; + food);
            };
            t.Start();
        }       
    }&lt;/pre&gt;
Nothing fancy there, we just have a timer there to make the Lion hungry. And let me do the same modifications for rabbit as well. Run the application, and you'll see Rabbit and Lion eating their food (The timer interval for rabbit is lesser than the lion). 

&lt;p&gt;&lt;a href="http://lh3.ggpht.com/__Mw4iY-4nuY/SvcfreImDgI/AAAAAAAAAbI/f87v4S1gP-I/s1600-h/image%5B24%5D.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://lh5.ggpht.com/__Mw4iY-4nuY/SvcfsV1ISnI/AAAAAAAAAbM/8hvG4OIn5EA/image_thumb%5B16%5D.png?imgmax=800" width="501" height="262" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Also, I just want to point that we havn’t made any modifications to the part composition code, for exporting a call back method for our Animals. One interesting aspect here is, the Zoo can decide what food to supply for each animal (probably based on available stock). And this is an example of how you can use MEF to achieve decoupling even in fine-grained systems.&lt;/p&gt;

&lt;p&gt;You may also need to visit the official MEF site, &lt;a href="http://www.codeplex.com/MEF"&gt;http://www.codeplex.com/MEF&lt;/a&gt;&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;div class="shoutIt"&gt;&lt;a rev="vote-for" href="http://dotnetshoutout.com/Submit?url=http%3a%2f%2famazedsaint.blogspot.com%2f2009%2f11%2fmef-or-managed-extension-framework.html&amp;amp;title=MEF+or+Managed+Extensibility+Framework+%e2%80%93+Creating+a+Zoo+and+Animals"&gt;&lt;img alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http://amazedsaint.blogspot.com/2009/11/mef-or-managed-extension-framework.html" style="border:0px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-8550289664384136878?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9trK1eCTrAGYtReoeX3IUmxrsMo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9trK1eCTrAGYtReoeX3IUmxrsMo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9trK1eCTrAGYtReoeX3IUmxrsMo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9trK1eCTrAGYtReoeX3IUmxrsMo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=V8txSijyW6k:UlvF2FjQ6Vo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=V8txSijyW6k:UlvF2FjQ6Vo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=V8txSijyW6k:UlvF2FjQ6Vo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=V8txSijyW6k:UlvF2FjQ6Vo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=V8txSijyW6k:UlvF2FjQ6Vo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=V8txSijyW6k:UlvF2FjQ6Vo:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=V8txSijyW6k:UlvF2FjQ6Vo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=V8txSijyW6k:UlvF2FjQ6Vo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=V8txSijyW6k:UlvF2FjQ6Vo:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/V8txSijyW6k" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/V8txSijyW6k/mef-or-managed-extension-framework.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><feedburner:origLink>http://amazedsaint.blogspot.com/2009/11/mef-or-managed-extension-framework.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-4318276556493011287</guid><pubDate>Mon, 02 Nov 2009 19:58:00 +0000</pubDate><atom:updated>2009-11-07T12:46:24.657+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Weekend Hacks</category><category domain="http://www.blogger.com/atom/ns#">CSharp</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>Silverdraw: A collaboration board using SIlverlight + WCF - Source Code &amp; Intro Article</title><description>In my previous post, &lt;a href="http://amazedsaint.blogspot.com/2009/11/silverlight-wcf-duplex-services.html"&gt;I introduced Silverdraw&lt;/a&gt;, something that came out of my &lt;a href="http://amazedsaint.blogspot.com/search/label/Weekend%20Hacks"&gt;weekend hacks&lt;/a&gt;. Today I managed to push the source code of the same to Codeplex, and finished writing an article about the same in Codeproject&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.codeproject.com/KB/silverlight/silverdraw/paintgadget.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="380" src="http://www.codeproject.com/KB/silverlight/silverdraw/paintgadget.PNG" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="color: #30332d;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="color: #30332d;"&gt;&lt;span style="font-family: inherit;"&gt;Silverdraw is realtime white board that can sync information between various participants, using Silverlight + WCF Polling Duplex.&amp;nbsp;Presently this is a just a POC implementation.&amp;nbsp;Users can draw together in the white board, and may chat each other. Here is a quick screen shot of the client running in two different browsers.&amp;nbsp;These are the steps to start.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="color: #30332d;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="color: #30332d;"&gt;&lt;span style="color: black; font-weight: bold;"&gt;&lt;span style="font-family: inherit;"&gt;How to start&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="color: #30332d;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #30332d;"&gt;1 - Read this intro post in my blog&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #30332d;"&gt;&lt;a class="externalLink" href="http://amazedsaint.blogspot.com/2009/11/silverlight-wcf-duplex-services.html" style="color: #3e62a6; text-decoration: underline;"&gt;&lt;span style="font-family: inherit;"&gt;http://amazedsaint.blogspot.com/2009/11/silverlight-wcf-duplex-services.html&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #30332d;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #30332d;"&gt;2- Take a live demo here - it may or may not work, the server is a bit leaky&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #30332d;"&gt;&lt;a class="externalLink" href="http://silverdraw.com/" style="color: #3e62a6; text-decoration: underline;"&gt;&lt;span style="font-family: inherit;"&gt;http://silverdraw.com&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #30332d;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #30332d;"&gt;3 - Read this codeproject article to help you understand the source&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #30332d;"&gt;&lt;a class="externalLink" href="http://www.codeproject.com/KB/silverlight/silverdraw.aspx" style="color: #3e62a6; text-decoration: underline;"&gt;&lt;span style="font-family: inherit;"&gt;http://www.codeproject.com/KB/silverlight/silverdraw.aspx&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #30332d;"&gt;&lt;br /&gt;&lt;/span&gt;4 - Get the source - Click downloads link in Codeplex to grab the source&lt;br /&gt;
&lt;a href="http://silverdraw.codeplex.com/"&gt;http://silverdraw.codeplex.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy, happy coding!!

&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-4318276556493011287?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1EWM1GxAz2UZpppwdwu0J6PdLJA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1EWM1GxAz2UZpppwdwu0J6PdLJA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1EWM1GxAz2UZpppwdwu0J6PdLJA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1EWM1GxAz2UZpppwdwu0J6PdLJA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=en3kwYgiM8w:PBFKCuj7Ydk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=en3kwYgiM8w:PBFKCuj7Ydk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=en3kwYgiM8w:PBFKCuj7Ydk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=en3kwYgiM8w:PBFKCuj7Ydk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=en3kwYgiM8w:PBFKCuj7Ydk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=en3kwYgiM8w:PBFKCuj7Ydk:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=en3kwYgiM8w:PBFKCuj7Ydk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=en3kwYgiM8w:PBFKCuj7Ydk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=en3kwYgiM8w:PBFKCuj7Ydk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/en3kwYgiM8w" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/en3kwYgiM8w/silverdraw-collaboration-board-using-sl.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><feedburner:origLink>http://amazedsaint.blogspot.com/2009/11/silverdraw-collaboration-board-using-sl.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-3146905228797037621</guid><pubDate>Sat, 31 Oct 2009 19:37:00 +0000</pubDate><atom:updated>2009-11-07T12:37:56.275+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">CSharp</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">WCF</category><title>Silverlight + WCF Polling Duplex Services = Awesomeness</title><description>Silver light&amp;nbsp;+ WCF Polling Duplex services enables you to write&amp;nbsp;Silver light&amp;nbsp;apps that can share information almost real time between users, &lt;i&gt;over HTTP&lt;/i&gt;. Last weekend I started experimenting with &lt;a href="http://tomasz.janczuk.org/2009/07/pubsub-sample-using-http-polling-duplex.html"&gt;Tomasz's pubsub sample&lt;/a&gt;&amp;nbsp;- And again, this weekend, I ended up coding for the past 12-16 hours, and packaged together a not so bad Real time White board - Silver Draw - &amp;nbsp;where users can chat and even draw some primitive drawing.&lt;br /&gt;
&lt;br /&gt;
If you are interested, here is the same. If my wife permits me to spend a couple of hours in front of my box this sunday, I'll do some quick&amp;nbsp;refactoring to clean up the code a bit more- and may publish the source with another detailed article. In this Video, you may see I'm logging in from two different browsers, to do some dirty drawing that gets pumped to the other user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;object height="480" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/YLSQO4R6cts&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;border=1"&gt;

&lt;/param&gt;
&lt;param name="allowFullScreen" value="true"&gt;

&lt;/param&gt;
&lt;param name="allowscriptaccess" value="always"&gt;

&lt;/param&gt;
&lt;embed src="http://www.youtube.com/v/YLSQO4R6cts&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="480"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
I think recently there is lot of excitement about Google Wave, mainly because of it's ability to share information between various users real time,&amp;nbsp;&lt;i&gt;over HTTP&lt;/i&gt;. Real time information sharing is not new - but note that point - " over HTTP" - which makes it accessible to a wider audience.&lt;br /&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
(Some time back, to understand how Wave works, I even made a small Wave Robot based on Jon Skeet's API -&amp;nbsp;&lt;a href="http://amazedsaint.blogspot.com/2009/09/bingybot-google-wave-bot-written-in.html"&gt;Read about the same here if you missed it&lt;/a&gt;.)&lt;br /&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
Long point made short - If you are in MS camp, and if you are looking forward to develop RIA apps that can seamlessly share information between users real time, you may have a look at Silverlight + WCF Polling Duplex. I still need to explore scaling and performance related aspects&lt;br /&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-3146905228797037621?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uja_5twFhg1SXCJ2cLLRlMCzH0U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uja_5twFhg1SXCJ2cLLRlMCzH0U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uja_5twFhg1SXCJ2cLLRlMCzH0U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uja_5twFhg1SXCJ2cLLRlMCzH0U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=bsmB-cDaiH8:m5ro05-AKOg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=bsmB-cDaiH8:m5ro05-AKOg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=bsmB-cDaiH8:m5ro05-AKOg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=bsmB-cDaiH8:m5ro05-AKOg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=bsmB-cDaiH8:m5ro05-AKOg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=bsmB-cDaiH8:m5ro05-AKOg:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=bsmB-cDaiH8:m5ro05-AKOg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=bsmB-cDaiH8:m5ro05-AKOg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=bsmB-cDaiH8:m5ro05-AKOg:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/bsmB-cDaiH8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/bsmB-cDaiH8/silverlight-wcf-duplex-services.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><feedburner:origLink>http://amazedsaint.blogspot.com/2009/11/silverlight-wcf-duplex-services.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-7962004572557584687</guid><pubDate>Sat, 31 Oct 2009 05:40:00 +0000</pubDate><atom:updated>2009-11-07T12:37:56.276+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Software Development</category><category domain="http://www.blogger.com/atom/ns#">CSharp</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>JSON Serialization and De-serialization In Silverlight - Few Handy Extension Methods</title><description>This post will give an introduction to JSON, and also I'll share a couple of handy C# extension methods to handle serialization and de-serialization of JSON (Java Script Object Notation) Data. from your Silverlight apps&lt;br /&gt;
&lt;br /&gt;
To know more about JSON format, check out the&lt;a href="http://www.json.org/"&gt; http://www.json.org&lt;/a&gt; - To quote,&lt;br /&gt;
&lt;blockquote&gt;
JSON&amp;nbsp;(JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate.&amp;nbsp;These properties make JSON an ideal data-interchange language.&lt;br /&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;h3&gt;Understanding JSON&lt;/h3&gt;
&lt;br /&gt;
In JSON, any object can be serialized to&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;A collection of name/value pairs. (For eg, from C# point of view, a simple example is Dictionary&lt;string,string&gt;)&lt;/string,string&gt;&lt;/li&gt;
&lt;li&gt;An ordered list of values. (An array or a list)&lt;/li&gt;
&lt;/ul&gt;
JSON is used widely by various web apps, and is ideal for light weight data transfer over &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST&lt;/a&gt;&amp;nbsp;protocol. For example, Twitter. The following URL gives you the current twitter trends as a JSON string.&lt;br /&gt;
&lt;br /&gt;
URL:&amp;nbsp;&lt;a href="http://search.twitter.com/trends/current.json"&gt;http://search.twitter.com/trends/current.json&lt;/a&gt;&amp;nbsp;-&amp;nbsp;You may get something like this as reply (I've shortened it a bit :)).&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;{ "as_of" : 1256965326,
  "trends" : { "2009-10-31 05:02:06" : 
         [ 
          { "name" : "Happy Halloween",
            "query" : "\"Happy Halloween\" OR #Halloween"
          },
          { "name" : "#foofighterslive",
            "query" : "#foofighterslive"
          },
          { "name" : "#Backnthedaycartoon",
            "query" : "#Backnthedaycartoon"
          },
          { "name" : "Follow Friday",
            "query" : "\"Follow Friday\""
          }
        ] }
}
&lt;/pre&gt;
&lt;br /&gt;
And for your information, here is a quick&amp;nbsp;&lt;a href="http://jsonformat.com/"&gt;Online Json Formatter&lt;/a&gt;&amp;nbsp;to format your JSON data a bit so that it'll look pretty&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;JSON In Silverlight&lt;/h3&gt;
&lt;br /&gt;
JSON serialization support is provided in Silverlight for long time. Let us have a close look at how an object gets serialized to JSON.&amp;nbsp;Consider a simple Human class.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt; public class Human
    {
        public List&lt;human&gt; Children { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
&lt;/pre&gt;
&lt;br /&gt;
Let us create a simple Human object and try serializing the same.&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;  var human = new Human() { Name = "Joe", Age = 10 };
&lt;/pre&gt;
&lt;br /&gt;
If you serialize the human object using JSON serializer, you'll get something like
&lt;br /&gt;
&lt;pre&gt;{"Age":10,"Children":null,"Name":"Joe"}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
You may find that each property/value is represented using a Key Value pair. Now, Let us try with an object graph.&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;  var human = new Human() 
                { 
                    Name = "Joe", Age = 30 ,
                    Children = new List&amp;lt;Human&amp;gt; 
                    {
                        new Human() {Name="Jim", Age=3},
                        new Human() {Name="July", Age=2}
                    }
                };
&lt;/pre&gt;
And here is the result if you serialize the human object now. Note how the elements in Children collection of human object is serialized and represented in JSON.

&lt;br /&gt;
&lt;pre name="code"&gt;{ "Age" : 30,
  "Children" : [ { "Age" : 3,
        "Children" : null,
        "Name" : "Jim"
      },
      { "Age" : 2,
        "Children" : null,
        "Name" : "July"
      }
    ],
  "Name" : "Joe"
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;h3&gt;Serialization and De-Serialization In Silverlight&lt;/h3&gt;
&lt;br /&gt;

Now, let us get back to the initial point, how to serialize and deserialize objects to/from JSON in Silverlight? You may use these extension methods I've put together. They are pretty straight forward. The first method adds an extension method to strings for deserializing them, and the second one adds an extension methods to objects for serializing them.

&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;using System;
using System.Runtime.Serialization.Json;
using System.IO;
using System.Text;


namespace JSONHelper
{

    public static class JsonSerializerHelper
    {
        /// &amp;lt;summary&amp;gt;
        /// Adds an extension method to a string
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;typeparam name="TObj"&amp;gt;The expected type of Object&amp;lt;/typeparam&amp;gt;
        /// &amp;lt;param name="json"&amp;gt;Json string data&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;The deserialized object graph&amp;lt;/returns&amp;gt;
        public static TObj JsonDeserialize&amp;lt;TObj&amp;gt;(this string json)
        {
            using (MemoryStream mstream = new MemoryStream(Encoding.Unicode.GetBytes(json)))
            {
                DataContractJsonSerializer serializer = 
                         new DataContractJsonSerializer(typeof(TObj));

                return (TObj)serializer.ReadObject(mstream);
            }
        }

        /// &amp;lt;summary&amp;gt;
        /// Serialize the object to Json string
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name="obj"&amp;gt;Object to serialize&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;Serialized string&amp;lt;/returns&amp;gt;
        public static string JsonSerialize(this object obj)
        {
            using (MemoryStream mstream = new MemoryStream())
            {
                DataContractJsonSerializer serializer =
                        new DataContractJsonSerializer(obj.GetType());
                serializer.WriteObject(mstream, obj);
                mstream.Position = 0;

                using (StreamReader reader = new StreamReader(mstream))
                {
                    return reader.ReadToEnd();
                }
            }
        }
    }
}

&lt;/pre&gt;
&lt;br /&gt;
You may import JSONHelper namespace to use these extension methods, like this. 

Caution: Please make sure that you've valid JSON string or a serializable object when you use these methods&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;var human = new Human() 
{ 
    Name = "Joe", Age = 30 ,
    Children = new List&lt;human&gt; 
    {
        new Human() {Name="Jim", Age=3},
        new Human() {Name="July", Age=2}
    }
};

//Serialize the object.
var hstr = human.JsonSerialize();

//Create a cloned object by deserializing the same
var cloned = hstr.JsonDeserialize&amp;lt;Human&amp;gt;();
&lt;/pre&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-7962004572557584687?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/voinsLhFPGvaDA8ZJCjQ0GtS3CU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/voinsLhFPGvaDA8ZJCjQ0GtS3CU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/voinsLhFPGvaDA8ZJCjQ0GtS3CU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/voinsLhFPGvaDA8ZJCjQ0GtS3CU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=s43K_89noTk:ZAV2y0qjTV8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=s43K_89noTk:ZAV2y0qjTV8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=s43K_89noTk:ZAV2y0qjTV8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=s43K_89noTk:ZAV2y0qjTV8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=s43K_89noTk:ZAV2y0qjTV8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=s43K_89noTk:ZAV2y0qjTV8:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=s43K_89noTk:ZAV2y0qjTV8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=s43K_89noTk:ZAV2y0qjTV8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=s43K_89noTk:ZAV2y0qjTV8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/s43K_89noTk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/s43K_89noTk/json-serialization-and-de-serialization.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><feedburner:origLink>http://amazedsaint.blogspot.com/2009/10/json-serialization-and-de-serialization.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-8273772780626555364</guid><pubDate>Sun, 11 Oct 2009 17:41:00 +0000</pubDate><atom:updated>2009-11-07T12:37:56.276+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Back To Basics</category><category domain="http://www.blogger.com/atom/ns#">CSharp</category><title>Back To Basics - Anonymous Types In C# 3.0</title><description>&lt;div align="left"&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" height="93" src="http://t1.gstatic.com/images?q=tbn:z9ypytoY8udP6M:http://www.cksinfo.com/clipart/toys/abc-blocks.png" width="96" /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div align="left"&gt;
&lt;i&gt;About &lt;/i&gt;&lt;a href="http://amazedsaint.blogspot.com/search/label/Back%20To%20Basics"&gt;&lt;b&gt;&lt;i&gt;Back To Basics&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;&lt;i&gt; - It's often good to look back and fill any gaps we might be having, in certain aspects of the language or framework we use. I'll be examining and blogging about some well known features of C# and .NET, in &lt;/i&gt;&lt;b&gt;&lt;i&gt;Back To Basics series&lt;/i&gt;&lt;/b&gt;&lt;i&gt; - Probably in a bit more detail.&lt;/i&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This post is about the Anonymous types in C#, and the object initializer syntax.&lt;br /&gt;
&lt;br /&gt;
It is well known that starting from C# 3.0, you can initialize an object like this.&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;var boy = new { Name = "Jim", Age = 2 };
&lt;/pre&gt;
You specify the properties of an object, and at compile time, the compiler will create a new (anonymous) type, with the properties you specify, and with a constructor that can take the same number of arguments. &lt;br /&gt;
&lt;br /&gt;
Now, let us examine our anonymous type in detail by using reflection. We'll examine whether the type is a class, along with the type's name. If you run this, &lt;br /&gt;
&lt;pre class="c#" name="code"&gt;static void Main(string[] args)
        {

            var boy = new { Name = "Jim", Age = 2 };

            Console.WriteLine("Name=" + boy.GetType().Name);
            Console.WriteLine("BaseType=" + boy.GetType().BaseType.Name);
            Console.WriteLine("Asm=" + boy.GetType().Assembly.FullName);
            Console.WriteLine("IsClass=" + boy.GetType().IsClass);
        }
&lt;/pre&gt;
&lt;br /&gt;
You'll get some output like &lt;br /&gt;
&lt;pre&gt;Name=&amp;lt;&amp;gt;f__AnonymousType0`2
BaseType=Object
Asm=AnonymousTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
IsClass=True
&lt;/pre&gt;
&lt;br /&gt;
Needless to say, the Name will be a random name, and the Assembly's name depends on your own project name. The key point is, we just established that the type is there in the assembly - which means, as I mentioned, the compiler created a type at compile time itself. You can have a look at the IL if you are interested.&lt;br /&gt;
&lt;br /&gt;
Now, let us examine the observation that the anonymous type has a constructor that takes the same number of arguments as that of properties (i.e, in this case, the number of constructor arguments will be equal to the number of properties we specified in the object initializer, of types string and int). We can do that easily by creating a new instance of the anonymous type we have, using reflection. Add this to the tail end of the last piece of code.&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;//These two calls will fail with a run time exception, Just keep them commented
//var newboy = Activator.CreateInstance(boy.GetType(), null);
//var newboy = Activator.CreateInstance(boy.GetType(), new object[] { "Joe"});

//Only this will work. Creating a new boy
var newboy=Activator.CreateInstance(boy.GetType(),new object[]{"Joe",2});

//Just write back the name of new boy
Console.WriteLine(newboy.GetType().GetProperty("Name").GetValue(newobj, null));

&lt;/pre&gt;
&lt;br /&gt;
You can see that only the last call will work, as we need to pass the same number of arguments while instantiating.&lt;br /&gt;
&lt;br /&gt;
Note that you can have arrays of anonymous types as well, like this. &lt;br /&gt;
&lt;pre class="c#" name="code"&gt;   var guys = new[]
            {
                    new {Name="Joe", Age=10},
                    new {Name="James", Age=22},
                    new {Name="Jim", Age=23},
                    new {Name="Jerard", Age=10},
            };
&lt;/pre&gt;
&lt;br /&gt;
Further more, I just want to mention one more point. You may not need to assign the property explicitly, when you use the object initializer syntax. Consider this code. &lt;br /&gt;
&lt;pre class="c#" name="code"&gt;            var guy1 = new { Name = "Ken", Age = 30 };
            var guy2 = new { guy1.Name, Age = 30 };

            Console.WriteLine(guy1.GetType().Name + " - " + guy1.Name);
            Console.WriteLine(guy2.GetType().Name + " - " + guy2.Name);
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
The key point to note here is, for guy 2, we are not explicitly specifying the Name property. Instead, we are just specifying that the name of Guy2 is same as Guy1. The compiler will assume the property name from the given parameter's name (in fact, the last part of the specified parameter, in this case 'Name') - This is called &lt;i&gt;Projection&lt;/i&gt;. Obviously, you'll find that both guy1 and guy2 are of the same type as well.&lt;br /&gt;
&lt;br /&gt;
Can you guess the output of this code as well? &lt;br /&gt;
&lt;pre class="c#" name="code"&gt;            string Name = "Guy2";

            var guy1 = new { Name = "Ken", Age = 30 };
            var guy2 = new { Name, Age = 30 };

            Console.WriteLine(guy1.GetType().Name + " - " + guy1.Name);
            Console.WriteLine(guy2.GetType().Name + " - " + guy2.Name);
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Why anonymous types are interesting? Because we use them in various ways, especially while using LINQ syntax. Here is a basic example &lt;br /&gt;
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;  var oldGuys = from guy in guys
                            where guy.Age &amp;gt; 20
                            select new { guy.Name };

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Here, you'll probably find that we are using projection in the select new block. And as the last pointer, just debug and observe the type of &lt;i&gt;oldGuys&lt;/i&gt;, and have a look at the base's type. I'll cover more on LINQ and Expression trees later. &lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-8273772780626555364?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/slqEilZQKyDNwcC3k-qvF9VQS7g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/slqEilZQKyDNwcC3k-qvF9VQS7g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/slqEilZQKyDNwcC3k-qvF9VQS7g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/slqEilZQKyDNwcC3k-qvF9VQS7g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=OfIioCKiDVk:obfoOzRREwg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=OfIioCKiDVk:obfoOzRREwg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=OfIioCKiDVk:obfoOzRREwg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=OfIioCKiDVk:obfoOzRREwg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=OfIioCKiDVk:obfoOzRREwg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=OfIioCKiDVk:obfoOzRREwg:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=OfIioCKiDVk:obfoOzRREwg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=OfIioCKiDVk:obfoOzRREwg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=OfIioCKiDVk:obfoOzRREwg:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/OfIioCKiDVk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/OfIioCKiDVk/back-to-basics-anonymous-types-in-c-30.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><feedburner:origLink>http://amazedsaint.blogspot.com/2009/10/back-to-basics-anonymous-types-in-c-30.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-1935705135547540095</guid><pubDate>Sat, 10 Oct 2009 08:38:00 +0000</pubDate><atom:updated>2009-10-10T14:23:30.271+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Weekend Hacks</category><title>Weekend Hacks - Surface SDK, Silverlight, Math and Data Visualizations</title><description>&lt;br /&gt;
&lt;div style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;
&lt;img border="0" height="96" src="http://img.tfd.com/wn/4F/C0C47-examine.gif" width="83" /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 16px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;About &lt;/span&gt;&lt;/span&gt;&lt;a href="http://amazedsaint.blogspot.com/search/label/Weekend%20Hacks"&gt;&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Week End Hacks&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; - Most weekends I do some digging around new and emerging technology and geek stuff. I do this by picking the links I bookmarked, or by going through the tweets I&amp;nbsp;Favorited&amp;nbsp;in Twitter.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;For this Weekend, mostly these are the links I'll be going through.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol class="statuses" id="timeline" style="list-style-image: initial; list-style-position: initial; list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;li class="hentry u-amazedsaint mine status" id="status_4688054191" style="border-bottom-color: rgb(210, 218, 218); border-bottom-style: dashed; border-bottom-width: 1px; border-top-color: rgb(210, 218, 218); border-top-style: dashed; border-top-width: 1px; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.6em; padding-left: 0px; padding-right: 0px; padding-top: 0.7em; position: relative;"&gt;&lt;span style="display: block; height: 50px; left: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 10px; margin-top: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; width: 50px;"&gt;&lt;a class="tweet-url profile-pic url" href="http://twitter.com/amazedsaint" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;img alt="Anoop Madhusudanan" class="photo fn" height="48" src="http://a3.twimg.com/profile_images/429227369/meclose_normal.png" style="border-bottom-color: transparent; border-bottom-width: 0px; border-left-color: transparent; border-left-width: 0px; border-right-color: transparent; border-right-width: 0px; border-top-color: transparent; border-top-width: 0px; height: 48px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 48px;" width="48" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="display: block; margin-bottom: 0px; margin-left: 56px; margin-right: 0px; margin-top: 0px; min-height: 50px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 425px;"&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="tweet-url screen-name" href="http://twitter.com/amazedsaint" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="Anoop Madhusudanan"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;amazedsaint&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Here is where to download the Microsoft Surface SDK&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a class="tweet-url web" href="https://partner.surface.com/login/signin.aspx" rel="nofollow" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" target="_blank"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;https://partner.surface.com...&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="color: #999999; display: block; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 3px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="entry-date" href="http://twitter.com/amazedsaint/status/4688054191" rel="bookmark" style="color: #999999; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;11:33 PM Oct 7th&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;from web&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="hentry u-jongalloway status" id="status_4649801271" style="border-bottom-color: rgb(210, 218, 218); border-bottom-style: dashed; border-bottom-width: 1px; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.6em; padding-left: 0px; padding-right: 0px; padding-top: 0.7em; position: relative;"&gt;&lt;span style="display: block; height: 50px; left: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 10px; margin-top: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; width: 50px;"&gt;&lt;a class="tweet-url profile-pic url" href="http://twitter.com/jongalloway" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;img alt="Jon Galloway" class="photo fn" height="48" src="http://a1.twimg.com/profile_images/329131438/JonFace420px_normal.jpg" style="border-bottom-color: transparent; border-bottom-width: 0px; border-left-color: transparent; border-left-width: 0px; border-right-color: transparent; border-right-width: 0px; border-top-color: transparent; border-top-width: 0px; height: 48px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 48px;" width="48" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="display: block; margin-bottom: 0px; margin-left: 56px; margin-right: 0px; margin-top: 0px; min-height: 50px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 425px;"&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="tweet-url screen-name" href="http://twitter.com/jongalloway" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="Jon Galloway"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;jongalloway&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Chris Harrison is consistently awesome. Scratch input is a recent example.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a class="tweet-url web" href="http://www.chrisharrison.net/projects/scratchinput/index.html" rel="nofollow" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" target="_blank"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;http://www.chrisharrison.ne...&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="color: #999999; display: block; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 3px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="entry-date" href="http://twitter.com/jongalloway/status/4649801271" rel="bookmark" style="color: #999999; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;12:13 PM Oct 6th&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;from&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://code.google.com/p/wittytwitter/" rel="nofollow" style="color: #999999; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Witty&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="hentry u-mashable status" id="status_4648272042" style="border-bottom-color: rgb(210, 218, 218); border-bottom-style: dashed; border-bottom-width: 1px; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.6em; padding-left: 0px; padding-right: 0px; padding-top: 0.7em; position: relative;"&gt;&lt;span style="display: block; height: 50px; left: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 10px; margin-top: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; width: 50px;"&gt;&lt;a class="tweet-url profile-pic url" href="http://twitter.com/mashable" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;img alt="Pete Cashmore" class="photo fn" height="48" src="http://a3.twimg.com/profile_images/58439629/petepassport_normal.PNG" style="border-bottom-color: transparent; border-bottom-width: 0px; border-left-color: transparent; border-left-width: 0px; border-right-color: transparent; border-right-width: 0px; border-top-color: transparent; border-top-width: 0px; height: 48px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 48px;" width="48" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="display: block; margin-bottom: 0px; margin-left: 56px; margin-right: 0px; margin-top: 0px; min-height: 50px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 425px;"&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="tweet-url screen-name" href="http://twitter.com/mashable" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="Pete Cashmore"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;mashable&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;PhotoSketch: Photoshop + Image Recognition = Awesome -&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a class="tweet-url web" href="http://bit.ly/tBPKv" rel="nofollow" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" target="_blank"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;http://bit.ly/tBPKv&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="color: #999999; display: block; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 3px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="entry-date" href="http://twitter.com/mashable/status/4648272042" rel="bookmark" style="color: #999999; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;10:22 AM Oct 6th&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;from&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://bit.ly/" rel="nofollow" style="color: #999999; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;bit.ly&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="hentry u-brada status" id="status_4615414459" style="border-bottom-color: rgb(210, 218, 218); border-bottom-style: dashed; border-bottom-width: 1px; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.6em; padding-left: 0px; padding-right: 0px; padding-top: 0.7em; position: relative;"&gt;&lt;span style="display: block; height: 50px; left: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 10px; margin-top: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; width: 50px;"&gt;&lt;a class="tweet-url profile-pic url" href="http://twitter.com/brada" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;img alt="Brad Abrams" class="photo fn" height="48" src="http://a1.twimg.com/profile_images/321628508/twitterProfilePhoto_normal.jpg" style="border-bottom-color: transparent; border-bottom-width: 0px; border-left-color: transparent; border-left-width: 0px; border-right-color: transparent; border-right-width: 0px; border-top-color: transparent; border-top-width: 0px; height: 48px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 48px;" width="48" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="display: block; margin-bottom: 0px; margin-left: 56px; margin-right: 0px; margin-top: 0px; min-height: 50px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 425px;"&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="tweet-url screen-name" href="http://twitter.com/brada" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="Brad Abrams"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;brada&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Blog: Building The Basics: Silverlight 3, .NET RIA Services, &amp;amp; NHibernate (Fluent)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a class="tweet-url web" href="http://bit.ly/2BGjrW" rel="nofollow" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" target="_blank"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;http://bit.ly/2BGjrW&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="color: #999999; display: block; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 3px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="entry-date" href="http://twitter.com/brada/status/4615414459" rel="bookmark" style="color: #999999; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;5:40 AM Oct 5th&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;from&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.tweetdeck.com/" rel="nofollow" style="color: #999999; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;TweetDeck&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="hentry u-MisfitGeek status" id="status_4550666207" style="border-bottom-color: rgb(210, 218, 218); border-bottom-style: dashed; border-bottom-width: 1px; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.6em; padding-left: 0px; padding-right: 0px; padding-top: 0.7em; position: relative;"&gt;&lt;span style="display: block; height: 50px; left: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 10px; margin-top: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; width: 50px;"&gt;&lt;a class="tweet-url profile-pic url" href="http://twitter.com/MisfitGeek" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;img alt="JoeStagner" class="photo fn" height="48" src="http://a1.twimg.com/profile_images/313068206/JoeHeaderPic_normal.jpg" style="border-bottom-color: transparent; border-bottom-width: 0px; border-left-color: transparent; border-left-width: 0px; border-right-color: transparent; border-right-width: 0px; border-top-color: transparent; border-top-width: 0px; height: 48px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 48px;" width="48" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="display: block; margin-bottom: 0px; margin-left: 56px; margin-right: 0px; margin-top: 0px; min-height: 50px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 425px;"&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="tweet-url screen-name" href="http://twitter.com/MisfitGeek" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="JoeStagner"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;MisfitGeek&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;New blog post:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a class="tweet-url web" href="http://tinyurl.com/yd2gpjk" rel="nofollow" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" target="_blank"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;http://tinyurl.com/yd2gpjk&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;- SQL Azure Explorer for Visual Studio&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #999999; display: block; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 3px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="entry-date" href="http://twitter.com/MisfitGeek/status/4550666207" rel="bookmark" style="color: #999999; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;5:16 PM Oct 2nd&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;from&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://apiwiki.twitter.com/" rel="nofollow" style="color: #999999; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;API&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="hentry u-GoogleCode status" id="status_4490157647" style="border-bottom-color: rgb(210, 218, 218); border-bottom-style: dashed; border-bottom-width: 1px; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.6em; padding-left: 0px; padding-right: 0px; padding-top: 0.7em; position: relative;"&gt;&lt;span style="display: block; height: 50px; left: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 10px; margin-top: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; width: 50px;"&gt;&lt;a class="tweet-url profile-pic url" href="http://twitter.com/GoogleCode" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;img alt="Google Code" class="photo fn" height="48" src="http://a3.twimg.com/profile_images/284098965/code_normal.png" style="border-bottom-color: transparent; border-bottom-width: 0px; border-left-color: transparent; border-left-width: 0px; border-right-color: transparent; border-right-width: 0px; border-top-color: transparent; border-top-width: 0px; height: 48px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 48px;" width="48" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="display: block; margin-bottom: 0px; margin-left: 56px; margin-right: 0px; margin-top: 0px; min-height: 50px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 425px;"&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="tweet-url screen-name" href="http://twitter.com/GoogleCode" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="Google Code"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;GoogleCode&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Surf's up! Read the latest on Google Wave:&lt;/span&gt;&lt;/span&gt;&lt;a class="tweet-url web" href="http://bit.ly/207oXA" rel="nofollow" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" target="_blank"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;http://bit.ly/207oXA&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;(via @&lt;/span&gt;&lt;/span&gt;&lt;a class="tweet-url username" href="http://twitter.com/google" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;google&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #999999; display: block; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 3px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="entry-date" href="http://twitter.com/GoogleCode/status/4490157647" rel="bookmark" style="color: #999999; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;10:22 AM Sep 30th&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;from&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.brizzly.com/" rel="nofollow" style="color: #999999; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Brizzly&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="hentry u-DanWahlin status" id="status_4488384907" style="border-bottom-color: rgb(210, 218, 218); border-bottom-style: dashed; border-bottom-width: 1px; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.6em; padding-left: 0px; padding-right: 0px; padding-top: 0.7em; position: relative;"&gt;&lt;span style="display: block; height: 50px; left: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 10px; margin-top: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; width: 50px;"&gt;&lt;a class="tweet-url profile-pic url" href="http://twitter.com/DanWahlin" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;img alt="Dan Wahlin" class="photo fn" height="48" src="http://a1.twimg.com/profile_images/335293434/Facebook_normal.jpg" style="border-bottom-color: transparent; border-bottom-width: 0px; border-left-color: transparent; border-left-width: 0px; border-right-color: transparent; border-right-width: 0px; border-top-color: transparent; border-top-width: 0px; height: 48px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 48px;" width="48" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="display: block; margin-bottom: 0px; margin-left: 56px; margin-right: 0px; margin-top: 0px; min-height: 50px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 425px;"&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="tweet-url screen-name" href="http://twitter.com/DanWahlin" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="Dan Wahlin"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;DanWahlin&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;RT @&lt;/span&gt;&lt;/span&gt;&lt;a class="tweet-url username" href="http://twitter.com/timheuer" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;timheuer&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;: A must watch video series on&lt;/span&gt;&lt;/span&gt;&lt;a class="tweet-url hashtag" href="http://twitter.com/search?q=%23channel9" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="#channel9"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;#channel9&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;. Hear from @&lt;/span&gt;&lt;/span&gt;&lt;a class="tweet-url username" href="http://twitter.com/scottgu" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;scottgu&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;and others. Visual Studio-A documentary -&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a class="tweet-url web" href="http://bit.ly/1BtLG" rel="nofollow" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" target="_blank"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;http://bit.ly/1BtLG&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="color: #999999; display: block; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 3px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="entry-date" href="http://twitter.com/DanWahlin/status/4488384907" rel="bookmark" style="color: #999999; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;8:48 AM Sep 30th&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;from&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.tweetdeck.com/" rel="nofollow" style="color: #999999; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;TweetDeck&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="hentry u-amazedsaint mine status" id="status_4469736730" style="border-bottom-color: rgb(210, 218, 218); border-bottom-style: dashed; border-bottom-width: 1px; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.6em; padding-left: 0px; padding-right: 0px; padding-top: 0.7em; position: relative;"&gt;&lt;span style="display: block; height: 50px; left: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 10px; margin-top: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; width: 50px;"&gt;&lt;a class="tweet-url profile-pic url" href="http://twitter.com/amazedsaint" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;img alt="Anoop Madhusudanan" class="photo fn" height="48" src="http://a3.twimg.com/profile_images/429227369/meclose_normal.png" style="border-bottom-color: transparent; border-bottom-width: 0px; border-left-color: transparent; border-left-width: 0px; border-right-color: transparent; border-right-width: 0px; border-top-color: transparent; border-top-width: 0px; height: 48px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 48px;" width="48" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="display: block; margin-bottom: 0px; margin-left: 56px; margin-right: 0px; margin-top: 0px; min-height: 50px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 425px;"&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="tweet-url screen-name" href="http://twitter.com/amazedsaint" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="Anoop Madhusudanan"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;amazedsaint&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;APP Architecture Guide 2.0 book -&lt;/span&gt;&lt;/span&gt;&lt;a class="tweet-url web" href="http://www.codeplex.com/AppArchGuide" rel="nofollow" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" target="_blank"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;http://www.codeplex.com/App...&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="color: #999999; display: block; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 3px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="entry-date" href="http://twitter.com/amazedsaint/status/4469736730" rel="bookmark" style="color: #999999; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;6:55 PM Sep 29th&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;from web&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="hentry u-scottgu status" id="status_4390118932" style="border-bottom-color: rgb(210, 218, 218); border-bottom-style: dashed; border-bottom-width: 1px; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.6em; padding-left: 0px; padding-right: 0px; padding-top: 0.7em; position: relative;"&gt;&lt;span style="display: block; height: 50px; left: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 10px; margin-top: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; width: 50px;"&gt;&lt;a class="tweet-url profile-pic url" href="http://twitter.com/scottgu" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;img alt="Scott Guthrie" class="photo fn" height="48" src="http://a3.twimg.com/profile_images/234169173/red_polo_big_normal.jpg" style="border-bottom-color: transparent; border-bottom-width: 0px; border-left-color: transparent; border-left-width: 0px; border-right-color: transparent; border-right-width: 0px; border-top-color: transparent; border-top-width: 0px; height: 48px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 48px;" width="48" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="display: block; margin-bottom: 0px; margin-left: 56px; margin-right: 0px; margin-top: 0px; min-height: 50px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 425px;"&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="tweet-url screen-name" href="http://twitter.com/scottgu" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="Scott Guthrie"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;scottgu&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;New post from @&lt;/span&gt;&lt;/span&gt;&lt;a class="tweet-url username" href="http://twitter.com/Haacked" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Haacked&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;about the new Auto HTML Encoding syntax  coming w/ ASP.NET 4 Beta2:&lt;/span&gt;&lt;/span&gt;&lt;a class="tweet-url web" href="http://tinyurl.com/autoencode" rel="nofollow" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" target="_blank"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;http://tinyurl.com/autoencode&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="color: #999999; display: block; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 3px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="entry-date" href="http://twitter.com/scottgu/status/4390118932" rel="bookmark" style="color: #999999; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;1:58 PM Sep 26th&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;from web&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="hentry u-amazedsaint mine status" id="status_4310592924" style="border-bottom-color: rgb(210, 218, 218); border-bottom-style: dashed; border-bottom-width: 1px; line-height: 1.1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.6em; padding-left: 0px; padding-right: 0px; padding-top: 0.7em; position: relative;"&gt;&lt;span style="display: block; height: 50px; left: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 10px; margin-top: 0px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: absolute; width: 50px;"&gt;&lt;a class="tweet-url profile-pic url" href="http://twitter.com/amazedsaint" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;img alt="Anoop Madhusudanan" class="photo fn" height="48" src="http://a3.twimg.com/profile_images/429227369/meclose_normal.png" style="border-bottom-color: transparent; border-bottom-width: 0px; border-left-color: transparent; border-left-width: 0px; border-right-color: transparent; border-right-width: 0px; border-top-color: transparent; border-top-width: 0px; height: 48px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 48px;" width="48" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="display: block; margin-bottom: 0px; margin-left: 56px; margin-right: 0px; margin-top: 0px; min-height: 50px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 425px;"&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="tweet-url screen-name" href="http://twitter.com/amazedsaint" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="Anoop Madhusudanan"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;amazedsaint&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;MIT Free online courses -&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a class="tweet-url web" href="http://bit.ly/QwD4J" rel="nofollow" style="color: #ffd505; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" target="_blank"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;http://bit.ly/QwD4J&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="color: #999999; display: block; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 3px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="entry-date" href="http://twitter.com/amazedsaint/status/4310592924" rel="bookmark" style="color: #999999; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;12:54 PM Sep 23rd&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;from web&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #999999; display: block; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 3px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;span style="color: #ffd505;"&gt;&lt;span style="line-height: 18px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/ol&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-1935705135547540095?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NxVMlV20a-6bVBFLGI76dpchEBs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NxVMlV20a-6bVBFLGI76dpchEBs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NxVMlV20a-6bVBFLGI76dpchEBs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NxVMlV20a-6bVBFLGI76dpchEBs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=3BBe5duYtvs:nazCv55P1zI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=3BBe5duYtvs:nazCv55P1zI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=3BBe5duYtvs:nazCv55P1zI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=3BBe5duYtvs:nazCv55P1zI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=3BBe5duYtvs:nazCv55P1zI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=3BBe5duYtvs:nazCv55P1zI:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=3BBe5duYtvs:nazCv55P1zI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=3BBe5duYtvs:nazCv55P1zI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=3BBe5duYtvs:nazCv55P1zI:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/3BBe5duYtvs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/3BBe5duYtvs/weekend-hacks-surface-sdk-silverlight.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><feedburner:origLink>http://amazedsaint.blogspot.com/2009/10/weekend-hacks-surface-sdk-silverlight.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-9010222850461708455</guid><pubDate>Sat, 10 Oct 2009 07:27:00 +0000</pubDate><atom:updated>2009-10-10T13:05:24.233+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Software Development</category><category domain="http://www.blogger.com/atom/ns#">Design And Architecture</category><title>Significance of Prototyping in Software Development Process</title><description>&lt;br /&gt;
Any software or technology, in it's final form, is expected to solve a business problem for an end user. And hence, it makes perfect sense to enable the end user to validate the requirements visually, before the actual construction - to ensure that there are no surprises in the end.&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;
&lt;a href="http://2.bp.blogspot.com/_TUs17IBrSL4/SK0ukFAasaI/AAAAAAAAAFI/nG_uVAUNv9k/s400/system_testing_cartoon.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" src="http://2.bp.blogspot.com/_TUs17IBrSL4/SK0ukFAasaI/AAAAAAAAAFI/nG_uVAUNv9k/s400/system_testing_cartoon.png" style="float: right; height: 400px; margin: 0px 0px 10px 10px; width: 357px;" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div&gt;
Yes, this sounds so obvious, but it is often amazing to see how teams neglect such a powerful technique like &lt;b&gt;prototyping&lt;span style="font-weight: normal;"&gt;.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-weight: normal;"&gt;&lt;/span&gt;&lt;/b&gt;Prototyping the user interfaces and workflows early enough will ensure
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;There are no frequent change requests and release time hotch-potch&lt;/li&gt;
&lt;li&gt;Requirements are captured properly&lt;/li&gt;
&lt;li&gt;There is clarity in functional scope (in scope and out of scope)&lt;/li&gt;
&lt;li&gt;Analysis is good enough to start the construction phase.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span style="font-size: 130%;"&gt;&lt;b&gt;Why you need Prototyping?&lt;/b&gt; &lt;/span&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
In most scenarios, customers are not really aware about what they need. Capturing the requirements also means working with the customer to envision the final system, and at times, to suggest possible alternatives.&lt;br /&gt;
&lt;br /&gt;
Let us take an example. Assume that you have a whole-sale carrot distributor as your customer, who is owning the company "Thick Red Carrots" and he is having a requirement.&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;blockquote&gt;
"I need a simple program to manage the distribution of carrots I purchase from my suppliers. I also need to view and track the location of all my sales guys in the field; to know the number of shops they are covering a day, and to track the number of carrots they are selling in each shop. I also need the software to give my tax statement from my sales data"&lt;br /&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
When you dissect the requirements for this 'simple' software - obviously you can see the scope is increasing. And after several rounds of discussions with your carrot whole seller, you understood the actual requirements - still on a high level.
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
Briefly, the system should include
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;A user management and payroll module to enter and manage sales staff details. &lt;/li&gt;
&lt;li&gt;An allocation module to allocate a geographical boundary for each of his sales guys on a daily or weekly basis. &lt;/li&gt;
&lt;li&gt;A module for interfacing with sales guys - the sales guys will use their mobile device to enter the collection data back to the system, from the field. &lt;/li&gt;
&lt;li&gt;A supplier management module&lt;/li&gt;
&lt;li&gt;A stock management module to track the in house stock, allocated stock etc to foresee and report possible stock deficits&lt;/li&gt;
&lt;li&gt;Admin module to enter master data - including employees, stocks, suppliers, shops (customers) etc&lt;/li&gt;
&lt;li&gt;Reports for reporting all this&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
You also found that you need to address specific conditions, like overlapping of sales regions, back-collection of damaged carrots etc. Gasp. Gasp. Gulp, Gulp.


&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="font-size: 130%;"&gt;Prototyping To Help&lt;/span&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
You have several challenges. To mention a few, you need to
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Make sure your carrot seller understands the features required for the final system, so that he won't cry about the scope creep.&lt;/li&gt;
&lt;li&gt;Ensure your design and development teams are understanding the requirements, so that they won't miss out any functionality, and at the same time they won't over engineer.&lt;/li&gt;
&lt;li&gt;Ensure all workflows and specific business cases are documented&lt;/li&gt;
&lt;li&gt;Ensure all customer expectations are clearly identified and captured (remember, the tax calculation part)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
You turn to a white board, and start visualizing the screens and user actions. (For an illustration, I'm using &lt;a href="http://www.balsamiq.com/"&gt;http://www.balsamiq.com/&lt;/a&gt; for some quick drawings). You decided that the main screen should allow easy navigation to all modules, and hence should be having a tabbed interface. The entry screen will display a summary of statistics, and will may have few quick links as shown.

&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_eb12InBhYJs/Src1dbz787I/AAAAAAAAAHQ/GRryrWZCBKA/s1600-h/myImage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" iq="true" src="http://2.bp.blogspot.com/_eb12InBhYJs/Src1dbz787I/AAAAAAAAAHQ/GRryrWZCBKA/s400/myImage.png" /&gt;&lt;/a&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border: medium none;"&gt;
You go further, and sketch up few individual screens as well, based on each requirement. To enable the end user to define sales regions, you might create a user interface with a map - so that the end user may draw a sales region with in the map, to specify the allocated stock for the sales guy to sell in that region, and the date of allocation.
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="separator" style="border: medium none; clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_eb12InBhYJs/Src5d1ms_jI/AAAAAAAAAHY/8xrfctyJWtI/s1600-h/salesguy.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" iq="true" src="http://1.bp.blogspot.com/_eb12InBhYJs/Src5d1ms_jI/AAAAAAAAAHY/8xrfctyJWtI/s320/salesguy.png" /&gt;&lt;/a&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="border: medium none; clear: both; text-align: left;"&gt;
With these sketches, you might goto your end customer, and take him through these screens. You might get straight forward comments like "The dashboard screen looks awesome, but I need to view my current stock there in numbers". Few comments might definitely alter the scope, like "I need to import my employee contacts from outlook".
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="border: medium none; clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="border: medium none; clear: both; text-align: left;"&gt;
And once the end customer agrees on the screen protoypes and how he may switch back and forth between them, you are good to pass it to your design and dev guys, to &lt;a href="http://geeksbydefault.blogspot.com/2009/08/thought-process-for-applying-design.html"&gt;take it to the next step.&lt;/a&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="border: medium none; clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="border: medium none; clear: both; text-align: left;"&gt;
Another key point to have in the back of your mind - When you present the prototypes, make it clear that it is just a wire frame to demonstrate the functionality. And if possible, present a real life snapshot of atleast one of your screens, to clarify your point.
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="border: medium none; clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="border: medium none; clear: both; text-align: left;"&gt;
&lt;span style="font-size: large;"&gt;&lt;strong&gt;Tools for doing prototyping&lt;/strong&gt; &lt;/span&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="border: medium none; clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="border: medium none; clear: both; text-align: left;"&gt;
There are various online and offline tools for doing prototyping. You can google around to find a few. I use Balsamiq for quick and static UI prototyping, &lt;a href="http://www.balsamiq.com/"&gt;http://www.balsamiq.com/&lt;/a&gt; - and &lt;a href="http://www.microsoft.com/video/en/us/details/1eea789b-c69c-4b09-a13b-b7422c0ff104"&gt;Microsoft Expression Sketchflow&lt;/a&gt; for some serious prototyping.
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="border: medium none; clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="border: medium none; clear: both; text-align: left;"&gt;
The good thing about Sketchflow is that it supports workflow prototyping and behaviour prototyping to some extent. What's catchy about Expression Sketchflow is its ability to provide a dynamic, 'clickable' interface for the user - so that the user can get a some what realistic experience.
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-9010222850461708455?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qiRYDGCDgrinE2jGHy5KWFkuzaA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qiRYDGCDgrinE2jGHy5KWFkuzaA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qiRYDGCDgrinE2jGHy5KWFkuzaA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qiRYDGCDgrinE2jGHy5KWFkuzaA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=3bgBydhFMyY:UAh2J24r9os:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=3bgBydhFMyY:UAh2J24r9os:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=3bgBydhFMyY:UAh2J24r9os:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=3bgBydhFMyY:UAh2J24r9os:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=3bgBydhFMyY:UAh2J24r9os:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=3bgBydhFMyY:UAh2J24r9os:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=3bgBydhFMyY:UAh2J24r9os:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=3bgBydhFMyY:UAh2J24r9os:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=3bgBydhFMyY:UAh2J24r9os:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/3bgBydhFMyY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/3bgBydhFMyY/significance-of-prototyping-in-software.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_TUs17IBrSL4/SK0ukFAasaI/AAAAAAAAAFI/nG_uVAUNv9k/s72-c/system_testing_cartoon.png" height="72" width="72" /><feedburner:origLink>http://amazedsaint.blogspot.com/2009/10/significance-of-prototyping-in-software.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-6122558786259423899</guid><pubDate>Fri, 18 Sep 2009 16:01:00 +0000</pubDate><atom:updated>2009-11-07T12:37:56.276+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Google Wave</category><category domain="http://www.blogger.com/atom/ns#">CSharp</category><title>BingyBot - A Google Wave Bot written in .NET, that interfaces with Bing APIs</title><description>&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;span style="font-family: inherit;"&gt;After spending my last weekend hack on the API&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;, I've rolled together my first simple .NET bot, the&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;Bingy Bot&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;. You can try Bingy either in the Google Wave Sandbox (add bingybot@appspot.com to your wave), or in these public test waves.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Google Wave Sandbox -&amp;nbsp;&lt;a href="https://wave.google.com/a/wavesandbox.com/#restored:wave:wavesandbox.com!w%252B4T_YGl-u%2525BH.3"&gt;A public wave where you can test Bingy&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Embedded Here -&amp;nbsp;&lt;a href="http://amazedsaint.net/bingy.aspx"&gt;Check out this embedded page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
See Bingy in action.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;object height="364" width="445"&gt;&lt;param name="movie" value="http://www.youtube.com/v/BHtKbz_sPHU&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999&amp;border=1"&gt;
&lt;/param&gt;
&lt;param name="allowFullScreen" value="true"&gt;
&lt;/param&gt;
&lt;param name="allowscriptaccess" value="always"&gt;
&lt;/param&gt;
&lt;embed src="http://www.youtube.com/v/BHtKbz_sPHU&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="445" height="364"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;
Bingy bot answers user's questions, and even allows users to create FAQ waves&amp;nbsp;collaboratively.&lt;br /&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
See this &lt;a href="https://wave.google.com/a/wavesandbox.com/#restored:wave:wavesandbox.com!w%252Bd0C5FLDGJ.5"&gt;Google WAVE FAQ&lt;/a&gt; here, built by asking questions to Bingy.&lt;br /&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
If you've wave sand box access, you can invite bingybot@appspot.com to your wave.&lt;br /&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;Google Wave exposes &lt;/span&gt;&lt;a href="http://code.google.com/apis/wave/guide.html"&gt;&lt;span style="font-family: inherit;"&gt;an excellent API&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit;"&gt; to create extensions, and to embed Waves. Some time back, I had a quick look towards the Wave Robot API, and thought it'll be great if I've a .NET client API to work on. So, when I saw&amp;nbsp;&lt;span style="font-family: inherit;"&gt;&lt;a href="http://msmvps.com/blogs/jon_skeet/"&gt;Jon Skeet&lt;/a&gt;&amp;nbsp;tweeted about his C# &lt;a href="http://code.google.com/p/wave-robot-net-client/"&gt;Wave Bot API Port&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;some time back, I found it interesting.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;About Bingy&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Sing in the tune "Twinkle Twinkle.."&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;i&gt;"Bingy Bingy what you say,&amp;nbsp;&lt;span style="font-style: normal;"&gt;&lt;i&gt;How I wonder what you say,&lt;/i&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;i&gt;Up above the bots of Wave,&amp;nbsp;&lt;span style="font-style: normal;"&gt;&lt;i&gt;Like a wavelet in the Web"&lt;/i&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;A little bit of Irony here - Bingy bot tries to find answer for your questions using &lt;a href="http://www.bing.com/developers/appids.aspx"&gt;Bing APIs&lt;/a&gt;, and post it back if it knows.&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: small; line-height: 17px; white-space: pre-wrap;"&gt;&lt;span style="font-family: inherit;"&gt;Type a question, like "what is an elephant?" or just key in a flight number to get the status. Bingy will answer if it knows. &lt;span style="line-height: normal; white-space: normal;"&gt;Bingy interfaces with Bing using the XML APIs to do instant searches. I'll spend more time on Bingy to make it smarter, so that it can process tokens, and give better information other than flight status etc.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;Though Jon has a well written tutorial (his code itself is simple enough to start hacking), I'll post a detailed example with my experiments with the wave bot api, specifically on the Bing interfacing.&amp;nbsp;As I already mentioned, the best part of Bingy is that it is implemented in .NET.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;Basically, a python proxy is hosted in google app engine that routes all calls to your custom domain. These steps are already mentioned in Jon's wiki post. I'll upload the code soon so that this can be a reference point for a first cut implementation.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Resources For You To Start With&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
Here are a couple of references&lt;br /&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="https://wave.google.com/a/wavesandbox.com/"&gt;Hope you already have a Wave Sandbox access?&lt;/a&gt;&amp;nbsp;or &lt;a href="https://services.google.com/fb/forms/wavesignupfordev/"&gt;Request it here&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/wave-robot-net-client/"&gt;&lt;span style="font-family: inherit;"&gt;Grab the Wave Robot .NET Library&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/wave-robot-net-client/w/list"&gt;&lt;span style="font-family: inherit;"&gt;See this post from Jon on how to start&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/apis/wave/guide.html"&gt;The Google Wave API&amp;nbsp;Reference&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span style="font-family: inherit;"&gt;By the time you start exploring the wave model, I'll write another detailed post about the implementation of Bingy, with source code.&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
Here is the code for embedding the wave if you like. But no guarantee that I'll continue to host it for another 10 years!!

&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"&amp;gt; 
  &amp;lt;head&amp;gt; 
    &amp;lt;meta http-equiv="content-type" content="text/html; charset=utf-8"/&amp;gt; 
    &amp;lt;title&amp;gt;Bingy Bot Wave Test&amp;lt;/title&amp;gt; 
    &amp;lt;script src="http://wave-api.appspot.com/public/embed.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt; 
    &amp;lt;script type="text/javascript"&amp;gt; 
    function initialize() {
      var wavePanel = new WavePanel('http://wave.google.com/a/wavesandbox.com/');
      wavePanel.loadWave('wavesandbox.com!w+4T_YGl-u%BH');
      wavePanel.init(document.getElementById('waveframe'));
    }
    &amp;lt;/script&amp;gt; 
  &amp;lt;/head&amp;gt; 
  &amp;lt;body onload="initialize()" style="background:white"&amp;gt; 
  &amp;lt;font face="arial"&amp;gt; 
    &amp;lt;h1&amp;gt;bingybot@appspot.com&amp;lt;/h1&amp;gt; 
    &amp;lt;div id="waveframe" style="width: 100%; height: 90%;background:white"&amp;gt;&amp;lt;/div&amp;gt; 
  &amp;lt;/body&amp;gt; 
  &amp;lt;/font&amp;gt; 
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-6122558786259423899?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oWGA6I4PiQl2y7avsuix-jtbMTM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oWGA6I4PiQl2y7avsuix-jtbMTM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oWGA6I4PiQl2y7avsuix-jtbMTM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oWGA6I4PiQl2y7avsuix-jtbMTM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=ekpsAE457t0:7_6kspCtwyY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=ekpsAE457t0:7_6kspCtwyY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=ekpsAE457t0:7_6kspCtwyY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=ekpsAE457t0:7_6kspCtwyY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=ekpsAE457t0:7_6kspCtwyY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=ekpsAE457t0:7_6kspCtwyY:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=ekpsAE457t0:7_6kspCtwyY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=ekpsAE457t0:7_6kspCtwyY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=ekpsAE457t0:7_6kspCtwyY:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/ekpsAE457t0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/ekpsAE457t0/bingybot-google-wave-bot-written-in.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/__Mw4iY-4nuY/SrOr24VjxVI/AAAAAAAAAaU/8tkgKCH65V8/s72-c/bingybot.PNG" height="72" width="72" /><feedburner:origLink>http://amazedsaint.blogspot.com/2009/09/bingybot-google-wave-bot-written-in.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-6305750360276438933</guid><pubDate>Sat, 05 Sep 2009 12:51:00 +0000</pubDate><atom:updated>2009-11-07T12:37:56.277+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Dynamic</category><category domain="http://www.blogger.com/atom/ns#">.NET 4.0</category><category domain="http://www.blogger.com/atom/ns#">CSharp</category><title>'Attaching' Members (Properties, Methods etc) To Objects At Runtime - C# 4.0 Expando</title><description>&lt;span class="Apple-style-span" style="font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;a href="http://amazedsaint.blogspot.com/search/label/.NET%204.0"&gt;&lt;b&gt;About .NET 4.0 Series&lt;/b&gt;&lt;/a&gt;&amp;nbsp;- I'll be covering various aspects of .NET 4.0 and related technologies in these posts&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
In my &lt;a href="http://amazedsaint.blogspot.com/2009/09/fun-with-dynamic-objects-and-mef-in-c.html"&gt;previous post&lt;/a&gt; and &lt;a href="http://www.codeproject.com/kb/cs/dynamicfun.aspx"&gt;related article&lt;/a&gt;, I gave a quick introduction towards creating and using your own custom dynamic types, inheriting from the DynamicObject class.&lt;br /&gt;
&lt;br /&gt;
.NET framework 4.0 has a cool new &lt;a href="http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject(VS.100).aspx"&gt;ExpandoObject &lt;/a&gt;class, in System.Dynamic namespace. What makes this special is, it allows you to create an object with members that can be dynamically added and removed at run time. To clarify the point, have a look at this example.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharp" name="code"&gt;  
            dynamic obj = new ExpandoObject();
            obj.Value = 10;
            var action = new Action&amp;lt;string &amp;gt;((line) =&amp;gt; Console.WriteLine(line));
            obj.WriteNow = action;
            obj.WriteNow(obj.Value.ToString());
&lt;/pre&gt;
And you'll get 10 as output in your console. As you can see, the property 'Value' and method 'WriteNow' is attached at runtime, when the invocation happens.
&lt;br /&gt;
&lt;br /&gt;
The objective of this post is to examine how the ExpandoObject itself is implemented. To make this clear, let us create a MyExpando class, a minimal implementation of ExpandoObject.&lt;br /&gt;
&lt;br /&gt;
We are inheriting MyExpando class from the DynamicObject, and these are the major methods we are overriding.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;TrySetMember- Provides the implementation of setting a member.&lt;/li&gt;
&lt;li&gt;TryGetMember-Provides the implementation of getting a member.&lt;/li&gt;
&lt;li&gt;TryInvokeMember- Provides the implementation of calling a member.&lt;/li&gt;
&lt;li&gt;GetDynamicMemberNames- Returns the enumeration of all dynamic member names.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
And Here is our minimal MyExpando class, inherited from DynamicObject, and overrides the above methods.

&lt;br /&gt;
&lt;pre class="csharp" name="code"&gt;  public class MyExpando : DynamicObject
    {

        private Dictionary &amp;lt; string, object &amp;gt; _members = new Dictionary &amp;lt; string, object &amp;gt; ();


        /// &lt;summary&gt;
        /// When a new property is set, add the property name and value to the dictionary
        /// &lt;/summary&gt;     
        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            if (!_members.ContainsKey(binder.Name))
                _members.Add(binder.Name, value);
            else
                _members[binder.Name] = value;

            return true;
        }

        /// &lt;summary&gt;
        /// When user accesses something, return the value if we have it
        /// &lt;/summary&gt;      
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            if (_members.ContainsKey(binder.Name))
            {
                result = _members[binder.Name];
                return true;
            }
            else
            {
                return base.TryGetMember(binder, out result);
            }
        }

        /// &lt;summary&gt;
        /// If a property value is a delegate, invoke it
        /// &lt;/summary&gt;     
        public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
        {
            if (_members.ContainsKey(binder.Name) &amp;amp;&amp;amp; _members[binder.Name] is Delegate)
            {
                result = (_members[binder.Name] as Delegate).DynamicInvoke(args);
                return true;
            }
            else
            {
                return base.TryInvokeMember(binder, args, out result);
            }
        }


        /// &lt;summary&gt;
        /// Return all dynamic member names
        /// &lt;/summary&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        public override IEnumerable&amp;amp;ltstring&amp;gt; GetDynamicMemberNames()
        {
            return _members.Keys;
        }
    }
&lt;/pre&gt;
When ever a property set operation happens, the runtime will invoke TrySetMember, and there, we are pushing the property name and value to a dictionary. Similarly, when ever a get operation happens (TryGetMember), we are simply returning the value object if available in the dictionary. Also, when a method call is made (TryInvokeMember), if the value type is a delegate, we just invoke the same by passing the arguments we received. Pretty simple, huh? &lt;br /&gt;
&lt;br /&gt;
Well, that is it. Now, let us try the above scenario with our MyExpando object&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharp" name="code"&gt;           dynamic obj = new MyExpando();
            obj.Value = 10;
            var action = new Action&lt;string&gt;((line) =&amp;gt; Console.WriteLine(line));
            obj.WriteNow = action;
            obj.WriteNow(obj.Value.ToString());
&lt;/string&gt;&lt;/pre&gt;
Run the application, and you'll get 10 as output. Cool :)

&lt;a href="http://amazedsaint.blogspot.com/" rel="tag" style="display: none;"&gt;CodeProject&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-6305750360276438933?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ReWeL4487Ktg_zwjpDVlVTFWnCE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ReWeL4487Ktg_zwjpDVlVTFWnCE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ReWeL4487Ktg_zwjpDVlVTFWnCE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ReWeL4487Ktg_zwjpDVlVTFWnCE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=zYYjmM-g8vs:mxcvasxyCDY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=zYYjmM-g8vs:mxcvasxyCDY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=zYYjmM-g8vs:mxcvasxyCDY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=zYYjmM-g8vs:mxcvasxyCDY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=zYYjmM-g8vs:mxcvasxyCDY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=zYYjmM-g8vs:mxcvasxyCDY:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=zYYjmM-g8vs:mxcvasxyCDY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=zYYjmM-g8vs:mxcvasxyCDY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=zYYjmM-g8vs:mxcvasxyCDY:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/zYYjmM-g8vs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/zYYjmM-g8vs/systemdynamicexpandoobject-similar.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/09/systemdynamicexpandoobject-similar.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-6974493197726838742</guid><pubDate>Fri, 04 Sep 2009 16:50:00 +0000</pubDate><atom:updated>2009-11-07T12:37:56.277+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Dynamic</category><category domain="http://www.blogger.com/atom/ns#">.NET 4.0</category><category domain="http://www.blogger.com/atom/ns#">CSharp</category><title>Fun with Dynamic Objects and MEF in C# 4.0</title><description>&lt;img alt="" border="0" src="http://www.iconoguy.com/images/ill-duck.jpg" style="float: right; height: 370px; margin-bottom: 10px; margin-left: 10px; margin-right: 0px; margin-top: 0px; width: 264px;" /&gt;
&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;div&gt;
&lt;div style="color: black; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 10pt; line-height: 1.2em;"&gt;
&lt;br /&gt;
&lt;a href="http://amazedsaint.blogspot.com/search/label/.NET%204.0"&gt;&lt;b&gt;About .NET 4.0 Series&lt;/b&gt;&lt;/a&gt; - I'll be covering various aspects of .NET 4.0 and related technologies in these posts&lt;br /&gt;
&lt;br /&gt;
C# 4.0 introduced the &lt;code style="color: #990000; font-family: 'Courier New', Courier, mono; font-size: 11pt;"&gt;dynamic &lt;/code&gt;keyword, to support dynamic typing. If you assign an object to a dynamic type variable (like &lt;code style="color: #990000; font-family: 'Courier New', Courier, mono; font-size: 11pt;"&gt;dynamic myvar=new MyObj()&lt;/code&gt; ), all method calls, property invocations and operator invocations on myvar will be delayed till the run time, and the compiler won't perform any type checks for myvar at compile time.&lt;br /&gt;
&lt;br /&gt;
So, if you do something like myvar.SomethingInvalid(); it is valid at compile time, but invalid at runtime if the object you assigned to &lt;i&gt;myvar &lt;/i&gt;doesn't have a SomethingInvalid() method.&lt;br /&gt;
&lt;/div&gt;
&lt;div style="color: black; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 10pt; line-height: 1.2em;"&gt;
The System.Dynamic namespace has various classes for supporting dynamic programming, mainly the DynamicObject class from which you can derive your own classes to do run time dispatching yourself. &lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style="color: black; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 10pt; line-height: 1.2em;"&gt;
&lt;/div&gt;
&lt;div style="color: black; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 10pt; line-height: 1.2em;"&gt;
&lt;br /&gt;
A couple of points to note. &lt;br /&gt;
&lt;/div&gt;
&lt;div style="color: black; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 10pt; line-height: 1.2em;"&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;A dynamic call will be slower for the first time, and your calls will be jited and cached if possible for subsequent calls. As a first step, the DLR checks the cache to see if the given action has already been bound wrt to the arguments. If not, the DLR checks to see if the receiver is an IDynamicObject, and if so, asks the receiver to bind the action. If the receiver is not an IDO, then DLR calls into the language binder (i.e, the C# runtime binder), and cache this.&lt;/li&gt;
&lt;li&gt;C#'s underlying type system has not changed in 4.0. As long as you are not using dynamic keyword, you are still statically typed (i.e, the types are known for the compiler at compile time).&lt;/li&gt;
&lt;li&gt;Error handling when you use dynamic features is a bit difficult and can't be very specific, as you don't know much about the foreign objects to which you dispatch the calls.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Recently, I published this article in Codeproject;&lt;span style="font-size: medium;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; line-height: 26px;"&gt;&lt;a href="http://www.codeproject.com/kb/cs/dynamicfun.aspx"&gt;&lt;span style="font-size: small;"&gt;Fun with Dynamic Objects and MEF in C# 4.0 - A dynamic File System Wrapper&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-size: small; line-height: 26px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; line-height: 26px;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: 13px; line-height: 16px;"&gt;This article demonstrates a couple of interesting techniques, including.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li style="color: black; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 10pt; line-height: 1.2em;"&gt;Creating a dynamic wrapper around the file system so that we can access Files and Directories as properties/members of a dynamic object&lt;/li&gt;
&lt;li style="color: black; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 10pt; line-height: 1.2em;"&gt;A way to attach custom Methods and operators to our dynamic wrapper class and dispatch them to a plug in sub system.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;a href="http://www.codeproject.com/kb/cs/dynamicfun.aspx"&gt;Go ahead and read it&lt;/a&gt;&lt;span style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-size: small; line-height: 26px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-6974493197726838742?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IoDWNpJsv9xEVgn2Zl43kI13Eio/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IoDWNpJsv9xEVgn2Zl43kI13Eio/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IoDWNpJsv9xEVgn2Zl43kI13Eio/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IoDWNpJsv9xEVgn2Zl43kI13Eio/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=OUkCmJn0RHI:RSFaO8_AYws:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=OUkCmJn0RHI:RSFaO8_AYws:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=OUkCmJn0RHI:RSFaO8_AYws:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=OUkCmJn0RHI:RSFaO8_AYws:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=OUkCmJn0RHI:RSFaO8_AYws:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=OUkCmJn0RHI:RSFaO8_AYws:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=OUkCmJn0RHI:RSFaO8_AYws:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=OUkCmJn0RHI:RSFaO8_AYws:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=OUkCmJn0RHI:RSFaO8_AYws:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/OUkCmJn0RHI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/OUkCmJn0RHI/fun-with-dynamic-objects-and-mef-in-c.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/09/fun-with-dynamic-objects-and-mef-in-c.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-2191524672528824463</guid><pubDate>Wed, 19 Aug 2009 16:14:00 +0000</pubDate><atom:updated>2009-11-07T12:37:56.278+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">WPF</category><category domain="http://www.blogger.com/atom/ns#">CSharp</category><title>MVVM - Binding Multiple Radio Buttons To a single Enum Property in WPF</title><description>I had a property in my View Model, of an Enum type, and wanted to bind multiple radio buttons to this.&lt;br /&gt;
&lt;br /&gt;
Firstly, I wrote a simple Enum to Bool converter, like this.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;public class EnumToBoolConverter : IValueConverter
    {
        #region IValueConverter Members

        public object Convert(object value, 
            Type targetType, object parameter, 
            System.Globalization.CultureInfo culture) 
        { 
            if (parameter.Equals(value)) 
                return true; 
            else 
                return false; 
        } 

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
        { 
            return parameter; 

        } 
        #endregion 

    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
And my enumeration is like&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;public enum CompanyTypes
    {
        Type1Comp,
        Type2Comp,
        Type3Comp
    }
&lt;/pre&gt;
Now, in my XAML, I provided the enumeration as the ConverterParameter, of the Converter we wrote earlier, like

&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;Window x:Class="WpfTestRadioButtons.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfTestRadioButtons"
    Title="Window1" Height="300" Width="300"&amp;gt;
    &amp;lt;Window.Resources&amp;gt;
        &amp;lt;local:EnumToBoolConverter x:Key="EBConverter"/&amp;gt;
    &amp;lt;/Window.Resources&amp;gt;
    &amp;lt;Grid&amp;gt;
        &amp;lt;StackPanel&amp;gt;
            &amp;lt;RadioButton IsChecked="{Binding Path=Type, 
                Converter={StaticResource EBConverter}, 
                ConverterParameter={x:Static local:CompanyTypes.Type1Comp}}" Content="Type1"/&amp;gt;
            &amp;lt;RadioButton IsChecked="{Binding Path=Type, 
                Converter={StaticResource EBConverter}, 
                ConverterParameter={x:Static local:CompanyTypes.Type2Comp}}" Content="Type2"/&amp;gt;
        &amp;lt;/StackPanel&amp;gt;

    &amp;lt;/Grid&amp;gt;
&amp;lt;/Window&amp;gt;


&lt;/pre&gt;
Now, in the view model, I exposed a property named Type, which is of the CompanyEnum type.

Like,

&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;public CompanyTypes Type 
        {
            get
            {
                return _type;
            }
            set
            {
                _type = value;
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs("Type"));

            }
        }
&lt;/pre&gt;
And it seems that I'm pretty much done. Alternatively, you can use the same idea to pass an integer, but in that case, you need to change the converter a bit. See the &lt;a href="http://amazedsaint.blogspot.com/2009/05/numtoboolconverter-simple.html"&gt;NumToBool converter&lt;/a&gt; I mentioned earlier :)

&lt;a href="http://amazedsaint.blogspot.com" style="display:none" rel="tag"&gt;CodeProject&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-2191524672528824463?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/I6tSfUOxPzo8E-_8Ot40N9Ijl6M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/I6tSfUOxPzo8E-_8Ot40N9Ijl6M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/I6tSfUOxPzo8E-_8Ot40N9Ijl6M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/I6tSfUOxPzo8E-_8Ot40N9Ijl6M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=XtLb4mUP21Y:1YY-_JTRVZY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=XtLb4mUP21Y:1YY-_JTRVZY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=XtLb4mUP21Y:1YY-_JTRVZY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=XtLb4mUP21Y:1YY-_JTRVZY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=XtLb4mUP21Y:1YY-_JTRVZY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=XtLb4mUP21Y:1YY-_JTRVZY:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=XtLb4mUP21Y:1YY-_JTRVZY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=XtLb4mUP21Y:1YY-_JTRVZY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=XtLb4mUP21Y:1YY-_JTRVZY:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/XtLb4mUP21Y" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/XtLb4mUP21Y/mvvm-binding-multiple-radio-buttons-to.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/08/mvvm-binding-multiple-radio-buttons-to.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-2522700131851982773</guid><pubDate>Mon, 03 Aug 2009 16:22:00 +0000</pubDate><atom:updated>2009-11-07T12:37:56.278+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">CSharp</category><category domain="http://www.blogger.com/atom/ns#">Programming-Tips</category><title>Creating an Operating System using C#</title><description>&lt;span style="font-size: medium;"&gt;&lt;span style="font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: 14px;"&gt;Have you ever wrote an&amp;nbsp;Operating&amp;nbsp;System, even if it is very simple? If you've ever tried, you know that it is a fun thing to do.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: medium;"&gt;&lt;span style="font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.traders.com/documentation/FEEDbk_docs/2009/04/IMAGES/close1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="153" src="http://www.traders.com/documentation/FEEDbk_docs/2009/04/IMAGES/close1.jpg" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;span style="font-size: 14px;"&gt;Long time back, in college, when I was doing my diploma and later my B-Tech graduation in Computer Science, I remember most of us got fascinated and inspired by the Linux kernel - and eventually most of us rolled out our own simple boot loaders and Operating Systems!!&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: medium;"&gt;&lt;span style="font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: 14px;"&gt;And most of us used Asm + C. As C is a very low level language - you can do a lot of things directly. Any of the C library methods (like malloc, printf, crlscr etc) need to be implemented first, to invoke them from C&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: medium;"&gt;&lt;span style="font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: medium;"&gt;&lt;span style="font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: 14px;"&gt;I'll give an example below.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: medium;"&gt;&lt;span style="font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
Let us see how the C library methods are implemented under the hood. We'll go with a clrscr example. When you implement such methods, you'll access system devices directly. For ex, for clrscr (clearing the screen) we know that the video memory is resident at 0xB8000. Hence, to write to screen or to clear it, we start by assigning a pointer to that location.&lt;br /&gt;
&lt;/div&gt;
&lt;div style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
In video.c&lt;br /&gt;
&lt;/div&gt;
&lt;pre class="prettyprint" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: whitesmoke; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New'; font-size: 14px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-height: 600px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; vertical-align: baseline; width: auto;"&gt;&lt;code style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New'; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;void&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; clrscr&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;()&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;

&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;unsigned&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;char&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;vidmem &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;unsigned&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;char&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;*)&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;0xB8000&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;const&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;long&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; size &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;80&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;25&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;long&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; loop&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;

&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;for&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;loop&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; loop&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;size&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; loop&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;++)&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;vidmem&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;++&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;0&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;*&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;vidmem&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;++&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;0xF&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;;&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
Let us write our mini kernel now. This will clear the screen when the control is handed over to our 'kernel' from the boot loader. In main.c&lt;br /&gt;
&lt;/div&gt;
&lt;pre class="prettyprint" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: whitesmoke; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New'; font-size: 14px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-height: 600px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; vertical-align: baseline; width: auto;"&gt;&lt;code style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New'; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;void&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; main&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;()&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&amp;nbsp; &amp;nbsp;clrscr&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;();&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;for&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(;;);&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
To compile our 'kernel', you might use gcc to compile it to a pure bin format.&lt;br /&gt;
&lt;/div&gt;
&lt;pre class="prettyprint" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: whitesmoke; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New'; font-size: 14px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-height: 600px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; vertical-align: baseline; width: auto;"&gt;&lt;code style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New'; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;gcc &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;ffreestanding &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;c main&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;c &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;o main&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;o
gcc &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;c video&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;c &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;o video&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;o
ld &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;e _main &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #2b91af; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Ttext&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;0x1000&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;o kernel&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;o main&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;o video&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;o
ld &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;i &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;e _main &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #2b91af; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Ttext&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;0x1000&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;o kernel&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;o main&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;o video&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;o
objcopy &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;R &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;note &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;R &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;comment &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;S &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;-&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;O binary kernel&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;o kernel&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;bin
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
If you noticed the ld parameters above, you see that we are specifying the default load location of your Kernel as 0x1000. Now, you need to create a boot loader. From your boot loader logic, you might want to pass control to your Kernel, like&lt;br /&gt;
&lt;/div&gt;
&lt;pre class="prettyprint" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: whitesmoke; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New'; font-size: 14px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-height: 600px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; vertical-align: baseline; width: auto;"&gt;&lt;code style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New'; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;jump &lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;08h&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;:&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;01000h&lt;/span&gt;&lt;span style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
You normally write your boot loader logic in Asm. Even before that, you may need to have a look at how a PC Boots -&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Booting" rel="nofollow" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0077cc; cursor: pointer; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;"&gt;Click Here&lt;/a&gt;.&lt;br /&gt;
&lt;/div&gt;
&lt;div style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
Better start with a tinier Operating system to explore. See this &lt;a href="http://www.acm.uiuc.edu/sigops/roll_your_own/"&gt;Roll Your Own OS Tutorial&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;/div&gt;
&lt;div style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;span style="font-size: x-large;"&gt;An Operating System in C#??&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
Now, what about writing an Operating System in C#? I recently came across &lt;a href="http://www.gocosmos.org/index.en.aspx"&gt;Cosmos&lt;/a&gt;, an excellent "Operating System Project". A cool idea. After you install the &lt;a href="http://www.gocosmos.org/Docs/UserKit/index.EN.aspx"&gt;Cosmos User Kit&lt;/a&gt;, you create a Cosmos boot project in Visual Studio, and run it.&lt;br /&gt;
&lt;br /&gt;
Cosmos includes a compiler&amp;nbsp;&lt;span style="font-family: sans-serif; font-size: 17px;"&gt;IL2CPU&amp;nbsp;&lt;span style="font-family: 'Times New Roman'; font-size: medium;"&gt;which'll convert your IL code to x86 code on the fly (it generates raw asm files and later uses NASM to assemble the same). The build task will also create a boot disk for you, to boot your OS from various emulators. Here you can see Cosmos running from my Virtual PC&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/__Mw4iY-4nuY/SncMZhHA8uI/AAAAAAAAAZ0/ndUY9EaQNdI/s1600-h/cosmos.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/__Mw4iY-4nuY/SncMZhHA8uI/AAAAAAAAAZ0/ndUY9EaQNdI/s400/cosmos.PNG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
After you install the &lt;a href="http://www.gocosmos.org/Docs/UserKit/index.EN.aspx"&gt;Cosmos user kit&lt;/a&gt;, you can Create a new Cosmos boot project from Visual Studio's New Project dialog box. I just went ahead and wrote some code in the Init method in the Program.cs file.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;  
       // Main entry point of the kernel
        public static void Init()
        {
            Cosmos.Kernel.Boot.Default();
            Console.WriteLine("Hi, From Amazedsaint Cosmos");
            Cosmos.Kernel.TextScreen.NewLine();
            Cosmos.Kernel.TextScreen.SetColors(ConsoleColor.Red, ConsoleColor.White);
            Console.WriteLine("Something red");
  
            while (true)
                ;
        }
&lt;/pre&gt;
&lt;br /&gt;
Run the project, and what is more interesting is the behind the scenes work the build will do for you. It'll show you a dialog box, so that you can choose from various build options. In my case, I've selected to deploy the 'OS' to Microsoft VPC.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.gocosmos.org/Docs/UserKit/0015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="403" src="http://www.gocosmos.org/Docs/UserKit/0015.png" width="420" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to take it to the next level, have a look at Cosmos source code, in Codeplex -&amp;nbsp;&lt;a href="http://cosmos.codeplex.com/"&gt;http://cosmos.codeplex.com/&lt;/a&gt;. Also, you might find this &lt;a href="http://www.gocosmos.org/Docs/Dev/index.EN.aspx"&gt;developer documentation&lt;/a&gt; handy.&lt;br /&gt;
&lt;br /&gt;
In fact, I blogged earlier a bit about &lt;a href="http://amazedsaint.blogspot.com/2008/12/five-super-cool-open-source-c-projects.html"&gt;Cosmos and few other interesting projects&lt;/a&gt;. Check out that post also, if you find this interesting.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-2522700131851982773?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EwfWrhPXYoHYD5dJ9TuclqdDqL0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EwfWrhPXYoHYD5dJ9TuclqdDqL0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EwfWrhPXYoHYD5dJ9TuclqdDqL0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EwfWrhPXYoHYD5dJ9TuclqdDqL0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=dMwsrrkpXzA:cf_uRqwe06s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=dMwsrrkpXzA:cf_uRqwe06s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=dMwsrrkpXzA:cf_uRqwe06s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=dMwsrrkpXzA:cf_uRqwe06s:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=dMwsrrkpXzA:cf_uRqwe06s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=dMwsrrkpXzA:cf_uRqwe06s:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=dMwsrrkpXzA:cf_uRqwe06s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=dMwsrrkpXzA:cf_uRqwe06s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=dMwsrrkpXzA:cf_uRqwe06s:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/dMwsrrkpXzA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/dMwsrrkpXzA/back-to-basics-creating-simple-os-in.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/__Mw4iY-4nuY/SncMZhHA8uI/AAAAAAAAAZ0/ndUY9EaQNdI/s72-c/cosmos.PNG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/08/back-to-basics-creating-simple-os-in.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-7031847932436170546</guid><pubDate>Sat, 18 Jul 2009 15:27:00 +0000</pubDate><atom:updated>2009-10-10T14:28:53.738+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Weekend Hacks</category><title>Weekend Hacks - Cool Links For Silverlight, CLR, VS2010</title><description>&lt;br /&gt;
&lt;div style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;
&lt;img border="0" height="96" src="http://img.tfd.com/wn/4F/C0C47-examine.gif" width="83" /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 16px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: inherit;"&gt;About&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://amazedsaint.blogspot.com/search/label/Weekend%20Hacks"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: inherit;"&gt;Week End Hacks&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;- Most weekends I do some digging around new and emerging technology and geek stuff. I do this by picking the links I bookmarked, or by going through the tweets I&amp;nbsp;Favorited&amp;nbsp;in Twitter.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Links I explored this weekend.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://bit.ly/33ZHM9"&gt;12 Silverlight developer videos that you can't afford to miss&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bit.ly/1mAvSH"&gt;CLR Inside out - Building Tuple&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Silverlight toolkit - &lt;a href="http://tinyurl.com/79msty"&gt;Demo here&lt;/a&gt; &amp;amp; &lt;a href="http://silverlight.codeplex.com/"&gt;Code here&lt;/a&gt; &amp;nbsp;- Demos work nicely in my Chrome :)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bit.ly/WaswD"&gt;Excellent Developer Guides on WPF, Prism, Silverlight&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bit.ly/TKkPp"&gt;Prism + Silverlight Resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://silverlightc64.codeplex.com/"&gt;A commodore 64 emulator ported to Microsoft Silverlight 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/vsxteam/archive/2009/05/20/visual-studio-2010-beta-1-start-page-customization.aspx"&gt;Customizing your VS 2010 startpage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bit.ly/6zuBF"&gt;VS 2010 User interface guideline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DSL SDK is no longer a part of VS SDK. You Need to install DSL SDK 2010 beta separately &lt;a href="http://tinyurl.com/n69uqb"&gt;from here&amp;nbsp;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-7031847932436170546?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/o5mgYYUfiu7apfKuPNwEBr1K5As/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o5mgYYUfiu7apfKuPNwEBr1K5As/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/o5mgYYUfiu7apfKuPNwEBr1K5As/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o5mgYYUfiu7apfKuPNwEBr1K5As/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=WUvmPKtrVOU:i2kEe6_43VM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=WUvmPKtrVOU:i2kEe6_43VM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=WUvmPKtrVOU:i2kEe6_43VM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=WUvmPKtrVOU:i2kEe6_43VM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=WUvmPKtrVOU:i2kEe6_43VM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=WUvmPKtrVOU:i2kEe6_43VM:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=WUvmPKtrVOU:i2kEe6_43VM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=WUvmPKtrVOU:i2kEe6_43VM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=WUvmPKtrVOU:i2kEe6_43VM:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/WUvmPKtrVOU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/WUvmPKtrVOU/weekend-hacks-cool-links-to-checkout.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/07/weekend-hacks-cool-links-to-checkout.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-1581904982666649920</guid><pubDate>Thu, 02 Jul 2009 19:34:00 +0000</pubDate><atom:updated>2009-11-07T12:37:56.278+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Back To Basics</category><category domain="http://www.blogger.com/atom/ns#">CSharp</category><title>Back To Basics - Creating A Fluent Interface in C# -  For training a bunch of Dogs</title><description>&lt;br /&gt;
&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;
&lt;a href="http://t1.gstatic.com/images?q=tbn:z9ypytoY8udP6M:http://www.cksinfo.com/clipart/toys/abc-blocks.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="93" src="http://t1.gstatic.com/images?q=tbn:z9ypytoY8udP6M:http://www.cksinfo.com/clipart/toys/abc-blocks.png" width="96" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;i&gt;About&amp;nbsp;&lt;/i&gt;&lt;a href="http://amazedsaint.blogspot.com/search/label/Back%20To%20Basics"&gt;&lt;b&gt;&lt;i&gt;Back To Basics&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;&lt;i&gt;&amp;nbsp;- It's often good to look back and fill any gaps we might be having, in certain aspects of the language or framework we use. I'll be examining and blogging about some well known features of C# and .NET, in&amp;nbsp;&lt;/i&gt;&lt;b&gt;&lt;i&gt;Back To Basics series&lt;/i&gt;&lt;/b&gt;&lt;i&gt;&amp;nbsp;- Probably in a bit more detail.&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
Today &lt;a href="http://twitter.com/VinayakKamat/status/2440745544"&gt;Vin&lt;/a&gt; just tweeted "FI(Fluent Interface) - when you use method chaining, after finishing the functionality, "return this", and that's how you make it fluent".&lt;br /&gt;
&lt;br /&gt;
Thought about writing a detailed post on this, just to demonstrate various possibilities of Fluent programming. 

&lt;br /&gt;
&lt;h3&gt;



Chaining Methods - A Simple Scenario&lt;/h3&gt;
&lt;br /&gt;
Assuming that you are interested in training animals, let us start with a simple ITrainable interface. :)&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;      
     /// &lt;summary&gt;
    /// Anything that is trainable
    /// &lt;/summary&gt;
    public interface ITrainable
    {
        ITrainable Train(string skill);
        ITrainable Do(string skill);
    }
&lt;/pre&gt;
&lt;br /&gt;
Well, nothing fancy there. Let us go ahead and create a Dog Class, which implements this interface. The only interesting piece you may find in the Dog class is, all methods are returning a type of ITrainable. As long as our Dog class implements ITrainable, we can return  'this', i.e the current Dog Instance. &lt;br /&gt;
&lt;pre class="c#" name="code"&gt;  
    /// &lt;summary&gt;
    /// Our simple dog class
    /// &lt;/summary&gt;
    public class Dog : ITrainable
    {
        public string Name { get; set; }
        public List&amp;lt;string&amp;gt; Skills { get; set; }

        public Dog(string name)
        {
            Console.WriteLine();
            Console.WriteLine("Dog " + name +
                   " created");

            Name = name;
            Skills = new List&amp;lt;string&amp;gt;();
        }

        //Let us train this skill to our dog
        //Note that we are returning 'this', so that
        //we can continue training or ask the dog to perform
        public ITrainable Train(string skill)
        {
            Console.WriteLine("Dog " + Name +
                    " learned " + skill);
            this.Skills.Add(skill);
            return this;
        }

        //Let us ask the dog to perform this skill
        public ITrainable Do(string skill)
        {
            if (Skills.Contains(skill))
                Console.WriteLine("Dog " + Name + 
                    " is doing " + skill);
            else
                Console.WriteLine("Dog " + Name + 
                    ": Don't know how to " + skill);

            return this;

        }
    }
&lt;/pre&gt;
&lt;br /&gt;
Now, we are ready to train our Dog fluently. Like,
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;       
           //Train one dog, Hope your name is not Bobby ;)
            var dog = new Dog("Bobby");
            dog.Train("Running").Train("Eating")
                .Do("Running").Do("Eating");
&lt;/pre&gt;
&lt;br /&gt;
As you can see, we are chaining the method calls, because in each call, we are returning an object of type ITrainable. You'll see what Bobby is doing in the console
&lt;br /&gt;
&lt;pre&gt;Dog Bobby created
Dog Bobby learned Running
Dog Bobby learned Eating
Dog Bobby is doing Running
Dog Bobby is doing Eating
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;



Chaining Methods - For Collections&lt;/h3&gt;
&lt;br /&gt;
Now, let us do something more interesting. Let us create a couple of extension methods for all collections of ITrainable. We do this by writing an extension method for IEnumerable&amp;lt;ITrainable&amp;gt;. If you see, our extension methods are accepting a bunch of trainable organisms(?) (read, IEnumerable&amp;lt;ITrainable&amp;gt;) and returns the same.
&lt;br /&gt;
&lt;br /&gt;
Leave out the Console.WriteLine(), it is there just for some pretty printing.
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;      

    /// &lt;summary&gt;
    /// Let us fluently train a bunch of Trainable
    /// animals
    /// &lt;/summary&gt;
    public static class TrainableExtensions
    {
        //Note that we are returning the IEnumerable&amp;lt;ITrainable&amp;gt;
        public static IEnumerable&amp;lt;ITrainable&amp;gt;
            Train(this IEnumerable&amp;lt;ITrainable&amp;gt; flock, string skill)
        {
            foreach (var member in flock)
                member.Train(skill);
            Console.WriteLine();
            return flock;
        }

        //Ask all members to perform a skill
        public static IEnumerable&amp;lt;ITrainable&amp;gt;
            Do(this IEnumerable&amp;lt;ITrainable&amp;gt; flock, string skill)
        {
            foreach (var member in flock)
                member.Do(skill); 
            Console.WriteLine();
            return flock;
        }

    }
&lt;/pre&gt;
&lt;br /&gt;
Now, let us create few dogs, and train them together :)
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;        
          //Let us create the dogs and train them
            var dogs = new List&amp;lt;ITrainable&amp;gt;{new Dog("Jimmy"),
                                     new Dog("Sando"),
                                     new Dog("Rob")};

            //Now train them
            dogs.Train("EatingFood").Train("Running")
                 .Do("EatingFood")
                 .Train("JumpingToRing").Do("Running");
&lt;/pre&gt;
&lt;br /&gt;
And you'll see what they are doing, in this order.
&lt;br /&gt;
&lt;pre&gt;Dog Jimmy created
Dog Sando created
Dog Rob created

Dog Jimmy learned EatingFood
Dog Sando learned EatingFood
Dog Rob learned EatingFood

Dog Jimmy learned Running
Dog Sando learned Running
Dog Rob learned Running

Dog Jimmy is doing EatingFood
Dog Sando is doing EatingFood
Dog Rob is doing EatingFood

Dog Jimmy learned JumpingToRing
Dog Sando learned JumpingToRing
Dog Rob learned JumpingToRing

Dog Jimmy is doing Running
Dog Sando is doing Running
Dog Rob is doing Running
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, as LINQ methods are essentially extension methods on top of IEnumerable&amp;lt;T&amp;gt;, you can mix and match the extension methods we just wrote, with LINQ methods. For example, if we decide only Rob should learn a special skill (JumpingRing), you can do this.
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;     
              dogs.Train("EatingFood").Skip(2)
                 .Train("JumpingRing").Union(dogs)
                 .Train("TakingPaper");
&lt;/pre&gt;
&lt;br /&gt;
And you'll see how this works
&lt;br /&gt;
&lt;pre&gt;Dog Jimmy learned EatingFood
Dog Sando learned EatingFood
Dog Rob learned EatingFood

Dog Rob learned JumpingRing

Dog Rob learned TakingPaper
Dog Jimmy learned TakingPaper
Dog Sando learned TakingPaper
&lt;/pre&gt;
&lt;br /&gt;
And finally, Fluent APIs can be used for much more useful tasks (If you havn't yet realized, lol). Few fluent API's I've come across&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ayende.com/projects/rhino-mocks.aspx"&gt;Rhino Mocks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Verdana; font-size: 13px;"&gt;&lt;a href="http://flimflan.com/blog/ReadableRegularExpressions.aspx"&gt;ReadableRex&lt;/a&gt; - &lt;a href="http://flimflan.com/blog/ReadableRegularExpressions.aspx"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&amp;nbsp;- A fluent Regex API&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Verdana; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;a href="http://code.google.com/p/tweetsharp/"&gt;Tweet# - A fluent client API for Twitter&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
Happy coding!!

&lt;a href="http://amazedsaint.blogspot.com/" rel="tag" style="display: none;"&gt;CodeProject&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-1581904982666649920?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/u2k9n70Dgo2QSXzqkVPeuIjUKco/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u2k9n70Dgo2QSXzqkVPeuIjUKco/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/u2k9n70Dgo2QSXzqkVPeuIjUKco/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u2k9n70Dgo2QSXzqkVPeuIjUKco/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=4uUOcgcxm-o:KcqSFcpev8Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=4uUOcgcxm-o:KcqSFcpev8Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=4uUOcgcxm-o:KcqSFcpev8Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=4uUOcgcxm-o:KcqSFcpev8Y:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=4uUOcgcxm-o:KcqSFcpev8Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=4uUOcgcxm-o:KcqSFcpev8Y:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=4uUOcgcxm-o:KcqSFcpev8Y:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=4uUOcgcxm-o:KcqSFcpev8Y:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=4uUOcgcxm-o:KcqSFcpev8Y:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/4uUOcgcxm-o" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/4uUOcgcxm-o/creating-fluent-interface-in-c-for.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/07/creating-fluent-interface-in-c-for.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-1098176388482563481</guid><pubDate>Wed, 24 Jun 2009 08:59:00 +0000</pubDate><atom:updated>2009-10-10T12:03:22.912+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">WCF</category><title>WCF Instance Context Mode and Bindings</title><description>&lt;br /&gt;
As well known, the instance context mode property of Service&amp;nbsp;Behavior&amp;nbsp;can have these three values.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;PerCall - New instance is created for each client request.&lt;/li&gt;
&lt;li&gt;PerSession - &amp;nbsp;New instance is created for each new client session, and will be available throughout the session&lt;/li&gt;
&lt;li&gt;Single - Only one instance handles for all client requests throughout the application&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;[ServiceBehavior(
     InstanceContextMode = InstanceContextMode.PerSession)]
 public class Service1 : IService1
    { 
       ...
    }
&lt;/pre&gt;
&lt;br /&gt;
Now, what is the default value for the InstanceContextMode? I wrote a quick WCF app, and drilled down in debug mode.

&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/__Mw4iY-4nuY/SkHp02OE_nI/AAAAAAAAAZQ/t1Pmxenm0T4/s1600-h/persessions.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/__Mw4iY-4nuY/SkHp02OE_nI/AAAAAAAAAZQ/t1Pmxenm0T4/s400/persessions.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As you might see, if you examine OperationContext.Current.InstanceContext and examine the Behaviour, you'll find useSession set to true, which means, it is PerSession.&lt;br /&gt;
&lt;br /&gt;
But wait, let me change the binding to basicHttpBinding from wsHttpBinding - and let us have a look again.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/__Mw4iY-4nuY/SkHqXMSnB1I/AAAAAAAAAZY/E70I8G8tqs8/s1600-h/percall.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/__Mw4iY-4nuY/SkHqXMSnB1I/AAAAAAAAAZY/E70I8G8tqs8/s400/percall.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now you'll find that useSession is false, which means, the context mode is defaulting to PerCall, because basicHttpBinding can't support sessions. So the inference is, for bindings that support session, the default is PerSessions, other wise it is perCall.&lt;br /&gt;
&lt;br /&gt;
Now, change the context mode in your service attribute to Single, and see what happens to the singleton variable in Behavior, in the above watch.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-1098176388482563481?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/O8xYBtAAnNUea_16sfIYkgn3b1s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O8xYBtAAnNUea_16sfIYkgn3b1s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/O8xYBtAAnNUea_16sfIYkgn3b1s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O8xYBtAAnNUea_16sfIYkgn3b1s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=HD1TJjdPePM:zoOr6nOLwoI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=HD1TJjdPePM:zoOr6nOLwoI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=HD1TJjdPePM:zoOr6nOLwoI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=HD1TJjdPePM:zoOr6nOLwoI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=HD1TJjdPePM:zoOr6nOLwoI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=HD1TJjdPePM:zoOr6nOLwoI:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=HD1TJjdPePM:zoOr6nOLwoI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=HD1TJjdPePM:zoOr6nOLwoI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=HD1TJjdPePM:zoOr6nOLwoI:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/HD1TJjdPePM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/HD1TJjdPePM/wcf-instance-context-mode-and-bindings.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/__Mw4iY-4nuY/SkHp02OE_nI/AAAAAAAAAZQ/t1Pmxenm0T4/s72-c/persessions.PNG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/06/wcf-instance-context-mode-and-bindings.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-1604419266040966672</guid><pubDate>Sun, 21 Jun 2009 16:11:00 +0000</pubDate><atom:updated>2009-10-10T14:37:52.553+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Weekend Hacks</category><title>Weekend Hacks - .NET Soup for the passionate Soul</title><description>&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;
&lt;div style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;
&lt;span style="font-family: inherit;"&gt;&lt;img border="0" height="96" src="http://img.tfd.com/wn/4F/C0C47-examine.gif" width="83" /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="font-family: inherit;"&gt;About&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://amazedsaint.blogspot.com/search/label/Weekend%20Hacks"&gt;&lt;b&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: inherit;"&gt;Week End Hacks&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;- Most weekends I do some digging around new and emerging technology and geek stuff. I do this by picking the links I bookmarked, or by going through the tweets I&amp;nbsp;Favorited&amp;nbsp;in Twitter.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;This weekend, it was some real fun and seems that I was frantically going through various stuff, partly related to a fun project I'm doing with SL and Live Mesh.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;I was just going through my browser history, and got amazed with the stuff I went through this weekend.&amp;nbsp;Here is a couple of&amp;nbsp;useful&amp;nbsp;links you might want to check out.&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-family: inherit;"&gt;1&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="http://mef.codeplex.com/" style="background-image: url(chrome://favicon/http://mef.codeplex.com/); background-position: 0px 1px; background-repeat: no-repeat; padding-bottom: 4px; padding-left: 22px; padding-right: 0px; padding-top: 1px; text-decoration: none;"&gt;Managed Extensibility Framework - Home&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;span style="font-weight: normal;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="font-family: inherit;"&gt;MEF enables greater reuse of applications and components. Using MEF, .NET applications can make the shift from being statically compiled to dynamically composed. If you are building extensible applications, extensible frameworks and application extensions, then MEF is for you.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-family: inherit;"&gt;2&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="http://stackoverflow.com/questions/180939/-net-must-have-development-tools" style="background-image: url(chrome://favicon/http://stackoverflow.com/questions/180939/-net-must-have-development-tools); background-position: 0px 1px; background-repeat: no-repeat; padding-bottom: 4px; padding-left: 22px; padding-right: 0px; padding-top: 1px; text-decoration: none;"&gt;.NET "must-have" development tools - Stack Overflow&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;span style="font-weight: normal;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="font-family: inherit;"&gt;A good list of free tools available for .NET development&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;3&lt;/span&gt;&lt;/b&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;a href="http://mscui.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25602" style="background-image: url(chrome://favicon/http://mscui.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25602); background-position: 0px 1px; background-repeat: no-repeat; padding-bottom: 4px; padding-left: 22px; padding-right: 0px; padding-top: 1px; text-decoration: none;"&gt;&lt;span style="font-family: inherit;"&gt;Microsoft Health Common User Interface - Release: Release&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="font-family: inherit;"&gt;An LOB reference application in Silverlight&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-family: inherit;"&gt;4&lt;/span&gt;&lt;a href="http://dotnetaddict.dotnetdevelopersjournal.com/sl3oob_mewa.htm" style="background-image: url(chrome://favicon/http://dotnetaddict.dotnetdevelopersjournal.com/sl3oob_mewa.htm); background-position: 0px 1px; background-repeat: no-repeat; padding-bottom: 4px; padding-left: 22px; padding-right: 0px; padding-top: 1px; text-decoration: none;"&gt;&lt;span style="font-family: inherit;"&gt;Silverlight 3 Out-of-Browser Apps vs. Live Framework Mesh-Enabled Web Application&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="font-family: inherit;"&gt;Good read if you are interested in Silverlight and Live Mesh&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-family: inherit;"&gt;5&lt;/span&gt;&lt;a href="http://dev.live.com/liveframework/sdk/" style="background-image: url(chrome://favicon/http://dev.live.com/liveframework/sdk/); background-position: 0px 1px; background-repeat: no-repeat; padding-bottom: 4px; padding-left: 22px; padding-right: 0px; padding-top: 1px; text-decoration: none;"&gt;&lt;span style="font-family: inherit;"&gt;Live Framework SDK and Tools&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="font-family: inherit;"&gt;Started with a weekend hack on creating a Live Mesh application. If you want to start with Live Mesh, download this SDK and tools&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="white-space: normal;"&gt;&lt;span style="font-family: inherit;"&gt;6&lt;/span&gt;&lt;/span&gt;&lt;a href="http://code.msdn.microsoft.com/glimmer/Wiki/View.aspx?title=GlimmerSites&amp;amp;referringTitle=Home" style="background-image: url(chrome://favicon/http://code.msdn.microsoft.com/glimmer/Wiki/View.aspx?title=GlimmerSites&amp;amp;referringTitle=Home); background-position: 0px 1px; background-repeat: no-repeat; padding-bottom: 4px; padding-left: 22px; padding-right: 0px; padding-top: 1px; text-decoration: none;"&gt;&lt;span style="font-family: inherit;"&gt;Glimmer: a jQuery Interactive Design Tool - Home&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="font-family: inherit;"&gt;Glimmer helps you create nice JQuery interfaces quickly and easily. Must see if you are a fan of JQuery&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-family: inherit;"&gt;7&lt;/span&gt;&lt;a href="http://blogs.msdn.com/coding4fun/archive/2008/02/24/7883342.aspx" style="background-image: url(chrome://favicon/http://blogs.msdn.com/coding4fun/archive/2008/02/24/7883342.aspx); background-position: 0px 1px; background-repeat: no-repeat; padding-bottom: 4px; padding-left: 22px; padding-right: 0px; padding-top: 1px; text-decoration: none;"&gt;&lt;span style="font-family: inherit;"&gt;Coding4Fun : Twitterlight: A Silverlight Twitter client&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="font-family: inherit;"&gt;Have a look at this silverlight twitter client.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;b&gt;&lt;span style="font-family: inherit;"&gt;8&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style="white-space: nowrap;"&gt;&lt;a href="http://www.wpfdev.com/2008/11/19/building-a-live-mesh-silverlight-application/" style="background-image: url(chrome://favicon/http://www.wpfdev.com/2008/11/19/building-a-live-mesh-silverlight-application/); background-position: 0px 1px; background-repeat: no-repeat; padding-bottom: 4px; padding-left: 22px; padding-right: 0px; padding-top: 1px;"&gt;&lt;b&gt;&lt;span style="font-family: inherit;"&gt;Building a Live Mesh Silverlight Application | WPF Dev&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style="white-space: normal;"&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;Some good intro towards starting building your on Live Mesh&amp;nbsp;silver light&amp;nbsp;application.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;b&gt;&lt;span style="font-weight: normal; white-space: normal;"&gt;&lt;span style="white-space: nowrap;"&gt;&lt;span style="white-space: normal;"&gt;&lt;span style="font-family: inherit;"&gt;Planning to update cool links from my history on every weekend, &lt;/span&gt;&lt;a href="http://feeds2.feedburner.com/amazedsaint/articles"&gt;&lt;span style="font-family: inherit;"&gt;Subscribe &lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;or &lt;/span&gt;&lt;a href="http://twitter.com/amazedsaint"&gt;&lt;span style="font-family: inherit;"&gt;Follow me on twitter&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-1604419266040966672?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2EZik69JqVaHNZvMl7MhxRSu3Rg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2EZik69JqVaHNZvMl7MhxRSu3Rg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2EZik69JqVaHNZvMl7MhxRSu3Rg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2EZik69JqVaHNZvMl7MhxRSu3Rg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=IA9krH_ax7A:tFH0K4gl8W8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=IA9krH_ax7A:tFH0K4gl8W8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=IA9krH_ax7A:tFH0K4gl8W8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=IA9krH_ax7A:tFH0K4gl8W8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=IA9krH_ax7A:tFH0K4gl8W8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=IA9krH_ax7A:tFH0K4gl8W8:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=IA9krH_ax7A:tFH0K4gl8W8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=IA9krH_ax7A:tFH0K4gl8W8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=IA9krH_ax7A:tFH0K4gl8W8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/IA9krH_ax7A" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/IA9krH_ax7A/weekend-hacks-net-soup-for-soul.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/06/weekend-hacks-net-soup-for-soul.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-8148927845122221282</guid><pubDate>Sat, 20 Jun 2009 09:17:00 +0000</pubDate><atom:updated>2009-11-07T12:37:56.279+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Dynamic</category><category domain="http://www.blogger.com/atom/ns#">.NET 4.0</category><category domain="http://www.blogger.com/atom/ns#">CSharp</category><title>Dynamic Language Runtime and Lambda Expressions</title><description>Something interesting about the Dynamic Language Runtime API in .NET 4.0&lt;br /&gt;
&lt;br /&gt;
Dynamic objects can't be used with LINQ queries. If you look at it one way, this seems obvious. Consider this following code
&lt;br /&gt;
&lt;pre&gt;dynamic dogList =GetMyDynamicList();

//Trying to find first dog with age 2, but this doesn't work
var result = dogList.FindFirst(dog =&amp;gt; dog.Age==2);

&lt;/pre&gt;
&lt;br /&gt;
If FindFirst is an extension method, there is no way DLR can detect that, because dogList is a dynamic object. 
&lt;br /&gt;
&lt;br /&gt;
Even for instance method calls of a dynamic object, you can't pass a lambda expression, as lambda expressions cannot appear as arguments to a dynamic method call. The compiler cannot bind an anonymous function without knowing what type it is converted to.
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update:
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
In my reply to &lt;a href="http://stackoverflow.com/questions/1021296/what-are-the-limitations-of-dynamic-language-runtime-in-net-4-0"&gt;this question @ stack overflow&lt;/a&gt;, &lt;a href="http://stackoverflow.com/users/22656/jon-skeet"&gt;John Skeet&lt;/a&gt; pointed that&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial; font-size: 14px; font-weight: normal; line-height: 18px;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;div style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
You&amp;nbsp;&lt;em style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; font-style: italic; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;can&lt;/em&gt;&amp;nbsp;use anonymous functions, you just have to cast them first:&lt;/div&gt;
&lt;pre class="prettyprint" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: whitesmoke; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New'; font-size: 14px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-height: 600px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; vertical-align: baseline; width: auto;"&gt;&lt;code style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New'; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="pln" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;dynamic list &lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt;&lt;span class="pln" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span class="kwd" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;new&lt;/span&gt;&lt;span class="pln" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span class="typ" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #2b91af; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;List&lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kwd" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;string&lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&amp;gt;()&lt;/span&gt;&lt;span class="pln" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;span class="pln" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span class="str" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;"10"&lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt;&lt;span class="pln" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span class="str" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;"20"&lt;/span&gt;&lt;span class="pln" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;};&lt;/span&gt;&lt;span class="pln" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
dynamic converted &lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt;&lt;span class="pln" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; list&lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span class="typ" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #2b91af; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;ConvertAll&lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;((&lt;/span&gt;&lt;span class="typ" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #2b91af; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Func&lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kwd" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;string&lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;,&lt;/span&gt;&lt;span class="pln" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span class="kwd" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&amp;gt;)&lt;/span&gt;&lt;span class="pln" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="pln" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;x &lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span class="kwd" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;int&lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span class="typ" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #2b91af; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Parse&lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="pln" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;x&lt;/span&gt;&lt;span class="pun" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;)));&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

See the above question in stack overflow, for more interesting tips from Jon
&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-8148927845122221282?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3nZOKqGtJshtfP3hIib7IBxZWiM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3nZOKqGtJshtfP3hIib7IBxZWiM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3nZOKqGtJshtfP3hIib7IBxZWiM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3nZOKqGtJshtfP3hIib7IBxZWiM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=qmGK0oS2Up0:S-Dc5kXXpR0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=qmGK0oS2Up0:S-Dc5kXXpR0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=qmGK0oS2Up0:S-Dc5kXXpR0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=qmGK0oS2Up0:S-Dc5kXXpR0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=qmGK0oS2Up0:S-Dc5kXXpR0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=qmGK0oS2Up0:S-Dc5kXXpR0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=qmGK0oS2Up0:S-Dc5kXXpR0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=qmGK0oS2Up0:S-Dc5kXXpR0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=qmGK0oS2Up0:S-Dc5kXXpR0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/qmGK0oS2Up0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/qmGK0oS2Up0/dynamic-language-runtime-and-lambda.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/06/dynamic-language-runtime-and-lambda.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-342000026121315894</guid><pubDate>Wed, 17 Jun 2009 05:57:00 +0000</pubDate><atom:updated>2009-10-10T11:58:57.913+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>Skillset required for working in a Silverlight Project</title><description>&lt;span style="border-collapse: collapse; font-family: Arial; font-size: 14px; line-height: 18px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
Recently I was requested by the sourcing team to list down the skill set required for candidates for a Silverlight project. Here is something that I wrote as Job Descriptions, for each role.&lt;br /&gt;
&lt;/div&gt;
&lt;div style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
UX Designer Profile&lt;br /&gt;
&lt;/div&gt;
&lt;ul style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; list-style-image: initial; list-style-position: initial; list-style-type: disc; margin-bottom: 1em; margin-left: 30px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Ability to visualize and create user experiences, and to translate them to UI designs using Expression Blend&lt;/li&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Excellent understanding of XAML and capabilities of Silverlight&lt;/li&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Excellent understanding of creating and applying styles and templates&lt;/li&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Ideal candidate will have been working with Silverlight 1.0 since its inception, with examples showing level of expertise with an understanding of enhancements made with 2.0 and 3.0.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
Silverlight Architect&lt;br /&gt;
&lt;/div&gt;
&lt;ul style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; list-style-image: initial; list-style-position: initial; list-style-type: disc; margin-bottom: 1em; margin-left: 30px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Ability to guide the team by putting in place the required tools and frameworks (end to end) for Silverlight specific projects&lt;/li&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Experience using Expression Blend and Visual Studio for Silverlight application development&lt;/li&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Good understanding of XAML Styles, Triggers, Observable Collection, Data Binding Methods, Model View View-Model (MVVM) pattern, Navigation patterns&lt;/li&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;XML and LINQ within Silverlight&lt;/li&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;All aspects of Silverlight framework including DLR, Isolated storage etc&lt;/li&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Understanding about essential application blocks like Composite application block (Prism) Excellent understanding on using RIA, WCF services and ADO.NET Entity framework services with Silverlight&lt;/li&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Excellent knowledge of development within .NET 3.0 &amp;amp; 3.5 Framework&lt;/li&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Must understand the fundamentals of software development, including best practices and OOP design patterns. An understanding of cross-browser Front-end development issues is important&lt;/li&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Knowledge about 3rd party UI libraries&lt;/li&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Familiarity in Live Mesh technologies&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
Silverlight Developer&lt;br /&gt;
&lt;/div&gt;
&lt;ul style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; list-style-image: initial; list-style-position: initial; list-style-type: disc; margin-bottom: 1em; margin-left: 30px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Experience using Expression Blend and Visual Studio for Silverlight application development&lt;/li&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Excellent C# and XAML skills&lt;/li&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Experience in using MVVM&lt;/li&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Strong JavaScript skills&lt;/li&gt;
&lt;li style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: transparent; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Working knowledge of development within .NET 3.0 &amp;amp; 3.5 Framework&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-342000026121315894?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wtBLPi_I98tAUT0D3CQa0ixQpZw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wtBLPi_I98tAUT0D3CQa0ixQpZw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wtBLPi_I98tAUT0D3CQa0ixQpZw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wtBLPi_I98tAUT0D3CQa0ixQpZw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=FGj6l0N0FQc:dDdjiyuMK7k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=FGj6l0N0FQc:dDdjiyuMK7k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=FGj6l0N0FQc:dDdjiyuMK7k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=FGj6l0N0FQc:dDdjiyuMK7k:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=FGj6l0N0FQc:dDdjiyuMK7k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=FGj6l0N0FQc:dDdjiyuMK7k:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=FGj6l0N0FQc:dDdjiyuMK7k:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=FGj6l0N0FQc:dDdjiyuMK7k:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=FGj6l0N0FQc:dDdjiyuMK7k:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/FGj6l0N0FQc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/FGj6l0N0FQc/staffing-silverlight-project.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/06/staffing-silverlight-project.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-1818020279631911353</guid><pubDate>Fri, 12 Jun 2009 11:50:00 +0000</pubDate><atom:updated>2009-11-07T12:37:56.279+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Design And Architecture</category><category domain="http://www.blogger.com/atom/ns#">CSharp</category><title>Published Software Design Patterns For Everyone Ebook</title><description>&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;Aggregated some of my earlier articles on design patterns (I published in code project), and published an e-book on the same over Scribd. The objective is to&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="border-collapse: collapse; white-space: pre-wrap;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;introduce software design patterns to you in a simple, human readable, and funny (?) way - in the context of designing a soccer engine - By discussing the thought process behind applying design patterns&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: arial; font-size: 13px; white-space: pre;"&gt;&lt;/span&gt;&lt;a bitly="BITLY_PROCESSED" href="http://www.scribd.com/doc/16352479/Software-Design-Patterns-Made-Simple" style="display: block; font-family: Helvetica,Arial,Sans-serif; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; margin: 12px auto 6px; text-decoration: underline;" title="View Software Design Patterns Made Simple on Scribd"&gt;Software Design Patterns Made Simple&lt;/a&gt; &lt;object align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" height="450" id="doc_217937238722354" name="doc_217937238722354" rel="media:document" resource="http://d.scribd.com/ScribdViewer.swf?document_id=16352479&amp;amp;access_key=key-1pttjn6y90cfv2xhvli6&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode=" width="100%" xmlns:dc="http://purl.org/dc/terms/" xmlns:media="http://search.yahoo.com/searchmonkey/media/"&gt;  &lt;param name="movie" value="http://d.scribd.com/ScribdViewer.swf?document_id=16352479&amp;amp;access_key=key-1pttjn6y90cfv2xhvli6&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode="&gt;









   &lt;param name="quality" value="high"&gt;









   &lt;param name="play" value="true"&gt;









  &lt;param name="loop" value="true"&gt;









   &lt;param name="scale" value="showall"&gt;









  &lt;param name="wmode" value="opaque"&gt;









   &lt;param name="devicefont" value="false"&gt;









  &lt;param name="bgcolor" value="#ffffff"&gt;









   &lt;param name="menu" value="true"&gt;









  &lt;param name="allowFullScreen" value="true"&gt;









   &lt;param name="allowScriptAccess" value="always"&gt;









   &lt;param name="salign" value=""&gt;









        &lt;embed src="http://d.scribd.com/ScribdViewer.swf?document_id=16352479&amp;amp;access_key=key-1pttjn6y90cfv2xhvli6&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode=" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_217937238722354_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle"  height="500" width="450"&gt;&lt;/embed&gt;             &lt;span rel="media:thumbnail" href="http://i.scribd.com/public/images/uploaded/37616403/3SAxytFpBNCYRK_thumbnail.jpeg"&gt;&lt;/span&gt;              &lt;/object&gt; &lt;br /&gt;
&lt;div style="display: block; font-family: Helvetica,Arial,Sans-serif; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; margin: 6px auto 3px;"&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-1818020279631911353?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pdtTuwazx5glSsS4NYyetrNPAP4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pdtTuwazx5glSsS4NYyetrNPAP4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pdtTuwazx5glSsS4NYyetrNPAP4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pdtTuwazx5glSsS4NYyetrNPAP4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=QqfCqKf6ysE:Q8fHUUAydgM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=QqfCqKf6ysE:Q8fHUUAydgM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=QqfCqKf6ysE:Q8fHUUAydgM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=QqfCqKf6ysE:Q8fHUUAydgM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=QqfCqKf6ysE:Q8fHUUAydgM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=QqfCqKf6ysE:Q8fHUUAydgM:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=QqfCqKf6ysE:Q8fHUUAydgM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=QqfCqKf6ysE:Q8fHUUAydgM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=QqfCqKf6ysE:Q8fHUUAydgM:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/QqfCqKf6ysE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/QqfCqKf6ysE/software-design-patterns-for-everyone.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/06/software-design-patterns-for-everyone.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-7357297795534524975</guid><pubDate>Fri, 22 May 2009 05:39:00 +0000</pubDate><atom:updated>2009-10-10T11:58:57.914+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">WPF</category><title>NumToBoolConverter - A simple IValueConverter implementation</title><description>Some 'Beginner's' stuff. One good thing about WPF is the ability to specify custom converters, when you do the binding.&lt;p&gt;

Here is a simple IValueConverter implementation, to convert an int value (1 or 0) to corresponding bool values (true or false).
&lt;p&gt;
Useful if you want to bind a check box or something to a property of numeric type.
&lt;/p&gt;

&lt;pre name='code' class='c#'&gt;
 
public class NumToBoolConverter : IValueConverter
    {

        #region IValueConverter Members

        public object Convert(object value, Type targetType, 
            object parameter, System.Globalization.CultureInfo culture)
        {
            if (value!=null &amp;&amp; value is int )
            {
                var val = (int)value;
                return (val==0) ? false : true;
            }
            return null;

        }

        public object ConvertBack(object value, Type targetType, 
            object parameter, System.Globalization.CultureInfo culture)
        {
            if (value!=null &amp;&amp; value is bool )
            {
                var val = (bool)value;
                return val ? 1 : 0;
            }
            return null;
        }

        #endregion
    }
&lt;/pre&gt;
&lt;p&gt;
Now, to do the binding in Xaml, you can just create a resource,&lt;p&gt;
&lt;pre name='code' class='xml'&gt;
&amp;lt;Window.Resources &amp;gt;
        &amp;lt;local:NumToBoolConverter x:Key="IntConverter"/&amp;gt;
    &amp;lt;/Window.Resources&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
And then do the binding. Simple and easy.
&lt;p&gt;
&lt;pre name='code' class='xml'&gt;
&amp;lt;CheckBox Name="chkBox" 
IsChecked="{Binding Path=IntProperty,Mode=TwoWay, 
Converter={StaticResource IntConverter}}"/&amp;gt;
&lt;/pre&gt;

&lt;a href="http://amazedsaint.blogspot.com" style="display:none" rel="tag"&gt;CodeProject&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-7357297795534524975?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qIth4QUaqDQMTiDNSX3W5c6VqO0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qIth4QUaqDQMTiDNSX3W5c6VqO0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qIth4QUaqDQMTiDNSX3W5c6VqO0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qIth4QUaqDQMTiDNSX3W5c6VqO0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=vHbW4W5DFyU:o0UbnE-5yCA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=vHbW4W5DFyU:o0UbnE-5yCA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=vHbW4W5DFyU:o0UbnE-5yCA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=vHbW4W5DFyU:o0UbnE-5yCA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=vHbW4W5DFyU:o0UbnE-5yCA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=vHbW4W5DFyU:o0UbnE-5yCA:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=vHbW4W5DFyU:o0UbnE-5yCA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=vHbW4W5DFyU:o0UbnE-5yCA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=vHbW4W5DFyU:o0UbnE-5yCA:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/vHbW4W5DFyU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/vHbW4W5DFyU/numtoboolconverter-simple.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/05/numtoboolconverter-simple.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-1207518350677714322</guid><pubDate>Tue, 19 May 2009 07:28:00 +0000</pubDate><atom:updated>2009-10-10T11:58:57.914+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">WPF</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>PDF to XAML Conversion - Alternate Thoughts</title><description>Today I did a small experiment to see how we can use PDF to generate XAML files. I wanted to mimic the pdf form entry in Silverlight.&lt;br /&gt;
&lt;br /&gt;
Here is the summary of what I've done.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Created a new&amp;nbsp;Silver light&amp;nbsp;Project in Expression Blend 3.0 Beta&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;As Expression Blend can import adobe illustrator files, I simply renamed a pdf file's extension from &lt;span class="Apple-style-span" style="font-style: italic;"&gt;pdf &lt;/span&gt;to &lt;span class="Apple-style-span" style="font-style: italic;"&gt;ai&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Clicked File-&amp;gt; Import Adobe Illustrator files in Blend, and imported to my active window.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Cool, I've the whole form imported as graphical paths, preserving the whole layout.&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/__Mw4iY-4nuY/ShJemfK9o9I/AAAAAAAAAZA/odZxdbsNFAU/s1600-h/pdf-to-xaml.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/__Mw4iY-4nuY/ShJemfK9o9I/AAAAAAAAAZA/odZxdbsNFAU/s320/pdf-to-xaml.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
I just modified the layout a bit so that it can be embedded it in a canvas in a scoll viewer. So that I can place Silverlight controls (textbox/checkbox etc) on top of that to Mimic form entry. Looks good. 
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-1207518350677714322?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mtC-c65WHkBh1EUZY-FkS3nY4Ic/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mtC-c65WHkBh1EUZY-FkS3nY4Ic/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mtC-c65WHkBh1EUZY-FkS3nY4Ic/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mtC-c65WHkBh1EUZY-FkS3nY4Ic/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=abrTjEnBuFg:Ju8rDQJYlSo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=abrTjEnBuFg:Ju8rDQJYlSo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=abrTjEnBuFg:Ju8rDQJYlSo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=abrTjEnBuFg:Ju8rDQJYlSo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=abrTjEnBuFg:Ju8rDQJYlSo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=abrTjEnBuFg:Ju8rDQJYlSo:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=abrTjEnBuFg:Ju8rDQJYlSo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=abrTjEnBuFg:Ju8rDQJYlSo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=abrTjEnBuFg:Ju8rDQJYlSo:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/abrTjEnBuFg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/abrTjEnBuFg/pdf-to-xaml-conversion-alternate.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/__Mw4iY-4nuY/ShJemfK9o9I/AAAAAAAAAZA/odZxdbsNFAU/s72-c/pdf-to-xaml.PNG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/05/pdf-to-xaml-conversion-alternate.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-6206179237170658369</guid><pubDate>Mon, 18 May 2009 13:16:00 +0000</pubDate><atom:updated>2009-11-07T12:37:56.280+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Back To Basics</category><category domain="http://www.blogger.com/atom/ns#">CSharp</category><title>Back To Basics - Thinking Beyond ToString()</title><description>&lt;br /&gt;
&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;
&lt;a href="http://t1.gstatic.com/images?q=tbn:z9ypytoY8udP6M:http://www.cksinfo.com/clipart/toys/abc-blocks.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="93" src="http://t1.gstatic.com/images?q=tbn:z9ypytoY8udP6M:http://www.cksinfo.com/clipart/toys/abc-blocks.png" width="96" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;i&gt;About&amp;nbsp;&lt;/i&gt;&lt;a href="http://amazedsaint.blogspot.com/search/label/Back%20To%20Basics"&gt;&lt;b&gt;&lt;i&gt;Back To Basics&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;&lt;i&gt;&amp;nbsp;- It's often good to look back and fill any gaps we might be having, in certain aspects of the language or framework we use. I'll be examining and blogging about some well known features of C# and .NET, in&amp;nbsp;&lt;/i&gt;&lt;b&gt;&lt;i&gt;Back To Basics series&lt;/i&gt;&lt;/b&gt;&lt;i&gt;&amp;nbsp;- Probably in a bit more detail.&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to convert something to string, you might need to find the converter to do the job correctly.&lt;br /&gt;
&lt;br /&gt;
Here is a neat extension method for all your objects, so that it'll find the appropriate converter if one exists, or otherwise, fall back to ToString() :)

&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;public static class ConverterExtension
    {
        public static string ConvertToString(this object value)
        {
            TypeConverter converter = 
              TypeDescriptor.GetConverter(value.GetType());

            // Can converter convert this type to string?
            if (converter.CanConvertTo(typeof(string)))
            {
                // Convert it
                return converter.ConvertTo(value, 
                        typeof(string)) as string;
            }

            return value.ToString();
        }
    }

&lt;/pre&gt;
Now, try this code, and find out what is the result 

&lt;br /&gt;
&lt;pre class="c#" name="code"&gt;Color val = Color.Red;

//Call our extension method
string result1 = val.ConvertToString();

//Try with ToString()
string result2=val.ToString();

&lt;/pre&gt;
See what is in result1 and result2, so that you can make out what I'm talking about. Simple, but useful when you work with scenarios where you want to serialize your object's properties.

&lt;a href="http://amazedsaint.blogspot.com/" rel="tag" style="display: none;"&gt;CodeProject&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-6206179237170658369?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9XCY9CDRMaTFvIuuJ8Npik5cA4c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9XCY9CDRMaTFvIuuJ8Npik5cA4c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9XCY9CDRMaTFvIuuJ8Npik5cA4c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9XCY9CDRMaTFvIuuJ8Npik5cA4c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=oCEF3VaAcjA:3iiV4EbPaJQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=oCEF3VaAcjA:3iiV4EbPaJQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=oCEF3VaAcjA:3iiV4EbPaJQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=oCEF3VaAcjA:3iiV4EbPaJQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=oCEF3VaAcjA:3iiV4EbPaJQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=oCEF3VaAcjA:3iiV4EbPaJQ:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=oCEF3VaAcjA:3iiV4EbPaJQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=oCEF3VaAcjA:3iiV4EbPaJQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=oCEF3VaAcjA:3iiV4EbPaJQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/oCEF3VaAcjA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/oCEF3VaAcjA/converting-to-string.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/05/converting-to-string.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-7991444671572431691</guid><pubDate>Mon, 18 May 2009 09:17:00 +0000</pubDate><atom:updated>2009-10-10T11:58:57.915+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">WPF</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>Mixtify 10K Gallery is cool</title><description>This weekend I was playing with some entries in Mixtify 10 K Gallery, and it is cool. Really got some fresh thoughts. Loving it. &lt;a href="http://live.visitmix.com/MIXtify/TenKGallery.aspx"&gt;Click here to check out&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Here are a couple of interesting stuff.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: medium;"&gt;&lt;span style="font-weight: bold;"&gt;Silverlight Turtle&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://live.visitmix.com/MIXtify/TenKDisplay.aspx?SubmissionID=0093"&gt;&lt;img border="0" src="http://live.visitmix.com/10k/Approved/Submission0093/GalleryImage.png" /&gt;&amp;nbsp;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
&lt;a href="http://live.visitmix.com/MIXtify/TenKDisplay.aspx?SubmissionID=0093"&gt;The Silverlight Turtle looks really cool&lt;/a&gt;&amp;nbsp;&lt;a href="http://draft.blogger.com/"&gt;&lt;/a&gt;&amp;nbsp;- It supports around 12 commands, and it is good fun if you wrote some LOGO script earlier.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Chain Reaction&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The moment I saw this, I started coding something&amp;nbsp;similar in Silverlight. Very addictive, very simple.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://live.visitmix.com/MIXtify/TenKDisplay.aspx?SubmissionID=0117"&gt;&lt;img border="0" src="http://live.visitmix.com/10k/Approved/Submission0117/chain.jpg" /&gt;&amp;nbsp;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;a href="http://live.visitmix.com/MIXtify/TenKDisplay.aspx?SubmissionID=0117"&gt;Click here to have fun&lt;/a&gt;&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;A Twitter Visualizer&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The application may not be that high-fi, but this gives a good conceptual draft of creating a great visualizer for Twitter using Silverlight. Worth going through this.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://live.visitmix.com/MIXtify/TenKDisplay.aspx?SubmissionID=0044"&gt;&lt;img border="0" src="http://live.visitmix.com/10k/Approved/Submission0044/twiiterSrch.jpg" /&gt;&amp;nbsp;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
&lt;a href="http://live.visitmix.com/MIXtify/TenKDisplay.aspx?SubmissionID=0044"&gt;Worth having a look&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The above are some quick picks, here is &lt;a href="http://live.visitmix.com/MIXtify/TenKGallery.aspx"&gt;much more&lt;/a&gt; for you to explore&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-7991444671572431691?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ba3mwPkRE7NhPeugVFwccT19L6M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ba3mwPkRE7NhPeugVFwccT19L6M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ba3mwPkRE7NhPeugVFwccT19L6M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ba3mwPkRE7NhPeugVFwccT19L6M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=I7_JWtr5T2E:i2EU9VkdVVE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=I7_JWtr5T2E:i2EU9VkdVVE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=I7_JWtr5T2E:i2EU9VkdVVE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=I7_JWtr5T2E:i2EU9VkdVVE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=I7_JWtr5T2E:i2EU9VkdVVE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=I7_JWtr5T2E:i2EU9VkdVVE:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=I7_JWtr5T2E:i2EU9VkdVVE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=I7_JWtr5T2E:i2EU9VkdVVE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=I7_JWtr5T2E:i2EU9VkdVVE:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/I7_JWtr5T2E" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/I7_JWtr5T2E/mixtify-10k-gallery-is-cool.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/05/mixtify-10k-gallery-is-cool.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-1141839081059283049</guid><pubDate>Sat, 16 May 2009 08:47:00 +0000</pubDate><atom:updated>2009-11-07T12:37:56.280+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">VS SDK</category><category domain="http://www.blogger.com/atom/ns#">TFS</category><category domain="http://www.blogger.com/atom/ns#">CSharp</category><title>TFS API Insights</title><description>As I was recently working with TFS Client APIs, here are few thoughts on the same.&lt;p&gt;

&lt;b&gt;Logging Into TFS Server&lt;/b&gt;&lt;p&gt;

To log in to the TFS Server using the TFS Client APIs, you can either use the domain authentication, or provide the username or password explicitly&lt;p&gt;

- Logging in using the current windows user&lt;br/&gt;&lt;br/&gt;
&lt;pre&gt;
TeamFoundationServer _tfsServer = new TeamFoundationServer("serverUrl");
_tfsServer.Authenticate();
&lt;/pre&gt;

&lt;p&gt;
- Logging in using a specific network credential&lt;br/&gt;&lt;br/&gt;
&lt;pre&gt;
 _tfsServer = new TeamFoundationServer(
                        "serverUrl", 
                       new System.Net.NetworkCredential
                               ("userName", "password", "domain"));
 _tfsServer.EnsureAuthenticated();
&lt;/pre&gt;
&lt;p&gt;
&lt;b&gt; Getting all the projects - Using VersionControlServer&lt;/b&gt;&lt;p&gt;

After logging in, you can get all the projects and project items in TFS as shown below. We are reading the latest version for each item&lt;br/&gt;&lt;br/&gt;

&lt;pre&gt;
VersionControlServer _versonControlServer=_tfsServer.GetService
                (typeof(VersionControlServer)) as VersionControlServer;

 foreach (var teamProject in 
             _versonControlServer.GetAllTeamProjects(true)) 
 {
       //Get all the items in the project
       ItemSet items = 
              _versonControlServer.GetItems
               (teamProject.ServerItem, VersionSpec.Latest, 
                                         RecursionType.OneLevel);
       foreach (Item item in items.Items)
                        { //do your stuff with each project item }
 

 }
&lt;/pre&gt;

&lt;br/&gt;
&lt;p&gt;
&lt;b&gt;Reading all users - Using GroupSecurityService&lt;/b&gt;

Now, you can read all users using the IGroupSecurityService, as shown.&lt;br/&gt;&lt;br/&gt;

&lt;pre&gt;
   IGroupSecurityService _groupSecurityService = 
_tfsServer.GetService(typeof(IGroupSecurityService)) 
             as IGroupSecurityService;

Identity identity = _groupSecurityService.ReadIdentity
  (SearchFactor.EveryoneApplicationGroup, null, QueryMembership.Expanded);

foreach (Identity user in _groupSecurityService.ReadIdentities
          (SearchFactor.Sid, identity.Members, QueryMembership.None))
                {
                   //do something with the users
                }
&lt;/pre&gt;

TFS API is very simple and intuitive, and in next post I'll explain some work item related methods.

&lt;a href="http://amazedsaint.blogspot.com" style="display:none" rel="tag"&gt;CodeProject&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-1141839081059283049?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xoll8-GMSYtdCbIHGv7DTAs6V6Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xoll8-GMSYtdCbIHGv7DTAs6V6Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xoll8-GMSYtdCbIHGv7DTAs6V6Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xoll8-GMSYtdCbIHGv7DTAs6V6Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=u_GCjOfFASs:a4FVwBFaZ1U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=u_GCjOfFASs:a4FVwBFaZ1U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=u_GCjOfFASs:a4FVwBFaZ1U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=u_GCjOfFASs:a4FVwBFaZ1U:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=u_GCjOfFASs:a4FVwBFaZ1U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=u_GCjOfFASs:a4FVwBFaZ1U:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=u_GCjOfFASs:a4FVwBFaZ1U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=u_GCjOfFASs:a4FVwBFaZ1U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=u_GCjOfFASs:a4FVwBFaZ1U:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/u_GCjOfFASs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/u_GCjOfFASs/tfs-api-insights.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/05/tfs-api-insights.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-22141639.post-1152181204428841537</guid><pubDate>Fri, 15 May 2009 12:26:00 +0000</pubDate><atom:updated>2009-05-18T14:07:01.359+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Cartoon</category><category domain="http://www.blogger.com/atom/ns#">Software Development</category><category domain="http://www.blogger.com/atom/ns#">Design And Architecture</category><title>Haha, How to develop software.</title><description>This is a nice one. Click Full screen mode and enjoy &lt;p&gt; &lt;a href="http://amazedsaint.blogspot.com/2007/12/application-architecture-driving-forces.html"&gt;Re-visit my article on Architecture Considerations&lt;/a&gt;, it might be interesting.&lt;p&gt;

&lt;div style="width:425px;text-align:left" id="__ss_1433738"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/amazedsaint/cartoon-software-development-process?type=powerpoint" title="Cartoon - Software Development Process at it&amp;#39;s best"&gt;Cartoon - Software Development Process at it&amp;#39;s best&lt;/a&gt;&lt;object style="margin:0px" width="500" height="420"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cartoon-090514060458-phpapp02&amp;stripped_title=cartoon-software-development-process" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cartoon-090514060458-phpapp02&amp;stripped_title=cartoon-software-development-process" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="420"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/amazedsaint"&gt;amazedsaint&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22141639-1152181204428841537?l=amazedsaint.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ei3HyhKJN_o09XcS21u2II7NNKk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ei3HyhKJN_o09XcS21u2II7NNKk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ei3HyhKJN_o09XcS21u2II7NNKk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ei3HyhKJN_o09XcS21u2II7NNKk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=UHj0ZdkbEDE:q8gT1Gi3Oz0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=UHj0ZdkbEDE:q8gT1Gi3Oz0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=UHj0ZdkbEDE:q8gT1Gi3Oz0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=UHj0ZdkbEDE:q8gT1Gi3Oz0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=UHj0ZdkbEDE:q8gT1Gi3Oz0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=UHj0ZdkbEDE:q8gT1Gi3Oz0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=UHj0ZdkbEDE:q8gT1Gi3Oz0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?i=UHj0ZdkbEDE:q8gT1Gi3Oz0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/amazedsaint/articles?a=UHj0ZdkbEDE:q8gT1Gi3Oz0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/amazedsaint/articles?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/amazedsaint/articles/~4/UHj0ZdkbEDE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/amazedsaint/articles/~3/UHj0ZdkbEDE/haha-how-to-develop-software.html</link><author>noreply@blogger.com (Anoop Madhusudanan)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://amazedsaint.blogspot.com/2009/05/haha-how-to-develop-software.html</feedburner:origLink></item></channel></rss>
