<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkYGQXw-fCp7ImA9WhRUF0w.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011</id><updated>2012-01-27T16:22:00.254-08:00</updated><category term="Unity" /><category term="NUnit" /><category term="XUnit" /><category term="TimeAction Action Debug Timing StopWatch Lambda Lambdas" /><category term="UnitDriven" /><category term="MSTest" /><category term="i4o" /><category term="NuGet" /><category term="Silverlight" /><category term="StatLight" /><category term="Testing" /><title>Developing on Staxmanade</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://staxmanade.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>85</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/DevelopingOnStaxmande" /><feedburner:info uri="developingonstaxmande" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CkYGQXw-cCp7ImA9WhRUF0w.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-4127842694814885839</id><published>2012-01-27T16:22:00.000-08:00</published><updated>2012-01-27T16:22:00.258-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-27T16:22:00.258-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NuGet" /><title>NuGet Project Uncovered: Stimpack</title><content type="html">&lt;blockquote&gt;   &lt;p&gt;If you are coming to this series of posts for the first time you might check out &lt;a href="http://elegantcode.com/2012/01/22/nuget-project-uncovered-an-introduction-to-the-series/" target="_blank"&gt;my introductory post&lt;/a&gt; for a little context.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://nuget.org/packages/Stimpack" target="_blank"&gt;Stimpack&lt;/a&gt; is another project leveraging &lt;a href="http://msdn.microsoft.com/en-us/data/gg577609" target="_blank"&gt;ReactiveExtensions (RX)&lt;/a&gt;. It’s based off of &lt;a href="http://www.reactiveui.net/" target="_blank"&gt;ReactiveUI&lt;/a&gt; and has some interesting concepts for consideration with a &lt;a href="http://en.wikipedia.org/wiki/Model_View_ViewModel" target="_blank"&gt;MVVM&lt;/a&gt; pattern. &lt;/p&gt;  &lt;p&gt;This was probably originally added to my To-Research list mostly because of the RX factor.&lt;/p&gt;  &lt;p&gt;I didn’t find an good sample project on how to use it, but if you read through the &lt;a href="https://github.com/shishkin/Stimpack/tree/master/Stimpack.Tests" target="_blank"&gt;fairly clean test project&lt;/a&gt; you can probably figure out anything you need.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-4127842694814885839?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/G60DGZI-lDi9IyhzG6IaJzSJbNw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G60DGZI-lDi9IyhzG6IaJzSJbNw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/G60DGZI-lDi9IyhzG6IaJzSJbNw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G60DGZI-lDi9IyhzG6IaJzSJbNw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/vf0WD0Q30yQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/4127842694814885839/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=4127842694814885839" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/4127842694814885839?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/4127842694814885839?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/vf0WD0Q30yQ/nuget-project-uncovered-stimpack.html" title="NuGet Project Uncovered: Stimpack" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2012/01/nuget-project-uncovered-stimpack.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUECQX8-eSp7ImA9WhRUFk8.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-3470133751691019093</id><published>2012-01-26T16:21:00.000-08:00</published><updated>2012-01-26T16:21:00.151-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-26T16:21:00.151-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NuGet" /><title>NuGet Project Uncovered: Anna</title><content type="html">&lt;blockquote&gt;   &lt;p&gt;If you are coming to this series of posts for the first time you might check out &lt;a href="http://elegantcode.com/2012/01/22/nuget-project-uncovered-an-introduction-to-the-series/" target="_blank"&gt;my introductory post&lt;/a&gt; for a little context.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="https://github.com/jfromaniello/Anna" target="_blank"&gt;Anna&lt;/a&gt; is an event-driven HTTP server library leveraging the &lt;a href="http://msdn.microsoft.com/en-us/data/gg577609" target="_blank"&gt;ReactiveExtensions (RX)&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;The below sample copied / shortened from the &lt;a href="https://github.com/jfromaniello/Anna" target="_blank"&gt;GitHub site&lt;/a&gt;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre&gt;using (var server = new HttpServer(&amp;quot;http://*:1234/&amp;quot;))&lt;br /&gt;{&lt;br /&gt;    // simple basic usage, all subscriptions will run in a single event-loop&lt;br /&gt;    server.GET(&amp;quot;/hello/{Name}&amp;quot;)&lt;br /&gt;          .Subscribe(ctx =&amp;gt; ctx.Respond(&amp;quot;Hello, &amp;quot; + ctx.Request.UriArguments.Name + &amp;quot;!&amp;quot;));&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-3470133751691019093?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZKBAbnqRz9tBqtjPYezJtI9wzZU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZKBAbnqRz9tBqtjPYezJtI9wzZU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZKBAbnqRz9tBqtjPYezJtI9wzZU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZKBAbnqRz9tBqtjPYezJtI9wzZU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/QNATGeJQBuA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/3470133751691019093/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=3470133751691019093" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/3470133751691019093?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/3470133751691019093?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/QNATGeJQBuA/nuget-project-uncovered-anna.html" title="NuGet Project Uncovered: Anna" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2012/01/nuget-project-uncovered-anna.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUEQXoyfCp7ImA9WhRUFU4.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-360325053575807148</id><published>2012-01-25T16:20:00.000-08:00</published><updated>2012-01-25T16:20:00.494-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-25T16:20:00.494-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NuGet" /><title>NuGet Project Uncovered: NFeature</title><content type="html">&lt;blockquote&gt;   &lt;p&gt;If you are coming to this series of posts for the first time you might check out &lt;a href="http://elegantcode.com/2012/01/22/nuget-project-uncovered-an-introduction-to-the-series/" target="_blank"&gt;my introductory post&lt;/a&gt; for a little context.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://nuget.org/packages/NFeature" target="_blank"&gt;NFeature&lt;/a&gt; looks to be a pretty solid &lt;a href="http://martinfowler.com/bliki/FeatureToggle.html" target="_blank"&gt;feature toggle&lt;/a&gt; implementation written in .Net C#.&lt;/p&gt;  &lt;p&gt;This project peaked my interest because I’ve wanted to try the concept of &lt;a href="http://martinfowler.com/bliki/FeatureToggle.html" target="_blank"&gt;feature toggles&lt;/a&gt; in a project for a while now. With all the hubub last year about &lt;a href="http://lmgtfy.com/?q=feature+toggle+vs+feature+branches" target="_blank"&gt;feature toggles vs feature branches&lt;/a&gt;. I’ve wanted to experience feature toggles first hand.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-360325053575807148?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sK_gyUlgT8yBJnfM0MgmjHVawJA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sK_gyUlgT8yBJnfM0MgmjHVawJA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sK_gyUlgT8yBJnfM0MgmjHVawJA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sK_gyUlgT8yBJnfM0MgmjHVawJA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/XG5DHKgmpsg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/360325053575807148/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=360325053575807148" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/360325053575807148?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/360325053575807148?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/XG5DHKgmpsg/nuget-project-uncovered-nfeature.html" title="NuGet Project Uncovered: NFeature" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2012/01/nuget-project-uncovered-nfeature.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8FRHs4cSp7ImA9WhRUFUg.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-6279243420854529561</id><published>2012-01-24T16:19:00.000-08:00</published><updated>2012-01-25T20:06:55.539-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-25T20:06:55.539-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NuGet" /><title>NuGet Project Uncovered: xizzle</title><content type="html">&lt;blockquote&gt;   &lt;p&gt;If you are coming to this series of posts for the first time you might check out &lt;a href="http://elegantcode.com/2012/01/22/nuget-project-uncovered-an-introduction-to-the-series/" target="_blank"&gt;my introductory post&lt;/a&gt; for a little context.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://nuget.org/packages/xizzle" target="_blank"&gt;xizzle&lt;/a&gt; is a project that attempts to give you CSS-Like selector capability over arbitrary xml. This project first piqued my interest because I hoped it would be a light weight alternative to &lt;a href="http://code.google.com/p/fizzler/" target="_blank"&gt;fizzler&lt;/a&gt; (Somebody should put fizzler on the NuGet feed. 1.2.3 not it). Unfortunately it isn’t quite there. Maybe someday xizzle will be strong enough to compete with fizzler but at the moment it doesn’t support nearly the amount of selector syntax that fizzler does and once I started playing with it I was mildly disappointed in its selector capabilities. Was probably written to get a certain class selector options accomplished and the writer just didn’t need all that much support yet. But I think there’s some real potential for a project like this to push forward. Lightweight, all included easy syntax.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-6279243420854529561?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HVGA5wWO7kEZlXQHpxjU8IfXusk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HVGA5wWO7kEZlXQHpxjU8IfXusk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HVGA5wWO7kEZlXQHpxjU8IfXusk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HVGA5wWO7kEZlXQHpxjU8IfXusk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/au4E9qsFJCw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/6279243420854529561/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=6279243420854529561" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/6279243420854529561?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/6279243420854529561?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/au4E9qsFJCw/nuget-project-uncovered-xizzle.html" title="NuGet Project Uncovered: xizzle" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2012/01/nuget-project-uncovered-xizzle.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUGQX8_fCp7ImA9WhRUE0s.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-9161432705130551056</id><published>2012-01-23T16:17:00.000-08:00</published><updated>2012-01-23T16:17:00.144-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-23T16:17:00.144-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NuGet" /><title>NuGet Project Uncovered: PineCone</title><content type="html">&lt;blockquote&gt;   &lt;p&gt;If you are coming to this series of posts for the first time you might check out &lt;a href="http://elegantcode.com/2012/01/22/nuget-project-uncovered-an-introduction-to-the-series/" target="_blank"&gt;my introductory post&lt;/a&gt; for a little context.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I found a description from a &lt;a href="http://daniel.wertheim.se/2011/05/18/pinecone-project/" target="_blank"&gt;blog post&lt;/a&gt; for this project:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;PineCone lets you take a C# class and then builds a schema for this class. This schema contains cached members that via &lt;em&gt;IL Emit&lt;/em&gt; extracts all simple values from the object graph. All values are turned into a &lt;em&gt;StructureIndex&lt;/em&gt;, which is contained by a &lt;em&gt;Structure&lt;/em&gt;. Each StructureIndex holds a Guid pointing back to the structure so that you easily can navigate to the structure again.       &lt;br /&gt;&lt;a href="http://danielwertheim.files.wordpress.com/2011/05/pinecone.png"&gt;&lt;img title="PineCone" alt="" src="http://danielwertheim.files.wordpress.com/2011/05/pinecone.png?w=300&amp;amp;h=225" width="300" height="225" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It’s described as a component used in &lt;a href="http://sisodb.com/"&gt;http://sisodb.com/&lt;/a&gt; (which itself looked interesting) and he may use it on other projects.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-9161432705130551056?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XmY2I-HD_h2OyTpB_DS4Ns_9BAY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XmY2I-HD_h2OyTpB_DS4Ns_9BAY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XmY2I-HD_h2OyTpB_DS4Ns_9BAY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XmY2I-HD_h2OyTpB_DS4Ns_9BAY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/oQWiamjuBKQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/9161432705130551056/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=9161432705130551056" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/9161432705130551056?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/9161432705130551056?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/oQWiamjuBKQ/nuget-project-uncovered-pinecone.html" title="NuGet Project Uncovered: PineCone" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2012/01/nuget-project-uncovered-pinecone.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYMQ3c7fip7ImA9WhRUFUQ.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-4489660499740853212</id><published>2012-01-22T16:11:00.001-08:00</published><updated>2012-01-26T08:09:42.906-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-26T08:09:42.906-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NuGet" /><title>NuGet Project Uncovered: An Introduction to the Series</title><content type="html">&lt;p&gt;A while back I posted about &lt;a href="http://elegantcode.com/2011/09/27/whats-happening-on-the-nuget-feed-leveraging-odata-in-an-rss-reader/" target="_blank"&gt;following the NuGet feed via an RSS reader&lt;/a&gt;. For some strange reason I’ve been reviewing this feed since then on an almost daily basis in my RSS reader. Throughout that time I’ve kept a small list of what I think are interesting projects that have put out a release since that time. Today we’re going to start a journey through projects that I’ve found during my review of the feed. Some projects are interesting because I could find a use for them, some are interesting because they are unique, and others solve an interesting problem.&lt;/p&gt;  &lt;h4&gt;Why were these packages chosen to post about over others?&lt;/h4&gt;  &lt;p&gt;There wasn’t any scientific process in place to decide what projects made this list or not but as I think back over my time reviewing the feed, below are some items that came to mind.&lt;/p&gt;  &lt;h5&gt;Some reasons I may have chosen a project:&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;I could &lt;strong&gt;potentially&lt;/strong&gt; see myself investigating its usage someday. &lt;/li&gt;    &lt;li&gt;It solved a problem in an interesting way. &lt;/li&gt;    &lt;li&gt;Preferred small, focused, unique packages. &lt;/li&gt;    &lt;li&gt;Preferred projects that were Open Source as in FREE.      &lt;ul&gt;       &lt;li&gt;Although I didn’t bother to look at any of the licenses so be sure to read into those before you use any yourself. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Preferred projects that have a “&lt;strong&gt;Project Site&lt;/strong&gt;” where I could browse the source code see examples or even documentation.     &lt;br /&gt;&lt;a href="http://lh5.ggpht.com/-xn_JwxZNUGU/TxylshXCQUI/AAAAAAAAATA/cECY7x7WnzI/s1600-h/image%25255B30%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-sXoFslcjE_c/Txyls-rcxuI/AAAAAAAAATI/X6ZPfYNGt_k/image_thumb%25255B15%25255D.png?imgmax=800" width="138" height="98" /&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;For some reason if I saw it was hosted on GitHub I preferred those to sites that had their own dedicated location (Can’t explain why – just did…) &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Some reasons I may have NOT have chosen a project:&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;Tended to avoid projects that posted large numbers of packages even though many of them are still very good projects.    &lt;br /&gt;EX:       &lt;ul&gt;       &lt;li&gt;NServiceBus &lt;/li&gt;        &lt;li&gt;FubuMvc &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;For some reason I tended to stay away from anything MVC related. There are probably very interesting projects for MVC on there, but I probably avoided them because I’m not doing anything MVC related at the moment. &lt;/li&gt;    &lt;li&gt;Avoided packages that had “utilities” or “common” or “helpers” in the package name.      &lt;ul&gt;       &lt;li&gt;But it might still be worthwhile checking out some of those open source “utility” projects. Just to get an idea of what others consider “needed on every project” and different approaches to the problems. &lt;/li&gt;     &lt;/ul&gt; &lt;!--EndFragment--&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Some items to consider with these little NuGet gems.&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Make sure you read and understand any license the project has before including or using them in your own work. &lt;/li&gt;    &lt;li&gt;These posts won’t be full project analysis, but a generally a first impression.&lt;/li&gt;    &lt;li&gt;Be sure to research any project before using. I’m only mentioning them because they piqued my interest. Not because I have extensive knowledge of the projects or know their stability.&lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-4489660499740853212?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wNzY_HovXZ4t-oLxWHzE4TgvdRk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wNzY_HovXZ4t-oLxWHzE4TgvdRk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wNzY_HovXZ4t-oLxWHzE4TgvdRk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wNzY_HovXZ4t-oLxWHzE4TgvdRk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/VYFCrjXILq4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/4489660499740853212/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=4489660499740853212" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/4489660499740853212?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/4489660499740853212?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/VYFCrjXILq4/nuget-project-uncovered-introduction-to.html" title="NuGet Project Uncovered: An Introduction to the Series" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-sXoFslcjE_c/Txyls-rcxuI/AAAAAAAAATI/X6ZPfYNGt_k/s72-c/image_thumb%25255B15%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2012/01/nuget-project-uncovered-introduction-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04MRHY_cCp7ImA9WhRWGUw.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-9008201695237168939</id><published>2012-01-06T21:59:00.001-08:00</published><updated>2012-01-06T21:59:45.848-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-06T21:59:45.848-08:00</app:edited><title>You are responsible for making that feature work. Write a test. Just do it…</title><content type="html">&lt;p&gt;Today the &lt;a href="http://en.wikipedia.org/wiki/Project_manager"&gt;PM&lt;/a&gt; of a project I am working on sent an email with a small list of issues that we needed to get resolved before shipping an early build to the customer for a weekly review. In his list of issues MY NAME was tagged next to a feature that I KNOW was working. I dev’d it, tested, saw it work.&lt;/p&gt;  &lt;p&gt;Now the project I’m working on encourages unit tested code, which is a fantastic project to be on since I am a big proponent of Unit/Integration/Automated tests. Heck I wrote a tool to help run them easier (&lt;a href="http://statlight.codeplex.com/"&gt;StatLight&lt;/a&gt;).&lt;/p&gt;  &lt;h4&gt;What I did.&lt;/h4&gt;  &lt;p&gt;The problem was this. I dev’d a feature out in like 5 minutes, took about 2 seconds to decide if I should write a unit test to prove my feature worked and &lt;b&gt;this&lt;/b&gt;&lt;b&gt;&lt;i&gt; &lt;/i&gt;&lt;/b&gt;&lt;b&gt;is where I failed&lt;/b&gt;. Manually verified my change checked in the production code without its test and I was hurriedly moved on to the next task.&lt;/p&gt;  &lt;p&gt;About 20 min later I get a quick &lt;a href="http://en.wikipedia.org/wiki/Instant_messaging"&gt;I.M.&lt;/a&gt; from a co-worker saying he had a small merge conflict in the file I just checked-in. Quickly told him how to get around his merge issue (not realizing after he checked in) that my “quick 5min dev task” was accidently removed in the merge.&lt;/p&gt;  &lt;h4&gt;What I SHOULD have done!&lt;/h4&gt;  &lt;p&gt;What I&lt;b&gt; should &lt;/b&gt;have done was write the &lt;strong&gt;2 lines of test code first&lt;/strong&gt;. &lt;i&gt;(you can argue test after/test first, I prefer test-first)&lt;/i&gt;. Proven my code wasn’t working, by running the test, and then implement the 5 min feature making the test pass. Then when my co-worker ran into his merge issue.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://boldandfab.files.wordpress.com/2010/11/pow.jpg" width="179" height="126" /&gt;&lt;/p&gt;  &lt;p&gt;Test would have failed telling him his merge didn’t go as planned.&lt;/p&gt;  &lt;h4&gt;This would have also avoided&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;PM wouldn’t have had to discover the issue, Screenshot and write up an email. &lt;/li&gt;    &lt;li&gt;I wouldn’t have had to peruse source control history to understand why my “working” feature wasn’t working. &lt;/li&gt;    &lt;li&gt;I wouldn’t have had to willingly confess my sins in this post.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If your feature doesn’t have a coinciding automated test. How do you know it’s still working?&lt;/p&gt;  &lt;p&gt;Happy Testing!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-9008201695237168939?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NfKWmSwN1NCDo9NFTVykUT1elMM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NfKWmSwN1NCDo9NFTVykUT1elMM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NfKWmSwN1NCDo9NFTVykUT1elMM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NfKWmSwN1NCDo9NFTVykUT1elMM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/m5kVcO_ynOM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/9008201695237168939/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=9008201695237168939" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/9008201695237168939?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/9008201695237168939?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/m5kVcO_ynOM/you-are-responsible-for-making-that.html" title="You are responsible for making that feature work. Write a test. Just do it…" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2012/01/you-are-responsible-for-making-that.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cFSHozeCp7ImA9WhRWE0g.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-5932351276959164932</id><published>2011-12-31T11:16:00.001-08:00</published><updated>2011-12-31T11:16:59.480-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-31T11:16:59.480-08:00</app:edited><title>StatLight v1.6 is Out</title><content type="html">&lt;h4&gt;&lt;a href="http://statlight.codeplex.com/releases/view/73869" target="_blank"&gt;Get The Build&lt;/a&gt;&lt;/h4&gt;  &lt;h4&gt;What is StatLight?&lt;/h4&gt;  &lt;p&gt;&lt;img src="http://download.codeplex.com/Download?ProjectName=statlight&amp;amp;DownloadId=95275&amp;amp;Build=18337" width="216" height="81" /&gt;&lt;/p&gt;  &lt;p&gt;In short, it allows you to run your Silverlight tests on a Continuous Integration server or alongside your daily development.&lt;/p&gt;  &lt;p&gt;Fore more information go check out the project site &lt;a href="http://statlight.codeplex.com"&gt;http://statlight.codeplex.com&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Some ramblings (about the project).&lt;/h4&gt;  &lt;p&gt;It’s funny how the release cycle of this open source project has turned out. I don’t have any sort of calendar reminder that pops up saying “it’s been 4 or 5 months and time to get out a new release”. However, since I first open sourced the project I’ve put out a new release on a pretty consistent 4/5 month cycle and have done so since December 2009. It just so happens about every 4/5 months there is enough features and or fixes piled on top that It’s time to put out an “official” build. Not bad for a part time (free to the community) gig.&lt;/p&gt;  &lt;p&gt;Thanks to the guys at &lt;a href="http://codebetter.com/" target="_blank"&gt;CodeBetter&lt;/a&gt; and &lt;a href="http://www.jetbrains.com/" target="_blank"&gt;JetBrains&lt;/a&gt; for giving us a &lt;a href="http://teamcity.codebetter.com" target="_blank"&gt;TeamCity&lt;/a&gt; build server, I put a build of StatLight up on their TeamCity server. This has been great for myself. When issues or feature request come in, all I have to do is dev them out, push the code out to GitHub and the &lt;a href="http://teamcity.codebetter.com" target="_blank"&gt;TeamCity&lt;/a&gt; build produces an artifact that people can pull down and use/test right away.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What’s the difference between a TeamCity build and an “official” release of StatLight? &lt;/strong&gt;To be honest, NOTHING. When I decide it’s time to release an “official” build, I head over to the TeamCity, download the latest build and throw it up on CodePlex and NuGet and call it the “official” release. I guess the biggest difference is this means I now have to go update the documentation out on the CodePlex site. I’m not particular happy with this process and hoping my new pet project using &lt;a href="http://sphinx.pocoo.org/"&gt;http://sphinx.pocoo.org/&lt;/a&gt; to generate a CHM documentation file will help with future versioning of the tool. I’m working on a new blog post for how I got this working…&lt;/p&gt;  &lt;h4&gt;Some more ramblings (about this release)&lt;/h4&gt;  &lt;p&gt;This build comes with some pretty major internal refactorings. Finally, after 3 years, I’ve put in an IOC container (really liking &lt;a href="https://github.com/grumpydev/TinyIoC" target="_blank"&gt;TinyIOC&lt;/a&gt; for this task). This cleaned up quite a bit of the codebase. Introduced a couple regressions, bug the community was great in helping me figure this out and I’ve beefed up my test coverage to avoid this in the future. There is more cleanup to do in the codebase, but much of the hard work was done and it’ll be small refactorings as I see them going forward.&lt;/p&gt;  &lt;h4&gt;Some of this build’s highlights:&lt;/h4&gt;  &lt;p&gt;I’d highly recommend reading the release notes on the download page to get a full list of features/fixes. &lt;a href="http://statlight.codeplex.com/releases/view/73869"&gt;http://statlight.codeplex.com/releases/view/73869&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Support for &lt;a href="http://www.silverlight.net/learn/overview/what's-new-in-silverlight-5" target="_blank"&gt;Silverlight 5&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Overhauled the “Continuous” mode. (Provide better U.I. and support for multiple xaps/dlls)      &lt;ul&gt;       &lt;li&gt;Note: I was getting a bug report that it could occasionally run a xap multiple times. Hopefully it’s fixed now, but if you see it and can reproduce it. &lt;a href="http://statlight.codeplex.com/discussions" target="_blank"&gt;Let&amp;#160; me know&lt;/a&gt;. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;MSTest TRX output format. (Note: This was requested heavily, but when it was added I didn’t receive much feedback on whether it was working or not… So if you have issues, first start a &lt;a href="http://statlight.codeplex.com/discussions" target="_blank"&gt;Discussion&lt;/a&gt; or file an&amp;#160; &lt;a href="http://statlight.codeplex.com/workitem/list/basic" target="_blank"&gt;Issue&lt;/a&gt;) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Special thanks to &lt;a href="https://github.com/brumfb" target="_blank"&gt;Bob Brumfield&lt;/a&gt; for fixing a number of pathing issues after a directory re-structuring I made in the project. With his fixes we were able to get Silverlight 5 support into the project sooner than later.&lt;/p&gt;  &lt;h4&gt;Sort-of known issue with this build.&lt;/h4&gt;  &lt;p&gt;Due to the large scale refactoring that happened within StatLight I wouldn’t be surprised if a few regressions were introduced. Hopefully not as I’ve setup a large amount of automated tests around the project. But It’s hard to get everything.&lt;/p&gt;  &lt;p&gt;I’ve had a few people report an issue with symptoms similar to the following.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://statlight.codeplex.com/discussions/284494"&gt;http://statlight.codeplex.com/discussions/284494&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://statlight.codeplex.com/workitem/14579"&gt;http://statlight.codeplex.com/workitem/14579&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you experience any sort of “&lt;strong&gt;Invalid or malformed application: check manifest&lt;/strong&gt;” error. This is probably due to a StatLight web server side exception not being reported out correctly. Try downloading the latest from the TeamCity build (follow the link on the &lt;a href="http://statlight.codeplex.com/" target="_blank"&gt;StatLight&lt;/a&gt; home page).&lt;/p&gt;  &lt;h4&gt;What’s to come?&lt;/h4&gt;  &lt;p&gt;If you feel brave, and &lt;a href="https://github.com/staxmanade/StatLight" target="_blank"&gt;clone the current codebase&lt;/a&gt; you could get some early access to a version I have working with the &lt;strong&gt;Windows Phone Emulator&lt;/strong&gt;. This was actually an early branch of the project I created many moons ago, and one that a user forked and added a couple fixes to a while back. I’ve since merged this into the main-line of StatLight.&lt;/p&gt;  &lt;p&gt;This early version doesn’t yet support the full gamut of what StatLight’s Silverlight version supports, but I’m hoping to get it in there. It should work with the recent builds of the Microsoft.Silverlight.Testing that work on the phone. If you’re interested in helping out here, the big reason I don’t support most everything on the phone is related to the big &lt;a href="https://github.com/staxmanade/StatLight/blob/master/default.ps1" target="_blank"&gt;ol monster build script&lt;/a&gt; in StatLight. I have to add some magic dust to this script and make dual compile other projects for both Silverlight and the phone. The codebase itself shouldn’t have to change much, but the build scripts and integration tests will require the majority of the effort.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-5932351276959164932?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qWE2o0BKZEeNFCZdcrdcTJN-lx4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qWE2o0BKZEeNFCZdcrdcTJN-lx4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qWE2o0BKZEeNFCZdcrdcTJN-lx4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qWE2o0BKZEeNFCZdcrdcTJN-lx4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/N2F63RwqDhk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/5932351276959164932/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=5932351276959164932" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/5932351276959164932?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/5932351276959164932?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/N2F63RwqDhk/statlight-v16-is-out.html" title="StatLight v1.6 is Out" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2011/12/statlight-v16-is-out.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4ESXs5eyp7ImA9WhdaE00.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-8939486414390776853</id><published>2011-10-22T11:41:00.001-07:00</published><updated>2011-10-22T11:41:48.523-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-22T11:41:48.523-07:00</app:edited><title>Excited to Announce My New Career Opportunity</title><content type="html">&lt;p&gt;I have lots of bittersweet and mushy things to say about my previous employer of 5 years, however I’ll spare you from all that.&lt;/p&gt;  &lt;p&gt;Last Monday (10/17/2011) I started my first official day with&lt;/p&gt;  &lt;p&gt;&lt;a href="http://vertigo.com" target="_blank"&gt;&lt;img src="http://vertigo.com/images/logo/7BAF4C_OV_Home.png" /&gt;&lt;/a&gt; (That’s &lt;a href="http://vertigo.com/" target="_blank"&gt;Vertigo&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;I’m really looking forward to working with the many great people at &lt;a href="http://vertigo.com/" target="_blank"&gt;Vertigo&lt;/a&gt; and all the interesting projects that will come my way.&lt;/p&gt;  &lt;p&gt;With regards to this blog and my other OSS contributions, I don’t have any plans to change anything. I’m looking forward to possibly blogging about some different and interesting topics, but we’ll have to see.&lt;/p&gt;  &lt;p&gt;Happy Coding!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-8939486414390776853?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iU1LdbhISEW7d55p8LxYHE4R-zM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iU1LdbhISEW7d55p8LxYHE4R-zM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iU1LdbhISEW7d55p8LxYHE4R-zM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iU1LdbhISEW7d55p8LxYHE4R-zM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/cH3uqvZNtAY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/8939486414390776853/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=8939486414390776853" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/8939486414390776853?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/8939486414390776853?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/cH3uqvZNtAY/excited-to-announce-my-new-career.html" title="Excited to Announce My New Career Opportunity" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2011/10/excited-to-announce-my-new-career.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04GQ3wyfSp7ImA9WhdUGU0.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-8623273575055020492</id><published>2011-10-05T15:39:00.001-07:00</published><updated>2011-10-06T05:58:42.295-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-06T05:58:42.295-07:00</app:edited><title>Chocolatey - The free and open source windows app store.</title><content type="html">&lt;p&gt;If you haven’t heard of it, you’re about to be delighted. Every developer (at least those on Windows) should know about this project, if for nothing more than to make life setting up your dev machine a piece of cake.&lt;/p&gt;  &lt;h4&gt;What is Chocolatey?&lt;/h4&gt;  &lt;p&gt;Straight from the &lt;a href="http://chocolatey.org"&gt;Chocolatey.org&lt;/a&gt; site:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Chocolatey NuGet is a Machine Package Manager, somewhat like apt-get, but built with windows in mind.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If you’ve not ever used a linux machine or understand what the power of an “apt-get” like tool is, well It’s basically the simplest possible way to install an application to your machine. &lt;/p&gt;  &lt;p&gt;What could be simpler than finding the app’s website, download the app, and next, next, next through the the installer? How about just typing “chocolaty install notepadplusplus” at a powershell command prompt? That simple little command will download and install Notepad++ right on your machine with virtually no need to interact with the installer. AWESOME!!!&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Disclaimer!&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;I know there are other installer applications out there that aggregate and install different&amp;#160; programs; however, to be honest, I don’t use any of them. I am also going to assume that most of them aren’t catered to the windows developer (maybe I’m wrong). Either way I like this project and I’m just trying to share it with the community. &lt;strong&gt;So There…&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Ok, my above salesmanship is a little loud mouthy, but maybe your interest is peaked enough to give it a try.&lt;/p&gt;  &lt;h4&gt;How do I install Chocolatey?&lt;/h4&gt;  &lt;p&gt;It’s about as simple to install Chocolatey as it is to use Chocolatey to install other applications. One single powershell command. Just paste the below command in your powershell prompt and let er rip.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;First, make sure you have your powershell environment set to “Unrestricted”.&lt;a href="http://lh6.ggpht.com/-4sSRlJeweTI/TozckReE5MI/AAAAAAAAASA/JG0ULKiPil0/s1600-h/image8.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-Vviqle2o908/TozclWiZ6TI/AAAAAAAAASE/1-_0QwA6KAs/image_thumb4.png?imgmax=800" width="644" height="235" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Run the Chocolatey install.&lt;/p&gt;  &lt;pre&gt;  iex ((new-object net.webclient).DownloadString(&amp;quot;http://bit.ly/psChocInstall&amp;quot;))&lt;/pre&gt;&lt;br /&gt;  &lt;h4&gt;Packages!&lt;/h4&gt;  &lt;p&gt;Now that you have chocolatey installed, head over to the &lt;a href="http://Chocolatey.org"&gt;Chocolatey.org&lt;/a&gt; website and browse the packages you can now install.&lt;/p&gt;  &lt;p&gt;EX:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font style="background-color: #ffffff"&gt;C:\Code&amp;gt;&lt;strong&gt;chocolatey install notepadplusplus&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;How can I know when new packages are added to the Chocolatey.org feed?&lt;/h4&gt;  &lt;p&gt;You can get more background on this approach by following my previous post &lt;a href="http://elegantcode.com/2011/09/27/whats-happening-on-the-nuget-feed-leveraging-odata-in-an-rss-reader/" target="_blank"&gt;What’s happening on the NuGet feed (leveraging OData in an RSS reader)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The direct RSS link I have is as follows:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://chocolatey.org/api/feeds/Packages()?$filter=Id%20ne%20'SymbolSource.TestPackage'&amp;amp;$orderby=Published%20desc"&gt;http://chocolatey.org/api/feeds/Packages()?$filter=Id%20ne%20'SymbolSource.TestPackage'&amp;amp;$orderby=Published%20desc&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Plug that into your RSS reader and you should be notified when new packages are added to the Chocolatey.org feed.&lt;/p&gt;  &lt;p&gt;Happy Setting up your Dev Machine!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-8623273575055020492?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gyBw2Nfaqao5hEV_BuYV-8YjGvI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gyBw2Nfaqao5hEV_BuYV-8YjGvI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gyBw2Nfaqao5hEV_BuYV-8YjGvI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gyBw2Nfaqao5hEV_BuYV-8YjGvI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/f1zPQ5LwIC0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/8623273575055020492/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=8623273575055020492" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/8623273575055020492?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/8623273575055020492?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/f1zPQ5LwIC0/chocolatey-free-and-open-source-windows.html" title="Chocolatey - The free and open source windows app store." /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-Vviqle2o908/TozclWiZ6TI/AAAAAAAAASE/1-_0QwA6KAs/s72-c/image_thumb4.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2011/10/chocolatey-free-and-open-source-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEINQXw4cSp7ImA9WhdUEU4.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-3314302588969195972</id><published>2011-09-27T07:09:00.001-07:00</published><updated>2011-09-27T07:09:50.239-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-27T07:09:50.239-07:00</app:edited><title>What’s happening on the NuGet feed (leveraging OData in an RSS reader)</title><content type="html">&lt;p&gt;Ever since &lt;a href="http://nuget.org/" target="_blank"&gt;NuGet&lt;/a&gt; came online I’ve been wanting a way to find out about new packages, and updates to packages.&lt;/p&gt;  &lt;p&gt;Since &lt;a href="http://www.odata.org/" target="_blank"&gt;OData&lt;/a&gt; extends the &lt;a href="http://www.ietf.org/rfc/rfc4287.txt" target="_blank"&gt;ATOM&lt;/a&gt; feed and you can hook an OData feed up to any RSS reader I set out to find a way to get at those recent updates to the NuGet feed and find out when new packages were published.&lt;/p&gt;  &lt;p&gt;If you’re not completely familiar with OData, later in this post I explain how I arrived at the URL below. However, if you don’t care how I arrived at the solution, below is the final RSS link I’m currently using in my RSS reader (Google Reader) to monitor updates to the NuGet feed.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://packages.nuget.org/v1/FeedService.svc/Packages()?$filter=Id%20ne%20'SymbolSource.TestPackage'&amp;amp;$orderby=Published%20desc"&gt;http://packages.nuget.org/v1/FeedService.svc/Packages()?$filter=Id%20ne%20'SymbolSource.TestPackage'&amp;amp;$orderby=Published%20desc&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;How did I discover or build that URL?&lt;/h4&gt;  &lt;p&gt;I could have memorized the &lt;a href="http://www.odata.org/developers/protocols/uri-conventions"&gt;OData URI spec&lt;/a&gt; and constructed the above link by hand but I’m far more familiar with C# and LINQ and instead used &lt;a href="http://www.linqpad.net/"&gt;LINQPad&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Open up LINQPad and add a WCF Data Services (OData) connection to the following URL&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://packages.nuget.org/v1/FeedService.svc"&gt;http://packages.nuget.org/v1/FeedService.svc&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now You can query the OData feed with some LINQ.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;from p in Packages      &lt;br /&gt;where p.Id != &amp;quot;SymbolSource.TestPackage&amp;quot;       &lt;br /&gt;orderby p.Published descending       &lt;br /&gt;select p&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;When you execute this LINQ query in LINQPad, you can click on the “SQL” in the results pane to view the URL that was generated to execute the operation.&lt;/p&gt;  &lt;p&gt;Now my original linq expression didn’t have the &lt;u&gt;where p.Id != &amp;quot;SymbolSource.TestPackage&amp;quot;&lt;/u&gt; as I didn’t know this package would become a regular pain to view in the RSS Reader.&lt;/p&gt;  &lt;p&gt;One great thing about OData is the ability to re-craft the URL for this feed to ignore items that either show up so much that I want to exclude them (like the “SymbolSource.TestPackage”) or a certain class of items that I just don’t want to be alerted on (maybe filtering by the NuGet Tag property).&lt;/p&gt;  &lt;h4&gt;Some observations of the feed.&lt;/h4&gt;  &lt;p&gt;I’ve been monitoring this feed for almost a month now and have learned about some very interesting projects, check the next section of this post with a list of some of the more interesting ones (to me) that I’ve found. &lt;/p&gt;  &lt;p&gt;So far the feed has become just a regular part of my daily blog reading. It’s the quickest one to do as I’m typically skimming the titles of the RSS items and only slowing down to dig into projects I’ve never heard and sound interesting.&lt;/p&gt;  &lt;p&gt;Google Reader trends that this feed generates about 54 items a day. Which may seem like a lot, but it’s really easy to click the “mark all as read” button and go on with the day.&lt;a href="http://lh4.ggpht.com/-XUsrxaG8wXs/ToHZKwn3O4I/AAAAAAAAARo/JYWHnb03aLc/s1600-h/image9.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-SsuwC_xx4Bk/ToHZLMw-2oI/AAAAAAAAARs/YW-Bk2zGg0k/image_thumb5.png?imgmax=800" width="587" height="87" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Interesting projects I’ve discovered.&lt;/h4&gt;  &lt;p&gt;I’ve been watching this RSS feed for almost 2 weeks now, and have discovered some new projects (at least new to me) and learned about updates to projects I already knew about.&lt;/p&gt;  &lt;p&gt;Below is a small list of ones I thought were interesting – there’s way more being done out there.&lt;/p&gt;  &lt;h5&gt;New to me&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://nuget.org/List/Packages/OpenCover" target="_blank"&gt;OpenCover&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nuget.org/List/Packages/nji" target="_blank"&gt;NodeJs (Package) Installer&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nuget.org/List/Packages/SignalR" target="_blank"&gt;SignalR&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nuget.org/List/Packages/FastActivator" target="_blank"&gt;FastActivator&lt;/a&gt; (this one feels like it could be a single .cs file instead of a full assembly – but then I guess you couldn’t leverage it in say a VB or F# project) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nuget.org/List/Packages/EasyHttp" target="_blank"&gt;EasyHttp&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nuget.org/List/Packages/SheepAspect"&gt;SheepAspect&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;NOT new to me (but released while I was watching)&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://nuget.org/List/Packages/SassAndCoffee" target="_blank"&gt;SassAndCoffee&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nuget.org/List/Packages/FubuMVC"&gt;FubuMVC&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nuget.org/List/Packages/Bottles"&gt;Bottles&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nuget.org/List/Packages/StatLight" target="_blank"&gt;StatLight&lt;/a&gt; (Ya I know it’s my project – but good verification that when I released the project – it showed up in my &lt;u&gt;RSS &lt;/u&gt;reader.) &lt;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://lh3.ggpht.com/-jgUk-cdtfpU/ToHZLfUUubI/AAAAAAAAARw/lPMBrU8QmB8/wlEmoticon-smile2.png?imgmax=800" /&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Could NuGet be a new metric for what’s popular or up and coming?&lt;/h4&gt;  &lt;p&gt;That heading is a little bolder than what I actually think, mostly because there are far too many variables to make that statement hold a strong footing. Regardless, I have noticed some interesting “trends” (if you can define a trend by my watching the feed for about a month) in what is being released on NuGet and wonder if watching this over time will be a nice window in to the types of projects people are really working on.&lt;/p&gt;  &lt;p&gt;I’ve seen quite a few projects related to messaging or &lt;a href="http://martinfowler.com/eaaDev/EventSourcing.html" target="_blank"&gt;Event Sourcing&lt;/a&gt;. And a number of different JS and CSS minification/build tooling projects.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-3314302588969195972?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LTzV_YtEOQrboG8FFtqREtNK41A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LTzV_YtEOQrboG8FFtqREtNK41A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LTzV_YtEOQrboG8FFtqREtNK41A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LTzV_YtEOQrboG8FFtqREtNK41A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/wvQxbPrQZ00" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/3314302588969195972/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=3314302588969195972" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/3314302588969195972?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/3314302588969195972?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/wvQxbPrQZ00/whats-happening-on-nuget-feed.html" title="What’s happening on the NuGet feed (leveraging OData in an RSS reader)" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-SsuwC_xx4Bk/ToHZLMw-2oI/AAAAAAAAARs/YW-Bk2zGg0k/s72-c/image_thumb5.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2011/09/whats-happening-on-nuget-feed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IHQHY9fCp7ImA9WhdXGEg.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-6713609870857050174</id><published>2011-08-31T22:36:00.001-07:00</published><updated>2011-08-31T22:38:51.864-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-31T22:38:51.864-07:00</app:edited><title>Powershell Text-To-Speech and fun with a 4yr old.</title><content type="html">&lt;p&gt;I’m not so sure this fits in the “elegant code” theme, but it’s a “fun with code” topic that someone might enjoy. Especially if you have a little one.&lt;/p&gt;  &lt;p&gt;My 4yr old is learning how to spell small and simple words like her name, “Mom”, “Dad”, etc, and continuing her exploration with letters on the keyboard. She’s been banging on a keyboard since her early years on &lt;a href="http://www.hanselman.com/babysmash/"&gt;babysmash&lt;/a&gt;. In fact I came home one day to find my monitor turned 90 degrees and about every possible admin window open in the background because of certain key combinations were not trapped by babysmash. But I digress…&lt;/p&gt;  &lt;p&gt;For a while she was typing some text into notepad and asking me what it spelled. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font style="background-color: #ffffff"&gt;“ajlkjwelsl” –&amp;gt; What’s that spell daddy?&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I then thought it would be fun if the computer could give instant feedback about what she typed and in a matter of a minute or so I whipped up this little “game” which we had fun playing for a bit.&lt;/p&gt;  &lt;p&gt;You can view the gist here - &lt;a href="https://gist.github.com/1180060"&gt;https://gist.github.com/1180060&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;Just paste the function above as shown below and run it. Type some text (&lt;strong&gt;make sure your computer’s sound is on&lt;/strong&gt;) and press enter to hear it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-LEdccB9P5Lg/Tl8Z0vb_LaI/AAAAAAAAARU/kyFyM3CCU-o/s1600-h/image4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-WtEbt7GLNSI/Tl8Z07lC9dI/AAAAAAAAARY/2zWzewZtjjc/image_thumb2.png?imgmax=800" width="636" height="390" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I typed some of the usual things we say around the house and my 4yr old wouldn’t stop laughing… &lt;/p&gt;  &lt;p&gt;Give it a try with your little ones (or big ones). Even let your non-techie significant other have a go – he/she may have some fun with it.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-6713609870857050174?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yrE_BDe6ryEZxXZEiKKEoxcmhBw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yrE_BDe6ryEZxXZEiKKEoxcmhBw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yrE_BDe6ryEZxXZEiKKEoxcmhBw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yrE_BDe6ryEZxXZEiKKEoxcmhBw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/I_MXmh48-yg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/6713609870857050174/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=6713609870857050174" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/6713609870857050174?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/6713609870857050174?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/I_MXmh48-yg/powershell-text-to-speech-and-fun-with.html" title="Powershell Text-To-Speech and fun with a 4yr old." /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-WtEbt7GLNSI/Tl8Z07lC9dI/AAAAAAAAARY/2zWzewZtjjc/s72-c/image_thumb2.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2011/08/powershell-text-to-speech-and-fun-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcFRno7cSp7ImA9WhdTGEo.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-4489438562587454852</id><published>2011-07-16T19:33:00.001-07:00</published><updated>2011-07-16T19:33:37.409-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-16T19:33:37.409-07:00</app:edited><title>Slightly modified “CD” Command for Powershell</title><content type="html">&lt;h3&gt;Background&lt;/h3&gt;  &lt;p&gt;In my previous job, I spent all my development time in a Linux environment. Was rather impressed at how much could get done at the command line, and how efficient some of those tasks became. My next job was based on Windows and mostly the Microsoft stack of development tools. This&amp;#160; meant I pretty much left the command line behind. That was, until, I started using git. And since I wanted to learn PowerShell, I used PowerShell to execute my git commands.&lt;/p&gt;  &lt;p&gt;One thing that has bugged me for a while is simply moving between directories. Even with tab completion, all that typing is a still quite annoying. Especially if you jump between a set of similar directories. One feature from the Linux CD command that I missed was “CD -&amp;quot;. This command in Linux can be used to jump to the previous directory (and then back again). One limitation of this command is it only could jump back to the previous directory, and it did not retain a memory of recent directories. &lt;em&gt;There may be something better in Linux that I don’t know of, but I’m basing this on a limited experience a number of years ago.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;So I threw a question out on twitter.    &lt;br /&gt;&lt;a href="http://lh3.ggpht.com/-Ucrl4yvnrIk/TiJJ_Nnk3eI/AAAAAAAAAQI/k5Mm8x_Twhs/s1600-h/image_thumb63.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image_thumb6" border="0" alt="image_thumb6" src="http://lh5.ggpht.com/-iijA6mLrgEU/TiJJ_Xbp0hI/AAAAAAAAAQM/lHv0bksIGys/image_thumb6_thumb.png?imgmax=800" width="318" height="97" /&gt;&lt;/a&gt;     &lt;br /&gt;After several tweets back and forth, @cwprogram threw an interesting spike at me.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-ilEGIJk7VRI/TiJJ_kt8a-I/AAAAAAAAAQQ/XJ0iAJq5384/s1600-h/image_thumb942.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image_thumb9[4]" border="0" alt="image_thumb9[4]" src="http://lh4.ggpht.com/-T4MVc7vKolw/TiJKACBtvyI/AAAAAAAAAQU/Pn71WMECKcQ/image_thumb94_thumb.png?imgmax=800" width="312" height="97" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://pastebin.com/xwtkn0am"&gt;http://pastebin.com/xwtkn0am&lt;/a&gt;     &lt;br /&gt;Although this wasn’t exactly what I was looking for, it contained enough of what I needed to spark my curiosity to write a version of my own.&lt;/p&gt;  &lt;p&gt;And so a little script was born that I’m now using to replace the “CD” command in my PowerShell runtime.&lt;/p&gt;  &lt;h3&gt;What does this do?&lt;/h3&gt;  &lt;p&gt;After you get it installed (see install steps below), when you type “CD” with no parameters at the command prompt. It will list up to 10 of the most recent distinct paths you’ve been to recently. This list also gives an index lookup number that you can use as a shortcut to jump to that path.&lt;/p&gt;  &lt;p&gt;Example:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;C:\code&amp;gt; cd        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1) C:\Users\jasonj         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2) D:\temp         &lt;br /&gt;C:\code&amp;gt; cd 2         &lt;br /&gt;D:\temp&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;You can continue to use the “CD” command to do your usual changing directories. Now you can quickly get a history of where you’ve been, and quickly jump to any of those previous histories without typing the entire paths again.&lt;/p&gt;  &lt;p&gt;It defaults to only showing you the last 10 distinct items, but if you find yourself needing to go back farther than that, you can use the following command to list more than 10 items.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;D:\temp&amp;gt; cd -ShowCount 100&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;How to Install&lt;/h3&gt;  &lt;ol&gt;   &lt;li&gt;Download the file and save it to a location you can reference later.      &lt;br /&gt;&lt;a href="https://github.com/staxmanade/Scripts/blob/master/Change-Directory.ps1"&gt;https://github.com/staxmanade/Scripts/blob/master/Change-Directory.ps1&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Open your $PROFILE (&lt;a href="http://www.howtogeek.com/50236/customizing-your-powershell-profile/"&gt;What is that?&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;Type the following two commands into your profile to replace the existing “CD” command with the new one.      &lt;br /&gt;      &lt;br /&gt;&lt;font face="Courier New"&gt;Remove-Item alias:cd        &lt;br /&gt;Set-Alias cd {Your_Saved_Directory}\Change-Directory.ps1&lt;/font&gt;       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Exit your PowerShell console and start a new one up. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Happy Commanding!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-4489438562587454852?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SLbE4MrJdHEu5v8VW7tgJdMw7IE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SLbE4MrJdHEu5v8VW7tgJdMw7IE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SLbE4MrJdHEu5v8VW7tgJdMw7IE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SLbE4MrJdHEu5v8VW7tgJdMw7IE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/6SUMozxUAcE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/4489438562587454852/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=4489438562587454852" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/4489438562587454852?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/4489438562587454852?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/6SUMozxUAcE/slightly-modified-cd-command-for.html" title="Slightly modified “CD” Command for Powershell" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-iijA6mLrgEU/TiJJ_Xbp0hI/AAAAAAAAAQM/lHv0bksIGys/s72-c/image_thumb6_thumb.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2011/07/slightly-modified-cd-command-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QHRHo8eCp7ImA9WhdTFko.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-1326671207786247540</id><published>2011-07-14T14:35:00.001-07:00</published><updated>2011-07-14T14:35:35.470-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-14T14:35:35.470-07:00</app:edited><title>StatLight 1.4 and almost 1.5</title><content type="html">&lt;p&gt;It’s been a while since I blogged about any updates to the StatLight project and even though people are saying “SilverLight’s dead” I’d have to say there’s been more community contribution in the last few months to the project than there’s ever been.&lt;/p&gt;  &lt;h4&gt;What is StatLight?&lt;/h4&gt;  &lt;p&gt;For those of you who don’t know, it’s a simple little command line tool you can use to execute tests for SilverLight test projects. You can get some more information on the project at the &lt;a href="http://statlight.codeplex.com/"&gt;project’s home page&lt;/a&gt; and &lt;a href="http://statlight.codeplex.com/documentation"&gt;documentation page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Release of &lt;a href="http://statlight.codeplex.com/releases/view/62509"&gt;StatLight 1.4&lt;/a&gt;&lt;/h4&gt;  &lt;p&gt;It’s been several months since I posted the 1.4 release of StatLight. It was full of all kinds of goodies. Go checkout the release page to see what updates were included.&lt;/p&gt;  &lt;p&gt;There was a regression introduced with this release that caused U.I. tests in TeamCity to not report correctly. It’s since been fixed and you can use the &lt;a href="http://teamcity.codebetter.com/viewType.html?tab=buildTypeStatusDiv&amp;amp;buildTypeId=bt370"&gt;CodeBetter TeamCity&lt;/a&gt; server to pull down the latest build of StatLight if you need this fix. If you hit the login page, just click on the login as a guest link to access the TeamCity builds.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Release of &lt;a href="http://statlight.codeplex.com/releases/view/68996"&gt;StatLight 1.5&lt;/a&gt; (soon, maybe, sometime)&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-auqyO7rhKbk/Th9hIpJe4cI/AAAAAAAAAP8/DQCqSPMEboc/s1600-h/image%25255B10%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://lh5.ggpht.com/-XlOPMINnLiY/Th9hJAXFFaI/AAAAAAAAAQA/TiEM4PvpvZ0/image_thumb%25255B2%25255D.png?imgmax=800" width="244" height="120" /&gt;&lt;/a&gt;If you are interested in what is to come with the next release, you can head over to the “planned” tab and check out some of the new features.&lt;/p&gt;  &lt;p&gt;But I’ll write about some of them here anyway &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smilewithtongueout" alt="Smile with tongue out" src="http://lh3.ggpht.com/-McDDdxnanho/Th9hJeECyEI/AAAAAAAAAQE/EKmKN-TTSK0/wlEmoticon-smilewithtongueout%25255B2%25255D.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Community Contribution.&lt;/h4&gt;  &lt;h5&gt;xUnitContrib Test Runner&lt;/h5&gt;  &lt;p&gt;I’d like to say thanks to &lt;a href="https://github.com/remogloor"&gt;Remo Gloor&lt;/a&gt; for his contribution of the official xUnitContrib Silverlight test runner. Remo created a StatLight runner host that leverages the xUnitcontrib Silverlight test runner to execute xUnit tests. This provides some great xUnit support and is considerably faster than the xUnitLight adapter originally implemented.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h5&gt;Growl Plugin&lt;/h5&gt;  &lt;p&gt;Geir-Tore Lindsve leveraged the new &lt;a href="http://statlight.codeplex.com/wikipage?title=Extensibility%20Documentation&amp;amp;referringTitle=Documentation"&gt;extensibility&lt;/a&gt; model recently added to StatLight to create a plugin that would notify Growl of failing tests. You can check out the project at &lt;a title="https://github.com/lindsve/Statlight.Growl" href="https://github.com/lindsve/Statlight.Growl"&gt;https://github.com/lindsve/Statlight.Growl&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h5&gt;ReSharper 6&lt;/h5&gt;  &lt;p&gt;ReSharper support has been around for a while now with the &lt;a href="http://agunit.codeplex.com/"&gt;AgUnit&lt;/a&gt; project. I was recently contacted by Steven Kock who wanted to see if it were possible to dump his custom Silverlight Test runner and leverage StatLight. I’ve been working with him on this, and am really excited about the value add we get from having Steven push StatLight around. Looking forward to his suggestions, and who knows – we may get some much better performance out of StatLight. Even though it’s still under dev, I’m just stoked can’t say how awesome it was to open up a Silverlight test project and execute a single test by using my R# shortcut.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-1326671207786247540?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/10SC2HJ5aGBTs1lQ5uUL_Q7cirg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/10SC2HJ5aGBTs1lQ5uUL_Q7cirg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/10SC2HJ5aGBTs1lQ5uUL_Q7cirg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/10SC2HJ5aGBTs1lQ5uUL_Q7cirg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/9N2zzlwfAJo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/1326671207786247540/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=1326671207786247540" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/1326671207786247540?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/1326671207786247540?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/9N2zzlwfAJo/statlight-14-and-almost-15.html" title="StatLight 1.4 and almost 1.5" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-XlOPMINnLiY/Th9hJAXFFaI/AAAAAAAAAQA/TiEM4PvpvZ0/s72-c/image_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2011/07/statlight-14-and-almost-15.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQGRnkyfSp7ImA9WhZbFEw.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-6587823371647931537</id><published>2011-06-18T10:15:00.001-07:00</published><updated>2011-06-18T10:15:27.795-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-18T10:15:27.795-07:00</app:edited><title>Git on Windows: Creating a network shared central repository.</title><content type="html">&lt;p&gt;I was doing some basic Git training for a customer this past week and they asked about how to setup their repositories to push/pull from a network share. I thought it would be simple and we spent a few minutes in class trying to accomplish it. We stopped trying in class and I took it as a homework assignment to figure it out before the next lesson. It was a little bit of a struggle to get this working for me, so I thought I’d throw this out there for any windows developers trying to do a similar thing.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I tend to prefer the command line to any of the git UI tools (except when visualizing history, and diffing files). In this post I’m going to show how you can do it through a command line, but I’ll also show how you can do it with git gui which, in this case, is a few less steps.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;How to push a local repository up to an (un-initialized) remote windows share.&lt;/h3&gt;  &lt;h5&gt;&amp;#160;&lt;/h5&gt;  &lt;h4&gt;Command Line:&lt;/h4&gt;  &lt;p&gt;I tend to run git within PowerShell, however the following set of commands &lt;strong&gt;cannot be run within the PowerShell&lt;/strong&gt; prompt. If you figure out a way, I’d love to hear about it. And since I use the PowerShell prompt, I’m not sure how this would play out with the bash command.&lt;/p&gt;  &lt;p&gt;Open a command prompt (cmd.exe) and follow the below steps to create a remote windows repository share.    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;CD into the context of your local repository. Say my repo was at “C:\Code\MyGitRepo1”.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;cd C:\Code\MyGitRepo1&amp;#160; &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Next we’re going to change our current directory to the remote share location. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Something I learned during this process is that cmd.exe doesn’t allow you to “cd” into a UNC network share path.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;To get around not being allowed to “cd” into a UNC network share we’ll use the &lt;a href="http://technet.microsoft.com/en-us/library/bb490978.aspx"&gt;pushd&lt;/a&gt; command. The reason this works is because it is actually going to map a network drive to the network share location.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;pushd &lt;a href="file://\\remoteServer\git\Share\Folder\Path"&gt;\\remoteServer\git\Share\Folder\Path&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now that we’re in the remote location we can create a bare git repository.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;mkdir MyGitRepo1      &lt;br /&gt;cd MyGitRepo1       &lt;br /&gt;git init --bare       &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Your remote empty repository has now been created. Let’s go back to our local repository&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font style="background-color: #ffffff"&gt;popd&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;popd will “CD” back to the previous location (“C:\Code\MyGitRepo1”) and also remove the network share the pushd command created above.&lt;/p&gt;  &lt;p&gt;So we should be back in the context of our local git repo.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font style="background-color: #ffffff"&gt;C:\Code\MyGitRepo1\ &amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now all we need to do is add the newly created remote bare repository to our local repo and push our code up.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Notice the direction of the slashes in the path below (this stumped me for a bit)&lt;/strong&gt;&amp;#160;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;git remote add origin //remoteServer/git/Share/Folder/Path/MyGitRepo1      &lt;br /&gt;git push origin master       &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Kind of a pain at the command prompt really, but it’s not something that’s done all that often.&lt;/p&gt;  &lt;h4&gt;Using Git gui instead:&lt;/h4&gt;  &lt;p&gt;Open up the GUI&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font style="background-color: #ffffff"&gt;git gui&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Click the [Remote-&amp;gt;Add] menu option to bring up the “Add Remote” dialog.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-ftWDdPbwLuU/TfzdIjeomCI/AAAAAAAAAPs/V7fp-tYQGTE/s1600-h/image%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-2J7R5Ywqg5Q/TfzdKYd7u1I/AAAAAAAAAPw/RVRd1qA4Mwg/image_thumb%25255B1%25255D.png?imgmax=800" width="306" height="179" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enter the name for your remote “origin” is pretty typical for the central repository, but you can call this whatever you want. Then type the remote location. &lt;strong&gt;Notice the direction of the slashes.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-rK0DGmJVatM/TfzdK_fEhyI/AAAAAAAAAP0/040v3iV28YU/s1600-h/image%25255B7%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-2lkEQOqsj3I/TfzdLjmbWvI/AAAAAAAAAP4/6LZzJP94Cmk/image_thumb%25255B3%25255D.png?imgmax=800" width="414" height="305" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now you should be good to go.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Hope this helps someone else, and if anyone knows of a better/easier way I’d love to hear it.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-6587823371647931537?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/D8KGA94zz1mRg1sDPoqeRUN3RyE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/D8KGA94zz1mRg1sDPoqeRUN3RyE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/D8KGA94zz1mRg1sDPoqeRUN3RyE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/D8KGA94zz1mRg1sDPoqeRUN3RyE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/UngTQs2yAKM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/6587823371647931537/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=6587823371647931537" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/6587823371647931537?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/6587823371647931537?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/UngTQs2yAKM/git-on-windows-creating-network-shared.html" title="Git on Windows: Creating a network shared central repository." /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-2J7R5Ywqg5Q/TfzdKYd7u1I/AAAAAAAAAPw/RVRd1qA4Mwg/s72-c/image_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2011/06/git-on-windows-creating-network-shared.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUNQ3Y-fyp7ImA9WhZRF04.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-496442671188292405</id><published>2011-04-13T15:51:00.000-07:00</published><updated>2011-04-13T16:28:12.857-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-13T16:28:12.857-07:00</app:edited><title>Using VSDBCMD to deploy an Entity Framework (EF) CodeFirst (or any other) database to AppHarbor</title><content type="html">&lt;p&gt;If you’ve taken the jump to try out the new Entity Framework Code First and you’re allowing it to generate your database for you, you’ve most certainly run into the lack of migrations/updating existing schema support. Currently EF Code First will only create a database and won’t update a database with changes necessary to bring it in line with your model. I know they’re working on it, but since it’s not there, I thought I’d share a possible solution, albeit less polished than some of the well known database change management out there.&lt;/p&gt;  &lt;h4&gt;Where is the tool?&lt;/h4&gt;  &lt;p&gt;You can access it in the VS Command window. On my x64 machine the tool is in.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VSTSDB\Deploy\vsdbcmd.exe&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;I want to deploy an existing schema to AppHarbor.&lt;/h4&gt;  &lt;p&gt;Some high level steps that you can use for deployment of database changes.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Generate an original reflection of your database. (*.dbschema file) &lt;/li&gt;    &lt;li&gt;Tiny little hack to the .dbschema file. &lt;/li&gt;    &lt;li&gt;Generate the change file to AppHarbor &lt;/li&gt;    &lt;li&gt;Review Change Script Generated &lt;/li&gt;    &lt;li&gt;Take the app offline. (optional) &lt;/li&gt;    &lt;li&gt;Apply Change Script &lt;/li&gt;    &lt;li&gt;Bring the app online (mandatory if you took step 5) &lt;/li&gt; &lt;/ol&gt;  &lt;h5&gt;Generate an original reflection of your database.&lt;/h5&gt;  &lt;p&gt;This file is a complete reflection of your databases schema in a single xml file.&lt;/p&gt;  &lt;p&gt;The following command can be used to generate this file.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;vsdbcmd.exe      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /Action:Import       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /ConnectionString:&amp;quot;Data Source=.\sqlexpress;Initial Catalog=MyDatabase;Integrated Security=True;Pooling=False&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /ModelFile:MyDatabase.dbschema&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;There are a ton of knobs to turn with this command line tool. Feel free to check out the docs &lt;a href="http://msdn.microsoft.com/en-us/library/dd193283.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd193283.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now you should have a file “MyDatabase.dbschema” sitting on your hard drive.&lt;/p&gt;  &lt;h5&gt;Tiny little hack to the .dbschema file.&lt;/h5&gt;  &lt;p&gt;The section of xml we want to manually remove from the file is related to where your mdf and ldf database files should exist on disk. When we go to deploy up to AppHarbor, if this is not removed, then vsdbcmd will generate script to attempt to move the files into the “correct” location. This operation will throw exceptions if you attempt to execute against AppHarbor as you don’t have permission to do this. We’re removing it from the xml file, as I can’t seem to get the correct command line option to ignore this (if there is an option). So by removing it, it’s just not used and completely ignored.&lt;/p&gt;  &lt;p&gt;I don’t know if this will be true for everyone, but I find that the last two sections of xml in the dbschema file are all I have to remove. I’ll show the two full sections below so you can use it as a reference of what to remove from the file.&lt;/p&gt;  &lt;pre class="brush: xml;"&gt;&amp;lt;Element Type=&amp;quot;ISql90File&amp;quot; Name=&amp;quot;[MyDatabase]&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;Property Name=&amp;quot;FileName&amp;quot; Value=&amp;quot;$(DefaultDataPath)$(DatabaseName).mdf&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;Property Name=&amp;quot;Size&amp;quot; Value=&amp;quot;2304&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;Property Name=&amp;quot;SizeUnit&amp;quot; Value=&amp;quot;3&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;Property Name=&amp;quot;FileGrowth&amp;quot; Value=&amp;quot;1024&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;Property Name=&amp;quot;FileGrowthUnit&amp;quot; Value=&amp;quot;3&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;Relationship Name=&amp;quot;Filegroup&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;Entry&amp;gt;&lt;br /&gt;            &amp;lt;References ExternalSource=&amp;quot;BuiltIns&amp;quot; Name=&amp;quot;[PRIMARY]&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;/Entry&amp;gt;&lt;br /&gt;    &amp;lt;/Relationship&amp;gt;&lt;br /&gt;&amp;lt;/Element&amp;gt;&lt;br /&gt;&amp;lt;Element Type=&amp;quot;ISql90File&amp;quot; Name=&amp;quot;[MyDatabase_log]&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;Property Name=&amp;quot;FileName&amp;quot; Value=&amp;quot;$(DefaultLogPath)$(DatabaseName)_log.LDF&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;Property Name=&amp;quot;Size&amp;quot; Value=&amp;quot;576&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;Property Name=&amp;quot;SizeUnit&amp;quot; Value=&amp;quot;3&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;Property Name=&amp;quot;MaxSize&amp;quot; Value=&amp;quot;2097152&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;Property Name=&amp;quot;IsUnlimited&amp;quot; Value=&amp;quot;False&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;Property Name=&amp;quot;FileGrowth&amp;quot; Value=&amp;quot;10&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;Property Name=&amp;quot;FileGrowthUnit&amp;quot; Value=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;Property Name=&amp;quot;IsLogFile&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/Element&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Generate the change file to AppHarbor.&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now that we have a .dbschema file containing the complete model of what we want deployed, we can now use it to generate a schema change deployment script.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  &lt;p&gt;vsdbcmd.exe &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /Action:Deploy &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /DeployToDatabase:- &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /Script:Test.sql &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /ConnectionString:&amp;quot;{YourAppHarborConnectionString}&amp;quot; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /ModelFile:HackIt.dbschema &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /Properties:TargetDatabase={YourAppHarborDatabaseName EX:db1235}&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I’ll explain a couple of the above command options.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h6&gt;/DeployToDatabase:-&lt;/h6&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This one is _&lt;strong&gt;&lt;u&gt;key&lt;/u&gt;&lt;/strong&gt;_. This tells vsdbcmd to only generate a change script, and &lt;strong&gt;not to actually deploy the changes &lt;/strong&gt;immediately. Until you feel comfortable with what sql the tool generates, which is usually pretty darn good, you should not apply it immediately. Allow the tool to generate the file for further inspection and you can execute it manually after. &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h6&gt;/Script:Test.sql&lt;/h6&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This this is just the name of the file to dump the deployment changes. &lt;br /&gt;  &lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h6&gt;/ModelFile:HackIt.dbschema&lt;/h6&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The path to the .dbschema we generated and modified above.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Review Change Script Generated.&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;After you’ve generated a change script file, take a look at the sql just to make sure you’re happy with what it generates.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Take the app offline. (optional)&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This one depends on the schema changes. If the changes are serious enough, you can check in an App_Offline.htm file at the root of web project and do a “git push appharbor”. This way, while making schema changes you don’t have to worry about the errors popping up on users. Down side is your site becomes inoperable.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  &lt;p&gt;If you’ve never heard of the App_Offline.htm – I’d recommend reading up on it. &lt;a href="http://weblogs.asp.net/scottgu/archive/2006/04/09/442332.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2006/04/09/442332.aspx&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Apply Change Script.&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You have several options to actually apply the scripted changes.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;Use vsdbcmd to deploy – Just turn the /DeployToDatabase:&lt;strong&gt;-&lt;/strong&gt; to /DeployToDatabase:&lt;strong&gt;+&lt;/strong&gt; and allow vsdbcmd to apply the script right there. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Use SQL Management Studio. &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Make Sure you turn on SQLCMD Mode&lt;/strong&gt;&lt;a href="http://lh3.ggpht.com/_L6Vw0x_R3iw/TaYpOEygRKI/AAAAAAAAAPk/ZZZbpZN_P1s/s1600-h/image1.png"&gt; &lt;br /&gt;      &lt;br /&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_L6Vw0x_R3iw/TaYpOvTB3nI/AAAAAAAAAPo/18HoPQJiXVU/image_thumb.png?imgmax=800" width="311" height="333" /&gt;&lt;/a&gt;&amp;#160; &lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Bring your site back online.&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now you can go re-name the App_Offline.htm to something like App_Offline.htm.disabled and push those changes back up to AppHarbor.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Other considerations.&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Consider a simple migrations framework (EX: &lt;a href="http://code.google.com/p/dbup/" target="_blank"&gt;DbUp&lt;/a&gt;) to get some initial data or things initialized, but be-ware that you’ll have to think a little harder about the “rollback” steps with this approach. &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Next you could take a look at an inquiry I made on the public support discussion list at AppHarbor hoping to push AppHarbor to implement this App_Offline.htm support (right into their admin site)&lt;a href="http://support.appharbor.com/discussions/problems/373-deployment-feature-idea"&gt; &lt;br /&gt;      &lt;br /&gt;http://support.appharbor.com/discussions/problems/373-deployment-feature-idea&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; SPARE A VOTE OR TWO: &lt;a title="http://feedback.appharbor.com/forums/95687-general/suggestions/1686365-add-feature-to-push-an-app-offline-htm-at-the-clic" href="http://feedback.appharbor.com/forums/95687-general/suggestions/1686365-add-feature-to-push-an-app-offline-htm-at-the-clic"&gt;http://feedback.appharbor.com/forums/95687-general/suggestions/1686365-add-feature-to-push-an-app-offline-htm-at-the-clic&lt;/a&gt; &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;One great benefit of to this approach is the ability for vsdbcmd to manage changes to an existing schema. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now if you want full support like refactorings such as table, column, etc renames. You will want to keep a full db project and use that to do a deployment.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Hope you find this useful. Happy Deployment!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-496442671188292405?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/COBUH1jfzgbCvl609cWhKbjzxQ8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/COBUH1jfzgbCvl609cWhKbjzxQ8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/COBUH1jfzgbCvl609cWhKbjzxQ8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/COBUH1jfzgbCvl609cWhKbjzxQ8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/A8Ve6eVWv2o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/496442671188292405/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=496442671188292405" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/496442671188292405?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/496442671188292405?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/A8Ve6eVWv2o/using-vsdbcmd-to-deploy-entity.html" title="Using VSDBCMD to deploy an Entity Framework (EF) CodeFirst (or any other) database to AppHarbor" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_L6Vw0x_R3iw/TaYpOvTB3nI/AAAAAAAAAPo/18HoPQJiXVU/s72-c/image_thumb.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2011/04/using-vsdbcmd-to-deploy-entity.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYCRHczfSp7ImA9WhZSF0U.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-2958339745271759083</id><published>2011-04-02T16:16:00.001-07:00</published><updated>2011-04-02T16:16:05.985-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-02T16:16:05.985-07:00</app:edited><title>Dynamically load embedded assemblies – because ILMerge appeared to be out.</title><content type="html">&lt;p&gt;At work, I started building a .net assembly that would probably find its way into a number of the server processes and applications around the shop. This particular assembly was going to end up containing quite a number of external open source references that I didn’t want to expose to the consumer of my library.&lt;/p&gt;  &lt;p&gt;I set out to solve several simple requirements.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Easy to use. Should be nothing more than adding a reference to the assembly (and use it). &lt;/li&gt;    &lt;li&gt;Consumer should not have to deal with the 5 open source libraries it was dependent on. Those are an implementation detail and it’s not necessary to expose those assemblies to the consumer, let alone have to manage the assembly files. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I originally got the idea from &lt;a href="http://codebetter.com/blogs/dru.sellers/" target="_blank"&gt;Dru Sellers&lt;/a&gt;’ post &lt;a href="http://codebetter.com/blogs/dru.sellers/archive/2010/07/29/ilmerge-to-the-rescue.aspx"&gt;http://codebetter.com/blogs/dru.sellers/archive/2010/07/29/ilmerge-to-the-rescue.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I gave ILMerge a try. As a post build event on the project – I ran ILMerge and generated a single assembly. &lt;strong&gt;Leveraging the internalize&lt;/strong&gt; functionality of ILMerge so my assembly wouldn’t expose all of its open source projects through Visual Studio’s intellisense.&lt;/p&gt;  &lt;p&gt;This almost gave me the output I wanted. Single assembly, compact, easy to use… Unfortunately, when I tried to use the assembly I started seeing .net serialization exceptions. Serialization from my ILMerged assembly could not be desterilized on the other end because that type was not in an ILMerged assembly, but in the original assembly. (Maybe there’s a way to work around this, but I didn’t have time to figure that out, would love to hear any comments)&lt;/p&gt;  &lt;h4&gt;So ILMerge appeared to be out, what next?&lt;/h4&gt;  &lt;p&gt;My coworker, &lt;a href="www.limbodesigns.com" target="_blank"&gt;Shawn&lt;/a&gt;, suggested I try storing the assemblies as resource files (embedded in my assembly). He uses the SmartAssembly product from Red Gate in his own projects, and mentioned that their product can merge all of your assemblies into a single executable – storing the assemblies in a .net resource file within your assembly/executable. This actually seemed easy to accomplish so I thought I’d give it a try.&lt;/p&gt;  &lt;h4&gt;How I did it.&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Add the required assemblies as a resource to your project. I choose the Resources.resx file path and added each assembly file to the Resources.resx. I like this because of how simple it is to get the items out.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; We need to hook up to the first point of execution (main(…), or in my case this was a library and I had a single static factory class, so in the static constructor of this factory I included the following lines of code.&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;static SomeFactory()&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    var resourcedAssembliesHash = new Dictionary&amp;lt;string, byte[]&amp;gt; {&lt;br /&gt;        {&amp;quot;log4net&amp;quot;, Resources.log4net},&lt;br /&gt;        {&amp;quot;Microsoft.Practices.ServiceLocation&amp;quot;, Resources.Microsoft_Practices_ServiceLocation},&lt;br /&gt;    };&lt;br /&gt;&lt;br /&gt;    AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        // Get only the name from the fully qualified assembly name (prob a better way to do this EX: AssemblyName.GetAssemblyName(args.Name))&lt;br /&gt;        // EX: &amp;quot;log4net, Version=??????, Culture=??????, PublicKeyToken=??????, ProcessorArchitecture=??????&amp;quot; - should return &amp;quot;log4net&amp;quot;&lt;br /&gt;        var assemblyName = args.Name.Split(',').First();&lt;br /&gt;&lt;br /&gt;        if (resourcedAssembliesHash.ContainsKey(assemblyName))&lt;br /&gt;        {&lt;br /&gt;            return Assembly.Load(resourcedAssembliesHash[assemblyName]);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return null;&lt;br /&gt;    };&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I’ll talk a little about each step above.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;var resourcedAssembliesHash = new Dictionary&amp;lt;string, byte[]&amp;gt; {&lt;br /&gt;    {&amp;quot;log4net&amp;quot;, Resources.log4net},&lt;br /&gt;    {&amp;quot;Microsoft.Practices.ServiceLocation&amp;quot;, Resources.Microsoft_Practices_ServiceLocation},&lt;br /&gt;};&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The first chunk is a static hash of the (&lt;strong&gt;key&lt;/strong&gt;=assembly name, &lt;strong&gt;value&lt;/strong&gt;=byte array of actual assembly). We will use this to load each assembly by name when the runtime requests it.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =&amp;gt;&lt;br /&gt;{...&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Next we hook into the app domain’s &lt;a href="http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx"&gt;AssemblyResolve&lt;/a&gt; event which allows us to customize (given a certain assembly name) where we load the assembly from. Think external web service, some crazy location on disk, database, or in this case a resource file within the executing assembly.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;// Get only the name from the fully qualified assembly name (prob a better way to do this EX: AssemblyName.GetAssemblyName(args.Name))&lt;br /&gt;// EX: &amp;quot;log4net, Version=??????, Culture=??????, PublicKeyToken=??????, ProcessorArchitecture=??????&amp;quot; - should return &amp;quot;log4net&amp;quot;&lt;br /&gt;var assemblyName = args.Name.Split(',').First();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Next we figure out the name of the assembly requesting to be loaded. My original implementation used the …Name.Split('’,’).First(); to get the assembly name out of the full assembly name, but as I was writing up this blog post I thought – there must be a better way to do this. So although I am putting the effort to write this out – I’m not feeling like verifying that a possible better way will work (So give this a try and let me know – try using &lt;strong&gt;AssemblyName.GetAssemblyName(args.Name)&lt;/strong&gt; instead).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;if (resourcedAssembliesHash.ContainsKey(assemblyName))&lt;br /&gt;{&lt;br /&gt;    return Assembly.Load(resourcedAssembliesHash[assemblyName]);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Next we check that the assembly name exists if our hash declared initially and if so we load it up…&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;    return null;&lt;br /&gt;};&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Otherwise, the assembly being requested to be loaded is not one we know about so we return null to allow the framework to figure it out the usual ways.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Finally, I created a post build event that remove the resourced assemblies from the bin\[Debug|Release] folders. This allowed me to have a test project that only had a dependency on the single assembly and verify using it actually works (because it has to load it’s dependencies to work correctly and they didn’t exist on disk).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Please consider.&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;You may &lt;strong&gt;not have fun &lt;/strong&gt;if you package some of the same assemblies that your other projects may/will reference (especially if they are different versions). &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Can’t say I have completely wrapped my head around the different problematic use cases related strategy could bring to life. (&lt;strong&gt;Use with care&lt;/strong&gt;) &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-2958339745271759083?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kbysbxqYltH5rPEd1AhKl0GKLoA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kbysbxqYltH5rPEd1AhKl0GKLoA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kbysbxqYltH5rPEd1AhKl0GKLoA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kbysbxqYltH5rPEd1AhKl0GKLoA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/oLBzTSSAlXA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/2958339745271759083/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=2958339745271759083" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/2958339745271759083?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/2958339745271759083?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/oLBzTSSAlXA/dynamically-load-embedded-assemblies.html" title="Dynamically load embedded assemblies – because ILMerge appeared to be out." /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2011/04/dynamically-load-embedded-assemblies.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAHQXYzeyp7ImA9Wx9XFk0.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-6129531466987654960</id><published>2011-01-09T12:58:00.001-08:00</published><updated>2011-01-09T12:58:50.883-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-09T12:58:50.883-08:00</app:edited><title>Bookmark to inject FireBug Light into Internet Explorer.</title><content type="html">&lt;p&gt;I’ve enjoyed Firebug in Firefox, and even find value in Firebug light when used in Internet Explorer. However if you don’t have control or don’t want to place the Firebug installation js file in your web site to include firebug. I figured out a way to load it on demand with a bookmark in Internet Explorer.&lt;/p&gt;  &lt;p&gt;I created a new text file in my windows7 machine &lt;strong&gt;FireBug.url&lt;/strong&gt; and placed it in     &lt;br /&gt;C:\Users\{username}\Favorites\{WhateverFolderYouWant}&lt;/p&gt;  &lt;p&gt;Then paste the following into the file and save.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: I’m using jQuery in the javascript link – so if you need it more generic you’ll have to replace the jQuery…&lt;/p&gt;  &lt;p&gt;[DOC_FirebugUI]    &lt;br /&gt;ORIGURL=about:blank     &lt;br /&gt;[{000214A0-0000-0000-C000-000000000046}]     &lt;br /&gt;Prop3=19,2     &lt;br /&gt;[InternetShortcut]     &lt;br /&gt;URL=javascript:$('body').append('&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://getfirebug.com/firebug-lite.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;'); void(0);     &lt;br /&gt;IDList=     &lt;br /&gt;IconFile=http://getfirebug.com/img/favicon.ico     &lt;br /&gt;IconIndex=1&lt;/p&gt;  &lt;p&gt;You should now be able to load up firebug in IE with a single click.&lt;/p&gt;  &lt;p&gt;Note: I have the IconFIle: property in there, but can’t seem to get it to work..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_L6Vw0x_R3iw/TSohgksCZpI/AAAAAAAAAOo/T0LZGVgk_xc/s1600-h/image%5B11%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_L6Vw0x_R3iw/TSohhOPn15I/AAAAAAAAAOs/YLNqmqXxLIc/image_thumb%5B5%5D.png?imgmax=800" width="405" height="312" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_L6Vw0x_R3iw/TSohhuirnfI/AAAAAAAAAOw/Chy9LmO43pE/s1600-h/image%5B10%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_L6Vw0x_R3iw/TSohin9dcCI/AAAAAAAAAO0/pBzl0CL5Cf4/image_thumb%5B4%5D.png?imgmax=800" width="455" height="534" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-6129531466987654960?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cbpdMugWIDKMCewzWN-vojmHcIc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cbpdMugWIDKMCewzWN-vojmHcIc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cbpdMugWIDKMCewzWN-vojmHcIc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cbpdMugWIDKMCewzWN-vojmHcIc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/YgV-o98R3zM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/6129531466987654960/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=6129531466987654960" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/6129531466987654960?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/6129531466987654960?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/YgV-o98R3zM/bookmark-to-inject-firebug-light-into.html" title="Bookmark to inject FireBug Light into Internet Explorer." /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_L6Vw0x_R3iw/TSohhOPn15I/AAAAAAAAAOs/YLNqmqXxLIc/s72-c/image_thumb%5B5%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2011/01/bookmark-to-inject-firebug-light-into.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UEQX0-eSp7ImA9Wx9RE0Q.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-5836788073271468817</id><published>2010-12-14T21:33:00.001-08:00</published><updated>2010-12-14T21:33:20.351-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-14T21:33:20.351-08:00</app:edited><title>StatLight release (V1.2 &amp; V1.3)</title><content type="html">&lt;p&gt;This post is coming a little late (just realized I still had it in my local drafts and had not published it)…&lt;/p&gt;  &lt;p&gt;Although I put out these blog posts (sometimes), the best way to learn about new releases is to subscribe to any of the myriad of Codeplex rss feeds for the project.&lt;/p&gt;  &lt;h4&gt;&lt;a href="http://statlight.codeplex.com/releases/view/48242" target="_blank"&gt;StatLight V1.2&lt;/a&gt; &lt;/h4&gt;  &lt;p&gt;Released way back on Sep 25, 2010. Mostly a bug fix release, but came with a couple small features that could help out your Silverlight testing.&lt;/p&gt;  &lt;p&gt;Features added:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Support to test multiple Xaps at once:      &lt;br /&gt;EX: StatLight.exe -x=&amp;quot;C:\Project1\Test&lt;i&gt;1.xap&amp;quot; -x=&amp;quot;C:\Project2\Test&lt;/i&gt;2.xap&amp;quot; &lt;/li&gt;    &lt;li&gt;QueryString command line parameter. This will pass a querystring along to the browser instance running the StatLight Silverlight host. Allowing you to grab the querystring and pull some information (config or other) into your test.      &lt;ul&gt;       &lt;li&gt;&lt;strong&gt;EX:&lt;/strong&gt; You may want to run some Silverlight Integration tests that talk back to some self hosted web server. Since detecting this automatically is not realistic, because the server and port your tests will detect is the StatLight server, you can’t just call back to “home base” (because that is StatLight’s web server) you need to somehow know where to configure your endpoints. With the QueryString parameter in StatLight, your build scripts can now pass in a known port of your self hosted web server, where your tests can then use to configure any test service calls. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;&lt;a href="http://statlight.codeplex.com/releases/view/53742" target="_blank"&gt;StatLight V1.3&lt;/a&gt; &lt;/h4&gt;  &lt;p&gt;Released Nov 20, 2010. &lt;strong&gt;NOTE: This is the first build running on the .net 4.0 framework. If you need 3.5 support stick with the V1.2 build.&lt;/strong&gt; Much like I did back on the V1.2 release, this release is marked as a “beta” build which I will change the status on the release page to stable if I don’t hear any issue come out of it in the next couple weeks.&lt;/p&gt;  &lt;p&gt;This release comes with a feature I’ve been wishing for, for a while now. StatLight uses a web server internally to serve the content and receive messages from the Silverlight(StatLight) test runner. This web server was originally implemented with the WCF WebServiceHost. Unfortunately this required special administrative privileges to get up and running and although most developers have enough rights to not make this a problem, there are some who are not allowed to adjust these port privileges. Looking through Jeff Wilcox’s Microsoft Silverlight Testing framework server side code, I noticed he implemented a very simple web server with the HttpListener. After a quick spike I realized I could port his web server over into StatLight and gain some benefits other than just not requiring administrative privileges on a certain port. &lt;/p&gt;  &lt;p&gt;Features added:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;New WebServer implementation      &lt;ul&gt;       &lt;li&gt;No requirement for elevated privileges &lt;/li&gt;        &lt;li&gt;Faster startup time &lt;/li&gt;        &lt;li&gt;With easier &amp;amp; full control of the request/response cycle StatLight now prints out warnings if your tests are making service requests that they shouldn’t be. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Introductory support to run external web browsers (instead of the self hosted control)      &lt;ul&gt;       &lt;li&gt;Firefox &lt;/li&gt;        &lt;li&gt;Chrome &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Added support for NUnit’s TestCaseAttribute      &lt;ul&gt;       &lt;li&gt;Note this is not full support, but should work for many general cases. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-5836788073271468817?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FApnv_YMS7FtKOfeYpQ_HdCcxIk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FApnv_YMS7FtKOfeYpQ_HdCcxIk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FApnv_YMS7FtKOfeYpQ_HdCcxIk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FApnv_YMS7FtKOfeYpQ_HdCcxIk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/T8VKEQutD1o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/5836788073271468817/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=5836788073271468817" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/5836788073271468817?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/5836788073271468817?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/T8VKEQutD1o/statlight-release-v12-v13.html" title="StatLight release (V1.2 &amp;amp; V1.3)" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2010/12/statlight-release-v12-v13.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQAQHY_fip7ImA9Wx9SGU0.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-7994415307626468878</id><published>2010-12-09T05:41:00.001-08:00</published><updated>2010-12-09T05:45:41.846-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-09T05:45:41.846-08:00</app:edited><title>Duplicate DOM elements with the same ID</title><content type="html">&lt;p&gt;This is a short post. Saving this snippet it for myself for later.&lt;/p&gt;  &lt;p&gt;If you ever have a html DOM element with a duplicate ID value, how do you detect the issue? It’s sometimes hard to find/debug until you really understand what has happened.&lt;/p&gt;  &lt;p&gt;Taking inspiration from the solution in the following stackoverflow question. &lt;a href="http://stackoverflow.com/questions/482763/jquery-to-check-for-duplicate-ids-in-a-dom"&gt;http://stackoverflow.com/questions/482763/jquery-to-check-for-duplicate-ids-in-a-dom&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I wrote little helper that will alert you early in the development phase if you do something that causes a DOM element with duplicate ID’s.&lt;/p&gt;  &lt;p&gt;Place the following script at the bottom of your global master page footer during development, and you will be notified of any issues early in the process.&lt;/p&gt;  &lt;pre class=""&gt;// Requires: jQuery&lt;br /&gt;(function(document, $){&lt;br /&gt;    // little debug helper script to notify us when the &lt;br /&gt;    // dom is updated with a contains duplicate ID'd elements&lt;br /&gt;    $(document).bind('DOMNodeInserted', function (event) {&lt;br /&gt;&lt;br /&gt;        var duplicateDomElements = [];&lt;br /&gt;&lt;br /&gt;        $('[id]').map(function () {&lt;br /&gt;            var ids = $('[id=' + this.id + ']');&lt;br /&gt;            if (ids.length &amp;gt; 1 &amp;amp;&amp;amp; ids[0] == this) {&lt;br /&gt;                duplicateDomElements.push(this.id);&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;&lt;br /&gt;        if (duplicateDomElements.length &amp;gt; 0) {&lt;br /&gt;            alert('Recent action duplicated a dom element ID with name(s) [' + duplicateDomElements + ']');&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    });&lt;br /&gt;})(document, jQuery);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font face="Arial"&gt;How do others typically deal with the issue?&lt;/font&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-7994415307626468878?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LSppx31dzBc2t_3LyL4h_4urho4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LSppx31dzBc2t_3LyL4h_4urho4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LSppx31dzBc2t_3LyL4h_4urho4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LSppx31dzBc2t_3LyL4h_4urho4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/-58Zbvmixww" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/7994415307626468878/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=7994415307626468878" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/7994415307626468878?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/7994415307626468878?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/-58Zbvmixww/duplicate-dom-elements-with-same-id.html" title="Duplicate DOM elements with the same ID" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2010/12/duplicate-dom-elements-with-same-id.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcHR3Y7fCp7ImA9Wx5aFEk.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-7949785032368231423</id><published>2010-11-10T18:20:00.001-08:00</published><updated>2010-11-10T18:20:36.804-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-10T18:20:36.804-08:00</app:edited><title>PowerShell url checker (Check if a list of url’s is valid)</title><content type="html">&lt;p&gt;Every once in a while I run across a list of url’s that for whatever reason I want to make sure are valid. I have not yet found a good way to do this in PowerShell and finally hit the case where I decided to just write what I needed.&lt;/p&gt;  &lt;p&gt;You can download the script here.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/staxmanade/Scripts/raw/master/Check-Url.ps1"&gt;https://github.com/staxmanade/Scripts/raw/master/Check-Url.ps1&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Below is an example of how you can use it:&lt;/p&gt;  &lt;pre&gt;C:\PS&amp;gt;@('http://www.google.com', 'http://www.asd----fDSAWQSDF-GZz.com') | .\Check-Url.ps1&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Which generates the following output:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; IsValid Url                            HttpStatus Error&lt;br /&gt; ------- ---                            ---------- -----&lt;br /&gt;    True http://www.google.com                  OK&lt;br /&gt;   False http://www.asd----fDSAWQSD...             System.Net.WebException: T...&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Hopefully someone else finds this useful. And if there are other/better ways of accomplishing this I’d love to hear about it.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-7949785032368231423?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rD240OMbPENXCckB6GYCa_qcF-8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rD240OMbPENXCckB6GYCa_qcF-8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rD240OMbPENXCckB6GYCa_qcF-8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rD240OMbPENXCckB6GYCa_qcF-8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/UQb_aixrSXs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/7949785032368231423/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=7949785032368231423" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/7949785032368231423?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/7949785032368231423?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/UQb_aixrSXs/powershell-url-checker-check-if-list-of.html" title="PowerShell url checker (Check if a list of url’s is valid)" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2010/11/powershell-url-checker-check-if-list-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQMQno9eyp7ImA9Wx5UE0s.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-5002727350577783616</id><published>2010-10-17T17:56:00.001-07:00</published><updated>2010-10-17T17:56:23.463-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-17T17:56:23.463-07:00</app:edited><title>OData’s DataServiceQuery and removing the .Expand(“MagicStrings”) –Part II</title><content type="html">&lt;p&gt;In a &lt;a href="http://staxmanade.blogspot.com/2010/09/odatas-dataservicequery-and-removing.html" target="_blank"&gt;previous post&lt;/a&gt; I elaborated on the problem of magic strings in &lt;a href="http://www.odata.org/" target="_blank"&gt;OData&lt;/a&gt; service queries, and gave a quick (but lacking in depth) statically typed helper solution.&lt;/p&gt;  &lt;p&gt;A commenter &lt;a href="http://elegantcode.com/2010/09/21/odatas-dataservicequery-and-removing-the-expandmagicstrings/#comment-58997"&gt;mynkow&lt;/a&gt; left a note stating that my solution would not work with nested objects. I initially replied asking if he could give an example (as I hadn’t run into that scenario yet being a noob to OData). He didn’t get back to me, but it wasn’t long before I ran into the problem he was talking about.&lt;/p&gt;  &lt;p&gt;If we go back to &lt;a href="http://www.linqpad.net/"&gt;LinqPad&lt;/a&gt; and look again at the Netflix OData api. Let’s say we want to pull down the &lt;strong&gt;People&lt;/strong&gt;, their related &lt;strong&gt;TitlesDirected&lt;/strong&gt; and the TitlesDirected &lt;strong&gt;ScreenFormats&lt;/strong&gt;. (No real world scenario there – just made it up because they’re related properties). The OData query (with magic strings) would look like:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;(from x in People.Expand(&amp;quot;TitlesDirected/ScreenFormats&amp;quot;)        &lt;br /&gt;select x).Take(5)&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If you tried to take the above and translate it to my “no magic string” fix from the previous post you would get something like.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;(from x in People.Expand(p =&amp;gt; p.TitlesDirected /* Now what? dead end. /ScreenFormats*/ )        &lt;br /&gt;select x).Take(5)         &lt;br /&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now that the problem in my solution was apparent, and using his example as a quick guide (It wasn’t quite what I was looking for, but had the general theme). The solution became more than a few lines of code and I wanted to wrap some tests around the whole thing just to verify it was all working correctly…&lt;/p&gt;  &lt;h4&gt;ODataMuscle was born:&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://github.com/Staxmanade/ODataMuscle"&gt;http://github.com/Staxmanade/ODataMuscle&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Sorry for the name. Just think of “Strong Typing” your OData queries and giving them a little Muscle. I threw this little project up on github since this blog is not the best place to version code and if anyone felt inclined to extend it they could easily fork it and do so.&lt;/p&gt;  &lt;p&gt;I hacked the initial version together, and once a co-worker of mine was done with it I think he cleaned it up nicely.&lt;/p&gt;  &lt;p&gt;This new version now supports expanding not only &lt;strong&gt;child properties&lt;/strong&gt;, but &lt;strong&gt;grandchild properties&lt;/strong&gt; and &lt;strong&gt;grandchild properties of collections&lt;/strong&gt;. (That doesn’t seem to translate well…)&lt;/p&gt;  &lt;p&gt;EX: our little Netflix example from above would now look like &lt;/p&gt;  &lt;blockquote&gt;&lt;font face="Courier New"&gt;(from x in People.Expand(p =&amp;gt; p.TitlesDirected.Expand(p2 =&amp;gt; p2.ScreenFormats))      &lt;br /&gt;select x).Take(5)&lt;/font&gt;&lt;/blockquote&gt;  &lt;p&gt;Which would translate into the following query&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a title="http://odata.netflix.com/catalog/People()?$top=5&amp;amp;$expand=TitlesDirected/ScreenFormats" href="http://odata.netflix.com/catalog/People()?$top=5&amp;amp;$expand=TitlesDirected/ScreenFormats"&gt;http://odata.netflix.com/catalog/People()?$top=5&amp;amp;$expand=TitlesDirected/ScreenFormats&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Thanks to &lt;a href="http://elegantcode.com/2010/09/21/odatas-dataservicequery-and-removing-the-expandmagicstrings/#comment-58997"&gt;mynkow&lt;/a&gt; for the initial feedback and I hope this helps someone else…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-5002727350577783616?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/m62X3AmKq1jSXZfMtzysBvxEbIM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m62X3AmKq1jSXZfMtzysBvxEbIM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/m62X3AmKq1jSXZfMtzysBvxEbIM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m62X3AmKq1jSXZfMtzysBvxEbIM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/HnHBpODpPAc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/5002727350577783616/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=5002727350577783616" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/5002727350577783616?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/5002727350577783616?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/HnHBpODpPAc/odatas-dataservicequery-and-removing.html" title="OData’s DataServiceQuery and removing the .Expand(“MagicStrings”) –Part II" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2010/10/odatas-dataservicequery-and-removing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYCRHs_eip7ImA9Wx5WEEo.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-3810950782820740062</id><published>2010-09-21T06:52:00.001-07:00</published><updated>2010-09-21T06:52:45.542-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-21T06:52:45.542-07:00</app:edited><title>OData’s DataServiceQuery and removing the .Expand(“MagicStrings”)</title><content type="html">&lt;p&gt;I was experimenting recently with the .Net implementation of &lt;a href="http://www.odata.org/" target="_blank"&gt;OData&lt;/a&gt; and ran across one of my pet peeves. “Magic Strings”. Apparently, the .Net community’s definition of magic strings is close but seems slightly different from &lt;a href="http://en.wikipedia.org/wiki/Magic_string_(programming)" target="_blank"&gt;Wikipedia&lt;/a&gt;. Therefore the magic strings I’m talking about here are what you’ll find on such posts as “&lt;a href="http://codebetter.com/blogs/matthew.podwysocki/archive/2009/03/19/functional-net-lose-the-magic-strings.aspx" target="_blank"&gt;Functional .Net – Lose the Magic Strings&lt;/a&gt;.”&lt;/p&gt;  &lt;p&gt;I don’t want to get into the magic string debate here, just that I want to snapshot this little helper (for when I need to remember to write it again and don’t want to “figure it out”). This is also not intended to be a complete overview of OData, but I will provide some getter starter links and tips (if you haven’t touched it).&lt;/p&gt;  &lt;h4&gt;Enough background show me the code: (scroll to the bottom if you don’t care about the post)&lt;/h4&gt;  &lt;p&gt;Let’s pretend we want to request a “Title” from the NetFlix OData api.&lt;/p&gt;  &lt;p&gt;You can do this by going to the web browser and typing the following URL&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a title="http://odata.netflix.com/catalog/Titles()?$top=1" href="http://odata.netflix.com/catalog/Titles()?$top=1"&gt;http://odata.netflix.com/catalog/Titles()?$top=1&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Sweet. XML, yippie. Um, no thanks. Let’s try that again. Go download &lt;a href="http://www.linqpad.net/" target="_blank"&gt;LinqPad&lt;/a&gt; (read up on using &lt;a href="http://coderjournal.com/2010/06/using-linqpad-to-query-stack-overflow/" target="_blank"&gt;LinqPad for querying an OData&lt;/a&gt; store)&lt;/p&gt;  &lt;p&gt;Once you’ve connected LinqPad to the NetFlix OData service (&lt;a title="http://odata.netflix.com/catalog/Titles()?$top=1" href="http://odata.netflix.com/catalog"&gt;http://odata.netflix.com/catalog&lt;/a&gt;). Now we’re ready to play around. Our URL “query” above translates in to a C# LINQ statement that looks like the below in LinqPad.&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;(from title in Titles&lt;br /&gt;select title).Take(1).Dump()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  &lt;p&gt;The&lt;strong&gt; .Dump()&lt;/strong&gt; is a LinqPad extension method that displays the object in the results window.&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;If you execute this in LinqPad you will see some data about the first Title form the Netflix OData service. In the results window scroll all the way to the right. Notice all the properties that are supposed to be a Collection&amp;lt;T&amp;gt; but have no data? To retrieve these through OData you have to extend your LINQ query with the Expand(“{propertyName}”) method. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Let’s say we want to include AudioFormats collection when we ask for the first Title.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;(from title in Titles.Expand(&amp;quot;AudioFormats&amp;quot;)&lt;br /&gt;select title).Take(1).Dump()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Notice how we have to explicitly tell the OData service to include this property when we retrieve it form the service. Not only do we explicitly tell the property name, but it’s a magic string (gag, hack, baaa) none the less. If you click on “SQL” in LinqPad result window it will show the URL used for OData queries. Our URL shows the expanded property. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;a title="http://odata.netflix.com/catalog/Titles()?$top=1&amp;amp;$expand=AudioFormats&amp;#13;&amp;#10;" href="http://odata.netflix.com/catalog/Titles()?$top=1&amp;amp;$expand=AudioFormats"&gt;http://odata.netflix.com/catalog/Titles()?$top=1&amp;amp;&lt;strong&gt;$expand=AudioFormats&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now let’s pretend (just for the sake of pretending) that your front end application’s entire data access strategy was going to sit on top of OData. Not saying this is a good thing (or a bad thing). Just sayin…&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;If you have a fairly complex data model and each screen in your application requests slightly different data in a slightly different way, but in the end it all essentially comes down to a set of entities and their relationships. What would you do if you had to “.Expand” all those magic stringed property names. Now, I know we’re all great at search and replace (of the magic strings). However every little step along the way where I can avoid a refactor that will break every other screen in the app, well, I think I just might take that.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now, if you change your LinqPad query from a “C# Expression” to a “C# Program”. Copy the helper class at the bottom of this post in to the bottom of the LinqPad code window. You can now write your linq statement as follows&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;(from title in Titles.Expand(x=&amp;gt; x.AudioFormats)&lt;br /&gt;select title).Take(1).Dump();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Notice the switch from magic strings to an intellisense helping, refactoring safe lambda? This trick is not new. You’ll see it in many .Net open source projects such as mocking frameworks, asp.net MVC projects etc…&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Just wanted to write this little goodie down for the next time I need it. Hope this helps someone else as well.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;public static class ServiceQueryExtension&lt;br /&gt;{&lt;br /&gt;    public static DataServiceQuery&amp;lt;T&amp;gt; Expand&amp;lt;T, TProperty&amp;gt;(&lt;br /&gt;        this DataServiceQuery&amp;lt;T&amp;gt; entities, &lt;br /&gt;        Expression&amp;lt;Func&amp;lt;T, TProperty&amp;gt;&amp;gt; propertyExpressions)&lt;br /&gt;    {&lt;br /&gt;        string propertyName = propertyExpressions.GetMemberName();&lt;br /&gt;        return entities.Expand(propertyName);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static string GetMemberName&amp;lt;T, TProperty&amp;gt;(this Expression&amp;lt;Func&amp;lt;T, TProperty&amp;gt;&amp;gt; propertyExpression)&lt;br /&gt;    {&lt;br /&gt;        return ((MemberExpression)(propertyExpression.Body)).Member.Name;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-3810950782820740062?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RINXDpD7iYeBgxEMk4c_mFuk-0s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RINXDpD7iYeBgxEMk4c_mFuk-0s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RINXDpD7iYeBgxEMk4c_mFuk-0s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RINXDpD7iYeBgxEMk4c_mFuk-0s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/ATXWwMlWGpY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/3810950782820740062/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=3810950782820740062" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/3810950782820740062?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/3810950782820740062?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/ATXWwMlWGpY/odatas-dataservicequery-and-removing.html" title="OData’s DataServiceQuery and removing the .Expand(“MagicStrings”)" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2010/09/odatas-dataservicequery-and-removing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8ERn8ycCp7ImA9WxFWEko.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-3416433536424029482</id><published>2010-05-30T20:00:00.001-07:00</published><updated>2010-05-30T20:00:07.198-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-30T20:00:07.198-07:00</app:edited><title>StatLight V1.0 &amp; V1.1 Released (Silverlight Testing Automation Tool)</title><content type="html">&lt;p&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" align="right" src="http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=StatLight&amp;amp;DownloadId=95275&amp;amp;Build=16586" /&gt;&lt;/p&gt;  &lt;p&gt;About a week ago (May 21st 2010) I uploaded the v1.0 release of &lt;a href="http://statlight.codeplex.com/" target="_blank"&gt;StatLight&lt;/a&gt;. You can review the list of changes on the &lt;a href="http://statlight.codeplex.com/releases/view/40090" target="_blank"&gt;StatLight v1.0 release page&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;I knew once I marked it v1.0, I would probably have updates to it &amp;amp; sure enough… Microsoft’s &lt;a href="http://www.jeff.wilcox.name" target="_blank"&gt;Jeff Wilcox&lt;/a&gt; released a new version of the &lt;a href="http://www.jeff.wilcox.name/2010/05/sl3-utf-bits/" target="_blank"&gt;Microsoft.Silverlight.Testing&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I also incorporated some work done by &lt;a href="http://www.justnbusiness.com/" target="_blank"&gt;Justin&lt;/a&gt; who recently released a version of the &lt;a href="http://unitdriven.codeplex.com/" target="_blank"&gt;UnitDriven&lt;/a&gt; framework.&lt;/p&gt;  &lt;p&gt;So there’s now a &lt;a href="http://statlight.codeplex.com/releases/view/46227" target="_blank"&gt;v1.1&lt;/a&gt; build out.&lt;/p&gt;  &lt;p&gt;Happy Silverlight Testing!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-3416433536424029482?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/te0btKxEqZ-jbD-tAj8ZBud2ntU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/te0btKxEqZ-jbD-tAj8ZBud2ntU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/te0btKxEqZ-jbD-tAj8ZBud2ntU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/te0btKxEqZ-jbD-tAj8ZBud2ntU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/DFdC7PEWK7E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/3416433536424029482/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=3416433536424029482" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/3416433536424029482?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/3416433536424029482?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/DFdC7PEWK7E/statlight-v10-v11-released-silverlight.html" title="StatLight V1.0 &amp;amp; V1.1 Released (Silverlight Testing Automation Tool)" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2010/05/statlight-v10-v11-released-silverlight.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYCQX0_eip7ImA9WxFXFUU.&quot;"><id>tag:blogger.com,1999:blog-4726251688144615011.post-2192210606866418107</id><published>2010-05-22T19:36:00.000-07:00</published><updated>2010-05-22T19:36:00.342-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-22T19:36:00.342-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Silverlight – DataBind to an Anonymous type (Who knew?)</title><content type="html">&lt;p&gt;I searched the web for the idea first. I was certain somebody had blogged about this before, and just wanted to quickly confirm it’s truth. Unfortunately all I came across were work-a-rounds and people telling you it’s not possible. So hopefully this post will help the next guy.&lt;/p&gt;  &lt;p&gt;Since anonymous types are generated in an assembly as &lt;a href="http://msdn.microsoft.com/en-us/library/7c5ka91b(VS.80).aspx"&gt;internal&lt;/a&gt; types, by default, if you try to DataBind to an anonymous type, you’ll probably receive a binding error much like the following.&lt;/p&gt;  &lt;pre&gt;System.Windows.Data Error: &lt;br /&gt;    Cannot get 'Age' value (type 'System.Int32') from '{ Name = World, Age = 23 }' (type '&amp;lt;&amp;gt;f__AnonymousType0`2[System.String,System.Int32]'). &lt;br /&gt;    BindingExpression: Path='Age' DataItem='{ Name = World, Age = 23 }' (HashCode=-172495608);&lt;br /&gt;    target element is 'System.Windows.Controls.TextBlock' (Name=''); &lt;br /&gt;    target property is 'Text' (type 'System.String').. &lt;br /&gt;    System.MethodAccessException: Attempt by method 'System.Windows.CLRPropertyListener.get_Value()' &lt;br /&gt;    to access method '&amp;lt;&amp;gt;f__AnonymousType0`2&amp;lt;System.__Canon,System.Int32&amp;gt;.get_Age()' failed.&lt;br /&gt;&lt;br /&gt;   at System.RuntimeMethodHandle.PerformSecurityCheck(Object obj,...&lt;br /&gt;   at System.RuntimeMethodHandle.PerformSecurityCheck(Object obj,...&lt;br /&gt;   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, Bind...&lt;br /&gt;   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, Bind...&lt;br /&gt;   at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, ...&lt;br /&gt;   at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, ...&lt;br /&gt;   at System.Windows.CLRPropertyListener.get_Value()&lt;br /&gt;   at System.Windows.PropertyAccessPathStep.ConnectToPropertyInSo...&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Turns out, it _IS_ possible to DataBind to an anonymous type in Silverlight.&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;All you have to do is expose your privates. Placing the following into your AssemblyInfo.cs will give the built in bindings the ability DataBind to your object(s).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;    &lt;br /&gt;[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(&amp;quot;System.Windows&amp;quot;)]&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I’m not going to say whether this is or is not a good idea, and I’m sure there’s many ways to abuse it.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Don’t inhale too much of this stuff.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4726251688144615011-2192210606866418107?l=staxmanade.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yR6TmpdWh4AMeYzTYCjGIrnyqAg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yR6TmpdWh4AMeYzTYCjGIrnyqAg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yR6TmpdWh4AMeYzTYCjGIrnyqAg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yR6TmpdWh4AMeYzTYCjGIrnyqAg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevelopingOnStaxmande/~4/a9lhOZLzvA8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://staxmanade.blogspot.com/feeds/2192210606866418107/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4726251688144615011&amp;postID=2192210606866418107" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/2192210606866418107?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4726251688144615011/posts/default/2192210606866418107?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevelopingOnStaxmande/~3/a9lhOZLzvA8/silverlight-databind-to-anonymous-type.html" title="Silverlight – DataBind to an Anonymous type (Who knew?)" /><author><name>Jason.Jarrett</name><uri>http://www.blogger.com/profile/05808925598634142523</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="32" src="http://4.bp.blogspot.com/_L6Vw0x_R3iw/ST9jh2gzVaI/AAAAAAAAACg/QsrKj4ZDT5I/S220/jasonj.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://staxmanade.blogspot.com/2010/05/silverlight-databind-to-anonymous-type.html</feedburner:origLink></entry></feed>

