<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Bnaya Eshet : Rx</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Rx/default.aspx</link><description>Tags: Rx</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>The 3rd day of the SDP</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/2013/05/08/the-3rd-day-of-the-sdp.aspx</link><pubDate>Wed, 08 May 2013 04:17:58 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:2007610</guid><dc:creator>bnaya</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The 3rd day of the SDP was over and I want to thanks all the attendants.   &lt;br /&gt;my yesterday session was about&lt;strong&gt; C# 5 async and await&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;today I will have a full day tutorial on &lt;strong&gt;Rx&lt;/strong&gt; and &lt;strong&gt;TPL Dataflow&lt;/strong&gt;.    &lt;br /&gt;you can download the &lt;strong&gt;demo code&lt;/strong&gt; and also the presentation for second and third days from &lt;a href="http://sdrv.ms/1283vDW"&gt;here&lt;/a&gt; (the link is also having the demo code for today&amp;#39;s sessions).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/IMG_2242_7E6AE9DF.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="sdp, clr, cryptography , rx, tpl, dataflow, async, await" border="0" alt="sdp, clr, cryptography , rx, tpl, dataflow, async, await" src="http://blogs.microsoft.co.il/blogs/bnaya/IMG_2242_thumb_17DEFEE8.jpg" width="416" height="352" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;anyway, I also want to &lt;strong&gt;recommend&lt;/strong&gt; 2of yesterday session.&lt;/p&gt;  &lt;p&gt;if you were attend at the conference you should have an access to the sessions video page.   &lt;br /&gt;first I want to recommend &lt;a href="http://blogs.microsoft.co.il/blogs/ofirmakmal/"&gt;Ofir Makmal&lt;/a&gt;&amp;#39;s session about &lt;strong&gt;.NET 4.5 CLR improvements&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Ofir was talking about subjects like:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Multi-core JIT&lt;/li&gt;    &lt;li&gt;Managed Profile Guided Optimization&lt;/li&gt;    &lt;li&gt;Auto-Ngen&lt;/li&gt;    &lt;li&gt;Background Server GC&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;my favorite subject was&lt;strong&gt; Multi-core JIT&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;the following is a snippet for Multi-core JITing.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:18ac9de8-9d7b-409c-9b7c-001a4cfec089" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;static&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; &lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt; Main(&lt;/span&gt;&lt;span style="background:#ffffff;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;[] args)&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;{&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;ProfileOptimization&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.SetProfileRoot(&lt;/span&gt;&lt;span style="background:#ffffff;color:#a31515;"&gt;@&amp;quot;C:&amp;#92;MyApplicationFolder&amp;quot;&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;);&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="background:#ffffff;color:#000000;"&gt;&lt;/span&gt;&lt;span style="background:#ffffff;color:#2b91af;"&gt;ProfileOptimization&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;.StartProfile(&lt;/span&gt;&lt;span style="background:#ffffff;color:#a31515;"&gt;&amp;quot;startup.profile&amp;quot;&lt;/span&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;);&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="background:#ffffff;color:#000000;"&gt;}&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;my second recommendation is &lt;a href="http://blogs.microsoft.co.il/blogs/applisec/"&gt;Manu Cohen-Yashar&lt;/a&gt;&amp;#39;s session about &lt;strong&gt;.NET cryptography&lt;/strong&gt;.    &lt;br /&gt;Manu&amp;#39;s talk is great for anyone who want to use the .NET cryptography library.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=2007610" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SELA/default.aspx">SELA</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Rx/default.aspx">Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Parallel/default.aspx">Parallel</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/TPL/default.aspx">TPL</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Dataflow/default.aspx">Dataflow</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/TDF/default.aspx">TDF</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/async/default.aspx">async</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/await/default.aspx">await</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive+Extension/default.aspx">Reactive Extension</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SDP/default.aspx">SDP</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/TPL+Dataflow/default.aspx">TPL Dataflow</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/TAP/default.aspx">TAP</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/cryptography/default.aspx">cryptography</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/clr/default.aspx">clr</category></item><item><title>Open House at Microsoft</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/2013/01/14/open-house-at-microsoft.aspx</link><pubDate>Mon, 14 Jan 2013 07:48:22 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1660692</guid><dc:creator>bnaya</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Open House at Microsoft&lt;/h2&gt;  &lt;p&gt;yesterday I was lecturing at Microsoft about VS 2012, .NET 4.5, async/await, Rx and TPL Dataflow.&lt;/p&gt;  &lt;p&gt;there was 90 people attended and I hope that everybody has learn something new.&lt;/p&gt;  &lt;p&gt;the code sample for this lecture available &lt;a href="https://skydrive.live.com/?cid=9bf7c1a515d76a9a&amp;amp;id=9BF7C1A515D76A9A%216027" target="_blank"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/Ashdot-field-5_584BDCDB.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="Parallel,tdf, dataflow, rx, reactive, task, .net 4., vs 2012" border="0" alt="Parallel,tdf, dataflow, rx, reactive, task, .net 4., vs 2012" src="http://blogs.microsoft.co.il/blogs/bnaya/Ashdot-field-5_thumb_21EA8EFF.jpg" width="468" height="364" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1660692" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SELA/default.aspx">SELA</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Rx/default.aspx">Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Parallel/default.aspx">Parallel</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Task/default.aspx">Task</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/TPL/default.aspx">TPL</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Dataflow/default.aspx">Dataflow</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/TDF/default.aspx">TDF</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive/default.aspx">Reactive</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/async/default.aspx">async</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/await/default.aspx">await</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive+Extension/default.aspx">Reactive Extension</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/TPL+Dataflow/default.aspx">TPL Dataflow</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/vs+2012/default.aspx">vs 2012</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/.net+4_2E00_/default.aspx">.net 4.</category></item><item><title>SDP 2012 - Day 2</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/11/19/sdp-2012-day-2.aspx</link><pubDate>Mon, 19 Nov 2012 16:31:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1458351</guid><dc:creator>bnaya</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;SDP 2012 - Day 2&lt;/h2&gt;  &lt;p&gt;the &lt;a href="http://sela.co.il/s/sdp2012_july/index.html"&gt;SDP 2012 conference&lt;/a&gt; has day 2 had completed.&lt;/p&gt;  &lt;p&gt;I was speaking about&lt;strong&gt; async / await&lt;/strong&gt;, &lt;strong&gt;Rx&lt;/strong&gt; and &lt;strong&gt;TPL Dataflow&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;you can find the materials for my lecture in &lt;a href="https://skydrive.live.com/?cid=9bf7c1a515d76a9a&amp;amp;id=9BF7C1A515D76A9A%215689"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/IMG_7858_72285BCB.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="Rx, Tdf, async, await, parallel, TPL" border="0" alt="Rx, Tdf, async, await, parallel, TPL" src="http://blogs.microsoft.co.il/blogs/bnaya/IMG_7858_thumb_7C990A1E.jpg" width="484" height="317" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I will give the same lecture on Wednesday next week,    &lt;br /&gt;there is a chance that some place is still available,     &lt;br /&gt;so if you are interesting, you can check it with &lt;a href="http://sela.co.il/s/sdp2012_july/Contact.html" target="_blank"&gt;Sela Marketing&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1458351" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SELA/default.aspx">SELA</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Rx/default.aspx">Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Parallel/default.aspx">Parallel</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Task/default.aspx">Task</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/TPL/default.aspx">TPL</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/TDF/default.aspx">TDF</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/async/default.aspx">async</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/await/default.aspx">await</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive+Extension/default.aspx">Reactive Extension</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SDP/default.aspx">SDP</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/TPL+Dataflow/default.aspx">TPL Dataflow</category></item><item><title>Rx - Open Source</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/11/09/rx-open-source.aspx</link><pubDate>Fri, 09 Nov 2012 22:07:57 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1427380</guid><dc:creator>bnaya</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Rx - Open Source&lt;/h2&gt;  &lt;p&gt;Microsoft had announced the &lt;strong&gt;&lt;a href="http://blogs.msdn.com/b/interoperability/archive/2012/11/06/ms-open-tech-open-sources-rx-reactive-extensions-a-cure-for-asynchronous-data-streams-in-cloud-programming.aspx" target="_blank"&gt;open sourcing&lt;/a&gt;&lt;/strong&gt; of &lt;strong&gt;&lt;a href="https://rx.codeplex.com/" target="_blank"&gt;Rx&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;it is a great news for the Rx development community.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/OpenSource_00E80873.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="Rx, IObservable, Open source, Reactive" border="0" alt="Rx, IObservable, Open source, Reactive" src="http://blogs.microsoft.co.il/blogs/bnaya/OpenSource_thumb_6FB42ACF.jpg" width="494" height="356" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Microsoft is still &lt;strong&gt;committed&lt;/strong&gt; to the &lt;strong&gt;library&amp;#39;s quality&lt;/strong&gt; while &lt;strong&gt;accepting external contribution&lt;/strong&gt; into the Rx code base.     &lt;br /&gt;Open sourcing is the new Microsoft strategy and you can see other technology that is moving in that direction (for example ASP.NET).&lt;/p&gt;  &lt;p&gt;personally I will consider to move &lt;strong&gt;Visual Rx&lt;/strong&gt; into an official Rx code base.&lt;/p&gt;  &lt;p&gt;central code base that is being managed by Microsoft is much better than a separate libraries because when a contribution integrate into the code base it is having the Microsoft team quality stamp and developer can easily adopt it with less worries.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1427380" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SELA/default.aspx">SELA</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Rx/default.aspx">Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObserver/default.aspx">IObserver</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObservable/default.aspx">IObservable</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Thread/default.aspx">Thread</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive/default.aspx">Reactive</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive+Extension/default.aspx">Reactive Extension</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Open+source/default.aspx">Open source</category></item><item><title>Visual Rx - run as administrator</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/10/26/visual-rx-run-as-administrator.aspx</link><pubDate>Fri, 26 Oct 2012 22:43:23 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1383599</guid><dc:creator>bnaya</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Visual Rx - run as administrator&lt;/h2&gt;  &lt;p&gt;if you have download the Visual Rx client, make the current version required an administrator privilege.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/runas_53157EA4.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="Visual Rx - run as administrator" border="0" alt="Visual Rx - run as administrator" src="http://blogs.microsoft.co.il/blogs/bnaya/runas_thumb_2F98DA3F.png" width="372" height="207" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1383599" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Rx/default.aspx">Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObserver/default.aspx">IObserver</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObservable/default.aspx">IObservable</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive/default.aspx">Reactive</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Remote/default.aspx">Remote</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Visual+Rx/default.aspx">Visual Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Monitor/default.aspx">Monitor</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IOserver/default.aspx">IOserver</category></item><item><title>Visual Rx - Part 6</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/10/25/visual-rx-part-6.aspx</link><pubDate>Fri, 26 Oct 2012 01:06:37 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1381494</guid><dc:creator>bnaya</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;&lt;font style="font-weight:bold;"&gt;Visual Rx - Part 6&lt;/font&gt;&lt;/h2&gt;  &lt;p&gt;this post is part of the &lt;strong&gt;&lt;a href="http://visualrx.codeplex.com/"&gt;Visual Rx&lt;/a&gt;&lt;/strong&gt; series and it will focus on &lt;strong&gt;Visual Rx &lt;/strong&gt;&lt;font face="Comic Sans MS"&gt;Viewer Side&lt;/font&gt; &lt;strong&gt;Extensibility&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;this post is dealing with advance topic, you may want to read other post on this &lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/08/12/visual-rx-toc.aspx" target="_blank"&gt;series&lt;/a&gt; before reading this one.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/Extent_4F4487BB.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" border="0" alt="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" src="http://blogs.microsoft.co.il/blogs/bnaya/Extent_thumb_09FC0AC5.jpg" width="470" height="403" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;this post refer to version 2.0.20.622.60 or higher (the extensibility model was simplify at this version). &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Visual Rx&lt;/strong&gt; support &lt;strong&gt;extension&lt;/strong&gt; via plug-ins bundle contract.     &lt;br /&gt;a &lt;strong&gt;plug-ins bundle &lt;/strong&gt;contains:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;General information&lt;/strong&gt; about the package (like title and description), &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Publisher&lt;/strong&gt;&amp;#160;&lt;strong&gt;information&lt;/strong&gt; (like name, email and web address) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Implementation&lt;/strong&gt; for different &lt;strong&gt;plug-ins capabilities&lt;/strong&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;plug-ins capabilities&lt;/strong&gt; can be one or more implementation for the following aspects:&lt;/p&gt;  &lt;p&gt;a complete &lt;strong&gt;Tab&lt;/strong&gt; (&lt;font color="#666666"&gt;actually the Grid Tab is a plug-in that you can remove&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/VRx1.9_667F665F.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" border="0" alt="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" src="http://blogs.microsoft.co.il/blogs/bnaya/VRx1.9_thumb_4CE7B365.jpg" width="516" height="329" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It can modify a &lt;strong&gt;marble diagram icon&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/VRx1.1_66030D9D.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" border="0" alt="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" src="http://blogs.microsoft.co.il/blogs/bnaya/VRx1.1_thumb_680FE699.jpg" width="523" height="395" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;and even change the &lt;strong&gt;representation&lt;/strong&gt; of &lt;strong&gt;single item&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/VRx1.8_7E16522B.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" border="0" alt="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" src="http://blogs.microsoft.co.il/blogs/bnaya/VRx1.8_thumb_2CAC5B0E.jpg" width="518" height="337" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;it can also &lt;strong&gt;control&lt;/strong&gt; the &lt;strong&gt;entire view&lt;/strong&gt; of a &lt;strong&gt;marble diagram &lt;/strong&gt;(this way you can control the entire diagram view).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/VRx5.9_58107C08.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" border="0" alt="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" src="http://blogs.microsoft.co.il/blogs/bnaya/VRx5.9_thumb_7A3861C1.jpg" width="516" height="443" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;you can see the code of this extension in the source code under the &lt;a href="http://visualrx.codeplex.com/SourceControl/changeset/view/77220#1403323" target="_blank"&gt;StockExchangeGraphPlugin&lt;/a&gt; project.&lt;/p&gt;  &lt;p&gt;the last extensibility point is a &lt;strong&gt;non visual&lt;/strong&gt; extensibility.&amp;#160; &lt;br /&gt;it can &lt;strong&gt;intercept&lt;/strong&gt; an &lt;strong&gt;item&lt;/strong&gt; and do what ever you want to do with it data (for example send an email or write to a file).&lt;/p&gt;  &lt;h5&gt;How to get started?&lt;/h5&gt;  &lt;p&gt;first you have to set a &lt;strong&gt;plug-in bundle&lt;/strong&gt;.     &lt;br /&gt;as I said earlier a bundle &lt;strong&gt;encapsulate&lt;/strong&gt; the &lt;strong&gt;information&lt;/strong&gt; about the &lt;strong&gt;plug-in&lt;/strong&gt; and the&lt;strong&gt; publisher &lt;/strong&gt;with a set of &lt;strong&gt;plug-in&amp;#39;s capabilities&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;it is done by inheritance of the &lt;strong&gt;PluginBundleBase &lt;/strong&gt;class which is implementing the &lt;strong&gt;IPluginBundle&lt;/strong&gt; interface (&lt;font color="#666666"&gt;if you want you can inherit the interface directly&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;the following is the &lt;strong&gt;IPluginBundle&lt;/strong&gt; definition:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:02185bd8-d799-472c-9131-905cdc0ca75e" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IPluginBundle&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{&lt;/li&gt; &lt;li&gt;    Guid Id { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Title { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; }&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Description { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    Version Version { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; }&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; PublisherName { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; PublisherEmail { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; }&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; SupportUrl { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; ProductUrl { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; }&lt;/li&gt; &lt;li&gt;    ImageSource Icon { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; HasCustomConfiguration { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; EditConfiguration();&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    IItemInterceptionPlugin InterceptionPlugin { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; }&lt;/li&gt; &lt;li&gt;    ILineHeaderImagePlugin LineHeaderImagePlugin { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    IMarblePanelPlugin MarblePanelPlugin { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; }&lt;/li&gt; &lt;li&gt;    IMarbleItemPlugin MarbleItemPlugin { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    ILoadResourcesPlugin LoadResourcesPlugin { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; }&lt;/li&gt; &lt;li&gt;    ITabPlugin TabPlugin { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;as you can see it start with &lt;strong&gt;information&lt;/strong&gt;&amp;#160; about the &lt;strong&gt;plug-in &lt;/strong&gt;and the &lt;strong&gt;publisher &lt;/strong&gt;and followed by a set of properties which return interfaces.     &lt;br /&gt;those &lt;strong&gt;interfaces represent&lt;/strong&gt; different &lt;strong&gt;capabilities&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;let start with the most general interface which is&lt;strong&gt; helping the plug-in environment&lt;/strong&gt; rather then actually having a real plug-in functionality. &lt;/p&gt;  &lt;h5&gt;&lt;strong&gt;Load Resources Plugin&lt;/strong&gt; &lt;/h5&gt;  &lt;p&gt;the &lt;strong&gt;LoadResourcesPlugin&lt;/strong&gt; property return the &lt;strong&gt;ILoadResourcesPlugin&lt;/strong&gt; interface. this is how you can &lt;strong&gt;add resources&lt;/strong&gt; which can be latter used by other plug-ins implementation (it is very common that your plug-in representation will need resources which is not available within &lt;strong&gt;Visual Rx&lt;/strong&gt; core).&lt;/p&gt;  &lt;p&gt;for example you can load &lt;strong&gt;WPF ResourceDictionary&lt;/strong&gt; which will contain anything needed by your plug-in (images, styles, templates, ext.).&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:5faaff0f-181c-42b7-b332-56b99f8fae70" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;LoadResourcesPlugin&lt;/span&gt; : ILoadResourcesPlugin&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;readonly&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; ASSEMBLY_NAME = UIPluginHelper.GetAssemblyName();&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; ResourceDictionary[] GetResources()&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    {&lt;/li&gt; &lt;li&gt;        Uri uri = UIPluginHelper.GetResourceUri(ASSEMBLY_NAME, &lt;span style="color:#a31515;"&gt;&amp;quot;CustomMarble.xaml&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        ResourceDictionary myResource = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ResourceDictionary();&lt;/li&gt; &lt;li&gt;        myResource.Source = uri;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ResourceDictionary[] { myResource };&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;as you can see Visual Rx does have some helper method like UIPluginHelper.GetAssemblyName() which can make this task even easier.&lt;/p&gt;  &lt;h5&gt;&lt;strong&gt;Marble Item Plugin&lt;/strong&gt; &lt;/h5&gt;  &lt;p&gt;the must useful capability may be the ability to &lt;strong&gt;change the item representation based on&lt;/strong&gt; &lt;strong&gt;it&amp;#39;s data&lt;/strong&gt;.     &lt;br /&gt;this capability achieved by implementation of the &lt;strong&gt;MarbleItemPlugin&lt;/strong&gt; property which return the &lt;strong&gt;IMarbleItemPlugin&lt;/strong&gt; interface.&lt;/p&gt;  &lt;p&gt;the interface is fairly simple and it look as follow:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c346318e-e211-4813-93d6-2237610d68c3" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IMarbleItemPlugin&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{&lt;/li&gt; &lt;li&gt;    DataTemplate SelectTemplate(MarbleBase item, FrameworkElement element);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;it &lt;strong&gt;gets&lt;/strong&gt; an &lt;strong&gt;item &lt;/strong&gt;and a &lt;strong&gt;FrameworkElement&lt;/strong&gt; and &lt;strong&gt;return&lt;/strong&gt; a &lt;strong&gt;DataTemplate&lt;/strong&gt;.     &lt;br /&gt;you should return null if you don&amp;#39;t want to change the default template for the current item.&lt;/p&gt;  &lt;p&gt;the following snippet was taken from the System.Reactive.Contrib.Monitoring.SamplePlugin which is part of the source code that available for download at &lt;a href="http://visualrx.codeplex.com/SourceControl/changeset/view/77220#1386787" target="_blank"&gt;codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:37584788-ecd1-4392-96e5-849349865587" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;PseudoTemplateSelectorPlugin&lt;/span&gt; : IMarbleItemPlugin&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; DataTemplate SelectTemplate(MarbleBase item, FrameworkElement element)&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    {&lt;/li&gt; &lt;li&gt;        DataTemplate template = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; startWith = item.Name.ToLower().StartsWith(&lt;span style="color:#a31515;"&gt;&amp;quot;sec&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; isDivBy10 = Convert.ToInt32(item.RawValue) % 10 == 0;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (startWith &amp;amp;&amp;amp; isDivBy10)&lt;/li&gt; &lt;li&gt;        {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            template = element.FindResource(&lt;span style="color:#a31515;"&gt;&amp;quot;CustomMarbleNextTemplate&amp;quot;&lt;/span&gt;) &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; DataTemplate;&lt;/li&gt; &lt;li&gt;        }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; template;&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;the above implementation is replacing the template for items within marble diagrams that start with &amp;quot;sec&amp;quot; and ignoring items that doesn&amp;#39;t divide by 10.    &lt;br /&gt;the result will be the fire icon representation for those items:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/VRx1.8_22879416.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" border="0" alt="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" src="http://blogs.microsoft.co.il/blogs/bnaya/VRx1.8_thumb_3821CCB3.jpg" width="488" height="317" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h5&gt;Line Header Image Plugin&lt;/h5&gt;  &lt;p&gt;sometime all you want to do is to change the marble diagram icon.    &lt;br /&gt;in this case you should use the &lt;strong&gt;LineHeaderImagePlugin&lt;/strong&gt; property which return the &lt;strong&gt;ILineHeaderImagePlugin&lt;/strong&gt; interface.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:0e1b679a-cea6-47fb-8edf-0e5e89f2ce78" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ILineHeaderImagePlugin&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{&lt;/li&gt; &lt;li&gt;    ImageSource Convert(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; text);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;the text parameter is the name of the marble diagram.    &lt;br /&gt;it can be use as follow (&lt;font color="#666666"&gt;taken from the System.Reactive.Contrib.Monitoring.SamplePlugin&lt;/font&gt;):&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:fb774823-cbbf-42fb-960c-922501d1b75f" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ImageMapperPlugin&lt;/span&gt; : ILineHeaderImagePlugin&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;readonly&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; ASSEMBLY_NAME = UIPluginHelper.GetAssemblyName();&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;readonly&lt;/span&gt; Uri STRESS_IMG = UIPluginHelper.GetPackResourceUri(ASSEMBLY_NAME, &lt;span style="color:#a31515;"&gt;&amp;quot;Images/clicknrun.png&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;readonly&lt;/span&gt; Uri SEC_IMG = UIPluginHelper.GetPackResourceUri(ASSEMBLY_NAME, &lt;span style="color:#a31515;"&gt;&amp;quot;Images/Clock.png&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; ImageSource Convert(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; text)&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    {&lt;/li&gt; &lt;li&gt;        text = text.ToLower();&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        ImageSource img = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (text.StartsWith(&lt;span style="color:#a31515;"&gt;&amp;quot;stress&amp;quot;&lt;/span&gt;))&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            img = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; BitmapImage(STRESS_IMG);&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (text.StartsWith(&lt;span style="color:#a31515;"&gt;&amp;quot;sec&amp;quot;&lt;/span&gt;))&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            img = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; BitmapImage(SEC_IMG);&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; img;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    }&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;the above snippet is changing the icons of the &lt;strong&gt;stress&lt;/strong&gt; and &lt;strong&gt;sec&lt;/strong&gt; &lt;strong&gt;marble diagrams&lt;/strong&gt; into a preloaded resource (see &lt;strong&gt;LoadResourcesPlugin&lt;/strong&gt;) and ignore any other diagrams.&lt;/p&gt;  &lt;p&gt;the result will be shown as follow:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/VRx5_35989AF5.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" border="0" alt="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" src="http://blogs.microsoft.co.il/blogs/bnaya/VRx5_thumb_075E9F3B.jpg" width="497" height="382" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;as you can see the &lt;strong&gt;sec&lt;/strong&gt; icons become a &lt;em&gt;&lt;strong&gt;clock, &lt;/strong&gt;&lt;/em&gt;&amp;#160;&lt;strong&gt;stress&lt;/strong&gt; become &lt;strong&gt;&lt;em&gt;runner &lt;/em&gt;&lt;/strong&gt;while the &lt;strong&gt;error&lt;/strong&gt; icon remain the &lt;strong&gt;default&lt;/strong&gt; one.&lt;/p&gt;  &lt;p&gt;I will leave the rest of the plug-in capabilities to a latter post and switch into the plug-in deployment.&lt;/p&gt;  &lt;h5&gt;Plug-in Deployment&lt;/h5&gt;  &lt;p&gt;the plug-in are exposed though &lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/MEF/default.aspx" target="_blank"&gt;MEF&lt;/a&gt; (when you implement IPluginBundle or inherit PluginBundleBase your code is automatically exported).&lt;/p&gt;  &lt;p&gt;the &lt;strong&gt;Visual Rx&lt;/strong&gt; &lt;strong&gt;setting&lt;/strong&gt; let you set the &lt;strong&gt;plug-ins discovery&lt;/strong&gt; and &lt;strong&gt;activation&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/setting1-copy_4BBE907A.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" border="0" alt="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" src="http://blogs.microsoft.co.il/blogs/bnaya/setting1-copy_thumb_478492E8.jpg" width="501" height="323" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;the following diagram is showing the setting dialog:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/setting2_0F829F05.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" border="0" alt="Rx, Reactive, LINQ, Minitor, Monitoring, Profile, Trace, Viewer, Tool, Extensibility" src="http://blogs.microsoft.co.il/blogs/bnaya/setting2_thumb_6C722D94.png" width="502" height="272" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;the plug-in setting is divided into 2 sections:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;discovery&lt;/strong&gt; section where you can set plug-in folders (&lt;font color="#666666"&gt;both relative and absolute path are supported&lt;/font&gt;). &lt;/li&gt;    &lt;li&gt;plug-in &lt;strong&gt;activation&lt;/strong&gt; section where you can enable or disable plug-ins. &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Future features&lt;/h5&gt;  &lt;p&gt;the setting dialog will have a plug-in &lt;strong&gt;upload&lt;/strong&gt; and &lt;strong&gt;download&lt;/strong&gt; from a &lt;strong&gt;central plug-in repository&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;each plug-in will also be able to add a&lt;strong&gt; custom setting&lt;/strong&gt;.&lt;/p&gt;  &lt;h4&gt;summary&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;Visual Rx&lt;/strong&gt; was built for &lt;strong&gt;extensibility&lt;/strong&gt;.     &lt;br /&gt;you can use built-in, your own or 3rd party plug-ins which may enhance your monitoring efficiency.&lt;/p&gt;  &lt;h5&gt;Sample code&lt;/h5&gt;  &lt;p&gt;the sample code is part of the source code of Visual Rx.    &lt;br /&gt;&lt;font color="#666666"&gt;you can use the sample as a starting point but remember that it is only a sample code, some of the sample has a memory leak and other issues.      &lt;br /&gt;you should test the code as you would test your own code.&lt;/font&gt;&lt;/p&gt;  &lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/10/25/visual-rx-part-6.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%253a%252f%252fblogs.microsoft.co.il%252fblogs%252fbnaya%252farchive%252f2012%252f10%252f25%252fvisual-rx-part-6.aspx" /&gt;&lt;/a&gt; &lt;a href="http://dotnetshoutout.com/Visual-Rx-Part-6-Bnaya-Eshet"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.microsoft.co.il%2Fblogs%2Fbnaya%2Farchive%2F2012%2F10%2F25%2Fvisual-rx-part-6.aspx" /&gt;&lt;/a&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1381494" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Extensibility/default.aspx">Extensibility</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SELA/default.aspx">SELA</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Rx/default.aspx">Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObserver/default.aspx">IObserver</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Parallel/default.aspx">Parallel</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObservable/default.aspx">IObservable</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Profiler/default.aspx">Profiler</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive/default.aspx">Reactive</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive+Extension/default.aspx">Reactive Extension</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Profile/default.aspx">Profile</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/.NET+4.5/default.aspx">.NET 4.5</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/linq/default.aspx">linq</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Trace/default.aspx">Trace</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Monitor/default.aspx">Monitor</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Viewer/default.aspx">Viewer</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Monitoring/default.aspx">Monitoring</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Minitor/default.aspx">Minitor</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Tool/default.aspx">Tool</category></item><item><title>Visual Rx Version 2.0.20622.60</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/10/25/visual-rx-version-2-0-20622-60.aspx</link><pubDate>Thu, 25 Oct 2012 18:49:13 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1381240</guid><dc:creator>bnaya</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Visual Rx Version 2.0.20622.60&lt;/h2&gt;  &lt;p&gt;I have release a new version of &lt;a href="http://visualrx.codeplex.com/" target="_blank"&gt;&lt;strong&gt;Visual Rx&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;#160;&lt;/strong&gt;just before my fight to the Build conference.&lt;/p&gt;  &lt;p&gt;the version support &lt;strong&gt;.Net 4.5&lt;/strong&gt; and is having a new &lt;strong&gt;plug-in&lt;/strong&gt; model.&lt;/p&gt;  &lt;p&gt;this post will be follow by a post about writing plug-ins for the Visual Rx.&lt;/p&gt;  &lt;p&gt;for the client side it is recommended to use the &lt;strong&gt;&lt;a href="http://nuget.org/packages/VisualRx" target="_blank"&gt;Nuget&lt;/a&gt;&lt;/strong&gt; package (write visualrx into the Nuget search box).&lt;/p&gt;  &lt;p&gt;if you want to learn more about .Net 4.5 parallelism, Rx and Tpl Dataflow you can check out the &lt;a href="http://sela.co.il/s/sdp2012_july/index.html" target="_blank"&gt;Sela developer practice&lt;/a&gt; conference, my session are already sold out, but I believe that a few places is still available for a parallel session by my colleague &lt;a href="http://sela.co.il/s/sdp2012_july/speakers.html#Noam1" target="_blank"&gt;Noam Sheffer&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1381240" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SELA/default.aspx">SELA</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Rx/default.aspx">Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObserver/default.aspx">IObserver</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Parallel/default.aspx">Parallel</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObservable/default.aspx">IObservable</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive/default.aspx">Reactive</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive+Extension/default.aspx">Reactive Extension</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/.NET+4.5/default.aspx">.NET 4.5</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Visual+Rx/default.aspx">Visual Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Monitor/default.aspx">Monitor</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Viewer/default.aspx">Viewer</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Monitoring/default.aspx">Monitoring</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/VisualRx/default.aspx">VisualRx</category></item><item><title>Visual Rx - Backward Compatibility</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/08/22/visual-rx-backward-compatibility.aspx</link><pubDate>Wed, 22 Aug 2012 12:11:18 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1234401</guid><dc:creator>bnaya</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Visual Rx - Backward Compatibility&lt;/h2&gt;  &lt;p&gt;I have just publish a new release of&lt;strong&gt; Visual Rx&lt;/strong&gt; &lt;strong&gt;SDK&lt;/strong&gt; which is targeting Rx versions &lt;strong&gt;&lt;a href="http://visualrx.codeplex.com/releases/view/93122" target="_blank"&gt;1.0.10621&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href="http://visualrx.codeplex.com/releases/view/93123" target="_blank"&gt;1.1.11111&lt;/a&gt;&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;this release is result of a community request which was added to the &lt;a href="http://visualrx.codeplex.com/workitem/list/advanced" target="_blank"&gt;Issue Tracker&lt;/a&gt;. you can add other request or vote for existing one in &lt;a href="http://visualrx.codeplex.com/workitem/list/advanced" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/IMG_6623_7702_4FFA6DC7.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Visual Rx, Monitoring, IObservable, IObserver, Trace, Diagnostic" border="0" alt="Rx, Visual Rx, Monitoring, IObservable, IObserver, Trace, Diagnostic" src="http://blogs.microsoft.co.il/blogs/bnaya/IMG_6623_7702_thumb_0E500BAE.jpg" width="533" height="358" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;this release is also available on the &lt;strong&gt;&lt;a href="http://nuget.org/packages?q=visualrx"&gt;NuGet Gallery&lt;/a&gt;&lt;/strong&gt;.    &lt;br /&gt;the &lt;strong&gt;NuGet page&lt;/strong&gt; for &lt;strong&gt;version&lt;/strong&gt; &lt;strong&gt;1.0.10621&lt;/strong&gt; is available for download in &lt;a href="http://nuget.org/packages/VisualRx1.0.10621" target="_blank"&gt;here&lt;/a&gt; and the page for &lt;strong&gt;version&lt;/strong&gt; &lt;strong&gt;1.1.11111 &lt;/strong&gt;is available in &lt;a href="http://nuget.org/packages/VisualRx1.1.11111" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://nuget.org/packages?q=visualrx"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="Rx, Visual Rx, Monitoring, IObservable, IObserver, Trace, Diagnostic" border="0" alt="Rx, Visual Rx, Monitoring, IObservable, IObserver, Trace, Diagnostic" src="http://blogs.microsoft.co.il/blogs/bnaya/NuGet-Visual-Rx_456973DA.png" width="534" height="367" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;the same &lt;strong&gt;Visual Rx viewer&lt;/strong&gt; is compatible with all versions.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1234401" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SELA/default.aspx">SELA</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Rx/default.aspx">Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObserver/default.aspx">IObserver</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObservable/default.aspx">IObservable</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Debug/default.aspx">Debug</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive/default.aspx">Reactive</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive+Extension/default.aspx">Reactive Extension</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Diagnostic/default.aspx">Diagnostic</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Trace/default.aspx">Trace</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Visual+Rx/default.aspx">Visual Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Monitor/default.aspx">Monitor</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Monitoring/default.aspx">Monitoring</category></item><item><title>Visual Rx - Part 5</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/08/19/visual-rx-part-5.aspx</link><pubDate>Sun, 19 Aug 2012 11:32:45 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1226297</guid><dc:creator>bnaya</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Visual Rx - Part 5&lt;/h2&gt;  &lt;p&gt;this post is part of the &lt;strong&gt;&lt;a href="http://visualrx.codeplex.com/" target="_blank"&gt;Visual Rx&lt;/a&gt;&lt;/strong&gt; series and it will focus on controlling the &lt;strong&gt;Visual Rx publication&lt;/strong&gt; on the coding part.&lt;/p&gt;  &lt;p&gt;you can see this series &lt;strong&gt;TOC&lt;/strong&gt; in &lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/08/12/visual-rx-toc.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I was talking about &lt;strong&gt;enabling / disabling&lt;/strong&gt; the &lt;strong&gt;Visual Rx publication&lt;/strong&gt; (through the predefine publication channel), using the &lt;strong&gt;VirtualRxSettings.Enable &lt;/strong&gt;property, in &lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/07/30/visual-rx-part-1.aspx" target="_blank"&gt;part 1&lt;/a&gt; of this series.&lt;/p&gt;  &lt;h5&gt;Enable / Disable&lt;/h5&gt;  &lt;p&gt;let look at a &lt;strong&gt;Enable / Disable&lt;/strong&gt; snippet:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:15bcb2f4-10b4-4159-a211-31211ee7c73a" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;Task&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;VisualRxInitResult&lt;/span&gt;&amp;gt; info = &lt;span style="color:#2b91af;"&gt;VisualRxSettings&lt;/span&gt;.Initialize(&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#2b91af;"&gt;VisualRxWcfDiscoveryProxy&lt;/span&gt;.Create());&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#2b91af;"&gt;VisualRxInitResult&lt;/span&gt; infos = info.Result;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;Trace&lt;/span&gt;.WriteLine(infos);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; xs = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Interval(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(0.5))&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    .Take(10);&lt;/li&gt; &lt;li&gt;xs = xs.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Enable / Disable&amp;quot;&lt;/span&gt;, 1);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;xs.Subscribe(&lt;/li&gt; &lt;li&gt;    v =&amp;gt; &lt;span style="color:#2b91af;"&gt;VisualRxSettings&lt;/span&gt;.Enable = v &amp;lt; 3 || v &amp;gt; 6);&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;strong&gt;lines 1,2&lt;/strong&gt; define the &lt;strong&gt;publication channel&lt;/strong&gt; to &lt;strong&gt;Wcf Discovery&lt;/strong&gt;.     &lt;br /&gt;&lt;strong&gt;lines 4,5&lt;/strong&gt; is &lt;strong&gt;waiting &lt;/strong&gt;to the &lt;strong&gt;channel construction completion&lt;/strong&gt; and log it to the Trace.     &lt;br /&gt;&lt;strong&gt;lines 7,8&lt;/strong&gt; create a datum stream.     &lt;br /&gt;&lt;strong&gt;line 9&lt;/strong&gt; is &lt;strong&gt;monitoring&lt;/strong&gt; the stream.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;line 11&lt;/strong&gt;, within the &lt;strong&gt;Subscribe&lt;/strong&gt; method I &lt;strong&gt;toggle&lt;/strong&gt; the &lt;strong&gt;publication&lt;/strong&gt; (on / off), &lt;font color="#666666"&gt;you should be aware that the current value has been already sent by the time that the toggling logic took place, which mean that the toggling will affect the next value&lt;/font&gt;.&lt;/p&gt;  &lt;p&gt;the toggle state for values 4-7 is off therefore the Visual &lt;strong&gt;Rx Viewer&lt;/strong&gt; will show the stream as follow:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/onoff_4CCF26DA.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Visual Rx, Trace, Monitor, Monitoring, IObservable, IOserver" border="0" alt="Rx, Visual Rx, Trace, Monitor, Monitoring, IObservable, IOserver" src="http://blogs.microsoft.co.il/blogs/bnaya/onoff_thumb_448ADB76.png" width="492" height="316" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;enabling or disabling the publication is totally at your control.&lt;/p&gt;  &lt;h5&gt;Partial publication&lt;/h5&gt;  &lt;h6&gt;&lt;font style="font-weight:normal;"&gt;real-life scenario may demand a&lt;font style="font-weight:bold;"&gt; finer control &lt;/font&gt;over the datum&amp;#39;s publication.&amp;#160; &lt;br /&gt;you may want to &lt;font style="font-weight:bold;"&gt;enable &lt;font style="font-weight:normal;"&gt;or&lt;/font&gt; disable &lt;font style="font-weight:normal;"&gt;a&lt;/font&gt; partial publication&lt;/font&gt; based on the &lt;font style="font-weight:bold;"&gt;datum&amp;#39;s stream name&lt;/font&gt;, &lt;font style="font-weight:bold;"&gt;keywords&lt;/font&gt;, &lt;font style="font-weight:bold;"&gt;channel key &lt;/font&gt;or even the &lt;font style="font-weight:bold;"&gt;datum itself&lt;/font&gt;.&lt;/font&gt;&lt;/h6&gt;  &lt;p&gt;this can be achieved by using the &lt;strong&gt;VisualRxSetting.AddFilter &lt;/strong&gt;API.&lt;/p&gt;  &lt;p&gt;the following snippet is showing how to &lt;strong&gt;split different streams into different channels&lt;/strong&gt;:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:be057ba0-16dd-4d1d-a30f-13ecc4aecd68" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;Task&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;VisualRxInitResult&lt;/span&gt;&amp;gt; info = &lt;span style="color:#2b91af;"&gt;VisualRxSettings&lt;/span&gt;.Initialize(&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#2b91af;"&gt;VisualRxWcfDiscoveryProxy&lt;/span&gt;.Create(),&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#2b91af;"&gt;VisualRxWcfQueuedProxy&lt;/span&gt;.Create(),&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#2b91af;"&gt;VisualRxTraceSourceProxy&lt;/span&gt;.Create());&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#2b91af;"&gt;VisualRxSettings&lt;/span&gt;.AddFilter((marble, channelKey) =&amp;gt;&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; enable = &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;switch&lt;/span&gt; (marble.Name)&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        {&lt;/li&gt; &lt;li&gt;            &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt; &lt;span style="color:#a31515;"&gt;&amp;quot;Stream A&amp;quot;&lt;/span&gt;:&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                enable = channelKey == &lt;span style="color:#2b91af;"&gt;VisualRxWcfDiscoveryProxy&lt;/span&gt;.KIND;&lt;/li&gt; &lt;li&gt;                &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt; &lt;span style="color:#a31515;"&gt;&amp;quot;Stream B&amp;quot;&lt;/span&gt;:&lt;/li&gt; &lt;li&gt;                enable = channelKey == &lt;span style="color:#2b91af;"&gt;VisualRxTraceSourceProxy&lt;/span&gt;.KIND;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;            &lt;span style="color:#0000ff;"&gt;default&lt;/span&gt;:&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                enable = channelKey == &lt;span style="color:#2b91af;"&gt;VisualRxWcfQueuedProxy&lt;/span&gt;.KIND;&lt;/li&gt; &lt;li&gt;                &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        }&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; enable;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    });&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#2b91af;"&gt;VisualRxInitResult&lt;/span&gt; infos = info.Result;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;Trace&lt;/span&gt;.WriteLine(infos);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; xs = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Interval(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(0.5))&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;   .Take(10);&lt;/li&gt; &lt;li&gt;xs = xs.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Stream A&amp;quot;&lt;/span&gt;, 1);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; ys = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Interval(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(1))&lt;/li&gt; &lt;li&gt;   .Take(10);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;ys = ys.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Stream B&amp;quot;&lt;/span&gt;, 2);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;xs.Subscribe();&lt;/li&gt; &lt;li&gt;ys.Subscribe();&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;the result will be that the &lt;strong&gt;Visual Rx Viewer&lt;/strong&gt; will monitor &amp;quot;Stream A&amp;quot; while &amp;quot;Stream B&amp;quot; will be log to the &lt;strong&gt;TraceSource&lt;/strong&gt; under the &amp;quot;Visual Rx&amp;quot; setting.&lt;/p&gt;  &lt;p&gt;the Viewer will present the following:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/filter1_267CA7B5.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Visual Rx, Trace, Monitor, Monitoring, IObservable, IOserver" border="0" alt="Rx, Visual Rx, Trace, Monitor, Monitoring, IObservable, IOserver" src="http://blogs.microsoft.co.il/blogs/bnaya/filter1_thumb_6683116F.png" width="515" height="328" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;while the &lt;strong&gt;TraceSource output&lt;/strong&gt; is going to the default listener (therefore it will go to the output window on debugging).     &lt;br /&gt;the output will look as follow:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b8f18029-e340-4cc3-8c6b-3cab44afa0d2" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;MarbleBase&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;z:Id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;i1&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;i:type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;MarbleNext&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;BinaryValue&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;i:nil&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DateCreatedUtc&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;2012-08-13T12:07:31.8190414Z&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DateCreatedUtc&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;FormattedValue&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;FormattedValue&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;IndexOrder&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;IndexOrder&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Keywords&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Kind&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;OnNext&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Kind&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;MachineName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;i:nil&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;Stream B&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Offset&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;PT0.4960332S&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Offset&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Options&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;None&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Options&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StringValue&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StringValue&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ThreadId&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;14&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ThreadId&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;MarbleBase&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;...&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;VisualRx Information: 0 :&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;MarbleBase&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;z:Id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;i1&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;i:type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;MarbleComplete&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;BinaryValue&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;i:nil&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DateCreatedUtc&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;2012-08-13T12:07:40.9455634Z&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DateCreatedUtc&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;FormattedValue&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;i:nil&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;IndexOrder&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;IndexOrder&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Keywords&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Kind&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;OnCompleted&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Kind&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;MachineName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;i:nil&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;Stream B&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Offset&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;PT9.6220625S&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Offset&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Options&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;None&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Options&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StringValue&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;i:nil&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ThreadId&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;14&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ThreadId&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;MarbleBase&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;if you want you can even &lt;strong&gt;filter by the actual data&lt;/strong&gt;,     &lt;br /&gt;for example you can omit item that doesn&amp;#39;t relevant to the current monitoring session.&lt;/p&gt;  &lt;p&gt;the following code omit publication for datum that doesn&amp;#39;t belong to the &amp;quot;Extreme&amp;quot; category.&lt;/p&gt;  &lt;p&gt;first I will use the following declarations:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e60300c9-b281-4295-93ab-4733ac8614de" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;enum&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Category&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{ &lt;/li&gt; &lt;li&gt;    BallGame,&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    Snow,&lt;/li&gt; &lt;li&gt;    Extreme,&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    Water,&lt;/li&gt; &lt;li&gt;    Weapon&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Item&lt;/span&gt;&lt;/li&gt; &lt;li&gt;{&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Item(&lt;span style="color:#0000ff;"&gt;long&lt;/span&gt; value)&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        Value = value;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Category = (&lt;span style="color:#2b91af;"&gt;Category&lt;/span&gt;)(value % 5);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    }&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;long&lt;/span&gt; Value { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Category&lt;/span&gt; Category { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;the following snippet does the filtering:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8b91e8a9-7d2d-4765-91ec-a67b51e26a3b" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;Task&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;VisualRxInitResult&lt;/span&gt;&amp;gt; info = &lt;span style="color:#2b91af;"&gt;VisualRxSettings&lt;/span&gt;.Initialize(&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#2b91af;"&gt;VisualRxWcfDiscoveryProxy&lt;/span&gt;.Create());&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#2b91af;"&gt;VisualRxSettings&lt;/span&gt;.AddFilter((marble, channelKey) =&amp;gt;&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#2b91af;"&gt;Item&lt;/span&gt; item = marble.RawValue &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Item&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (item != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; marble.Name == &lt;span style="color:#a31515;"&gt;&amp;quot;Items&amp;quot;&lt;/span&gt;)&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; item.Category == &lt;span style="color:#2b91af;"&gt;Category&lt;/span&gt;.Extreme;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;; &lt;span style="color:#008000;"&gt;// it is best practice to return true &lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                     &lt;span style="color:#008000;"&gt;// because this way you don&amp;#39;t &lt;/span&gt;&lt;/li&gt; &lt;li&gt;                     &lt;span style="color:#008000;"&gt;// interfere with other filters&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    });&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#2b91af;"&gt;VisualRxInitResult&lt;/span&gt; infos = info.Result;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;Trace&lt;/span&gt;.WriteLine(infos);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; xs = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Interval(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(0.5))&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    .Select(v =&amp;gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Item&lt;/span&gt;(v))&lt;/li&gt; &lt;li&gt;   .Take(10);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;xs = xs.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Items&amp;quot;&lt;/span&gt;, 1);&lt;/li&gt; &lt;li&gt;xs = xs.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Other monitoring&amp;quot;&lt;/span&gt;, 1); &lt;span style="color:#008000;"&gt;// actually monitor the same aspect&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;xs.Subscribe();&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;focusing on the filtering at &lt;strong&gt;lines 4-12&lt;/strong&gt;, you can see that I &lt;strong&gt;filtered out&lt;/strong&gt; datum that belong to the &lt;strong&gt;&amp;quot;Items&amp;quot;&lt;/strong&gt; monitor and &lt;strong&gt;doesn&amp;#39;t have the &amp;quot;Extreme&amp;quot;&lt;/strong&gt; category.     &lt;br /&gt;in order to show the differences in the Visual Rx Viewer,     &lt;br /&gt;I was &lt;strong&gt;monitoring twice&lt;/strong&gt; (&lt;strong&gt;lines 20, 21&lt;/strong&gt;) once with the &lt;strong&gt;&amp;quot;Items&amp;quot;&lt;/strong&gt; name which will be filtered and the second time is actually monitoring the same data but this time with &lt;strong&gt;&amp;quot;Other monitoring&amp;quot;&lt;/strong&gt; name.     &lt;br /&gt;the result will be as follow:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/filter2_083EC434.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Visual Rx, Trace, Monitor, Monitoring, IObservable, IOserver" border="0" alt="Rx, Visual Rx, Trace, Monitor, Monitoring, IObservable, IOserver" src="http://blogs.microsoft.co.il/blogs/bnaya/filter2_thumb_109273BE.png" width="513" height="329" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;you can download the source code and check the tests &lt;strong&gt;App.Config&lt;/strong&gt; file to see how can you set the configuration for the &lt;strong&gt;TraceSource&lt;/strong&gt; channel.&lt;/p&gt;  &lt;p&gt;the following is one option where most of the listener are disabled:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b8ca7afc-ab32-4bd0-9d9f-04f7030d3b85" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.diagnostics&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;sources&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;"&gt; Visual Rx TraceSource publication &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;source&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;VisualRx&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;switchName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;defaultswitch&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;listeners&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;lt;remove name=&amp;quot;Default&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;lt;add name=&amp;quot;consoleListener&amp;quot; /&amp;gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;lt;add name=&amp;quot;xmlFileMonitorListener&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;lt;add name=&amp;quot;customListener&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;listeners&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;source&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;sources&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;switches&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;"&gt; Critical, Error, Warning, Information, Verbose&lt;/span&gt;&lt;/li&gt; &lt;li&gt;         &lt;span style="color:#008000;"&gt;ActivityTracing: Start, Stop, Suspend, Resume, Transfer&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#008000;"&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;defaultswitch&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;Verbose&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;switches&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;sharedListeners&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;customListener&lt;/span&gt;&amp;quot;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;System.Reactive.Contrib.TestMonitor.CustomTraceListener,System.Reactive.Contrib.TestMonitor&lt;/span&gt;&amp;quot;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;         &lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;traceOutputOptions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;ProcessId, DateTime&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;consoleListener&lt;/span&gt;&amp;quot;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;System.Diagnostics.ConsoleTraceListener&lt;/span&gt;&amp;quot;&lt;/li&gt; &lt;li&gt;         &lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;traceOutputOptions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;ProcessId, DateTime&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;eventlogListener&lt;/span&gt;&amp;quot;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;System.Diagnostics.EventLogTraceListener&lt;/span&gt;&amp;quot;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;initializeData&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;Application&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;filter&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;System.Diagnostics.EventTypeFilter&lt;/span&gt;&amp;quot;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;initializeData&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;Error&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;textFileListener&lt;/span&gt;&amp;quot;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;System.Diagnostics.TextWriterTraceListener&lt;/span&gt;&amp;quot;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;initializeData&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;RxContrib.log&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;xmlFileMonitorListener&lt;/span&gt;&amp;quot;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;System.Diagnostics.XmlWriterTraceListener&lt;/span&gt;&amp;quot;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;initializeData&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;Monitor.xml&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;defaultListener&lt;/span&gt;&amp;quot;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;System.Diagnostics.DefaultTraceListener&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;traceOutputOptions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;ProcessId&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;lt;add name=&amp;quot;nlog&amp;quot; type=&amp;quot;NLog.NLogTraceListener, NLog&amp;quot; /&amp;gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;sharedListeners&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.diagnostics&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;if you want to &lt;strong&gt;filter by keyword&lt;/strong&gt; just ask about the &lt;strong&gt;marble.Keywords&lt;/strong&gt;:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b587af4f-0f7c-4b6b-99ee-42f6f6fe3ee6" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;VisualRxSettings&lt;/span&gt;.AddFilter((marble, channelKey) =&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    marble.Keywords.Contains(&lt;span style="color:#a31515;"&gt;&amp;quot;Key1&amp;quot;&lt;/span&gt;));&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;the following snippet:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:71b6edfc-1df8-40ff-934a-40c744ae2276" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;Task&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;VisualRxInitResult&lt;/span&gt;&amp;gt; info = &lt;span style="color:#2b91af;"&gt;VisualRxSettings&lt;/span&gt;.Initialize(&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#2b91af;"&gt;VisualRxWcfDiscoveryProxy&lt;/span&gt;.Create());&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#2b91af;"&gt;VisualRxSettings&lt;/span&gt;.AddFilter((marble, channelKey) =&amp;gt;&lt;/li&gt; &lt;li&gt;    marble.Keywords.Contains(&lt;span style="color:#a31515;"&gt;&amp;quot;Key1&amp;quot;&lt;/span&gt;));&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;VisualRxInitResult&lt;/span&gt; infos = info.Result;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#2b91af;"&gt;Trace&lt;/span&gt;.WriteLine(infos);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; xs = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Interval(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(0.5))&lt;/li&gt; &lt;li&gt;   .Take(10);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;xs = xs.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Stream A&amp;quot;&lt;/span&gt;, 1, &lt;span style="color:#a31515;"&gt;&amp;quot;Key1&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Key3&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Key4&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; ys = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Interval(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(1))&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;   .Take(10);&lt;/li&gt; &lt;li&gt;ys = ys.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Stream B&amp;quot;&lt;/span&gt;, 2, &lt;span style="color:#a31515;"&gt;&amp;quot;Key2&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Key3&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;xs.Subscribe();&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;ys.Subscribe();&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;will be present in the viewer where only the &amp;quot;Stream A&amp;quot; will be shown on the Visual Rx Viewer because &amp;quot;Stream B&amp;quot; doesn&amp;#39;t have the &amp;quot;Key1&amp;quot; keyword:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/filter3_4ADDC3D2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Visual Rx, Trace, Monitor, Monitoring, IObservable, IOserver" border="0" alt="Rx, Visual Rx, Trace, Monitor, Monitoring, IObservable, IOserver" src="http://blogs.microsoft.co.il/blogs/bnaya/filter3_thumb_1F697D0B.png" width="511" height="328" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h6&gt;Clear Filters&lt;/h6&gt;  &lt;p&gt;at any time you can wipe-out all the filters by using the &lt;strong&gt;ClearFilters&lt;/strong&gt; API (&lt;font color="#666666"&gt;this one can help for testability&lt;/font&gt;).&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:477224d2-2fcc-4c47-a92a-2d2fad20a98b" class="class"&gt;   &lt;div style="border-bottom:#000080 1px solid;border-left:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;color:#000;font-size:10pt;border-top:#000080 1px solid;border-right:#000080 1px solid;"&gt;     &lt;div style="padding-bottom:2px;padding-left:5px;padding-right:5px;font-family:verdana, tahoma, arial, sans-serif;background:#000080;color:#fff;font-weight:bold;padding-top:2px;"&gt;Code Snippet&lt;/div&gt;      &lt;div style="background:#fff;overflow:auto;"&gt;       &lt;ol style="padding-bottom:0px;margin:0px;padding-left:5px;padding-right:0px;background:#ffffff;padding-top:0px;"&gt;         &lt;li&gt;&lt;span style="color:#2b91af;"&gt;VirtualRxSettings&lt;/span&gt;.ClearFilters(); &lt;/li&gt;       &lt;/ol&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;h5&gt;Summary&lt;/h5&gt;  &lt;p&gt;the filtering capability can keep a&lt;strong&gt; real-life system performance&lt;/strong&gt; unaffected by data that doesn&amp;#39;t relevant to the current monitoring session.&lt;/p&gt;  &lt;h5&gt;Future Feature&lt;/h5&gt;  &lt;p&gt;one of the feature that I want to add in the future is a remote tool that will control simple filtering like which keywords is actively monitored.&lt;/p&gt;  &lt;br /&gt;&lt;a href="http://dotnetshoutout.com/Visual-Rx-Part-5-Bnaya-Eshet"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.microsoft.co.il%2Fblogs%2Fbnaya%2Farchive%2F2012%2F08%2F19%2Fvisual-rx-part-5.aspx" /&gt;&lt;/a&gt; &lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblogs.microsoft.co.il%2fblogs%2fbnaya%2farchive%2f2012%2f08%2f19%2fvisual-rx-part-5.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx%?url=http%253a%252f%252fblogs.microsoft.co.il%252fblogs%252fbnaya%252farchive%252f2012%252f08%252f19%252fvisual-rx-part-5.aspx" /&gt;&lt;/a&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1226297" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SELA/default.aspx">SELA</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Rx/default.aspx">Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObserver/default.aspx">IObserver</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObservable/default.aspx">IObservable</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Debug/default.aspx">Debug</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive/default.aspx">Reactive</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive+Extension/default.aspx">Reactive Extension</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Diagnostic/default.aspx">Diagnostic</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Trace/default.aspx">Trace</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Visual+Rx/default.aspx">Visual Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Monitor/default.aspx">Monitor</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Monitoring/default.aspx">Monitoring</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/ISubject/default.aspx">ISubject</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IOserver/default.aspx">IOserver</category></item><item><title>Visual Rx - Part 4</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/08/15/visual-rx-part-4.aspx</link><pubDate>Wed, 15 Aug 2012 23:40:12 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1216721</guid><dc:creator>bnaya</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Visual Rx - Part 4&lt;/h2&gt;  &lt;p&gt;this post is the 4th of the &lt;strong&gt;&lt;a href="http://visualrx.codeplex.com/" target="_blank"&gt;Visual Rx&lt;/a&gt;&lt;/strong&gt; post series.     &lt;br /&gt;this post will focus on the &lt;strong&gt;communication channel settings&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;you can see this series &lt;strong&gt;TOC&lt;/strong&gt; in &lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/08/12/visual-rx-toc.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/IMG_3602_0108F350.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx, IObservable, IObserver, ISubject, Monitor, Monitoring" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx, IObservable, IObserver, ISubject, Monitor, Monitoring" src="http://blogs.microsoft.co.il/blogs/bnaya/IMG_3602_thumb_74D7535B.jpg" width="535" height="347" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;at the time I&amp;#39;m writing this post there is 4 available communication channel (out of the box).&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Wcf discovery&lt;/strong&gt; - will try to dynamically locate the end point of the viewer service (or any other discoverable service which apply to the Visual Rx contract).       &lt;br /&gt;&lt;font color="#a5a5a5"&gt;this is the easiest proxy and it is recommended to local network scenarios.&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Wcf queued&lt;/strong&gt; - which submit the datum though MSMQ channel (the default viewer is compatible with this channel). &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Trace Source&lt;/strong&gt; - publish the data though the standard .NET &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.tracesource.aspx" target="_blank"&gt;Trace Source&lt;/a&gt;. using the &lt;strong&gt;&amp;quot;VisualRx&amp;quot;&lt;/strong&gt; trace source name (&lt;font color="#666666"&gt;for internal messages it use &amp;quot;VisualRx.Log&amp;quot;&lt;/font&gt;)       &lt;br /&gt;the &lt;strong&gt;app.config&lt;/strong&gt; setting will be discuss on latter posts. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Wcf Fixed Address&lt;/strong&gt; - is a new one, it is let you specify a &lt;strong&gt;Wcf Binding&lt;/strong&gt; and &lt;strong&gt;End-Point&lt;/strong&gt; (and gives you the &lt;strong&gt;full flexibility&lt;/strong&gt; of the &lt;strong&gt;Wcf&lt;/strong&gt; library). &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Visual Rx Viewer side:&lt;/h5&gt;  &lt;p&gt;at the viewer side you simply dealing with a &lt;strong&gt;traditional Wcf application configuration&lt;/strong&gt; (for setting a Wcf channels).     &lt;br /&gt;from version 2.0.20622.10 the &lt;strong&gt;default&lt;/strong&gt; application setting is enabling &lt;strong&gt;Wcf discovery&lt;/strong&gt; &lt;strong&gt;over named-pipe and Wcf fixed address over basic http&lt;/strong&gt;.     &lt;br /&gt;other setting like MSMQ and Wcf discovery over TCP is remarked.     &lt;br /&gt;you can see the full application setting in &lt;a href="http://visualrx.codeplex.com/SourceControl/changeset/view/76339#1383411" target="_blank"&gt;here&lt;/a&gt;.     &lt;br /&gt;but the part that you are rely care about is:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:4ecd33bd-e6c2-4874-a6d8-6aee836445e0" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;"&gt; used by VisualRxWcfQueuedProxy &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;lt;endpoint address=&amp;quot;net.msmq://localhost/private/VisualRx&amp;quot; binding=&amp;quot;netMsmqBinding&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;          &lt;span style="color:#008000;"&gt;bindingConfiguration=&amp;quot;netMsmq&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;          &lt;span style="color:#008000;"&gt;contract=&amp;quot;System.Reactive.Contrib.Monitoring.Contracts.IVisualRxServiceAdapter&amp;quot; /&amp;gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;"&gt; used by VisualRxWcfFixedAddressProxy &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;endpoint&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;address&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;VisualRx&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;binding&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;basicHttpBinding&lt;/span&gt;&amp;quot;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;          &lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;contract&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;System.Reactive.Contrib.Monitoring.Contracts.IVisualRxServiceAdapter&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;"&gt; used by VisualRxWcfDiscoveryProxy &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;lt;endpoint name=&amp;quot;tcpMonitor&amp;quot; address=&amp;quot;Monitor&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;          &lt;span style="color:#008000;"&gt;binding=&amp;quot;netTcpBinding&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;          &lt;span style="color:#008000;"&gt;contract=&amp;quot;System.Reactive.Contrib.Monitoring.Contracts.IVisualRxServiceAdapter&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;"&gt; used by VisualRxWcfDiscoveryProxy &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;endpoint&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;namepipeMonitor&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;address&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;Monitor&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;          &lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;binding&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;netNamedPipeBinding&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;/li&gt; &lt;li&gt;          &lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;contract&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;System.Reactive.Contrib.Monitoring.Contracts.IVisualRxServiceAdapter&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;removing the remark from &lt;strong&gt;lines 2-4&lt;/strong&gt; will enable &lt;strong&gt;MSMQ&lt;/strong&gt; channel&amp;#160; (&lt;font color="#666666"&gt;make sure that MSMQ is install on the machine&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;lines 6-8&lt;/strong&gt; is the &lt;strong&gt;Wcf fixed address&lt;/strong&gt; over http.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;lines 10-16&lt;/strong&gt; is the &lt;strong&gt;Wcf discovery endpoints&lt;/strong&gt; (the TCP endpoint is remarked).&lt;/p&gt;  &lt;p&gt;actually this is all you have to do from a viewer perspective.&lt;/p&gt;  &lt;h5&gt;&amp;#160;&lt;/h5&gt;  &lt;h5&gt;Visual Rx Code side&lt;/h5&gt;  &lt;p&gt;at the code side you should choose which channel proxy do you want to use at the &lt;strong&gt;setting initialization&lt;/strong&gt; of &lt;strong&gt;VisualRxSetting&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;you can choose multiple channels at once, but you have to make sure that you don&amp;#39;t create a duplication in terms of a viewer will get the same result, from multiple channels, which will lead to duplication of data at the viewer side.&lt;/p&gt;  &lt;p&gt;the following snippet is enabling all 3 Wcf channel types:&lt;/p&gt;    &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:632264c3-0262-4ba8-b36d-5d7fefa3353e" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;Task&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;VisualRxInitResult&lt;/span&gt;&amp;gt; info = &lt;span style="color:#2b91af;"&gt;VisualRxSettings&lt;/span&gt;.Initialize(&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#2b91af;"&gt;VisualRxWcfDiscoveryProxy&lt;/span&gt;.Create(),&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#2b91af;"&gt;VisualRxWcfFixedAddressProxy&lt;/span&gt;.CreateDefaultHttp(&lt;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;.MachineName),&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#2b91af;"&gt;VisualRxWcfQueuedProxy&lt;/span&gt;.Create());&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;    &lt;p&gt;each channel creation is having a few overloads.    &lt;br /&gt;the sample above is using the &lt;strong&gt;most simplistic&lt;/strong&gt; ones.&lt;/p&gt;  &lt;h6&gt;Wcf Discovery&lt;/h6&gt;  &lt;p&gt;the Wcf discovery is the most easy channel, because you &lt;strong&gt;don&amp;#39;t have to configure a fix address&lt;/strong&gt; and the proxy will locate the viewer dynamically.&lt;/p&gt;  &lt;p&gt;the downside of this channel is that it is limit to a local network boundary and if that network has a vast number of machine the discover process could be slow and heavy.&lt;/p&gt;  &lt;p&gt;you can set the &lt;strong&gt;timeout&lt;/strong&gt; for discovery both in the code and the viewer sides.&lt;/p&gt;  &lt;p&gt;the &lt;strong&gt;viewer setting&lt;/strong&gt; is take place within the application configuration at the following section:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:5c89fee1-ecc6-47b4-9d18-6d4bb073d4fd" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;standardEndpoints&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;udpDiscoveryEndpoint&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:#008000;"&gt; modify the udpDiscoveryEndpoint &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;--&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;standardEndpoint&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;adhocDiscoveryEndpointConfiguration&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;maxResponseDelay&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;00:00:00.001&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;udpDiscoveryEndpoint&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;standardEndpoints&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;it is define the &lt;strong&gt;maximum time&lt;/strong&gt; that the viewer will randomly delay its answer (this number &lt;strong&gt;has to be lower then the proxy timeout &lt;/strong&gt;setting which will be discuss in the next section), Wcf is using this setting in order to reduce the network pressure.&lt;/p&gt;  &lt;p&gt;at the &lt;strong&gt;proxy side&lt;/strong&gt; you can use the &lt;strong&gt;default&lt;/strong&gt; creation which is using a &lt;strong&gt;3 seconds timeout&lt;/strong&gt; and retry to discover new viewer at a 30 minutes interval.&lt;/p&gt;  &lt;p&gt;but you can pass a &lt;strong&gt;VisualRxWcfDiscoverySettings&lt;/strong&gt; parameter and set those setting manually.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:33b32b50-13d2-40fd-acc9-c9f858db600b" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; setting = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;VisualRxWcfDiscoverySettings&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{&lt;/li&gt; &lt;li&gt;     DiscoveryTimeoutSeconds = 2,&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;     RediscoverIntervalMinutes = 15&lt;/li&gt; &lt;li&gt;};&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#2b91af;"&gt;VisualRxSettings&lt;/span&gt;.CollectMachineInfo = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;Task&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;VisualRxInitResult&lt;/span&gt;&amp;gt; info = &lt;span style="color:#2b91af;"&gt;VisualRxSettings&lt;/span&gt;.Initialize(&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;     &lt;span style="color:#2b91af;"&gt;VisualRxWcfDiscoveryProxy&lt;/span&gt;.Create(setting));&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;the Wcf discovery proxy will try to locate both &lt;strong&gt;named-pipe&lt;/strong&gt; and &lt;strong&gt;TCP&lt;/strong&gt; end-points (no need to any special setting for that).&lt;/p&gt;  &lt;h6&gt;Wcf Fixed End-Point&lt;/h6&gt;  &lt;p&gt;the Wcf fixed end-point is having 3 creation options:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:70908a4e-2d75-4532-b570-19e4d64528cc" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;VisualRxWcfFixedAddressProxy&lt;/span&gt; CreateDefaultHttp(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; host);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#2b91af;"&gt;VisualRxWcfFixedAddressProxy&lt;/span&gt; Create(&lt;span style="color:#2b91af;"&gt;Binding&lt;/span&gt; binding, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; uri);&lt;/li&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;VisualRxWcfFixedAddressProxy&lt;/span&gt; Create(&lt;span style="color:#2b91af;"&gt;Binding&lt;/span&gt; binding, &lt;span style="color:#2b91af;"&gt;EndpointAddress&lt;/span&gt; endpoint);&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;CreateDefaultHttp&lt;/strong&gt; is the most simple one and it operate over a &lt;strong&gt;basic http binding&lt;/strong&gt;. all you have to do is to supply the &lt;strong&gt;Machine name&lt;/strong&gt; or &lt;strong&gt;IP&lt;/strong&gt; address of the viewer machine. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Create&lt;/strong&gt; is having 2 overloads which is getting any &lt;strong&gt;Wcf binding&lt;/strong&gt; and the &lt;strong&gt;end-point&lt;/strong&gt; address of the viewer. it is very flexible in terms of the binding, it can take advantage of any binding setting (like security, session or even a restful like webHttpBinding). &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;MSMQ&lt;/h5&gt;  &lt;p&gt;the &lt;strong&gt;Wcf Queued&lt;/strong&gt; binding is operating over &lt;strong&gt;MSMQ&lt;/strong&gt; and it is having the following overloads:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ceab70d8-f0b7-41e9-8119-89fd00fb4a6b" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;VisualRxWcfQueuedProxy&lt;/span&gt; Create();&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#2b91af;"&gt;VisualRxWcfQueuedProxy&lt;/span&gt; Create(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt; timeToLive);&lt;/li&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;VisualRxWcfQueuedProxy&lt;/span&gt; Create(&lt;span style="color:#2b91af;"&gt;NetMsmqBinding&lt;/span&gt; binding);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#2b91af;"&gt;VisualRxWcfQueuedProxy&lt;/span&gt; Create(&lt;span style="color:#2b91af;"&gt;NetMsmqBinding&lt;/span&gt; binding, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; queuePath);&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;ul&gt;   &lt;li&gt;the &lt;strong&gt;default&lt;/strong&gt; creation is using a &lt;strong&gt;private queue&lt;/strong&gt; named &lt;strong&gt;VisualRx&lt;/strong&gt; and &lt;strong&gt;time to live of 30 minutes&lt;/strong&gt; (time to live define the period that the message will live in the queue before it will become stale). &lt;/li&gt;    &lt;li&gt;the second overload let you &lt;strong&gt;control the time to live&lt;/strong&gt; setting. &lt;/li&gt;    &lt;li&gt;the 3rd one is let you a &lt;strong&gt;full control over the binding&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;and the 4th is also let you &lt;strong&gt;control over the queue path&lt;/strong&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;that all for this post the &lt;strong&gt;TraceSource&lt;/strong&gt; will be discuss in further posts.&lt;/p&gt;  &lt;h5&gt;Summary&lt;/h5&gt;  &lt;p&gt;communication between your run-time streams and the viewer is fairly flexible and you actually can add your own custom proxy by implementing the &lt;strong&gt;IVisualRxProxy&lt;/strong&gt; interface.&lt;/p&gt;  &lt;br /&gt;&lt;a href="http://dotnetshoutout.com/Visual-Rx-Part-4-Bnaya-Eshet"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.microsoft.co.il%2Fblogs%2Fbnaya%2Farchive%2F2012%2F08%2F15%2Fvisual-rx-part-4.aspx" /&gt;&lt;/a&gt; &lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblogs.microsoft.co.il%2fblogs%2fbnaya%2farchive%2f2012%2f08%2f15%2fvisual-rx-part-4.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?http%253a%252f%252fblogs.microsoft.co.il%252fblogs%252fbnaya%252farchive%252f2012%252f08%252f15%252fvisual-rx-part-4.aspx" /&gt;&lt;/a&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1216721" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SELA/default.aspx">SELA</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Bnaya/default.aspx">Bnaya</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Rx/default.aspx">Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObserver/default.aspx">IObserver</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObservable/default.aspx">IObservable</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Debug/default.aspx">Debug</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive/default.aspx">Reactive</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive+Extension/default.aspx">Reactive Extension</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Profile/default.aspx">Profile</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Contrib/default.aspx">Contrib</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Dubug/default.aspx">Dubug</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Diagnostic/default.aspx">Diagnostic</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Trace/default.aspx">Trace</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Visual+Rx/default.aspx">Visual Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Marble/default.aspx">Marble</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Monitor/default.aspx">Monitor</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Viewer/default.aspx">Viewer</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Monitoring/default.aspx">Monitoring</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/ISubject/default.aspx">ISubject</category></item><item><title>Visual Rx - TOC</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/08/12/visual-rx-toc.aspx</link><pubDate>Sun, 12 Aug 2012 22:43:34 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1209167</guid><dc:creator>bnaya</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Visual Rx - TOC&lt;/h2&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://visualrx.codeplex.com/" target="_blank"&gt;Visual Rx&lt;/a&gt;&lt;/strong&gt; is a &lt;strong&gt;bundle&lt;/strong&gt; of &lt;strong&gt;API&lt;/strong&gt; and a&lt;strong&gt; Viewer&lt;/strong&gt; which can &lt;strong&gt;monitor &lt;/strong&gt;and &lt;strong&gt;visualize Rx datum stream&lt;/strong&gt; (at run-time).&lt;/p&gt;  &lt;p&gt;the current post in the Visual Rx series includes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/07/30/visual-rx-part-1.aspx" target="_blank"&gt;Part 1&lt;/a&gt;: Code side. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/08/12/visual-rx-part-2.aspx" target="_blank"&gt;Part 2&lt;/a&gt;: Viewer side. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/08/12/visual-rx-part-3.aspx" target="_blank"&gt;Part 3&lt;/a&gt;: How to start using Visual Rx. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/08/15/visual-rx-part-4.aspx" target="_blank"&gt;Part 4&lt;/a&gt;: Setting the communication channels. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/08/19/visual-rx-part-5.aspx" target="_blank"&gt;Part 5&lt;/a&gt;: publication filtering.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;you can &lt;strong&gt;vote&lt;/strong&gt; &lt;strong&gt;for feature&lt;/strong&gt; at the &lt;strong&gt;CodePlex&lt;/strong&gt; site under the &lt;a href="http://visualrx.codeplex.com/workitem/list/basic?ProjectName=visualrx" target="_blank"&gt;Issue Tracker tab&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;you can download the SDK and the Viewer from &lt;a href="http://visualrx.codeplex.com/releases/view/92629" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1209167" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SELA/default.aspx">SELA</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Rx/default.aspx">Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObserver/default.aspx">IObserver</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObservable/default.aspx">IObservable</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Debug/default.aspx">Debug</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive/default.aspx">Reactive</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive+Extension/default.aspx">Reactive Extension</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Diagnostic/default.aspx">Diagnostic</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Trace/default.aspx">Trace</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Visual+Rx/default.aspx">Visual Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Monitor/default.aspx">Monitor</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Monitoring/default.aspx">Monitoring</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IOserver/default.aspx">IOserver</category></item><item><title>Visual Rx - Part 3</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/08/12/visual-rx-part-3.aspx</link><pubDate>Sun, 12 Aug 2012 22:37:55 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1209156</guid><dc:creator>bnaya</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Visual Rx - Part 3&lt;/h2&gt;  &lt;p&gt;this post is part of the &lt;strong&gt;&lt;a href="http://visualrx.codeplex.com/" target="_blank"&gt;Visual Rx&lt;/a&gt;&lt;/strong&gt; series and it will focus on how to start working with &lt;strong&gt;Visual Rx&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;you can see this series &lt;strong&gt;TOC&lt;/strong&gt; in &lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/08/12/visual-rx-toc.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;as I was mention in previous posts &lt;strong&gt;Visual Rx&lt;/strong&gt; is divided into 2 parts:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;SDK&lt;/strong&gt; - which is the code side on which you define the &lt;strong&gt;VisualRxSetting&lt;/strong&gt; and use &lt;strong&gt;Monitor&lt;/strong&gt; extension method. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Viewer&lt;/strong&gt; - which is listening to the SDK communication channel and visualize the Rx stream. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;both parts available at the download page of &lt;strong&gt;Visual Rx&lt;/strong&gt; on &lt;a href="http://visualrx.codeplex.com/releases/view/92629" target="_blank"&gt;CodePlex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;the &lt;strong&gt;SDK&lt;/strong&gt; is also available at &lt;strong&gt;NuGet&lt;/strong&gt;.     &lt;br /&gt;the NuGet package include the Rx dlls and the the Visual Rx dlls.&lt;/p&gt;  &lt;p&gt;you can get it either directly from the &lt;strong&gt;&lt;a href="http://nuget.org/packages?q=nuget" target="_blank"&gt;NuGet&lt;/a&gt;&lt;/strong&gt; site:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/nugetsite_3ED46E9E.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Visual Rx, Monitor, Monitoring, Trace, Viewer" border="0" alt="Rx, Visual Rx, Monitor, Monitoring, Trace, Viewer" src="http://blogs.microsoft.co.il/blogs/bnaya/nugetsite_thumb_58987F00.png" width="508" height="247" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;or from visual studio add reference (&lt;font color="#666666"&gt;after you will install the NuGet Visual Studio extension which will add&lt;/font&gt; &lt;font color="#666666"&gt;&amp;quot;Manage NuGet Packages&amp;quot;&lt;/font&gt;):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/nuget-add_2D906B2E.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Visual Rx, Monitor, Monitoring, Trace, Viewer" border="0" alt="Rx, Visual Rx, Monitor, Monitoring, Trace, Viewer" src="http://blogs.microsoft.co.il/blogs/bnaya/nuget-add_thumb_5F3B62B6.png" width="327" height="202" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/nuget-add1_4FA82B1A.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Visual Rx, Monitor, Monitoring, Trace, Viewer" border="0" alt="Rx, Visual Rx, Monitor, Monitoring, Trace, Viewer" src="http://blogs.microsoft.co.il/blogs/bnaya/nuget-add1_thumb_1B63DC07.png" width="505" height="286" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;the &lt;strong&gt;Viewer&lt;/strong&gt; is also available in 2 flavor:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;XCopy&lt;/strong&gt; - which is a zip that contain the viewer exe + dependencies. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;MSI&lt;/strong&gt; - a setup file which will install the viewer on your machine. &lt;/li&gt;    &lt;li&gt;in the future it may be also available though clickonce. &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Where can I get sample code?&lt;/h5&gt;  &lt;p&gt;you can download the source code from &lt;a href="http://visualrx.codeplex.com/releases/view/92629" target="_blank"&gt;CodePlex&lt;/a&gt; and     &lt;br /&gt;run the MS-Tests under the System.Reactive.Contrib.Monitoring.UnitTests project (most test is under the Demo folder).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/unittest_61BCD6CE.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Visual Rx, Monitor, Monitoring, Trace, Viewer" border="0" alt="Rx, Visual Rx, Monitor, Monitoring, Trace, Viewer" src="http://blogs.microsoft.co.il/blogs/bnaya/unittest_thumb_72745BAF.png" width="378" height="404" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h5&gt;More&lt;/h5&gt;  &lt;p&gt;finally you can &lt;strong&gt;vote&lt;/strong&gt; &lt;strong&gt;for feature&lt;/strong&gt; at the &lt;strong&gt;CodePlex&lt;/strong&gt; site under the &lt;a href="http://visualrx.codeplex.com/workitem/list/basic?ProjectName=visualrx" target="_blank"&gt;Issue Tracker tab&lt;/a&gt;.&lt;/p&gt;  &lt;h5&gt;Summary&lt;/h5&gt;  &lt;p&gt;I hope that you find the Visual Rx useful.    &lt;br /&gt;please vote for feature so I will know what does the community value most.&lt;/p&gt;  &lt;p&gt;on later post will discuss more advance scenarios.&lt;/p&gt;  &lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblogs.microsoft.co.il%2fblogs%2fbnaya%2farchive%2f2012%2f08%2f12%2fvisual-rx-part-3.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%253a%252f%252fblogs.microsoft.co.il%252fblogs%252fbnaya%252farchive%252f2012%252f08%252f12%252fvisual-rx-part-3.aspx" /&gt;&lt;/a&gt; &lt;a href="http://dotnetshoutout.com/Visual-Rx-Part-3-Bnaya-Eshet"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.microsoft.co.il%2Fblogs%2Fbnaya%2Farchive%2F2012%2F08%2F12%2Fvisual-rx-part-3.aspx" /&gt;&lt;/a&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1209156" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SELA/default.aspx">SELA</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Rx/default.aspx">Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObserver/default.aspx">IObserver</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObservable/default.aspx">IObservable</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Debug/default.aspx">Debug</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Profiler/default.aspx">Profiler</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive/default.aspx">Reactive</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive+Extension/default.aspx">Reactive Extension</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/linq/default.aspx">linq</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Diagnostic/default.aspx">Diagnostic</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Trace/default.aspx">Trace</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Visual+Rx/default.aspx">Visual Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Monitor/default.aspx">Monitor</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Viewer/default.aspx">Viewer</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Monitoring/default.aspx">Monitoring</category></item><item><title>Visual Rx - Part 2</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/08/12/visual-rx-part-2.aspx</link><pubDate>Sun, 12 Aug 2012 22:36:30 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1209152</guid><dc:creator>bnaya</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Visual Rx - Part 2&lt;/h2&gt;  &lt;p&gt;this is the second post in the &lt;strong&gt;&lt;a href="http://visualrx.codeplex.com/" target="_blank"&gt;Visual Rx&lt;/a&gt;&lt;/strong&gt; series.     &lt;br /&gt;this post will focus on the &lt;strong&gt;viewer&lt;/strong&gt; side.&lt;/p&gt;  &lt;p&gt;you can see this series &lt;strong&gt;TOC&lt;/strong&gt; in &lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/08/12/visual-rx-toc.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;as we saw in the previous post the main view of the &lt;strong&gt;Visual Rx&lt;/strong&gt; viewer is using a &lt;strong&gt;tab &lt;/strong&gt;control (&lt;font color="#666666"&gt;the default tab is the &amp;quot;All&amp;quot; tab&lt;/font&gt;) out of the box the viewer is also having a grid tab, additional tab will be added per keyword.     &lt;br /&gt;(&lt;font color="#666666"&gt;the grid is actually a plugin and it can be remove by deleting it from the relative &lt;strong&gt;Plugins&lt;/strong&gt; folder&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;all tabs except of the grid tab is presenting the data using a marble diagrams.&lt;/p&gt;  &lt;p&gt;&lt;font color="#666666"&gt;the Visual Rx viewer is a plug-able application and you can have a custom tabs if you want to present the data in a different way (more on this topic in latter posts).&lt;/font&gt;&lt;/p&gt;  &lt;h4&gt;Application Level&lt;/h4&gt;  &lt;p&gt;on the top left you can see 3 buttons, Pause, Clear and About.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/profile-91_708C8DF9.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" src="http://blogs.microsoft.co.il/blogs/bnaya/profile-91_thumb_5E141777.png" width="518" height="112" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;the &lt;strong&gt;Clear&lt;/strong&gt; button will clear the current presenting data on all tabs.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Pause&lt;/strong&gt; will &lt;strong&gt;freeze&lt;/strong&gt; the view (without loosing data).     &lt;br /&gt;it is essential for &lt;strong&gt;analyzing a fast stream at runtime&lt;/strong&gt;.     &lt;br /&gt;this is a toggle button which will change between &lt;strong&gt;Pause&lt;/strong&gt; and &lt;strong&gt;Resume&lt;/strong&gt;. the data continue to be collected while the viewer is in a pause mode (&lt;font color="#666666"&gt;even those this data doesn&amp;#39;t display&lt;/font&gt;).     &lt;br /&gt;&lt;strong&gt;Resume&lt;/strong&gt; will immediately display all the data that was collected during the pause phase and resume to display a new data.&lt;/p&gt;  &lt;h4&gt;Single Tab level&lt;/h4&gt;  &lt;p&gt;under each tab you can find the &amp;quot;&lt;strong&gt;show tab actions&lt;/strong&gt;&amp;quot; link (&lt;font color="#666666"&gt;marked by yellow&lt;/font&gt;) which will expand a tab&amp;#39;s level actions (&lt;font color="#666666"&gt;those actions will affect the only current tab&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/profile-92_39BF0D28.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" src="http://blogs.microsoft.co.il/blogs/bnaya/profile-92_thumb_4E14ACE6.png" width="522" height="150" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;clicking on this link will expand / collapse the tab&amp;#39;s level actions.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/profile-93_5D8798E8.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" src="http://blogs.microsoft.co.il/blogs/bnaya/profile-93_thumb_02E1668A.png" width="522" height="218" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;the tab&amp;#39;s level actions include the following functionalities:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Clear&lt;/strong&gt; will clear the diagrams from the current tab (&lt;font color="#666666"&gt;while preserving other tabs diagrams&lt;/font&gt;). &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Global Time&lt;/strong&gt;,&lt;strong&gt; Private Time&lt;/strong&gt; and &lt;strong&gt;Sequence&lt;/strong&gt; are different ways of ordering the marbles on the marble line:       &lt;ul&gt;       &lt;li&gt;&lt;strong&gt;Global time&lt;/strong&gt; will show the marble on a timeline with a correlation between all marble diagrams within the current tab (&lt;font color="#666666"&gt;this is useful when the diagram streams are related to each other, like the case of Rx combinators like Merge&lt;/font&gt;). &lt;/li&gt;        &lt;li&gt;&lt;strong&gt;Private time&lt;/strong&gt; will conduct the diagram timeline on a single diagram base. &lt;/li&gt;        &lt;li&gt;&lt;strong&gt;Sequence&lt;/strong&gt; will present the marbles in correlation to their creation order regardless of the creation time (&lt;font color="#666666"&gt;it is useful for operators like Range or when multiple marble were produce at the same time&lt;/font&gt;). &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;on the previous post we was looking at the following code:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:92b14d30-9411-4299-8c06-d80d3b02c857" class="class"&gt;   &lt;div style="border-bottom:#000080 1px solid;border-left:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;color:#000;font-size:10pt;border-top:#000080 1px solid;border-right:#000080 1px solid;"&gt;     &lt;div style="padding-bottom:2px;padding-left:5px;padding-right:5px;font-family:verdana, tahoma, arial, sans-serif;background:#000080;color:#fff;font-weight:bold;padding-top:2px;"&gt;Code Snippet&lt;/div&gt;      &lt;div style="background:#ddd;overflow:auto;"&gt;       &lt;ol style="padding-bottom:0px;margin:0px 0px 0px 2.5em;padding-left:5px;padding-right:0px;background:#ffffff;padding-top:0px;"&gt;         &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; inputA1 = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Interval(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(1.5)).Take(7); &lt;/li&gt;          &lt;li style="background:#f3f3f3;"&gt;inputA1 = inputA1.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Input A1&amp;quot;&lt;/span&gt;, 1, &lt;span style="color:#a31515;"&gt;&amp;quot;ScenarioA&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Input&amp;quot;&lt;/span&gt;); &lt;/li&gt;          &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; inputA2 = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Interval(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(2)).Take(5); &lt;/li&gt;          &lt;li style="background:#f3f3f3;"&gt;inputA2 = inputA2.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Input A2&amp;quot;&lt;/span&gt;, 2, &lt;span style="color:#a31515;"&gt;&amp;quot;ScenarioA&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Input&amp;quot;&lt;/span&gt;); &lt;/li&gt;          &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; outputA = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Merge(inputA1, inputA2); &lt;/li&gt;          &lt;li style="background:#f3f3f3;"&gt;outputA = outputA.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Output A&amp;quot;&lt;/span&gt;, 3, &lt;span style="color:#a31515;"&gt;&amp;quot;ScenarioA&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Output&amp;quot;&lt;/span&gt;); &lt;/li&gt;          &lt;li&gt;&lt;/li&gt;          &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; inputB = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Interval(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(1)).Take(10); &lt;/li&gt;          &lt;li&gt;inputB = inputB.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Input B&amp;quot;&lt;/span&gt;, 4, &lt;span style="color:#a31515;"&gt;&amp;quot;ScenarioB&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Input&amp;quot;&lt;/span&gt;); &lt;/li&gt;          &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; outputB = &lt;span style="color:#0000ff;"&gt;from&lt;/span&gt; item &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; inputB &lt;/li&gt;          &lt;li&gt;&lt;span style="color:#0000ff;"&gt;group&lt;/span&gt; item &lt;span style="color:#0000ff;"&gt;by&lt;/span&gt; item % 3 &lt;span style="color:#0000ff;"&gt;into&lt;/span&gt; g &lt;/li&gt;          &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;select&lt;/span&gt; g; &lt;/li&gt;          &lt;li&gt;outputB = outputB.MonitorGroup(&lt;span style="color:#a31515;"&gt;&amp;quot;Output B&amp;quot;&lt;/span&gt;, 5, &lt;span style="color:#a31515;"&gt;&amp;quot;ScenarioB&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Output&amp;quot;&lt;/span&gt;); &lt;/li&gt;          &lt;li style="background:#f3f3f3;"&gt;&lt;/li&gt;          &lt;li&gt;outputA.Subscribe(); &lt;/li&gt;          &lt;li style="background:#f3f3f3;"&gt;outputB.Subscribe(g =&amp;gt; g.Subscribe()); &lt;/li&gt;       &lt;/ol&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;the default &lt;strong&gt;Global Time&lt;/strong&gt; view will present the data as follow:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/glob_3196F95F.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" src="http://blogs.microsoft.co.il/blogs/bnaya/glob_thumb_25C16693.png" width="541" height="591" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;as you can see the diagrams time line is in correlation with each other, &lt;strong&gt;Private Time&lt;/strong&gt; will shift the diagram marble to the left:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/private_3B4B7963.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" src="http://blogs.microsoft.co.il/blogs/bnaya/private_thumb_7586A3AA.png" width="540" height="589" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;still the time ratio were preserved on per diagram based.&lt;/p&gt;  &lt;p&gt;the &lt;strong&gt;Sequence&lt;/strong&gt; option will ignore the time ratio and present the data in a simple sequence:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/seq_533E7257.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" src="http://blogs.microsoft.co.il/blogs/bnaya/seq_thumb_522636E0.png" width="525" height="586" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;let resume the the rest of the actions:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/profile-93_1609CF5E.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" src="http://blogs.microsoft.co.il/blogs/bnaya/profile-93_thumb_1B489042.png" width="540" height="225" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Scroll To End&lt;/strong&gt; is a toggle button which will automatically keep the horizontal scrolling bar attached to the right end, which mean that the newest data will always be visible &lt;/li&gt;    &lt;li&gt;the &lt;strong&gt;Track-bar&lt;/strong&gt; is a zooming bar &lt;/li&gt;    &lt;li&gt;and though the &lt;strong&gt;combo-box&lt;/strong&gt; you can define the presented time scale (fast stream time scale may better present in millisecond units). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/scale_290AB070.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" src="http://blogs.microsoft.co.il/blogs/bnaya/scale_thumb_53D2EEB5.png" width="532" height="412" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Marble diagram level&lt;/h4&gt;  &lt;p&gt;at the marble diagram level you can find a &lt;strong&gt;popup action bar&lt;/strong&gt; which response to &lt;strong&gt;click on the marble title&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/profile-97_07F6F22F.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" src="http://blogs.microsoft.co.il/blogs/bnaya/profile-97_thumb_3252FD7F.png" width="525" height="405" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;the action includes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Refresh&lt;/strong&gt; - which refresh the marble view. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Global Time&lt;/strong&gt;, &lt;strong&gt;Private Time&lt;/strong&gt; and &lt;strong&gt;Sequence&lt;/strong&gt; on a single marble level. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;the last functionality is &lt;strong&gt;collapse&lt;/strong&gt; ability.     &lt;br /&gt;&lt;strong&gt;clicking on the marble collapser &lt;/strong&gt;will collapse the marble:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/clp_037D1F10.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" src="http://blogs.microsoft.co.il/blogs/bnaya/clp_thumb_48A5506C.png" width="513" height="453" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Summary&lt;/h4&gt;  &lt;p&gt;the &lt;strong&gt;Visual Rx viewer&lt;/strong&gt; is a reach viewer which was &lt;strong&gt;design to support Rx dataflow analysis&lt;/strong&gt;.     &lt;br /&gt;you can take it further by using a custom plug-ins but this will be discuss on latter posts.&lt;/p&gt;  &lt;p&gt;you can download the Viewer and the SDK from &lt;a href="http://visualrx.codeplex.com/releases/view/92629" target="_blank"&gt;codeplex&lt;/a&gt; and the SDK can also be download from &lt;a href="http://nuget.org/packages?q=visualrx" target="_blank"&gt;NuGet&lt;/a&gt; (search for VisualRx).&lt;/p&gt;  &lt;p&gt;you can &lt;strong&gt;vote&lt;/strong&gt; &lt;strong&gt;for feature&lt;/strong&gt; at the &lt;strong&gt;CodePlex&lt;/strong&gt; site under the &lt;a href="http://visualrx.codeplex.com/workitem/list/basic?ProjectName=visualrx" target="_blank"&gt;Issue Tracker tab&lt;/a&gt;.&lt;/p&gt; &lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblogs.microsoft.co.il%2fblogs%2fbnaya%2farchive%2f2012%2f08%2f12%2fvisual-rx-part-2.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%253a%252f%252fblogs.microsoft.co.il%252fblogs%252fbnaya%252farchive%252f2012%252f08%252f12%252fvisual-rx-part-2.aspx" /&gt;&lt;/a&gt; &lt;a href="http://dotnetshoutout.com/Visual-Rx-Part-2-Bnaya-Eshet"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.microsoft.co.il%2Fblogs%2Fbnaya%2Farchive%2F2012%2F08%2F12%2Fvisual-rx-part-2.aspx" /&gt;&lt;/a&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1209152" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SELA/default.aspx">SELA</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Bnaya/default.aspx">Bnaya</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Rx/default.aspx">Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObserver/default.aspx">IObserver</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObservable/default.aspx">IObservable</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Debug/default.aspx">Debug</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive/default.aspx">Reactive</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive+Extension/default.aspx">Reactive Extension</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Profile/default.aspx">Profile</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/linq/default.aspx">linq</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Contrib/default.aspx">Contrib</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Dubug/default.aspx">Dubug</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Diagnostic/default.aspx">Diagnostic</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Trace/default.aspx">Trace</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Visual+Rx/default.aspx">Visual Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Marble/default.aspx">Marble</category></item><item><title>Visual Rx - Part 1</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/07/30/visual-rx-part-1.aspx</link><pubDate>Mon, 30 Jul 2012 22:15:05 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1178058</guid><dc:creator>bnaya</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Visual Rx - Part 1&lt;/h2&gt;  &lt;p&gt;this post is the first of series about &lt;strong&gt;&lt;a href="http://visualrx.codeplex.com/" target="_blank"&gt;Visual Rx&lt;/a&gt;.&lt;/strong&gt;     &lt;br /&gt;this post series also stand as the &lt;strong&gt;official help&lt;/strong&gt; of Visual Rx. &lt;/p&gt;  &lt;p&gt;you can see this series &lt;strong&gt;TOC&lt;/strong&gt; in &lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/08/12/visual-rx-toc.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Visual Rx&lt;/strong&gt; is a &lt;strong&gt;bundle&lt;/strong&gt; of &lt;strong&gt;API&lt;/strong&gt; and a&lt;strong&gt; Viewer&lt;/strong&gt; which can &lt;strong&gt;monitor &lt;/strong&gt;and &lt;strong&gt;visualize Rx datum stream&lt;/strong&gt; (at run-time).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/profile-m01_3F0BCFDE.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" src="http://blogs.microsoft.co.il/blogs/bnaya/profile-m01_thumb_785E6E6E.png" width="502" height="431" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;one of the challenge of any Rx solution is &lt;strong&gt;reasoning about the datum flow&lt;/strong&gt; &lt;strong&gt;at run-time&lt;/strong&gt;, the Visual Rx bundle is a perfect solution for this problem.&lt;/p&gt;  &lt;p&gt;Visual Rx was &lt;strong&gt;design&lt;/strong&gt; &lt;strong&gt;for&lt;/strong&gt;&amp;#160;&lt;strong&gt;minimal performance penalty&lt;/strong&gt;, which make it a perfect candidate for production time monitoring.&lt;/p&gt;  &lt;h6&gt;Supported functionality :&lt;/h6&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Activation&lt;/strong&gt;: monitoring can be enable and disable at runtime (at the code side). &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Transport&lt;/strong&gt;: different transport strategy can be apply (including &lt;strong&gt;WCF&lt;/strong&gt;, &lt;strong&gt;Queue&lt;/strong&gt;, and &lt;strong&gt;Trace Source&lt;/strong&gt;). &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Plug-ins&lt;/strong&gt;: custom behaviors can be hook on different aspect of the monitoring or UI functionality, including a custom transport channel, UI painting and more (&lt;font color="#666666"&gt;more about this one on letter post&lt;/font&gt;). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;the &lt;strong&gt;architecture&lt;/strong&gt; of the &lt;strong&gt;Visual Rx&lt;/strong&gt; bundle is separate into two main components groups (&lt;font color="#666666"&gt;those groups is having a loosely couple connection though a common contract and DTOs&lt;/font&gt;):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Coding extension&lt;/strong&gt; which is responsible to the settings and the transmission of the datum information on the &lt;strong&gt;Rx code side&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Viewer&lt;/strong&gt; component which is responsible to &lt;strong&gt;visualize the Rx datum stream&lt;/strong&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Coding extension&lt;/h4&gt;  &lt;h5&gt;Visual Rx settings&lt;/h5&gt;  &lt;p&gt;the Visual Rx setting is responsible to &lt;strong&gt;setup&lt;/strong&gt; the &lt;strong&gt;transmission channels&lt;/strong&gt; which will be used to submit the Rx datum stream toward the viewer (&lt;font color="#666666"&gt;or any other end point&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;out of the box &lt;/strong&gt;Visual Rx come with the followings built-in channels:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Wcf discovery&lt;/strong&gt; - will try to locate the end point of the viewer service (or any other discoverable service which apply to the Visual Rx contract).       &lt;br /&gt;&lt;font color="#a5a5a5"&gt;this is the easiest proxy and it is recommended to local network scenarios.&lt;/font&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Wcf queued&lt;/strong&gt; - which submit the datum though MSMQ channel (the default viewer is compatible with this channel). &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Trace Source&lt;/strong&gt; - publish the data though the standard .NET &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.tracesource.aspx" target="_blank"&gt;Trace Source&lt;/a&gt;. using the &lt;strong&gt;&amp;quot;VisualRx&amp;quot;&lt;/strong&gt; trace source name (&lt;font color="#666666"&gt;for internal messages it use &amp;quot;VisualRx.Log&amp;quot;&lt;/font&gt;).&amp;#160; &lt;br /&gt;the &lt;strong&gt;app.config&lt;/strong&gt; setting will be discuss on latter posts. &lt;/li&gt; &lt;/ul&gt;  &lt;h6&gt;Initialize&lt;/h6&gt;  &lt;p&gt;you can define the channel by using &lt;strong&gt;VirtualRxSettings&lt;/strong&gt; Initialize static method.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:249d0bd8-e538-4083-9d6f-82b30b6926ab" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;Task&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;VisualRxInitResult&lt;/span&gt;&amp;gt; info = &lt;span style="color:#2b91af;"&gt;VisualRxSettings&lt;/span&gt;.Initialize(&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#2b91af;"&gt;VisualRxWcfDiscoveryProxy&lt;/span&gt;.Create(),&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#2b91af;"&gt;VisualRxWcfQueuedProxy&lt;/span&gt;.Create(),&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#2b91af;"&gt;VisualRxTraceSourceProxy&lt;/span&gt;.Create());&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#2b91af;"&gt;VisualRxInitResult&lt;/span&gt; infos = info.Result;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;Trace&lt;/span&gt;.WriteLine(infos);&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;font color="#666666"&gt;lines 1-4 setup the transmission channels to all 3 built-in channels.      &lt;br /&gt;it is a non blocking API which return a Task which you can either wait until the channels construction or use a ContinueWith / await for a callback operations (this sample is blocking until the channels are ready).&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#666666"&gt;through the Task result you can log the channels state (lines 6-8).&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;this is the Initialize method signature:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:97cb29e4-9ba6-4b54-93b8-6795938185d6" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;Task&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;VisualRxInitResult&lt;/span&gt;&amp;gt; Initialize(&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            &lt;span style="color:#0000ff;"&gt;params&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IVisualRxProxy&lt;/span&gt;[] proxies)&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;as you can see, you can initialize any number of proxies including a &lt;strong&gt;custom proxies&lt;/strong&gt; that implement &lt;strong&gt;IVisualRxProxy&lt;/strong&gt; (the proxy responsibility is to send the data though a channel).     &lt;br /&gt;&lt;font color="#666666"&gt;&lt;em&gt;you can call the Initialize method multiple time, each call will override the settings of the previous one&lt;/em&gt;&lt;/font&gt;.&lt;/p&gt;  &lt;h6&gt;Enable&lt;/h6&gt;  &lt;p&gt;at any time you can turn on / off the profiling operation by assigning the Enable property.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b72cf472-bd4c-4936-af10-9bc6d9b89460" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;VirtualRxSettings&lt;/span&gt;.Enable = &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;this is one of the way you can avoid performance penalty. you can activate the data publication only when you need to actively monitor the it.    &lt;br /&gt;you can expose this functionality by any standard service (&lt;font color="#666666"&gt;in letter version I will supply a tool for remote activation and deactivate the publication&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&lt;font color="#666666"&gt;other advance setting will be discuss on latter posts.&lt;/font&gt;&lt;/p&gt;  &lt;h5&gt;&amp;#160;&lt;/h5&gt;  &lt;h5&gt;Monitoring an IObservable&amp;lt;T&amp;gt;&lt;/h5&gt;  &lt;p&gt;for any observable you can use a &lt;strong&gt;Monitor extension methods&lt;/strong&gt; in order to publish the the observable&amp;#39;s datum information though a predefine channels.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b76f3bcc-f0a2-49ca-b6d8-69bf695eb305" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; xs = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Interval(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(1)).Take(5);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;xs = xs.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Interval 1 second&amp;quot;&lt;/span&gt;, 1);&lt;/li&gt; &lt;li&gt;xs.Subscribe();&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;the minimal overload of the &lt;strong&gt;Monitor&lt;/strong&gt; method is getting 2 parameters&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;marble diagram &lt;strong&gt;name&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;marble diagram &lt;strong&gt;index order&lt;/strong&gt; (&lt;font color="#a5a5a5"&gt;which is handle by the viewer&lt;/font&gt;). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#333333"&gt;&lt;strong&gt;IMPORTANT&lt;/strong&gt;: you should define the transmission channel (see &lt;strong&gt;Visual Rx Setting&lt;/strong&gt;) in order to actually send the datum through the publication channel (it is you&amp;#39;re responsibility to define the publication channel).&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;for example the following code snippet is setting a Wcf Discovery proxy in order of monitoring 2 observables:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c6d361a9-968f-4800-8cd3-9062d14d7d27" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;Task&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;VisualRxInitResult&lt;/span&gt;&amp;gt; info = &lt;span style="color:#2b91af;"&gt;VisualRxSettings&lt;/span&gt;.Initialize(&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#2b91af;"&gt;VisualRxWcfDiscoveryProxy&lt;/span&gt;.Create(),&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#2b91af;"&gt;VisualRxWcfQueuedProxy&lt;/span&gt;.Create(),&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#2b91af;"&gt;VisualRxTraceSourceProxy&lt;/span&gt;.Create());&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#2b91af;"&gt;VisualRxInitResult&lt;/span&gt; infos = info.Result;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;Trace&lt;/span&gt;.WriteLine(infos);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; xs = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Interval(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(1)).Take(5);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;xs = xs.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Interval 1 second&amp;quot;&lt;/span&gt;, 1);&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; ys = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Interval(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(0.5)).Take(10);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;ys = ys.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Interval 0.5 second&amp;quot;&lt;/span&gt;, 2);&lt;/li&gt; &lt;li&gt;  &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;xs.Subscribe();&lt;/li&gt; &lt;li&gt;ys.Subscribe();&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;the above code will be present on the VisualRx viewer as follow:&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/profile-m02_0DD85B72.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" src="http://blogs.microsoft.co.il/blogs/bnaya/profile-m02_thumb_5F5E8A2A.png" width="505" height="326" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;the viewer is having 2 tabs (&lt;strong&gt;All&lt;/strong&gt; and &lt;strong&gt;Grid&lt;/strong&gt;),     &lt;br /&gt;the All tab is the selected tab which present the data stream as a sequence of marbles, the distance between marble present the duration.     &lt;br /&gt;as you can see the 1 second interval is less intensive then the 0.5 second interval.&lt;/p&gt;  &lt;p&gt;the Grid representation will present each datum as a line in a grid:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/profile03_7761A8EB.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" src="http://blogs.microsoft.co.il/blogs/bnaya/profile03_thumb_6307F52E.png" width="492" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;in real-life you may have more then a few Rx data streams which may have inter relation (you may want to have separate tab for each of those sub groups).&lt;/p&gt;  &lt;p&gt;for this scenario &lt;strong&gt;Visual Rx&lt;/strong&gt; support a &lt;strong&gt;keywords&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;the following code snippet is setting different keywords to different datum streams:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:92b14d30-9411-4299-8c06-d80d3b02c857" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; inputA1 = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Interval(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(1.5)).Take(7);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;inputA1 = inputA1.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Input A1&amp;quot;&lt;/span&gt;, 1, &lt;span style="color:#a31515;"&gt;&amp;quot;ScenarioA&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Input&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; inputA2 = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Interval(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(2)).Take(5);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;inputA2 = inputA2.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Input A2&amp;quot;&lt;/span&gt;, 2, &lt;span style="color:#a31515;"&gt;&amp;quot;ScenarioA&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Input&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; outputA = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Merge(inputA1, inputA2);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;outputA = outputA.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Output A&amp;quot;&lt;/span&gt;, 3, &lt;span style="color:#a31515;"&gt;&amp;quot;ScenarioA&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Output&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; inputB = &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Interval(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(1)).Take(10);&lt;/li&gt; &lt;li&gt;inputB = inputB.Monitor(&lt;span style="color:#a31515;"&gt;&amp;quot;Input B&amp;quot;&lt;/span&gt;, 4, &lt;span style="color:#a31515;"&gt;&amp;quot;ScenarioB&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Input&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; outputB = &lt;span style="color:#0000ff;"&gt;from&lt;/span&gt; item &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; inputB&lt;/li&gt; &lt;li&gt;              &lt;span style="color:#0000ff;"&gt;group&lt;/span&gt; item &lt;span style="color:#0000ff;"&gt;by&lt;/span&gt; item % 3 &lt;span style="color:#0000ff;"&gt;into&lt;/span&gt; g&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;              &lt;span style="color:#0000ff;"&gt;select&lt;/span&gt; g;&lt;/li&gt; &lt;li&gt;outputB = outputB.MonitorGroup(&lt;span style="color:#a31515;"&gt;&amp;quot;Output B&amp;quot;&lt;/span&gt;, 5, &lt;span style="color:#a31515;"&gt;&amp;quot;ScenarioB&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Output&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;outputA.Subscribe();&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;outputB.Subscribe(g =&amp;gt; g.Subscribe());&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;strong&gt;line 1-6&lt;/strong&gt; is constructing the first scenario (Scenario A) where 2 input stream are merged into a single output stream (Output A).&lt;/p&gt;  &lt;p&gt;you can see at &lt;strong&gt;line 2,4&lt;/strong&gt; that the monitoring is specify both &amp;quot;ScenarioA&amp;quot; and &amp;quot;Input&amp;quot; keywords,     &lt;br /&gt;while on &lt;strong&gt;line 6&lt;/strong&gt;, the monitoring is specify &amp;quot;ScenarioA&amp;quot; and &amp;quot;Output&amp;quot; keywords.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;lines 8-13&lt;/strong&gt; is constructing the second scenario (Scenario B) which is having a single input stream and group by manipulation for the output stream.&lt;/p&gt;  &lt;p&gt;as you can see at &lt;strong&gt;line 9&lt;/strong&gt; the keywords for the input stream is&amp;quot;ScenarioB&amp;quot; and &amp;quot;Input&amp;quot; and     &lt;br /&gt;at &lt;strong&gt;line 13&lt;/strong&gt; you can see a group monitoring using the &lt;strong&gt;MonitorGroup&lt;/strong&gt; extension method, which is using the &amp;quot;ScenarioB&amp;quot; and &amp;quot;Output&amp;quot; keywords.     &lt;br /&gt;(&lt;font color="#666666"&gt;shortly we will survey the output of the MonitorGroup extension&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;summarizing, we was attaching different keywords at different stage on the pipeline of scenario A and B.    &lt;br /&gt;as you will see shortly, it will help us to stay in focus about each scenario, the inputs or the outputs streams.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;the Visual Rx viewer will present it as follow: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/Visualrx-g1_0AB2C15E.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" src="http://blogs.microsoft.co.il/blogs/bnaya/Visualrx-g1_thumb_21153A18.png" width="510" height="549" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;you can easily see the &lt;strong&gt;monitoring of the first scenario&lt;/strong&gt; in the &lt;strong&gt;first 3 marble&amp;#39;s lines&lt;/strong&gt;, while the &lt;strong&gt;second scenario&lt;/strong&gt; is present in the &lt;strong&gt;last 5 marble&amp;#39;s line&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;as you can record, we was using the &lt;strong&gt;MonitorGroup&lt;/strong&gt; extension method. using this kind of monitoring results with &lt;strong&gt;one marble&amp;#39;s line&lt;/strong&gt; for the &lt;strong&gt;group&amp;#39;s keys&lt;/strong&gt; (the &amp;quot;Output B (keys)&amp;quot; line).     &lt;br /&gt;and a &lt;strong&gt;marble&amp;#39;s line for each group output&lt;/strong&gt; (because our group key was item % 3 there is only 3 group&amp;#39;s lines Output B 1,2,3).&lt;/p&gt;  &lt;p&gt;but in real life monitoring this tab can become a bit over packed with to much marble&amp;#39;s line.&lt;/p&gt;  &lt;p&gt;by using the keywords you can focus on different aspects of overall execution like each scenario, input or outputs.&lt;/p&gt;  &lt;p&gt;you can see that except of the Grid and the All tabs the viewer has create a new tab for each keyword.&lt;/p&gt;  &lt;p&gt;for example: the Scenario B&amp;#160; tab will show the marble&amp;#39;s line which was attached to the &amp;quot;ScenarioB&amp;quot; keyword:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/Visualrx-g1-s2_75A0F350.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" src="http://blogs.microsoft.co.il/blogs/bnaya/Visualrx-g1-s2_thumb_46CB14E1.png" width="519" height="556" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;while the Output tab will focus on the &amp;quot;Output&amp;quot; keyword:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/Visualrx-g1-out_67AE61BB.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" border="0" alt="Profile, Rx, Diagnostic, Contrib, Marble, Bnaya, Dubug, Trace, Visual Rx" src="http://blogs.microsoft.co.il/blogs/bnaya/Visualrx-g1-out_thumb_13BB38E0.png" width="523" height="560" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;this can really help us to stay in focus on what we actually monitoring.&lt;/p&gt;  &lt;h5&gt;More extensions:&lt;/h5&gt;  &lt;p&gt;just like the &lt;strong&gt;MonitorGroup&lt;/strong&gt; which can represent a group by monitoring, there is a &lt;strong&gt;MonitorMany&lt;/strong&gt; that can monitor a &lt;strong&gt;IObservable&amp;lt;IObservable&amp;lt;T&amp;gt;&amp;gt;&lt;/strong&gt; (which is the result of the Window operator).     &lt;br /&gt;in the future I may add other monitoring operators.&lt;/p&gt;  &lt;h5&gt;Categories:&lt;/h5&gt;  &lt;p&gt;another &lt;strong&gt;future API&lt;/strong&gt; will be the ability to attach a &lt;strong&gt;Category which will act as a scope&lt;/strong&gt; where the &lt;strong&gt;Viewer&lt;/strong&gt; can be &lt;strong&gt;subscribe to specific categories&lt;/strong&gt;.     &lt;br /&gt;this feature will enable to open multiple viewers for different monitoring scenario.     &lt;br /&gt;this feature is still on the design table and in general you can vote for feature in &lt;a href="http://visualrx.codeplex.com/workitem/list/basic" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;Summary&lt;/h4&gt;  &lt;p&gt;this is part one of the series which give you the basics instruction for monitoring a data stream using the Monitor extension.&lt;/p&gt;  &lt;p&gt;you can download the Viewer and the SDK from &lt;a href="http://visualrx.codeplex.com/releases/view/92629" target="_blank"&gt;codeplex&lt;/a&gt; and the SDK can also be download from &lt;a href="http://nuget.org/packages?q=visualrx" target="_blank"&gt;NuGet&lt;/a&gt; (search for VisualRx).&lt;/p&gt;  &lt;p&gt;you can &lt;strong&gt;vote&lt;/strong&gt; &lt;strong&gt;for feature&lt;/strong&gt; at the &lt;strong&gt;CodePlex&lt;/strong&gt; site under the &lt;a href="http://visualrx.codeplex.com/workitem/list/basic?ProjectName=visualrx" target="_blank"&gt;Issue Tracker tab&lt;/a&gt;.&lt;/p&gt;  &lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblogs.microsoft.co.il%2fblogs%2fbnaya%2farchive%2f2012%2f07%2f30%2fvisual-rx-part-1.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%253a%252f%252fblogs.microsoft.co.il%252fblogs%252fbnaya%252farchive%252f2012%252f07%252f30%252fvisual-rx-part-1.aspx" /&gt;&lt;/a&gt; &lt;a href="http://dotnetshoutout.com/Visual-Rx-Part-1-Bnaya-Eshet"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" alt="Shout it" src="http://dotnetshoutout.com/image.axd?url=http%3A%2F%2Fblogs.microsoft.co.il%2Fblogs%2Fbnaya%2Farchive%2F2012%2F07%2F30%2Fvisual-rx-part-1.aspx" /&gt;&lt;/a&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1178058" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SELA/default.aspx">SELA</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Bnaya/default.aspx">Bnaya</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Rx/default.aspx">Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObserver/default.aspx">IObserver</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObservable/default.aspx">IObservable</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Debug/default.aspx">Debug</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive/default.aspx">Reactive</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Profile/default.aspx">Profile</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/linq/default.aspx">linq</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Contrib/default.aspx">Contrib</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Dubug/default.aspx">Dubug</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Diagnostic/default.aspx">Diagnostic</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Trace/default.aspx">Trace</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Visual+Rx/default.aspx">Visual Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Marble/default.aspx">Marble</category></item><item><title>Rx - Join</title><link>http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/04/04/rx-join.aspx</link><pubDate>Thu, 05 Apr 2012 00:16:56 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1054332</guid><dc:creator>bnaya</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Rx - Join&lt;/h2&gt;  &lt;p&gt;this post is an advance one so you haven&amp;#39;t yet master the &lt;strong&gt;Rx&lt;/strong&gt; basic practice you might want to start in &lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/04/04/rx-toc.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;the post will focus on the &lt;strong&gt;Join&lt;/strong&gt; and &lt;strong&gt;GroupJoin&lt;/strong&gt; &lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/MC900078834_7A31BE3D.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:7px 11px 0px 0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Reactive Extension, Join, Iobservable, IObserver, Linq" border="0" alt="Rx, Reactive Extension, Join, Iobservable, IObserver, Linq" align="left" src="http://blogs.microsoft.co.il/blogs/bnaya/MC900078834_thumb_33387573.png" width="112" height="61" /&gt;&lt;/a&gt;operators and we will try to get a solid understanding of what does it really means to join multiple data streams.&lt;/p&gt;  &lt;p&gt;the &lt;strong&gt;Rx&lt;/strong&gt; notion of &lt;strong&gt;join&lt;/strong&gt; is quit different than the join we has used to know in SQL queries.&lt;/p&gt;  &lt;p&gt;while the &lt;strong&gt;SQL query&amp;#39;s join&lt;/strong&gt; refer to &lt;strong&gt;data equality&lt;/strong&gt; (relationship and foreign keys), the &lt;strong&gt;Rx&amp;#39;s join&lt;/strong&gt; is all about &lt;strong&gt;coexisting&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;actually &lt;strong&gt;Rx&lt;/strong&gt; is much closer to the real life notion of join.     &lt;br /&gt;when you meeting someone (online or in the real world) its actually mean that both of you are doing the activity &lt;strong&gt;at the&lt;/strong&gt; &lt;strong&gt;same time&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;so speaking of &lt;strong&gt;Rx Join&lt;/strong&gt;, you must do that &lt;strong&gt;conceptual switching&lt;/strong&gt; from &lt;strong&gt;data&lt;/strong&gt; into &lt;strong&gt;coexistence&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;because &lt;strong&gt;Rx&amp;#39;s join is all about coexistence&lt;/strong&gt; the actual data type doesn&amp;#39;t matter any more.     &lt;br /&gt;you can declare a&lt;strong&gt; join &lt;/strong&gt;between &lt;strong&gt;unrelated&lt;/strong&gt; &lt;strong&gt;data type&lt;/strong&gt;,&lt;strong&gt; &lt;/strong&gt;because the &lt;strong&gt;data type has nothing to do with the Rx&amp;#39;s concept of join&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;for example:&lt;/p&gt;  &lt;p&gt;assuming you have an algorithm which can define a persons mood based on it tweets an other social media text. you can join this moods stream with a weather stream and get a result stream of correlations&amp;#39; between weather and people&amp;#39;s moods.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/image_3689E74E.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Reactive Extension, Join, Iobservable, IObserver, Linq" border="0" alt="Rx, Reactive Extension, Join, Iobservable, IObserver, Linq" src="http://blogs.microsoft.co.il/blogs/bnaya/image_thumb_4D5892FD.png" width="523" height="234" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;the weather time window duration (period) is from the time it was pushed until the next weather is pushed. the mood period is a point in time (period = zero).&lt;/p&gt;  &lt;p&gt;whenever a mood &lt;strong&gt;coexist&lt;/strong&gt; within a weather period the result stream projected a &lt;strong&gt;combined weather/mood datum&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;the code snippet for scenario is something like the following code.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6b5fb8f4-4de5-4964-a2aa-2ba828293408" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;IObservable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Weather&lt;/span&gt;&amp;gt; ws = WeatherStream;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#2b91af;"&gt;IObservable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Mood&lt;/span&gt;&amp;gt; ms = MoodStream;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#2b91af;"&gt;IObservable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Tuple&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Weather&lt;/span&gt;,&lt;span style="color:#2b91af;"&gt;Mood&lt;/span&gt;&amp;gt;&amp;gt; result =&lt;/li&gt; &lt;li&gt;    ws.Join(&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            ms, &lt;span style="color:#008000;"&gt;// the join with stream &lt;/span&gt;&lt;/li&gt; &lt;li&gt;            w =&amp;gt; ws, &lt;span style="color:#008000;"&gt;// closing weather period&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;            m =&amp;gt; &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Empty&amp;lt;&lt;span style="color:#2b91af;"&gt;Unit&lt;/span&gt;&amp;gt;(), &lt;span style="color:#008000;"&gt;// closing mood&lt;/span&gt;&lt;/li&gt; &lt;li&gt;            (w &lt;span style="color:#008000;"&gt;/* Weather */&lt;/span&gt;, m &lt;span style="color:#008000;"&gt;/* Mood */&lt;/span&gt;) =&amp;gt; &lt;span style="color:#2b91af;"&gt;Tuple&lt;/span&gt;.Create(w, m));&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;lets look at the join syntax.&lt;/p&gt;  &lt;p&gt;at line 5 we use the &lt;strong&gt;Join&lt;/strong&gt; extension method on the weather stream.&lt;/p&gt;  &lt;p&gt;the first parameter (line 6) is the mood stream which we joined with.&lt;/p&gt;  &lt;p&gt;now we have to define when the &lt;strong&gt;time period&lt;/strong&gt; window of the weather datum will end.     &lt;br /&gt;and this is what the second parameter (at line 7) is all about.     &lt;br /&gt;it is a Func that get a weather as parameter and return a stream which will close the weather period upon it next projection (OnNext or OnComplete). &lt;/p&gt;  &lt;p&gt;because the weather stream is a hot stream the code above will close the weather period whenever a new weather will be project.    &lt;br /&gt;&lt;font color="#666666"&gt;it is a one time event end it will work equally if the parameter will be w =&amp;gt; ws.Take(1).&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;the 3rd parameter dictate the mood datum period,    &lt;br /&gt;in our case the mood is a &lt;strong&gt;point event&lt;/strong&gt; which has no period, therefore the parameter return &lt;strong&gt;Empty stream&lt;/strong&gt; (which is a stream that immediately complete).&lt;/p&gt;  &lt;p&gt;the last parameter is the select operator which define    &lt;br /&gt;the projected data type, in our case we return a &lt;strong&gt;Tuple&lt;/strong&gt; of a weather and a mood.&lt;/p&gt;  &lt;p&gt;now we can take a breath.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/IMG_3229_769FB52E.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Reactive Extension, Join, Iobservable, IObserver, Linq" border="0" alt="Rx, Reactive Extension, Join, Iobservable, IObserver, Linq" src="http://blogs.microsoft.co.il/blogs/bnaya/IMG_3229_thumb_245D5827.jpg" width="486" height="327" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;the &lt;strong&gt;API&lt;/strong&gt; is a bit complex, mainly because of the &lt;strong&gt;closing stream&lt;/strong&gt;&amp;#39;s parameters, but it is very powerful. &lt;/p&gt;  &lt;p&gt;&lt;font color="#666666"&gt;actually the closing stream concept is not unique to the Join operator, there are many other operator like &lt;strong&gt;Buffer&lt;/strong&gt;, &lt;strong&gt;Window&lt;/strong&gt; and &lt;strong&gt;GroupByUntil&lt;/strong&gt;, which is having an overloads that get a closing stream.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;the &lt;strong&gt;closing stream concept&lt;/strong&gt; enable a &lt;strong&gt;join window notion&lt;/strong&gt; that are more complex than a simple TimeSpan variable. &lt;/p&gt;  &lt;p&gt;for example the closing stream can react to temperature, tweets, sound volume or any other event stream.&lt;/p&gt;  &lt;h5&gt;Group Join&lt;/h5&gt;  &lt;p&gt;actually join has another flavor which is the &lt;strong&gt;GroupJoin&lt;/strong&gt; operator. it is very similar to the join but it has a different projection.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;GroupJoin&lt;/strong&gt; is grouping the secondary stream intersection as an IObservable combined with the primary stream datum.&lt;/p&gt;  &lt;p&gt;for example:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:14577fd6-39eb-457b-9095-d3d1cdea6cbc" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;IObservable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Tuple&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Weather&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;IObservable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Mood&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt; result =&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    ws.GroupJoin(&lt;/li&gt; &lt;li&gt;        ms, &lt;span style="color:#008000;"&gt;// the join with stream                       &lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#008000;"&gt;// a stream which close the weather period&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        value =&amp;gt; ws,&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#008000;"&gt;// a stream which close the mood period (immediate closeing)&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        value =&amp;gt; &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Empty&amp;lt;&lt;span style="color:#2b91af;"&gt;Unit&lt;/span&gt;&amp;gt;(),  &lt;span style="color:#008000;"&gt;// A is a point event which will catch within the main window (of A)&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#008000;"&gt;// projection of a result &lt;/span&gt;&lt;/li&gt; &lt;li&gt;        (w, observableOfMoods) =&amp;gt;&lt;span style="color:#2b91af;"&gt;Tuple&lt;/span&gt;.Create(w, observableOfMoods));&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;is is all similar to the &lt;strong&gt;Join&lt;/strong&gt; operator until we goes into the projection at line 9.&lt;/p&gt;  &lt;p&gt;it is a projection of the weather value and &lt;strong&gt;IObservable&amp;lt;Mood&amp;gt;&lt;/strong&gt;, which mean that any &lt;strong&gt;weather&lt;/strong&gt; datum will &lt;strong&gt;immediately project&lt;/strong&gt; (as a new group) and mood datum will &lt;strong&gt;constantly be pushed&lt;/strong&gt; into it&amp;#39;s related &lt;strong&gt;IObservable&lt;/strong&gt; as long as the weather life-time doesn&amp;#39;t disposed by the closing stream.&lt;/p&gt;  &lt;p&gt;the marble diagram of it would seem like the following diagram:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/bnaya/image_19705112.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Rx, Reactive Extension, Join, Iobservable, IObserver, Linq" border="0" alt="Rx, Reactive Extension, Join, Iobservable, IObserver, Linq" src="http://blogs.microsoft.co.il/blogs/bnaya/image_thumb_46E14B08.png" width="541" height="352" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;the &lt;strong&gt;GroupJoin&lt;/strong&gt; operator can also be written in a pure &lt;strong&gt;LINQ syntax&lt;/strong&gt;, it is goes like the following snippet:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1e3dad6e-0b01-447d-9d75-bbf436ac3594" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;IObservable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Tuple&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Weather&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;IObservable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Mood&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt; result =&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;from&lt;/span&gt; w &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; ws&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;join&lt;/span&gt; m &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; ms                  &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;on&lt;/span&gt; ws &lt;span style="color:#008000;"&gt;// a stream which close the weather period&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#008000;"&gt;// a stream which close the mood period (immediate closeing)&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;equals&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Observable&lt;/span&gt;.Empty&amp;lt;&lt;span style="color:#2b91af;"&gt;Unit&lt;/span&gt;&amp;gt;()&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;into&lt;/span&gt; g &lt;span style="color:#008000;"&gt;// the IObservable&amp;lt;Mood&amp;gt; which related to the current weather&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;select&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Tuple&lt;/span&gt;.Create(w, g);&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;you can find the closing stream of the weather at line 4    &lt;br /&gt;and the moods closing stream at line 6.&lt;/p&gt;  &lt;h5&gt;Summary&lt;/h5&gt;  &lt;p&gt;the &lt;strong&gt;Join&lt;/strong&gt; concept is a very powerful one but you have to do a &lt;strong&gt;mental switching&lt;/strong&gt; &lt;strong&gt;from data correlation into coexistence correlation&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;it is really worth the learning curve effort because it is bringing a hole new capabilities to the table which is not trivial at all.&lt;/p&gt; &lt;a href="http://www.dotnetkicks.com/kick/?url=http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/04/04/rx-join.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%253a%252f%252fblogs.microsoft.co.il%252fblogs%252fbnaya%252farchive%252f2012%252f04%252f04%252frx-join.aspx" /&gt;&lt;/a&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1054332" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/SELA/default.aspx">SELA</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Rx/default.aspx">Rx</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObserver/default.aspx">IObserver</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/IObservable/default.aspx">IObservable</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive/default.aspx">Reactive</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Reactive+Extension/default.aspx">Reactive Extension</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/linq/default.aspx">linq</category><category domain="http://blogs.microsoft.co.il/blogs/bnaya/archive/tags/Join/default.aspx">Join</category></item></channel></rss>