<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" version="2.0">

<channel>
	<title>Thursday Night</title>
	
	<link>http://blog.paulbetts.org</link>
	<description>Paul Betts's personal website / blog / what-have-you</description>
	<lastBuildDate>Wed, 13 Mar 2013 17:46:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/paulbetts/entries" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="paulbetts/entries" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>39.990764</geo:lat><geo:long>-83.001179</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><item>
		<title>ReactiveUI 4.5 is Released</title>
		<link>http://blog.paulbetts.org/index.php/2013/03/12/reactiveui-4-5-is-released/</link>
		<comments>http://blog.paulbetts.org/index.php/2013/03/12/reactiveui-4-5-is-released/#comments</comments>
		<pubDate>Tue, 12 Mar 2013 17:28:17 +0000</pubDate>
		<dc:creator>Paul Betts</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.paulbetts.org/?p=820</guid>
		<description><![CDATA[Download the binaries for all platforms What&#8217;s New Xamarin.iOS and Xamarin.Mac support This release brings initial support for the latest Xamarin.Mac and Xamarin.iOS. Using ReactiveUI and Xamarin Studio, you can write cross-platform ViewModels and Model classes and bind them to Views using the same RxUI 4.x binding syntax. ReactiveUI knows how to bind to Cocoa [...]]]></description>
			<content:encoded><![CDATA[<p id="downloadrelease"><a href="http://cl.ly/240C0R2A1x3I/download/ReactiveUI%204.5.0.zip">Download the binaries for all platforms</a></p>
<h1 id="whatsnew"><a href="https://github.com/reactiveui/reactiveui/compare/4.4.3...4.5.0">What&#8217;s New</a></h1>
<h2 id="xamarin.iosandxamarin.macsupport">Xamarin.iOS and Xamarin.Mac support</h2>
<p>This release brings initial support for the latest Xamarin.Mac and Xamarin.iOS. Using ReactiveUI and Xamarin Studio, you can write cross-platform ViewModels and Model classes and bind them to Views using the same RxUI 4.x binding syntax.</p>
<ul>
<li>ReactiveUI knows how to bind to Cocoa objects using Key-Value Observing</li>
<li>DeferredScheduler automatically runs code on the Cocoa main runloop</li>
<li>Routing and ViewModelViewHost is supported via a class that attaches to NSView</li>
<li>Command binding understands Cocoa controls via Cocoa target/action framework, including automatically disabling the control when CanExecute is false</li>
<li>Many common controls have implicit binding support</li>
</ul>
<h2>Caveat Emptor</h2>
<p>
There&#8217;s one hack that you have to do on iOS, due to assembly loading working differently. Put in the following lines in your AppDelegate.cs:
</p>
<p><code><br />
      (new ReactiveUI.Xaml.ServiceLocationRegistration()).Register();<br />
      (new ReactiveUI.Routing.ServiceLocationRegistration()).Register();<br />
      (new ReactiveUI.Cocoa.ServiceLocationRegistration()).Register();<br />
</code></p>
<h2 id="experimentalxamarin.androidsupport">Experimental Xamarin.Android support</h2>
<p>This release also includes very basic Xamarin.Android support, including a scheduler that will run code on the Activity&#8217;s main thread.</p>
<h2 id="whatdoineedtorunthis">What do I need to run this??</h2>
<p>You need to run <a href="http://xamarin.com/">Xamarin Studio</a> and make sure to have the latest updates installed from the <strong>Alpha Channel</strong>. </p>
<h2 id="whatelseisnew">What else is New?</h2>
<ul>
<li>Bug fixes in UserError Handling</li>
<li>Extra documentation (thanks @ArturPhilibin!)</li>
<li>Add Debugger support for ReactiveCollection (#204, thanks @distantcam!)</li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=Wc1hw6GXNJU:d196aklkqkI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=Wc1hw6GXNJU:d196aklkqkI:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=Wc1hw6GXNJU:d196aklkqkI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?i=Wc1hw6GXNJU:d196aklkqkI:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.paulbetts.org/index.php/2013/03/12/reactiveui-4-5-is-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ReactiveUI 4.2 is Released!</title>
		<link>http://blog.paulbetts.org/index.php/2012/12/16/reactiveui-4-2-is-released/</link>
		<comments>http://blog.paulbetts.org/index.php/2012/12/16/reactiveui-4-2-is-released/#comments</comments>
		<pubDate>Mon, 17 Dec 2012 01:31:30 +0000</pubDate>
		<dc:creator>Paul Betts</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.paulbetts.org/?p=815</guid>
		<description><![CDATA[After 5 months, 247 commits by 10 different contributors, and 634 total files changed, the stable release of ReactiveUI 4.x is now live! Where can I see a good demo of a basic ReactiveUI 4.2 application? A great example of ReactiveUI 4.2 in action is the sample I did for Erik Meijer and my presentation [...]]]></description>
			<content:encoded><![CDATA[<p>After 5 months, 247 commits by 10 different contributors, and 634 total files changed, the stable release of ReactiveUI 4.x is now live!</p>
<h2 id="wherecaniseeagooddemoofabasicreactiveui4.2application">Where can I see a good demo of a basic ReactiveUI 4.2 application?</h2>
<p>A great example of ReactiveUI 4.2 in action is the sample I did for Erik Meijer and my presentation at QCon. Check out the <a href="https://github.com/reactiveui/RxUI_QCon">code on GitHub</a> &#8211; each commit is an interesting, self-contained step, and it is highly recommended that you step through commit by commit.</p>
<p align="center">
<img src="http://f.cl.ly/items/0G0j3p0C2a2n12053B1f/Image%202012.12.16%205:19:24%20PM.png" alt="" width="75%"/>
</p>
<h2 id="whatdoesthisdoagain">What does this do again?</h2>
<p>ReactiveUI is a M-V-VM framework like MVVM Light or Caliburn.Micro, that is deeply integrated with the Reactive Extensions for .NET. This allows you to write code in your ViewModel that is far more elegant and terse when expressing complex stateful interactions, as well as much simpler handling of async operations.</p>
<h2 id="whatsnew">What&#8217;s new?</h2>
<p>The main thing that is new in ReactiveUI 4.x is the new View Binding support &#8211; check out the blog post <a href="http://blog.paulbetts.org/index.php/2012/08/27/reactiveui-4-0-preview-2-is-here">about the 4.0 Preview Release</a> to learn more about the syntax for view bindings.</p>
<p>Since then, the features added in the 4.1 and 4.2 releases are incremental improvments.</p>
<h3 id="asyncawaiteverywhere">Async / Await everywhere</h3>
<p>ReactiveUI now integrates the <a href="http://nuget.org/packages/Microsoft.Bcl.Async">BCL Async Targeting pack</a> in order to enable async / await support on all platforms that ReactiveUI supports, as long as you&#8217;re using VS2012, as well as porting the Rx await support. This means that you can <em>await IObservable</em>, as well as use await alongside ReactiveUI:</p>
<style type="text/css">/* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) */.ch_code_container  {font-family: monospace;font-size: 10pxheight:100%;}.ch_code_container .imp {font-weight: bold; color: red;}.ch_code_container .kw1 {color: #0600FF;}.ch_code_container .kw2 {color: #FF8000; font-weight: bold;}.ch_code_container .kw3 {color: #008000;}.ch_code_container .kw4 {color: #FF0000;}.ch_code_container .kw5 {color: #000000;}.ch_code_container .co1 {color: #008080; font-style: italic;}.ch_code_container .co2 {color: #008080;}.ch_code_container .coMULTI {color: #008080; font-style: italic;}.ch_code_container .es0 {color: #008080; font-weight: bold;}.ch_code_container .br0 {color: #008000;}.ch_code_container .st0 {color: #808080;}.ch_code_container .nu0 {color: #FF0000;}.ch_code_container .me1 {color: #0000FF;}.ch_code_container .me2 {color: #0000FF;}</style>
<div class="ch_code_container" style="font-family: monospace;font-size: 10pxheight:100%;">locator = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span class="kw3">new</span></a> Geolocator<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
getLocationCommand = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span class="kw3">new</span></a> ReactiveCommand<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>getLocationCommand<br />
&nbsp; &nbsp; .<span class="me1">SelectMany</span><span class="br0">&#40;</span>async x =&gt; await locator.<span class="me1">GetGeopositionAsync</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; .<span class="me1">ToProperty</span><span class="br0">&#40;</span><span class="kw1">this</span>, x =&gt; x.<span class="me1">CurrentPosition</span><span class="br0">&#41;</span>;</div>
<h3 id="viewbindingconvertersupport">View Binding Converter support</h3>
<p>In the initial release of ReactiveUI 4.0, view bindings had to be exact<br />
matches in terms of types when execuiting a binding, which was frustrating to<br />
use when trying to bind a TextBox to an Integer for example. </p>
<p>In ReactiveUI 4.2, View Bindings automatically support conversions between types. This feature is analagous to the IValueConverter class in XAML bindings.These converters are registered using Service Location (RxApp.Register), and custom ones can be easily registered as well. In WPF, the <a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverter.aspx">TypeConverter framework</a> is used to convert between many common types.</p>
<h3 id="callermembernamesupport">CallerMemberName support</h3>
<p>Along with async / await comes CallerMemberName support for RaiseAndSetIfChanged. This means that declaring read/write properties is now even cleaner:</p>
<style type="text/css">/* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) */.ch_code_container  {font-family: monospace;font-size: 10pxheight:100%;}.ch_code_container .imp {font-weight: bold; color: red;}.ch_code_container .kw1 {color: #0600FF;}.ch_code_container .kw2 {color: #FF8000; font-weight: bold;}.ch_code_container .kw3 {color: #008000;}.ch_code_container .kw4 {color: #FF0000;}.ch_code_container .kw5 {color: #000000;}.ch_code_container .co1 {color: #008080; font-style: italic;}.ch_code_container .co2 {color: #008080;}.ch_code_container .coMULTI {color: #008080; font-style: italic;}.ch_code_container .es0 {color: #008080; font-weight: bold;}.ch_code_container .br0 {color: #008000;}.ch_code_container .st0 {color: #808080;}.ch_code_container .nu0 {color: #FF0000;}.ch_code_container .me1 {color: #0000FF;}.ch_code_container .me2 {color: #0000FF;}</style>
<div class="ch_code_container" style="font-family: monospace;font-size: 10pxheight:100%;"><span class="kw4">string</span> _Name;<br />
<span class="kw1">public</span> <span class="kw4">string</span> Name <span class="br0">&#123;</span><br />
&nbsp; &nbsp; get <span class="br0">&#123;</span> <span class="kw1">return</span> _Name; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; set <span class="br0">&#123;</span> <span class="kw1">this</span>.<span class="me1">RaiseAndSetIfChanged</span><span class="br0">&#40;</span>value<span class="br0">&#41;</span>; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
<h3 id="otherchanges">Other changes</h3>
<ul>
<li>Routing behavior changes &#8211; RxRouting will now attempt several common ways to  map ViewModels to Views, and ViewModelToViewFunc is now properly respected (i.e. it will use exactly the view class name returned now)</li>
<li>Service location now always works, even if you don&#8217;t register a custom one.  This means that small projects don&#8217;t need to reference NInject or another IoC container.</li>
<li>ReactiveCollection is now completely rewritten for performance and adds a number of new features, like being able to add ranges of values.</li>
<li>Reflection helpers that were internal methods in ReactiveUI 3.x are now exposed via a public static class called Reflection.</li>
<li>Many, many bugfixes!</li>
</ul>
<h2 id="thanks">Thanks!</h2>
<p>Thanks to the following people who contributed to this release:</p>
<ul>
<li>Phil Haack</li>
<li>Johan Laanstra</li>
<li>Peter Klavins</li>
<li>Cameron MacFarland</li>
<li>Wojciech Bardziński</li>
<li>Brendan Forster</li>
<li>Jimit Ndiaye</li>
<li>John Stovin</li>
<li>Lucas Maloney</li>
<li>Rob Horvath</li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=3rcpTJQxOOg:Yo7lCyV8r0M:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=3rcpTJQxOOg:Yo7lCyV8r0M:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=3rcpTJQxOOg:Yo7lCyV8r0M:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?i=3rcpTJQxOOg:Yo7lCyV8r0M:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.paulbetts.org/index.php/2012/12/16/reactiveui-4-2-is-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ReactiveUI 4.0 Preview 2 is here</title>
		<link>http://blog.paulbetts.org/index.php/2012/08/27/reactiveui-4-0-preview-2-is-here/</link>
		<comments>http://blog.paulbetts.org/index.php/2012/08/27/reactiveui-4-0-preview-2-is-here/#comments</comments>
		<pubDate>Mon, 27 Aug 2012 09:11:58 +0000</pubDate>
		<dc:creator>Paul Betts</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.paulbetts.org/?p=807</guid>
		<description><![CDATA[After coding some pretty interesting new features, as well as to update to the latest released version of Rx (2.01), I am now releasing a preview release of ReactiveUI 4.0. You can get the binaries one of two ways: install-package reactiveui -pre or install-package reactiveui-winrt -pre Download the Zip release from GitHub How does this [...]]]></description>
			<content:encoded><![CDATA[<p>After coding some pretty interesting new features, as well as to update to the latest released version of Rx (2.01), I am now releasing a preview release of ReactiveUI 4.0. You can get the binaries one of two ways:</p>
<ul>
<li><code>install-package reactiveui -pre</code> or <code>install-package reactiveui-winrt -pre</code></li>
<li>Download the Zip release <a href="https://github.com/xpaulbettsx/ReactiveUI/downloads">from GitHub</a></li>
</ul>
<h2 id="howdoesthisbreakbackwardscompatibility">How does this break backwards compatibility?</h2>
<p>A few types have been renamed from 3.x (<code>IViewForViewModel</code> =&gt; <code>IViewFor</code>), a few deprecated methods have been removed (CollectionExtensions), and the biggest one is that NLog is now optional &#8211; if you want to use it, make sure to install the <code>reactiveui-nlog</code> package (it comes by default in the reactiveui metapackage)</p>
<h2 id="whenanynowworkswithanyobject">WhenAny now works with any object!</h2>
<p>WhenAny and ObservableForProperty now work with <em>any</em> .NET object. The runtime will detect what kind of object it is (DependencyObject, INPC, etc) and will determine how to get notifications from it. Note that if you use WhenAny with an object that doesn&#8217;t notify (like a regular .NET object), it will warn you on the logger that changes won&#8217;t be reported. This framework is extensible as well, so on MonoMac for example, notifications for NSObjects will be derived using Key-Value Observing (KVO).</p>
<p>This means that the old <code>ObservableForDP</code> method is now deprecated &#8211; use WhenAny instead.</p>
<h2 id="viewbindings:acompellingreplacementforxamlbindings">View Bindings: A Compelling Replacement for XAML bindings</h2>
<p>There are currently two methods that are used in the XAML world for binding Views to ViewModels. The original method, XAML Bindings (i.e. {Binding Foo}), is quite flexible, but a frustrating aspect of it is that Bindings that are incorrect, due to typos or other mistakes, don&#8217;t generate errors &#8211; you only see the error in the trace output. The Binding syntax can also get quite verbose, and isn&#8217;t always easy to verify because paths are relative to the &#8220;nearest&#8221; DataContext set.</p>
<p>Caliburn Micro decided to take a different approach, with their &#8220;Convention-Based Wireup&#8221; &#8211; this approach decides to automatically wire up named controls with the properties of the same name (even being smart enough to realize that the most &#8220;common&#8221; property of TextBox is the Text property).  While this approach is much more &#8220;wrist friendly&#8221;, it suffers from the same type of run-time failures: CM cannot know whether a binding should exist or not. </p>
<p>ReactiveUI is presenting a new approach: wiring up controls via a declarative syntax. This has a number of advantages:</p>
<ul>
<li>It&#8217;s still wrist-friendly</li>
<li>Bindings are clearly described in one place</li>
<li>Bindings that are never valid (i.e. because the property name has changed)<br />
 break the build.</li>
<li>This binding syntax isn&#8217;t tied to Xaml &#8211; you can effectively use ReactiveUI<br />
 bindings with any UI framework with a bit of work, including Cocoa (MonoMac)<br />
 and GTK#.</li>
</ul>
<p>Consider the following ViewModel, which is valid RxUI 3.x code as well:</p>
<p>
<style type="text/css">/* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) */.ch_code_container  {font-family: monospace;font-size: 10pxheight:100%;}.ch_code_container .imp {font-weight: bold; color: red;}.ch_code_container .kw1 {color: #0600FF;}.ch_code_container .kw2 {color: #FF8000; font-weight: bold;}.ch_code_container .kw3 {color: #008000;}.ch_code_container .kw4 {color: #FF0000;}.ch_code_container .kw5 {color: #000000;}.ch_code_container .co1 {color: #008080; font-style: italic;}.ch_code_container .co2 {color: #008080;}.ch_code_container .coMULTI {color: #008080; font-style: italic;}.ch_code_container .es0 {color: #008080; font-weight: bold;}.ch_code_container .br0 {color: #008000;}.ch_code_container .st0 {color: #808080;}.ch_code_container .nu0 {color: #FF0000;}.ch_code_container .me1 {color: #0000FF;}.ch_code_container .me2 {color: #0000FF;}</style>
<div class="ch_code_container" style="font-family: monospace;font-size: 10pxheight:100%;"><span class="kw1">public</span> <span class="kw4">class</span> MainPageViewModel : ReactiveObject<br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp;<span class="kw4">string</span> _SomeText = &amp;quot;&amp;quot;;<br />
&nbsp;<span class="kw1">public</span> <span class="kw4">string</span> SomeText <span class="br0">&#123;</span><br />
&nbsp;get <span class="br0">&#123;</span> <span class="kw1">return</span> _SomeText; <span class="br0">&#125;</span><br />
&nbsp;set <span class="br0">&#123;</span> <span class="kw1">this</span>.<span class="me1">RaiseAndSetIfChanged</span><span class="br0">&#40;</span>x =&amp;gt; x.<span class="me1">SomeText</span>, value<span class="br0">&#41;</span>; <span class="br0">&#125;</span><br />
&nbsp;<span class="br0">&#125;</span></div>
</p>
<pre><code>  ObservableAsPropertyHelper&lt;string&gt; _FooMirror;
  public string FooMirror {
      get { return _FooMirror.Value; }
  }

  public ReactiveCommand Ok { get; protected set; }

  public MainPageViewModel()
  {
      this.WhenAny(x =&gt; x.SomeText, x =&gt; x.Value)
          .Select(x =&gt; &quot;Foo&quot; + x ?? &quot;&quot;)
          .ToProperty(this, x =&gt; x.FooMirror);

      Ok = new ReactiveCommand();
  }
</code></pre>
<p>}
</p>
<p>In ReactiveUI 4.0, this is the way to wire up the View:</p>
<p>
<style type="text/css">/* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) */.ch_code_container  {font-family: monospace;font-size: 10pxheight:100%;}.ch_code_container .imp {font-weight: bold; color: red;}.ch_code_container .kw1 {color: #0600FF;}.ch_code_container .kw2 {color: #FF8000; font-weight: bold;}.ch_code_container .kw3 {color: #008000;}.ch_code_container .kw4 {color: #FF0000;}.ch_code_container .kw5 {color: #000000;}.ch_code_container .co1 {color: #008080; font-style: italic;}.ch_code_container .co2 {color: #008080;}.ch_code_container .coMULTI {color: #008080; font-style: italic;}.ch_code_container .es0 {color: #008080; font-weight: bold;}.ch_code_container .br0 {color: #008000;}.ch_code_container .st0 {color: #808080;}.ch_code_container .nu0 {color: #FF0000;}.ch_code_container .me1 {color: #0000FF;}.ch_code_container .me2 {color: #0000FF;}</style>
<div class="ch_code_container" style="font-family: monospace;font-size: 10pxheight:100%;"><span class="kw1">public</span> partial <span class="kw4">class</span> MainPage : Page, IViewFor&lt;mainpageviewmodel&gt;<br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp;<span class="kw1">public</span> MainPage<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp;ViewModel = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span class="kw3">new</span></a> MainPageViewModel<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp;<span class="kw1">this</span>.<span class="me1">InitializeComponent</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;&lt;/mainpageviewmodel&gt;</div>
</p>
<pre><code>      // Connect the ViewModel's SomeText to the View's SomeText.Text
      this.Bind(ViewModel, x =&gt; x.SomeText, x =&gt; x.SomeText.Text);

      // Since the View half isn't specified here, it will default to the
      // control with the same name, and use the most &quot;reasonable&quot;
      // property, just like Caliburn Micro
      this.OneWayBind(ViewModel, x =&gt; x.FooMirror);

      // Ditto with Commands, find a Control named &quot;Ok&quot;
      this.BindCommand(ViewModel, x =&gt; x.Ok);
  }

  object IViewFor.ViewModel {
      get { return ViewModel; }
      set { ViewModel = (MainPageViewModel) value; }
  }
  public MainPageViewModel ViewModel { get; set; }
</code></pre>
<p>}
</p>
<p>This feature is a work in progress, and there are definitely some cases that need to be smoothed out. However, I&#8217;d love feedback on whether this is useful or not.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=MFP5PezL4Tw:FHMJmSlvY0w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=MFP5PezL4Tw:FHMJmSlvY0w:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=MFP5PezL4Tw:FHMJmSlvY0w:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?i=MFP5PezL4Tw:FHMJmSlvY0w:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.paulbetts.org/index.php/2012/08/27/reactiveui-4-0-preview-2-is-here/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GitHub for Windows!</title>
		<link>http://blog.paulbetts.org/index.php/2012/05/21/github-for-windows/</link>
		<comments>http://blog.paulbetts.org/index.php/2012/05/21/github-for-windows/#comments</comments>
		<pubDate>Mon, 21 May 2012 16:19:05 +0000</pubDate>
		<dc:creator>Paul Betts</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.paulbetts.org/?p=800</guid>
		<description><![CDATA[The thing I&#8217;ve been working on since August, is finally released! Check it Out: The Blog Post The website]]></description>
			<content:encoded><![CDATA[<p>
The thing I&#8217;ve been working on since August, is finally released!
</p>
<p align=center>
<img src="https://s3.amazonaws.com/github-images/blog/2012/gh4w/dashboard.PNG" width=640 />
</p>
<h2>Check it Out:</h2>
<ul>
<li><a href="https://github.com/blog/1127-github-for-windows">The Blog Post</a></li>
<li><a href="http://windows.github.com">The website</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=D_2yeNspIp8:MakZNnnSriE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=D_2yeNspIp8:MakZNnnSriE:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=D_2yeNspIp8:MakZNnnSriE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?i=D_2yeNspIp8:MakZNnnSriE:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.paulbetts.org/index.php/2012/05/21/github-for-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Announcing ReactiveUI 3.1</title>
		<link>http://blog.paulbetts.org/index.php/2012/04/23/announcing-reactiveui-3-1/</link>
		<comments>http://blog.paulbetts.org/index.php/2012/04/23/announcing-reactiveui-3-1/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 04:35:19 +0000</pubDate>
		<dc:creator>Paul Betts</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.paulbetts.org/?p=789</guid>
		<description><![CDATA[What does ReactiveUI do? ReactiveUI is a M-V-VM framework like MVVM Light or Caliburn.Micro, that is deeply integrated with the Reactive Extensions for .NET. This allows you to write code in your ViewModel that is far more elegant and terse when expressing complex stateful interactions, as well as much simpler handling of async operations. What&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<h2>What does ReactiveUI do?</h2>
<p>
<a href="http://www.reactiveui.net">ReactiveUI</a> is a M-V-VM framework like MVVM Light or Caliburn.Micro, that is deeply integrated with the Reactive Extensions for .NET. This allows you to write code in your ViewModel that is far more elegant and terse when expressing complex stateful interactions, as well as much simpler handling of async operations.
</p>
<h2 id="whatsnewin3.1">What&#8217;s New in 3.1</h2>
<p>Tons of stuff.</p>
<figure>
<img src="http://f.cl.ly/items/0O450X161f2D3G0i3V2o/Image%202012.04.23%208:48:37%20PM.png" alt="" /></figure>
<p>ReactiveUI has improved dramatically since the previous version. Over the next few weeks I&#8217;ll be posting blog articles on how to use new features in ReactiveUI, but here&#8217;s the short list:</p>
<ul>
<li>
<p><strong>User Errors:</strong> &#8211; A new API to separate the generation and presentation of errors that should be presented to the user in a friendly way. This is the Testable, Elegant, user-friendly way to make that <code>MessageBox.Show()</code> call.</p>
</li>
<li>
<p><strong>ReactiveUI.Routing</strong> &#8211; An entirely new component to ReactiveUI, designed for creating multi-page applications using Dependency Injection / IoC, while not being tied to any <em>specific</em> IoC container.</p>
</li>
<li>
<p><strong>First Class Async / Await Support</strong> &#8211; ReactiveUI now allows you to use <code>Task&lt;T&gt;</code> in many places in the framework where it makes sense.</p>
</li>
<li>
<p><strong>Ordering and Filtering of Models</strong> &#8211; using the new <code>CreateDerivedCollection</code> methods, ViewModel collections that &#8220;follow&#8221; Model collections and apply custom filtering / ordering are now easy to create.</p>
</li>
<li>
<p><strong>NLog Logging</strong> &#8211; A rewritten logging framework, based on <a href="http://nlog-project.org/">NLog</a></p>
</li>
<li>
<p>Preliminary support for <strong>WinRT</strong> (including async/await via <a href="http://linqtoawait.net">LinqToAwait</a>) and <strong>Gtk#</strong> on Mono 2.10.</p>
</li>
<li>
<p>An overhaul of how ReactiveUI handles binding errors that results in more reliable applications.</p>
</li>
<li>
<p>Many cleanups to APIs to make using ReactiveUI more straightforward and intuitive</p>
</li>
</ul>
<h2 id="anewsamplekindof:playforwindows">A new sample: Play for Windows</h2>
<figure>
<img src="https://a248.e.akamai.net/camo.github.com/52c8cfd754ea5ac0c9455eff32831582d16395e9/687474703a2f2f636c2e6c792f33443075334e3130324f3144306d3167334231592f496d616765253230323031322e30342e3139253230323a33353a3534253230414d2e706e67" alt="" /></figure>
<p>Many of the new features in ReactiveUI 3.1 were prototyped and refined in <a href="https://github.com/play/play-windows">Play for Windows</a>, a .NET 4.5 client for the <a href="https://github.com/play/play">Play Music Server</a>. This application is a production-quality application that demonstrates many of the new ReactiveUI features, especially Routing and RxUI.Testing.</p>
<h2 id="breakingchanges">Breaking Changes</h2>
<p>ReactiveUI is now following the <a href="http://semver.org/">SemVer</a> versioning scheme. This means, that v3 now has <strong>breaking changes</strong>. However, apart from one, these changes shouldn&#8217;t be overly difficult to fix.</p>
<ul>
<li>
<p><strong>Deprecated Platforms</strong> &#8211; ReactiveUI has <strong>dropped support</strong> for .NET 3.5, SL4, and WP7.0. You must upgrade to .NET 4.0/4.5, SL5, or WP7.1 (Mango) to use ReactiveUI 3.1. Rx has decided to deprecate these platforms soon as well.</p>
</li>
<li>
<p><strong>Logging Changes</strong> &#8211; The interface between RxUI 2.5&#8217;s <code>Log()</code> method and RxUI 3.1&#8217;s is slightly different (methods like &#8220;InfoFormat&#8221; are now just &#8220;Info&#8221;, etc.)</p>
</li>
<li>
<p><strong>Disabled Bindings now Crash</strong> &#8211; In ReactiveUI 2.5, if an <code>ObservableAsPropertyHelper</code> or the <code>CanExecute</code> of a <code>ReactiveCommand</code> terminates with OnError, the exception disappears into the ether and the binding stops working. In RxUI 3.1, this will result in an item being sent to the new <code>ThrownExceptions</code> Observable.</p>
<p>This Observable is <em>special</em>, in that if there are no Subscribers, items gets sent to the global <code>RxApp.DefaultExceptionHandler</code>, which by default,  crashes the application.</p>
</li>
<li><strong>Deprecated / Changed Methods</strong> &#8211; Some methods, particularly in <code>MessageBus</code> and <code>ReactiveUI.Testing</code>, have changed names to be more consistent with Rx (i.e. <code>AdvanceByMs</code> vs. 2.5&#8217;s <code>RunToMilliseconds</code>), or have been removed, such as <code>ObservableCollectionView</code> (use <code>CreateDerivedCollection()</code> instead).</li>
</ul>
<h2 id="thanks">Thanks!</h2>
<p>Thanks to the following people for contributing patches to ReactiveUI 3.1:</p>
<ul>
<li>Phil Haack</li>
<li>Johan Laanstra</li>
<li>Lowell Smith</li>
<li>Stanislaw Swierc</li>
<li>Tim Clem</li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=oaINRqwalWU:uj_R3qonVTg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=oaINRqwalWU:uj_R3qonVTg:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=oaINRqwalWU:uj_R3qonVTg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?i=oaINRqwalWU:uj_R3qonVTg:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.paulbetts.org/index.php/2012/04/23/announcing-reactiveui-3-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SassAndCoffee 1.1 issues with AppHarbor</title>
		<link>http://blog.paulbetts.org/index.php/2011/09/27/sassandcoffee-1-1-issues-with-appharbor/</link>
		<comments>http://blog.paulbetts.org/index.php/2011/09/27/sassandcoffee-1-1-issues-with-appharbor/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 21:17:59 +0000</pubDate>
		<dc:creator>Paul Betts</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.paulbetts.org/?p=787</guid>
		<description><![CDATA[SassAndCoffee 1.1 currently doesn&#8217;t work on AppHarbor, and returns a 502 Gateway Error on the site. I&#8217;m working with the AppHarbor folks to fix this as soon as I can. Sorry about this! The Details On startup, we write out the V8 DLL to a temporary directory and call Assembly.Load to load it. Unfortunately, even [...]]]></description>
			<content:encoded><![CDATA[<p>
SassAndCoffee 1.1 currently doesn&#8217;t work on AppHarbor, and returns a <b>502 Gateway Error</b> on the site. I&#8217;m working with the AppHarbor folks to fix this as soon as I can. Sorry about this!
</p>
<h2>The Details</h2>
<p>
On startup, <a href="https://github.com/xpaulbettsx/SassAndCoffee/blob/master/SassAndCoffee.Core/JavascriptInterop.cs#L170">we write out the V8 DLL to a temporary directory</a> and call Assembly.Load to load it. Unfortunately, even though the write succeeds, the Load fails for some reason. On AppHarbor, we would always fall back to Jurassic, but in 1.1 I disabled this fallback because of performance issues (and because it made it harder to debug the V8 load failures).</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=tZrq_YEtxv8:UvIBHtS1mNo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=tZrq_YEtxv8:UvIBHtS1mNo:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=tZrq_YEtxv8:UvIBHtS1mNo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?i=tZrq_YEtxv8:UvIBHtS1mNo:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.paulbetts.org/index.php/2011/09/27/sassandcoffee-1-1-issues-with-appharbor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fixing iTunes “Unknown Error -200″ on OS X</title>
		<link>http://blog.paulbetts.org/index.php/2011/09/26/fixing-itunes-unknown-error-200-on-os-x/</link>
		<comments>http://blog.paulbetts.org/index.php/2011/09/26/fixing-itunes-unknown-error-200-on-os-x/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 00:08:32 +0000</pubDate>
		<dc:creator>Paul Betts</dc:creator>
				<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://blog.paulbetts.org/?p=784</guid>
		<description><![CDATA[If you&#8217;re hitting this error on iTunes startup, possibly because you installed iLife &#8217;11, there&#8217;s an easy way to fix it. Open Terminal.app, and type the following commands: /* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) */.ch_code_container {font-family: monospace;font-size: 10pxheight:100%;}.ch_code_container .imp {font-weight: bold; color: red;}.ch_code_container .kw1 {color: #b1b100;}.ch_code_container .kw3 {color: #000066;}.ch_code_container .co1 {color: #808080; font-style: italic;}.ch_code_container [...]]]></description>
			<content:encoded><![CDATA[<p>
If you&#8217;re hitting this error on iTunes startup, possibly because you installed iLife &#8217;11, there&#8217;s an easy way to fix it. Open Terminal.app, and type the following commands:
</p>
<style type="text/css">/* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) */.ch_code_container  {font-family: monospace;font-size: 10pxheight:100%;}.ch_code_container .imp {font-weight: bold; color: red;}.ch_code_container .kw1 {color: #b1b100;}.ch_code_container .kw3 {color: #000066;}.ch_code_container .co1 {color: #808080; font-style: italic;}.ch_code_container .es0 {color: #000099; font-weight: bold;}.ch_code_container .br0 {color: #66cc66;}.ch_code_container .st0 {color: #ff0000;}.ch_code_container .nu0 {color: #cc66cc;}.ch_code_container .re0 {color: #0000ff;}.ch_code_container .re1 {color: #0000ff;}.ch_code_container .re2 {color: #0000ff;}</style>
<div class="ch_code_container" style="font-family: monospace;font-size: 10pxheight:100%;">sudo update_dyld_shared_cache -force<br />
sudo restart</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=FwXLqzVKjRg:ufyEn1z2oVo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=FwXLqzVKjRg:ufyEn1z2oVo:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=FwXLqzVKjRg:ufyEn1z2oVo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?i=FwXLqzVKjRg:ufyEn1z2oVo:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.paulbetts.org/index.php/2011/09/26/fixing-itunes-unknown-error-200-on-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Converting a Win8 Install Directory to an ISO</title>
		<link>http://blog.paulbetts.org/index.php/2011/09/17/converting-a-win8-install-directory-to-an-iso/</link>
		<comments>http://blog.paulbetts.org/index.php/2011/09/17/converting-a-win8-install-directory-to-an-iso/#comments</comments>
		<pubDate>Sat, 17 Sep 2011 21:15:28 +0000</pubDate>
		<dc:creator>Paul Betts</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.paulbetts.org/?p=778</guid>
		<description><![CDATA[As part of the BUILD conference, attendees got a USB key packed with all of the latest preview software: copies of Win8 client and server, as well as an installer for Visual Studio 11. However, they distributed the Windows installers as folders instead of standalone ISOs to make it easier to upgrade. Can I make [...]]]></description>
			<content:encoded><![CDATA[<p>
As part of the BUILD conference, attendees got a USB key packed with all of the latest preview software: copies of Win8 client and server, as well as an installer for Visual Studio 11. However, they distributed the Windows installers as folders instead of standalone ISOs to make it easier to upgrade.
</p>
<h2>Can I make an ISO out of a Windows install directory? Definitely!</h2>
<p>
Here&#8217;s how to take any Windows Install directory from Vista onward and turn it into a DVD ISO:
</p>
<ol>
<li>Download oscdimg.exe from <a href="http://www.paulbetts.org/projects/oscdimg.exe">here</a>, which I&#8217;m certainly hosting illegally. Don&#8217;t tell anyone in Redmond. (This is a public tool, just normally wrapped in a huge download; I&#8217;m hosting it solely for convenience sake)</li>
<li>Open up cmd and copy oscdimg.exe to the *parent* directory of the Windows install (i.e. if it&#8217;s in E:\Windows8, copy it to E:\)</li>
<li>Cd to inside the Windows directory (i.e. the folders should be &#8220;Boot&#8221;, &#8220;Efi&#8221;, &#8220;Sources&#8221;, etc)</li>
<li>Run the following command:</li>
<style type="text/css">/* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) */.ch_code_container  {font-family: monospace;font-size: 10pxheight:100%;}.ch_code_container .imp {font-weight: bold; color: red;}.ch_code_container .kw1 {color: #b1b100;}.ch_code_container .kw3 {color: #000066;}.ch_code_container .co1 {color: #808080; font-style: italic;}.ch_code_container .es0 {color: #000099; font-weight: bold;}.ch_code_container .br0 {color: #66cc66;}.ch_code_container .st0 {color: #ff0000;}.ch_code_container .nu0 {color: #cc66cc;}.ch_code_container .re0 {color: #0000ff;}.ch_code_container .re1 {color: #0000ff;}.ch_code_container .re2 {color: #0000ff;}</style>
<div class="ch_code_container" style="font-family: monospace;font-size: 10pxheight:100%;">..\oscdimg.exe -u2 -h . -bboot\etfsboot.com ..\MyCoolNewImage.iso</div>
</ol>
<p>
That&#8217;s all there is to it! Now you&#8217;ve got a shiny new bootable ISO that you can load into a VM or burn to DVD.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=UXmxmzy0G2k:BYiMUzuws1s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=UXmxmzy0G2k:BYiMUzuws1s:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=UXmxmzy0G2k:BYiMUzuws1s:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?i=UXmxmzy0G2k:BYiMUzuws1s:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.paulbetts.org/index.php/2011/09/17/converting-a-win8-install-directory-to-an-iso/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SassAndCoffee 1.1 Released</title>
		<link>http://blog.paulbetts.org/index.php/2011/09/01/sassandcoffee-1-1-released/</link>
		<comments>http://blog.paulbetts.org/index.php/2011/09/01/sassandcoffee-1-1-released/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 04:32:39 +0000</pubDate>
		<dc:creator>Paul Betts</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mono / .NET]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.paulbetts.org/?p=774</guid>
		<description><![CDATA[What does SassAndCoffee do? SassAndCoffee is a library for ASP.NET (both MVC and old-school WebForms) that adds drop-in support for two new languages: Sass and SCSS, a language that allows you to write reusable, more structured CSS, as well as CoffeeScript, which is a JavaScript dialect that is much more syntactically elegant, but still preserving [...]]]></description>
			<content:encoded><![CDATA[<h2>What does SassAndCoffee do?</h2>
<p>
<a href="http://github.com/xpaulbettsx/sassandcoffee">SassAndCoffee is a library for ASP.NET</a> (both MVC and old-school WebForms) that adds drop-in support for two new languages: <a href="http://www.sass-lang.com/tutorial.html">Sass and SCSS</a>, a language that allows you to write reusable, more structured CSS, as well as <a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a>, which is a JavaScript dialect that is much more syntactically elegant, but still preserving 100% compatibility with regular JavaScript.
</p>
<h2>How to use SassAndCoffee</h2>
<ul>
<li>Add the package reference <a href="http://nuget.org/List/Packages/SassAndCoffee">via NuGet</a></li>
<li>Add a .coffee, .scss, or .sass file to your project (an easy test is to just rename a CSS file to .scss)</li>
<li>Reference the file as if it was a CSS or .JS file (i.e. to reference &#8220;scripts/test.coffee&#8221;, you should reference &#8220;scripts/test.js&#8221; in your SCRIPT tag)</li>
<li>To get the minified version of a file (either a coffee file or a standard js file), ask for the &#8220;.min.js&#8221; version (i.e. &#8220;scripts/test.min.js&#8221;)</li>
</ul>
<h2>What&#8217;s New in SassAndCoffee 1.1 &#8211; Update All The Things</h2>
<p>
SassAndCoffee updates its version of V8 to the latest released code that runs even faster, as well as the latest released version of CoffeeScript, version 1.1.2. In an attempt to catch some tricky-to-debug errors that folks are having on 64-Bit IIS, I&#8217;ve also disabled Jurassic on 64-bit AppPools, since it was unusably slow anyways. This means that if V8 fails, SassAndCoffee will crash and hopefully provide some debugging information to assist in telling me what&#8217;s going on.
</p>
<h2>What else is new?</h2>
<p>
SassAndCoffee now correctly handles JavaScript with non-ASCII characters, as long as the file is encoded in UTF-8. Thanks to <a href="https://github.com/radiy">Roman Kvasov</a> who taught me a thing or two about V8 that I didn&#8217;t know, as well as contributing the code to fix it!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=BOWLbhb1Scc:bIPCiy1w-R8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=BOWLbhb1Scc:bIPCiy1w-R8:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=BOWLbhb1Scc:bIPCiy1w-R8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?i=BOWLbhb1Scc:bIPCiy1w-R8:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.paulbetts.org/index.php/2011/09/01/sassandcoffee-1-1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SassAndCoffee hits 1.0!</title>
		<link>http://blog.paulbetts.org/index.php/2011/07/12/sassandcoffee-hits-1-0/</link>
		<comments>http://blog.paulbetts.org/index.php/2011/07/12/sassandcoffee-hits-1-0/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 03:23:53 +0000</pubDate>
		<dc:creator>Paul Betts</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mono / .NET]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.paulbetts.org/?p=769</guid>
		<description><![CDATA[What does SassAndCoffee do? SassAndCoffee is a library for ASP.NET (both MVC and old-school WebForms) that adds drop-in support for two new languages: Sass and SCSS, a language that allows you to write reusable, more structured CSS, as well as CoffeeScript, which is a JavaScript dialect that is much more syntactically elegant, but still preserving [...]]]></description>
			<content:encoded><![CDATA[<h2>What does SassAndCoffee do?</h2>
<p>
<a href="http://github.com/xpaulbettsx/sassandcoffee">SassAndCoffee is a library for ASP.NET</a> (both MVC and old-school WebForms) that adds drop-in support for two new languages: <a href="http://www.sass-lang.com/tutorial.html">Sass and SCSS</a>, a language that allows you to write reusable, more structured CSS, as well as <a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a>, which is a JavaScript dialect that is much more syntactically elegant, but still preserving 100% compatibility with regular JavaScript.
</p>
<h2>How to use SassAndCoffee</h2>
<ul>
<li>Add the package reference <a href="http://nuget.org/List/Packages/SassAndCoffee">via NuGet</a></li>
<li>Add a .coffee, .scss, or .sass file to your project (an easy test is to just rename a CSS file to .scss)</li>
<li>Reference the file as if it was a CSS or .JS file (i.e. to reference &#8220;scripts/test.coffee&#8221;, you should reference &#8220;scripts/test.js&#8221; in your SCRIPT tag)</li>
<li>To get the minified version of a file (either a coffee file or a standard js file), ask for the &#8220;.min.js&#8221; version (i.e. &#8220;scripts/test.min.js&#8221;)</li>
</ul>
<h2>What&#8217;s New in SassAndCoffee 1.0 &#8211; Rigging VS2010 to be compatible</h2>
<p>
The most common issue that people experience with using SassAndCoffee wasn&#8217;t actually an issue with the code at all &#8211; the symptoms were that it would work fine on their development machine, but when they deployed to production, all the SCSS/CoffeeScript files would return 404 File Not Found.
</p>
<p>
Why? Since VS2010 doesn&#8217;t recognize these files, <b>it sets its build action to &#8216;None&#8217;</b>, which means the files won&#8217;t be deployed. However, since VS runs your app locally from the same directory, it would still find the files on your box. The ultimate case of &#8220;Works On My Machine&#8221;!
</p>
<p align="center">
<img src="http://blog.paulbetts.org/wp-photos/scssproperties.png" /><br />
<i>The Properties Dialog, where you can reset this property</i>
</p>
<h2>Well that&#8217;s annoying. How do you fix it?</h2>
<p>
Now, when you install SassAndCoffee, you will see a dialog offering to install a file onto your box &#8211; this &#8220;pkgdef&#8221; file will configure VS to consider Sass/SCSS/Coffee files as Content. <a href="http://blog.andreloker.de/post/2010/07/02/Visual-Studio-default-build-action-for-non-default-file-types.aspx">Here&#8217;s the details on how this works</a>.
</p>
<h2>Configurable Caching Support</h2>
<p>
SassAndCoffee now has three types of cache options, which can be configured by adding a setting to the <code>appSettings</code> block with a key of <code>SassAndCoffee.Cache</code>:
</p>
<ul>
<li><b>NoCache</b> &#8211; Compile every file when requested, don&#8217;t cache anything</li>
<li><b>InMemoryCache</b> &#8211; Cache a limited number of files in-memory, but don&#8217;t persist anything to disk</li>
<li><b>FileCache</b> &#8211; The default option (and previous behavior) &#8211; cache compiled files in App_Data</li>
</ul>
<h2>What else is new?</h2>
<ul>
<li>SassAndCoffee had its <b>first external contributions</b> by Steven Robbins and Ken Browning! You have no idea how excited I am about this.</li>
<li>The biggest change was <b>support for <a href="https://github.com/NancyFx/Nancy">NancyFx</a></b> by Steven&#8217;s Herculean effort to decouple the core compilation code from the ASP.NET pipeline. SassAndCoffee is now in a great place for other non-ASP.NET frameworks to use as well, such as Manos.</li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=BOr82LqgTpY:4wVymJb9CWA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=BOr82LqgTpY:4wVymJb9CWA:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/paulbetts/entries?a=BOr82LqgTpY:4wVymJb9CWA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/paulbetts/entries?i=BOr82LqgTpY:4wVymJb9CWA:V_sGLiPBpWU" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.paulbetts.org/index.php/2011/07/12/sassandcoffee-hits-1-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
