<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>WiredPrairie</title>
	
	<link>http://www.wiredprairie.us/blog</link>
	<description>A little bit of everything: software, apps, usability, programming, design and whatever else</description>
	<lastBuildDate>Sun, 13 May 2012 16:59:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/wiredprairie" /><feedburner:info uri="wiredprairie" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fwiredprairie" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fwiredprairie" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fwiredprairie" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/wiredprairie" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fwiredprairie" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fwiredprairie" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fwiredprairie" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fwiredprairie" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><item>
		<title>A bit of reflow, using TweenJS</title>
		<link>http://feedproxy.google.com/~r/wiredprairie/~3/dyEeiblHZZA/1664</link>
		<comments>http://www.wiredprairie.us/blog/index.php/archives/1664#comments</comments>
		<pubDate>Sun, 13 May 2012 16:59:54 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Metro]]></category>
		<category><![CDATA[TweenJS]]></category>

		<guid isPermaLink="false">http://www.wiredprairie.us/blog/?p=1664</guid>
		<description><![CDATA[Inspired by some modern applications (especially the “Metro” look and feel), I wanted to put together an animated tile reflow script for an HTML page I was creating. As the size of the page changes, the tiles move into their new positions. You can try it here, if you’re using a modern browser (IE9+, Chrome, [...]]]></description>
			<content:encoded><![CDATA[<p>Inspired by some modern applications (especially the “Metro” look and feel), I wanted to put together an animated tile reflow script for an HTML page I was creating. </p>
<p>As the size of the page changes, the tiles move into their new positions.</p>
<p><a href="http://www.wiredprairie.us/examples/easeljs/reflow1/" target="_blank"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML113b633f[4]" border="0" alt="SNAGHTML113b633f[4]" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/05/SNAGHTML113b633f4.png" width="502" height="408" /></a></p>
<p>You can try it <a href="http://www.wiredprairie.us/examples/easeljs/reflow1/" target="_blank">here</a>, if you’re using a modern browser (IE9+, Chrome, FF, Safari, etc.).</p>
<p>Dependencies:</p>
<ol>
<li><a href="http://createjs.com/#!/TweenJS" target="_blank">TweenJS</a></li>
<li><a href="http://createjs.com/#!/EaselJS" target="_blank">EaselJS</a> (for the ticker used in TweenJS)</li>
<li>CSSPlugin (an add on to the the TweenJS library)</li>
<li><a href="http://www.jquery.com" target="_blank">jQuery</a> (1.7.2)</li>
</ol>
<p> Relayouts are queued (as to prevent multiple from running).</p>
<p>Only boxes that will be visible to the end user (either animating to the screen or off the screen) are animated. It does not animate elements that do not start or end in the current viewport including boxes that would animate “through” the current viewport. I considered the latter to not add anything to the overall experience and just uses more CPU to perform the animations, so I intentionally left it out.</p>
<p>In the layout loop, the code verifies that the animation needs to run:</p>
<pre class="code"><span style="color: #006400">// here's the final destination
</span>pos = { left: Math.round(x), top: Math.round(y) };

<span style="color: #006400">// check old and new positions, if either are in the viewport, we'll animate
</span><span style="color: blue">if </span>(isScrolledIntoView(pos.top + parentOfBoxesOffsetTop, boxH) || isScrolledIntoView(box.y + parentOfBoxesOffsetTop, boxH)) {
    Tween.get(box.e).to(pos, 500 + 500 * Math.random(),
        Ease.quadInOut).call(<span style="color: blue">function </span>() {
            --layoutPending;
            <span style="color: blue">if </span>(!layoutPending &amp;&amp; queuedLayout) { queueLayout(); }
    });
} <span style="color: blue">else </span>{</pre>
<p>If it needs to animate, the code uses the static Tween method “get” to start an animation on the current element. </p>
<ol>
<li>Tween.get(box.e) creates a new instance of the Tween class (initialized with the element to tween).</li>
<li>Using that Tween instance, the CSS attributes (thanks to the handy CSSPlugin), for left and top are animated for at least 500ms and up to a full second. The easing function I chose is quadInOut. Tip: <a href="http://www.createjs.com/#!/TweenJS/demos/sparkTable" target="_blank">Here’s</a> a great way to visualize easing options using TweenJS.</li>
<li>Finally, when the animation completes, an anonymous function is called which decrements the number of pending animations and if there are no remaining elements to animate, and there’s something queued, another cycle is started.</li>
</ol>
<p>All the code used by the demo is in default.html.</p>
<p>Colors of the boxes were set using hsl (only available in modern browsers):</p>
<pre class="code">box.style.backgroundColor = <span style="color: maroon">&quot;hsl(&quot; </span>+ c + <span style="color: maroon">&quot;, 100%, 50%)&quot;</span>;</pre>
<p>Where “c” is:</p>
<pre class="code">c = (i / boxes * 360).toFixed(1);</pre>

<p><a href="http://feedads.g.doubleclick.net/~a/XOsk0TjSASB38Ga_NQ02W1yvRJ4/0/da"><img src="http://feedads.g.doubleclick.net/~a/XOsk0TjSASB38Ga_NQ02W1yvRJ4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/XOsk0TjSASB38Ga_NQ02W1yvRJ4/1/da"><img src="http://feedads.g.doubleclick.net/~a/XOsk0TjSASB38Ga_NQ02W1yvRJ4/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wiredprairie?a=dyEeiblHZZA:vpAPP7Fk4o8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=dyEeiblHZZA:vpAPP7Fk4o8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=dyEeiblHZZA:vpAPP7Fk4o8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=dyEeiblHZZA:vpAPP7Fk4o8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=dyEeiblHZZA:vpAPP7Fk4o8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=dyEeiblHZZA:vpAPP7Fk4o8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=dyEeiblHZZA:vpAPP7Fk4o8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=dyEeiblHZZA:vpAPP7Fk4o8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=dyEeiblHZZA:vpAPP7Fk4o8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=dyEeiblHZZA:vpAPP7Fk4o8:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wiredprairie/~4/dyEeiblHZZA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.wiredprairie.us/blog/index.php/archives/1664/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wiredprairie.us/blog/index.php/archives/1664</feedburner:origLink></item>
		<item>
		<title>Adding an External Tool for Compiling LESS files in WebStorm (on Windows)</title>
		<link>http://feedproxy.google.com/~r/wiredprairie/~3/l9Bx0rQlYbM/1656</link>
		<comments>http://www.wiredprairie.us/blog/index.php/archives/1656#comments</comments>
		<pubDate>Fri, 27 Apr 2012 12:57:34 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[JetBrains]]></category>
		<category><![CDATA[Less]]></category>
		<category><![CDATA[WebStorm]]></category>

		<guid isPermaLink="false">http://www.wiredprairie.us/blog/?p=1656</guid>
		<description><![CDATA[Interested in converting/compiling LESS files into their CSS counterparts? Here are the steps (from version 4 of WebStorm from JetBrains). 1. Install Node JS 2. Install the node package (using npm) for less (remember where you install this as you’ll need the path later): npm install less 3. In WebStorm, File &#62; Settings, then under [...]]]></description>
			<content:encoded><![CDATA[<p>Interested in converting/compiling <a href="http://lesscss.org/" target="_blank">LESS</a> files into their CSS counterparts?</p>
<p>Here are the steps (from version 4 of <a href="http://www.jetbrains.com/webstorm/" target="_blank">WebStorm from JetBrains</a>).</p>
<p>1. Install <a href="http://nodejs.org/#download" target="_blank">Node JS</a></p>
<p>2. Install the node package (using npm) for less (remember where you install this as you’ll need the path later):   </p>
<ol>
<pre><code>npm install less</code></pre>
</ol>
<p>3. In WebStorm, <strong>File</strong> &gt; <strong>Settings</strong>, then under the IDE Settings heading, select <strong>External Tools</strong>.</p>
<p>4. Click on the + icon to add a new tool:</p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image29.png" width="84" height="65" /></p>
<p>5. You’ll see a dialog very much like this:</p>
<p><a href="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/SNAGHTMLcd7f5f51.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTMLcd7f5f5" border="0" alt="SNAGHTMLcd7f5f5" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/SNAGHTMLcd7f5f5_thumb.png" width="502" height="243" /></a></p>
<p>6. Fill it out like this (substitute whatever you’d like of course):</p>
<p><a href="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/SNAGHTMLceae4a71.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTMLceae4a7" border="0" alt="SNAGHTMLceae4a7" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/SNAGHTMLceae4a7_thumb.png" width="502" height="243" /></a></p>
<p>I chose not to have the console window open every time the compilation occurs. </p>
<p>The only things you’ll need to change is the path to the file <strong>lessc</strong>. That file is actually JavaScript file (minus the extension). So, replace the first quoted parameter in “Parameters” above with the location that you installed the package for less in. </p>
<p>As it’s a JavaScript file you need to be executed, the “Program” is set to the node executable. Provide the full path (when I didn’t, it <em>sometimes </em>wouldn’t work and would complain that a path didn’t exist).</p>
<p>&quot;###YOUR PATH TO LESSC###\lessc&quot; $FilePath$ &quot;$FileDir$\$FileNameWithoutExtension$.css&quot;</p>
<p>I tried using the Working Directory option and it also worked inconsistently with Node. So, I used the options you see above and it seemed to work more consistently.</p>
<p>7. I also added a shortcut so I could execute it on demand:</p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTMLcdbd3f4" border="0" alt="SNAGHTMLcdbd3f4" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/SNAGHTMLcdbd3f4.png" width="545" height="674" /></p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTMLcdc51ca" border="0" alt="SNAGHTMLcdc51ca" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/SNAGHTMLcdc51ca.png" width="322" height="369" /></p>
<p>I picked Ctrl+Alt+L, as it was memorable (and available!).</p>
<p>While this is not using a file watcher technique (you could do that if you’d like instead), it works well enough for my workflow.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/7yIM6ZzCXJcoXELf8FdzMnO6lAQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/7yIM6ZzCXJcoXELf8FdzMnO6lAQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/7yIM6ZzCXJcoXELf8FdzMnO6lAQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/7yIM6ZzCXJcoXELf8FdzMnO6lAQ/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wiredprairie?a=l9Bx0rQlYbM:26gQvLzEGM4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=l9Bx0rQlYbM:26gQvLzEGM4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=l9Bx0rQlYbM:26gQvLzEGM4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=l9Bx0rQlYbM:26gQvLzEGM4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=l9Bx0rQlYbM:26gQvLzEGM4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=l9Bx0rQlYbM:26gQvLzEGM4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=l9Bx0rQlYbM:26gQvLzEGM4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=l9Bx0rQlYbM:26gQvLzEGM4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=l9Bx0rQlYbM:26gQvLzEGM4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=l9Bx0rQlYbM:26gQvLzEGM4:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wiredprairie/~4/l9Bx0rQlYbM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.wiredprairie.us/blog/index.php/archives/1656/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wiredprairie.us/blog/index.php/archives/1656</feedburner:origLink></item>
		<item>
		<title>Backup Reminder for Windows Home Server 2011</title>
		<link>http://feedproxy.google.com/~r/wiredprairie/~3/cBGvHCfDWYA/1648</link>
		<comments>http://www.wiredprairie.us/blog/index.php/archives/1648#comments</comments>
		<pubDate>Thu, 26 Apr 2012 12:49:54 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Recommendations]]></category>
		<category><![CDATA[WHS2011]]></category>
		<category><![CDATA[WindowsHomeServer]]></category>

		<guid isPermaLink="false">http://www.wiredprairie.us/blog/?p=1648</guid>
		<description><![CDATA[This is just a reminder to anyone who uses Windows Home Server’s Backup functionality to verify Backups are working. I love the “turn it on and forget about it” feature of WHS backup. Computers automatically wake, backup, and sleep. Nice. However, I noticed last week that at some point WHS2011 had an issue more than [...]]]></description>
			<content:encoded><![CDATA[<p>This is just a reminder to anyone who uses Windows Home Server’s Backup functionality to verify Backups are working.</p>
<p>I love the “turn it on and forget about it” feature of WHS backup. Computers automatically wake, backup, and sleep. <strong>Nice</strong>.</p>
<p>However, I noticed last week that at some point WHS2011 had an issue more than a month ago where it no longer was backing up ANY of the Windows PCs in our house (2 laptops, 2 desktops).</p>
<p>No actionable errors had occurred in March that I could find, so I can’t pinpoint a reason. I needed to go to every Windows PC in our house and re-enable backups. Thankfully, it didn’t need to start over from scratch (it picked up where it left off). </p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image27.png" width="472" height="534" /></p>
<p>Needless to say, having your computer backups silently fail is a bit worrisome. As many WHS2011 users likely don’t routinely go to the WHS dashboard – you might want to occasionally and check that every thing is OK.</p>
<p>I don’t use the LAUNCHPAD much as it tends to be the “software who cried wolf” too often. But, even if I had, I couldn’t see any indication in the Dashboard that I would have been alerted to this issue (since alerts are all saved until resolved or ignored).</p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML7ba7bdb" border="0" alt="SNAGHTML7ba7bdb" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/SNAGHTML7ba7bdb.png" width="282" height="402" /></p>
<p>(The two warnings shown in the screenshot are for: “Important updates should be installed.” and “Free space is low.” AKA, A drive has only 62GB free (10%)).</p>
<p>If you do use the LAUNCHPAD, you can verify the last backup by clicking the “Backup” button. You should see something like this in the dialog that is opened:</p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image28.png" width="263" height="100" /></p>

<p><a href="http://feedads.g.doubleclick.net/~a/K2D1wHLrXGzyAiC-yBLLR_ovaJQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/K2D1wHLrXGzyAiC-yBLLR_ovaJQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/K2D1wHLrXGzyAiC-yBLLR_ovaJQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/K2D1wHLrXGzyAiC-yBLLR_ovaJQ/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wiredprairie?a=cBGvHCfDWYA:UYQwLQ4Gv5U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=cBGvHCfDWYA:UYQwLQ4Gv5U:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=cBGvHCfDWYA:UYQwLQ4Gv5U:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=cBGvHCfDWYA:UYQwLQ4Gv5U:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=cBGvHCfDWYA:UYQwLQ4Gv5U:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=cBGvHCfDWYA:UYQwLQ4Gv5U:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=cBGvHCfDWYA:UYQwLQ4Gv5U:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=cBGvHCfDWYA:UYQwLQ4Gv5U:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=cBGvHCfDWYA:UYQwLQ4Gv5U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=cBGvHCfDWYA:UYQwLQ4Gv5U:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wiredprairie/~4/cBGvHCfDWYA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.wiredprairie.us/blog/index.php/archives/1648/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wiredprairie.us/blog/index.php/archives/1648</feedburner:origLink></item>
		<item>
		<title>SVG Setting Text Content Dynamically</title>
		<link>http://feedproxy.google.com/~r/wiredprairie/~3/e5nusyQVKDY/1643</link>
		<comments>http://www.wiredprairie.us/blog/index.php/archives/1643#comments</comments>
		<pubDate>Tue, 17 Apr 2012 12:53:00 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[SVG]]></category>

		<guid isPermaLink="false">http://www.wiredprairie.us/blog/?p=1643</guid>
		<description><![CDATA[Continuing on a theme of animating SVG, I’ve added a label in the center of the animation which contains the current angle of the ever-rotating marker (in fact in a centered horizontally and vertically SVG text node). (Click image below to try it.) At the bottom of the file from the previous post, I’ve added [...]]]></description>
			<content:encoded><![CDATA[<p>Continuing on a <a href="http://www.wiredprairie.us/blog/index.php/archives/1638">theme</a> of animating SVG, I’ve added a label in the center of the animation which contains the current angle of the ever-rotating marker (in fact in a centered horizontally and vertically SVG text node). </p>
<p>(Click image below to try it.)</p>
<p><a href="http://www.wiredprairie.us/examples/svg/demo2.html" target="_blank"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image26.png" width="316" height="313" /></a></p>
<p>At the bottom of the file from the <a href="http://www.wiredprairie.us/blog/index.php/archives/1638">previous</a> post, I’ve added the following:</p>
<pre class="code">    <span style="color: blue">&lt;</span><span style="color: maroon">text </span><span style="color: red">id</span><span style="color: blue">=&quot;currentValueAsText&quot; </span><span style="color: red">x</span><span style="color: blue">=&quot;300&quot; </span><span style="color: red">y</span><span style="color: blue">=&quot;300&quot;
        </span><span style="color: red">style</span><span style="color: blue">=&quot;</span><span style="color: red">text-anchor</span><span style="color: blue">: middle;</span><span style="color: red">alignment-baseline</span><span style="color: blue">:middle&quot;
        </span><span style="color: red">fill</span><span style="color: blue">=&quot;#FFFFFF&quot; </span><span style="color: red">font-family</span><span style="color: blue">=&quot;'Arial'&quot; </span><span style="color: red">font-size</span><span style="color: blue">=&quot;96&quot; </span><span style="color: red">opacity</span><span style="color: blue">=&quot;.6&quot;&gt;</span>0<span style="color: blue">&lt;/</span><span style="color: maroon">text</span><span style="color: blue">&gt;

</span></pre>
<p>It’s a new text node. It’s set to centered both horizontally and vertically (using the text-anchor and alignment-baseline style properties respectively) at 300,300. </p>
<p>Setting the content is simple as well:</p>
<pre class="code">(<span style="color: blue">function </span>() {
    window.onload = loaded;
    <span style="color: blue">function </span>loaded() {
        <span style="color: blue">var </span>colorTemp = document.getElementById(<span style="color: maroon">&quot;color-temp&quot;</span>);
        <span style="color: blue">var </span>reading = document.getElementById(<span style="color: maroon">'current-reading'</span>);
<font style="background-color: #ffff00">        <span style="color: blue">var </span>currentVal = document.getElementById(<span style="color: maroon">&quot;currentValueAsText&quot;</span>);
</font>        <span style="color: blue">var </span>currentAngle = 0;
        <span style="color: blue">var </span>fill;

        <span style="color: blue">var </span>direction = 1;
        setInterval(<span style="color: blue">function </span>() {
            currentAngle += direction;
            <span style="color: blue">if </span>(currentAngle &gt;= 120 || currentAngle &lt;= -120) {
                direction *= -1;
            } <span style="color: blue">else if </span>(currentAngle === 0) {
                fill = direction === 1 ? <span style="color: maroon">&quot;#BE1E2D&quot; </span>: <span style="color: maroon">&quot;#10A2DC&quot;</span>;
                colorTemp.setAttribute(<span style="color: maroon">&quot;fill&quot;</span>, fill);
            }
            <span style="color: #006400">// adjust the opacity
            </span>colorTemp.setAttribute(<span style="color: maroon">&quot;opacity&quot;</span>, Math.abs(currentAngle) / 120.0);
            reading.setAttribute(<span style="color: maroon">&quot;transform&quot;</span>, <span style="color: maroon">&quot;rotate(&quot; </span>+ currentAngle + <span style="color: maroon">&quot;)&quot;</span>);
<font style="background-color: #ffff00">            currentValueAsText.textContent = currentAngle.toString();
</font>
        }, 25);
    }
})();</pre>
<p>Use the <strong>textContent</strong> property of the SVG text node to set the text. </p>
<p>Done. <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/wlEmoticon-smile2.png" /></p>

<p><a href="http://feedads.g.doubleclick.net/~a/5yx01qzrKM2XK2YhO52SCXVYRu0/0/da"><img src="http://feedads.g.doubleclick.net/~a/5yx01qzrKM2XK2YhO52SCXVYRu0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/5yx01qzrKM2XK2YhO52SCXVYRu0/1/da"><img src="http://feedads.g.doubleclick.net/~a/5yx01qzrKM2XK2YhO52SCXVYRu0/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wiredprairie?a=e5nusyQVKDY:qcbE6ZJBgNU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=e5nusyQVKDY:qcbE6ZJBgNU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=e5nusyQVKDY:qcbE6ZJBgNU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=e5nusyQVKDY:qcbE6ZJBgNU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=e5nusyQVKDY:qcbE6ZJBgNU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=e5nusyQVKDY:qcbE6ZJBgNU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=e5nusyQVKDY:qcbE6ZJBgNU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=e5nusyQVKDY:qcbE6ZJBgNU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=e5nusyQVKDY:qcbE6ZJBgNU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=e5nusyQVKDY:qcbE6ZJBgNU:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wiredprairie/~4/e5nusyQVKDY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.wiredprairie.us/blog/index.php/archives/1643/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wiredprairie.us/blog/index.php/archives/1643</feedburner:origLink></item>
		<item>
		<title>Spinning SVG Animation</title>
		<link>http://feedproxy.google.com/~r/wiredprairie/~3/YV2PYHE85Ng/1638</link>
		<comments>http://www.wiredprairie.us/blog/index.php/archives/1638#comments</comments>
		<pubDate>Tue, 17 Apr 2012 01:36:13 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[Thermostat]]></category>

		<guid isPermaLink="false">http://www.wiredprairie.us/blog/?p=1638</guid>
		<description><![CDATA[Interested in learning a few capabilities of SVG animation this evening from JavaScript in a web page, I put together a simple demonstration. Click on the image to launch the demo. Animating SVG in a modern browser (including IE9) is generally easy enough. This example was slightly more interesting in that I wanted the thicker [...]]]></description>
			<content:encoded><![CDATA[<p>Interested in learning a few capabilities of SVG animation this evening from JavaScript in a web page, I put together a simple demonstration.</p>
<p>Click on the image to launch the demo.</p>
<p><a href="http://www.wiredprairie.us/examples/svg/demo1.html" target="_blank"><img style="background-image: none; border-right-width: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image23.png" width="308" height="307" /></a></p>
<p>Animating SVG in a modern browser (including IE9) is generally easy enough. This example was slightly more interesting in that I wanted the thicker line to rotate based on the center point of the image, rather than the location of the line itself.</p>
<p>Not what I wanted:</p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image24.png" width="308" height="307" /></p>
<p>Desired rotation:</p>
<p><img style="background-image: none; border-right-width: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image25.png" width="308" height="307" /></p>
<p>The white bar would rotate around the center point (marked by the red arrow above).</p>
<p>I’ve included all of the code at the bottom of the post. (There’s quite a lot of path information).</p>
<p>The JavaScript just used an interval to move the line around the point:</p>
<p>
<pre class="code">(<span style="color: blue">function </span>() {
    window.onload = loaded;
    <span style="color: blue">function </span>loaded() {
        <span style="color: blue">var </span>colorTemp = document.getElementById(<span style="color: maroon">&quot;color-temp&quot;</span>);
        <span style="color: blue">var </span>reading = document.getElementById(<span style="color: maroon">'current-reading'</span>);
        <span style="color: blue">var </span>currentAngle = 0;
        <span style="color: blue">var </span>fill;

        <span style="color: blue">var </span>direction = 1;
        setInterval(<span style="color: blue">function </span>() {
            currentAngle += direction;
            <span style="color: blue">if </span>(currentAngle &gt;= 120 || currentAngle &lt;= -120) {
                direction *= -1;
            } <span style="color: blue">else if </span>(currentAngle === 0) {
                fill = direction === 1 ? <span style="color: maroon">&quot;#BE1E2D&quot; </span>: <span style="color: maroon">&quot;#10A2DC&quot;</span>;
                colorTemp.setAttribute(<span style="color: maroon">&quot;fill&quot;</span>, fill);
            }
            <span style="color: #006400">// adjust the opacity
            </span>colorTemp.setAttribute(<span style="color: maroon">&quot;opacity&quot;</span>, Math.abs(currentAngle) / 120.0);

            reading.setAttribute(<span style="color: maroon">&quot;transform&quot;</span>, <span style="color: maroon">&quot;rotate(&quot; </span>+ currentAngle + <span style="color: maroon">&quot;)&quot;</span>);

        }, 25);
    }
})();</pre>
<p>  The angle is fixed between 120 and –120 degrees. When the angle reaches zero, the fill color is toggled. </p>
<p>As the angle adjusts, the line is updated as well as the opacity of the fill.</p>
<p>The overall size of the SVG drawing is 600&#215;600. Knowing that (and wanting the exact center), I translated a group to an offset of 300x, 300y containing the line:</p>
<pre class="code"><span style="color: blue">&lt;</span><span style="color: maroon">g </span><span style="color: red">id</span><span style="color: blue">=&quot;temp-transform&quot; </span><span style="color: red">transform</span><span style="color: blue">=&quot;translate(300,300)&quot;&gt;
        &lt;</span><span style="color: maroon">line </span><span style="color: red">id</span><span style="color: blue">=&quot;current-reading&quot; </span><span style="color: red">fill</span><span style="color: blue">=&quot;none&quot; </span><span style="color: red">stroke</span><span style="color: blue">=&quot;#FFFFFF&quot;
              </span><span style="color: red">stroke-width</span><span style="color: blue">=&quot;5&quot; </span><span style="color: red">stroke-linecap</span><span style="color: blue">=&quot;round&quot;
              </span><span style="color: red">stroke-miterlimit</span><span style="color: blue">=&quot;10&quot; </span><span style="color: red">x1</span><span style="color: blue">=&quot;0&quot; </span><span style="color: red">y1</span><span style="color: blue">=&quot;-180&quot; </span><span style="color: red">x2</span><span style="color: blue">=&quot;0&quot; </span><span style="color: red">y2</span><span style="color: blue">=&quot;-120&quot;/&gt;
&lt;/</span><span style="color: maroon">g</span><span style="color: blue">&gt;
</span></pre>
<p>This effectively made the rotation now work from the center, once the line coordinates were adjusted to reflect the new translation. </p>
<p>This works because the contents of the outer group caused the new starting point (origin) to be 300x, 300y rather than the default 0x, 0y. You can see the line is from y –120 to y –180. That’s because I wanted the line to start in the top middle (as the x is set to 0 for the line).</p>
<p>I used Adobe Illustrator CS 5.5 to create the SVG image. Illustrator typically does not always handle fonts well when exporting as SVG. The final text node was this:</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">&lt;text transform=<span style="color: #006080">&quot;matrix(1 0 0 1 254.1387 83.3198)&quot;</span> fill=<span style="color: #006080">&quot;#D1D3D4&quot;</span> font-family=<span style="color: #006080">&quot;'Arial'&quot;</span>      font-weight=<span style="color: #006080">&quot;bold&quot;</span> font-size=<span style="color: #006080">&quot;29.4616&quot;</span>&gt;thermo&lt;/text&gt;</pre>
<p></div>
<p>To make it work across browsers, I needed to modify the text node below slightly. Note the font name and missing bold attribute. It’s not a hard switch, but it’s annoying if you need to make changes to your SVG multiple times.</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">&lt;text transform=<span style="color: #006080">&quot;matrix(1 0 0 1 254.1387 83.3198)&quot;</span> fill=<span style="color: #006080">&quot;#D1D3D4&quot;</span> font-family=<span style="color: #006080">&quot;'Arial-BoldMT'&quot;</span> font-size=<span style="color: #006080">&quot;29.4616&quot;</span>&gt;thermo&lt;/text&gt;</pre>
<p></div>
<p>If you have any questions, please leave a comment!</p>
<pre class="code"><span style="color: blue">&lt;!</span><span style="color: maroon">DOCTYPE </span><span style="color: red">HTML</span><span style="color: blue">&gt;
&lt;</span><span style="color: maroon">html</span><span style="color: blue">&gt;
&lt;</span><span style="color: maroon">head</span><span style="color: blue">&gt;
    &lt;</span><span style="color: maroon">title</span><span style="color: blue">&gt;</span>Svg Spinner Demo<span style="color: blue">&lt;/</span><span style="color: maroon">title</span><span style="color: blue">&gt;
    &lt;</span><span style="color: maroon">style</span><span style="color: blue">&gt;
        </span><span style="color: maroon">#demo1 svg </span>{
            <span style="color: red">width</span>: <span style="color: blue">300px</span>;
            <span style="color: red">height</span>: <span style="color: blue">300px</span>;
        }

    <span style="color: blue">&lt;/</span><span style="color: maroon">style</span><span style="color: blue">&gt;
&lt;/</span><span style="color: maroon">head</span><span style="color: blue">&gt;
&lt;</span><span style="color: maroon">body</span><span style="color: blue">&gt;

&lt;</span><span style="color: maroon">div </span><span style="color: red">id</span><span style="color: blue">=&quot;demo1&quot;&gt;
&lt;</span><span style="color: maroon">svg </span><span style="color: red">version</span><span style="color: blue">=&quot;1.0&quot; </span><span style="color: red">id</span><span style="color: blue">=&quot;Layer_1&quot; </span><span style="color: red">xmlns</span><span style="color: blue">=&quot;http://www.w3.org/2000/svg&quot; </span><span style="color: red">xmlns</span><span style="color: blue">:</span><span style="color: red">xlink</span><span style="color: blue">=&quot;http://www.w3.org/1999/xlink&quot; </span><span style="color: red">x</span><span style="color: blue">=&quot;0px&quot; </span><span style="color: red">y</span><span style="color: blue">=&quot;0px&quot;
     </span><span style="color: red">width</span><span style="color: blue">=&quot;600px&quot; </span><span style="color: red">height</span><span style="color: blue">=&quot;600px&quot; </span><span style="color: red">viewBox</span><span style="color: blue">=&quot;0 0 600 600&quot; </span><span style="color: red">enable-background</span><span style="color: blue">=&quot;new 0 0 600 600&quot; </span><span style="color: red">xml</span><span style="color: blue">:</span><span style="color: red">space</span><span style="color: blue">=&quot;preserve&quot;&gt;
&lt;</span><span style="color: maroon">g</span><span style="color: blue">&gt;
    &lt;</span><span style="color: maroon">radialGradient </span><span style="color: red">id</span><span style="color: blue">=&quot;SVGID_1_&quot; </span><span style="color: red">cx</span><span style="color: blue">=&quot;298.9106&quot; </span><span style="color: red">cy</span><span style="color: blue">=&quot;196.146&quot; </span><span style="color: red">r</span><span style="color: blue">=&quot;399.267&quot; </span><span style="color: red">gradientUnits</span><span style="color: blue">=&quot;userSpaceOnUse&quot;&gt;
        &lt;</span><span style="color: maroon">stop  </span><span style="color: red">offset</span><span style="color: blue">=&quot;0&quot; </span><span style="color: red">style</span><span style="color: blue">=&quot;</span><span style="color: red">stop-color</span><span style="color: blue">:#D9D9D9&quot;/&gt;
        &lt;</span><span style="color: maroon">stop  </span><span style="color: red">offset</span><span style="color: blue">=&quot;1&quot; </span><span style="color: red">style</span><span style="color: blue">=&quot;</span><span style="color: red">stop-color</span><span style="color: blue">:#C2C2C2&quot;/&gt;
    &lt;/</span><span style="color: maroon">radialGradient</span><span style="color: blue">&gt;
    &lt;</span><span style="color: maroon">path </span><span style="color: red">fill</span><span style="color: blue">=&quot;url(#SVGID_1_)&quot; </span><span style="color: red">d</span><span style="color: blue">=&quot;M300.646,595.41c-78.957,0-153.188-30.747-209.02-86.579C35.795,453,5.048,378.77,5.048,299.812
        c0-78.957,30.748-153.188,86.579-209.02S221.689,4.214,300.646,4.214c78.958,0,153.188,30.748,209.019,86.579
        c55.832,55.831,86.579,130.063,86.579,209.02c0,78.958-30.747,153.188-86.579,209.019
        C453.834,564.663,379.604,595.41,300.646,595.41z&quot;/&gt;
    &lt;</span><span style="color: maroon">path </span><span style="color: red">fill</span><span style="color: blue">=&quot;#808285&quot; </span><span style="color: red">d</span><span style="color: blue">=&quot;M300.646,6.214c39.637,0,78.086,7.762,114.281,23.071c34.961,14.787,66.359,35.957,93.324,62.922
        s48.135,58.364,62.923,93.325c15.309,36.193,23.07,74.643,23.07,114.28s-7.762,78.086-23.07,114.281
        c-14.788,34.961-35.958,66.359-62.923,93.324s-58.363,48.135-93.324,62.923c-36.194,15.309-74.644,23.07-114.281,23.07
        s-78.087-7.762-114.28-23.07c-34.961-14.788-66.36-35.958-93.325-62.923s-48.135-58.363-62.922-93.324
        C14.81,377.898,7.048,339.449,7.048,299.812s7.762-78.087,23.071-114.28c14.787-34.961,35.957-66.36,62.922-93.325
        s58.364-48.135,93.325-62.922C222.559,13.976,261.009,6.214,300.646,6.214 M300.646,2.214
        C136.287,2.214,3.048,135.453,3.048,299.812S136.287,597.41,300.646,597.41s297.598-133.239,297.598-297.598
        S465.005,2.214,300.646,2.214L300.646,2.214z&quot;/&gt;
&lt;/</span><span style="color: maroon">g</span><span style="color: blue">&gt;
&lt;</span><span style="color: maroon">g</span><span style="color: blue">&gt;
    &lt;</span><span style="color: maroon">radialGradient </span><span style="color: red">id</span><span style="color: blue">=&quot;SVGID_2_&quot; </span><span style="color: red">cx</span><span style="color: blue">=&quot;299.0464&quot; </span><span style="color: red">cy</span><span style="color: blue">=&quot;204.2632&quot; </span><span style="color: red">r</span><span style="color: blue">=&quot;368.0053&quot; </span><span style="color: red">gradientUnits</span><span style="color: blue">=&quot;userSpaceOnUse&quot;&gt;
        &lt;</span><span style="color: maroon">stop  </span><span style="color: red">offset</span><span style="color: blue">=&quot;0&quot; </span><span style="color: red">style</span><span style="color: blue">=&quot;</span><span style="color: red">stop-color</span><span style="color: blue">:#141414&quot;/&gt;
        &lt;</span><span style="color: maroon">stop  </span><span style="color: red">offset</span><span style="color: blue">=&quot;1&quot; </span><span style="color: red">style</span><span style="color: blue">=&quot;</span><span style="color: red">stop-color</span><span style="color: blue">:#080808&quot;/&gt;
    &lt;/</span><span style="color: maroon">radialGradient</span><span style="color: blue">&gt;
    &lt;</span><span style="color: maroon">path </span><span style="color: red">fill</span><span style="color: blue">=&quot;url(#SVGID_2_)&quot; </span><span style="color: red">d</span><span style="color: blue">=&quot;M300.646,572.266c-72.775,0-141.194-28.34-192.654-79.8c-51.459-51.46-79.8-119.879-79.8-192.654
        s28.34-141.194,79.8-192.654s119.879-79.8,192.654-79.8s141.194,28.34,192.654,79.8c51.46,51.46,79.8,119.879,79.8,192.654
        s-28.34,141.194-79.8,192.654S373.421,572.266,300.646,572.266z&quot;/&gt;
    &lt;</span><span style="color: maroon">path </span><span style="color: red">d</span><span style="color: blue">=&quot;M300.646,29.358c36.512,0,71.931,7.15,105.271,21.252c32.205,13.622,61.129,33.123,85.968,57.962
        c24.84,24.839,44.341,53.763,57.963,85.968c14.102,33.34,21.252,68.759,21.252,105.271c0,36.512-7.15,71.931-21.252,105.271
        c-13.622,32.205-33.123,61.129-57.963,85.968c-24.839,24.84-53.763,44.341-85.968,57.963
        c-33.34,14.102-68.759,21.252-105.271,21.252c-36.513,0-71.931-7.15-105.271-21.252c-32.205-13.622-61.129-33.123-85.968-57.963
        c-24.839-24.839-44.34-53.763-57.962-85.968c-14.102-33.34-21.252-68.759-21.252-105.271c0-36.513,7.15-71.931,21.252-105.271
        c13.622-32.205,33.123-61.129,57.962-85.968s53.763-44.34,85.968-57.962C228.715,36.509,264.133,29.358,300.646,29.358
         M300.646,25.358c-151.577,0-274.454,122.877-274.454,274.454c0,151.576,122.877,274.454,274.454,274.454
        c151.576,0,274.454-122.878,274.454-274.454C575.1,148.235,452.222,25.358,300.646,25.358L300.646,25.358z&quot;/&gt;
&lt;/</span><span style="color: maroon">g</span><span style="color: blue">&gt;
&lt;</span><span style="color: maroon">g</span><span style="color: blue">&gt;
    &lt;</span><span style="color: maroon">radialGradient </span><span style="color: red">id</span><span style="color: blue">=&quot;SVGID_3_&quot; </span><span style="color: red">cx</span><span style="color: blue">=&quot;299.5176&quot; </span><span style="color: red">cy</span><span style="color: blue">=&quot;232.4409&quot; </span><span style="color: red">r</span><span style="color: blue">=&quot;259.4771&quot; </span><span style="color: red">gradientUnits</span><span style="color: blue">=&quot;userSpaceOnUse&quot;&gt;
        &lt;</span><span style="color: maroon">stop  </span><span style="color: red">offset</span><span style="color: blue">=&quot;0&quot; </span><span style="color: red">style</span><span style="color: blue">=&quot;</span><span style="color: red">stop-color</span><span style="color: blue">:#212121&quot;/&gt;
        &lt;</span><span style="color: maroon">stop  </span><span style="color: red">offset</span><span style="color: blue">=&quot;1&quot; </span><span style="color: red">style</span><span style="color: blue">=&quot;</span><span style="color: red">stop-color</span><span style="color: blue">:#0D0D0D&quot;/&gt;
    &lt;/</span><span style="color: maroon">radialGradient</span><span style="color: blue">&gt;
    &lt;</span><span style="color: maroon">path </span><span style="color: red">fill</span><span style="color: blue">=&quot;url(#SVGID_3_)&quot; </span><span style="color: red">d</span><span style="color: blue">=&quot;M300.646,491.916c-105.927,0-192.104-86.178-192.104-192.104
        c0-105.927,86.178-192.104,192.104-192.104c105.926,0,192.104,86.178,192.104,192.104
        C492.75,405.738,406.572,491.916,300.646,491.916z&quot;/&gt;
    &lt;</span><span style="color: maroon">path </span><span style="color: red">d</span><span style="color: blue">=&quot;M300.646,109.708c25.666,0,50.561,5.026,73.996,14.938c22.638,9.575,42.968,23.283,60.429,40.743
        c17.46,17.46,31.167,37.791,40.742,60.428c9.912,23.435,14.938,48.331,14.938,73.996s-5.025,50.561-14.938,73.996
        c-9.575,22.638-23.282,42.968-40.742,60.429c-17.461,17.46-37.791,31.167-60.429,40.742c-23.435,9.912-48.33,14.938-73.996,14.938
        s-50.562-5.025-73.996-14.938c-22.637-9.575-42.968-23.282-60.428-40.742c-17.46-17.461-31.168-37.791-40.743-60.429
        c-9.912-23.435-14.938-48.33-14.938-73.996s5.026-50.562,14.938-73.996c9.575-22.637,23.283-42.968,40.743-60.428
        s37.791-31.168,60.428-40.743C250.084,114.733,274.98,109.708,300.646,109.708 M300.646,105.708
        c-107.201,0-194.104,86.903-194.104,194.104c0,107.201,86.903,194.104,194.104,194.104c107.201,0,194.104-86.903,194.104-194.104
        C494.75,192.611,407.847,105.708,300.646,105.708L300.646,105.708z&quot;/&gt;
&lt;/</span><span style="color: maroon">g</span><span style="color: blue">&gt;
&lt;</span><span style="color: maroon">g </span><span style="color: red">opacity</span><span style="color: blue">=&quot;0.8&quot;&gt;
    &lt;</span><span style="color: maroon">path </span><span style="color: red">id</span><span style="color: blue">=&quot;color-temp&quot; </span><span style="color: red">fill</span><span style="color: blue">=&quot;#BE1E2D&quot; </span><span style="color: red">opacity</span><span style="color: blue">=&quot;0&quot; </span><span style="color: red">d</span><span style="color: blue">=&quot;M300.646,489.309c-104.489,0-189.497-85.008-189.497-189.497c0-104.489,85.008-189.497,189.497-189.497
        c104.489,0,189.497,85.008,189.497,189.497C490.143,404.301,405.135,489.309,300.646,489.309z&quot;/&gt;
    &lt;</span><span style="color: maroon">path </span><span style="color: red">d</span><span style="color: blue">=&quot;M300.646,110.815c25.515,0,50.266,4.997,73.566,14.852c22.505,9.519,42.718,23.146,60.075,40.504
        s30.984,37.57,40.504,60.075c9.854,23.3,14.852,48.051,14.852,73.566s-4.997,50.266-14.852,73.566
        c-9.52,22.505-23.146,42.718-40.504,60.075s-37.57,30.984-60.075,40.504c-23.3,9.854-48.051,14.852-73.566,14.852
        s-50.266-4.997-73.566-14.852c-22.505-9.52-42.718-23.146-60.075-40.504s-30.985-37.57-40.504-60.075
        c-9.855-23.3-14.852-48.051-14.852-73.566s4.997-50.266,14.852-73.566c9.519-22.505,23.146-42.718,40.504-60.075
        s37.57-30.985,60.075-40.504C250.38,115.812,275.131,110.815,300.646,110.815 M300.646,109.815
        c-104.933,0-189.997,85.064-189.997,189.997c0,104.932,85.064,189.997,189.997,189.997c104.932,0,189.997-85.064,189.997-189.997
        C490.643,194.879,405.578,109.815,300.646,109.815L300.646,109.815z&quot;/&gt;
&lt;/</span><span style="color: maroon">g</span><span style="color: blue">&gt;
&lt;</span><span style="color: maroon">g </span><span style="color: red">id</span><span style="color: blue">=&quot;temperature-markings&quot;&gt;
        &lt;</span><span style="color: maroon">line </span><span style="color: red">fill</span><span style="color: blue">=&quot;none&quot; </span><span style="color: red">stroke</span><span style="color: blue">=&quot;#C7C8CA&quot; </span><span style="color: red">stroke-width</span><span style="color: blue">=&quot;5&quot; </span><span style="color: red">stroke-miterlimit</span><span style="color: blue">=&quot;10&quot;
              </span><span style="color: red">x1</span><span style="color: blue">=&quot;300.646&quot; </span><span style="color: red">y1</span><span style="color: blue">=&quot;123.751&quot; </span><span style="color: red">x2</span><span style="color: blue">=&quot;300.646&quot; </span><span style="color: red">y2</span><span style="color: blue">=&quot;161.603&quot;/&gt;
        &lt;</span><span style="color: maroon">line </span><span style="color: red">fill</span><span style="color: blue">=&quot;none&quot; </span><span style="color: red">stroke</span><span style="color: blue">=&quot;#C7C8CA&quot; </span><span style="color: red">stroke-width</span><span style="color: blue">=&quot;5&quot; </span><span style="color: red">stroke-miterlimit</span><span style="color: blue">=&quot;10&quot;
              </span><span style="color: red">x1</span><span style="color: blue">=&quot;422.102&quot; </span><span style="color: red">y1</span><span style="color: blue">=&quot;371.971&quot; </span><span style="color: red">x2</span><span style="color: blue">=&quot;454.881&quot; </span><span style="color: red">y2</span><span style="color: blue">=&quot;390.896&quot;/&gt;
        &lt;</span><span style="color: maroon">line </span><span style="color: red">fill</span><span style="color: blue">=&quot;none&quot; </span><span style="color: red">stroke</span><span style="color: blue">=&quot;#C7C8CA&quot; </span><span style="color: red">stroke-width</span><span style="color: blue">=&quot;5&quot; </span><span style="color: red">stroke-miterlimit</span><span style="color: blue">=&quot;10&quot;
              </span><span style="color: red">x1</span><span style="color: blue">=&quot;146.41&quot; </span><span style="color: red">y1</span><span style="color: blue">=&quot;390.896&quot; </span><span style="color: red">x2</span><span style="color: blue">=&quot;179.191&quot; </span><span style="color: red">y2</span><span style="color: blue">=&quot;371.97&quot;/&gt;
&lt;/</span><span style="color: maroon">g</span><span style="color: blue">&gt;
&lt;</span><span style="color: maroon">g </span><span style="color: red">id</span><span style="color: blue">=&quot;temp-transform&quot; </span><span style="color: red">transform</span><span style="color: blue">=&quot;translate(300,300)&quot;&gt;
        &lt;</span><span style="color: maroon">line </span><span style="color: red">id</span><span style="color: blue">=&quot;current-reading&quot; </span><span style="color: red">fill</span><span style="color: blue">=&quot;none&quot; </span><span style="color: red">stroke</span><span style="color: blue">=&quot;#FFFFFF&quot;
              </span><span style="color: red">stroke-width</span><span style="color: blue">=&quot;5&quot; </span><span style="color: red">stroke-linecap</span><span style="color: blue">=&quot;round&quot;
              </span><span style="color: red">stroke-miterlimit</span><span style="color: blue">=&quot;10&quot; </span><span style="color: red">x1</span><span style="color: blue">=&quot;0&quot; </span><span style="color: red">y1</span><span style="color: blue">=&quot;-180&quot; </span><span style="color: red">x2</span><span style="color: blue">=&quot;0&quot; </span><span style="color: red">y2</span><span style="color: blue">=&quot;-120&quot;/&gt;
&lt;/</span><span style="color: maroon">g</span><span style="color: blue">&gt;
    &lt;</span><span style="color: maroon">text </span><span style="color: red">transform</span><span style="color: blue">=&quot;matrix(1 0 0 1 254.1387 83.3198)&quot; </span><span style="color: red">fill</span><span style="color: blue">=&quot;#D1D3D4&quot; </span><span style="color: red">font-family</span><span style="color: blue">=&quot;'Arial'&quot;
          </span><span style="color: red">font-weight</span><span style="color: blue">=&quot;bold&quot; </span><span style="color: red">font-size</span><span style="color: blue">=&quot;29.4616&quot;&gt;</span>thermo<span style="color: blue">&lt;/</span><span style="color: maroon">text</span><span style="color: blue">&gt;
&lt;/</span><span style="color: maroon">svg</span><span style="color: blue">&gt;

&lt;/</span><span style="color: maroon">div</span><span style="color: blue">&gt;

&lt;</span><span style="color: maroon">script </span><span style="color: red">type</span><span style="color: blue">=&quot;text/javascript&quot;&gt;

    </span>(<span style="color: blue">function </span>() {

        window.onload = loaded;

        <span style="color: blue">function </span>loaded() {
            <span style="color: blue">var </span>colorTemp = document.getElementById(<span style="color: maroon">&quot;color-temp&quot;</span>);
            <span style="color: blue">var </span>reading = document.getElementById(<span style="color: maroon">'current-reading'</span>);
            <span style="color: blue">var </span>currentAngle = 0;
            <span style="color: blue">var </span>fill;

            <span style="color: blue">var </span>direction = 1;
            setInterval(<span style="color: blue">function </span>() {
                currentAngle += direction;
                <span style="color: blue">if </span>(currentAngle &gt;= 120 || currentAngle &lt;= -120) {
                    direction *= -1;
                } <span style="color: blue">else if </span>(currentAngle === 0) {
                    fill = direction === 1 ? <span style="color: maroon">&quot;#BE1E2D&quot; </span>: <span style="color: maroon">&quot;#10A2DC&quot;</span>;
                    colorTemp.setAttribute(<span style="color: maroon">&quot;fill&quot;</span>, fill);
                }
                <span style="color: #006400">// adjust the opacity
                </span>colorTemp.setAttribute(<span style="color: maroon">&quot;opacity&quot;</span>, Math.abs(currentAngle) / 120.0);

                reading.setAttribute(<span style="color: maroon">&quot;transform&quot;</span>, <span style="color: maroon">&quot;rotate(&quot; </span>+ currentAngle + <span style="color: maroon">&quot;)&quot;</span>);

            }, 25);
        }
    })();

<span style="color: blue">&lt;/</span><span style="color: maroon">script</span><span style="color: blue">&gt;
&lt;/</span><span style="color: maroon">body</span><span style="color: blue">&gt;
&lt;/</span><span style="color: maroon">html</span><span style="color: blue">&gt;
</span></pre>

<p><a href="http://feedads.g.doubleclick.net/~a/9ccIK2f2_DMwpqw5_K8nD2pbEFQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/9ccIK2f2_DMwpqw5_K8nD2pbEFQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/9ccIK2f2_DMwpqw5_K8nD2pbEFQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/9ccIK2f2_DMwpqw5_K8nD2pbEFQ/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wiredprairie?a=YV2PYHE85Ng:OPCzM112BR0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=YV2PYHE85Ng:OPCzM112BR0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=YV2PYHE85Ng:OPCzM112BR0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=YV2PYHE85Ng:OPCzM112BR0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=YV2PYHE85Ng:OPCzM112BR0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=YV2PYHE85Ng:OPCzM112BR0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=YV2PYHE85Ng:OPCzM112BR0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=YV2PYHE85Ng:OPCzM112BR0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=YV2PYHE85Ng:OPCzM112BR0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=YV2PYHE85Ng:OPCzM112BR0:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wiredprairie/~4/YV2PYHE85Ng" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.wiredprairie.us/blog/index.php/archives/1638/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.wiredprairie.us/blog/index.php/archives/1638</feedburner:origLink></item>
		<item>
		<title>Nest Thermostat, Software Update 2.0</title>
		<link>http://feedproxy.google.com/~r/wiredprairie/~3/X-zPLt4OJEM/1631</link>
		<comments>http://www.wiredprairie.us/blog/index.php/archives/1631#comments</comments>
		<pubDate>Tue, 10 Apr 2012 13:00:05 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Nest]]></category>
		<category><![CDATA[Review]]></category>
		<category><![CDATA[Thermostat]]></category>

		<guid isPermaLink="false">http://www.wiredprairie.us/blog/?p=1631</guid>
		<description><![CDATA[Nest recently released a new update to the software of the thermostat device (as well as their corresponding web and mobile applications). Some of the details may be found on their blog. A few of the new features include an historical view of the heating/cooling usage: On Friday, April 6th for example, you can see [...]]]></description>
			<content:encoded><![CDATA[<p>Nest recently released a new update to the software of the thermostat device (as well as their corresponding web and mobile applications). </p>
<p>Some of the details may be found on their <a href="http://www.nest.com/2012/04/05/nest_thermostat_software_brings_more_info_savings_access/">blog</a>.</p>
<p>A few of the new features include an <a href="http://www.nest.com/2012/04/05/saving-energy-with-energy-history/">historical view</a> of the heating/cooling usage:</p>
<p><a href="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image11.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image_thumb1.png" width="449" height="482" /></a></p>
<p>On Friday, April 6th for example, you can see when the heat turned on and what the set points were for the day for my First Floor thermostat. The data isn’t as interesting during our Midwest Spring as the furnace doesn’t run nearly as much. </p>
<p>Here’s from another day:</p>
<p><a href="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image12.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image_thumb2.png" width="502" height="46" /></a></p>
<p>I doubt I’ll use this feature much. It only has 10 days of information available apparently right now, so I just can’t see this being very useful. I’m skeptical that this will affect my choices as it comes to how we use our HVAC system. I could see potentially how aggregate data of many users (in a similar geographical area) could become more compelling and potentially a source of data that Nest might be able to sell. </p>
<p>The settings for a thermostat have been tweaked visually. The same basic data is available as before:</p>
<p><a href="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image13.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image_thumb3.png" width="502" height="215" /></a></p>
<p>The learning tab has been cleaned up as well:</p>
<p><a href="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image14.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image_thumb4.png" width="502" height="202" /></a></p>
<p>For some reason, our thermostat that we’ve had for four months is apparently still in training (Time to Temp). That seems like an issue that maybe I’ll look into. Although I don’t really care much about the “time to temp” feature normally as I don’t manually adjust the affected thermostat much.</p>
<p>The “Away” tab changed:</p>
<p><a href="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image15.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image_thumb5.png" width="502" height="202" /></a></p>
<p>Not a big improvement for usability. Probably more touch friendly (and it’s logically correct as it heats when less than 58 degrees for example), but it feels wrong. Thermostats aren’t normally left to right oriented (temp goes up and down), so this breaks a typical UX model. </p>
<p>On the Equipment tab, they’ve tweaked the UI as well:</p>
<p><a href="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image16.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image_thumb6.png" width="502" height="163" /></a></p>
<p><font style="style">I clicked on the <strong>Safety Temp</strong> word (? it’s not a button, nor a link, so I don’t know what to call it) and the above UI displayed. The same temperature range UX is displayed, but here I like it even less. I suppose we don’t have a maximum temperature in the house during cooling season, but this is clunky. (And given that it’s safety related, I wish it were more clear). I can hear some of you say, “but it’s clear to me.” I do understand it, but I’m confident there is a better way of displaying and adjusting these temperatures that would be more obvious.</font></p>
<p>(And Nest Labs, go ahead and spell out “TEMP” please? Thanks!)</p>
<p> The technical info tab is the same basically. </p>
<p>There’s now a lock feature (which I have no need for, and am not going to experiment with right now):</p>
<p><a href="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image17.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image_thumb7.png" width="502" height="193" /></a></p>
<p>One of the big new TM’ed features is called <a href="http://support.nest.com/customer/portal/articles/453244-">Airwave</a>™. Apparently, when it’s hot and the humidity is low (not typical for Wisconsin, as our summers are usually hot and humid), the thermostat apparently will try to do more cooling by turning off the air conditioning system early and using the fan more. (I always thought our air conditioner already did that as the compressor turns off before the fans). If it helps lower our electricity bill, awesome. I’ll report back if I can tell that it is working and helping (without historical data though, it will be difficult for us, especially as we added solar panels to our house last fall).</p>
<p>The scheduling tab looks basically unchanged. The support tab has more content, so you don’t have to go to their web site to read the information. That’s a nice improvement.</p>
<hr />
<p><font style="style">OK, this was very strange. As I was writing this post (and in the middle of using the application), I saw the following:</font></p>
<p><a href="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image18.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image_thumb8.png" width="502" height="478" /></a></p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image19.png" width="502" height="478" /></p>
<p><a href="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image20.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image_thumb9.png" width="502" height="478" /></a></p>
<p>Now, the thermostats are all disconnected in some odd way:</p>
<p><a href="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image21.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image_thumb10.png" width="502" height="210" /></a></p>
<p>A few minutes later, things improved (but not perfect):</p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image22.png" width="365" height="244" />&#160;</p>
<p>Twenty minutes later, the BASEMENT thermostat is still disconnected. I reset the thermostat and it’s back now. </p>

<p><a href="http://feedads.g.doubleclick.net/~a/QftHDgU2l-qGbEVIB1KqxrYHw5w/0/da"><img src="http://feedads.g.doubleclick.net/~a/QftHDgU2l-qGbEVIB1KqxrYHw5w/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/QftHDgU2l-qGbEVIB1KqxrYHw5w/1/da"><img src="http://feedads.g.doubleclick.net/~a/QftHDgU2l-qGbEVIB1KqxrYHw5w/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wiredprairie?a=X-zPLt4OJEM:7MyY-x1H9-I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=X-zPLt4OJEM:7MyY-x1H9-I:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=X-zPLt4OJEM:7MyY-x1H9-I:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=X-zPLt4OJEM:7MyY-x1H9-I:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=X-zPLt4OJEM:7MyY-x1H9-I:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=X-zPLt4OJEM:7MyY-x1H9-I:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=X-zPLt4OJEM:7MyY-x1H9-I:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=X-zPLt4OJEM:7MyY-x1H9-I:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=X-zPLt4OJEM:7MyY-x1H9-I:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=X-zPLt4OJEM:7MyY-x1H9-I:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wiredprairie/~4/X-zPLt4OJEM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.wiredprairie.us/blog/index.php/archives/1631/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.wiredprairie.us/blog/index.php/archives/1631</feedburner:origLink></item>
		<item>
		<title>You’re doing it wrong, alt text and title attributes</title>
		<link>http://feedproxy.google.com/~r/wiredprairie/~3/iXAIsBX5Uro/1607</link>
		<comments>http://www.wiredprairie.us/blog/index.php/archives/1607#comments</comments>
		<pubDate>Thu, 05 Apr 2012 12:55:44 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Humor]]></category>
		<category><![CDATA[Html]]></category>

		<guid isPermaLink="false">http://www.wiredprairie.us/blog/?p=1607</guid>
		<description><![CDATA[I had moved my mouse over an image on a local bank’s web site, and was surprised to see the name of the file pop-up. The reason is that their web developer apparently doesn’t understand the meaning or intention behind the alt or title attribute of an HTML element. Not that it isn’t handy to [...]]]></description>
			<content:encoded><![CDATA[<p>I had moved my mouse over an image on a local bank’s web site, and was surprised to see the name of the file pop-up. </p>
<p><a href="http://www.anchorbank.com/business/splash.aspx"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML3867720c" border="0" alt="SNAGHTML3867720c" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/SNAGHTML3867720c.png" width="378" height="114" /></a></p>
<p>The reason is that their web developer apparently doesn’t understand the meaning or intention behind the <a href="http://en.wikipedia.org/wiki/Alt_attribute">alt</a> or title attribute of an HTML element. </p>
<p>Not that it isn’t handy to know the name of the file…. <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/wlEmoticon-smile1.png" /></p>
<p>Maybe they could have used:</p>
<ul>
<li>Passionate bank web site user</li>
<li>Man with loose tie</li>
<li>Man having good hair day</li>
<li>Or …. ?</li>
</ul>
<p>(I noticed that they have this problem in many areas of their web site. Maybe their Banking skills are better than their web site skills?)</p>

<p><a href="http://feedads.g.doubleclick.net/~a/ilm09MaVv317lJlftLeNakFnMdg/0/da"><img src="http://feedads.g.doubleclick.net/~a/ilm09MaVv317lJlftLeNakFnMdg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ilm09MaVv317lJlftLeNakFnMdg/1/da"><img src="http://feedads.g.doubleclick.net/~a/ilm09MaVv317lJlftLeNakFnMdg/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wiredprairie?a=iXAIsBX5Uro:WJJsRlyEO1I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=iXAIsBX5Uro:WJJsRlyEO1I:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=iXAIsBX5Uro:WJJsRlyEO1I:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=iXAIsBX5Uro:WJJsRlyEO1I:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=iXAIsBX5Uro:WJJsRlyEO1I:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=iXAIsBX5Uro:WJJsRlyEO1I:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=iXAIsBX5Uro:WJJsRlyEO1I:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=iXAIsBX5Uro:WJJsRlyEO1I:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=iXAIsBX5Uro:WJJsRlyEO1I:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=iXAIsBX5Uro:WJJsRlyEO1I:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wiredprairie/~4/iXAIsBX5Uro" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.wiredprairie.us/blog/index.php/archives/1607/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wiredprairie.us/blog/index.php/archives/1607</feedburner:origLink></item>
		<item>
		<title>SuperUser.com, and my rise to fame?</title>
		<link>http://feedproxy.google.com/~r/wiredprairie/~3/MqWVo7kd_-Y/1603</link>
		<comments>http://www.wiredprairie.us/blog/index.php/archives/1603#comments</comments>
		<pubDate>Tue, 03 Apr 2012 01:43:54 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Humor]]></category>
		<category><![CDATA[fame]]></category>
		<category><![CDATA[superuser.com]]></category>
		<category><![CDATA[xkcd]]></category>

		<guid isPermaLink="false">http://www.wiredprairie.us/blog/?p=1603</guid>
		<description><![CDATA[Or not really. I joined SuperUser.com last year to ask one question that was unresolved at work. It has been my first and only question. I find it funny that this yet unanswered question has given me a gold badge. I apparently am not the only person who needed help with this issue. Now, if [...]]]></description>
			<content:encoded><![CDATA[<p>Or not really. </p>
<p>I joined SuperUser.com last year to ask <a href="http://superuser.com/questions/116541/what-is-a-valid-trust-anchor-in-windows-7-relating-to-wifi">one question</a> that was unresolved at work. It has been my <strong>first and only</strong> question.</p>
<p><a href="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image10.png"><img style="background-image: none; border-right-width: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image_thumb.png" width="502" height="275" /></a></p>
<p>I find it funny that this yet unanswered question has given me a gold badge. I apparently am not the only person who needed help with this issue. </p>
<p><a href="http://www.xkcd.com/979/"><img style="display: block; float: none; margin-left: auto; margin-right: auto" alt="Wisdom of the Ancients" src="http://imgs.xkcd.com/comics/wisdom_of_the_ancients.png" /></a></p>
<p>Now, if only these badges could be turned into some real coin, or prizes like in an arcade ….</p>

<p><a href="http://feedads.g.doubleclick.net/~a/seAhGbzihVn7ysg8bnkMIololcg/0/da"><img src="http://feedads.g.doubleclick.net/~a/seAhGbzihVn7ysg8bnkMIololcg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/seAhGbzihVn7ysg8bnkMIololcg/1/da"><img src="http://feedads.g.doubleclick.net/~a/seAhGbzihVn7ysg8bnkMIololcg/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wiredprairie?a=MqWVo7kd_-Y:Fac8hsMRFEw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=MqWVo7kd_-Y:Fac8hsMRFEw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=MqWVo7kd_-Y:Fac8hsMRFEw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=MqWVo7kd_-Y:Fac8hsMRFEw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=MqWVo7kd_-Y:Fac8hsMRFEw:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=MqWVo7kd_-Y:Fac8hsMRFEw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=MqWVo7kd_-Y:Fac8hsMRFEw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=MqWVo7kd_-Y:Fac8hsMRFEw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=MqWVo7kd_-Y:Fac8hsMRFEw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=MqWVo7kd_-Y:Fac8hsMRFEw:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wiredprairie/~4/MqWVo7kd_-Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.wiredprairie.us/blog/index.php/archives/1603/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wiredprairie.us/blog/index.php/archives/1603</feedburner:origLink></item>
		<item>
		<title>Paging Data with SQL Server Compact</title>
		<link>http://feedproxy.google.com/~r/wiredprairie/~3/gq7MEDbh4Ik/1597</link>
		<comments>http://www.wiredprairie.us/blog/index.php/archives/1597#comments</comments>
		<pubDate>Sun, 01 Apr 2012 19:05:00 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Dapper]]></category>
		<category><![CDATA[Sql Server Compact Edition]]></category>
		<category><![CDATA[SSCE]]></category>

		<guid isPermaLink="false">http://www.wiredprairie.us/blog/?p=1597</guid>
		<description><![CDATA[If you’re using SQL Server Compact Editition version 4 or higher, there’s finally a decent and efficient way to do data paging: var streets = db.Query&#60;StreetName&#62;(@&#34;SELECT * FROM StreetNames ORDER BY Id OFFSET @offset ROWS FETCH NEXT @rows ROWS ONLY&#34;, new { offset = group * GroupSize, rows = GroupSize }); The code above uses [...]]]></description>
			<content:encoded><![CDATA[<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image9.png" width="402" height="338" /></p>
<p>If you’re using <a href="http://www.microsoft.com/sqlserver/en/us/editions/compact.aspx">SQL Server Compact Editition</a> version 4 or higher, there’s finally a decent and efficient way to do data paging:</p>
<pre class="code"><span style="color: blue">var </span>streets = db.Query&lt;<span style="color: #2b91af">StreetName</span>&gt;(<span style="color: #a31515">@&quot;SELECT * FROM StreetNames
                   ORDER BY Id
                   OFFSET @offset ROWS
                   FETCH NEXT @rows ROWS ONLY&quot;</span>,
                        <span style="color: blue">new </span>{ offset = group * GroupSize,
                            rows = GroupSize });</pre>
<p>The code above uses <a href="http://code.google.com/p/dapper-dot-net/">Dapper-dot-net</a> (with Contrib Extensions) to make the syntax of executing the Query succinct. (Recently, I’ve all but abandoned the Entity Framework in favor of Dapper).</p>
<p>The above code should be straightforward.</p>
<p>Given a table named, <strong>StreetNames</strong> created thusly:</p>
<pre class="code">db.Execute(<span style="color: #a31515">@&quot;CREATE TABLE StreetNames (
            Id int IDENTITY NOT NULL,
            Name nvarchar(24) NOT NULL,
            CONSTRAINT pk_id PRIMARY KEY (Id))&quot;</span>);</pre>
<p>with some sample data inserted into the table:</p>
<pre class="code"><span style="color: blue">foreach </span>(<span style="color: blue">var </span>name <span style="color: blue">in </span>GetStreetNames())
{
    db.Execute(<span style="color: #a31515">&quot;INSERT INTO StreetNames (Name) Values (@Name)&quot;</span>,
        <span style="color: blue">new </span>{ Name = name });
}</pre>
<p>you’ll likely want to grab the data in pages. To get the data as pages, you’ll need to pick an index or something ordered (in this case, I used the Id column), specify the starting index and the total number to fetch:</p>
<pre class="code"><span style="color: #a31515">OFFSET @offset ROWS
FETCH NEXT @rows ROWS ONLY
</span></pre>
<p>So, using the sample database:</p>
<pre class="code"><span style="color: blue">using </span>(<span style="color: blue">var </span>db = <span style="color: blue">new </span><span style="color: #2b91af">SqlCeConnection</span>(connectionString))
{
    db.Open();
    <span style="color: blue">for </span>(<span style="color: blue">var </span>group = 0; ; group++)
    {
        <span style="color: #2b91af">Console</span>.WriteLine(<span style="color: blue">string</span>.Format(<span style="color: #a31515">&quot;== GROUP {0} ==&quot;</span>, group));
        <span style="color: blue">var </span>streets = db.Query&lt;<span style="color: #2b91af">StreetName</span>&gt;(<span style="color: #a31515">@&quot;SELECT * FROM StreetNames
                           ORDER BY Id
                           OFFSET @offset ROWS
                           FETCH NEXT @rows ROWS ONLY&quot;</span>,
                                <span style="color: blue">new </span>{ offset = group * GroupSize,
                                    rows = GroupSize });

        <span style="color: blue">foreach </span>(<span style="color: blue">var </span>street <span style="color: blue">in </span>streets)
        {
            <span style="color: #2b91af">Console</span>.WriteLine(<span style="color: blue">string</span>.Format(<span style="color: #a31515">&quot;{0} ({1})&quot;</span>,
                street.Name, street.Id));
        }
        <span style="color: blue">if </span>(streets.Count() &lt; GroupSize) { <span style="color: blue">break</span>; }
    }
}</pre>
<p>The code loops until it can’t load a full GroupSize.</p>
<pre class="code"><span style="color: blue">const int </span>GroupSize = 8;</pre>
<p>I added an extension method to <a href="http://msdn.microsoft.com/en-us/library/system.data.idbconnection.aspx">IDbConnection</a> to check whether a table exists:</p>
<pre class="code"><span style="color: blue">public static class </span><span style="color: #2b91af">DbExtensions
</span>{
    <span style="color: gray">/// &lt;summary&gt;
    /// </span><span style="color: green">Determines whether the table exists
    </span><span style="color: gray">/// &lt;/summary&gt;
    /// &lt;param name=&quot;connection&quot;&gt;</span><span style="color: green">Existing, opened, database connection</span><span style="color: gray">&lt;/param&gt;
    /// &lt;param name=&quot;tableName&quot;&gt;</span><span style="color: green">The name of the table to test for.</span><span style="color: gray">&lt;/param&gt;
    /// &lt;returns&gt;</span><span style="color: green">True if table exists.</span><span style="color: gray">&lt;/returns&gt;
    </span><span style="color: blue">public static bool </span>TableExists(<span style="color: blue">this </span><span style="color: #2b91af">IDbConnection </span>connection, <span style="color: blue">string </span>tableName)
    {
        <span style="color: #2b91af">Debug</span>.Assert(connection != <span style="color: blue">null</span>);
        <span style="color: #2b91af">Debug</span>.Assert(!<span style="color: blue">string</span>.IsNullOrWhiteSpace(tableName));

        <span style="color: blue">var </span>cmd = connection.CreateCommand();
        cmd.CommandText = <span style="color: #a31515">@&quot;SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
                            WHERE TABLE_NAME=@TableName&quot;</span>;
        <span style="color: blue">var </span>p1 = cmd.CreateParameter();
        p1.DbType = <span style="color: #2b91af">DbType</span>.String;
        p1.ParameterName = <span style="color: #a31515">&quot;TableName&quot;</span>;
        p1.Value = tableName;
        cmd.Parameters.Add(p1);

        <span style="color: blue">var </span>result = cmd.ExecuteScalar();
        <span style="color: blue">return </span>(<span style="color: blue">int</span>)result == 1;
    }
}</pre>
<p>I really like the simple syntax it permits:</p>
<pre class="code"><span style="color: blue">if </span>(!db.TableExists(<span style="color: #a31515">&quot;StreetNames&quot;</span>))</pre>
<p>It’s used like this:</p>
<pre class="code"><span style="color: blue">private static string </span>CreateDatabase()
{
    <span style="color: blue">var </span>connectionString = <span style="color: blue">string</span>.Format(<span style="color: #a31515">&quot;DataSource={0}&quot;</span>, <span style="color: #a31515">&quot;test.sdf&quot;</span>);
    <span style="color: #2b91af">SqlCeEngine </span>engine = <span style="color: blue">new </span><span style="color: #2b91af">SqlCeEngine</span>(connectionString);
    <span style="color: blue">try
    </span>{
        engine.CreateDatabase();
    }
    <span style="color: blue">catch </span>(<span style="color: #2b91af">SqlCeException </span>ex)
    {
        <span style="color: green">// file exists? (if so, we'll just ignore it ...)
        </span><span style="color: blue">if </span>(ex.NativeError != 25114) { <span style="color: blue">throw</span>; }
    }

    <span style="color: blue">using </span>(<span style="color: #2b91af">IDbConnection </span>db = <span style="color: blue">new </span><span style="color: #2b91af">SqlCeConnection</span>(connectionString))
    {
        db.Open();
        <span style="color: green">// create a sample table
        </span><span style="color: blue">if </span>(!db.TableExists(<span style="color: #a31515">&quot;StreetNames&quot;</span>))
        {
            db.Execute(<span style="color: #a31515">@&quot;CREATE TABLE StreetNames (
                        Id int IDENTITY NOT NULL,
                        Name nvarchar(24) NOT NULL,
                        CONSTRAINT pk_id PRIMARY KEY (Id))&quot;</span>);
            <span style="color: blue">foreach </span>(<span style="color: blue">var </span>name <span style="color: blue">in </span>GetStreetNames())
            {
                db.Execute(<span style="color: #a31515">&quot;INSERT INTO StreetNames (Name) Values (@Name)&quot;</span>,
                    <span style="color: blue">new </span>{ Name = name });
            }
        }
    }
    <span style="color: blue">return </span>connectionString;
}</pre>
<p>Oddly, Sql Compact doesn’t throw proper (specific) exceptions, so you’ll be forced to check for NativeErrors or against strings rather than specific Exception types. (Seriously!)</p>
<p>Using the <a href="http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceengine.aspx">SqlCeEngine</a> class, the code attempts to create a new Database file. If it already exists, it throws an exception. All but the file exists exception are rethrown. </p>
<p>Using an open connection and the TableExists extension, it creates a sample table called StreetNames, populated with this data:</p>
<pre class="code"><span style="color: blue">private static </span><span style="color: #2b91af">IEnumerable</span>&lt;<span style="color: blue">string</span>&gt; GetStreetNames()
{
    <span style="color: green">// Most common street names in UK, apparently <img src='http://www.wiredprairie.us/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
    </span><span style="color: blue">yield return </span><span style="color: #a31515">&quot;High Street&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Station Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Main Street&quot;</span>;
    <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Church Street&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Victoria Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Park Road&quot;</span>;
    <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Church Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;London Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Manor Road&quot;</span>;
    <span style="color: blue">yield return </span><span style="color: #a31515">&quot;New Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Park Avenue&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Queens Road&quot;</span>;
    <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Kings Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Church Lane&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Green Lane&quot;</span>;
    <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Alexandra Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;The Crescent&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;George Street&quot;</span>;
    <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Grange Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Main Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;King Street&quot;</span>;
    <span style="color: blue">yield return </span><span style="color: #a31515">&quot;The Avenue&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;New Street&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;North Street&quot;</span>;
    <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Victoria Street&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;West Street&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Queen Street&quot;</span>;
    <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Springfield Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Stanley Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Albert Road&quot;</span>;
    <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Albert Street&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Park Lane&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Chapel Street&quot;</span>;
    <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Highfield Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;The Green&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Mill Lane&quot;</span>;
    <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Broadway&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;St. Johns Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Marlborough Road&quot;</span>;
    <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Windsor Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Forest Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;South Street&quot;</span>;
    <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Warwick Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Grove Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Kingsway&quot;</span>;
    <span style="color: blue">yield return </span><span style="color: #a31515">&quot;York Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Woodlands Road&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Clarence Road&quot;</span>;
    <span style="color: blue">yield return </span><span style="color: #a31515">&quot;School Lane&quot;</span>; <span style="color: blue">yield return </span><span style="color: #a31515">&quot;Cromwell Road&quot;</span>;
}</pre>
<p><em>(I’d wanted to use the top 50 USA street names, but they’re far more boring as they’re like: Fourth Street, Fifth Street, Oak Street. <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/wlEmoticon-smile.png" /> ).</em></p>
<p>There’s a tiny class to represent a StreetName that’s used later by the Dapper extension functions:</p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">StreetName
</span>{
    <span style="color: blue">public int </span>Id { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }
    <span style="color: blue">public string </span>Name { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }
}</pre>
<p>The full main function:</p>
<pre class="code"><span style="color: blue">static void </span>Main(<span style="color: blue">string</span>[] args)
{
    <span style="color: blue">const int </span>GroupSize = 8;

    <span style="color: blue">var </span>connectionString = CreateDatabase();
    <span style="color: blue">using </span>(<span style="color: blue">var </span>db = <span style="color: blue">new </span><span style="color: #2b91af">SqlCeConnection</span>(connectionString))
    {
        db.Open();
        <span style="color: blue">for </span>(<span style="color: blue">var </span>group = 0; ; group++)
        {
            <span style="color: #2b91af">Console</span>.WriteLine(<span style="color: blue">string</span>.Format(<span style="color: #a31515">&quot;== GROUP {0} ==&quot;</span>, group));
            <span style="color: blue">var </span>streets = db.Query&lt;<span style="color: #2b91af">StreetName</span>&gt;(<span style="color: #a31515">@&quot;SELECT * FROM StreetNames
                               ORDER BY Id
                               OFFSET @offset ROWS
                               FETCH NEXT @rows ROWS ONLY&quot;</span>,
                                    <span style="color: blue">new </span>{ offset = group * GroupSize,
                                        rows = GroupSize });

            <span style="color: blue">foreach </span>(<span style="color: blue">var </span>street <span style="color: blue">in </span>streets)
            {
                <span style="color: #2b91af">Console</span>.WriteLine(<span style="color: blue">string</span>.Format(<span style="color: #a31515">&quot;{0} ({1})&quot;</span>,
                    street.Name, street.Id));
            }
            <span style="color: blue">if </span>(streets.Count() &lt; GroupSize) { <span style="color: blue">break</span>; }
        }
    }

    <span style="color: #2b91af">Console</span>.WriteLine(<span style="color: #a31515">&quot;** Done **&quot;</span>);
    <span style="color: #2b91af">Console</span>.ReadKey();
}</pre>
<p>The db.Query&lt;StreetName&gt; function is Dapper provided. Given the type and a Query, it automatically and efficiently constructs/deserializes objects of type StreetName for each row returned from the SQL query.</p>
<p>While the syntax isn’t quite as slick as&#160; “Entity Framework” by any means, the resulting run-time efficiency far makes up for that as far as I’m concerned (and if you care about performance, you might want to re-evaluate your use of the EntityFramework as well).</p>
<p>I took the photo above years ago at the <a href="http://www.museumofflight.org/">Boeing Museum of Flight</a> in Seattle (which inspired me to look for videos). For fun, check out this video of a <strong>model</strong> SR-71 blackbird. It takes off around 2:21.</p>
<div style="padding-bottom: 0px; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:e65c08a5-957f-4a42-85e1-e3ccd0d16913" class="wlWriterEditableSmartContent">
<div><object width="448" height="252"><param name="movie" value="http://www.youtube.com/v/SDbQ5xvsrIU?hl=en&amp;hd=1"></param><embed src="http://www.youtube.com/v/SDbQ5xvsrIU?hl=en&amp;hd=1" type="application/x-shockwave-flash" width="448" height="252"></embed></object></div>
<div style="width:448px;clear:both;font-size:.8em">Model SR-71 Blackbird in flight.</div>
</div>

<p><a href="http://feedads.g.doubleclick.net/~a/zuElyPj9LYxICN8rRFKFgYOAvAw/0/da"><img src="http://feedads.g.doubleclick.net/~a/zuElyPj9LYxICN8rRFKFgYOAvAw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/zuElyPj9LYxICN8rRFKFgYOAvAw/1/da"><img src="http://feedads.g.doubleclick.net/~a/zuElyPj9LYxICN8rRFKFgYOAvAw/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wiredprairie?a=gq7MEDbh4Ik:L6SQfpXFZjc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=gq7MEDbh4Ik:L6SQfpXFZjc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=gq7MEDbh4Ik:L6SQfpXFZjc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=gq7MEDbh4Ik:L6SQfpXFZjc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=gq7MEDbh4Ik:L6SQfpXFZjc:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=gq7MEDbh4Ik:L6SQfpXFZjc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=gq7MEDbh4Ik:L6SQfpXFZjc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=gq7MEDbh4Ik:L6SQfpXFZjc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=gq7MEDbh4Ik:L6SQfpXFZjc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=gq7MEDbh4Ik:L6SQfpXFZjc:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wiredprairie/~4/gq7MEDbh4Ik" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.wiredprairie.us/blog/index.php/archives/1597/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wiredprairie.us/blog/index.php/archives/1597</feedburner:origLink></item>
		<item>
		<title>Get path or location of currently executing batch/command file in Windows</title>
		<link>http://feedproxy.google.com/~r/wiredprairie/~3/09GjMegBt7Y/1592</link>
		<comments>http://www.wiredprairie.us/blog/index.php/archives/1592#comments</comments>
		<pubDate>Sun, 01 Apr 2012 15:22:14 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Batch File]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.wiredprairie.us/blog/?p=1592</guid>
		<description><![CDATA[I didn’t know it was this simple, and am posting this information on my blog so I find it in the future, but hopefully this will help someone else! I’ve created a number of batch files over the years which routinely copy files from one location to another, usually as part of a backup strategy. [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>I didn’t know it was this simple, and am posting this information on my blog so I find it in the future, but hopefully this will help someone else!</p>
</blockquote>
<p>I’ve created a number of batch files over the years which routinely copy files from one location to another, usually as part of a backup strategy. However, I’ve always just hard-coded the paths of the drives, etc. into the batch files. While this works for drives which are permanently attached (or internal), it’s more fragile with external (flash/USB) drives. As I’ve never understood the logic of drive letter selection in Windows (letters usually are the same, but occasionally not), it meant that I was tweaking the drive letter in the batch file before running. Annoying, but it worked.</p>
<p><strong>Thanks to more than a few web sites, I now know there is a much better way!</strong></p>
<p>There are basically two decent options, depending on your scenario and requirements.</p>
<h3>Option 1</h3>
<p>If you are using drive letters (and not a mapped drive\network share), then you can use the variable %CD%.</p>
<p>It contains the “current directory.” So, that actually may be more than you wanted if the current directory isn’t the root of the drive.</p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image.png" width="172" height="102" /></p>
<p>Simple, just chop it off:</p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image1.png" width="200" height="36" /></p>
<p><strong><font style="background-color: #ffff00">%CD:~0,2%</font></strong></p>
<p>The colon and tilde character is a flag which indicates that a substring should be returned rather than the entire string. The first value is the zero-based starting index and the second is the number of characters you want to return:</p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image2.png" width="195" height="29" /></p>
<p>The above starts at character 4, and includes 3 characters.</p>
<p>For fun, you can use negative values:</p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image3.png" width="192" height="28" /></p>
<p>With only a single negative parameter, it returns the number of characters requested starting with the rightmost character.&#160; (Check <a href="http://www.dostips.com/DtTipsStringManipulation.php">here</a> for a bunch of examples on string manipulation.)</p>
<p>So, you could use knowledge in a batch file:</p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image4.png" width="425" height="23" /></p>
<p>The above line uses <strong><a href="http://technet.microsoft.com/en-us/library/cc733145(v=ws.10).aspx">robocopy</a></strong> (available in modern versions of Windows without an extra install) to copy from the folder \\server\Backups to the current path appended with \server\backups. So, if the batch file containing the <strong>robocopy</strong> command was executing on the J: drive, the resulting <strong>robocopy</strong> command would be:</p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image5.png" width="368" height="21" /></p>
<p>By using the :~0,2 syntax, regardless of the folder the batch file is located in, it always copies to the root of the J drive (as the first two characters are J and : ).</p>
<h3>Option 2</h3>
<p>The other option is a bit different as it only works in a batch or command file. </p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image6.png" width="129" height="47" /></p>
<p>Parameter zero (%0) in batch file represents the full path of the currently executing file (path and filename). The (dp) modifiers expand the value to be the “drive” and the “path,” excluding the file name. </p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image7.png" width="262" height="37" /></p>
<p>You can manipulate the value as well:</p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.wiredprairie.us/blog/wp-content/uploads/2012/04/image8.png" width="354" height="118" /></p>
<p>I’m immediately going to adopt the first option into all of my “robocopy” batch files.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/p6ua2UEaQPiCUCvH9dBr-eSNYgU/0/da"><img src="http://feedads.g.doubleclick.net/~a/p6ua2UEaQPiCUCvH9dBr-eSNYgU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/p6ua2UEaQPiCUCvH9dBr-eSNYgU/1/da"><img src="http://feedads.g.doubleclick.net/~a/p6ua2UEaQPiCUCvH9dBr-eSNYgU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/wiredprairie?a=09GjMegBt7Y:7GoVaJHlGoM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=09GjMegBt7Y:7GoVaJHlGoM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=09GjMegBt7Y:7GoVaJHlGoM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=09GjMegBt7Y:7GoVaJHlGoM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=09GjMegBt7Y:7GoVaJHlGoM:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=09GjMegBt7Y:7GoVaJHlGoM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=09GjMegBt7Y:7GoVaJHlGoM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=09GjMegBt7Y:7GoVaJHlGoM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/wiredprairie?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/wiredprairie?a=09GjMegBt7Y:7GoVaJHlGoM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/wiredprairie?i=09GjMegBt7Y:7GoVaJHlGoM:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/wiredprairie/~4/09GjMegBt7Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.wiredprairie.us/blog/index.php/archives/1592/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wiredprairie.us/blog/index.php/archives/1592</feedburner:origLink></item>
	</channel>
</rss>

