<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" media="screen" href="/styles/xslt/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:c9="http://channel9.msdn.com">
<channel>
	<title>Comment Feed for bdesmet</title>
	<atom:link rel="self" type="application/rss+xml" href="http://channel9.msdn.com/Niners/bdesmet/Comments/RSS"></atom:link>
	<image>
		<url>http://mschnlnine.vo.llnwd.net/d1/Dev/App_Themes/C9/images/feedimage.png</url>
		<title>bdesmet</title>
		<link></link>
	</image>
	<description></description>
	<link></link>
	<language>en</language>
	<pubDate>Thu, 23 May 2013 09:47:00 GMT</pubDate>
	<lastBuildDate>Thu, 23 May 2013 09:47:00 GMT</lastBuildDate>
	<generator>Rev9</generator>
	<item>
		<title>Re: Bart De Smet: Rx 2.0 RTM and RTW</title>
		<description>
			<![CDATA[<p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Rx-20-RTM-and-RTW#c634822156488046327">Herman van der Blom</a>: Rx v2.0 won't be part of the Windows Phone 8 SDK, but the existing Microsoft.Phone.Reactive will still be supported in order for users of WP7 to migrate to WP8. We will release an Rx v2.0 build with Windows Phone 8 support though, also based on Portable Library to allow sharing between .NET 4.5, .NET 4.5 for Windows Store apps, and Windows Phone 8.</p><p>In order to use ForkJoin, you'll have to add a reference to the experimental Rx assembly, but it should continue to work as it did before. Alternatively, if this is single-value async, you could also use Task.WaitAll or Observable.CombineLatest to achieve a similar effect, without having to rely on the experimental functionality.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-20-RTM-and-RTW#c634823837742770633</link>
		<pubDate>Tue, 04 Sep 2012 19:29:34 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-20-RTM-and-RTW#c634823837742770633</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Rx 2.0 RTM and RTW</title>
		<description>
			<![CDATA[<p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Rx-20-RTM-and-RTW#c634809312623433351">dcuccia</a>: In fact, the hardest part was working with a moving target, i.e. .NET Framework 4.5 Beta, RC, and internal interim builds, while developing Rx v2.0. If we'd only start now, with the final bits of .NET 4.5 and Portable Library support, it wouldn't be as hard.</p><p>The main thing to decide is what you want to do with platform-specific functionality that ended up in a bottom layer of your library: keep the API surface there, discover it at runtime, and mark it deprecated to stimulate new usage patterns; or have a clean slate release for Portable Library with migration guidance for the types/members that moves. (In fact, if you don't have to slice a type because it had both platform neutral and platform-specific stuff in it, you can simply move the type up the layer map.) As explained, we went with the second approach initially, but the benefits diminished as we went along, simply because Portable Library's intersection between our target platforms got much better by RTM.</p><p>If I'd be doing it again now, I'd really strive for a portable core that eliminates platform-specific copies right from the start. Based on what falls out of the intersection, I'd decide whether some kind of enlightenment mechanism is required / warranted or not.</p><p>To implement such an enlightenment mechanism, the main trick is Type.GetType(string, bool) to look for a known type in a known assembly (ideally demanding an exact&nbsp;version match, saving you from future headaches) implementing a known interface. Then decide whether you can do a graceful fallback if the module is missing. At the same time, try making all deployment vehicles such that the enlightenment assembly is always installed (e.g. as part of a NuGet package, or in an Extension SDK).</p><p>I'll chat with the Portable Library team about documentation and guidance plans.</p><p>Hope this helps,<br>-Bart</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-20-RTM-and-RTW#c634809414768956690</link>
		<pubDate>Sun, 19 Aug 2012 02:51:16 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-20-RTM-and-RTW#c634809414768956690</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Rx v2.0 Release Candidate - Time, Error Handling, Event Subscription</title>
		<description>
			<![CDATA[<p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Rx-20-RC-Time-Error-Handling-SafeSubscribe-and-More#c634775369203218863">Thorium</a>: The only new implicit thing for FromEvent* usage is an implicit <strong>SubscribeOn</strong> based on the SynchronizationContext.Current captured <em>at the point of query construction</em>. In other words, only the side-effects of subscribing (&#43;= on the event) and disposing the subscription (-= on the event) are marshaled to the right context, in order to avoid issues for thread-affine events (e.g. in Windows XAML for Metro Style apps). There's <span>no</span> implicit ObserveOn behavior, hence all existing guidance to insert this explicitly stays the same.</p><p>Long story short: you don't have to change any of your code.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-20-RC-Time-Error-Handling-SafeSubscribe-and-More#c634779860587084214</link>
		<pubDate>Sun, 15 Jul 2012 21:54:18 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-20-RC-Time-Error-Handling-SafeSubscribe-and-More#c634779860587084214</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Rx v2.0 Release Candidate - Time, Error Handling, Event Subscription</title>
		<description>
			<![CDATA[<p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Rx-20-RC-Time-Error-Handling-SafeSubscribe-and-More#c634764714629973848">Maddus Mattus</a>: No need for extremism here <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif?v=c9' alt='Smiley' />. Just like methods can be turned into first class objects using delegates, events can be turned into first class objects using observable sequences.</p><p>The analogy extends to a comparison of advantages and disadvantages between both approaches. For example, objects have a cost that may not be warranted for a lot of simple events (e.g. button clicks). Also, events are well-suited for a code-centric usage (e.g. kicking off a simple action), while observable sequences provide for&nbsp;a data-centric approach (e.g. computing statistics over temporal data).</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-20-RC-Time-Error-Handling-SafeSubscribe-and-More#c634764870402591792</link>
		<pubDate>Thu, 28 Jun 2012 13:30:40 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-20-RC-Time-Error-Handling-SafeSubscribe-and-More#c634764870402591792</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Rx v2.0 Release Candidate - Time, Error Handling, Event Subscription</title>
		<description>
			<![CDATA[<p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Rx-20-RC-Time-Error-Handling-SafeSubscribe-and-More#c634759703444562759">Maddus Mattus</a>: The XML comments have been improved signficantly in RC, and we're working on improving the docs in general by RTM.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-20-RC-Time-Error-Handling-SafeSubscribe-and-More#c634759716166711514</link>
		<pubDate>Fri, 22 Jun 2012 14:20:16 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-20-RC-Time-Error-Handling-SafeSubscribe-and-More#c634759716166711514</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Inside Rx 2.0 Beta</title>
		<description>
			<![CDATA[<p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634682252707960620">LeeCampbell</a>: At this point, there are no magic tricks to know whether an operator is part of a &quot;safe&quot; chain. What's really going on here is a different approach to writing operators, based on custom observer implementations rather than the anonymous implementation approach through lambda-based Subscribe calls to the sources of the operator.</p><p>In order to ensure &quot;global&quot; safety, there's a minimal amount of cheap safeguarding based on swapping out observers for mute ones as soon as an operator's input reaches a terminal state. So, multiple terminal messages (invalid from the grammar's point of view) are silenced but the first one, and the place this happens is inside the custom operator noticing this (rather than in the Subscribe method's wrapping of the observer in the past).</p><p>As for concurrent notifications (which are invalid too), there has never been true safeguarding against this, so inputs are assumed to be safe. Only&nbsp;when an operator has to deal with multiple sources, it will do proper orchestration internally (e.g. Merge has to ensure we never talk to the outgoing observer in a concurrent manner), using locks or other approaches. However, when an ill-behaved producer is in the mix, behavior is undefined (e.g. a Subject&lt;T&gt; that exhibits concurrent messages). In case such a producer exists, one has to safeguard the pipeline using Synchronize.</p><p>When implementing sources or custom operators, we recommend to use ObservableBase&lt;T&gt; and Observable.Create, respectively. Those are the safest way to get things right. In fact, for custom operators, the use of composition of existing operators is a good start. Going forward, we may provide more advanced &quot;power user&quot; facilities to write more efficient custom operators using techniques similar to the ones we're using internally now. However, with power comes responsibility, so users of such primitives and implementation patterns need to have a thorough understanding of expectations with regards to observable sequences, the observer grammar, etc.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634683255302266250</link>
		<pubDate>Mon, 26 Mar 2012 02:25:30 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634683255302266250</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Inside Rx 2.0 Beta</title>
		<description>
			<![CDATA[<p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634678537021841993">Kim</a>: The platform enhancements are loaded through a Type.GetType call, followed by an instantiation of the discovered type (if any). The resulting object is cached so subsequent uses of the service don't take a performance hit.</p><p>The BCL/CLR teams are aware of the need for such tricks in some types of APIs, and we may see more guidance or helper functionality to address this going forward (no promises implied in this statement). For a lot of Portable Libraries though, one can live without such mechanisms. Think about class libraries for a data model that can be reused across Windows Phone, Metro, Silverlight, classic desktop, etc.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634678678235443768</link>
		<pubDate>Tue, 20 Mar 2012 19:17:03 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634678678235443768</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Inside Rx 2.0 Beta</title>
		<description>
			<![CDATA[<p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634675248093477949">Maddus Mattus</a>: Still need to allocate the IDisposable. This said, not that big of a deal, especially if you don't ever need to&nbsp;unsubscribe, meaning the object becomes food for a Gen0 collection.</p><p>As soon as you start composing events, the benefits far outweigh the cost. A lot of the composition of Rx builds on the ability to compose subscriptions. Subscribing to the merge of N sources means returning an IDisposable that holds on to the underlying N source subscriptions. It's as simple as that.</p><p>If you'd measure all sorts of performance metrics in real-world scenarios, I doubt the disposable object graph will show up as a relevant influence. (Btw, we have many IDisposable implementations internally in Rx, also to allow for reuse of objects.) It definitely didn't in the Rx v2.0 Beta analysis of performance. Also, typically there's 1 subscription for a whole bunch of events flowing through the pipeline: 1 &lt;&lt;&lt;&lt;&lt; N.</p><p>To conclude, my remark is mostly about the debate whether or not observables are a primitive or an abstraction over a primitive. Just like delegates are first-class representations of methods, observables are first-class representations of events (which are method pairs for our purposes). In this analogy, one doesn't &quot;convert&quot; (e.g. through method group conversion in C#, see <a href="http://www.ecma-international.org/publications/standards/Ecma-334.htm">ECMA 334</a>, section 13.6) a method into a delegate unless you want to do a more functional style composition (e.g. LINQ to Objects heavily relies on delegates). The same holds for observables, with the only difference being a bit more friction to convert an event to its first-class representation (i.e. there's no method group equivalent for event members).</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634675272586538165</link>
		<pubDate>Fri, 16 Mar 2012 20:40:58 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634675272586538165</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Inside Rx 2.0 Beta</title>
		<description>
			<![CDATA[<p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634675080497432097">Novox</a>: You're seeing an internal namespace with a Greek alpha in its name to make the call stack look exactly like the methods you wrote. We can't have inner classes such as Where nested inside Observable, because there's already a method with that name. So, the closest approximation was an Observαble namespace with classes such as Where in it.</p><p>Unfortunately, the namespace shows up in IntelliSense at this point, due to some complexities around the IDE's handling of InternalsVisibleTo. We're aware of this problem and are looking into it.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634675182066113791</link>
		<pubDate>Fri, 16 Mar 2012 18:10:06 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634675182066113791</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Inside Rx 2.0 Beta</title>
		<description>
			<![CDATA[<p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634674837204156533">Maddus Mattus</a>: Observables come at a slightly higher cost than events, e.g. due to the need for an IDisposable &quot;subscription handle&quot;. So, having events at the core isn't a bad thing either. For &quot;non-complex event processing&quot; scenarios, a simple event handler often suffices (e.g. the form closing event to pop up a &quot;do you want to save&quot; dialog).</p><p>What you likely want is a smoother way to convert an event into an observable sequence, just like F# has an implicit conversion&nbsp;allowing this (see <a href="http://blogs.msdn.com/b/dsyme/archive/2006/03/24/559582.aspx">here</a> and <a href="http://msdn.microsoft.com/en-us/library/dd233189.aspx">here</a> for starters).</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634675180870518476</link>
		<pubDate>Fri, 16 Mar 2012 18:08:07 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634675180870518476</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Inside Rx 2.0 Beta</title>
		<description>
			<![CDATA[<p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634674379482710370">Mike</a>: There are a whole bunch of use cases. I'm surprised to learn about new customers using Rx in different ways every week. Most recently:</p><ul><li>Data center monitoring scenarios - e.g. computing moving aggregates of CPU utilization, noticing peaks, etc. </li><li>Sensor and signal processing systems - e.g. collecting and processing data in smart grids, network centers, etc. </li><li>Robotics where queries over sensor inputs control servos etc. - e.g. we've seen queries being compiled into embedded code. </li><li>GPS processing systems to tame events of long/lat pairs -&nbsp;e.g. filter out noise, correlate with other data stores, <a href="http://channel9.msdn.com/Shows/Going&#43;Deep/Brian-Beckman-Hidden-Markov-Models-Viterbi-Algorithm-LINQ-Rx-and-Higgs-Boson">etc</a>. </li><li>Intrusion detection systems by processing historical logs and real-time data - e.g. logs of requests / IP address, try to find suspicious outliers. </li><li>Blending UI events with asynchronous requests to web services etc. - e.g. take input in a text box and launch async web calls for completion etc. </li></ul><p>The spectrum of places used has also grown signficantly. We started off by going into Windows Phone 7 as an API to help users process sensor data (accelerometer, GPS, etc.). In full desktop CLR, we've seen adoption ranging from client UI scenarios to server/datacenter workloads. We're seeing an increasing interest in the embedded space as well, including robotics. And we have Rx for JavaScript used in both client and server scenarios (e.g. node.js).</p><p>Stay tuned and you'll see us &quot;<a href="http://en.wikipedia.org/wiki/Eat_one's_own_dog_food">eat our own dogfood</a>&quot; in various places. Quite a few products today are shipping &quot;powered by Rx&quot; (most lately PowerView in SQL Server 2012, various online services in Bing, but also yet-unannounced projects), and the number is growing fast.</p><p>With regards to debuggability, we've done a lot of work in this release to make callstacks readable, approachable, and understandable (see the <a href="http://blogs.msdn.com/b/rxteam/archive/2012/03/12/reactive-extensions-v2-0-beta-available-now.aspx">blog post</a>). This is just the <a href="http://www.quotationspage.com/quote/24921.html">end of the beginning</a> of work we're doing in this field. So again, stay tuned!</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634674463602858080</link>
		<pubDate>Thu, 15 Mar 2012 22:12:40 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Inside-Rx-V2-Beta#c634674463602858080</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Rx Update - .NET 4.5, Async, WinRT</title>
		<description>
			<![CDATA[<p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Rx-Updat-NET-45-Async-WinRT#c634542764832349062">ninjeff</a>: One thing that would help is to have Task implement IObservable. Given that any multi-value concept has the single-value case covered too, that'd be a good way to think about it. However, in the synchronous case, there's no such implicit conversion between a multi-value thing (e.g. an array) that happens to have a single value and its contents (an &quot;unpack&quot; operation). Rest assure&nbsp;we are (and will continue to be)&nbsp;thinking about co-evolution and co-existence...</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-Updat-NET-45-Async-WinRT#c634542774203029933</link>
		<pubDate>Sat, 15 Oct 2011 12:10:20 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-Updat-NET-45-Async-WinRT#c634542774203029933</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Rx Update - .NET 4.5, Async, WinRT</title>
		<description>
			<![CDATA[<p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Rx-Updat-NET-45-Async-WinRT#c634542581742207438">ligAZ</a>: We're actively working with the PLIB folks on making Rx portable. The main thing required is to have IObservable available in all supported platforms. At this point, we can't commit to a time frame, but we're on it <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif?v=c9' alt='Smiley' />.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-Updat-NET-45-Async-WinRT#c634542769955554196</link>
		<pubDate>Sat, 15 Oct 2011 12:03:15 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-Updat-NET-45-Async-WinRT#c634542769955554196</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Rx Update - .NET 4.5, Async, WinRT</title>
		<description>
			<![CDATA[<p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Rx-Updat-NET-45-Async-WinRT#c634542103926554866">AdamSpeight2008</a>: Remains to be seen. Notice the trend of reducing magic strings in pretty much every recent release of the languages (e.g. LINQ instead of queries in strings, dynamic instead of invocation calls with member names in strings, call info attributes instead of hardcoding the current member's name, etc.).</p><p>Personally, to reduce the event conversion friction I'd invest in a conversion of events to IObservable&lt;T&gt; like F# does, but at this point there are no such plans.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-Updat-NET-45-Async-WinRT#c634542194755333059</link>
		<pubDate>Fri, 14 Oct 2011 20:04:35 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-Updat-NET-45-Async-WinRT#c634542194755333059</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Rx Update - .NET 4.5, Async, WinRT</title>
		<description>
			<![CDATA[<p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Rx-Updat-NET-45-Async-WinRT#c634541917103465667">felix9</a>: The test code you saw on the screen is not flawless indeed. In general, it's possible for the sequence to produce an OnNext message before the Dispose call to the subscription occurs. The fix is quite simple though: use the <strong>Finally operator</strong> in Rx to run code after the sequence completes or gets disposed.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-Updat-NET-45-Async-WinRT#c634542191919291595</link>
		<pubDate>Fri, 14 Oct 2011 19:59:51 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-Updat-NET-45-Async-WinRT#c634542191919291595</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Rx Update - .NET 4.5, Async, WinRT</title>
		<description>
			<![CDATA[<p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Rx-Updat-NET-45-Async-WinRT#c634541874615197777">Jeff</a>: While Task&lt;T&gt; would be a good fit for single-value asynchronous results coming out of the Rx APIs, there are a few things we don't want to get into.</p><p>First of all, staying in IObservable&lt;T&gt; allows for further <strong>composition</strong>, which is very rich in the world of Rx. A typical example I always bring&nbsp;up is to apply the Timeout operator to the resulting sequence. With Task&lt;T&gt; you can do similar things using WhenAny or by using cancellation mechanisms, but it's less sexy.</p><p>Secondly, by going to Task&lt;T&gt; there's an implicit change in <strong>scheduler affinity</strong>. Having the ability to control scheduling through the IScheduler abstraction and having a more free-threaded world is an advantage of Rx we don't want to loose due to implicit changes of primitives.</p><p>Having said all of this, users can still go to a Task&lt;T&gt; object explicitly by using the <strong>ToTask</strong> operator. However, for the simple task (pun intended) of awaiting the result of such a single-valued observable sequence, support is right there in Rx to use &quot;<strong>await</strong>&quot; directly.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-Updat-NET-45-Async-WinRT#c634542190027210603</link>
		<pubDate>Fri, 14 Oct 2011 19:56:42 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-Updat-NET-45-Async-WinRT#c634542190027210603</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Interactive Extensions (Ix)</title>
		<description>
			<![CDATA[ <p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634503247100000000">evarlast</a>:Thanks for bringing the broken link to our attention. We'll work on fixing it. In fact, we have a new version of Ix available (<a href="http://www.microsoft.com/download/en/details.aspx?id=27203">v1.1.10823</a>). Hiding the old version from the Download Center caused the link breakage. Sorry for the inconvenience.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634504506140000000</link>
		<pubDate>Thu, 01 Sep 2011 05:10:14 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634504506140000000</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Interactive Extensions (Ix)</title>
		<description>
			<![CDATA[ <p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634462844410000000">PerfectPhase</a>: TPL Dataflow has some overlap for sure, but at the same time the two technologies can work together using - as you mention - bridging facilities.</p><p>The main difference is this: with Rx you get a very high degree of compositionality thanks to the composition taking place at the IObservable&lt;T&gt; level. If you look at that layer as the <strong>declarative layer</strong>, you can think of deeper layers in Rx as <strong>operational layers</strong>. Concepts that fit in there include subjects and schedulers.</p><p>At that level, it's much harder to compose because of the much more stateful nature of the building blocks. You can already see this being the case in the Rx API where the binding operators meet their subjects, requiring different - imperative-style - interaction through the notion of IConnectableObservable&lt;T&gt;.</p><p>Similarly, <strong>composition</strong> of things like &quot;backpressure&quot; on an observable channel using queues and producer/consumer interaction is much harder. Say you have multiple sources coming together and you need to throttle the rate at which things are being sent. How do operators propagate the signals required to apply backpressure etc? Typically you deliver those out-of-band with regards to the composed query operators, requiring quite some plumbing.</p><p>All in all, your analysis of &quot;high level down&quot; and &quot;low level up&quot; is pretty accurate. It's much (to use an analogy with a&nbsp;different domain) like the contrast between the querying experience in an&nbsp;RDBMS versus leveraging ISAM style access. The level at which you glue things together is different, and hence you have different levels of high-level expressiveness and/or low-level&nbsp;control.</p><p>The nice thing is you can mix and match the technologies depending on your needs. Also, preferences in programming style contribute to those decisions: functional declarative state-poor <strong>combinator</strong>-centric query style, versus a more imperative state-rich approach based on <strong>message-</strong>passing actor/agent style. And thanks to the bridges available on the building blocks, you can sandwich Rx inside TPL Dataflow and vice versa, if needed.</p><p>Also make sure to have a look at the documents available on the <a href="http://msdn.microsoft.com/en-us/devlabs/gg585582">TPL Dataflow website</a>. Also see <a href="http://social.msdn.microsoft.com/Forums/en-US/tpldataflow/thread/e8ce2c4e-e495-4182-9f5d-4b1c179c139b">this discussion</a> that summarizes some of the observations (pun intended) made here.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634464095930000000</link>
		<pubDate>Sat, 16 Jul 2011 10:39:53 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634464095930000000</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Interactive Extensions (Ix)</title>
		<description>
			<![CDATA[ <p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634461893130000000">AdamSpeight2008</a>: You're lucky I have some flights coming up pretty soon <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif?v=c9' alt='Smiley' />. In the meantime, here are a few things to think about. How do grouping and windowing operators compare to the idea of a multi-yield? What's the lifetime of the underlying enumerator in case you have multiple sequences that are artifacts of applying an operator over a shared sequence (such as multi-yield)? Think about both the acquisition of the enumerator as well as the disposal thereof.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634464083300000000</link>
		<pubDate>Sat, 16 Jul 2011 10:18:50 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634464083300000000</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Interactive Extensions (Ix)</title>
		<description>
			<![CDATA[ <p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634461764490000000">scyonx</a>: We'll work on providing more samples on the subject going forward. Stay tuned.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634464081560000000</link>
		<pubDate>Sat, 16 Jul 2011 10:15:56 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634464081560000000</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Interactive Extensions (Ix)</title>
		<description>
			<![CDATA[ <p>@<a href="/Shows/Going&#43;Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634462618630000000">Jules</a>: Thanks for your post. First things first: to be clear, you <em>can</em> write the time-based operations for IE&lt;T&gt; without any change to the type. Where we disagree is in the interpretation of time. Let's go into more details.</p><p>First, a quick reminder about the duality between IE&lt;T&gt; and IO&lt;T&gt;. If you <a href="http://channel9.msdn.com/Shows/Going&#43;Deep/Bart-De-Smet-MinLINQ-The-Essence-of-LINQ">distill the essence of the interfaces</a> using arrows, you get both isomorphisms (ignoring the aspect of resource maintenance, captured by IDisposable, since we only care about the data flow aspect):</p><ul><li>IE&lt;T&gt; ~ () -&gt; (() -&gt; T | Exception | void) </li><li>IO&lt;T&gt; ~ ((T | Exception | void) -&gt; ()) -&gt; () </li></ul><p>The only thing we did is reverse the arrows, and end up with the dual type. Interfaces are a mere manifestation of the lack of discriminated union types, and have a particular imperative feeling to it that some consider to be &quot;more clear&quot;.</p><p>With regards to the time notion now. Your interpretation of time is one that treats time <em>as data</em>. The universe you describe is one where Tuple&lt;Time, T&gt; is a coordinate in a n&#43;1 dimensional space with n being the number of spatial coordinates and 1 reflecting the time dimension. The spatial coordinates are defined by the CLR type system and heap here: typeof(T) and the particular instance of the type. This approach is totally valid, and in fact we have it in Rx in the form of <a href="http://msdn.microsoft.com/en-us/library/hh228977(v=VS.103).aspx">Timestamped&lt;T&gt;</a>, which is isomorphic to Tuple&lt;Time, T&gt;.</p><p>However, there's a different interpretation of time that relates to the <em>control flow</em> aspect of computation. Rather than associating time with data (by treating it as data itself), time can be related to the execution itself. In Rx, this is embodied by the <a href="http://msdn.microsoft.com/en-us/library/system.reactive.concurrency(v=VS.103).aspx">IScheduler</a> interface which carries a clock. In this world, the scheduler defines the universe of space (where things happen, e.g. on the thread pool), and time (when things happen, related to the scheduler's clock). Going back to machine architecture analogies, you could see the number of instructions executed (or the number of CPU clock ticks) as the clock.</p><p>Operators like <a href="http://msdn.microsoft.com/en-us/library/hh228946(v=VS.103).aspx">Timeout</a> have been defined in terms of the latter interpretation where time is extrinsic to the data (observe the IScheduler parameter passed in). For example, upon arrival of an OnNext message, the scheduler can be invoked to run a timeout timer to monitor the next OnNext message coming down the pipe. In this worldview, time is associated with the execution of method calls. You can do a very similar thing for IE&lt;T&gt;, now based on the dual MoveNext method. Again, you observe the time behavior of the environment that's sending you the data&nbsp;by running a local timer (ignoring relativistic effects), measuring the time that elapses between method calls: the incoming MoveNext call and the time it takes for the environment to respond to the outgoing MoveNext request. To do so, you need to rely on a clock which is extrinsic to the data, e.g. provided by the IScheduler interface.</p><p>That's not to say you can't define time-based operations using an intrinsic notion of time, e.g. based on Timestamped&lt;T&gt;. In that case, you're performing distance measurements and coordinate transformations on the data itself, which happens to carry time information. I invite the niners to think about all kinds of operators in terms of this (e.g. Select translates an object in space). This approach works very well for analysis of historical data, e.g. log data. However, you could do this too by using <a href="http://channel9.msdn.com/Series/Rx-Workshop/Rx-Workshop-Schedulers">virtual time scheduling</a>.</p><p>The discussion where to put time is very similar to the one on where to put other aspects of the control flow such as exceptions. Do you treat those as code or as data? In Rx and Ix, we treat exceptions as control flow aspects (cf. OnError and the dual of MoveNext throwing) at the interface level (note for Ix: the C# language doesn't provide checked exceptions, hence it doesn't show up in the IR&lt;T&gt; interface explicitly). However, one can employ <a href="http://en.wikipedia.org/wiki/Reification_(computer_science)">reification</a> to treat those control flow mechanisms as part of the data flow, using operators like <a href="http://msdn.microsoft.com/en-us/library/hh229453(v=VS.103).aspx">Materialize</a>. Similarly, the time aspect can be moved from control flow to data flow using the <a href="http://msdn.microsoft.com/en-us/library/hh229003(v=VS.103).aspx">Timestamp</a> operator. Both treatments are valid, and it depends on your scenario which one is more convenient than the other.</p><p>Finally, the discussion on extrinsic or intrinsic notion of time with regards to the data is one of the essential differences between Rx and <a href="http://msdn.microsoft.com/en-us/library/ee362541.aspx">StreamInsight</a>. In the latter technology, every event carries its own notion of time (cf. <a href="http://technet.microsoft.com/en-us/library/microsoft.complexeventprocessing.linq.cepstream.aspx">CepStream&lt;T&gt;</a>), including duration. In Rx, we model those things differently using the concept of <a href="http://channel9.msdn.com/Series/Rx-Workshop/Rx-Workshop-7-Reactive-Coincidence">reactive coincidence</a>. Again, because both notions make sense, there are conversions possible between both worlds; e.g. StreamInsight has an IO&lt;T&gt;-based programming model exposed.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634462666770000000</link>
		<pubDate>Thu, 14 Jul 2011 18:57:57 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634462666770000000</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Bart De Smet: Interactive Extensions (Ix)</title>
		<description>
			<![CDATA[ <p>In case you want to use NuGet to install Ix, look for the <a href="http://www.nuget.org/List/Packages/Ix_Experimental-Main">Ix_Experimental-Main</a>&nbsp;and <a href="http://www.nuget.org/List/Packages/Ix_Experimental-Providers">Ix_Experimental-Providers</a>&nbsp;packages (following our <a href="http://social.msdn.microsoft.com/Forums/en-US/rx/thread/de1a62fa-abe8-4ea3-a653-1ff47b4d8d82">naming convention used in Rx</a>).</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634462182000000000</link>
		<pubDate>Thu, 14 Jul 2011 05:30:00 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Interactive-Extensions-Ix#c634462182000000000</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Rx Workshop: Introduction</title>
		<description>
			<![CDATA[ <p>@<a href="/Series/Rx-Workshop/Rx-Workshop-Introduction#c634450494890000000">exoteric</a>: Ix has shipped again with improved operator parity, some extensions, and some cleanup. More information <a href="http://social.msdn.microsoft.com/Forums/en-US/rx/thread/278f57aa-f0ef-4a95-be41-822d3dd5e299">here</a>.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Series/Rx-Workshop/Rx-Workshop-Introduction#c634450774220000000</link>
		<pubDate>Fri, 01 Jul 2011 00:37:02 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Series/Rx-Workshop/Rx-Workshop-Introduction#c634450774220000000</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Announcing the Official Release of Rx!</title>
		<description>
			<![CDATA[ <p>@<a href="/Blogs/Charles/Announcing-the-Official-Release-of-Rx#c634449688560000000">wkempf</a>: You can still get System.Threading.dll from old releases (prior to 1.0.10425) and use it, but keep in mind the bits are provided as-is with no support.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Announcing-the-Official-Release-of-Rx#c634449789980000000</link>
		<pubDate>Wed, 29 Jun 2011 21:16:38 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Announcing-the-Official-Release-of-Rx#c634449789980000000</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
	<item>
		<title>Re: Announcing the Official Release of Rx!</title>
		<description>
			<![CDATA[ <p>@<a href="/Blogs/Charles/Announcing-the-Official-Release-of-Rx#c634449661750000000">vesuvius</a>: Still there, in the System.Reactive.Providers assembly. On NuGet, use the Rx-Providers package.</p><p>posted by bdesmet</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Announcing-the-Official-Release-of-Rx#c634449674850000000</link>
		<pubDate>Wed, 29 Jun 2011 18:04:45 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Announcing-the-Official-Release-of-Rx#c634449674850000000</guid>
		<dc:creator>bdesmet</dc:creator>
	</item>
</channel>
</rss>