<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Shannon Whitley</title>
	<atom:link href="http://www.voiceoftech.com/swhitley/index.php" rel="self" type="application/rss+xml" />
	<link>http://www.voiceoftech.com/swhitley</link>
	<description>Inspired by Actual Events</description>
	<lastBuildDate>Thu, 03 May 2012 05:56:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Stolen Guitar Returned By Honest Internet User</title>
		<link>http://www.voiceoftech.com/swhitley/index.php/2012/05/stolen-guitar-returned-by-honest-internet-user/</link>
		<comments>http://www.voiceoftech.com/swhitley/index.php/2012/05/stolen-guitar-returned-by-honest-internet-user/#comments</comments>
		<pubDate>Thu, 03 May 2012 05:56:37 +0000</pubDate>
		<dc:creator>Shannon</dc:creator>
				<category><![CDATA[Bay Area]]></category>
		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://www.voiceoftech.com/swhitley/?p=1248</guid>
		<description><![CDATA[“Do you want to hear the good news or the bad news?”&#160; My guitar instructor had a look on his face, and I knew he ]]></description>
			<content:encoded><![CDATA[<p>“Do you want to hear the good news or the bad news?”&#160; My guitar instructor had a look on his face, and I knew he was only employing that expression for effect; there would be no good news.&#160; He walked me through the sad tale of a smash-and-grab that happened the day before.&#160; He was left with a broken car window and a missing guitar.&#160; He told me about the many customizations he’d made to his instrument.&#160; The guitar had been in a gig bag, which also contained an effects pedal and an expensive guitar/computer accessory.&#160; Surprisingly, he still pulled off a great lesson that day.</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px" id="scid:8747F07C-CDE8-481f-B0DF-C6CFD074BF67:b04930ba-001e-4b70-a24d-4880e3ee792a" class="wlWriterEditableSmartContent"><a href="http://www.voiceoftech.com/swhitley/wp-content/uploads/2012/05/guitar-8x6.jpg" title="A shot of the actual guitar, a Carvin Koa CT6" rel="thumbnail"><img border="0" src="http://www.voiceoftech.com/swhitley/wp-content/uploads/2012/05/guitar.png" width="204" height="293" /></a></div>
<p>A week later, he smiled at me and showed me his guitar.&#160; The stolen guitar had been returned, along with an amazing story.</p>
<p>After the guitar was stolen, it was purchased on the street by a man who had hoped to present it to his nephew as a gift.&#160; The new owner was curious about his purchase and went online to learn more about it.&#160; He performed a search on the Internet, entering all of the words that were engraved on the guitar.&#160; Rather than retrieving manufacturing information, the search engine brought back reports of the stolen instrument, along with the name of the owner.&#160; The person picked up the phone and contacted my guitar teacher.&#160; He said, “I may be out $300, but I should return this to its rightful owner.”</p>
<p>I’m happy to hear that there are still honest people left in the world.&#160; My guitar instructor said the man wouldn’t take money for the guitar.&#160; He ended up giving him a Starbucks gift card.&#160; I hope that man receives all the good karma he deserves.</p>
<div><a href="http://twitter.com/share" class="twitter-share-button"<br />
                data-url=&#8221;http://www.voiceoftech.com/swhitley/index.php/2012/05/stolen-guitar-returned-by-honest-internet-user/&#8221;<br />
                data-text=&#8221;Stolen Guitar Returned By Honest Internet User (Shannon Whitley)&#8221;<br />
                data-count=&#8221;vertical&#8221;<br />
                >Tweet</a></div>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.voiceoftech.com%2Fswhitley%2Findex.php%2F2012%2F05%2Fstolen-guitar-returned-by-honest-internet-user%2F&amp;title=Stolen%20Guitar%20Returned%20By%20Honest%20Internet%20User" id="wpa2a_2"><img src="http://www.voiceoftech.com/swhitley/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.voiceoftech.com/swhitley/index.php/2012/05/stolen-guitar-returned-by-honest-internet-user/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter @Chat</title>
		<link>http://www.voiceoftech.com/swhitley/index.php/2012/04/twitter-chat/</link>
		<comments>http://www.voiceoftech.com/swhitley/index.php/2012/04/twitter-chat/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 00:06:05 +0000</pubDate>
		<dc:creator>Shannon</dc:creator>
				<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.voiceoftech.com/swhitley/?p=1240</guid>
		<description><![CDATA[Back in 2010, I complained that the &#8220;new&#8221; filter that Twitter had implemented would limit the conversations that we&#8217;d see. (The &#8220;@ reply&#8221; filter prevents ]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.voiceoftech.com/swhitley/wp-content/uploads/2007/07/windowslivewriter2222cbbca20e-8e94twitter1.gif"><img class="alignnone  wp-image-308" style="float: right;" title="windowslivewriter2222cbbca20e-8e94twitter1.gif" src="http://www.voiceoftech.com/swhitley/wp-content/uploads/2007/07/windowslivewriter2222cbbca20e-8e94twitter1.gif" alt="" width="100" height="23" /></a></p>
<p>Back in 2010, I complained that the &#8220;new&#8221; filter that Twitter had implemented would limit the conversations that we&#8217;d see. (The &#8220;@ reply&#8221; filter prevents you from viewing conversations between two people unless you follow both of those accounts.)  My original post suggested that we would be exposed to fewer conversations and thus prevented from discovering new and interesting people. While I still believe that&#8217;s true, I think it matters more when you&#8217;re first building your Twitter connections. Just in case you aren&#8217;t aware of the workaround for the filter, you can take a quick peek at that <a href="http://www.voiceoftech.com/swhitley/index.php/2010/05/those-lost-twitter-replies/" target="_blank">older post</a>.</p>
<p>This morning, however, I was thinking how we might be able to put that filter to work for us in another way. Although this is pretty obvious, I haven&#8217;t seen it discussed, so I&#8217;ll outline the general idea here.</p>
<p>Although the @ reply filter could be used for any conversation, the &#8220;chat&#8221; is a perfect use case.</p>
<ul>
<li>Create a new Twitter account that will be used specifically for a &#8220;chat.&#8221; For example, &#8220;@CoffeeTalk.&#8221;</li>
<li>Now, tell everyone who wants to participate in Coffee Talk to &#8220;friend&#8221; the CoffeeTalk account.</li>
<li>If everyone in the group replies to &#8220;@CoffeeTalk&#8221; in every tweet, those replies would only be published to the streams of people who follow @CoffeeTalk.</li>
</ul>
<p>This is similar to a chat that uses a hashtag, but you don&#8217;t need any special tools to filter the tweets.  You&#8217;d be doing your other followers a favor by not cluttering their streams and the famous @ filter would finally be put to good use.</p>
<p>What do you think? Have you seen this suggestion before?  Could this work for you?
<div><a href="http://twitter.com/share" class="twitter-share-button"<br />
                data-url=&#8221;http://www.voiceoftech.com/swhitley/index.php/2012/04/twitter-chat/&#8221;<br />
                data-text=&#8221;Twitter @Chat (Shannon Whitley)&#8221;<br />
                data-count=&#8221;vertical&#8221;<br />
                >Tweet</a></div>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.voiceoftech.com%2Fswhitley%2Findex.php%2F2012%2F04%2Ftwitter-chat%2F&amp;title=Twitter%20%40Chat" id="wpa2a_4"><img src="http://www.voiceoftech.com/swhitley/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.voiceoftech.com/swhitley/index.php/2012/04/twitter-chat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Chrome Extension for Contaxio (Experimental)</title>
		<link>http://www.voiceoftech.com/swhitley/index.php/2012/01/google-chrome-extension-for-contaxio-experimental/</link>
		<comments>http://www.voiceoftech.com/swhitley/index.php/2012/01/google-chrome-extension-for-contaxio-experimental/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 01:37:26 +0000</pubDate>
		<dc:creator>Shannon</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Contaxio]]></category>
		<category><![CDATA[Extension]]></category>

		<guid isPermaLink="false">http://www.voiceoftech.com/swhitley/?p=1220</guid>
		<description><![CDATA[There are quite a few times when I need to quickly lookup one of my social media contacts. Most of the search options aren&#8217;t very ]]></description>
			<content:encoded><![CDATA[<p>There are quite a few times when I need to quickly lookup one of my social media contacts.  Most of the search options aren&#8217;t very robust or it takes too long to reach the search function.  I thought that a Contaxio Search Extension for Google Chrome might be the perfect answer for these quick searches.</p>
<p>I&#8217;m calling this experiemental because I have some additional ideas for the extension.  I&#8217;d like to enable Google Contacts and Facebook searches in addition to the initial Twitter search.</p>
<p>If you are a Chrome user, please give it a try and feel free to provide feedback.  I&#8217;m open to any suggestions you might have to enhance the experience.  You&#8217;ll need to become a <a href="http://contax.io" target="_blank">Contaxio</a> member and sync your Twitter account before using the extension.</p>
<p>From within Chrome:</p>
<h4><a href="http://whitleymedia.com/downloads/contaxiosearch.crx">Click this Link to Install the Extension</a></h4>
<p><br/><br />
<br/><br />
<br/></p>
<p><img src="http://www.voiceoftech.com/swhitley/wp-content/uploads/2012/01/contaxiosearch1-300x161.png" alt="" title="contaxiosearch1" width="300" height="161" class="alignnone size-medium wp-image-1221" /></p>
<p><img src="http://www.voiceoftech.com/swhitley/wp-content/uploads/2012/01/contaxiosearch2.png" alt="" title="contaxiosearch2"  class="alignnone size-medium wp-image-1222" />
<div><a href="http://twitter.com/share" class="twitter-share-button"<br />
                data-url=&#8221;http://www.voiceoftech.com/swhitley/index.php/2012/01/google-chrome-extension-for-contaxio-experimental/&#8221;<br />
                data-text=&#8221;Google Chrome Extension for Contaxio (Experimental) (Shannon Whitley)&#8221;<br />
                data-count=&#8221;vertical&#8221;<br />
                >Tweet</a></div>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.voiceoftech.com%2Fswhitley%2Findex.php%2F2012%2F01%2Fgoogle-chrome-extension-for-contaxio-experimental%2F&amp;title=Google%20Chrome%20Extension%20for%20Contaxio%20%28Experimental%29" id="wpa2a_6"><img src="http://www.voiceoftech.com/swhitley/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.voiceoftech.com/swhitley/index.php/2012/01/google-chrome-extension-for-contaxio-experimental/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>&#8216;Write-In&#8217; Currently Leads the Republican Pack</title>
		<link>http://www.voiceoftech.com/swhitley/index.php/2012/01/write-in-currently-leads-the-republican-pack/</link>
		<comments>http://www.voiceoftech.com/swhitley/index.php/2012/01/write-in-currently-leads-the-republican-pack/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 23:28:07 +0000</pubDate>
		<dc:creator>Shannon</dc:creator>
				<category><![CDATA[Politics]]></category>

		<guid isPermaLink="false">http://www.voiceoftech.com/swhitley/?p=1215</guid>
		<description><![CDATA[The primary elections for California will be coming up June 5th.&#160; Although I don’t consider myself a Democrat or a Republican, I am currently registered ]]></description>
			<content:encoded><![CDATA[<p>The primary elections for California will be coming up June 5th.&#160; Although I don’t consider myself a Democrat or a Republican, I am currently registered as a Republican.&#160; I could write another post about why I’m still registered with the GOP, but that’s not relevant here.&#160; I tend to vote on issues and people, not along party lines.&#160; </p>
<p>My main purpose for this post is to create a quick list of the Republican frontrunners and figure out if there’s any reason I should do anything but use the write-in box.</p>
<p>&#160;</p>
<table border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="200"><strong>Candidate</strong></td>
<td valign="top" width="829"><strong>Notes</strong></td>
</tr>
<tr>
<td valign="top" width="200">Newt Gingrich          </p>
<p>&#160;</td>
<td valign="top" width="829">
<ul>
<li>House Bank Scandal </li>
<li>Ethics charges (84 – to be exact) </li>
<li>Moral Failings (Marital) </li>
<li>History of political divisiveness.              </li>
</ul>
</td>
</tr>
<tr>
<td valign="top" width="200">Mitt Romney</td>
<td valign="top" width="829">
<ul>
<li>Flip-flops on issues. </li>
<li>What are his ‘real’ views? </li>
</ul>
</td>
</tr>
<tr>
<td valign="top" width="200">Rick Santorum</td>
<td valign="top" width="829">
<ul>
<li>Views are just ‘nutty.’ </li>
<li>Believes there is no ‘right to privacy.’ </li>
<li>Supports banning contraceptives. </li>
<li>Ready to bomb Iran. </li>
</ul>
</td>
</tr>
<tr>
<td valign="top" width="200">
<p>Ron Paul</p>
</td>
<td valign="top" width="829">
<ul>
<li>Newsletter Scandal </li>
<li>Literal Constitutionalist </li>
<li>Isolationist </li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p>I’ve seen a few tweets that say, “Anything would be better than what we have now.”&#160; But, just for a minute, let’s not even consider the other party.&#160; If I look at this list, I don’t really see a choice.</p>
<p>We have so many amazing people in America, and this is the best we could come up with?&#160; Is there still a chance to have a real candidate join the race &#8212; please?</p>
<div><a href="http://twitter.com/share" class="twitter-share-button"<br />
                data-url=&#8221;http://www.voiceoftech.com/swhitley/index.php/2012/01/write-in-currently-leads-the-republican-pack/&#8221;<br />
                data-text=&#8221;&lsquo;Write-In&rsquo; Currently Leads the Republican Pack (Shannon Whitley)&#8221;<br />
                data-count=&#8221;vertical&#8221;<br />
                >Tweet</a></div>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.voiceoftech.com%2Fswhitley%2Findex.php%2F2012%2F01%2Fwrite-in-currently-leads-the-republican-pack%2F&amp;title=%E2%80%98Write-In%E2%80%99%20Currently%20Leads%20the%20Republican%20Pack" id="wpa2a_8"><img src="http://www.voiceoftech.com/swhitley/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.voiceoftech.com/swhitley/index.php/2012/01/write-in-currently-leads-the-republican-pack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deploy Windows Azure Patches and &#8220;Avoid The Wait&#8221;</title>
		<link>http://www.voiceoftech.com/swhitley/index.php/2011/12/deploy-windows-azure-patches-and-avoid-the-wait/</link>
		<comments>http://www.voiceoftech.com/swhitley/index.php/2011/12/deploy-windows-azure-patches-and-avoid-the-wait/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 08:02:17 +0000</pubDate>
		<dc:creator>Shannon</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Windows Azure]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Updates]]></category>
		<category><![CDATA[Web Deploy]]></category>

		<guid isPermaLink="false">http://www.voiceoftech.com/swhitley/?p=1165</guid>
		<description><![CDATA[Have you ever successfully deployed a Windows Azure project&#8230;and discovered a typo? Maybe you forgot to include a supporting dll or a new image file. ]]></description>
			<content:encoded><![CDATA[<p>Have you ever successfully deployed a Windows Azure project&#8230;and discovered a typo?  Maybe you forgot to include a supporting dll or a new image file.  I can hear you swearing from here.</p>
<p>These types of mistakes can be frustrating because they&#8217;re not programming errors.  You left something out of the deployment package, but you don&#8217;t want to go through the long deployment process again just for this minor change.</p>
<p>In the past, I&#8217;ve used Remote Desktop to perform updates on each web role instance, but that can be very tedious.  You can use <a href="http://blogs.msdn.com/b/cloud/archive/2011/04/19/enabling-web-deploy-for-windows-azure-web-roles-with-visual-studio.aspx" target="_blank">Web Deploy</a> if you&#8217;re only using one instance, but that isn&#8217;t practical.  I saw one other approach that uses <a href="http://blogs.realdolmen.com/experts/2011/09/23/nuget-push-to-windows-azure/" target="_blank">NuGet</a>, which looks interesting, but isn&#8217;t quite what I want.</p>
<p><strong>Update:</strong> Of course, I wrote this post and then saw the <a href="http://ntotten.com/2011/07/windows-azure-accelerator-for-web-roles/" target="_blank">Windows Azure Accelerator</a>.  I&#8217;ll give it a try and write a follow up post.  It looks like a similar solution, but it polls for updates.  I&#8217;m not a big &#8220;Web Deploy&#8221; user, so I can&#8217;t comment on the degree of deployment control.  I think it&#8217;s worth reading the rest of this post so you can decide.</p>
<p>I needed something simple to end my frustration, so I wrote <em>PatchAzure</em>.  The code allows me to upload a patch to Azure Storage and apply the updates to all Web Roles.  Each patch is a simple zip file that unzips into the webroot of each Azure instance.</p>
<p>The patching process is triggered whenever the Azure configuration file is updated and when the instance is started.  Each patch is applied only once, unless the instance is rebuilt.</p>
<blockquote><p>The patching process is triggered whenever the Azure configuration file is updated and when the instance is started.</p></blockquote>
<p>There are just a few code changes you&#8217;ll need to make to your existing Azure Web Role Project.  </p>
<ol>
<li>Include the <a href="http://www.voiceoftech.com/swhitley/wp-content/uploads/2011/12/PatchAzure.zip" style="font-size:22px">PatchAzure.cs</a> file in your project.</li>
<li>Then update WebRole.cs with the changes in Listing 1.  Update the credentials with your storage credentials.</li>
<li>Add the &#8220;patch&#8221; setting to your Azure configuration file (Listing 2).</li>
<li>Deploy the project, and you&#8217;re ready for your first patch.</li>
</ol>
<h4>Listing 1</h4>
<p>WebRole.cs</p>
<pre class="brush: csharp; title: ; notranslate">
     ...

	  public override bool OnStart()
        {

            RoleEnvironment.Changed += RoleEnvironmentChanged;
            PatchesApply();

            return base.OnStart();
        }

        private void RoleEnvironmentChanged(object sender, RoleEnvironmentChangedEventArgs e)
        {
            PatchesApply();
        }

        private void PatchesApply()
        {
            try
            {
                //Get the path to the website
                //Using ServerManager since other methods aren't available in WebRole.cs.
                //Reference: Microsoft.Web.Administration.dll in %WinDir%\System32\InetSrv (Copy Local=True/Specific Version=True)
                //Note:  This will not work for testing with the emulator.  Hardcode rootdir if needed.
                ServerManager server = new ServerManager();
                string rootdir = Environment.ExpandEnvironmentVariables(server.Sites[0].Applications[0].VirtualDirectories[0].PhysicalPath);
                //*********************************************
                //Check for new patches.
                //*********************************************
                //Blob Storage Account Name
                string accountName = &quot;{account name}&quot;;
                //Blob Storage Key
                string key = &quot;{storage key}&quot;;
                //Blob Container where patches are stored.
                string patchContainer = &quot;patches&quot;;
                //Comma-delimited list of patch names.  They must be &quot;zip&quot; files.  Do not include the .zip extension.
                string patchNames = RoleEnvironment.GetConfigurationSettingValue(&quot;patches&quot;);

                if (patchNames.Length &gt; 0)
                {
                    PatchAzure.Patch(accountName, key, patchContainer, patchNames, rootdir);
                }
            }
            catch (Exception ex)
            {
                Trace.TraceError(ex.Message);
            }

        }
		...
</pre>
<h4>Listing 2</h4>
<p><strong>ServiceDefinition.csdef</strong></p>
<p>ServiceDefinition\Webrole</p>
<pre class="brush: xml; title: ; notranslate">
...
    &lt;ConfigurationSettings&gt;
      &lt;Setting name=&quot;patches&quot; /&gt;
    &lt;/ConfigurationSettings&gt;
 ...
</pre>
<p><strong>ServiceConfiguration.csfg</strong></p>
<p>ServiceConfiguration\ConfigurationSettings</p>
<pre class="brush: xml; title: ; notranslate">
...
&lt;Setting name=&quot;patches&quot; value=&quot;&quot; /&gt;
...
</pre>
<h3>Applying a Patch</h3>
<p>Once the PatchAzure updates are deployed in your project, creating and applying a patch is easy.</p>
<ol>
<li>Create a Zip file and give it a name ({name of patch}.zip).</li>
<li>Add files to the Zip file using the same directory structure as your web project.</li>
<li>You can include a batch file if you like and it will be run during the patching process.  The name of the batch file must include the patch name and end in .cmd ({name of patch}.cmd).</li>
<li>Upload the Zip file to your Blob Storage Container.  The container was specified in WebRole.cs (default=patches).</li>
<li>In the Windows Azure Portal, Click on your deployment. Then click Configure and edit your configuration file.</li>
<li>Locate the &#8220;patches&#8221; setting and add the patch name to the value attribute.  The patch name must match the Zip file name that you uploaded (without the .zip extension).
<p><img src="http://www.voiceoftech.com/swhitley/wp-content/uploads/2011/12/azureconfig.png" alt="" title="azureconfig" class="alignnone size-medium wp-image-1208" /></p>
<p>Example:</p>
<pre class="brush: xml; title: ; notranslate">
  &lt;Setting name=&quot;patches&quot; value=&quot;patch1,patch2,patch3&quot; /&gt;
</pre>
</li>
<li>When you click OK, the configuration file will save.  This will trigger the application of the patches.</li>
<li>The Zip file is downloaded from blob storage to each web instance.  The files are extracted to their appropriate locations and then the Zip file is renamed to indicate that the patch is complete.</li>
</ol>
<p>Could this process be used in production (perhaps even for an xcopy site update)?  That&#8217;s up to you, but I think it&#8217;s possible.  One thing that might make this unworthy of production is the lack of feedback.  It is difficult to tell if a patch succeeds, so be prepared to use Remote Desktop.  The code could be improved to provide more feedback, but much of that may depend on your needs.</p>
<p>I&#8217;ve tested this process and it&#8217;s been working for me, but I haven&#8217;t been using it long.  Please let me know if you find any issues or have suggestions.  As for me, I&#8217;m happy to finally have an easier way to fix my typos.</p>
<div><a href="http://twitter.com/share" class="twitter-share-button"<br />
                data-url=&#8221;http://www.voiceoftech.com/swhitley/index.php/2011/12/deploy-windows-azure-patches-and-avoid-the-wait/&#8221;<br />
                data-text=&#8221;Deploy Windows Azure Patches and &#8220;Avoid The Wait&#8221; (Shannon Whitley)&#8221;<br />
                data-count=&#8221;vertical&#8221;<br />
                >Tweet</a></div>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.voiceoftech.com%2Fswhitley%2Findex.php%2F2011%2F12%2Fdeploy-windows-azure-patches-and-avoid-the-wait%2F&amp;title=Deploy%20Windows%20Azure%20Patches%20and%20%E2%80%9CAvoid%20The%20Wait%E2%80%9D" id="wpa2a_10"><img src="http://www.voiceoftech.com/swhitley/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.voiceoftech.com/swhitley/index.php/2011/12/deploy-windows-azure-patches-and-avoid-the-wait/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AuthPack Provides .NET oAuth for Twitter, Facebook, LinkedIn, and Google</title>
		<link>http://www.voiceoftech.com/swhitley/index.php/2011/11/authpack-provides-net-oauth-for-twitter-facebook-linkedin-and-google/</link>
		<comments>http://www.voiceoftech.com/swhitley/index.php/2011/11/authpack-provides-net-oauth-for-twitter-facebook-linkedin-and-google/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 07:47:46 +0000</pubDate>
		<dc:creator>Shannon</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[oAuth]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.voiceoftech.com/swhitley/?p=1143</guid>
		<description><![CDATA[I&#8217;ve published a project on GitHub that includes examples for authenticating users with some of the major social sites. LinkedIn and Twitter have very similar ]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve published a project on GitHub that includes examples for authenticating users with some of the major social sites.  LinkedIn and Twitter have very similar oAuth implementations so I was able to leverage all of <a href="http://www.voiceoftech.com/swhitley/index.php/2009/03/twitter-oauth-with-net/">my earlier Twitter .NET oAuth work</a>.</p>
<p><strong>Code&#8211;> <a href="https://github.com/swhitley/authpack" target="_blank">AuthPack on GitHub</a></strong></p>
<p>Most of the code comes from the standard Web Forms project template.  I wove in the authentication code which uses Forms Auth without an auth provider.  You&#8217;ll need to add your own business logic and error handling, but it&#8217;s a good start.</p>
<p>I wish I had more time to create an elegant visual interface for the buttons, but maybe someone else will provide an update.</p>
<p>There is also a BSD-style license attached, which means you can do what you want with it, but please leave the copyright notice intact.  That seemed to come up a few times with the old code where people weren&#8217;t sure if they could use it or not.  A funny thing happened while I was researching code for LinkedIn.  It seems that Fatih repackaged my Twitter work as his own work <a href="https://developer.linkedin.com/thread/1190" target="_blank">on LinkedIn</a>.  Dude, at least change the comments. <img src='http://www.voiceoftech.com/swhitley/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><img src="http://www.voiceoftech.com/swhitley/wp-content/uploads/2011/11/screen_shot-300x177.png" alt="" title="screen_shot" width="300" height="177" class="alignnone size-medium wp-image-1146" /></p>
<div><a href="http://twitter.com/share" class="twitter-share-button"<br />
                data-url=&#8221;http://www.voiceoftech.com/swhitley/index.php/2011/11/authpack-provides-net-oauth-for-twitter-facebook-linkedin-and-google/&#8221;<br />
                data-text=&#8221;AuthPack Provides .NET oAuth for Twitter, Facebook, LinkedIn, and Google (Shannon Whitley)&#8221;<br />
                data-count=&#8221;vertical&#8221;<br />
                >Tweet</a></div>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.voiceoftech.com%2Fswhitley%2Findex.php%2F2011%2F11%2Fauthpack-provides-net-oauth-for-twitter-facebook-linkedin-and-google%2F&amp;title=AuthPack%20Provides%20.NET%20oAuth%20for%20Twitter%2C%20Facebook%2C%20LinkedIn%2C%20and%20Google" id="wpa2a_12"><img src="http://www.voiceoftech.com/swhitley/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.voiceoftech.com/swhitley/index.php/2011/11/authpack-provides-net-oauth-for-twitter-facebook-linkedin-and-google/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Minus One Rider on Amtrak</title>
		<link>http://www.voiceoftech.com/swhitley/index.php/2011/10/minus-one-rider-on-amtrak/</link>
		<comments>http://www.voiceoftech.com/swhitley/index.php/2011/10/minus-one-rider-on-amtrak/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 00:07:25 +0000</pubDate>
		<dc:creator>Shannon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.voiceoftech.com/swhitley/index.php/2011/10/minus-one-rider-on-amtrak/</guid>
		<description><![CDATA[In a time when Amtrak needs as many supporters as possible, it’s disappointing to take the train and experience such poor service.&#160; I took a ]]></description>
			<content:encoded><![CDATA[<p>In a time when <a href="http://www.star-telegram.com/2011/09/17/3375733/amtrak-faces-cuts-in-funding-as.html" target="_blank">Amtrak needs as many supporters as possible</a>, it’s disappointing to take the train and experience such poor service.&#160; I took a quick trip on the <a href="http://www.amtrak.com/servlet/ContentServer/AM_Route_C/1241245648567/1237405732511" target="_blank">Coast Starlight</a> last week and it should have been a quiet, pleasant ride.&#160; Instead, I ran into a surly conductor who gave me a hard time for not signing the top of my train ticket.&#160; I asked him if I could borrow a pen, and he grumpily replied with a very curt, “No.”&#160; This story can’t do it justice, but his bad attitude was palpable.&#160; And it wasn’t just him.&#160; Although I ran into a few decent workers, the overall attitude of the train crew was less than positive.</p>
<p>Oh how I wish I could have asked them if they’d ever watched “Undercover Boss” and then revealed myself as the CEO.&#160; That would have been fun.&#160; But now that I think about it, since Amtrak is government owned, I really am the boss.&#160; Besides paying taxes for that railroad, I paid a lot of money to ride that train, and I deserve a minimum amount of respect.&#160;&#160; </p>
<p>The story that I linked to in the first paragraph mentions that Amtrak is subsidized by the government and actually loses money with each rider.&#160; Keeping that in mind, maybe they’re trying to turn us away.&#160; If that’s the strategy, I suppose it worked for me.&#160; I’ll drive next time.&#160; I have to warn them though, now that I’m aware of the Amtrak subsidies, I’ll be voicing my opposition to extending their funds.&#160; </p>
<p>With taxpayer support hanging in the balance, you’d think Amtrak would be working harder to make sure that every passenger had the best experience possible.&#160; Basic manners and a courteous attitude really shouldn’t cost them anything, but the absence of decent customer service could cost them everything.</p>
<p>&#160;</p>
<p>&#160;</p>
</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a3501f03-75bf-4717-b592-04e2cd0ac67d" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Amtrak" rel="tag">Amtrak</a>,<a href="http://technorati.com/tags/train" rel="tag">train</a>,<a href="http://technorati.com/tags/Coast+Starlight" rel="tag">Coast Starlight</a>,<a href="http://technorati.com/tags/Amtrack+subsidies" rel="tag">Amtrack subsidies</a></div>
<div><a href="http://twitter.com/share" class="twitter-share-button"<br />
                data-url=&#8221;http://www.voiceoftech.com/swhitley/index.php/2011/10/minus-one-rider-on-amtrak/&#8221;<br />
                data-text=&#8221;Minus One Rider on Amtrak (Shannon Whitley)&#8221;<br />
                data-count=&#8221;vertical&#8221;<br />
                >Tweet</a></div>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.voiceoftech.com%2Fswhitley%2Findex.php%2F2011%2F10%2Fminus-one-rider-on-amtrak%2F&amp;title=Minus%20One%20Rider%20on%20Amtrak" id="wpa2a_14"><img src="http://www.voiceoftech.com/swhitley/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.voiceoftech.com/swhitley/index.php/2011/10/minus-one-rider-on-amtrak/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft&#8217;s &#8216;Project Silk&#8217; is Definitely Not Wash-and-Wear</title>
		<link>http://www.voiceoftech.com/swhitley/index.php/2011/10/microsofts-project-silk-is-definitely-not-wash-and-wear/</link>
		<comments>http://www.voiceoftech.com/swhitley/index.php/2011/10/microsofts-project-silk-is-definitely-not-wash-and-wear/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 22:20:01 +0000</pubDate>
		<dc:creator>Shannon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.voiceoftech.com/swhitley/index.php/2011/10/microsofts-project-silk-is-definitely-not-wash-and-wear/</guid>
		<description><![CDATA[If you’re a developer like me, you are constantly striving for balance with each project.&#160; You must be productive and efficient, which means you rely ]]></description>
			<content:encoded><![CDATA[<p>If you’re a developer like me, you are constantly striving for balance with each project.&#160; You must be productive and efficient, which means you rely on the skills that you’ve honed over several years, but you must also continue to learn by trying new techniques and replacing outdated approaches.&#160; This is a constant challenge.&#160; Do I try the new approach with an upcoming project or do I stick with what I know?</p>
<p><a href="http://www.voiceoftech.com/swhitley/wp-content/uploads/2011/10/projectsilk_thumb.png"><img style="border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="projectsilk_thumb" border="0" alt="projectsilk_thumb" align="right" src="http://www.voiceoftech.com/swhitley/wp-content/uploads/2011/10/projectsilk_thumb_thumb.png" width="168" height="158" /></a>With .NET development, I seem to be challenged more often lately, and the latest challenge comes in the form of a “guidance” project called <a href="http://msdn.microsoft.com/en-us/library/hh396380.aspx" target="_blank">Project Silk</a>.&#160; I enjoy a good challenge, but I also wonder, “Is this new methodology worth learning? Will this particular strategy <strong>stick</strong>?”&#160; For example, wasn’t Microsoft’s Atlas project supposed to tie ajax development into the Visual Studio toolset?&#160; Luckily, I sort of ignored Atlas and continued to code my own ajax code by hand (with jQuery).&#160; Now, it appears that Atlas is a thing of the past and Microsoft (through Project Silk) is recommending a different technique (interestingly enough, using jQuery).&#160; Always up for a good challenge, I decided to dive into this project and try to learn the new techniques.&#160; </p>
<p>If you’re short on time, I’ll provide my quick analysis of Project Silk.&#160; As a web project, it’s a beautiful example of what can be done with .NET using modern programming techniques.&#160; However, as a learning tool, it is unnecessarily complicated and may just be a waste of your time.</p>
<p>&#160;</p>
<h3>Model View Controller (MVC)</h3>
<p>So why do I think Project Silk is overly complicated?&#160; Number one, it’s built using <em>MVC3</em> (the third release of Microsoft’s <strong>Model View Controller</strong> pattern).&#160; MVC is an alternative to Web Forms, and while I do like some of its features, in general, the MVC constructs and its abstract implementation are difficult to use.&#160; I admit that I’ve only done a bit of programming with MVC, mainly because I have to relearn it every time I look at it.&#160; The terms “Model View Controller” just don’t stick in my mind.&#160; I’d love to hear what other developers think of MVC.&#160; Although I consider myself a decent programmer, I shun some of the complexity that other engineers seem to relish.&#160;&#160;&#160; </p>
<p>MVC separates the traditional web application into smaller components.&#160; One of the biggest advantages is that it makes testing much easier.&#160; But I’ve seen this approach before with COBOL. (If you’ve ever worked with PeopleSoft COBOL, you know what I mean.)You can componentize everything to the point that it takes forever to trace a bug; you can’t see what the overall program is doing because it’s so difficult to follow the code through each component.&#160; It’s also very difficult to add new code.&#160; This sort of programming creates beautiful trees but unnavigable forests.</p>
<p>Patterns should be communicated in simple terms, even when the implementation is complex.&#160; I don’t think that has been done with MVC.&#160; For me, MVC takes simple web concepts that we all understand and turns them into abstract words that have little meaning in the real world.&#160; For example, the <em>Controller</em> in the Model View Controller Pattern is really just a page.&#160; Now, some people will argue with me on that, but it’s the easiest way to understand it.&#160; The Controller is responsible for handling the web request and response (whatever it may be – HTML or data).&#160; That’s a web page.</p>
<blockquote><p>For example, the <em>Controller</em> in the <em>Model View Controller Pattern</em> is really just a page.</p>
</blockquote>
<p>The <em>Model</em> in the MVC pattern should have been called <em>Data Class</em>.&#160; That’s all it is.&#160; It’s a way to represent data in a class instead of referring directly to the SQL tables.&#160; I like that Microsoft allows you to create a table from the class definition, but I’m not thrilled about the requirement to keep them in sync.&#160; There is also a scary feature where it will automatically drop and recreate tables that aren’t in sync with the code.&#160; Yikes!</p>
<p>The <em>View</em> is a template, usually an HTML template.&#160; Recently, Microsoft invented a whole new templating system called <em>Razor,</em> which is also promoted in Project Silk.&#160; I’m not thrilled with Razor either.&#160; Razor has its own syntax.&#160; <em>Do we really need one more thing to learn?</em>&#160;&#160;&#160; What I do like about Razor is that they gave it a good name.&#160; I can remember that.</p>
<h3>jQuery</h3>
<p>Then we come to jQuery.&#160; How is Microsoft using jQuery in Project Silk?&#160; I was hoping that they would deliver something that would elegantly tie jQuery in to ASP.NET.&#160; Unfortunately, the Project Silk code demonstrates techniques that many people have been using for a few years.&#160; The jQuery usage is smart, but it’s very specific to this project.&#160; To take advantage of Project Silk, you’d have to learn how to create jQuery widgets, and you’d have to learn how to add them into your project.&#160; Microsoft had an opportunity to streamline the business of dynamic UI creation, but they didn’t try.&#160; They took the easy way out.&#160; “Here’s how you can do this, if you have the time to learn all of these different tools and understand how it all fits together.”&#160; If you are a team of one, like I am, good luck.</p>
<h3>Suggestions</h3>
<p>But rather than just list my complaints, I’ll offer suggestions to make this more approachable for people like me.</p>
<p><strong>Simplify MVC (Change the name too!) &#8211; </strong>Rename “Model” to Data Class.&#160; Refer to Controllers as Page Controllers.&#160; Views are okay, I suppose, but Templates make more sense.&#160; Group the templates with the page controller, like (you guessed it) a code-behind.&#160; Yes, a lot of these suggestions are semantic changes, but that is one of the biggest issues with MVC.</p>
<p><strong>Innovate with jQuery –</strong> jQuery is a great library.&#160; How can we take advantage of it in .NET without having to write jQuery widgets?&#160; Microsoft could deliver standard jQuery widgets that we can all use within our templates.&#160; For example, why is the data widget in Project Silk named “mstats.data.js?”&#160; Can this be a standalone widget that can be reused in any project?&#160; It looks like it, but that should be spelled out with better examples.&#160; I like the way Project Silk uses widgets, but that use should be taken to the next level so that developers don’t have to worry about learning one more coding detail.</p>
<p><strong>Evolve What We Know –</strong> Microsoft didn’t need to create Razor.&#160; What other things could be done to give us the same benefits?&#160; We could have improved the web forms pages to include similar features without introducing new syntax.&#160; How about C# scripting?&#160; I’m not talking about replacing javascript, but what if a new library was introduced to save scripting steps?&#160; For instance, let me insert a C# command to generate jQuery ajax code:</p>
<div class="csharpcode">
<pre class="alt">&lt;% </pre>
<pre><span class="kwrd">if</span> (jQueryAjax(<span class="str">&quot;/someurl&quot;</span>))</pre>
<pre class="alt">{</pre>
<pre>    jQueryAjaxSuccess();</pre>
<pre class="alt">} else {</pre>
<pre>    jQueryAjaxError();</pre>
<pre class="alt">}</pre>
<pre>%&gt;</pre>
<pre class="alt">&#160;</pre>
</div>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>Now something like that would be easy to understand, save me a ton of time, and reduce the amount of new things that I need to learn.&#160; </p>
<p>&#160;</p>
<h3>Conclusion</h3>
<p>There are a lot of smart people working on solutions at Microsoft, and I admire the work they do, but sometimes I feel like they’re <em>too</em> smart for their own good.&#160; MVC is a great example.&#160; It’s an interesting pattern, but maybe you should talk with the man-in-the-street before muddying up the waters with yet another programming approach.&#160; Now, we’re left with more questions than answers when it comes to figuring out which tools to use and which direction to head.</p>
<p>We need a single set of simple tools to help us develop great web applications.&#160; While Project Silk is a nice example of what can be done, It doesn’t go far enough to improve on how things should be done.</p>
<p>&#160;</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:775ac75d-2572-42a3-be3a-0a84789ae8cd" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Project+Silk" rel="tag">Project Silk</a>,<a href="http://technorati.com/tags/Microsoft" rel="tag">Microsoft</a>,<a href="http://technorati.com/tags/ASP.NET" rel="tag">ASP.NET</a>,<a href="http://technorati.com/tags/C%23" rel="tag">C#</a>,<a href="http://technorati.com/tags/MVC" rel="tag">MVC</a>,<a href="http://technorati.com/tags/MVVM" rel="tag">MVVM</a>,<a href="http://technorati.com/tags/.NET" rel="tag">.NET</a></div>
<div><a href="http://twitter.com/share" class="twitter-share-button"<br />
                data-url=&#8221;http://www.voiceoftech.com/swhitley/index.php/2011/10/microsofts-project-silk-is-definitely-not-wash-and-wear/&#8221;<br />
                data-text=&#8221;Microsoft&rsquo;s &lsquo;Project Silk&rsquo; is Definitely Not Wash-and-Wear (Shannon Whitley)&#8221;<br />
                data-count=&#8221;vertical&#8221;<br />
                >Tweet</a></div>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.voiceoftech.com%2Fswhitley%2Findex.php%2F2011%2F10%2Fmicrosofts-project-silk-is-definitely-not-wash-and-wear%2F&amp;title=Microsoft%E2%80%99s%20%E2%80%98Project%20Silk%E2%80%99%20is%20Definitely%20Not%20Wash-and-Wear" id="wpa2a_16"><img src="http://www.voiceoftech.com/swhitley/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.voiceoftech.com/swhitley/index.php/2011/10/microsofts-project-silk-is-definitely-not-wash-and-wear/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Streaming Can Wait</title>
		<link>http://www.voiceoftech.com/swhitley/index.php/2011/09/streaming-can-wait/</link>
		<comments>http://www.voiceoftech.com/swhitley/index.php/2011/09/streaming-can-wait/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 15:59:07 +0000</pubDate>
		<dc:creator>swhitley</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.voiceoftech.com/swhitley/index.php/2011/09/streaming-can-wait/</guid>
		<description><![CDATA[I’ve been a happy Netflix customer for sometime now. The service has always been convenient, quick, and reliable. With the announcement that Netflix will split ]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.voiceoftech.com/swhitley/wp-content/uploads/2011/09/netflix.ca_.png"><img style="background-image: none; margin: 0px 15px 5px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px; border-width: 0px;" title="netflix.ca" src="http://www.voiceoftech.com/swhitley/wp-content/uploads/2011/09/netflix.ca_thumb.png" alt="netflix.ca" width="200" align="left" border="0" /></a>I’ve been a happy Netflix customer for sometime now. The service has always been convenient, quick, and reliable. With the announcement that Netflix will split into two companies, “convenient” will no longer be part of the equation, and since they seem to be going through so many changes, I’m not sure about reliability. Let’s hope Qwikster is…well, quick.</p>
<p>I had just read Reed Hastings infamous <a href="http://blog.netflix.com/2011/09/explanation-and-some-reflections.html" target="_blank">mea culpa/new service announcement</a>, and, coincidentally, I had some time to kill.  While grousing on Twitter about the seemingly absurd Netflix changes and reading the thousands of comments on the Netflix blog, I developed an urge to watch an instant movie.</p>
<p>I’m a sci-fi fan and I had watched the original <em>Omega Man</em> on Netflix a few months ago.  That led me to an interest in <em>I Am Legend (</em>Will Smith’s remake of <em>Omega Man)</em>.  I looked up <em>I Am Legend</em>, but it’s not available to watch instantly.  That’s okay, there are plenty of other movies in the Netflix catalog.  I had always been curious about, <em>The Village</em> by M. Night Shyamalan.  Hmmm, that’s DVD-only too.  Okay, I’m still thinking about an M. Night flick, how about <em>Lady in the Water</em>?  DVD-only.  Okay, I was getting a little frustrated.  I recalled a Denzel Washington movie that I had missed, called <em>Unstoppable</em>.  I looked it up and read the summary.  That sounded perfect, but it’s only on DVD.  I gritted my teeth.  Maybe <em>Unstoppable</em> is too recent.  How about <em>The Manchurian Candidate?</em> Once again, DVD only.  I went through several other movie titles and none of them were available to watch instantly.  By the end of my search I had used up all of my free time and had to go to bed.</p>
<p>I enjoy Netflix streaming, but my family will tell you that I watch a lot of “crap” on it.  Streaming may be the future, but I guess, for now, I’m more of a Qwikster customer…or not.
<div><a href="http://twitter.com/share" class="twitter-share-button"<br />
                data-url=&#8221;http://www.voiceoftech.com/swhitley/index.php/2011/09/streaming-can-wait/&#8221;<br />
                data-text=&#8221;Streaming Can Wait (Shannon Whitley)&#8221;<br />
                data-count=&#8221;vertical&#8221;<br />
                >Tweet</a></div>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.voiceoftech.com%2Fswhitley%2Findex.php%2F2011%2F09%2Fstreaming-can-wait%2F&amp;title=Streaming%20Can%20Wait" id="wpa2a_18"><img src="http://www.voiceoftech.com/swhitley/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.voiceoftech.com/swhitley/index.php/2011/09/streaming-can-wait/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Google+ API Released</title>
		<link>http://www.voiceoftech.com/swhitley/index.php/2011/09/google-api/</link>
		<comments>http://www.voiceoftech.com/swhitley/index.php/2011/09/google-api/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 18:12:15 +0000</pubDate>
		<dc:creator>Shannon</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.voiceoftech.com/swhitley/?p=1120</guid>
		<description><![CDATA[The Google+ Team has released some initial API resources. For me, being interested in people and circles, I was a little disappointed, but at least ]]></description>
			<content:encoded><![CDATA[<p>The Google+ Team has released some initial <a href="http://developers.google.com/+" target="_blank">API resources</a>.  For me, being interested in people and circles, I was a little disappointed, but at least it&#8217;s a start.</p>
<p>I use the .NET Serialization Library to deserialize JSON (which is what the G+ API returns).  Since I already mapped the person JSON to a class, I thought I&#8217;d share the code here and save someone a bit of time.  The .NET library from Google doesn&#8217;t support G+ yet, but this is working for me right now.</p>
<p>#region Notes<br />
/*<br />
 * Author: Shannon Whitley &#8211; http://voiceoftech.com/<br />
 * Date:   9/16/2011<br />
 */<br />
#endregion<br />
using System.Runtime.Serialization;</p>
<p>namespace yournamespace<br />
{<br />
    [DataContract]<br />
    public class GPlusPerson<br />
    {<br />
        [DataMember]<br />
        public string kind { get; set; }<br />
        [DataMember]<br />
        public string id { get; set; }<br />
        [DataMember]<br />
        public string displayName { get; set; }<br />
        [DataMember]<br />
        public name name { get; set; }<br />
        [DataMember]<br />
        public string nickname { get; set; }<br />
        [DataMember]<br />
        public string tagline { get; set; }<br />
        [DataMember]<br />
        public string birthday { get; set; }<br />
        [DataMember]<br />
        public string gender { get; set; }<br />
        [DataMember]<br />
        public string aboutMe { get; set; }<br />
        [DataMember]<br />
        public string currentLocation { get; set; }<br />
        [DataMember]<br />
        public string relationshipStatus { get; set; }<br />
        [DataMember]<br />
        public string url { get; set; }<br />
        [DataMember]<br />
        public image image { get; set; }<br />
        [DataMember]<br />
        public value_type[] emails { get; set; }<br />
        [DataMember]<br />
        public value_type[] urls { get; set; }<br />
        [DataMember]<br />
        public organizations[] organizations { get; set; }<br />
        [DataMember]<br />
        public value_type[] placesLived { get; set; }<br />
        [DataMember]<br />
        public string[] languagesSpoken { get; set; }<br />
        [DataMember]<br />
        public bool hasApp { get; set; }<br />
    }</p>
<p>    [DataContract]<br />
    public class name<br />
    {<br />
        [DataMember]<br />
        public string formatted { get; set; }<br />
        [DataMember]<br />
        public string familyName { get; set; }<br />
        [DataMember]<br />
        public string givenName { get; set; }<br />
        [DataMember]<br />
        public string middleName { get; set; }<br />
        [DataMember]<br />
        public string honorificPrefix { get; set; }<br />
        [DataMember]<br />
        public string honorificSuffix { get; set; }<br />
    }</p>
<p>    [DataContract]<br />
    public class image<br />
    {<br />
        [DataMember]<br />
        public string url { get; set; }<br />
    }</p>
<p>    [DataContract]<br />
    public class value_type<br />
    {<br />
        [DataMember]<br />
        public string value { get; set; }<br />
        [DataMember]<br />
        public string type { get; set; }<br />
        [DataMember]<br />
        public bool primary { get; set; }<br />
    }</p>
<p>    [DataContract]<br />
    public class organizations<br />
    {<br />
        [DataMember]<br />
        public string name { get; set; }<br />
        [DataMember]<br />
        public string department { get; set; }<br />
        [DataMember]<br />
        public string title { get; set; }<br />
        [DataMember]<br />
        public string type { get; set; }<br />
        [DataMember]<br />
        public string startDate { get; set; }<br />
        [DataMember]<br />
        public string endDate { get; set; }<br />
        [DataMember]<br />
        public string location { get; set; }<br />
        [DataMember]<br />
        public string description { get; set; }<br />
        [DataMember]<br />
        public bool primary { get; set; }<br />
    }</p>
<p>}</p>
<div><a href="http://twitter.com/share" class="twitter-share-button"<br />
                data-url=&#8221;http://www.voiceoftech.com/swhitley/index.php/2011/09/google-api/&#8221;<br />
                data-text=&#8221;New Google+ API Released (Shannon Whitley)&#8221;<br />
                data-count=&#8221;vertical&#8221;<br />
                >Tweet</a></div>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.voiceoftech.com%2Fswhitley%2Findex.php%2F2011%2F09%2Fgoogle-api%2F&amp;title=New%20Google%2B%20API%20Released" id="wpa2a_20"><img src="http://www.voiceoftech.com/swhitley/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.voiceoftech.com/swhitley/index.php/2011/09/google-api/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

