<?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>Sun, 29 Jan 2012 01:43:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<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_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/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=%26lsquo%3BWrite-In%26rsquo%3B%20Currently%20Leads%20the%20Republican%20Pack" 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/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%26%238220%3BAvoid%20The%20Wait%26%238221%3B" 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/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_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/2011/11/authpack-provides-net-oauth-for-twitter-facebook-linkedin-and-google/feed/</wfw:commentRss>
		<slash:comments>15</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_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/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%26rsquo%3Bs%20%26lsquo%3BProject%20Silk%26rsquo%3B%20is%20Definitely%20Not%20Wash-and-Wear" 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/10/microsofts-project-silk-is-definitely-not-wash-and-wear/feed/</wfw:commentRss>
		<slash:comments>1</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>admin</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_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/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_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/09/google-api/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Polaroid Picture Plug-in for Windows Live Writer</title>
		<link>http://www.voiceoftech.com/swhitley/index.php/2011/09/polaroid-picture-plug-in-for-windows-live-writer/</link>
		<comments>http://www.voiceoftech.com/swhitley/index.php/2011/09/polaroid-picture-plug-in-for-windows-live-writer/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 04:45:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.voiceoftech.com/swhitley/index.php/2011/09/polaroid-picture-plug-in-for-windows-live-writer/</guid>
		<description><![CDATA[Tweet]]></description>
			<content:encoded><![CDATA[<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:8747F07C-CDE8-481f-B0DF-C6CFD074BF67:76241303-3cfe-4d85-8c4b-01b2b82f8afb" class="wlWriterEditableSmartContent"><a href="http://www.voiceoftech.com/swhitley/wp-content/uploads/2011/09/V__3381-8x6.jpg" title="7Up Retro - Keeping It Real" rel="thumbnail"><img border="0" src="http://www.voiceoftech.com/swhitley/wp-content/uploads/2011/09/V__3381.png" width="335" height="295" /></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/09/polaroid-picture-plug-in-for-windows-live-writer/&#8221;<br />
                data-text=&#8221;Polaroid Picture Plug-in for Windows Live Writer (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%2Fpolaroid-picture-plug-in-for-windows-live-writer%2F&amp;title=Polaroid%20Picture%20Plug-in%20for%20Windows%20Live%20Writer" 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/polaroid-picture-plug-in-for-windows-live-writer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Azure Backup</title>
		<link>http://www.voiceoftech.com/swhitley/index.php/2011/08/sql-azure-backup/</link>
		<comments>http://www.voiceoftech.com/swhitley/index.php/2011/08/sql-azure-backup/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 05:00:09 +0000</pubDate>
		<dc:creator>Shannon</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Windows Azure]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[SQL Azure]]></category>

		<guid isPermaLink="false">http://www.voiceoftech.com/swhitley/?p=1085</guid>
		<description><![CDATA[I love SQL Azure, but there is still a huge piece missing from an otherwise very complete service; yes, I&#8217;m talking about backups. In many ]]></description>
			<content:encoded><![CDATA[<p>I love SQL Azure, but there is still a huge piece missing from an otherwise very complete service; yes, I&#8217;m talking about backups.  In many of the Microsoft articles on this subject, they seem to imply that the SQL Azure system is so robust that data loss isn&#8217;t a large concern.  Well, Microsoft is probably right if you&#8217;re worried about hardware or software failures, but in my experience, human failures are the most common cause of data loss, and the lack of a complete backup system is really troubling.</p>
<p>Microsoft suggests that you either use a database copy as your backup or utilize their data replication process.  The database copy can be expensive and doesn&#8217;t allow for multiple archives.  The replication service is a better option, but it means that I&#8217;ll need to maintain a large database on my servers to constantly pull the data.</p>
<p>There are some third-party tools that will backup your SQL Azure databases, but the costs for those systems are outside of my budget.</p>
<p>I decided that the best approach for me was to write a simple command-line application of my own.  I created <strong>SQLAzureBackup</strong> using standard .NET tools, and I&#8217;m currently using it with my greater-than-10GB database.  SQLAzureBackup can be scripted and run on a schedule.</p>
<p><a href="http://www.voiceoftech.com/swhitley/wp-content/uploads/2011/08/sabss.png"><img src="http://www.voiceoftech.com/swhitley/wp-content/uploads/2011/08/sabss-300x131.png" alt="" title="SQLAzureBackup Screenshot" width="300" height="131" class="alignnone size-medium wp-image-1098" /></a></p>
<p><strong>How It Works</strong></p>
<p>As I said, it&#8217;s very simple, the program generates a script for the entire database.  It then runs the BCP process for every table.  At the end, all of the BCP files and the script are wrapped up in a zip file.  The name of the zip file includes the current date.</p>
<p>To restore the database, you create the database, run the script, and then rerun SQLAzureBackup.  It will reload all of your data using the BCP files.</p>
<p><strong>Try It</strong></p>
<p>A 30-day trial version of SQLAzureBackup is available for download.  You can also purchase the full version with source code for $39.99.</p>
<hr />
<a href="http://www.voiceoftech.com/swhitley/wp-content/uploads/2011/08/SQLAzureBackup.zip">Download the Trial</a></p>
<p>OR</p>
<hr />
Buy the full version:</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="FXXJZWV4H6DYJ">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1"><br />
</form>
<hr />
<p>There are some limitations &#8212; permissions and security aren&#8217;t currently scripted &#8212; I haven&#8217;t needed those features yet, but it may be necessary for someone else in the future.  I expect that some modifications will be made when bugs are discovered and I will make updates available.</p>
<p>Give the software a try and let me know what you think.  If you&#8217;ve been considering your own SQL Azure backup solution, this app will save you a lot of time.</p>
<div><a href="http://twitter.com/share" class="twitter-share-button"<br />
                data-url=&#8221;http://www.voiceoftech.com/swhitley/index.php/2011/08/sql-azure-backup/&#8221;<br />
                data-text=&#8221;SQL Azure Backup (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%2F08%2Fsql-azure-backup%2F&amp;title=SQL%20Azure%20Backup" 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/08/sql-azure-backup/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

