<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUAMRngyeSp7ImA9WhBbFEo.&quot;"><id>tag:blogger.com,1999:blog-16163431</id><updated>2013-05-13T14:36:27.691-05:00</updated><category term="improve" /><category term="Visual Studio" /><category term="computational reflection" /><category term="sum of our parts" /><category term="simple design" /><category term="ECMA" /><category term="assessment" /><category term="DIY" /><category term="collaboration" /><category term="neocortex" /><category term="temporary" /><category term="touch first" /><category term="interfaces" /><category term="Microsoft Technology Center" /><category term="business continuity" /><category term="lizard brain" /><category term="ASP.NET" /><category term="software development" /><category term="Zuck" /><category term="dreaming" /><category term="Shift+Ctrl+B" /><category term="Clients" /><category term="Windows store apps" /><category term="memes" /><category term="intelligent systems" /><category term="difficult" /><category term="self-worth" /><category term="pursuit" /><category term="software integration" /><category term="Cloud computing" /><category term="tactile" /><category term="human potential" /><category term="visual design" /><category term="amygdala" /><category term="security alert" /><category term="product design" /><category term="Xbox" /><category term="best practices" /><category term="great design" /><category term="government" /><category term="product development" /><category term="modern UI" /><category term="WinRT" /><category term="Windows Phone 7" /><category term="Build your own lab" /><category term="Metro design language" /><category term="iPhone" /><category term="product management" /><category term="trouble" /><category term="qwerty" /><category term="design" /><category term="elegance" /><category term="dieter rams" /><category term="DIY Visio" /><category term="purity" /><category term="escrow" /><category term="vestige" /><category term="CLR" /><category term="challenge" /><category term="Microsoft" /><category term="matter" /><category term="profanity" /><category term="PaaS" /><category term="automated builds" /><category term="Anders Hejlsburg" /><category term="DRY" /><category term="courage" /><category term="github" /><category term="Build" /><category term="cyclomatic complexity" /><category term="IT as a Service" /><category term="Compare and Contrast" /><category term="in pursuit of great design" /><category term="Windows without windows" /><category term="design pattern" /><category term="typography" /><category term="UPnP" /><category term="steve jobs" /><category term="sustainable" /><category term="services" /><category term="iTunes Sucks" /><category term="treat your geek right" /><category term="what kills great design?" /><category term="devops" /><category term="designers" /><category term="Facebook" /><category term="focus" /><category term="data context interaction" /><category term="router" /><category term="user experience" /><category term="Best Conference Ever" /><category term="WDDM" /><category term="great designers" /><category term="Jiro" /><category term="as little design as possible" /><category term="friction" /><category term="trustworthy" /><category term="under-abstracted" /><category term="IntelliSense" /><category term="Proof of concept" /><category term="security flaw" /><category term="YAGI" /><category term="CSS3" /><category term="Ruby" /><category term="WinJS" /><category term="best keyboard" /><category term="Programming languages" /><category term="Linux" /><category term="garbage collection" /><category term="libgit2" /><category term="automated testing" /><category term="multi-tasking" /><category term="duplicate code" /><category term="run" /><category term="great quotes" /><category term="WPF" /><category term="Steven Spifnosky" /><category term="Silverlight" /><category term="chronological" /><category term="defensive" /><category term="mocks" /><category term="warehouse" /><category term="Iaas" /><category term="build your own command center" /><category term="WindowsApps" /><category term="keyboard shortcuts" /><category term="authenticity" /><category term="continuous integration" /><category term="Metro" /><category term="clear" /><category term="separation of concerns" /><category term="storage" /><category term="Your computer is a part of you" /><category term="agility" /><category term="XAML" /><category term="central control" /><category term="MSDN" /><category term="complexity kills" /><category term="cost" /><category term="swiss design" /><category term="Git" /><category term="intelligence" /><category term="actions to take" /><category term="Projects" /><category term="windows azure" /><category term="MTC" /><category term=".net" /><category term="Decision Framework" /><category term="communication pattern" /><category term="extreme programming" /><category term="ood" /><category term="dvorak" /><category term="local" /><category term="NUI" /><category term="Sushi" /><category term="Metro Style" /><category term="tools become a part of us" /><category term="cloud" /><category term="needs" /><category term="minimal" /><category term="great designer" /><category term="great" /><category term="style" /><category term="under-abstraction" /><category term="Vim" /><category term="dci" /><category term="respect" /><category term="toxic" /><category term="service layer" /><category term="next paradigm shift" /><category term="federal" /><category term="service protector" /><category term="Trygve Reenskaug" /><category term="JavaScript" /><category term="examples" /><category term="workarounds" /><category term="roaming" /><category term="simplicity" /><category term="decisions to make" /><category term="DVCS" /><category term="Command Center" /><category term="operational agility" /><category term="Windows 8" /><category term="trust" /><category term="XP" /><category term="Over defensive programming" /><category term="apple" /><category term="mobile apps" /><category term="Samsung tablet" /><category term="ECMAScript" /><category term="cool deep sustained thought" /><category term="HTML/JavaScript" /><category term="Intel HD Graphics" /><category term="complexity" /><category term="Azure" /><category term="rba consulting" /><category term="Workstation" /><category term="C++" /><category term="CIO" /><category term="beautiful" /><category term="a/b testing" /><category term="SaaS" /><category term="ALM" /><category term="great teams" /><category term="Complexifiers" /><category term="percentage" /><category term="30 years" /><category term="Store apps" /><category term="Visual Basic" /><category term="out of control" /><category term="SQL Azure" /><category term="Presentation" /><category term="over-abstracted" /><category term="security boundary" /><category term="code is design" /><category term="HTML5" /><category term="top 10" /><category term="branching" /><category term="process" /><category term="TFS" /><category term="static" /><category term="oop" /><category term="simple" /><category term="Linus Torvalds" /><category term="Java" /><category term="EMACS" /><category term="5 perspectives" /><category term="C#" /><category term="criticism" /><category term="feature" /><category term="WCF" /><category term="command and control" /><category term="iPad" /><category term="software factory" /><category term="Dart" /><category term="data" /><category term="TypeScript" /><title>greg cowin</title><subtitle type="html">in pursuit of great design</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.pursuitofgreatdesign.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.pursuitofgreatdesign.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>51</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/gregcowinblog" /><feedburner:info uri="gregcowinblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DEAHRXsyfip7ImA9WhBRFk4.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-1663546213162512272</id><published>2013-03-03T19:46:00.000-06:00</published><updated>2013-03-07T00:12:14.596-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-07T00:12:14.596-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="service protector" /><category scheme="http://www.blogger.com/atom/ns#" term="services" /><category scheme="http://www.blogger.com/atom/ns#" term="security boundary" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML5" /><category scheme="http://www.blogger.com/atom/ns#" term="Decision Framework" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows store apps" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8" /><category scheme="http://www.blogger.com/atom/ns#" term="MSDN" /><category scheme="http://www.blogger.com/atom/ns#" term="service layer" /><category scheme="http://www.blogger.com/atom/ns#" term="WinJS" /><title>What might surprise you about Windows 8 store apps written in HTML5/JavaScript?</title><content type="html">&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://2.bp.blogspot.com/-4YStRsVFMAc/UTPojyXT5yI/AAAAAAAAAMc/PVzkwjNgM54/s1600/bofa.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-4YStRsVFMAc/UTPojyXT5yI/AAAAAAAAAMc/PVzkwjNgM54/s1600/bofa.png" height="464" width="640" /&gt;&lt;/a&gt;The surprise: plain&amp;nbsp;JavaScript source code can be viewed easily. The JavaScript codebase is available as&amp;nbsp;one&amp;nbsp;or more&amp;nbsp;text files. No DLL. Just code sitting in the app directory. As shown previously, you can &lt;a href="http://www.pursuitofgreatdesign.com/2013/02/a-look-behind-curtain-of-windows-8.html"&gt;browse the Windows App&lt;/a&gt; directory and view assets for any store app. &lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://www.pursuitofgreatdesign.com/2013/02/what-percentage-of-windows-store-apps.html"&gt;36% of Windows Store apps&lt;/a&gt; are written using HTML5/JavaScript (WinJS). These apps are not just news reading apps, but more serious apps.&amp;nbsp;One example is&amp;nbsp;the Bank of America app. 
&lt;/div&gt;
&lt;br /&gt;
Having worked on some other serious financial applications (&lt;a href="http://www.bmwusa.com/"&gt;www.bmwusa.com&lt;/a&gt; and a fully-automated trading system), I am certain that the Bank of America app is well analyzed and protected with extra security features&amp;nbsp;across the service layer. Communication that crosses&amp;nbsp;the service layer also crosses a security boundary. When a security boundary is crossed, you must assume that every call is a &amp;nbsp;potentially intrusion attempt. A zone where real security comes into play.&amp;nbsp;Here are some actions to take and decisions to make when writing service apps that I wrote for the Microsoft Developer Network&amp;nbsp;(MSDN) back in 2011: &lt;a href="http://www.pursuitofgreatdesign.com/2011/08/why-use-decision-framework.html"&gt;http://www.pursuitofgreatdesign.com/2011/08/why-use-decision-framework.html&lt;/a&gt;.&amp;nbsp;When security is paramount,&amp;nbsp;you should consider&amp;nbsp;taking multiple countermeasures for each threat so that if one of the countermeasures is compromised or misconfigured, others are still in place to protect against the threat.
&lt;br /&gt;
&lt;br /&gt;
As for the&amp;nbsp;JavaScript files (codebase) in plain text files, you can take extra steps to strip comments, minimize, and obfuscate the code — likely a good idea.&amp;nbsp;This is a common technique for JavaScript producers since their source code can be viewed online as it is downloaded to browsers to run. Even C#/C++ apps can be decompiled, but with JavaScript there is no need.&lt;br /&gt;
&lt;br /&gt;
Whatever you decide, make sure that you protect the service boundary.&amp;nbsp;The &lt;a href="http://msdn.microsoft.com/en-us/library/hh339626(v=vs.100).aspx#yte"&gt;service protector pattern&lt;/a&gt; could also help. Another option: use&amp;nbsp;a message processing layer that can immediately deny and log offending messages; that is, where each message is analyzed before it is allowed to pass through to application code. This way, every message is guaranteed to be analyzed.&lt;br /&gt;
&lt;br /&gt;
Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/geXZG__vJ4w" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2013/03/what-might-surprise-you-about-windows-8.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/1663546213162512272?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/1663546213162512272?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/geXZG__vJ4w/what-might-surprise-you-about-windows-8.html" title="What might surprise you about Windows 8 store apps written in HTML5/JavaScript?" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-4YStRsVFMAc/UTPojyXT5yI/AAAAAAAAAMc/PVzkwjNgM54/s72-c/bofa.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2013/03/what-might-surprise-you-about-windows-8.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMNR3c5eip7ImA9WhBSE0o.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-4195143079768770586</id><published>2013-02-20T09:40:00.000-06:00</published><updated>2013-02-20T10:41:36.922-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-20T10:41:36.922-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS3" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML5" /><category scheme="http://www.blogger.com/atom/ns#" term="XAML" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Store apps" /><category scheme="http://www.blogger.com/atom/ns#" term="percentage" /><category scheme="http://www.blogger.com/atom/ns#" term="TypeScript" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="touch first" /><category scheme="http://www.blogger.com/atom/ns#" term="WinRT" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Basic" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>What percentage of Windows Store apps are written in HTML5/JavaScript?</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-AkYMcxa3KPI/USTqqCNGq_I/AAAAAAAAAMM/OUz40sMVrYk/s1600/percent.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/-AkYMcxa3KPI/USTqqCNGq_I/AAAAAAAAAMM/OUz40sMVrYk/s1600/percent.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href="http://www.pursuitofgreatdesign.com/2012/03/why-has-microsofts-metro-design.html"&gt;Windows 8&lt;/a&gt; provides a &lt;a href="http://www.pursuitofgreatdesign.com/2012/09/two-reasons-why-you-will-like-windows-8.html"&gt;new touch first experience&lt;/a&gt; for &lt;a href="http://www.pursuitofgreatdesign.com/2012/03/why-has-microsofts-metro-design.html"&gt;Store apps&lt;/a&gt;.  You can write Windows Store apps using a common API (WinRT) with language projections (bindings) to C#, Visual Basic, C++, and &lt;a href="http://www.pursuitofgreatdesign.com/2012/10/top-10-reasons-why-typescript-will-be.html"&gt;JavaScript&lt;/a&gt;. XAML (Extensible Markup Language) is used to create not only Windows Store apps, but also Silverlight and WPF applications. There are differences between Windows Store apps, Silverlight, and WPF apps, but knowing one makes the others easy. JavaScript uses HTML5 markup and CSS3 to create fully native apps. 
 &lt;br /&gt;
&lt;br /&gt;
Here is the &lt;strong&gt;breakdown&lt;/strong&gt; according to Robert Evans, Microsoft Technical Lead for Windows Store App Labs (&lt;a href="http://thetabletshow.com/?ShowNum=70"&gt;Source&lt;/a&gt;):&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;59% XAML/.NET (C# and Visual Basic)
&lt;/li&gt;
&lt;li&gt;36% HTML/JavaScript
&lt;/li&gt;
&lt;li&gt;5% XAML/C++
&amp;nbsp; &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
During my inspection of apps, there seems to be even a higher percentage of XAML/.NET apps; however, I trust the submission numbers. Just the ones I tend to use are generally written in XAML/.NET. 
  &lt;br /&gt;
&lt;br /&gt;
You &lt;a href="http://www.pursuitofgreatdesign.com/2013/02/a-look-behind-curtain-of-windows-8.html"&gt;can inspect your installed apps&lt;/a&gt;, too. You can look behind the &lt;a href="http://www.pursuitofgreatdesign.com/2012/03/why-has-microsofts-metro-design.html"&gt;Windows 8&lt;/a&gt; &lt;a href="http://www.pursuitofgreatdesign.com/2013/02/a-look-behind-curtain-of-windows-8.html"&gt;curtain&lt;/a&gt;.
  &lt;br /&gt;
&lt;br /&gt;
Despite the numbers, in my view &lt;a href="http://www.pursuitofgreatdesign.com/2012/10/top-10-reasons-why-typescript-will-be.html"&gt;all of us could be writing TypeScript/JavaScript&lt;/a&gt; or some other variant someday soon. I always thought that it would be a dynamic language, but never thought it would be based on JavaScript.  
  &lt;br /&gt;
&lt;br /&gt;
Whatever you pick, enjoy it.
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Update&lt;/strong&gt;: These percentages are based on over 4000 apps that have come through the app labs. These are mostly consistent with the numbers that I have found through limited inspection. Here is how:&amp;nbsp; &lt;a href="http://www.pursuitofgreatdesign.com/2013/02/a-look-behind-curtain-of-windows-8.html"&gt;http://www.pursuitofgreatdesign.com/2013/02/a-look-behind-curtain-of-windows-8.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/ZFnOsKtHe4o" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2013/02/what-percentage-of-windows-store-apps.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/4195143079768770586?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/4195143079768770586?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/ZFnOsKtHe4o/what-percentage-of-windows-store-apps.html" title="What percentage of Windows Store apps are written in HTML5/JavaScript?" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-AkYMcxa3KPI/USTqqCNGq_I/AAAAAAAAAMM/OUz40sMVrYk/s72-c/percent.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2013/02/what-percentage-of-windows-store-apps.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YFR3g6eip7ImA9WhBSEkU.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-6226266323958256296</id><published>2013-02-19T07:51:00.001-06:00</published><updated>2013-02-19T08:45:16.612-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-19T08:45:16.612-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="data" /><category scheme="http://www.blogger.com/atom/ns#" term="XAML" /><category scheme="http://www.blogger.com/atom/ns#" term="Store apps" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8" /><category scheme="http://www.blogger.com/atom/ns#" term="roaming" /><category scheme="http://www.blogger.com/atom/ns#" term="local" /><category scheme="http://www.blogger.com/atom/ns#" term="style" /><category scheme="http://www.blogger.com/atom/ns#" term="WindowsApps" /><category scheme="http://www.blogger.com/atom/ns#" term="WinRT" /><category scheme="http://www.blogger.com/atom/ns#" term="run" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML/JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="temporary" /><category scheme="http://www.blogger.com/atom/ns#" term="storage" /><title>A look behind the Windows 8 curtain</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-6vnqKUCrlLo/USJgVSINrII/AAAAAAAAAL0/yjnVeaNA0Yw/s1600/theCurtain.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/-6vnqKUCrlLo/USJgVSINrII/AAAAAAAAAL0/yjnVeaNA0Yw/s1600/theCurtain.png" /&gt;&lt;/a&gt;&lt;/div&gt;
Windows 8 provides new kind of&lt;a href="http://www.pursuitofgreatdesign.com/2012/09/two-reasons-why-you-will-like-windows-8.html"&gt; touch first apps&lt;/a&gt; available from the Windows Store. These Window Store apps use WinRT—the new windows runtime—not to be confused with Surface RT (the new ARM based tablet from Microsoft).  WinRT provides language projections (bindings) for C#, Visual Basic, C++, and Javascript. 
&lt;br /&gt;
&lt;br /&gt;
Loosely speaking, WinRT can be thought of as an object-oriented sandboxed secure replacement for Win32. &lt;br /&gt;
&lt;br /&gt;
In my view, &lt;a href="http://www.pursuitofgreatdesign.com/2012/09/two-reasons-why-you-will-like-windows-8.html"&gt;you will like Windows 8 Store apps even on a desktop or laptop&lt;/a&gt;.
Give them a try. The &lt;a href="http://www.pursuitofgreatdesign.com/2012/03/why-has-microsofts-metro-design.html"&gt;Modern UI style&lt;/a&gt; that Windows 8 Store apps use can provide a better experience.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;This&amp;nbsp;quick look behind the curtain for Windows 8 Store apps answers these basic questions&lt;/strong&gt;:

&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Where are the Windows Store apps located?
&lt;/li&gt;
&lt;li&gt;Where do the apps run?
&lt;/li&gt;
&lt;li&gt;Where do apps store your data?
&lt;/li&gt;
&lt;li&gt;Where is the WinRT?
&lt;/li&gt;
&lt;li&gt;Where do XAML apps get their style?
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Where are the Windows Store apps located?
&lt;/h3&gt;
&lt;br /&gt;
Windows Store apps are stored in the directory &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;C:\Program Files\WindowsApps&lt;/span&gt;. &lt;br /&gt;
&lt;br /&gt;
Each app will have its own subdirectory.
 
&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
Now, you will not be able to open the directory without first changing the ownership of the directory, so I have included terse instructions at the bottom of this post: &lt;strong&gt;&lt;em&gt;[How To] change permission on the WindowsApps directory&lt;/em&gt;&lt;/strong&gt;.
&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-pnvSUAO_fb0/USJgwLz4quI/AAAAAAAAAL8/v8jAUFKeID0/s1600/WindowsApps.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://4.bp.blogspot.com/-pnvSUAO_fb0/USJgwLz4quI/AAAAAAAAAL8/v8jAUFKeID0/s640/WindowsApps.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Once you dig deeper into the WindowsApps directory, you will notice a directory for each app (and an additional one for updates). &lt;br /&gt;
&lt;br /&gt;
Digging further,&amp;nbsp;you will notice that&amp;nbsp;the majority of apps are written with XAML/C# apps, not HTML5/Javascript.
  &lt;br /&gt;
&lt;br /&gt;
As you will see, one of the disturbing things about HTML5/JavaScript apps is that you can read the JavaScript code. While you can decompile C# code as well, it is a bit more disturbing just to see the source sitting there. This is a good reason to obfuscate and minimize your Javascript before shipping. Most JavaScript developers are already used to this since the majority is delivered to web browsers.

 &lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Where do the apps run?
&amp;nbsp; &lt;/h3&gt;
&lt;br /&gt;
If the app was developed using HTML5/JavaScript, then it runs in a host process called WWAHost.exe. This host process runs Trident and Chakra engines along with the JavaScript projections to WinRT.  You will have to view the command line parameters via &lt;em&gt;ProcessExplorer&lt;/em&gt; or Task Manager to view the command line parameters to narrow down the app.&lt;br /&gt;
&lt;br /&gt;
.NET Language C#, VB, and C++ are compiled into their own binary. &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;MyApp.exe&lt;/span&gt; for example.
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Where&amp;nbsp;do apps store data?
&lt;/h3&gt;
&lt;br /&gt;
There are three main types of app storage:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Local&lt;/strong&gt;: Persistent data that exists only on the current device
&amp;nbsp;&amp;nbsp; &lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Typical location: &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;C:\Users\{username}\AppData\Local\Packages\{app_id}\LocalState&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Roaming&lt;/strong&gt;: Data that exists on all devices on which the user has installed the app. The current limit is 100K. The limit can be founding using the following WinRT call: ApplicationData.Current.RoamingQuotaLimit
&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Typical location: &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;C:\Users\{username}\AppData\Local\Packages\{app_id}\RoamingState&lt;/span&gt;
&amp;nbsp; &lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Temporary&lt;/strong&gt;:  Data that could be removed by the system any time the app isn't running 
&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Typical location: &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;C:\Users\{username}\AppData\Local\Packages\{app_id}\TempState&lt;/span&gt;
 
&amp;nbsp; &lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h3&gt;
Where is WinRT?
&lt;/h3&gt;
&lt;br /&gt;
The API is specified in the following directory using but the code runs elsewhere winmd:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;C:\Program Files (x86)\Windows Kits\8.0\References\CommonConfiguration\Neutral&lt;/span&gt;
   &lt;br /&gt;
&lt;br /&gt;
The Windows Store apps (Metro) .NET profile can be found in the following directory:
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\&lt;/span&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Where do XAML apps get their style?
   &lt;/h3&gt;
&lt;br /&gt;
When styling your XAML apps, you will likely edit &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;StandardStyles.xaml&lt;/span&gt; located in the Common directory of your app—by default. As you will notice, these styles reference other styles that do not seem to exist. You can find these referenced (default) styles in the following directory:
   &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;c:\Program Files (x86)\Windows Kits\8.0\Include\WinRT\Xaml\Design\themeresources.xaml".
Generic.xaml&lt;/span&gt;
  &lt;br /&gt;
&lt;br /&gt;
You can redefine the desired styles such as Font color from the default in your &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;StandardStyles.xaml&lt;/span&gt;.
   &lt;br /&gt;
&lt;br /&gt;
I find it useful to put them into corresponding sections called Standard Styles Overrides.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;Sidebar: [How To] take ownership of the Windows App directory&lt;/strong&gt; &lt;/em&gt;&lt;br /&gt;
&lt;em&gt;In order to take ownership of the Windows App directory, you will have to be Administrator. &lt;/em&gt;&lt;br /&gt;
&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;You might also first need to set the option to&amp;nbsp;display hidden directories. Once you can see the directory, then select the "Windows App" folder and select Properties of the following directory: &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;C:\Program Files\Windows Apps\&lt;/span&gt;.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Select the "Security Tab" from the Properties window and select advanced. Change the owner using the "Change" link. Give yourself ownership. You&amp;nbsp;will have to be Administrator in order to do this.&amp;nbsp;&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Sorry for the terse description. If you need more help,&amp;nbsp;you can search the web for how to take ownership of Windows directory.&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I hope that this quick peek behind the Windows 8 curtain helps you understand how apps run, store data, and get their style. &lt;br /&gt;
&lt;br /&gt;
Enjoy. &lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/hvfTVurLGiw" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2013/02/a-look-behind-curtain-of-windows-8.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/6226266323958256296?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/6226266323958256296?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/hvfTVurLGiw/a-look-behind-curtain-of-windows-8.html" title="A look behind the Windows 8 curtain" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-6vnqKUCrlLo/USJgVSINrII/AAAAAAAAAL0/yjnVeaNA0Yw/s72-c/theCurtain.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2013/02/a-look-behind-curtain-of-windows-8.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cDQn0_eSp7ImA9WhNaGUQ.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-5615186062381984930</id><published>2013-02-04T09:16:00.000-06:00</published><updated>2013-02-04T09:17:53.341-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-04T09:17:53.341-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="router" /><category scheme="http://www.blogger.com/atom/ns#" term="security alert" /><category scheme="http://www.blogger.com/atom/ns#" term="security flaw" /><category scheme="http://www.blogger.com/atom/ns#" term="UPnP" /><title>Security Alert: Disable UPnP on your router!</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-nocj4xfEzT8/UQ_OAWBImSI/AAAAAAAAALk/d8QXNDSRjsM/s1600/Router.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-nocj4xfEzT8/UQ_OAWBImSI/AAAAAAAAALk/d8QXNDSRjsM/s1600/Router.png" /&gt;&lt;/a&gt;&lt;/div&gt;
You should disable UPnP (Universal Plug and Play) on your router. 



&lt;br /&gt;
&lt;br /&gt;
In case you have not heard, there are about 81 million routers on the internet that can be completely compromised via exposed UPnP—likely including yours. There are known vulnerabilities in UPnP that have been exposed externally&amp;nbsp;by most every router vendor (~1500 vendors). Since it was found to be exposed to 81 million routers combined with known UPnP vulnerabilities, these routers can be easily compromised giving complete control of your network to anyone able to address your router. This is a very serious and widespread security vulnerability!



 

&lt;br /&gt;
&lt;br /&gt;
The main thing that you need to do: make sure that UPnP is not available externally. It could be acceptable to have UPnP enabled internally only, if your router supports it. Xbox live, BitTorrent, Skype, and other apps can benefit or require having it enabled internally. &lt;br /&gt;
&lt;br /&gt;
It all starts with UDP port 1900 (UPnP Simple Service Discovery Protocol). &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;More details...&lt;/strong&gt;



&lt;br /&gt;
Vulnerability Note VU#922681: &lt;a href="http://www.kb.cert.org/vuls/id/922681"&gt;http://www.kb.cert.org/vuls/id/922681&lt;/a&gt;



&lt;br /&gt;
Security Now (#389: Great explanation): &lt;a href="http://twit.tv/show/security-now/389"&gt;http://twit.tv/show/security-now/389&lt;/a&gt;
&lt;br /&gt;
Computer World: &lt;a href="http://blogs.computerworld.com/malware-and-vulnerabilities/21717/check-your-router-now-lex-luthor-does"&gt;http://blogs.computerworld.com/malware-and-vulnerabilities/21717/check-your-router-now-lex-luthor-does&lt;/a&gt;



&lt;br /&gt;
HD Moore’s blog post (he found it): &lt;a href="https://community.rapid7.com/community/infosec/blog/2013/01/29/security-flaws-in-universal-plug-and-play-unplug-dont-play"&gt;https://community.rapid7.com/community/infosec/blog/2013/01/29/security-flaws-in-universal-plug-and-play-unplug-dont-play&lt;/a&gt;



 



&lt;br /&gt;
&lt;br /&gt;
Just wanted to help get the&amp;nbsp;information out so you do not get &lt;a href="http://www.urbandictionary.com/define.php?term=pwned"&gt;pwned&lt;/a&gt;.

&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/xUC6t-jQgXw" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2013/02/security-alert-disable-upnp-on-your.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/5615186062381984930?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/5615186062381984930?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/xUC6t-jQgXw/security-alert-disable-upnp-on-your.html" title="Security Alert: Disable UPnP on your router!" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-nocj4xfEzT8/UQ_OAWBImSI/AAAAAAAAALk/d8QXNDSRjsM/s72-c/Router.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2013/02/security-alert-disable-upnp-on-your.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYGSHw_fSp7ImA9WhNaGU0.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-7368261462541781625</id><published>2013-02-03T07:07:00.000-06:00</published><updated>2013-02-03T08:02:09.245-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-03T08:02:09.245-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dreaming" /><category scheme="http://www.blogger.com/atom/ns#" term="Sushi" /><category scheme="http://www.blogger.com/atom/ns#" term="great design" /><category scheme="http://www.blogger.com/atom/ns#" term="simplicity" /><category scheme="http://www.blogger.com/atom/ns#" term="purity" /><category scheme="http://www.blogger.com/atom/ns#" term="Jiro" /><category scheme="http://www.blogger.com/atom/ns#" term="great designers" /><title>Fall in love with your work</title><content type="html">&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://4.bp.blogspot.com/-HchuEQCF16o/UQ5tqGfYrqI/AAAAAAAAALU/ndxC2O7DU3c/s1600/Sushi.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/-HchuEQCF16o/UQ5tqGfYrqI/AAAAAAAAALU/ndxC2O7DU3c/s1600/Sushi.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="151" src="http://4.bp.blogspot.com/-HchuEQCF16o/UQ5tqGfYrqI/AAAAAAAAALU/ndxC2O7DU3c/s200/Sushi.png" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;
"Once you decide on your occupation, you must immerse yourself in it. You have to fall in love with your work. Never complain about your job. You must dedicate your life to mastering your skill. That is the secret to success and is the key to being regarded honorably."
&lt;br /&gt;
&lt;br /&gt;
"All I want to do is make better sushi. I do the same thing over and over, improving bit by bit. There is always a yearning to achieve more. I'll continue to climb trying to reach the top, but no one knows where the top is. Even at my age after decades of work, I don't think I have achieved perfection, but I feel ecstatic all day. I love making sushi."&lt;br /&gt;
&lt;br /&gt;
Jiro Ono - &lt;a href="http://en.wikipedia.org/wiki/Jiro_Dreams_of_Sushi"&gt;Jiro Dreams of Sushi&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Perhaps, love does lead to great design. Dreaming should be encouraged. Enjoy.&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/9regWzcWQh4" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2013/02/fall-in-love-with-your-work.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/7368261462541781625?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/7368261462541781625?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/9regWzcWQh4/fall-in-love-with-your-work.html" title="Fall in love with your work" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-HchuEQCF16o/UQ5tqGfYrqI/AAAAAAAAALU/ndxC2O7DU3c/s72-c/Sushi.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2013/02/fall-in-love-with-your-work.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUICQXc_eCp7ImA9WhNaFkk.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-4274333686184024099</id><published>2013-01-31T08:42:00.001-06:00</published><updated>2013-01-31T08:46:00.940-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-31T08:46:00.940-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Git" /><category scheme="http://www.blogger.com/atom/ns#" term="DVCS" /><category scheme="http://www.blogger.com/atom/ns#" term="libgit2" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="ALM" /><category scheme="http://www.blogger.com/atom/ns#" term="TFS" /><category scheme="http://www.blogger.com/atom/ns#" term="Linus Torvalds" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><title>Linus Torvalds' code now in a Microsoft development product</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-6oJbmSdHbOs/UQqABwNx1oI/AAAAAAAAAK0/qIikd2gAf5g/s1600/Git-Icon-Black.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-6oJbmSdHbOs/UQqABwNx1oI/AAAAAAAAAK0/qIikd2gAf5g/s200/Git-Icon-Black.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
Announced yesterday, TFS (Team Foundation Server) now supports Git as an integrated TFS repository. Microsoft has chosen Git as their DVCS (Distributed Version Control System) solution instead of building their own. They have full-time employees contributing to libgit2. I am really happy to see the TFS team move in this direction.

 Git repositories&amp;nbsp;seems to support the full ALM (Application Lifecycle Management)&amp;nbsp;features of TFS.

 &lt;br /&gt;
&lt;br /&gt;
Great interview/overview with Martin Woodward, TFS Program Manager, yesterday on .NET Rocks: &lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=842"&gt;http://www.dotnetrocks.com/default.aspx?showNum=842&lt;/a&gt;

 &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;The irony&lt;/strong&gt;: Linus Torvalds'&amp;nbsp;code is now in a Microsoft development product.&amp;nbsp;Thanks Linus. I, like many, appreciate your work and cannot&amp;nbsp;wait to see your reaction.
Years ago, Linux was the only operating system that I ran--even on a laptop.
Linus Torvalds is the chief architect&amp;nbsp;of the Linux&amp;nbsp;kernel and also founded the Git project.&lt;br /&gt;
&lt;br /&gt;
More details:
&lt;br /&gt;
&lt;u&gt;&lt;span style="color: #0066cc;"&gt;&lt;a href="http://blogs.msdn.com/b/bharry/archive/2013/01/30/git-init-vs.aspx"&gt;http://blogs.msdn.com/b/bharry/archive/2013/01/30/git-init-vs.aspx&lt;/a&gt;&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
Git support is&amp;nbsp;still in&amp;nbsp;CTP at this point and will only run on Visual Studio&amp;nbsp;2012 Update 2 (also CTP).

 &lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/s-Gi2DZ9ng4" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2013/01/linus-torvalds-code-now-in-microsoft.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/4274333686184024099?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/4274333686184024099?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/s-Gi2DZ9ng4/linus-torvalds-code-now-in-microsoft.html" title="Linus Torvalds' code now in a Microsoft development product" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-6oJbmSdHbOs/UQqABwNx1oI/AAAAAAAAAK0/qIikd2gAf5g/s72-c/Git-Icon-Black.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2013/01/linus-torvalds-code-now-in-microsoft.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIBQHc_cCp7ImA9WhNREUw.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-6520127615207921766</id><published>2012-10-05T08:07:00.001-05:00</published><updated>2012-11-05T06:29:11.948-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-05T06:29:11.948-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IntelliSense" /><category scheme="http://www.blogger.com/atom/ns#" term="computational reflection" /><category scheme="http://www.blogger.com/atom/ns#" term="ECMA" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8" /><category scheme="http://www.blogger.com/atom/ns#" term="TypeScript" /><category scheme="http://www.blogger.com/atom/ns#" term="Dart" /><category scheme="http://www.blogger.com/atom/ns#" term="Anders Hejlsburg" /><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="WinRT" /><category scheme="http://www.blogger.com/atom/ns#" term="EMACS" /><category scheme="http://www.blogger.com/atom/ns#" term="Vim" /><category scheme="http://www.blogger.com/atom/ns#" term="ECMAScript" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><title>Top 10 reasons why TypeScript will be widely adopted </title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-zubiepqr34U/UG7Ul38qY2I/AAAAAAAAAKI/LaAZR9mUQPY/s1600/TypeScript.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="277" src="http://3.bp.blogspot.com/-zubiepqr34U/UG7Ul38qY2I/AAAAAAAAAKI/LaAZR9mUQPY/s320/TypeScript.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
TypeScript is a new programming language launched this week by Microsoft. TypeScript is an open source JavaScript superset that adds classes, interfaces, modules, and arrow lambdas to JavaScript.
&lt;br /&gt;
&lt;br /&gt;
With a computer science career (or any other for that matter), it pays to pick the right technology; the one that will ultimately prevail. We invest a lot of time and energy in learning a new technology—granted it is fun—but it helps to be on target. It is easier. Companies and projects&amp;nbsp;benefit as well; the development velocity increases when you pick a good technology, the approach, and business processes are simpler.  Training and architecture are inherently easier. No matter the size, these matter.
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Here are, in my view, the top 10 Reasons why TypeScript will be widely adopted:&lt;/strong&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;#10: Works well with existing projects&lt;/strong&gt;
&lt;br /&gt;
TypeScript can be easily be adopted by any project that uses JavaScript today.
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;#9: Uses structural interfaces&lt;/strong&gt;
&lt;br /&gt;
Structural interfaces are automatically implemented by any object/prototype that complies structurally. 

This means that you can define an interface for existing JavaScript library as long as the object/prototype complies structurally; that is, it has the same properties and functions. It is powerful and practical.
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;#8: Generates JavaScript&lt;/strong&gt;
&lt;br /&gt;
TypeScript is compiled into Javascript to ensure compatibility. This means that it can instantly run in just about any browser—just needs to be ECMA Script 3 compliant.
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;#7: Great tool support&lt;/strong&gt; 
&lt;br /&gt;
Even though TypeScript is at 0.8, there is great tool support especially in Visual Studio. Also, text editor support for Sublime Text, EMACS, Vim. 
Visual Studio IntelliSense is amazingly good for the TypeScript &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=34790"&gt;plug-in and the compiler is built-in&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;#6: Simplicity&lt;/strong&gt;
&lt;br /&gt;
TypeScript has a simple design. The TypeScript compiler is written in TypeScript—an example of &lt;a href="http://www.bing.com/search?q=computational+reflection"&gt;computational reflection&lt;/a&gt;—a beautiful thing. The C# compiler will only be implemented in itself in the next version. The typescript compiler is less than 25k physical lines of code excluding test cases and harness. Check it out the code out for yourself at &lt;a href="http://typescript.codeplex.com/SourceControl/changeset/view/fe3bc0bfce1f"&gt;CodePlex&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;#5: Open Source&lt;/strong&gt;
&lt;br /&gt;
Microsoft has open-sourced the implementation and libraries. This is still in the best interest of Microsoft—internally they have large JavaScript projects to support Office, web properties that they own such as MSN, Windows 8 apps, etc.
The code is available at &lt;a href="http://typescript.codeplex.com/SourceControl/changeset/view/fe3bc0bfce1f"&gt;CodePlex&lt;/a&gt; under an&lt;a href="http://typescript.codeplex.com/license"&gt; Apache 2 License&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;#4: Anders Hejlsberg is involved&lt;/strong&gt;
&lt;br /&gt;
Anders Hejlsberg is a prominent Microsoft Fellow who co-designed several popular and commercially successful programming languages and development tools. He was the original author of Turbo Pascal and the chief architect of Delphi.&amp;nbsp;Anders is&amp;nbsp;the lead architect of C# and core developer on TypeScript.
&lt;br /&gt;
&lt;br /&gt;
I have admired Anders’ work since his first product: Turbo Pascal. Turbo Pascal, an amazing compiler and IDE, was written single handedly by&amp;nbsp;Anders and it ran in less than 64k of memory. It was also lightning (turbo) fast.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;#3: TypeScript is a Javascript superset&lt;/strong&gt;
&lt;br /&gt;
TypeScript extends the JavaScript syntax. Any existing JavaScript program or library works with Typescript without a change.
Existing frameworks such as JQuery and Node.js are full supported. In addition, type declarations are provided. You can also install via &lt;a href="http://www.typescriptlang.org/#Download"&gt;Node.js&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;#2: Aligned with future JavaScript standards: ECMAScript 6&lt;/strong&gt;
&lt;br /&gt;
TypeScript is essentially&amp;nbsp;an &lt;a href="http://www.ecmascript.org/"&gt;ECMAScript&lt;/a&gt; 6 bridge for us. Microsoft's aim is to get the class, interface, and module constructs added to the upcoming ECMA script 6 standard.
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;#1: Enables programming in the large&lt;/strong&gt;
&lt;br /&gt;
Introduces classes, interfaces, and modules—essential ingredients for programming in the large. JavaScript has often been criticized for not allowing programming in the large. In essence, moving us back. In my view, a great developer can produce good code in any language, but it is essential to have modules and other constructs to help with large teams.
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Closing&lt;/strong&gt;
&lt;br /&gt;
Do not necessarily jump ship from .NET and start writing all your code in TypeScript. No doubt, we all have to write JavaScript from time-to-time and TypeScript can help improve the structure of it and increase its scale. Large scale JavaScript can be necessary for &lt;a href="http://www.pursuitofgreatdesign.com/2012/09/two-reasons-why-you-will-like-windows-8.html"&gt;Windows 8&lt;/a&gt; JavaScript/HTML apps.
&lt;br /&gt;
&lt;br /&gt;
This week, &lt;a href="http://www.hanselman.com/blog/"&gt;Scott Hanselman&lt;/a&gt; (@shanselman) tweeted, "he who is most likely to make declarative statements is most likely be to called a fool in retrospect." In my view, TypeScript will be widely adopted (or I am a fool). Tell me what you think? 
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Additional Resources&lt;/strong&gt;
&lt;br /&gt;
There are many ways to contribute to TypeScript: discuss the &lt;a href="http://go.microsoft.com/fwlink/?LinkId=267238"&gt;spec&lt;/a&gt;, write libraries, contribute to the CodePlex project, write code, submit bug reports, answer questions, learn it, provide feedback, and tell others.

&lt;br /&gt;
&lt;br /&gt;
TypeScript: &lt;a href="http://www.typescriptlang.org/"&gt;http://www.typescriptlang.org/&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
Anders Hejlsberg introduction video: &lt;a href="http://channel9.msdn.com/posts/Anders-Hejlsberg-Introducing-TypeScript"&gt;http://channel9.msdn.com/posts/Anders-Hejlsberg-Introducing-TypeScript&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
TypeScript
  
Dart vs. TypeScript comparison by a Dart team member:
&lt;a href="http://www.reddit.com/r/programming/comments/10rkd9/welcome_to_typescript/c6g37xd"&gt;http://www.reddit.com/r/programming/comments/10rkd9/welcome_to_typescript/c6g37xd&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
It is all about elegant code: simple yet powerful—the more the better; otherwise, much less is better. Enjoy.


&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/5t7VUaPKfTQ" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2012/10/top-10-reasons-why-typescript-will-be.html#comment-form" title="11 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/6520127615207921766?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/6520127615207921766?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/5t7VUaPKfTQ/top-10-reasons-why-typescript-will-be.html" title="Top 10 reasons why TypeScript will be widely adopted " /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-zubiepqr34U/UG7Ul38qY2I/AAAAAAAAAKI/LaAZR9mUQPY/s72-c/TypeScript.png" height="72" width="72" /><thr:total>11</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2012/10/top-10-reasons-why-typescript-will-be.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEESHg5fip7ImA9WhBRFk4.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-4258226899857418746</id><published>2012-09-24T07:39:00.000-05:00</published><updated>2013-03-07T00:10:09.626-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-07T00:10:09.626-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Build" /><category scheme="http://www.blogger.com/atom/ns#" term="friction" /><category scheme="http://www.blogger.com/atom/ns#" term="focus" /><category scheme="http://www.blogger.com/atom/ns#" term="modern UI" /><category scheme="http://www.blogger.com/atom/ns#" term="Metro Style" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8" /><category scheme="http://www.blogger.com/atom/ns#" term="Metro" /><category scheme="http://www.blogger.com/atom/ns#" term="great design" /><category scheme="http://www.blogger.com/atom/ns#" term="NUI" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows without windows" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><category scheme="http://www.blogger.com/atom/ns#" term="multi-tasking" /><category scheme="http://www.blogger.com/atom/ns#" term="Metro design language" /><title>Two reasons why you will like Windows 8 store apps even on your desktop and laptop</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-8RE6pHoEIfI/UF-sY6e7LbI/AAAAAAAAAJ0/vfH4Y8_94_w/s1600/MyOffice.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-8RE6pHoEIfI/UF-sY6e7LbI/AAAAAAAAAJ0/vfH4Y8_94_w/s200/MyOffice.jpg" height="150" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
For more than a year, I have been thankfully using a Windows 8 tablet that was given to attendees of &lt;a href="http://www.pursuitofgreatdesign.com/2011/09/five-perspectives-why-build-could-be.html"&gt;build&lt;/a&gt; last year. Since then,&amp;nbsp;I have been using the tablet as both a consumption and creation device—and even as a +95% replacement for my &lt;a href="http://www.moleskineus.com/plainpocket.html"&gt;Moleskine notebook&lt;/a&gt;.&amp;nbsp;Windows 8 preview editions have been very stable for me throughout the process including Visual Studio 11 (2012).
&lt;br /&gt;
&lt;br /&gt;
Two reasons why, in my view, you will even like to use Windows 8 store apps on your desktop and laptop:
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;1. Reduced Friction&lt;/strong&gt; 
&lt;br /&gt;
Traditional window management tasks&amp;nbsp;such as moving, sizing, restoring, minimizing, maximizing, and closing&amp;nbsp;are excise. This excise creates friction in the user experience. It may seem small, but it takes work to even get to the point where you can accomplish a goal. &lt;a href="http://www.pursuitofgreatdesign.com/2012/03/why-has-microsofts-metro-design.html"&gt;Great interfaces get out of the way&lt;/a&gt; and window management, often times, gets right in the way.  
&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;2. Improved Focus&lt;/strong&gt;
&lt;br /&gt;
Multi-tasking is a fallacy. Many studies done including a recent one at MIT conclusively show that what we commonly consider to be multitasking actually occurs in a sequential, not simultaneous manner (&lt;a href="http://www.megatraxblog.com/2012/08/22/the-fallacy-of-multi-tasking/"&gt;Source&lt;/a&gt;).&amp;nbsp; All of us,&amp;nbsp;should focus on&amp;nbsp;a single task at a time. People do &lt;a href="http://www.pursuitofgreatdesign.com/2011/08/who-makes-best-keyboard-7-reasons.html"&gt;fuse with their tools&lt;/a&gt;—&lt;a href="http://www.wired.com/wiredscience/2010/03/heidegger-tools/"&gt;cognitively at least&lt;/a&gt;; so, proper tooling can make a big difference in our behavior and productivity.

 &lt;br /&gt;
&lt;br /&gt;
In my view, using Windows 8 store apps can help improve your &lt;a href="http://www.pursuitofgreatdesign.com/2011/09/what-is-key-to-developing-great-mobile.html"&gt;focus&lt;/a&gt; by forcing you to focus on one or two apps at a time. This style will just help us create better apps to help people be more productive overall.  

&lt;br /&gt;
&lt;br /&gt;
"But I need to monitor my email and switch quickly between applications," you say.
 &lt;br /&gt;
&lt;br /&gt;
I agree. Sometimes there is no substitute for a multi-monitor multi-window environment; however, Windows 8 does enable a quick context switch without having to re-launch the Windows store app. Quickly spin through your cognitive context of 5 to 7 things and start new ones. With simple gestures, you can quickly switch between contexts, dock, or close an app. These simple gestures also work well with a track pad or mouse. If you had to re-launch the app every time that you did a context switch, that too would create friction and excise.
&lt;br /&gt;
&lt;br /&gt;
With the &lt;a href="http://www.pursuitofgreatdesign.com/2012/03/why-has-microsofts-metro-design.html"&gt;focus on the content and not the excise and chrome&lt;/a&gt;, the experience can be much better.
 &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br /&gt;
My belief is that you will enjoy Windows store apps even on a laptop and desktop. Now, as a developer, I spend a lot of time using the traditional desktop with Visual Studio and with many other apps. 
&lt;br /&gt;
&lt;br /&gt;
This only the beginning—a 1.0—of a shift in using Windows without windows. Even with a multi-monitor desktop, I use Window Store apps often—and even trumps over some traditional desktop apps. One example, I prefer using the Windows store app &lt;em&gt;tweeTRO&lt;/em&gt; over any other desktop or web Twitter client.
 &lt;br /&gt;
&lt;br /&gt;
Imagine making the same gestures without touching the display or a mouse—in front of a TV, game console, or even desktop. I can imagine a day when we will develop code with our hands and bodies not just our fingers (do not worry: &lt;a href="http://www.pursuitofgreatdesign.com/2011/11/why-is-next-major-paradigm-shift-in.html"&gt;computational thinking is still required&lt;/a&gt;).
&lt;br /&gt;
&lt;br /&gt;
We will &lt;a href="http://www.wired.com/wiredscience/2010/03/heidegger-tools/"&gt;fuse&lt;/a&gt; with Windows 8 in many other ways beyond the keyboard and mouse.
&lt;br /&gt;
&lt;br /&gt;
In my view, the &lt;a href="http://www.pursuitofgreatdesign.com/2012/03/why-has-microsofts-metro-design.html"&gt;Modern UI style&lt;/a&gt; (formerly known as &lt;a href="http://www.pursuitofgreatdesign.com/2012/03/why-has-microsofts-metro-design.html"&gt;Metro&lt;/a&gt;) is great design. Windows 8 is certainly not perfect and granted not everyone will enjoy it as much as I do, but my belief is that sooner or later&amp;nbsp;you will too. 
&lt;br /&gt;
&lt;br /&gt;
Enjoy.
&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/b01IDIPqsgo" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2012/09/two-reasons-why-you-will-like-windows-8.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/4258226899857418746?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/4258226899857418746?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/b01IDIPqsgo/two-reasons-why-you-will-like-windows-8.html" title="Two reasons why you will like Windows 8 store apps even on your desktop and laptop" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-8RE6pHoEIfI/UF-sY6e7LbI/AAAAAAAAAJ0/vfH4Y8_94_w/s72-c/MyOffice.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2012/09/two-reasons-why-you-will-like-windows-8.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08GRHk-fCp7ImA9WhNaGEQ.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-2152641394818962819</id><published>2012-09-19T07:30:00.000-05:00</published><updated>2013-02-03T07:57:05.754-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-03T07:57:05.754-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mocks" /><category scheme="http://www.blogger.com/atom/ns#" term="Metro" /><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="WinRT" /><category scheme="http://www.blogger.com/atom/ns#" term="needs" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile apps" /><category scheme="http://www.blogger.com/atom/ns#" term="workarounds" /><category scheme="http://www.blogger.com/atom/ns#" term="interfaces" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>Top 3 WinRT .NET needs</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-h4BRd3mpKHI/UFkbue5qEyI/AAAAAAAAAJk/obNMuJGyW3g/s1600/WinRT.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="http://4.bp.blogspot.com/-h4BRd3mpKHI/UFkbue5qEyI/AAAAAAAAAJk/obNMuJGyW3g/s320/WinRT.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
WinRT is the new Windows 8 runtime used to create &lt;a href="http://www.pursuitofgreatdesign.com/2012/03/why-has-microsofts-metro-design.html"&gt;Windows Store apps&lt;/a&gt;. WinRT provides language projections (bindings) for C#, Visual Basic, C++, and Javascript. &lt;br /&gt;
&lt;br /&gt;
Loosely speaking, WinRT can be thought of as an object-oriented sandboxed secure replacement for Win32.
 
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In my view, the top 3 WinRT .NET needs are as follows:
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Update:&amp;nbsp;Thanks to Jayson Go for pointing out that #1 now 
works. I am very happy for this feedback.&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;However, each method must return Task&amp;lt;TResult&amp;gt;.&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strike&gt;&lt;strong&gt;Need #1: Allow async in Interfaces &lt;/strong&gt; 
&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;Interfaces are contracts that a class or struct can implement in its own way. Interfaces help separate the contract from the implementation. Interfaces provide a powerful mechanism that helps make &lt;/strike&gt;&lt;a href="http://en.wikipedia.org/wiki/Dependency_injection"&gt;&lt;strike&gt;dependency injection&lt;/strike&gt;&lt;/a&gt;&lt;strike&gt; easier (and some would argue even possible). Interfaces can also help to reduce dependencies in general. They also make Test Driven Development easier by enabling clients to bind to a contract—not a concrete implementation. This way, it is easier to introduce a test double. &lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;C# 5.0&amp;nbsp;introduces two new powerful keywords (&lt;span id="goog_815397329"&gt;&lt;/span&gt;&lt;/strike&gt;&lt;a href="http://www.pursuitofgreatdesign.com/2011/11/why-is-next-major-paradigm-shift-in.html"&gt;&lt;strike&gt;async and await&lt;/strike&gt;&lt;/a&gt;&lt;span id="goog_815397330"&gt;&lt;/span&gt;&lt;strike&gt;) to help make &lt;/strike&gt;&lt;a href="http://www.pursuitofgreatdesign.com/2011/11/why-is-next-major-paradigm-shift-in.html"&gt;&lt;strike&gt;asynchrony&lt;/strike&gt;&lt;/a&gt;&lt;strike&gt; easier. The problem: only a method can be modified with the async keyword. This includes anonymous methods, and lambda expressions. This does not include a method definition in an interface however. This is a problem because you will not be able to call an async method when expecting an interface type. 
 
&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;This is the #1 need, in my view, because interfaces are a key architectural mechanism when implementing services, repositories, facades, roles, partial views, etc.
 
&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;If you are using Javascript, then this will not be a problem. Javascript uses promises to handle asynchrony.
 
&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;&lt;strong&gt;Workarounds&lt;/strong&gt;
&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;Use inheritance with no interfaces.

&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;Soft cast—not pretty.
&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;&lt;/strike&gt;&lt;br /&gt;
&lt;strike&gt;Bridge pattern from the &lt;/strike&gt;&lt;a href="http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/"&gt;&lt;strike&gt;Gang of Four&lt;/strike&gt;&lt;/a&gt;&lt;strike&gt;&amp;nbsp; 
&lt;/strike&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Need #2:  Mock testing framework&lt;/strong&gt;
&lt;br /&gt;
Mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A programmer typically creates a mock object to test the behavior of some other object, in much the same way (&lt;a href="http://en.wikipedia.org/wiki/Mock_Object"&gt;Source&lt;/a&gt;).&amp;nbsp; 
 
&lt;br /&gt;
&lt;br /&gt;
Currently, there are no mock testing frameworks such as RhinoMocks available for "Windows Store" app development. 
  
&lt;br /&gt;
&lt;br /&gt;
The reason: there is no dynamic proxy generation due to a missing namespace in the "Windows Store" profile: System.Reflection.Emit.
  
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Workarounds&lt;/strong&gt;
&lt;br /&gt;
Use other kinds of test doubles such as fakes and stubs instead; this has been my approach.

&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/hh441482.aspx"&gt;Microsoft Fakes&lt;/a&gt;, is a new framework that generates test code for interfaces instead of dynamically mocking them but in a mock like fashion.&amp;nbsp; Microsoft Fakes is only available in Visual Studio 2012 Ultimate.
&lt;br /&gt;
&lt;br /&gt;
MoQRT like Microsoft Fakes in that it generates the test code for an interface instead of dynamically mocking them.
 
 
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Need #3: ADO.NET and other APIs
&lt;/strong&gt;&lt;br /&gt;
The API for "Windows Store" apps is very tight and does not contain ADO.NET and Entity Framework. Mobile apps should also work when you are offline. Since WinRT is the future platform for Windows development, then there will be very sophisticated apps developed with WinRT. Sophisticated apps need sophisticated storage.
 
&lt;br /&gt;
&lt;br /&gt;
The WinRT profile is a significant subset of the full .NET 4.5 profile. In addition, many classes were moved into the Windows.* namespace (WinRT) which helps make them available to C++ and Javascript. This just creates an exercise in mapping the old to the new. 
 
&lt;br /&gt;
&lt;br /&gt;
On the other hand, WinRT is tight. We are back to time where it is possible for the system to be understood by a single person.  
 
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Workarounds&lt;/strong&gt;
&lt;br /&gt;
Storage alternatives; these bits are even fresher than WinRT’s so be aware:
&lt;a href="http://winrtstoragehelper.codeplex.com/"&gt;http://winrtstoragehelper.codeplex.com/&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://winrtdatabase.codeplex.com/"&gt;http://winrtdatabase.codeplex.com/&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://siaqodb.com/"&gt;http://siaqodb.com/&lt;/a&gt;
&lt;br /&gt;
SQLite
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;br /&gt;
Despite the needs, developing for Windows 8 still feels years beyond developing for iOS. Developing for iOS is like being back in 1995. Hey, the 90's were a blast, but it is time to move forward. Luckily, tooling is not a problem for Windows 8 development.&amp;nbsp; 
 
&lt;br /&gt;
&lt;br /&gt;
I
have been developing with Visual Studio 11 (2012) and Windows 8 since I was
given a prototype tablet about a year ago at &lt;a href="http://www.pursuitofgreatdesign.com/2011/09/five-perspectives-why-build-could-be.html"&gt;Build&lt;/a&gt; by Microsoft. These needs
have been on my mind since.&lt;br /&gt;
&lt;br /&gt;
Please&amp;nbsp;share any new frameworks or workarounds that you discover,&amp;nbsp;and also the needs that are at the top of your list. &lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/EJc_ZMXiq_g" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2012/09/top-3-winrt-net-needs.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/2152641394818962819?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/2152641394818962819?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/EJc_ZMXiq_g/top-3-winrt-net-needs.html" title="Top 3 WinRT .NET needs" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-h4BRd3mpKHI/UFkbue5qEyI/AAAAAAAAAJk/obNMuJGyW3g/s72-c/WinRT.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2012/09/top-3-winrt-net-needs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAARHs4eyp7ImA9WhJQGE4.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-8383499752031204720</id><published>2012-08-01T09:16:00.003-05:00</published><updated>2012-08-01T09:19:05.533-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-01T09:19:05.533-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="focus" /><category scheme="http://www.blogger.com/atom/ns#" term="complexity" /><category scheme="http://www.blogger.com/atom/ns#" term="chronological" /><category scheme="http://www.blogger.com/atom/ns#" term="actions to take" /><category scheme="http://www.blogger.com/atom/ns#" term="product development" /><category scheme="http://www.blogger.com/atom/ns#" term="complexity kills" /><category scheme="http://www.blogger.com/atom/ns#" term="intelligence" /><title>[Y2] in pursuit of great design</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-jKV9hNqgCEY/TjyjpeNotXI/AAAAAAAAAFM/XLT7WWTXqwg/s1600/Eye.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-jKV9hNqgCEY/TjyjpeNotXI/AAAAAAAAAFM/XLT7WWTXqwg/s1600/Eye.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;em&gt;In pursuit of great design&lt;/em&gt; started two years ago with a focus&amp;nbsp;on software systems. From the start, my intent has been to &lt;a href="http://www.pursuitofgreatdesign.com/2010/07/in-pursuit-of-great-design.html"&gt;share my pursuit of great design with my friends and colleagues&lt;/a&gt;.
&amp;nbsp;
&lt;br /&gt;
&lt;br /&gt;
No doubt great design takes &lt;a href="http://www.pursuitofgreatdesign.com/2011/09/what-is-key-to-developing-great-mobile.html"&gt;focus&lt;/a&gt; and is, essentially, a battle against our common enemy: &lt;a href="http://www.pursuitofgreatdesign.com/2010/11/what-is-killer-of-software-projects-and.html"&gt;complexity&lt;/a&gt;.  
&amp;nbsp;
&lt;br /&gt;
&lt;br /&gt;
So what is to come? There are two questions that will help drive the pursuit:
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Does great software need to be intelligent or at least smart enough?
&lt;/li&gt;
&lt;li&gt;How do we produce great designs and&amp;nbsp;products consistently?
&amp;nbsp;
&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
The pursuit continues…&lt;br /&gt;
&lt;span style="font-size: large;"&gt;

&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://www.pursuitofgreatdesign.com/2011/08/y1-in-pursuit-of-great-design.html"&gt;&lt;span style="font-size: large;"&gt;&lt;strong&gt;[Y1] chronologically&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;strong&gt;[Y2] chronologically&lt;/strong&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;a href="http://www.pursuitofgreatdesign.com/2011/08/why-use-decision-framework.html"&gt;Why use a decision framework?&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.pursuitofgreatdesign.com/2011/08/who-makes-best-keyboard-7-reasons.html"&gt;Who makes the best keyboard? 7 Reasons. &lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.pursuitofgreatdesign.com/2011/09/five-perspectives-why-build-could-be.html"&gt;5 Perspectives why Build could be the best conference ever&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.pursuitofgreatdesign.com/2011/09/what-is-key-to-developing-great-mobile.html"&gt;What is the key to developing great mobile apps?&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.pursuitofgreatdesign.com/2011/10/does-video-flicker-on-your-new-windows.html"&gt;Does video playback flicker on your new Windows 8 Samsung 700t1a tablet that you got at Build a few weeks ago?&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.pursuitofgreatdesign.com/2011/11/why-should-you-read-steve-jobs-by.html"&gt;Why should you read "Steve Jobs" by Walter Isaacson?&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.pursuitofgreatdesign.com/2011/11/why-is-next-major-paradigm-shift-in.html"&gt;Why is the next major paradigm shift in software design about to happen?&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.pursuitofgreatdesign.com/2011/12/what-do-geeks-do-during-holidays.html"&gt;What do geeks do during the holidays?&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.pursuitofgreatdesign.com/2012/01/5-reasons-to-use-feature-pattern-in.html"&gt;5 Reasons to use the "Feature" pattern in your product&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.pursuitofgreatdesign.com/2012/03/why-has-microsofts-metro-design.html"&gt;Why has Microsoft's Metro design language captured the essence of modern interface design? 5 key elements.&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.pursuitofgreatdesign.com/2012/06/how-to-identify-under-abstracted-design.html"&gt;How to identify an under-abstracted design?&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/pWNnQDqBY9c" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2012/08/y2-in-pursuit-of-great-design.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/8383499752031204720?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/8383499752031204720?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/pWNnQDqBY9c/y2-in-pursuit-of-great-design.html" title="[Y2] in pursuit of great design" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-jKV9hNqgCEY/TjyjpeNotXI/AAAAAAAAAFM/XLT7WWTXqwg/s72-c/Eye.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2012/08/y2-in-pursuit-of-great-design.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYNRX8-fyp7ImA9WhJTEUg.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-6164008128964077363</id><published>2012-06-13T11:39:00.000-05:00</published><updated>2012-06-19T20:53:14.157-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-19T20:53:14.157-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="under-abstracted" /><category scheme="http://www.blogger.com/atom/ns#" term="great design" /><category scheme="http://www.blogger.com/atom/ns#" term="what kills great design?" /><category scheme="http://www.blogger.com/atom/ns#" term="separation of concerns" /><category scheme="http://www.blogger.com/atom/ns#" term="cyclomatic complexity" /><category scheme="http://www.blogger.com/atom/ns#" term="complexity" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="under-abstraction" /><category scheme="http://www.blogger.com/atom/ns#" term="over-abstracted" /><category scheme="http://www.blogger.com/atom/ns#" term="code is design" /><category scheme="http://www.blogger.com/atom/ns#" term="duplicate code" /><category scheme="http://www.blogger.com/atom/ns#" term="DRY" /><title>How to identify an under-abstracted design?</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-9C7_KOi9_U4/T9fwRlJguVI/AAAAAAAAAIc/EXI73z-AQ_0/s1600/design.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="174" src="http://4.bp.blogspot.com/-9C7_KOi9_U4/T9fwRlJguVI/AAAAAAAAAIc/EXI73z-AQ_0/s200/design.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;strong&gt;What is an under-abstracted design?&lt;/strong&gt;
&lt;br /&gt;
A design can be over-abstracted in some areas and under-abstracted in others. Just as over-abstracted designs can have too many abstractions and classes, under-abstracted designs have too few to handle interactions and satisfy requirements.&amp;nbsp;Intuitively, it might seem that an under-abstracted design would be good, easy,&amp;nbsp;and&amp;nbsp;simple, but the real problem is that an under-abstracted design is difficult to understand, change, and maintain. Ironically, the result of under-abstracted design is high complexity and excessive amounts of code. &lt;br /&gt;
&lt;br /&gt;
The good news is that is easy to identify and address these areas. Once addressed, your confidence and development velocity will increase; and more importantly, you will be able to satisfy new business needs.
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;What is the best indicator&amp;nbsp;of an&amp;nbsp;under-abstracted design?&lt;/strong&gt;
&lt;br /&gt;
In my view, high complexity is the best indicator. Not only will it help identify under-abstracted areas of your design, but real problem areas within your codebase.    
&lt;br /&gt;
&lt;br /&gt;
A simple and long standing complexity metric is cyclomatic complexity. Cyclomatic complexity (or conditional complexity) is a software metric developed by Thomas J McCabe in 1976. 
Basically, it is a measure of the number of control flows with a method, function, or module. The metric is computed by counting the number of decision points + 1. For a more formal definition, check out McCabe’s original paper: &lt;em&gt;&lt;a href="http://www.literateprogramming.com/mccabe.pdf"&gt;A Complexity Measure&lt;/a&gt;&lt;/em&gt;.&lt;br /&gt;
&lt;br /&gt;
With Visual Studio Pro and above, you can identify these areas within a couple of minutes even if you are not familiar with the codebase. To do this in Visual Studio, use the following menu item: &lt;em&gt;Analyze-&amp;gt;Calculate Code Metrics for Solution&lt;/em&gt;. Visual Studio 2012 allows you to export the metrics to excel so that you can more easily identify the methods that have the highest complexity.

&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;How to evaluate risk by cyclomatic complexity?&lt;/strong&gt;
&lt;br /&gt;
There is a strong correlation between defect density and high cyclomatic complexity.
Below is a risk evaluation for methods as defined by &lt;a href="http://www.sei.cmu.edu/reports/97hb001.p"&gt;Software Engineering Institute&lt;/a&gt; (SEI):
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-left: 125px;"&gt;
&lt;strong&gt;Cyclomatic Complexity Risk Summary&lt;/strong&gt;
&lt;br /&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1-10 &lt;/td&gt;&lt;td&gt;Simple, low risk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11-20&lt;/td&gt;&lt;td&gt;Moderate complexity, medium risk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21-50&lt;/td&gt;&lt;td&gt;Complex, high risk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;51+&lt;/td&gt;&lt;td&gt;Untestable (Very high risk)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;strong&gt;Why is using cyclomatic complexity metric important?&lt;/strong&gt;
&lt;br /&gt;
In short, complicated methods and classes are tough to understand, difficult to test, challenging to debug, and usually require vast amounts of time and attention to maintain. 
&lt;br /&gt;
&lt;br /&gt;
To understand code, it must be readable. The concept, although not the method, is somewhat similar to that of general text complexity measured by the Flesch-Kincaid Readability Test. 
Methods with lower cyclomatic complexity are much easier to test. &lt;br /&gt;
&lt;br /&gt;
When modifying a method with 50+ cyclomatic complexity, chances are very strong that you will introduce at least one&amp;nbsp;defect while either adding a new feature or fixing another defect.
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Other good indicators…&lt;/strong&gt;
&lt;br /&gt;
Here are a few other indicators to help identify under-abstracted design:
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Duplicate code&lt;/strong&gt;
&lt;br /&gt;&lt;em&gt;How to identify&lt;/em&gt;: In Visual Studio 2012, you can identify duplicate automatically using the following menu item: &lt;em&gt;Analyze-&amp;gt;Analyze Solution for Code Clones&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No business, service, or data access layers &lt;/strong&gt;&lt;em&gt;&lt;br /&gt;How to identify&lt;/em&gt;: All the code is in the User Interface layer represents&amp;nbsp;a lack of “separation of concerns”; that is, where all of the business logic, security, data access is performed in the user interface layer. This indicator might be obvious to many, but is not followed even more. Even if your design has a clean separation of concerns, there can still be high cyclomatic complexity in the business and UI layers.
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Too many methods and members per class (Large classes)&lt;/strong&gt;&lt;em&gt;&lt;br /&gt;How to identify&lt;/em&gt;: Look for large classes in terms of Lines of Code&amp;nbsp;(LOC) and perform manual inspection. Look for classes that are&amp;nbsp;doing more than one thing. The number of methods and LOC can be subjective, but&amp;nbsp;here is a discussion&amp;nbsp;on &lt;a href="http://stackoverflow.com/questions/4338831/when-is-a-class-too-big"&gt;stackoverflow&lt;/a&gt; of what that number might&amp;nbsp; be. &amp;nbsp; &lt;/li&gt;
&lt;/ul&gt;
&lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;br /&gt;
Under-abstracted design is definitely not &lt;a href="http://www.pursuitofgreatdesign.com/2010/07/what-is-great-design.html"&gt;great design&lt;/a&gt;. In my view, cyclomatic complexity is a simple, well established, metric that can identify under-abstracted areas of your design and codebase. The irony: under-abstracted design results in high complexity and excessive duplicate code.&lt;br /&gt;
&lt;br /&gt;
Remember, &lt;a href="http://www.pursuitofgreatdesign.com/2010/11/what-is-killer-of-software-projects-and.html"&gt;complexity is our common enemy&lt;/a&gt;&amp;nbsp;so keep fighting it.
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Upcoming&lt;/strong&gt;: How to advance an under-abstracted design?


&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/tK_mKXEpx4M" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2012/06/how-to-identify-under-abstracted-design.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/6164008128964077363?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/6164008128964077363?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/tK_mKXEpx4M/how-to-identify-under-abstracted-design.html" title="How to identify an under-abstracted design?" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-9C7_KOi9_U4/T9fwRlJguVI/AAAAAAAAAIc/EXI73z-AQ_0/s72-c/design.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2012/06/how-to-identify-under-abstracted-design.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUHQns9fip7ImA9WhVaGEs.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-4992558829407786829</id><published>2012-03-05T06:46:00.000-06:00</published><updated>2012-06-16T12:20:33.566-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-16T12:20:33.566-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="swiss design" /><category scheme="http://www.blogger.com/atom/ns#" term="elegance" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="Metro Style" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8" /><category scheme="http://www.blogger.com/atom/ns#" term="visual design" /><category scheme="http://www.blogger.com/atom/ns#" term="Metro" /><category scheme="http://www.blogger.com/atom/ns#" term="typography" /><category scheme="http://www.blogger.com/atom/ns#" term="user experience" /><category scheme="http://www.blogger.com/atom/ns#" term="WinRT" /><category scheme="http://www.blogger.com/atom/ns#" term="great design" /><category scheme="http://www.blogger.com/atom/ns#" term="NUI" /><category scheme="http://www.blogger.com/atom/ns#" term="Xbox" /><category scheme="http://www.blogger.com/atom/ns#" term="steve jobs" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 7" /><category scheme="http://www.blogger.com/atom/ns#" term="product development" /><category scheme="http://www.blogger.com/atom/ns#" term="Metro design language" /><title>Why has Microsoft's Metro design language captured the essence of modern interface design? 5 key elements.</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-gLtdKHu35LU/T1QZ8-PQwGI/AAAAAAAAAHk/cS0-gdZhw5Y/s1600/Signs.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="174" src="http://4.bp.blogspot.com/-gLtdKHu35LU/T1QZ8-PQwGI/AAAAAAAAAHk/cS0-gdZhw5Y/s200/Signs.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;strong&gt;What is Metro? &lt;/strong&gt;&lt;br /&gt;
Metro is a typography-based design language. Metro style is guiding a new unified experience on Windows 8, Xbox, Windows phone 7, and can even be experience on Windows 7 in the form of Zune, and Windows Live.&amp;nbsp;A design language, such as Metro, is used to guide the architecture of a group of products by capturing the principles and elements of a design approach into a single concise set. Metro gets its name from &lt;em&gt;way finding&lt;/em&gt; systems found in metropolitan areas such as airports, subways, and urban areas. Metro gets its inspiration from modern design (reductionism), &lt;a href="http://en.wikipedia.org/wiki/International_Typographic_Style"&gt;Swiss design&lt;/a&gt; (clear, honest, and beautiful), and motion design (the force of time—the way we experience the world).&lt;br /&gt;
&lt;br /&gt;
In my view, great interface design &lt;a href="http://www.pursuitofgreatdesign.com/2011/08/who-makes-best-keyboard-7-reasons.html"&gt;gets out of the way&lt;/a&gt;&amp;nbsp;and Metro gets out of the way by focusing on the content.&amp;nbsp;Metro has captured the essence of modern interface design based on five key elements.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style="font-size: large;"&gt;The 5 key elements&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;1.&amp;nbsp;Typography&lt;/strong&gt;&lt;br /&gt;
Metro is founded upon clean beautiful typography. &lt;br /&gt;
Proper color, weight, and size can help eliminate all of the chrome, color, and graphically over manipulated design elements. Even hierarchy can be easily and cleanly shown with just typography. It is not just about typography, it is about the content. &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;2.&amp;nbsp;Authentically Digital (Inversion of Focus)&lt;/strong&gt;&lt;br /&gt;
With Metro, the user is not focused on the chrome elements such as menus, buttons, panels, and color images with in the chrome that are shaded, the user is focused on the content. &lt;br /&gt;
&lt;br /&gt;
With Metro, there has been an inversion of focus. Great interfaces get out of the way.&lt;br /&gt;
&lt;br /&gt;
Metro is not just about typography, it is about content. By removing all chrome, it helps put the focus on the content whether it is text, images, or video.&lt;br /&gt;
&lt;br /&gt;
With&amp;nbsp;a modern interface, we do not need &lt;em&gt;chrome&lt;/em&gt; to indicate what can be pressed or manipulated. Now, the content can be manipulated. After 40 years of &lt;a href="http://en.wikipedia.org/wiki/WIMP_(computing)"&gt;WIMP&lt;/a&gt; based interfaces, we all know how to use a computer.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;3.&amp;nbsp;Spacing with thoughtful reduction&lt;/strong&gt;&lt;br /&gt;
Spacing is important—and made possible with the removal of all of the chrome and over-manipulated design elements. Even if there is room for another button or feature, it certainly does not mean that you should add it. In fact the opposite, you should challenge every element. It takes &lt;a href="http://www.pursuitofgreatdesign.com/2011/09/what-is-key-to-developing-great-mobile.html"&gt;focus&lt;/a&gt;. From a visual design perspective, no longer do we need chrome on top of chrome nested in chrome. &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;4.&amp;nbsp;Motion (fast and fluid)&lt;/strong&gt;&lt;br /&gt;
Motion, used properly, can create a fun fluid interface. It brings the experience to life. In my view, motion is more important than graphic design. Metro uses animation in the right places and for the right reasons:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delight the user&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Simplify the task&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hint towards interaction&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Provide a feeling of moving forward&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Respond to user behavior&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Teach the user how to interact&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;5.&amp;nbsp;Asynchrony and intelligence&lt;/strong&gt;&lt;br /&gt;
It is easy to overlook the importance of this element just as Steve Jobs admittedly missed object-oriented programming when he visited Xerox Parc where he became inspired to produce the Mac. It is easy to miss &lt;a href="http://www.pursuitofgreatdesign.com/2011/11/why-is-next-major-paradigm-shift-in.html"&gt;Async Programming&lt;/a&gt;&amp;nbsp;in the same way.&lt;br /&gt;
&lt;br /&gt;
Asynchrony helps make an experience fluid. &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Closing&lt;/strong&gt;&lt;br /&gt;
Originally &lt;a href="http://en.wikipedia.org/wiki/PARC_(company)"&gt;developed by Xerox over 40 years ago&lt;/a&gt;, the traditional desktop metaphor is a bit tired at least&amp;nbsp;from a design and metaphor perspective. In addition, &lt;a href="http://www.wired.com/magazine/2012/01/st_thompson_analog"&gt;analog design elements&lt;/a&gt; and metaphors are not what digital design needs today. We know that live elements can be tapped or swiped. We do not need 10 pixels of shading and blasted with color inside of a box that is further shaded wrapped in a panel with indentation—you get the idea.&lt;br /&gt;
&lt;br /&gt;
There is a &lt;em&gt;design revolution&lt;/em&gt; at Microsoft. In my view, Microsoft is leading Apple at interface design—I know sounds like heresy. Metro and Windows 8 are not perfect, but the direction is game changing. It is easy and safe to jump on the Apple design bandwagon because mostly their designs are great. But &lt;a href="http://www.pursuitofgreatdesign.com/2010/07/quiet-your-lizard-brain-in-order-to.html"&gt;I am not afraid&lt;/a&gt; to point out that &lt;a href="http://www.pursuitofgreatdesign.com/2011/08/who-makes-best-keyboard-7-reasons.html"&gt;Apple&lt;/a&gt; is not the only company that is doing great design and&amp;nbsp;appreciates great designers. Now, it seems that almost every company cares about great design. Design matters.&lt;br /&gt;
&lt;br /&gt;
In my view, the Metro design language has captured the essence of modern interface design.&amp;nbsp;Metro is modern and clean—fierce reductionism, &lt;a href="http://www.pursuitofgreatdesign.com/2010/11/what-is-killer-of-software-projects-and.html"&gt;simple&lt;/a&gt;, and fluid.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.pursuitofgreatdesign.com/2011/08/y1-in-pursuit-of-great-design.html"&gt;Enjoy the pursuit&lt;/a&gt;.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/bLMyrek9Fvk" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2012/03/why-has-microsofts-metro-design.html#comment-form" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/4992558829407786829?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/4992558829407786829?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/bLMyrek9Fvk/why-has-microsofts-metro-design.html" title="Why has Microsoft's Metro design language captured the essence of modern interface design? 5 key elements." /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-gLtdKHu35LU/T1QZ8-PQwGI/AAAAAAAAAHk/cS0-gdZhw5Y/s72-c/Signs.png" height="72" width="72" /><thr:total>7</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2012/03/why-has-microsofts-metro-design.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08CQXwzfyp7ImA9WhBSFks.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-3095339819236753553</id><published>2012-01-30T21:27:00.001-06:00</published><updated>2013-02-23T19:37:40.287-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-23T19:37:40.287-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="product management" /><category scheme="http://www.blogger.com/atom/ns#" term="design pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="simplicity" /><category scheme="http://www.blogger.com/atom/ns#" term="feature" /><category scheme="http://www.blogger.com/atom/ns#" term="a/b testing" /><category scheme="http://www.blogger.com/atom/ns#" term="code is design" /><category scheme="http://www.blogger.com/atom/ns#" term="branching" /><category scheme="http://www.blogger.com/atom/ns#" term="devops" /><category scheme="http://www.blogger.com/atom/ns#" term="WinRT" /><category scheme="http://www.blogger.com/atom/ns#" term="Facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="Zuck" /><category scheme="http://www.blogger.com/atom/ns#" term="product development" /><category scheme="http://www.blogger.com/atom/ns#" term="product design" /><title>5 Reasons to use the "Feature" pattern in your product</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-dlbaUL6VUA0/Tycro98O7cI/AAAAAAAAAHM/6mpZ3DoB6mM/s1600/Zuck.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/-dlbaUL6VUA0/Tycro98O7cI/AAAAAAAAAHM/6mpZ3DoB6mM/s1600/Zuck.png" /&gt;&lt;/a&gt;&lt;/div&gt;
A &lt;a href="http://en.wikipedia.org/wiki/Christopher_Alexander"&gt;design pattern&lt;/a&gt; is a formal way of documenting a solution to a design problem. &lt;br /&gt;
&lt;br /&gt;
The "Feature" design pattern is a simple yet powerful mechanism that enables you to rollout features based on configuration settings. It provides the ability to turn these high-level features "on" or "off" by changing the configuration parameter values.

The basic&amp;nbsp;idea: use a simple mechanism to control the features that are&amp;nbsp;presented to the end user.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style="font-size: large;"&gt;5 Reasons to use the "Feature" pattern in your product&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;1&lt;/strong&gt;&lt;strong&gt;. Reduces the need to branch&lt;/strong&gt;:&amp;nbsp;The longer your branch remains unmerged, the greater chance that it will never make it.
By being able to not turn the feature "on" until ready in production, but continue to work in the main or trunk branch is valuable.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;2. Partial rollbacks (isolated)&lt;/strong&gt;: A single new feature will not hold up a production deployment, it can be turned "off" until ready.
It  keeps progress moving and a feature rollout does not have to necessarily coincide with a code rollout.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;3. Different features for different folks&lt;/strong&gt;: Will make it easier to turn a feature "on" for testing in a particular environment, but "off" for your production environment. It can also help with partial user and A/B testing.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;4. Helps reduce risk&lt;/strong&gt;: With the ability to turn features "off" until ready, it can allow you to increase development velocity without necessarily increasing risk. &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;5. Used by #winners&lt;/strong&gt;: Facebook, Amazon, and many others.&amp;nbsp;Today, Facebook has many new features that are not yet turned on yet but deployed to their production environment. Although not an intended reason, Facebook has even&amp;nbsp;turned on features in production to react to new features from Google+. Features ready to be turned "on."&lt;br /&gt;
&lt;br /&gt;
My hope: the "Feature" pattern will help you for the same reasons.&lt;br /&gt;
&lt;br /&gt;
For more details about the Feature pattern, see the somewhat terse pattern description&amp;nbsp;below along with the source code. There is not much to this simple yet powerful pattern. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style="font-size: large;"&gt;Pattern Name: Feature&lt;/span&gt;&lt;/strong&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Intent&lt;/strong&gt;&lt;br /&gt;
Provide a simple yet powerful way to turn features "on" and "off" via configuration. This enables certain environments to have certain features turned "on."&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Also Known As&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Motivation (Forces)&lt;/strong&gt;&lt;br /&gt;
Demand for high development velocity and the need to mitigate risk.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Applicability&lt;/strong&gt;
&lt;br /&gt;
Web apps, &lt;a href="http://en.wikipedia.org/wiki/Freemium"&gt;freemium&lt;/a&gt; business models, mobile apps, services, etc.

&lt;br /&gt;
&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Structure&lt;/strong&gt;
&lt;br /&gt;
The&amp;nbsp;pattern&amp;nbsp;structure is simple and consists of the Feature class.&amp;nbsp;


&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-sesI_sF1aKU/TycLkKzsklI/AAAAAAAAAHE/Q_EjV77eixk/s1600/Feature.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-sesI_sF1aKU/TycLkKzsklI/AAAAAAAAAHE/Q_EjV77eixk/s1600/Feature.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;strong&gt;Participants&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;Feature&lt;/strong&gt;&lt;/em&gt;: Represents a Feature that can be turned on or off based on an app setting. You can take an action if it is  on, off, or both.
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Collaboration&lt;/strong&gt;&lt;br /&gt;
Here is an example code fragment that interacts with Feature:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;           Feature.BasedOn(&lt;span class="str"&gt;"Product.Feature.IsOn"&lt;/span&gt;)&lt;/pre&gt;
&lt;pre&gt;                .IfOn(() =&amp;gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;                {&lt;/pre&gt;
&lt;pre&gt;                    &lt;span class="rem"&gt;// do the feature&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;                })&lt;/pre&gt;
&lt;pre&gt;                .IfOff(() =&amp;gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;                {&lt;/pre&gt;
&lt;pre&gt;                    &lt;span class="rem"&gt;// do the alternative or not&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;                });&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
If the the configuration parameter "Product.Feature.IsOn" is set to "true," then the IfOn action will be invoked; otherwise, the IfOff action will be invoked.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Consequences&lt;/strong&gt;&lt;br /&gt;
Be sure to get granularity right.&amp;nbsp; Be wary of &lt;a href="http://gregcowin.blogspot.com/2010/11/what-is-killer-of-software-projects-and.html"&gt;adding features&lt;/a&gt; at too fine of detail. Complex feature interaction can also complicate testing.
Although a more &lt;a href="http://gregcowin.blogspot.com/2010/11/what-is-killer-of-software-projects-and.html"&gt;general discussion&lt;/a&gt;, make sure that each feature is justified. However, even in a design world&amp;nbsp;driven by&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/YAGNI"&gt;YAGNI&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/KISS_principle"&gt;KISS&lt;/a&gt;&amp;nbsp;principles, you still need some flexibility—just make sure that it is justified.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Implementation&lt;/strong&gt;&lt;br /&gt;
Here is a simple implementation of the Feature pattern in C# below:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Configuration;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Product.Support
{
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Represents a Feature that can be turned on or off&lt;/span&gt;
    &lt;span class="rem"&gt;/// based on an app setting. You can take an action if it is &lt;/span&gt;
    &lt;span class="rem"&gt;/// on, off, or both.&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Feature
    {
        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// Based on this app setting. &lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; AppSettingKey { &lt;span class="kwrd"&gt;get&lt;/span&gt;; &lt;span class="kwrd"&gt;set&lt;/span&gt;; }

        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// Create a feature based on the given setting.&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;param name="appSettingKey"&amp;gt;The app setting that determines whether the feature is turned on or off.&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;Newly created feature.&amp;lt;/returns&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Feature BasedOn(&lt;span class="kwrd"&gt;string&lt;/span&gt; appSettingKey)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(appSettingKey)) &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"setting key cannot be null or empty."&lt;/span&gt;);
            Feature feature = &lt;span class="kwrd"&gt;new&lt;/span&gt; Feature();
            feature.AppSettingKey = appSettingKey;
            &lt;span class="kwrd"&gt;return&lt;/span&gt; feature;
        }

        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// Whether the feature is turned on; that is, if the app setting&lt;/span&gt;
        &lt;span class="rem"&gt;/// has a value of true; otherwise, false.&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;Whether the feature is on; that is, if the app setting&lt;/span&gt;
        &lt;span class="rem"&gt;/// has a value of true.&amp;lt;/returns&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsOn()
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (AppSettingKey == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
            &lt;span class="kwrd"&gt;string&lt;/span&gt; value = ConfigurationManager.AppSettings[AppSettingKey];
            &lt;span class="kwrd"&gt;return&lt;/span&gt; (value != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; value.ToLower() == &lt;span class="str"&gt;"true"&lt;/span&gt;);
        }

        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// Performs the given action if the feature is turned on.&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;param name="action"&amp;gt;The action to take.&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;The feature&amp;lt;/returns&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; Feature IfOn(Action action)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (IsOn())
                action.Invoke();
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;;
        }

        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// Performs the given action if the feature is turned off.&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;param name="action"&amp;gt;The action to take.&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;The feature&amp;lt;/returns&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; Feature IfOff(Action action)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!IsOn())
                action.Invoke();
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;;
        }
    }
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;strong&gt;Sample Code&lt;/strong&gt;&lt;br /&gt;
As sample code, here&amp;nbsp;are some unit tests that interact with the Feature class:&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.VisualStudio.TestTools.UnitTesting;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Product.Support
{
    [TestClass]
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; FeatureTests
    {
        [TestMethod]
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Feature_IsOff_Success()
        {
            &lt;span class="rem"&gt;// arrange&lt;/span&gt;
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; isPass = &lt;span class="kwrd"&gt;false&lt;/span&gt;;

            &lt;span class="rem"&gt;// act&lt;/span&gt;
            Feature.BasedOn(&lt;span class="str"&gt;"Product.Feature.IsNotOn"&lt;/span&gt;)
                .IfOn(() =&amp;gt;
                {
                    isPass = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
                })
                .IfOff(() =&amp;gt;
                {
                    isPass = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
                });

            &lt;span class="rem"&gt;// assert&lt;/span&gt;
            Assert.IsTrue(isPass);
        }

        [TestMethod]
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Feature_IsOn_Success()
        {
            &lt;span class="rem"&gt;// arrange&lt;/span&gt;
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; isPass = &lt;span class="kwrd"&gt;false&lt;/span&gt;;

            &lt;span class="rem"&gt;// act&lt;/span&gt;
            Feature.BasedOn(&lt;span class="str"&gt;"Product.Feature.IsOn"&lt;/span&gt;)
                .IfOn(() =&amp;gt;
                {
                    isPass = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
                })
                .IfOff(() =&amp;gt;
                {
                    isPass = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
                });

            &lt;span class="rem"&gt;// assert&lt;/span&gt;
            Assert.IsTrue(isPass);
        }
    }
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;strong&gt;Known Uses&lt;/strong&gt;
&lt;br /&gt;
Facebook, Amazon, and others.

&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Related Patterns&lt;/strong&gt;&lt;br /&gt;
For a couple more previously unpublished&amp;nbsp;patterns (Instrumentation and Service Protector),&amp;nbsp;check out this article that I wrote for the Microsoft Developer Network last year, &lt;a href="http://msdn.microsoft.com/en-us/library/hh273114.aspx"&gt;WCF Decision Framework&lt;/a&gt;:&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2011/08/why-use-decision-framework.html"&gt;http://gregcowin.blogspot.com/2011/08/why-use-decision-framework.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2011/08/y1-in-pursuit-of-great-design.html"&gt;Enjoy the pursuit of great design&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/QIaD9P6aVpc" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2012/01/5-reasons-to-use-feature-pattern-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/3095339819236753553?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/3095339819236753553?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/QIaD9P6aVpc/5-reasons-to-use-feature-pattern-in.html" title="5 Reasons to use the &quot;Feature&quot; pattern in your product" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-dlbaUL6VUA0/Tycro98O7cI/AAAAAAAAAHM/6mpZ3DoB6mM/s72-c/Zuck.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2012/01/5-reasons-to-use-feature-pattern-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YBQns7eSp7ImA9WhVaGEs.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-7399510353826566457</id><published>2011-12-24T15:05:00.000-06:00</published><updated>2012-06-16T12:52:33.501-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-16T12:52:33.501-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WinRT" /><category scheme="http://www.blogger.com/atom/ns#" term="treat your geek right" /><category scheme="http://www.blogger.com/atom/ns#" term="Build" /><category scheme="http://www.blogger.com/atom/ns#" term="Command Center" /><category scheme="http://www.blogger.com/atom/ns#" term="Workstation" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8" /><title>What geeks do during the holidays?</title><content type="html">Just so you know: geeks have a bright inner spirit that is just hidden beneath a few layers of logic and critical thinking. Although not comforting to think about, geeks even require a bit of love.&lt;br /&gt;
&lt;br /&gt;
In this spirit, here is my &lt;a href="http://gregcowin.blogspot.com/2011/07/how-to-design-your-own-command-center.html"&gt;workstation&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-xYAnMhTMvkQ/TvYwMLXE6JI/AAAAAAAAAG4/mOqQ5Qji8eM/s1600/Front.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://2.bp.blogspot.com/-xYAnMhTMvkQ/TvYwMLXE6JI/AAAAAAAAAG4/mOqQ5Qji8eM/s640/Front.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-aHwLoXw205w/TvYwJUtSARI/AAAAAAAAAGw/Yq2V-IgxlL0/s1600/Back.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Moreover, here is the other side sporting some &lt;a href="http://gregcowin.blogspot.com/2011/09/five-perspectives-why-build-could-be.html"&gt;Windows 8&lt;/a&gt;.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;img border="0" height="480" src="http://1.bp.blogspot.com/-aHwLoXw205w/TvYwJUtSARI/AAAAAAAAAGw/Yq2V-IgxlL0/s640/Back.jpg" width="640" /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Happy Holidays! Do great work for people that you care about and it will lead to happiness.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
One last thing: don't forget to treat your geek right.&lt;/div&gt;
&lt;br class="Apple-interchange-newline" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/5zr9O6OvbY0" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2011/12/what-do-geeks-do-during-holidays.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/7399510353826566457?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/7399510353826566457?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/5zr9O6OvbY0/what-do-geeks-do-during-holidays.html" title="What geeks do during the holidays?" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-xYAnMhTMvkQ/TvYwMLXE6JI/AAAAAAAAAG4/mOqQ5Qji8eM/s72-c/Front.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2011/12/what-do-geeks-do-during-holidays.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08EQXs6eCp7ImA9WhNREE4.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-5730614374986286796</id><published>2011-11-20T08:08:00.001-06:00</published><updated>2012-11-04T08:36:40.510-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-04T08:36:40.510-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WinRT" /><category scheme="http://www.blogger.com/atom/ns#" term="NUI" /><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="simplicity" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="ood" /><category scheme="http://www.blogger.com/atom/ns#" term="next paradigm shift" /><category scheme="http://www.blogger.com/atom/ns#" term="code is design" /><category scheme="http://www.blogger.com/atom/ns#" term="product development" /><category scheme="http://www.blogger.com/atom/ns#" term="oop" /><title>Why is the next major paradigm shift in software design about to happen?</title><content type="html">&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-1_ENDyzWOcA/TskKE0ahpnI/AAAAAAAAAGI/iWXRtBk700c/s1600/hal9000-med.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-1_ENDyzWOcA/TskKE0ahpnI/AAAAAAAAAGI/iWXRtBk700c/s1600/hal9000-med.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;What is the next major paradigm shift?&lt;/b&gt;&lt;br /&gt;
In my view&lt;b&gt;,&lt;/b&gt; the next major paradigm shift in software development will be asynchronous (or &lt;i&gt;async&lt;/i&gt;) programming and design.&amp;nbsp;It is our next paradigm shift because it helps alleviate pressures and follows a surprising progression. Only when we change the way that we program, does it change the way we design. When we significantly change the way we design—a major paradigm shift occurs. This change has been brewing for over ten years, but only now is it about to happen.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What is async programming?&lt;/b&gt;&lt;br /&gt;
Async programming uses asynchronous method calls instead of synchronous calls especially for potentially long-running methods. The idea: you make an asynchronous call and then provide a mechanism to run code when the result returns. Async programming is necessary for responsive browser, mobile, and upcoming Metro style apps that are mono-threaded as well as for intensive multi-threaded server applications. When all components are async, it can be fluid, natural, and resilient.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Why is async design the next major paradigm shift?&lt;/b&gt;&lt;br /&gt;
The main reason is that it helps satisfy a strong and growing need: to make use of multi-core processors and to make mono-threaded user interfaces highly responsive. In-browser apps allow only one thread. &amp;nbsp;Async programming makes both possible. New mechanisms for async programming in upcoming &lt;a href="http://msdn.microsoft.com/en-us/vstudio/gg316360"&gt;C# 5.0&lt;/a&gt; makes it much easier.&amp;nbsp;Asynchrony dramatically affects design.&lt;br /&gt;
&lt;br /&gt;
The shift also follows a surprising progression. Realize that for the past 50+ years, we have had stable high-level programming elements: data, functions, and threads; although combining them was a challenge.&lt;br /&gt;
&lt;br /&gt;
Even though &lt;a href="http://en.wikipedia.org/wiki/Structured_design#Structured_Design"&gt;structured programming and design&lt;/a&gt;&amp;nbsp;(SP/SD)&amp;nbsp;techniques are still used today, before the mid 90's, it was the conventional or mainstream way to build applications. The problem: structured design treated data, functions, and threads as complete separate abstractions.&lt;br /&gt;
&lt;br /&gt;
Today, &lt;a href="http://en.wikipedia.org/wiki/Object-oriented"&gt;object-oriented programming and design&lt;/a&gt;&amp;nbsp;(OOP/OOD) techniques are the conventional way to build applications. Object-oriented programming and design combine data and functions into a single mechanism: the class or object. &lt;br /&gt;
&lt;br /&gt;
Async Programming and Design (AP/AD) gives us a simple way to combine all three into a simple unified mechanism. An async object or agent consists mostly of asynchronous method calls. New mechanisms in async programming make it easy to combine data, functions, and threads.&lt;br /&gt;
&lt;br /&gt;
These paradigm shifts (structured, object-oriented, and async) have gradually combined these high-level programming elements. Each paradigm shift has always started with changes to programming, and then to our designs. Only when it moves to design do we realize that a paradigm shift has occurred.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-nujHvd7xc-o/TskQv_bSwbI/AAAAAAAAAGY/UxGeYFuJ-YU/s1600/SD-OP-AP.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-nujHvd7xc-o/TskQv_bSwbI/AAAAAAAAAGY/UxGeYFuJ-YU/s1600/SD-OP-AP.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;div style="font-size: 9.75pt; margin: 0in;"&gt;
High-level programming elements in relation to paradigm shifts.&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
If this is truly the progression, then async programming will lead to async design. It might also hold true that async design is a natural evolution in &lt;a href="http://en.wikipedia.org/wiki/Computational_thinking"&gt;computational thinking&lt;/a&gt;. Moreover, it provides an easy way to map to multi and mono-threaded applications and to avoid deadlock, latency issues, and race conditions.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Why is it about to happen?&lt;/b&gt;&lt;br /&gt;
It is about to happen because great mechanisms for Async Programming are about to become mainstream that will make it much easier. And once async programming becomes mainstream, then so will async design. Our designs are about to significantly change and&amp;nbsp;a major paradigm shift will follow. This has been brewing for over ten years. Just as with structured design and object-oriented design, it took over ten years &lt;a href="http://gregcowin.blogspot.com/2010/09/why-will-it-take-30-years-for-cloud.html"&gt;for it to evolve and become mainstream&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What are the implications?&lt;/b&gt;&lt;br /&gt;
Today, best of breed architectures consist of a directed-acyclic graph (DAG) of object-oriented components. Fully async objects or agents can help flatten this DAG of components reducing overall dependencies. Realize that most of today’s software architectures are probably not the best of breed.&lt;br /&gt;
&lt;br /&gt;
Looking back, structured design led to some of the least desirable forms of &lt;a href="http://en.wikipedia.org/wiki/Cohesion_(computer_science)"&gt;cohesion&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Coupling_(computer_programming)"&gt;coupling&lt;/a&gt;. OOP/OOD led to much more desirable defined shapes of software. For me, the revelation at a time of uncertainty for the&amp;nbsp;OOP/OOD paradigm shift was that it naturally led to more desirable forms of cohesion and coupling. &lt;br /&gt;
&lt;br /&gt;
One of the key benefits of Async Design is that it leads to even better shape, and reduces overall dependencies. Flattening the DAG will be the required for ever-increasing architectural complexity. Great software design will, eventually,&amp;nbsp;require software intelligence.&lt;br /&gt;
&lt;br /&gt;
Asynchronous systems are radically different and will require new patterns, architectural viewpoints, mechanisms, and education. Unlike synchronous systems, asynchronous systems will not be halted like an assembly line due to a single point of failure or delay. Asynchronous systems will be&amp;nbsp;even a&amp;nbsp;truer reflection of the way a real company operates—like an organism—not an object-oriented an system.&lt;br /&gt;
&lt;br /&gt;
A new category of software patterns will emerge. These new patterns will help us deal with more autonomy and system intelligence.&lt;br /&gt;
&lt;br /&gt;
We will begin to design fully autonomous objects that consist primarily of async methods that leverage mono and multi-threaded environments.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Where can you go from here?&lt;/b&gt;&lt;br /&gt;
Change the way you program and it will change the way you design. Check out some of the resources below for more information on async programming for .NET.&lt;br /&gt;
&lt;br /&gt;
You know you are close to crossing this chasm within your company or team when the last objection is performance. Unbelievably, functions were thought too costly for structured programming and dynamic binding was thought too costly for object-oriented programming. Once people overcome the performance objections of asynchronous methods, we will know that the industry is about to shift.&lt;br /&gt;
&lt;br /&gt;
Soon, great designs that are fluid, intelligent, natural, and resilient will be async.&lt;br /&gt;
&lt;br /&gt;
Whenever we go, make the most of it. If you do not enjoy programming and design, then you are probably doing &lt;a href="http://gregcowin.blogspot.com/2010/07/can-great-design-be-produced-in.html"&gt;something wrong&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Additional Resources&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://blogs.msdn.com/b/visualstudio/archive/2011/04/13/async-ctp-refresh.aspx"&gt;Async CTP&lt;/a&gt; (can be used with .NET 4.0) &lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh452713(v=vs.85).aspx"&gt;Metro async/await&lt;/a&gt;&amp;nbsp; &lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx"&gt;C#&amp;nbsp;5.0&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=23753"&gt;C# Specification&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/RG_f4-1k7Xw" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2011/11/why-is-next-major-paradigm-shift-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/5730614374986286796?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/5730614374986286796?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/RG_f4-1k7Xw/why-is-next-major-paradigm-shift-in.html" title="Why is the next major paradigm shift in software design about to happen?" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-1_ENDyzWOcA/TskKE0ahpnI/AAAAAAAAAGI/iWXRtBk700c/s72-c/hal9000-med.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2011/11/why-is-next-major-paradigm-shift-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEHRXc_cCp7ImA9WhRbEEs.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-5647017696359770910</id><published>2011-11-17T08:06:00.003-06:00</published><updated>2012-01-31T20:50:34.948-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-31T20:50:34.948-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="simplicity" /><category scheme="http://www.blogger.com/atom/ns#" term="elegance" /><category scheme="http://www.blogger.com/atom/ns#" term="steve jobs" /><category scheme="http://www.blogger.com/atom/ns#" term="product development" /><category scheme="http://www.blogger.com/atom/ns#" term="product design" /><title>Why should you read "Steve Jobs" by Walter Isaacson?</title><content type="html">&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-_WF8oKJsS3k/TsUVNySGUTI/AAAAAAAAAF0/3zPML5pvGaI/s1600/SteveJobs.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-_WF8oKJsS3k/TsUVNySGUTI/AAAAAAAAAF0/3zPML5pvGaI/s200/SteveJobs.png" width="140" /&gt;&lt;/a&gt;&lt;/div&gt;
Read it, if you want to feel inspired, surprised, sad, confident, spiritual, or compelled to build something great. You will enjoy. &lt;i&gt;Steve Jobs&lt;/i&gt; by Walter Isaacson is a great read especially for the 2011 holidays. The book is authentic, compelling, inspiring, informative, surprising, and even sad. &amp;nbsp;So sad, that you will likely cry.&lt;br /&gt;
&lt;br /&gt;
While the book is over 600 pages, it was not enough. Steve's life was messy. He was petulant and took credit for many others work. Johnny Ives, one of Steve’s best friends, admitted that it hurt deeply when Jobs took credit for many of his designs. At times, he was unusually cruel and rude. Even though he could be a jerk, he deeply admired other great designers, spiritual leaders, and “A” players.&lt;br /&gt;
&lt;br /&gt;
There are many surprises in the book such as he knew that his cancer had metastasized and would likely kill him. At times, he thought that diet and magical thinking could overcome it. He should have opted for surgery nine months earlier. Ironically, it put him in overdrive to produce the iPad. Steve was obsessed with the pursuit of great design.&lt;br /&gt;
&lt;br /&gt;
I was surprised and oddly comforted that Steve was often unsure of his decisions, direction, designs, and leadership. Bad reviews would devastate him. He was human. &lt;br /&gt;
&lt;br /&gt;
Walter Isaacson took an honest, authentic, and interesting look into Steve's life.&lt;br /&gt;
&lt;br /&gt;
In typical Jobsonian manner, the last chapter is a "one more thing", that is mostly in the words of Steve Jobs instead of traditionally the Biographer. The words are from one of the last interviews that Isaacson did with Jobs. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Steve&lt;/b&gt;: you are one of the crazy ones. You definitely were able to &lt;a href="http://gregcowin.blogspot.com/2010/07/quiet-your-lizard-brain-in-order-to.html"&gt;quiet your lizard brain&lt;/a&gt;&amp;nbsp;to consistently produce great designs.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/__do2Ihju8I" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2011/11/why-should-you-read-steve-jobs-by.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/5647017696359770910?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/5647017696359770910?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/__do2Ihju8I/why-should-you-read-steve-jobs-by.html" title="Why should you read &quot;Steve Jobs&quot; by Walter Isaacson?" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-_WF8oKJsS3k/TsUVNySGUTI/AAAAAAAAAF0/3zPML5pvGaI/s72-c/SteveJobs.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2011/11/why-should-you-read-steve-jobs-by.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUDRn4zcSp7ImA9WhdUFk0.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-7992463057679162720</id><published>2011-10-02T16:13:00.000-05:00</published><updated>2011-10-02T19:37:57.089-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-02T19:37:57.089-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Best Conference Ever" /><category scheme="http://www.blogger.com/atom/ns#" term="Build" /><category scheme="http://www.blogger.com/atom/ns#" term="Samsung tablet" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8" /><category scheme="http://www.blogger.com/atom/ns#" term="WDDM" /><category scheme="http://www.blogger.com/atom/ns#" term="Intel HD Graphics" /><title>Does video playback flicker on your new  Windows 8 Samsung 700t1a tablet that you got at Build a few weeks ago?</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-DLocJ9xhDDU/TojTWYHzD0I/AAAAAAAAAFk/aEkZyKHSBRk/s1600/My+Station.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-DLocJ9xhDDU/TojTWYHzD0I/AAAAAAAAAFk/aEkZyKHSBRk/s200/My+Station.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
Over the weekend, I
got the following recommended update to Windows 8:&lt;/div&gt;
&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
Intel Corporation
driver for Intel® HD Graphics Family (Microsoft Corporation - WDDM 1.2)
(Recommended) Windows Update&lt;/div&gt;
&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
It started causing
flicker during any video playback including backgrounds such as in the Weather
app.&amp;nbsp; If you are having the same problem,
there is an easy fix.&lt;/div&gt;
&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
Rollback to the
Intel Corporation driver for Intel® HD Graphics Family (Microsoft Corporation -
WDDM 1.2) to 8/3/2011 v 9.16.10.2472&lt;/div&gt;
&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
I used the Driver
rollback feature but did not work remove the flicker even after reboot, so, I
loaded the driver from the USB drive that was given to us at build. It fixed
this issue.&lt;/div&gt;
&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
Hope this helps some of the attendees from&amp;nbsp;&lt;a href="http://www.buildwindows.com/"&gt;Build&lt;/a&gt;. It was the &lt;a href="http://gregcowin.blogspot.com/2011/09/five-perspectives-why-build-could-be.html"&gt;best conference ever.&lt;/a&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/COrQsnDzx8Y" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2011/10/does-video-flicker-on-your-new-windows.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/7992463057679162720?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/7992463057679162720?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/COrQsnDzx8Y/does-video-flicker-on-your-new-windows.html" title="Does video playback flicker on your new  Windows 8 Samsung 700t1a tablet that you got at Build a few weeks ago?" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-DLocJ9xhDDU/TojTWYHzD0I/AAAAAAAAAFk/aEkZyKHSBRk/s72-c/My+Station.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2011/10/does-video-flicker-on-your-new-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYEQnw-eyp7ImA9WhVaGEs.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-8827366536028422976</id><published>2011-09-12T09:45:00.000-05:00</published><updated>2012-06-16T12:18:23.253-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-16T12:18:23.253-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="beautiful" /><category scheme="http://www.blogger.com/atom/ns#" term="WinRT" /><category scheme="http://www.blogger.com/atom/ns#" term="NUI" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile apps" /><category scheme="http://www.blogger.com/atom/ns#" term="simplicity" /><category scheme="http://www.blogger.com/atom/ns#" term="focus" /><category scheme="http://www.blogger.com/atom/ns#" term="elegance" /><category scheme="http://www.blogger.com/atom/ns#" term="minimal" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="simple" /><category scheme="http://www.blogger.com/atom/ns#" term="product development" /><title>What is the key to developing great mobile apps?</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-eTQ26w8gsYg/Tm4aIwpotmI/AAAAAAAAAFg/Sx_LBke1Kbg/s1600/Focus.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/-eTQ26w8gsYg/Tm4aIwpotmI/AAAAAAAAAFg/Sx_LBke1Kbg/s1600/Focus.png" /&gt;&lt;/a&gt;&lt;/div&gt;
The key is focus. You must find the essence of the product. You must deliver the key features needed—not all of them—just the essential ones. It requires focus because that is what people want and expect. People want the NUI (Natural User Interface) experience to be better, simpler, and to satisfy their goals in a simple natural way. Just because there is room for another link, gadget, button, or ad, does not mean you should add it. The friction that is created, conceptual weight, and maintenance usually don't justify it. It is just a different way of thinking. Simple, minimal, and beautiful—the attributes all apps should have. By focusing on what is important, you could even change your whole company. Focus leads to great design.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/4ITPT-DScCY" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2011/09/what-is-key-to-developing-great-mobile.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/8827366536028422976?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/8827366536028422976?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/4ITPT-DScCY/what-is-key-to-developing-great-mobile.html" title="What is the key to developing great mobile apps?" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-eTQ26w8gsYg/Tm4aIwpotmI/AAAAAAAAAFg/Sx_LBke1Kbg/s72-c/Focus.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2011/09/what-is-key-to-developing-great-mobile.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YDRXo7fSp7ImA9WhVaGEs.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-2640819816368587333</id><published>2011-09-11T17:32:00.000-05:00</published><updated>2012-06-16T12:52:54.405-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-16T12:52:54.405-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WinRT" /><category scheme="http://www.blogger.com/atom/ns#" term="treat your geek right" /><category scheme="http://www.blogger.com/atom/ns#" term="NUI" /><category scheme="http://www.blogger.com/atom/ns#" term="Best Conference Ever" /><category scheme="http://www.blogger.com/atom/ns#" term="Build" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8" /><category scheme="http://www.blogger.com/atom/ns#" term="5 perspectives" /><category scheme="http://www.blogger.com/atom/ns#" term="CLR" /><title>Five perspectives why Build could be the best conference ever</title><content type="html">&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-766JbWcB9-0/Tm00WBWyCkI/AAAAAAAAAFc/dAM0HNC5LNI/s1600/Build.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="74" src="http://3.bp.blogspot.com/-766JbWcB9-0/Tm00WBWyCkI/AAAAAAAAAFc/dAM0HNC5LNI/s320/Build.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href="http://www.buildwindows.com/"&gt;Build &lt;/a&gt;is a new Microsoft conference that replaces the PDC (Programmers Developer Conference), and also possibly combines MIX and even WinHEC (Windows Hardware Engineering Conference) moving forward. The idea for the first Build: combine developers, designers, and hardware partners to create a new platform and a unified ecosystem around Windows 8. Build 2011 is in Anaheim, CA from 9.13 – 9.16.&lt;br /&gt;
&lt;br /&gt;
Build sold out by the end of August even though there is no real agenda defined yet—even now two days before the conference begins. &amp;nbsp;While Windows 8 has been demoed and talked about before, Microsoft is keeping most of the details to be revealed at Build (&lt;a href="http://www.youtube.com/watch?v=p92QfWOw88I"&gt;Source&lt;/a&gt;, &lt;a href="http://www.engadget.com/2011/06/01/microsoft-unveils-windows-8-tablet-prototypes/"&gt;Source&lt;/a&gt;). We do know that it will be about Windows 8. Windows 8 or whatever it might be called could be a radical departure from traditional Windows architecture and create an entirely new ecosystem.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Five perspectives why Build could be the best conference ever&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Perspective #1: Personal &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
One of the main reasons why I switched from Java to .NET over seven years ago is because of the CLR. When Microsoft originally launched .NET, I thought, “Wow, Microsoft finally has great technology and it is the CLR with .NET. Eventually, I know it will become Microsoft’s future platform someday.” I went out and bought a copy of the original Visual C# .net that was launched in 2002 to begin learning C# and the .NET framework.&lt;br /&gt;
&lt;br /&gt;
In my view, the CLR is great technology. &amp;nbsp;Microsoft had dedicated big resources to .NET, Visual Studio, CLR, etc. The CLR is fundamental technology that now makes many things now possible such as the Azure fabric controller, which is really a utility of computing by hosting CLRs in different roles. &lt;br /&gt;
&lt;br /&gt;
Could the CLR be the future of Windows 8 as well? Will the CLR become the future of Microsoft’s platform? What will Microsoft’s core API be for Windows 8? How radically different could it be? What is the name of it? Rumors of Silverlight’s death been greatly exaggerated?&lt;br /&gt;
&lt;br /&gt;
As it could turn out based on a leaked Windows 8 build (&lt;a href="http://www.zdnet.com/blog/microsoft/under-the-windows-8-hood-questions-and-answers-from-the-trenches/9738"&gt;Source&lt;/a&gt;), Hyper-V will run both Windows 8 and the traditional Windows (think 7 branded as 8) side-by-side—not one on top of the other. The distinction is important. This traditional Windows is said to not even load until it is touched.&lt;br /&gt;
&lt;br /&gt;
Therefore, Windows 8 could be a CLR with a new framework based on top of DirectUI and a XAML based NUI (Natural User Interface). Could it be the CLR a top MinWin? It appears that this Modern Shell will not sit on top of Win32. It will likely be a departure. Windows 8 will also need to incorporate XNA. XNA an Silverlight can be mixed even with Windows Phone 7.&lt;br /&gt;
&lt;br /&gt;
I have also been using Silverlight for the past 3 years. I want to find out if it is the primary way to develop for Windows 8 and what are the other ways? Is there HTML5 tooling? &lt;br /&gt;
&lt;br /&gt;
No doubt, Java developers are doing just fine especially with mobility dev. &amp;nbsp;Some of my Java friends must be at least a little curious about this conference. My plan is to live blog the entire event (details at end the end of the post).&lt;br /&gt;
&lt;br /&gt;
The great thing from a personal perspective: I will have a front row seat to find out that I could be very wrong Windows 8. Either way, it will unfold in a couple of days.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Perspective #2: As a Developer and Designer&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;From a developer and designer perspective, a week of energy, time, and focus dedicated to understanding many new technologies and a new ecosystem that could potentially unify the three screens (with NUI) and the cloud. Think NUI with Xbox 360 and Kinect. As a developer, the CLR, .NET, Visual Studio, and other frameworks makes it easier to develop for Windows 8, Mango, and potentially the Xbox. Clearly, development will be much easier with better technology when compared to iOS development. This factor should help the ecosystem grow.&lt;br /&gt;
&lt;br /&gt;
Some of the new technology areas and sessions to attend (although no session titles announced yet):&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;RedHawk (&lt;a href="http://www.zdnet.com/blog/microsoft/microsoft-codename-redhawk-lives-in-windows-8/9233"&gt;Source&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Jupiter&lt;/li&gt;
&lt;li&gt;AppX&lt;/li&gt;
&lt;li&gt;Visual Studio 2012&lt;/li&gt;
&lt;li&gt;Expression Blend/Web Next&lt;/li&gt;
&lt;li&gt;New Windows 8 frameworks and APIs&lt;/li&gt;
&lt;li&gt;MOSH (MOdern SHell) Design&lt;/li&gt;
&lt;li&gt;Azure&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
I will post more of these with sources. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Perspective #3: Product Development&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
From a new product development perspective, there could be many new product opportunities for this new ecosystem with a marketplace that could unify an API and tools for Windows Phone, Xbox, PC, and tablet. &amp;nbsp;Clients are already waiting for Windows 8 for a possible large field deployment.&lt;br /&gt;
&lt;br /&gt;
The screens combined with Azure can create new opportunities for consumer and line of business apps. This new ecosystem will provide opportunities and potential for new products.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Perspective #4: As a User&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
From Windows 8 user perspective, it will be interesting to experience and review Windows 8 in the tablet form factor. The rumor is that a quad core arm HD tablet will be issued to all conference attendees (&lt;a href="http://www.intomobile.com/2011/09/08/samsung-quadcore-windows-8-tablet-could-land-next-week-build/"&gt;Source&lt;/a&gt;). If it is true, I will take some images and video of the tablet and a review. I will even try to use it to help with the live blogging, email, etc. if possible. I believe that it could finally be a great NUI content creator not just mostly consuming. &lt;br /&gt;
&lt;br /&gt;
No doubt: the iPad is great design with a beautiful form factor. My view is that the experience with a Windows 8 tablet could even be better than the iPad for some of the same reasons &lt;a href="http://gregcowin.blogspot.com/2010/11/top-10-reasons-why-windows-phone-7-is.html"&gt;why Windows Phone 7 is better than the iPhone&lt;/a&gt;. &amp;nbsp;I look forward to experiencing and reviewing the interface first hand.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Perspective #5: Pure Fun&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Build is at the &lt;a href="http://www.bing.com/maps/Default.aspx?encType=1&amp;amp;v=2&amp;amp;ss=ypid.YN102x1626271&amp;amp;style=r&amp;amp;mkt=en-us&amp;amp;FORM=LLDP"&gt;Anaheim Convention center&lt;/a&gt; which is just a couple of towns north of where I went to high school. It is a very nice area in Orange County. &lt;br /&gt;
&lt;br /&gt;
The only thing really on the agenda so far is a Tuesday night reception and a Wednesday Party. There should be some great conversations and energy. Sushi!&lt;br /&gt;
&lt;br /&gt;
One other fun factor: all you have to do is give a bunch of geeks a quad core arm HD tablet with Windows 8 and they will go wild (Source). Geeks gone wild. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;RBA&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Thanks &lt;a href="http://www.rbaconsulting.com/Pages/Default.aspx"&gt;RBA &lt;/a&gt;for sending me to Build—perhaps, the best conference ever. I will share some great stories about RBA later. Not surprising, &lt;a href="http://www.rbaconsulting.com/Pages/Default.aspx"&gt;RBA&lt;/a&gt; was voted one of the best places to work and is one of the fastest growing companies. They treat geeks right. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Live Blog of Build 2011&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Follow the live blog (text, photos, audio, and videos) of Build including any geeks gone wild: &lt;a href="http://build2011.tumblr.com/"&gt;http://build2011.tumblr.com&lt;/a&gt; or &lt;a href="http://build2011.tumblr.com/mobile"&gt;http://build2011.tumblr.com/mobile&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I have been excited about Windows 8 since Sinofsky showed it off at D9 (&lt;a href="http://news.cnet.com/8301-31021_3-20068119-260/sinofsky-shows-off-windows-8-at-d9/?tag=topStories1"&gt;Source&lt;/a&gt;) in June this year.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/3ghRPi4fKXc" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2011/09/five-perspectives-why-build-could-be.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/2640819816368587333?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/2640819816368587333?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/3ghRPi4fKXc/five-perspectives-why-build-could-be.html" title="Five perspectives why Build could be the best conference ever" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-766JbWcB9-0/Tm00WBWyCkI/AAAAAAAAAFc/dAM0HNC5LNI/s72-c/Build.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2011/09/five-perspectives-why-build-could-be.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UFRn8yfSp7ImA9WhBRFkw.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-282371509782749323</id><published>2011-08-24T19:04:00.005-05:00</published><updated>2013-03-06T17:06:57.195-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-06T17:06:57.195-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Your computer is a part of you" /><category scheme="http://www.blogger.com/atom/ns#" term="devops" /><category scheme="http://www.blogger.com/atom/ns#" term="NUI" /><category scheme="http://www.blogger.com/atom/ns#" term="qwerty" /><category scheme="http://www.blogger.com/atom/ns#" term="tools become a part of us" /><category scheme="http://www.blogger.com/atom/ns#" term="tactile" /><category scheme="http://www.blogger.com/atom/ns#" term="build your own command center" /><category scheme="http://www.blogger.com/atom/ns#" term="product development" /><category scheme="http://www.blogger.com/atom/ns#" term="dvorak" /><category scheme="http://www.blogger.com/atom/ns#" term="best keyboard" /><category scheme="http://www.blogger.com/atom/ns#" term="apple" /><title>Who makes the best keyboard? 7 reasons.</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-bpjUU1ig1SM/TlWAAbY7KxI/AAAAAAAAAFQ/pwNOmoJr5Iw/s1600/Keyboard.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-bpjUU1ig1SM/TlWAAbY7KxI/AAAAAAAAAFQ/pwNOmoJr5Iw/s1600/Keyboard.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span class="Apple-style-span"&gt;For the past four years, I have been using, in my view, the best keyboard ever made&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px;"&gt;—&lt;/span&gt;&lt;span class="Apple-style-span"&gt;especially for Windows development. The maker might surprise you. It is the &lt;a href="http://store.apple.com/us/product/MB110LL/B?fnode=MTY1NDA1Mg&amp;amp;mco=MTcwNDQ0NDQ"&gt;Apple keyboard (ultra slim)&lt;/a&gt;. It sells for $49 and that is luckily within reach for most of us. If you have a PC with a USB port, it just works. If you have not used a Mac recently, it has a control, alt (option), and command key. The command key becomes the Windows key.  There are a lot of people that run Windows on Apple hardware so it needs to work.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
I have tried what seems like a reach of different keyboard types including split, natural, heavy tactile and gaming keyboards.  In 1997, I even tried the &lt;a href="http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard"&gt;Dvorak keyboard layout&lt;/a&gt;&amp;nbsp;instead of QWERTY for three months in hopes of typing a little faster.   &lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span"&gt;Tools become an extension of our bodies. Typing becomes an extension of us just as using a mouse, or Natural User Interface (NUI) of tablets, phones, and gaming consoles.  The idea that &lt;a href="http://www.wired.com/wiredscience/2010/03/heidegger-tools/"&gt;Your Computer is a Part of You&lt;/a&gt;&amp;nbsp;is the result in a recent study done by cognitive scientists at Franklin &amp;amp; Marshall College. The results seem to indicate that people do fuse with their tools&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 18px;"&gt;—&lt;/span&gt;&lt;span class="Apple-style-span"&gt;cognitively at least.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Currently, Apple makes the best keyboard, in my view.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
7 Reasons&lt;/h3&gt;
&lt;br /&gt;
&lt;b&gt;1. Easy to type&lt;/b&gt;&lt;br /&gt;
Smooth&amp;nbsp;hurdling (awkward stroke requiring a single finger to jump directly from one row to another row). The keyboard gets out of the way to a large degree.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Low profile&lt;/b&gt;&lt;br /&gt;
The keyboard is so slim that there is no hand rest needed; it feels good; just slide your hands forward naturally on it. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Short key travel &lt;/b&gt;&lt;br /&gt;
Helps me type faster and smoother. Has a nice short crisp tactile feedback. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. Easy to clean&lt;/b&gt;&lt;br /&gt;
Let's face it, &lt;a href="http://arstechnica.com/hardware/news/2008/05/study-keyboards-make-excellent-homes-for-nasty-bacteria.ars"&gt;keyboards make excellent homes for nasty bacteria&lt;/a&gt;.&lt;br /&gt;
When keys are pressed, they are at the level as the aluminum making it easy  to clean since you can clean the base and keys at the same time with a swipe of a paper towel. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;5. Beautiful&lt;/b&gt;&lt;br /&gt;
Heavy for its size; made of aluminum with flat rounded rectangular white keys.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-RAsfzGmnk48/TlWMm9JyqII/AAAAAAAAAFU/VrAFN0JD_b4/s1600/widekeyboard.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-RAsfzGmnk48/TlWMm9JyqII/AAAAAAAAAFU/VrAFN0JD_b4/s400/widekeyboard.png" height="75" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;6. Simple&lt;/b&gt;&lt;br /&gt;
Not a ton of extra keys, but all the ones you really need.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;7. Easy key combos (such as &lt;a href="http://gregcowin.blogspot.com/2011/05/what-can-you-accomplish-with-your.html"&gt;Shift+Ctrl+B&lt;/a&gt;)&lt;/b&gt;&lt;br /&gt;
Just press between the two keys until you feel aluminum; this is one reason that I like it for development; it requires a lot of odd key combinations and symbols.&lt;br /&gt;
&lt;br /&gt;
I first got an Apple keyboard for home. It was fun to type again. Typing became simple, not over-manipulated.  Now, I try to bring one with me anytime that I will be riding a workstation for a while. It is slim even in the box. &lt;br /&gt;
&lt;br /&gt;
In my view, the Apple slim keyboard is great design. It is simple, lasting, and like other great interfaces, it gets out of the way. Granted, you might not like it as much as I do, but definitely a keyboard to consider.  &lt;br /&gt;
&lt;br /&gt;
I hope that the &lt;a href="http://gregcowin.blogspot.com/2011/07/how-to-design-your-own-command-center.html"&gt;command center&lt;/a&gt; will even have a few.&lt;br /&gt;
&lt;br /&gt;
Enjoy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Additional references&lt;/b&gt;&lt;br /&gt;
Print Screen in Windows - F14&lt;br /&gt;
&lt;a href="http://support.apple.com/kb/HT1216"&gt;Key mappings and comparison&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/_SilP5gOlZ4" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2011/08/who-makes-best-keyboard-7-reasons.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/282371509782749323?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/282371509782749323?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/_SilP5gOlZ4/who-makes-best-keyboard-7-reasons.html" title="Who makes the best keyboard? 7 reasons." /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-bpjUU1ig1SM/TlWAAbY7KxI/AAAAAAAAAFQ/pwNOmoJr5Iw/s72-c/Keyboard.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2011/08/who-makes-best-keyboard-7-reasons.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UFQXk8cSp7ImA9WhRbEEs.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-8555918969858763972</id><published>2011-08-13T14:06:00.000-05:00</published><updated>2012-01-31T22:06:50.779-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-31T22:06:50.779-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="devops" /><category scheme="http://www.blogger.com/atom/ns#" term="decisions to make" /><category scheme="http://www.blogger.com/atom/ns#" term="Projects" /><category scheme="http://www.blogger.com/atom/ns#" term="Decision Framework" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Clients" /><category scheme="http://www.blogger.com/atom/ns#" term="TFS" /><category scheme="http://www.blogger.com/atom/ns#" term="Azure" /><category scheme="http://www.blogger.com/atom/ns#" term="actions to take" /><category scheme="http://www.blogger.com/atom/ns#" term="product development" /><category scheme="http://www.blogger.com/atom/ns#" term="intelligence" /><category scheme="http://www.blogger.com/atom/ns#" term="WCF" /><title>Why use a decision framework?</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-gQsNHHXKa0U/TjRP7bBViGI/AAAAAAAAAE0/sWCTeV-EcM4/s1600/DecisionFramework.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-gQsNHHXKa0U/TjRP7bBViGI/AAAAAAAAAE0/sWCTeV-EcM4/s1600/DecisionFramework.png" /&gt;&lt;/a&gt;&lt;/div&gt;
In my view, a decision framework represents a simple, yet potentially powerful, sequence of decisions to make and actions to take. Teams, projects, and clients must navigate effectively when tackling new business opportunities, projects, and technologies. A decision framework structures information in a way that makes it easier for people to make decisions and take actions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A decision framework can help you...&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Avoid traps and pitfalls such as analysis paralysis&lt;/li&gt;
&lt;li&gt;Converge on the right decision&lt;/li&gt;
&lt;li&gt;Take action&lt;/li&gt;
&lt;li&gt;Do the right thing (most important of all)&lt;/li&gt;
&lt;/ul&gt;
For an example of a decision framework, check out this article that I recently wrote for the Microsoft Developer Network (MSDN). The article is a decision framework for WCF (Windows Communication Foundation) development. WCF is a unified communication framework in .NET for building connected, service-oriented applications:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/hh273114.aspx"&gt;WCF Decision Framework: The decisions to make and actions to take when developing a WCF project&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
The article also contains a couple of previously unpublished patterns: &lt;i&gt;Instrumentation &lt;/i&gt;and &lt;i&gt;ServiceProtector&lt;/i&gt;. I hope that the framework will help you develop the SOA that is right for your organization and that you also find it engaging.   &lt;br /&gt;
&lt;br /&gt;
Please let me know what you think of the decision framework method. I think that it has potential to be used in a lot of areas. I have already started simple decision frameworks for Azure and TFS.&lt;br /&gt;
&lt;br /&gt;
In my view, the decision making process is the key to great design, but perhaps not in the way you that you might think—more to follow.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/-PLHp4Gbf68" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2011/08/why-use-decision-framework.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/8555918969858763972?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/8555918969858763972?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/-PLHp4Gbf68/why-use-decision-framework.html" title="Why use a decision framework?" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-gQsNHHXKa0U/TjRP7bBViGI/AAAAAAAAAE0/sWCTeV-EcM4/s72-c/DecisionFramework.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2011/08/why-use-decision-framework.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAFQn8ycSp7ImA9WhVaGEs.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-6407729840784224926</id><published>2011-08-05T21:00:00.183-05:00</published><updated>2012-06-16T12:28:33.199-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-16T12:28:33.199-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lizard brain" /><category scheme="http://www.blogger.com/atom/ns#" term="great design" /><category scheme="http://www.blogger.com/atom/ns#" term="memes" /><category scheme="http://www.blogger.com/atom/ns#" term="in pursuit of great design" /><category scheme="http://www.blogger.com/atom/ns#" term="focus" /><category scheme="http://www.blogger.com/atom/ns#" term="chronological" /><category scheme="http://www.blogger.com/atom/ns#" term="cool deep sustained thought" /><category scheme="http://www.blogger.com/atom/ns#" term="code is design" /><title>[Y1] in pursuit of great design</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-jKV9hNqgCEY/TjyjpeNotXI/AAAAAAAAAFM/XLT7WWTXqwg/s1600/Eye.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-jKV9hNqgCEY/TjyjpeNotXI/AAAAAAAAAFM/XLT7WWTXqwg/s1600/Eye.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;em&gt;In pursuit of great design&lt;/em&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;started one year ago with the focus on software systems. From the start, my intent has been to&amp;nbsp;&lt;a href="http://gregcowin.blogspot.com/2010/07/in-pursuit-of-great-design.html"&gt;share my pursuit of great design with my friends and colleagues&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
No doubt,&amp;nbsp;the pursuit&amp;nbsp;is going to take a lot of energy and cool deep&amp;nbsp;sustained&amp;nbsp;thought, but I finally have a guess where things might end up. Also, the pursuit became much easier when I stopped&amp;nbsp;&lt;a href="http://gregcowin.blogspot.com/2010/07/quiet-your-lizard-brain-in-order-to.html"&gt;listening to my lizard brain&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I hope that you enjoy it in some way. Memes ready to go.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;[Y1] chronologically&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://gregcowin.blogspot.com/2010/07/in-pursuit-of-great-design.html"&gt;In pursuit of great design&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/07/what-is-great-design.html"&gt;What is great design?&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/07/top-10-programming-languages.html"&gt;Top 10 programming languages&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/07/how-can-we-codify-use-cases-more.html"&gt;How can we codify use cases more effectively?&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/07/quiet-your-lizard-brain-in-order-to.html"&gt;Quiet your lizard brain in order to achieve greatness&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/07/can-great-design-be-produced-in.html"&gt;Can great design be produced in a software factory?&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/07/two-necessities-for-you-to-lead-great.html"&gt;Two necessities for you to lead a great team&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/07/can-command-and-control-ever-lead-to.html"&gt;Can command and control ever lead to great design?&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/08/what-is-killer-benefit-of-cloud.html"&gt;What is the killer benefit of cloud computing?&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/08/5-reasons-that-over-defensive.html"&gt;5 reasons that over defensive programming is not great design&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/09/mtc-is-great-design.html"&gt;MTC is great design&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/09/what-is-key-to-intelligent-systems.html"&gt;What is the key to intelligent systems?&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/09/why-will-it-take-30-years-for-cloud.html"&gt;Why will it take 30 years for cloud computing to mature?&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/09/why-do-we-have-so-much-potential.html"&gt;Why do we have so much potential?&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/09/dieter-rams-ten-principles-to-good.html"&gt;Dieter Rams' ten principles to good design&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/09/great-design-is-not-you_23.html"&gt;Great design is not you&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/09/what-is-most-most-difficult-challenge.html"&gt;What is the most difficult challenge in software development?&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/11/3-tips-to-help-you-with-software.html"&gt;3 tips to help you with software integration issues&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/11/what-is-killer-of-software-projects-and.html"&gt;What kills great design?&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/11/top-10-reasons-why-windows-phone-7-is.html"&gt;Top 10 reasons why Windows Phone 7 is better than the iPhone&lt;/a&gt;&amp;nbsp;(this one got you talking)&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/12/top-3-reasons-why-cloud-computing-is.html"&gt;Top 3 reasons why cloud computing is unstoppable&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/12/two-ideas-to-help-your-company-move-to.html"&gt;Two ideas to help your company move into the cloud&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/12/what-is-federal-governments-new-policy.html"&gt;What is the federal government's new policy on cloud computing?&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2010/12/great-quotes-from-great-designers.html"&gt;Great quotes from great designers&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2011/02/azure-forming-cloud-ask-why-what-where.html"&gt;Azure forming a cloud: ask why, what, where, when, and how&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2011/03/which-programming-language-has-most.html"&gt;Which programming language has the most profanity?&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2011/05/what-can-you-accomplish-with-your.html"&gt;What can you accomplish with your little finger?&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2011/06/is-windows-8-great-design.html"&gt;Is Windows 8 great design?&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://gregcowin.blogspot.com/2011/07/how-to-design-your-own-command-center.html"&gt;How to design your own command center&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
More to come.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/Z3zP8wljZAg" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2011/08/y1-in-pursuit-of-great-design.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/6407729840784224926?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/6407729840784224926?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/Z3zP8wljZAg/y1-in-pursuit-of-great-design.html" title="[Y1] in pursuit of great design" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-jKV9hNqgCEY/TjyjpeNotXI/AAAAAAAAAFM/XLT7WWTXqwg/s72-c/Eye.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2011/08/y1-in-pursuit-of-great-design.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UBQXk5eSp7ImA9WhVaGEs.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-8709902841090632102</id><published>2011-07-31T12:56:00.027-05:00</published><updated>2012-06-16T12:54:10.721-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-16T12:54:10.721-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DIY Visio" /><category scheme="http://www.blogger.com/atom/ns#" term="treat your geek right" /><category scheme="http://www.blogger.com/atom/ns#" term="DIY" /><category scheme="http://www.blogger.com/atom/ns#" term="iPad" /><category scheme="http://www.blogger.com/atom/ns#" term="Command Center" /><category scheme="http://www.blogger.com/atom/ns#" term="Build your own lab" /><category scheme="http://www.blogger.com/atom/ns#" term="Workstation" /><category scheme="http://www.blogger.com/atom/ns#" term="build your own command center" /><title>How to design your own command center on a budget</title><content type="html">I realize that this post will probably land me in your Geek circle on Google+, but I feel compelled to share my design and quest for my own command center and lab. No, it is not in my Mom's basement. They do not even have basements in Texas—just saying.&lt;br /&gt;
&lt;br /&gt;
It has been my goal for a long time. It is quite attainable. I think it makes a lot of sense for families. Most families do not have the right space for work, homework, and play. A space for new ideas and collaboration.&lt;br /&gt;
&lt;br /&gt;
Besides, the single workstation office is often a contemptuous place where family members try to elbow each other out of the way. Traditional architectures just do not have the right spaces to accommodate this lifestyle—especially as a software developer.&amp;nbsp;Even my wife now needs a dual-panel for Facebook and email. This has to be a point of contention for a lot of other couples as well.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Here are the DIY (Do It Yourself) Command Center initial steps:&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
1. Design with Visio: has a template to help you get the design down to the inch&lt;br /&gt;
2. Take inventory and make a budget: trying for less than 3K&lt;br /&gt;
3. Get it approved by the finance committee (the hard part)&lt;br /&gt;
4. Build it&lt;br /&gt;
&lt;br /&gt;
My design was inspired by time that I spent in a lab at the &lt;a href="http://gregcowin.blogspot.com/2010/09/mtc-is-great-design.html"&gt;Microsoft Technology Center&lt;/a&gt;&amp;nbsp;(MTC) last year except they have labs with four and six workstations per lab. The labs at the MTC also have a whiteboard in the center instead of the flat panel. It is, also, inspired by actual network operation centers that I have visited.&lt;br /&gt;
&lt;br /&gt;
Here is the Command Center floor plan. I used Visio with Office Layout Template:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-IA66PD50gbo/TjWQBG7n2iI/AAAAAAAAAFE/FWQN-v43T34/s1600/MyCommandCenter.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/-IA66PD50gbo/TjWQBG7n2iI/AAAAAAAAAFE/FWQN-v43T34/s640/MyCommandCenter.png" width="635" /&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;
Here is the text that was cut off to the left about the Plexiglas whiteboard:&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Design and Homework Wall&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;6'x 4' Colored or clear Plexiglas board with rounded corners&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Mounting: 4" metal stand offs or swivel center mount&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;If swivel mount, use LED attached to mounting facing wall for indirect lighting&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
It will be a great place to work and play. A place to collaborate with friends. Also, a workplace for my daughter for homework and games. Hopefully, trig and calculus will be more fun on a clear Plexiglas board.&lt;br /&gt;
&lt;br /&gt;
My plan is to have no books or paper in the lab instead just workstations and iPads (that can contain an entire library of e-books).&lt;br /&gt;
&lt;br /&gt;
I have ideas for a tight cabling system that I have already used successfully on another workstation.  Just power and CAT 5 are needed to each workstation, then all other cabling is brought underneath the table.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-rBCKW4TNpi4/TjWRxrr30qI/AAAAAAAAAFI/uqKsxixN-Fs/s1600/cabeling.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="393" src="http://3.bp.blogspot.com/-rBCKW4TNpi4/TjWRxrr30qI/AAAAAAAAAFI/uqKsxixN-Fs/s400/cabeling.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
It would be great to design the actual furniture and replace flooring, but that will blow out the budget. I plan to use cheap Ikea furniture until it can be replaced. The design challenge is to build a great comfortable workplace with a tight budget constraint. I use indirect LED colored lighting as well.&lt;br /&gt;
&lt;br /&gt;
Maybe this effort will inspire someone else to enter the Geek circle and build his or her own command center.&lt;br /&gt;
&lt;br /&gt;
I will post some more about this—hopefully about step #4. It will be a while until I reach step #3, but I promise I will get there.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/JOC8sbjnUf8" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2011/07/how-to-design-your-own-command-center.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/8709902841090632102?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/8709902841090632102?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/JOC8sbjnUf8/how-to-design-your-own-command-center.html" title="How to design your own command center on a budget" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-IA66PD50gbo/TjWQBG7n2iI/AAAAAAAAAFE/FWQN-v43T34/s72-c/MyCommandCenter.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2011/07/how-to-design-your-own-command-center.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYGQ309eCp7ImA9WhVaGEs.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-1965535841032601685</id><published>2011-06-02T09:24:00.002-05:00</published><updated>2012-06-16T12:18:42.360-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-16T12:18:42.360-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NUI" /><category scheme="http://www.blogger.com/atom/ns#" term="simplicity" /><category scheme="http://www.blogger.com/atom/ns#" term="elegance" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 7" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8" /><category scheme="http://www.blogger.com/atom/ns#" term="Steven Spifnosky" /><category scheme="http://www.blogger.com/atom/ns#" term="product development" /><category scheme="http://www.blogger.com/atom/ns#" term="product design" /><title>Is Windows 8 great design?</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=p92QfWOw88I" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="176" src="http://3.bp.blogspot.com/-uRbxJJd_--k/TeebZqPbmDI/AAAAAAAAAEQ/Z87UMJIpw2Q/s320/Windows8.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
Based on the unveiling last night at &lt;i&gt;All Things Digital&lt;/i&gt; (D9), Windows 8 looks like great design. It is based on a combination of the Metro UI and Windows 7. See Windows 8 for youself. Here is a great overview video: &lt;a href="http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=p92QfWOw88I"&gt;http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=p92QfWOw88I&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Check out this comparison of&amp;nbsp;&lt;a href="http://gregcowin.blogspot.com/2010/11/top-10-reasons-why-windows-phone-7-is.html"&gt;iPhone with Windows Phone 7&lt;/a&gt;&amp;nbsp;for some idea of how Metro differs from iOS. Soon, I will do the same kind of comparison of iOS (tablet) and Windows 8.&lt;br /&gt;
&lt;br /&gt;
Windows 8 was unveiled last night at &lt;i&gt;All Things Digital &lt;/i&gt;by Steven Sinofsky, Microsoft Windows President. &lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/foRvtUvee-Y" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2011/06/is-windows-8-great-design.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/1965535841032601685?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/1965535841032601685?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/foRvtUvee-Y/is-windows-8-great-design.html" title="Is Windows 8 great design?" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-uRbxJJd_--k/TeebZqPbmDI/AAAAAAAAAEQ/Z87UMJIpw2Q/s72-c/Windows8.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2011/06/is-windows-8-great-design.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQDQnYycCp7ImA9WhdQGUg.&quot;"><id>tag:blogger.com,1999:blog-16163431.post-8478158807322035827</id><published>2011-05-25T14:27:00.001-05:00</published><updated>2011-08-21T13:12:53.898-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-21T13:12:53.898-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Shift+Ctrl+B" /><category scheme="http://www.blogger.com/atom/ns#" term="keyboard shortcuts" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><title>What can you accomplish with your little finger?</title><content type="html">You slide your left little finger forward over the control key onto the shift key—holding them both down with light pressure, and then simultaneously hit B with your forefinger. The build is a success. The feedback is immediate. It just feels good. Finally, it motivates you to build a framework that reduces your codebase by 50%, all starting with a beautiful simple motion. &lt;br /&gt;
&lt;br /&gt;
While creative writing might not be my thing, I still hope you find these keyboard shortcut posters for Visual Studio 2010 useful: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=92CED922-D505-457A-8C9C-84036160639F&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=92CED922-D505-457A-8C9C-84036160639F&amp;amp;displaylang=en&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Shift+Ctrl+B&lt;/strong&gt; is my favorite shortcut.&lt;br /&gt;
&lt;br /&gt;
Enjoy&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-9074963644326242";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/gregcowinblog/~4/8GDvSepwfgU" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.pursuitofgreatdesign.com/2011/05/what-can-you-accomplish-with-your.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/8478158807322035827?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/16163431/posts/default/8478158807322035827?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gregcowinblog/~3/8GDvSepwfgU/what-can-you-accomplish-with-your.html" title="What can you accomplish with your little finger?" /><author><name>gc</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_wGsf1HbIFOs/TEMefO55VeI/AAAAAAAAAAM/_wova8uN1Q4/S220/profile.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.pursuitofgreatdesign.com/2011/05/what-can-you-accomplish-with-your.html</feedburner:origLink></entry></feed>
