<?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:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Bryan's Coding Corner</title>
	
	<link>http://bryanmitchellanderson.com</link>
	<description>Chronicling my advancement as a software developer</description>
	<lastBuildDate>Fri, 10 Feb 2012 01:48:08 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/BryansCodingCorner" /><feedburner:info uri="bryanscodingcorner" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Why I’m dodging the HTML/JS bandwagon</title>
		<link>http://feedproxy.google.com/~r/BryansCodingCorner/~3/MB-rINNoGu0/</link>
		<comments>http://bryanmitchellanderson.com/2012/02/why-im-dodging-the-htmljs-bandwagon/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 01:48:08 +0000</pubDate>
		<dc:creator>Bryan Anderson</dc:creator>
				<category><![CDATA[Opinions]]></category>
		<category><![CDATA[HTML/JS/CSS]]></category>

		<guid isPermaLink="false">http://bryanmitchellanderson.com/?p=255</guid>
		<description><![CDATA[After nearly two years working for ILM Professional Services we&#8217;ve parted ways in the the closest thing to a mutual breakup possible in business. Now that I&#8217;m no longer associated with ILM I feel like I can give an unbiased assessment of the company. In short, I think ILM is the best source for quality [...]]]></description>
			<content:encoded><![CDATA[<p>After nearly two years working for <a title="ILM Professional Services" href="http://ilmservice.com/" target="_blank">ILM Professional Services</a> we&#8217;ve parted ways in the the closest thing to a mutual breakup possible in business. Now that I&#8217;m no longer associated with ILM I feel like I can give an unbiased assessment of the company. In short, I think ILM is the best source for quality .Net developers in the Twin Cities. Their interview process is easily the most comprehensive I&#8217;ve gone through and it gives them an accurate portrait of your skills across a broad spectrum of disciplines and, even more importantly, they don&#8217;t try to place you in a position that doesn&#8217;t match your skill set. The other developers that work there are some of the best and brightest I&#8217;ve met anywhere, every single one capable of excelling in a team lead or architect role at any company in the Twin Cities.</p>
<p>They are also a great company to work for as a developer. They sent me to Mix 10 and 11, supported and guided me in my desire to speak at conferences and user groups, and set me up with a mentor to help me convert from life at small businesses to life as a consultant. If you&#8217;re a .Net developer with solid chops I would highly recommend considering ILM the next time you&#8217;re looking for a change.</p>
<p>But as much as I like and respect ILM we needed to part ways for one major reason: The openings they&#8217;re seeing are almost entirely for ASP.Net MVC apps and I have no interest in developing with HTML or JS.</p>
<h3>Why would you avoid HTML &amp; JS?</h3>
<p>Every time I tell someone I&#8217;m not interested in HTML/CSS/JS I get looked at like I&#8217;m crazy. The biggest reason I don&#8217;t plan to start doing HTML/JS development is that the problems I love to solve, the reasons I got into programming in the first place, shouldn&#8217;t be solved in JavaScript. I like to do things like write the aerodynamic models that make simulated airplanes fly, write my own programming languages and DSLs, and write web services used by hundreds of developers on every platform under the sun that support more transactions per second than Twitter can handle without throwing a fail whale. <a title="JS raytracer example" href="http://www.slimeland.com/raytrace/" target="_blank">JS raytracers</a> notwithstanding, these are not problems that can or should be solved with JavaScript.</p>
<p>Up until I found and fell in love with XAML I didn&#8217;t really like making UIs either. I&#8217;d tried just about everything from HTML/JS/CSS (most recently in 2007) with PHP5, Swing with Java, WinForms with C#, MFC with C++, and a host of other technologies all because I wanted to be able to show the world the results of all of this cool stuff I was doing. All of them were difficult to use to the point of pain, didn&#8217;t work well across platforms/browsers/resolutions without coding for each one individually, and making even small changes required a ridiculous amount of effort. To make a long story short I had given up on ever making UIs and resigned myself to leaving it to someone else.</p>
<p>Then I got a job working on an application that happened to use WPF as its front-end technology and my jaw dropped. Here was a technology I could use to easily create user interfaces that reacted easily to changes in both the data on the screen as well as changes in resolution and could even work cross platform with some care via Silverlight. Back in 2010 the future of XAML looked bright.</p>
<p>Now Silverlight is dead, WPF is still a great option for making applications to run on any Windows machine from XP to Windows 7, and XAML is a first class citizen when building applications for WinRT. This has left XAML developers floating in the breeze for the last six months or so. It looks like XAML will be a major player moving forward on the desktops, laptops, tablets, and phones that use Microsoft operating systems but we&#8217;ve completely lost our cross-platform capabilities. The bright XAML future of 2010 has been tarnished and developers, correctly, are loath to trust it. But my moving from XAML to HTML/CSS/JS would be like going from using a Zippo to start a fire to rubbing two sticks together, even with all of the improvements in HTML5, CSS3, and the new JS libraries.</p>
<p>How do I know that HTML5 hasn&#8217;t changed the world as fully as the internet echo chamber would have me believe if I haven&#8217;t used the technologies in the last 5 years? All of the issues that made it a pain in the butt then are still there now.</p>
<ul>
<li>Browsers still don&#8217;t implement the &#8220;standards&#8221; the same way. I&#8217;m using the most current version of the most popular (or 2nd depending on whom you ask) browser and I still see major sites every day whose layout is broken to the point of illegibility.</li>
<li>Half of those cool &#8220;look what HTML5 can do&#8221; sites only work in 1-2 browsers.</li>
<li>I can view source on most web pages and see at least one JS function that includes a workaround for a certain browser or set of browsers (not just IE6).</li>
<li>It was non-trivial for sites to implement the SOPA boycott without messing up their search rankings and results.</li>
<li>I watched professional, high-quality, web designers and developers put together websites for two months this winter. The number of problems they had dealing with various browsers was ridiculous. Figuring out how to get a design to work in HTML/JS/CSS that would have taken one person a day in XAML to get working completely was amazingly complex.</li>
<li>Netflix, the largest site on the internet by traffic, is half broken if you try to access it via https.</li>
</ul>
<p>The list goes on. The point is that things have gotten better in the HTML world since the bad old days of dealing with IE6, but they still aren&#8217;t good.</p>
<h3>So what now?</h3>
<p>Now I see myself as I was back before I discovered XAML but with a few bright spots out on the horizon. The biggest is that I know now that it&#8217;s possible to create UX technologies that are a joy to work with. There&#8217;s a good chance that XAML will have a big future with WP7 and Windows 8, including their app stores and WinRT looks like a big step forward for Microsoft. Last but not least, XAML has shown developers what a UI technology could be and the Microsoft development community is (finally, slowly) starting to take an interest in open source development. I salivate at the idea of an open source implementation of something like the XAML presentation stack that could be used across platforms and/or virtual machines. But that&#8217;s an idea for another day.</p>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fbryanmitchellanderson.com%2F2012%2F02%2Fwhy-im-dodging-the-htmljs-bandwagon%2F&amp;layout=standard&amp;show_faces=false&amp;width=51&amp;height=24" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:51px; height:24px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://bryanmitchellanderson.com/2012/02/why-im-dodging-the-htmljs-bandwagon/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2012%2F02%2Fwhy-im-dodging-the-htmljs-bandwagon%2F&amp;text=Why+I%E2%80%99m+dodging+the+HTML%2FJS+bandwagon" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://bryanmitchellanderson.com/2012/02/why-im-dodging-the-htmljs-bandwagon/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://bryanmitchellanderson.com/2012/02/why-im-dodging-the-htmljs-bandwagon/"></script></span><span class="mr_social_sharing"><a href="http://www.reddit.com/submit?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2012%2F02%2Fwhy-im-dodging-the-htmljs-bandwagon%2F" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/reddit.png" alt="Submit to reddit" title="Submit to reddit"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=Why I’m dodging the HTML/JS bandwagon&amp;body=http://bryanmitchellanderson.com/2012/02/why-im-dodging-the-htmljs-bandwagon/"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div><img src="http://feeds.feedburner.com/~r/BryansCodingCorner/~4/MB-rINNoGu0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bryanmitchellanderson.com/2012/02/why-im-dodging-the-htmljs-bandwagon/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://bryanmitchellanderson.com/2012/02/why-im-dodging-the-htmljs-bandwagon/</feedburner:origLink></item>
		<item>
		<title>Observable Kinect</title>
		<link>http://feedproxy.google.com/~r/BryansCodingCorner/~3/bPhnCD1efV8/</link>
		<comments>http://bryanmitchellanderson.com/2011/12/observable-kinect/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 04:24:47 +0000</pubDate>
		<dc:creator>Bryan Anderson</dc:creator>
				<category><![CDATA[ObservableKinect]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Kinect]]></category>
		<category><![CDATA[NuGet]]></category>
		<category><![CDATA[Rx]]></category>

		<guid isPermaLink="false">http://bryanmitchellanderson.com/?p=246</guid>
		<description><![CDATA[I checked around NuGet and looked for some open source Rx for Kinect implementations but there didn't seem to be any so I created one. There are two parts, a wrapper for the standard Kinect APIs and a separate one for the speech APIs. Both have been published to NuGet. Note that the NuGet packages do require the proper SDKs to be installed, you can find download links here.]]></description>
			<content:encoded><![CDATA[<p>When the <a title="Kinect SDK" href="http://kinectforwindows.org/" target="_blank">Kinect SDK</a> was first introduced <a title="I said" href="https://twitter.com/#!/SolaAesir/status/58226507419615232" target="_blank">I said</a> that it should really be used in conjunction with <a title="Rx" href="http://msdn.microsoft.com/en-us/data/gg577609" target="_blank">Rx</a> to really unlock the power of the Kinect hardware. I started making my first application for the Kinect a few days ago and it turns out that my impression of the SDK that I saw fly by on stage during a Mix Keynote was correct, here was a piece of code that could really use a prescription of Rx! Take two <a title="IObservable" href="http://msdn.microsoft.com/en-us/library/dd990377.aspx" target="_blank">IObservable&lt;T&gt;</a>s and call me in the morning.</p>
<p>I checked around NuGet and looked for some open source Rx for Kinect implementations but there didn&#8217;t seem to be any so I <a title="created one" href="https://github.com/Aesir/ObservableKinect" target="_blank">created one</a>. There are two parts, a wrapper for the <a title="standard Kinect APIs" href="https://nuget.org/packages/ObservableKinect" target="_blank">standard Kinect APIs</a> and a <a href="https://nuget.org/packages/ObservableKinect.Speech" target="_blank">separate one for the speech APIs</a>. Both have been published to NuGet. Note that the NuGet packages do require the proper SDKs to be installed, you can find download links <a title="here" href="http://kinectforwindows.org/resources/" target="_blank">here</a>.</p>
<p>Right now Observable Kinect is a very thin wrapper around the existing APIs, though the speech package does help to simplify the speech SDK. Feel free to use Observable Kinect, expose issues, send pull requests, and just generally kick the tires.</p>
<p>Let me know what you think.</p>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fbryanmitchellanderson.com%2F2011%2F12%2Fobservable-kinect%2F&amp;layout=standard&amp;show_faces=false&amp;width=51&amp;height=24" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:51px; height:24px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://bryanmitchellanderson.com/2011/12/observable-kinect/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2011%2F12%2Fobservable-kinect%2F&amp;text=Observable+Kinect" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://bryanmitchellanderson.com/2011/12/observable-kinect/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://bryanmitchellanderson.com/2011/12/observable-kinect/"></script></span><span class="mr_social_sharing"><a href="http://www.reddit.com/submit?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2011%2F12%2Fobservable-kinect%2F" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/reddit.png" alt="Submit to reddit" title="Submit to reddit"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=Observable Kinect&amp;body=http://bryanmitchellanderson.com/2011/12/observable-kinect/"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div><img src="http://feeds.feedburner.com/~r/BryansCodingCorner/~4/bPhnCD1efV8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bryanmitchellanderson.com/2011/12/observable-kinect/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://bryanmitchellanderson.com/2011/12/observable-kinect/</feedburner:origLink></item>
		<item>
		<title>MVVM in the Real World</title>
		<link>http://feedproxy.google.com/~r/BryansCodingCorner/~3/BhSTnfTkO5g/</link>
		<comments>http://bryanmitchellanderson.com/2010/10/mvvm-in-the-real-world/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 04:20:22 +0000</pubDate>
		<dc:creator>Bryan Anderson</dc:creator>
				<category><![CDATA[Presentation]]></category>
		<category><![CDATA[basics]]></category>
		<category><![CDATA[MVVM]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://bryanmitchellanderson.com/?p=239</guid>
		<description><![CDATA[I presented my talk "MVVM in the Real World" at the October meeting of the Twin Cities .Net User Group. Considering that it was my first "real" technical presentation that wasn't just to coworkers it seemed to go pretty well. Some good questions were asked and I hope I helped clear up some problems people were having when trying to use MVVM in a real world project.]]></description>
			<content:encoded><![CDATA[<p>I presented my talk &#8220;MVVM in the Real World&#8221; at the October meeting of the <a title="Twin Cities .Net User Group" href="http://www.tcdnug.com/" target="_blank">Twin Cities .Net User Group</a>. Considering that it was my first &#8220;real&#8221; technical presentation that wasn&#8217;t just to coworkers it seemed to go pretty well. Some good questions were asked and I hope I helped clear up some problems people were having when trying to use MVVM in a real world project.</p>
<p>I mentioned during the talk that you should be careful when searching WPF &amp; Silverlight blogs to try to solutions to problems you run into. A lot of people have started to love the XAML, which is awesome, but not all of their advice is good. Although quite a few have slowed their posts lately here are some of the WPF &amp; Silverlight blogs I follow:</p>
<ul>
<li><a title="Josh Smith" href="http://joshsmithonwpf.wordpress.com/" target="_blank">Josh Smith</a> &#8211; The guy that wrote that <a href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx" target="_blank">MSDN MVVM article</a> and <a title="Advanced MVVM" href="http://joshsmithonwpf.wordpress.com/advanced-mvvm/" target="_blank">book</a> everyone talks about.</li>
<li><a title="Dr. WPF" href="http://drwpf.com/blog/" target="_blank">Dr. WPF</a> &#8211; I can&#8217;t recommend his <a title="ItemsControl: A to Z" href="http://drwpf.com/blog/itemscontrol-a-to-z/" target="_blank">ItemsControl: A to Z</a> series highly enough.</li>
<li><a title="Bea Stollnitz" href="http://bea.stollnitz.com/blog" target="_blank">Bea Stollnitz</a> &#8211; I refer people to <a title="The power of Styles and Templates in WPF" href="http://bea.stollnitz.com/blog/?p=40" target="_blank">The power of Styles and Templates in WPF</a> so often I have the post number memorized.</li>
<li><a title="Karl Shifflett" href="http://karlshifflett.wordpress.com/" target="_blank">Karl Shifflett</a></li>
<li><a title="Jaime Rodriguez" href="http://blogs.msdn.com/b/jaimer/" target="_blank">Jaime Rodriguez</a></li>
</ul>
<p>I also mentioned Rob Eisenberg&#8217;s presentation at Mix 10, <a title="Build Your Own MVVM Framework" href="http://live.visitmix.com/MIX10/Sessions/EX15" target="_blank">Build Your Own MVVM Framework</a>. It&#8217;s an excellent presentation if you want to dive deeper into MVVM and see some of the tools I mentioned that are used to solve common issues people run into with MVVM.</p>
<p>I hope the presentation and this post were helpful, you can <a title="The slides" href="http://bryanmitchellanderson.com/wp-content/2010/10/MVVM in the Real World.pptx" target="_self">get the slides here</a>.</p>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F10%2Fmvvm-in-the-real-world%2F&amp;layout=standard&amp;show_faces=false&amp;width=51&amp;height=24" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:51px; height:24px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://bryanmitchellanderson.com/2010/10/mvvm-in-the-real-world/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F10%2Fmvvm-in-the-real-world%2F&amp;text=MVVM+in+the+Real+World" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://bryanmitchellanderson.com/2010/10/mvvm-in-the-real-world/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://bryanmitchellanderson.com/2010/10/mvvm-in-the-real-world/"></script></span><span class="mr_social_sharing"><a href="http://www.reddit.com/submit?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F10%2Fmvvm-in-the-real-world%2F" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/reddit.png" alt="Submit to reddit" title="Submit to reddit"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=MVVM in the Real World&amp;body=http://bryanmitchellanderson.com/2010/10/mvvm-in-the-real-world/"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div><img src="http://feeds.feedburner.com/~r/BryansCodingCorner/~4/BhSTnfTkO5g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bryanmitchellanderson.com/2010/10/mvvm-in-the-real-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bryanmitchellanderson.com/2010/10/mvvm-in-the-real-world/</feedburner:origLink></item>
		<item>
		<title>Rx – Remove from an ObservableCollection after a specified time</title>
		<link>http://feedproxy.google.com/~r/BryansCodingCorner/~3/0esU98k9quA/</link>
		<comments>http://bryanmitchellanderson.com/2010/09/rx-remove-from-an-observablecollection-after-a-specified-time/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 15:25:35 +0000</pubDate>
		<dc:creator>Bryan Anderson</dc:creator>
				<category><![CDATA[Code Samples]]></category>
		<category><![CDATA[Rx]]></category>

		<guid isPermaLink="false">http://bryanmitchellanderson.com/?p=230</guid>
		<description><![CDATA[There was an interesting question on StackOverflow today that leads to another good example of the power of Reactive Extensions. The question was &#8220;How can I remove an item from an ObservableCollection some fixed amount of time after it was added?&#8221; With Rx it&#8217;s extremely simple! Here&#8217;s a quick console application demonstrating how to do [...]]]></description>
			<content:encoded><![CDATA[<p>There was an <a title="How to remove items from list x seconds after adding them" href="http://stackoverflow.com/questions/3803805" target="_blank">interesting question</a> on <a title="StackOverflow" href="http://stackoverflow.com/" target="_blank">StackOverflow</a> today that leads to another good example of the power of Reactive Extensions. The question was &#8220;How can I remove an item from an ObservableCollection some fixed amount of time after it was added?&#8221; With Rx it&#8217;s extremely simple! Here&#8217;s a quick console application demonstrating how to do it.</p>
<pre class="brush: csharp; title: ; notranslate">using System;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Linq;
using System.Threading;

namespace Test_App
{
    class Program
    {
        static void Main(string[] args)
        {
            var oc = new ObservableCollection&lt;int&gt;();

            var disposer =
             Observable
              .FromEvent&lt;NotifyCollectionChangedEventArgs&gt;(oc, &quot;CollectionChanged&quot;)
              .Where(e =&gt; e.EventArgs.Action == NotifyCollectionChangedAction.Add)
              .Delay(TimeSpan.FromSeconds(5))
              .Subscribe(
                  e =&gt;
                  {
                      foreach (int i in e.EventArgs.NewItems)
                      {
                          Console.WriteLine(string.Format(&quot;Removing item {0} at {1:HH:mm:ss}&quot;, i, DateTime.Now));
                          oc.Remove(i);
                      }
                  });

            for (int i = 1; i &lt; 10; i++)
            {
                Console.WriteLine(string.Format(&quot;Added item {0} at {1:HH:mm:ss}&quot;, i, DateTime.Now));
                oc.Add(i);
                Thread.Sleep(1000);
            }

            Console.WriteLine(&quot;Press any key to exit..&quot;);
            Console.ReadKey(true);

            disposer.Dispose();
        }
    }
}</pre>
<p>And here&#8217;s the output:</p>
<p>Added item 1 at 10:21:44<br />
Added item 2 at 10:21:45<br />
Added item 3 at 10:21:46<br />
Added item 4 at 10:21:47<br />
Added item 5 at 10:21:48<br />
Added item 6 at 10:21:49<br />
Removing item 1 at 10:21:49<br />
Removing item 2 at 10:21:50<br />
Added item 7 at 10:21:50<br />
Added item 8 at 10:21:51<br />
Removing item 3 at 10:21:51<br />
Added item 9 at 10:21:52<br />
Removing item 4 at 10:21:52<br />
Press any key to exit..<br />
Removing item 5 at 10:21:53<br />
Removing item 6 at 10:21:54<br />
Removing item 7 at 10:21:55<br />
Removing item 8 at 10:21:56<br />
Removing item 9 at 10:21:57</p>
<p>Pretty simple huh?</p>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F09%2Frx-remove-from-an-observablecollection-after-a-specified-time%2F&amp;layout=standard&amp;show_faces=false&amp;width=51&amp;height=24" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:51px; height:24px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://bryanmitchellanderson.com/2010/09/rx-remove-from-an-observablecollection-after-a-specified-time/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F09%2Frx-remove-from-an-observablecollection-after-a-specified-time%2F&amp;text=Rx+%E2%80%93+Remove+from+an+ObservableCollection+after+a+specified+time" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://bryanmitchellanderson.com/2010/09/rx-remove-from-an-observablecollection-after-a-specified-time/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://bryanmitchellanderson.com/2010/09/rx-remove-from-an-observablecollection-after-a-specified-time/"></script></span><span class="mr_social_sharing"><a href="http://www.reddit.com/submit?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F09%2Frx-remove-from-an-observablecollection-after-a-specified-time%2F" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/reddit.png" alt="Submit to reddit" title="Submit to reddit"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=Rx – Remove from an ObservableCollection after a specified time&amp;body=http://bryanmitchellanderson.com/2010/09/rx-remove-from-an-observablecollection-after-a-specified-time/"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div><img src="http://feeds.feedburner.com/~r/BryansCodingCorner/~4/0esU98k9quA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bryanmitchellanderson.com/2010/09/rx-remove-from-an-observablecollection-after-a-specified-time/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://bryanmitchellanderson.com/2010/09/rx-remove-from-an-observablecollection-after-a-specified-time/</feedburner:origLink></item>
		<item>
		<title>Rx – Calling a long running function asynchronously</title>
		<link>http://feedproxy.google.com/~r/BryansCodingCorner/~3/0CdJuRmhs5c/</link>
		<comments>http://bryanmitchellanderson.com/2010/08/rx-calling-a-long-running-function-asynchronously/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 01:00:54 +0000</pubDate>
		<dc:creator>Bryan Anderson</dc:creator>
				<category><![CDATA[Code Samples]]></category>
		<category><![CDATA[Rx]]></category>

		<guid isPermaLink="false">http://bryanmitchellanderson.com/?p=224</guid>
		<description><![CDATA[Today we're going to call a long running function asynchronously and handle the return on the Dispatcher thread almost as simply as calling the function directly.]]></description>
			<content:encoded><![CDATA[<p>Time for a little more Rx love. Today we&#8217;re going to call a long running function asynchronously and handle the return on the Dispatcher thread almost as simply as calling the function directly.</p>
<pre class="brush: csharp; title: ; notranslate">void CallSomeLongFunctionAsync()
{
 Observable
 .ToAsync&lt;int&gt;(LifeTheUniverseEverything)()
 .ObserveOnDispatcher()
 .Subscribe(theAnswer =&gt; MessageBox.Show(string.Format(&quot;The answer was {0}. What was the question anyway?&quot;, theAnswer)));
}

private int LifeTheUniverseEverything()
{
 Thread.Sleep(600000);
 return 42;
}</pre>
<p>I may have used my new-found powers to calculate the answer to life, the universe, and everything but imagine a service call or long running file operation. Making those UIs completely non-blocking just got a lot easier.</p>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F08%2Frx-calling-a-long-running-function-asynchronously%2F&amp;layout=standard&amp;show_faces=false&amp;width=51&amp;height=24" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:51px; height:24px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://bryanmitchellanderson.com/2010/08/rx-calling-a-long-running-function-asynchronously/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F08%2Frx-calling-a-long-running-function-asynchronously%2F&amp;text=Rx+%E2%80%93+Calling+a+long+running+function+asynchronously" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://bryanmitchellanderson.com/2010/08/rx-calling-a-long-running-function-asynchronously/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://bryanmitchellanderson.com/2010/08/rx-calling-a-long-running-function-asynchronously/"></script></span><span class="mr_social_sharing"><a href="http://www.reddit.com/submit?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F08%2Frx-calling-a-long-running-function-asynchronously%2F" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/reddit.png" alt="Submit to reddit" title="Submit to reddit"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=Rx – Calling a long running function asynchronously&amp;body=http://bryanmitchellanderson.com/2010/08/rx-calling-a-long-running-function-asynchronously/"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div><img src="http://feeds.feedburner.com/~r/BryansCodingCorner/~4/0CdJuRmhs5c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bryanmitchellanderson.com/2010/08/rx-calling-a-long-running-function-asynchronously/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://bryanmitchellanderson.com/2010/08/rx-calling-a-long-running-function-asynchronously/</feedburner:origLink></item>
		<item>
		<title>Rx – Running a function when the user stops typing</title>
		<link>http://feedproxy.google.com/~r/BryansCodingCorner/~3/LiG4J-CAsMU/</link>
		<comments>http://bryanmitchellanderson.com/2010/08/rx-running-a-function-when-the-user-stops-typing/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 03:22:21 +0000</pubDate>
		<dc:creator>Bryan Anderson</dc:creator>
				<category><![CDATA[Code Samples]]></category>
		<category><![CDATA[Rx]]></category>

		<guid isPermaLink="false">http://bryanmitchellanderson.com/?p=211</guid>
		<description><![CDATA[One common task when creating UIs is to call some function, like a filter or search, when the user stops typing. Anyone who has set this up before knows how painful it is but with Rx it's dead simple.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been playing with <a title="Rx Devlabs Site" href="http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx" target="_blank">Rx (Reactive Extensions)</a> quite a bit lately and I have to say it&#8217;s one of the most powerful features added to .Net since LINQ. That probably isn&#8217;t too surprising since a lot of people call Rx &#8220;LINQ to Events&#8221;.</p>
<p>One common task when creating UIs is to call some function, like a filter or search, when the user stops typing. Anyone who has set this up before knows how painful it is but with Rx it&#8217;s dead simple.</p>
<pre class="brush: csharp; title: ; notranslate">private IDisposable textBoxObserver;

void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    textBoxObserver =
        Observable
        .FromEvent&lt;TextChangedEventArgs&gt;(SomeTextBox, &quot;TextChanged&quot;)
        .Throttle(TimeSpan.FromMilliseconds(500))
        .ObserveOnDispatcher()
        .Subscribe(HandleSomeTextBoxTextChanged);
}

void MainWindow_Unloaded(object sender, RoutedEventArgs e)
{
    textBoxObserver.Dispose();
}

private void HandleSomeTextBoxTextChanged(IEvent&lt;TextChangedEventArgs&gt; args)
{
    var tb = ((TextBox)args.Sender);
    var text = tb.Text;

    SomeFunctionYouWantToCallWhenTheUserStopsTyping(text);
}</pre>
<p>There are a lot of other really cool uses for Rx so I&#8217;ll be posting more soon. Until then you should check out <a title="101 Rx Samples" href="http://rxwiki.wikidot.com/101samples" target="_blank">101 Rx Samples</a> or this <a href="http://jasonrowe.com/2010/04/02/silverlight-drag-and-drop-with-rx/" target="_blank">simple implementation</a> of drag &amp; drop in Silverlight.</p>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F08%2Frx-running-a-function-when-the-user-stops-typing%2F&amp;layout=standard&amp;show_faces=false&amp;width=51&amp;height=24" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:51px; height:24px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://bryanmitchellanderson.com/2010/08/rx-running-a-function-when-the-user-stops-typing/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F08%2Frx-running-a-function-when-the-user-stops-typing%2F&amp;text=Rx+%E2%80%93+Running+a+function+when+the+user+stops+typing" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://bryanmitchellanderson.com/2010/08/rx-running-a-function-when-the-user-stops-typing/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://bryanmitchellanderson.com/2010/08/rx-running-a-function-when-the-user-stops-typing/"></script></span><span class="mr_social_sharing"><a href="http://www.reddit.com/submit?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F08%2Frx-running-a-function-when-the-user-stops-typing%2F" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/reddit.png" alt="Submit to reddit" title="Submit to reddit"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=Rx – Running a function when the user stops typing&amp;body=http://bryanmitchellanderson.com/2010/08/rx-running-a-function-when-the-user-stops-typing/"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div><img src="http://feeds.feedburner.com/~r/BryansCodingCorner/~4/LiG4J-CAsMU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bryanmitchellanderson.com/2010/08/rx-running-a-function-when-the-user-stops-typing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://bryanmitchellanderson.com/2010/08/rx-running-a-function-when-the-user-stops-typing/</feedburner:origLink></item>
		<item>
		<title>WPF Behavior Library</title>
		<link>http://feedproxy.google.com/~r/BryansCodingCorner/~3/KpyBLsoTV_c/</link>
		<comments>http://bryanmitchellanderson.com/2010/05/wpf-behavior-library/#comments</comments>
		<pubDate>Mon, 03 May 2010 04:57:52 +0000</pubDate>
		<dc:creator>Bryan Anderson</dc:creator>
				<category><![CDATA[WPF]]></category>
		<category><![CDATA[wpfbehaviorlibrary]]></category>

		<guid isPermaLink="false">http://bryanmitchellanderson.com/?p=205</guid>
		<description><![CDATA[I&#8217;ve created a new project for Behaviors on CodePlex, the WPF Behavior Library. A behavior is basically just a set of attached properties and functionality you can attach to a visual element. By attaching the behavior to the bit of UI you give it the additional functionality. The first behavior I&#8217;ve included is Drag &#38; [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve created a new project for Behaviors on <a href="http://www.codeplex.com/" target="_blank">CodePlex</a>, the <a href="http://wpfbehaviorlibrary.codeplex.com/" target="_blank">WPF Behavior Library</a>. A behavior is basically just a set of attached properties and functionality you can attach to a visual element. By attaching the behavior to the bit of UI you give it the additional functionality.</p>
<p>The first behavior I&#8217;ve included is Drag &amp; Drop. There are a few drag and drop behaviors out there right now but they all require a lot of modification to use in other applications. Most of them only work for a subset of the UI elements that inherit from ItemsControl (mostly the ones that have their own ItemsContainers), some can&#8217;t move items between windows, and some don&#8217;t allow you to change logic behind moving items. In short none were general purpose enough to just grab a dll and use the behavior.</p>
<p>So take a look at the <a href="http://wpfbehaviorlibrary.codeplex.com/" target="_blank">WPF Behavior Library</a>, give feedback, report bugs, suggest new behaviors and features, or contribute.</p>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F05%2Fwpf-behavior-library%2F&amp;layout=standard&amp;show_faces=false&amp;width=51&amp;height=24" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:51px; height:24px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://bryanmitchellanderson.com/2010/05/wpf-behavior-library/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F05%2Fwpf-behavior-library%2F&amp;text=WPF+Behavior+Library" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://bryanmitchellanderson.com/2010/05/wpf-behavior-library/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://bryanmitchellanderson.com/2010/05/wpf-behavior-library/"></script></span><span class="mr_social_sharing"><a href="http://www.reddit.com/submit?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F05%2Fwpf-behavior-library%2F" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/reddit.png" alt="Submit to reddit" title="Submit to reddit"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=WPF Behavior Library&amp;body=http://bryanmitchellanderson.com/2010/05/wpf-behavior-library/"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div><img src="http://feeds.feedburner.com/~r/BryansCodingCorner/~4/KpyBLsoTV_c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bryanmitchellanderson.com/2010/05/wpf-behavior-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bryanmitchellanderson.com/2010/05/wpf-behavior-library/</feedburner:origLink></item>
		<item>
		<title>Thoughts on the Windows 7 phone</title>
		<link>http://feedproxy.google.com/~r/BryansCodingCorner/~3/TaOzp-gNSkQ/</link>
		<comments>http://bryanmitchellanderson.com/2010/04/thoughts-on-the-windows-7-phone/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 19:19:17 +0000</pubDate>
		<dc:creator>Bryan Anderson</dc:creator>
				<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://bryanmitchellanderson.com/?p=166</guid>
		<description><![CDATA[There has been a lot of well-deserved hype over the Windows 7 phone since Mix10. The developer story they&#8217;ve put together is amazing. They&#8217;ve given us a model that is as easy to develop for as Android while staying as powerful as the iPhone. The interface is simple and intuitive and is on par with [...]]]></description>
			<content:encoded><![CDATA[<p>There has been a lot of well-deserved hype over the Windows 7 phone since Mix10. The developer story they&#8217;ve put together is amazing. They&#8217;ve given us a model that is as easy to develop for as Android while staying as powerful as the iPhone. The interface is simple and intuitive and is on par with other smartphones (except for lack of cut-copy-paste support). It even adds a host of social features that I haven&#8217;t seen from its competitors.</p>
<p>But I think it&#8217;s more likely to fail than succeed for one simple reason: Microsoft still hasn&#8217;t realized the difference between being an incumbent in the market and being a challenger.</p>
<ul>
<li>An <strong>incumbent</strong> needs to focus on the person who is upgrading from the previous version. They need to make sure nothing major breaks when you upgrade, the user interface stays consistent, all of your old data transfers without the user realizing any updates were needed or at least so easily that my grandma could do it, and a few features need to be added to make sure the user has a reason to upgrade.</li>
<li>The <strong>challenger</strong> needs to do everything the incumbent does (at least the most popular features). If they don&#8217;t any user who tries out your new product won&#8217;t be able to do what they could with the incumbent&#8217;s product and won&#8217;t switch. They also need to add significant new features that the incumbent doesn&#8217;t have or users will have no reason to switch and most will just stay with the incumbent&#8217;s product since they&#8217;re already comfortable with it.</li>
</ul>
<p>So let&#8217;s take a look at the Windows 7 phone and what it offers.</p>
<ul>
<li>The user interface is good and will work well for anyone  who&#8217;s used an  iPhone or Android-based phone. There are no real  surprises or innovations in the UI but it is on par with the major players.</li>
<li>It does all of the things expected by a phone. It makes calls, sends text messages, has a camera, and has a calendar.</li>
<li>It does all of the things expected by a smartphone. It gets on the internet with a real browser, has email and calendar syncing capabilities, and runs apps.</li>
<li>It has a bunch of cool social features built-in which the others don&#8217;t have except via apps.</li>
<li>The developer story is very good. Much better than the iPhone&#8217;s all around and more powerful than Android&#8217;s.</li>
</ul>
<p>So the Windows 7 phone does what we&#8217;d expect of a smartphone and adds a better developer story and some social features. That matches with the requirements to be a viable challenger doesn&#8217;t it? Well yes, it matches up very well and that&#8217;s what has the Microsoft ecosystem all excited. One problem is that social features in general don&#8217;t really seem to draw in customers (think Zune), especially when the other phones have apps that will give you the same functionality if you really care. So you probably aren&#8217;t going to get many customers to buy one just by adding social features.</p>
<p>Which brings us to problem number two. Developers aren&#8217;t going to develop for the Windows 7 phone unless there are enough users (potential app buyers) to make it worth the cost of developing the application. Users, for their part, aren&#8217;t going to buy the phone unless there are enough apps to replace the ones they used on previous phones. So you have a classic chicken and egg problem. I asked the Microsoft representative at Mix10 how they were planning on dealing with this and the only answer he could give me was that we should all &#8220;take a bet on the [Windows 7] phone&#8221;. That will work for a few developers but probably not enough to fill your application marketplace with amazing apps that will make people want to switch.</p>
<p>The question I&#8217;m left with is: What will I need to see in order to take a bet on developing for the Windows 7 phone?</p>
<ul>
<li><strong>Android problems</strong> &#8211; I see Android and Windows 7 phone as aiming for the same group of users. Both are aiming for users that don&#8217;t want to switch to AT&amp;T and developers that don&#8217;t want to develop in Objective-C or  deal with Apple&#8217;s app store. Apple is suing HTC, the maker of the best Android phones (Droid, Nexus One) of the current generation, and trying to stop them from being sold in the US. If Apple wins the suit it will be a big victory for the Windows 7 phone since it will nearly erase the year lead Android has.</li>
<li><strong>Low uptake of the iPhone on Verizon</strong> &#8211; Many smartphone consumers who don&#8217;t already have an iPhone seem to have held off because they don&#8217;t want to switch to AT&amp;T. Apple&#8217;s exclusive contract with AT&amp;T ends this year and they&#8217;re widely expected to announce an iPhone for Verizon along with iPhone OS 4.0 this summer.</li>
<li><strong>Marketing</strong> &#8211; It&#8217;s no secret that Microsoft&#8217;s marketing doesn&#8217;t do too well when targeting consumers (although they&#8217;ve gotten better). They will need to have a massive and well timed marketing push from this summer through a few months after launch. When Apple starts releasing iPhones on Verizon people will need to know there&#8217;s an alternative coming out and maybe they should wait a couple of months to check it out. When the Windows 7 phone actually gets released there will need to be some amazing marketing to beat the marketing Apple and Google will surely be doing at the same time. They will need to worry less about things consumers don&#8217;t care about (speed/memory of the hardware, ease of development, etc) and more about what the phone will allow them to do. If their marketing team doesn&#8217;t come out with a catch phrase like &#8220;You can do that&#8221; (note to Microsoft marketing, you can use that if you send me a free phone) then they probably aren&#8217;t going to do well. Want to check your work email, facebook inbox, and gmail all from the beach with just a glance? You can do that!</li>
<li><strong>Kick-ass Marketplace</strong> &#8211; It will need to be dead simple for users to use and find things they will like and want to buy. Something like a rating system and Netflix algorithm built in maybe? It will also need to be extremely easy for developers to get their apps on the marketplace and to upgrade existing apps. If there has to be some sort of application vetting process it needs to have easy to understand rules, a rapid turnaround time, and should probably only focus on malware, ratings (e.g. G, PG, PG-13, R, X), and category.</li>
</ul>
<p>They&#8217;ll need at least three of the four to have better than even odds. I&#8217;ll be watching closely with fingers crossed.</p>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F04%2Fthoughts-on-the-windows-7-phone%2F&amp;layout=standard&amp;show_faces=false&amp;width=51&amp;height=24" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:51px; height:24px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://bryanmitchellanderson.com/2010/04/thoughts-on-the-windows-7-phone/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F04%2Fthoughts-on-the-windows-7-phone%2F&amp;text=Thoughts+on+the+Windows+7+phone" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://bryanmitchellanderson.com/2010/04/thoughts-on-the-windows-7-phone/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://bryanmitchellanderson.com/2010/04/thoughts-on-the-windows-7-phone/"></script></span><span class="mr_social_sharing"><a href="http://www.reddit.com/submit?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F04%2Fthoughts-on-the-windows-7-phone%2F" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/reddit.png" alt="Submit to reddit" title="Submit to reddit"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=Thoughts on the Windows 7 phone&amp;body=http://bryanmitchellanderson.com/2010/04/thoughts-on-the-windows-7-phone/"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div><img src="http://feeds.feedburner.com/~r/BryansCodingCorner/~4/TaOzp-gNSkQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bryanmitchellanderson.com/2010/04/thoughts-on-the-windows-7-phone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bryanmitchellanderson.com/2010/04/thoughts-on-the-windows-7-phone/</feedburner:origLink></item>
		<item>
		<title>Coming back from Mix10</title>
		<link>http://feedproxy.google.com/~r/BryansCodingCorner/~3/6IBKJ-Fago4/</link>
		<comments>http://bryanmitchellanderson.com/2010/03/coming-back-from-mix10/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 21:20:44 +0000</pubDate>
		<dc:creator>Bryan Anderson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bryanmitchellanderson.com/?p=165</guid>
		<description><![CDATA[Well Mix10 is wrapping up and I&#8217;m beat. I think my brain needs some time to process everything I&#8217;ve seen and learned but some interesting nuggets are floating around in there already. If anyone out there is still wondering if attending Mix is worth it, stop wondering. The sessions aren&#8217;t the real reason people attend [...]]]></description>
			<content:encoded><![CDATA[<p>Well <a href="http://visitmix.com/" target="_blank">Mix10</a> is wrapping up and I&#8217;m beat. I think my brain needs some time to process everything I&#8217;ve seen and learned but some interesting nuggets are floating around in there already. If anyone out there is still wondering if attending Mix is worth it, stop wondering. The sessions aren&#8217;t the real reason people attend a conference like this, they&#8217;re merely the excuse. The real reason to attend Mix is for the conversations. You are constantly having great dialogues with the presenters, with your peers, or with <a title="Wikipedia article on Miguel de Icaza" href="http://en.wikipedia.org/wiki/Miguel_de_icaza" target="_blank">Miguel de Icaza</a>, <a title="Wikipedia article on Erik Meijer" href="http://en.wikipedia.org/wiki/Erik_Meijer_%28computer_scientist%29" target="_blank">Erik Meijer</a>, or <a title="Wikipedia article on Bill Buxton" href="http://en.wikipedia.org/wiki/Bill_Buxton" target="_blank">Bill Buxton</a>. It&#8217;s these conversations that are the true value of Mix, the sessions you can <a href="http://live.visitmix.com/Videos" target="_blank">see for free online </a>within 48 hours from the time they occurred.</p>
<h2>Windows 7 phone</h2>
<p>The biggest story at this year&#8217;s Mix is the &#8220;unveiling&#8221; of the Windows 7 phone. Overall I have to say that I wasn&#8217;t extremely impressed and I think it&#8217;s likely to flop. Unless Microsoft&#8217;s marketing department can pull some magic out of their collective hats the phone is going to run into the <a href="http://www.joelonsoftware.com/articles/fog0000000054.html" target="_blank">classic chicken and egg problem</a> between applications and users. I have some arguments to back up that statement but they&#8217;ll require a post of their own.</p>
<h2>IE 9</h2>
<p>IE 9 looks like a step in the right direction. The demos were impressive but you&#8217;d have to be a fool to do a major demo where you didn&#8217;t beat the pants off your competition, especially when you&#8217;re running with most of the chrome and user features turned off. I&#8217;m sure the Chrome, Firefox, and Opera teams could all put together similarly impressive demos showing how their browsers leave IE 9 in the dust. Historically Internet Explorer has never had a place on my computers and I haven&#8217;t seen anything from IE 9 that is likely to change that position.</p>
<h2>OData</h2>
<p>I don&#8217;t really have anything to say about OData. It looks like a cool solution to a problem I&#8217;ve never had. I will most likely consume an OData service at some point and I&#8217;ll definitely look into it some more then. I was happy to see LINQ integration since that was the first thing that popped into my head when I saw the first demo. That got a clap from me me and like one other person during the keynote which leaves me curious if everyone else just expected it or if they haven&#8217;t realized the amount of power LINQ puts at your fingertips. I&#8217;m betting it&#8217;s the former.</p>
<h2>Silverlight</h2>
<p>The big winner at this Mix was Silverlight. With Silverlight 4 it&#8217;s becoming a very real solution for the internet connected applications of the future. I honestly believe Silverlight or something like it is the future of internet applications. I can run an application on the web, from my desktop, from my laptop, from my phone, or from anywhere else and always have the same data and settings shared to whatever device I&#8217;m on. That&#8217;s a really powerful story from a user&#8217;s perspective. From the developer&#8217;s perspective using MVVM I can run the exact same model and viewmodel for every device and create multiple views so I can choose the best for whatever screen the user wants to see. That takes away quite a few pain points and represents a pretty big cost reduction to management.</p>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F03%2Fcoming-back-from-mix10%2F&amp;layout=standard&amp;show_faces=false&amp;width=51&amp;height=24" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:51px; height:24px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://bryanmitchellanderson.com/2010/03/coming-back-from-mix10/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F03%2Fcoming-back-from-mix10%2F&amp;text=Coming+back+from+Mix10" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://bryanmitchellanderson.com/2010/03/coming-back-from-mix10/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://bryanmitchellanderson.com/2010/03/coming-back-from-mix10/"></script></span><span class="mr_social_sharing"><a href="http://www.reddit.com/submit?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2010%2F03%2Fcoming-back-from-mix10%2F" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/reddit.png" alt="Submit to reddit" title="Submit to reddit"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=Coming back from Mix10&amp;body=http://bryanmitchellanderson.com/2010/03/coming-back-from-mix10/"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div><img src="http://feeds.feedburner.com/~r/BryansCodingCorner/~4/6IBKJ-Fago4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bryanmitchellanderson.com/2010/03/coming-back-from-mix10/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://bryanmitchellanderson.com/2010/03/coming-back-from-mix10/</feedburner:origLink></item>
		<item>
		<title>Code Complete: 2nd Edition</title>
		<link>http://feedproxy.google.com/~r/BryansCodingCorner/~3/wSaTAiAqL9Y/</link>
		<comments>http://bryanmitchellanderson.com/2009/12/code-complete-2nd-edition/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 00:35:55 +0000</pubDate>
		<dc:creator>Bryan Anderson</dc:creator>
				<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Book Reviews]]></category>

		<guid isPermaLink="false">http://bryanmitchellanderson.com/?p=148</guid>
		<description><![CDATA[A++ If you were only able to choose one book to make you a better programmer, that book would be Code Complete. There is a reason it&#8217;s the highest voted answer to the StackOverflow questions What is the single most influential book every programmer should read? and What development book made the most impact on [...]]]></description>
			<content:encoded><![CDATA[<h1><a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&amp;tag=bryscodcor-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0735619670" target="_blank"><img class="alignleft size-full wp-image-151" title="Code Complete" src="http://bryanmitchellanderson.com/wp-content/2009/12/CodeComplete.jpg" alt="Code Complete" width="162" height="198" /></a>A++</h1>
<p>If you were only able to choose one book to make you a better programmer, that book would be <a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&amp;tag=bryscodcor-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0735619670" target="_blank">Code Complete</a>. There is a reason it&#8217;s the highest voted answer to the <a href="http://www.stackoverflow.com" target="_blank">StackOverflow</a> questions <a href="http://stackoverflow.com/questions/1711" target="_blank">What is the single most influential book every programmer should read?</a> and <a href="http://stackoverflow.com/questions/72406" target="_blank">What development book made the most impact on you as a developer?</a> as well as many others. Notice that second place for both questions is <a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;tag=bryscodcor-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=020161622X" target="_blank">Pragmatic Programmer,</a> you should go read that too, after <a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&amp;tag=bryscodcor-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0735619670" target="_blank">Code Complete</a>.</p>
<p>There really isn&#8217;t anything I can say about <a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&amp;tag=bryscodcor-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0735619670" target="_blank">Code Complete</a> to describe how truly awesome it is. From your future self and all of the people you work with please buy it and read it from cover to cover. I&#8217;m not kidding, you might think you know everything it covers, and if you&#8217;ve been programming for a few years you might even be right, but you won&#8217;t have thought about each of the topics explicitly and in the detail covered by <a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&amp;tag=bryscodcor-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0735619670" target="_blank">Code Complete</a>.</p>

				<div class="mr_social_sharing_wrapper">
				<!-- Social Sharing Toolkit v2.0.8 | http://www.active-bits.nl/support/social-sharing-toolkit/ --><span class="mr_social_sharing"><iframe src="https://www.facebook.com/plugins/like.php?locale=en_US&amp;href=http%3A%2F%2Fbryanmitchellanderson.com%2F2009%2F12%2Fcode-complete-2nd-edition%2F&amp;layout=standard&amp;show_faces=false&amp;width=51&amp;height=24" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:51px; height:24px;" allowTransparency="true"></iframe></span><span class="mr_social_sharing"><div id="fb-root"></div><fb:send href="http://bryanmitchellanderson.com/2009/12/code-complete-2nd-edition/" font=""></fb:send></span><span class="mr_social_sharing"><a href="https://twitter.com/share?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2009%2F12%2Fcode-complete-2nd-edition%2F&amp;text=Code+Complete%3A+2nd+Edition" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/twitter.png" alt="Share on Twitter" title="Share on Twitter"/></a></span><span class="mr_social_sharing"><g:plusone size="medium" count="false" href="http://bryanmitchellanderson.com/2009/12/code-complete-2nd-edition/"></g:plusone></span><span class="mr_social_sharing"><script type="IN/Share" data-url="http://bryanmitchellanderson.com/2009/12/code-complete-2nd-edition/"></script></span><span class="mr_social_sharing"><a href="http://www.reddit.com/submit?url=http%3A%2F%2Fbryanmitchellanderson.com%2F2009%2F12%2Fcode-complete-2nd-edition%2F" target="_blank" class="mr_social_sharing_popup_link"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/reddit.png" alt="Submit to reddit" title="Submit to reddit"/></a></span><span class="mr_social_sharing"><a href="mailto:?subject=Code Complete: 2nd Edition&amp;body=http://bryanmitchellanderson.com/2009/12/code-complete-2nd-edition/"><img src="http://bryanmitchellanderson.com/wp-content/plugins/social-sharing-toolkit/images/buttons/email.png" alt="Share via email" title="Share via email"/></a></span></div><img src="http://feeds.feedburner.com/~r/BryansCodingCorner/~4/wSaTAiAqL9Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bryanmitchellanderson.com/2009/12/code-complete-2nd-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bryanmitchellanderson.com/2009/12/code-complete-2nd-edition/</feedburner:origLink></item>
	</channel>
</rss>
