<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Eric Swanson on Technology Services</title>
	<atom:link href="http://blogs.us.sogeti.com/ericswanson/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.us.sogeti.com/ericswanson</link>
	<description>Sogeti USA Technology Services in and around Phoenix, AZ</description>
	<pubDate>Tue, 16 Mar 2010 00:26:30 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Silverlight 4, MVC 2, and Windows Phone 7</title>
		<link>http://blogs.us.sogeti.com/ericswanson/2010/03/15/silverlight-4-mvc-2-and-windows-phone-7/</link>
		<comments>http://blogs.us.sogeti.com/ericswanson/2010/03/15/silverlight-4-mvc-2-and-windows-phone-7/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 00:09:14 +0000</pubDate>
		<dc:creator>Eric Swanson</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[web development]]></category>

		<category><![CDATA[mobile]]></category>

		<category><![CDATA[mvc]]></category>

		<category><![CDATA[mvc 2]]></category>

		<category><![CDATA[silverlight]]></category>

		<category><![CDATA[silverlight 4]]></category>

		<category><![CDATA[windows phone 7]]></category>

		<guid isPermaLink="false">http://blogs.us.sogeti.com/ericswanson/?p=251</guid>
		<description><![CDATA[NEW Release: Developer tools for Silverlight 4 RC along with training, MVC 2 RTM, and Windows Phone 7 CTP have been released. I noticed the Training Kit for Visual Studio 2010 was also updated last month.
]]></description>
			<content:encoded><![CDATA[<p><strong>NEW Release:</strong> Developer tools for <a href="http://silverlight.net/getstarted/silverlight-4/">Silverlight 4 RC</a> along with <a href="http://www.microsoft.com/downloads/details.aspx?familyid=24CEA29E-042E-41C9-AA16-684A0CA5F5DB&#038;displaylang=en">training</a>, <a href="http://www.asp.net/mvc/">MVC 2 RTM</a>, and <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2338b5d1-79d8-46af-b828-380b0f854203&#038;displaylang=en">Windows Phone 7 CTP</a> have been released. I noticed the <a href="http://www.microsoft.com/downloads/details.aspx?familyid=752CB725-969B-4732-A383-ED5740F02E93&#038;displaylang=en">Training Kit</a> for Visual Studio 2010 was also updated last month.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.us.sogeti.com/ericswanson/2010/03/15/silverlight-4-mvc-2-and-windows-phone-7/feed/</wfw:commentRss>
		</item>
		<item>
		<title>links for 2010-02-04</title>
		<link>http://blogs.us.sogeti.com/ericswanson/2010/02/04/links-for-2010-02-04/</link>
		<comments>http://blogs.us.sogeti.com/ericswanson/2010/02/04/links-for-2010-02-04/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 08:02:26 +0000</pubDate>
		<dc:creator>Eric Swanson</dc:creator>
		
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://blogs.us.sogeti.com/ericswanson/2010/02/04/links-for-2010-02-04/</guid>
		<description><![CDATA[

MSF-Agile plus Security Development Lifecycle Process Template for VSTS 2008
MSF-A+SDL is a TFS process template that incorporates the Security Development Lifecycle (SDL) for Agile process guidance into the MSF Agile development framework. With the MSF-A+SDL template, any code checked into the Visual Studio Team System source repository by the developer is analyzed to ensure that [...]]]></description>
			<content:encoded><![CDATA[<ul class="delicious">
<li>
<div class="delicious-link"><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c4b44860-cfba-494a-ba43-13c4aecf86af&amp;displaylang=en">MSF-Agile plus Security Development Lifecycle Process Template for VSTS 2008</a></div>
<div class="delicious-extended">MSF-A+SDL is a TFS process template that incorporates the Security Development Lifecycle (SDL) for Agile process guidance into the MSF Agile development framework. With the MSF-A+SDL template, any code checked into the Visual Studio Team System source repository by the developer is analyzed to ensure that it complies with SDL secure development practices. The template also automatically creates security workflow tracking items for manual SDL processes such as threat modeling to ensure that these important security activities are not accidentally skipped or forgotten.</div>
<div class="delicious-tags">(tags: <a href="http://delicious.com/ericis/MSF">MSF</a> <a href="http://delicious.com/ericis/SDL">SDL</a> <a href="http://delicious.com/ericis/TFS">TFS</a> <a href="http://delicious.com/ericis/teamsystem">teamsystem</a> <a href="http://delicious.com/ericis/microsoft">microsoft</a> <a href="http://delicious.com/ericis/security">security</a> <a href="http://delicious.com/ericis/programming">programming</a>)</div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogs.us.sogeti.com/ericswanson/2010/02/04/links-for-2010-02-04/feed/</wfw:commentRss>
		</item>
		<item>
		<title>links for 2010-01-27</title>
		<link>http://blogs.us.sogeti.com/ericswanson/2010/01/27/links-for-2010-01-27/</link>
		<comments>http://blogs.us.sogeti.com/ericswanson/2010/01/27/links-for-2010-01-27/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 08:05:12 +0000</pubDate>
		<dc:creator>Eric Swanson</dc:creator>
		
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://blogs.us.sogeti.com/ericswanson/2010/01/27/links-for-2010-01-27/</guid>
		<description><![CDATA[

Multi-Touch for Windows 7
Emulate a touch screen without the screen! Multi-Touch is a user input management layer that handles input from various devices (touchlib, multiple mice, TUIO etc.) and normalises it against the scale and rotation of the target window.
(tags: multitouch touch multi-touch windows7 codeplex)


]]></description>
			<content:encoded><![CDATA[<ul class="delicious">
<li>
<div class="delicious-link"><a href="http://multitouchvista.codeplex.com/">Multi-Touch for Windows 7</a></div>
<div class="delicious-extended">Emulate a touch screen without the screen! Multi-Touch is a user input management layer that handles input from various devices (touchlib, multiple mice, TUIO etc.) and normalises it against the scale and rotation of the target window.</div>
<div class="delicious-tags">(tags: <a href="http://delicious.com/ericis/multitouch">multitouch</a> <a href="http://delicious.com/ericis/touch">touch</a> <a href="http://delicious.com/ericis/multi-touch">multi-touch</a> <a href="http://delicious.com/ericis/windows7">windows7</a> <a href="http://delicious.com/ericis/codeplex">codeplex</a>)</div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogs.us.sogeti.com/ericswanson/2010/01/27/links-for-2010-01-27/feed/</wfw:commentRss>
		</item>
		<item>
		<title>links for 2010-01-21</title>
		<link>http://blogs.us.sogeti.com/ericswanson/2010/01/21/links-for-2010-01-21/</link>
		<comments>http://blogs.us.sogeti.com/ericswanson/2010/01/21/links-for-2010-01-21/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 08:04:01 +0000</pubDate>
		<dc:creator>Eric Swanson</dc:creator>
		
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://blogs.us.sogeti.com/ericswanson/2010/01/21/links-for-2010-01-21/</guid>
		<description><![CDATA[

Infragistics Quince: UX Patterns Explorer
Quince is a rich UX patterns, sometimes called UI patterns, explorer.
(tags: patterns interface designpatterns userexperience interfaces usability ux ui gui webdesign development)


]]></description>
			<content:encoded><![CDATA[<ul class="delicious">
<li>
<div class="delicious-link"><a href="http://quince.infragistics.com/">Infragistics Quince: UX Patterns Explorer</a></div>
<div class="delicious-extended">Quince is a rich UX patterns, sometimes called UI patterns, explorer.</div>
<div class="delicious-tags">(tags: <a href="http://delicious.com/ericis/patterns">patterns</a> <a href="http://delicious.com/ericis/interface">interface</a> <a href="http://delicious.com/ericis/designpatterns">designpatterns</a> <a href="http://delicious.com/ericis/userexperience">userexperience</a> <a href="http://delicious.com/ericis/interfaces">interfaces</a> <a href="http://delicious.com/ericis/usability">usability</a> <a href="http://delicious.com/ericis/ux">ux</a> <a href="http://delicious.com/ericis/ui">ui</a> <a href="http://delicious.com/ericis/gui">gui</a> <a href="http://delicious.com/ericis/webdesign">webdesign</a> <a href="http://delicious.com/ericis/development">development</a>)</div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogs.us.sogeti.com/ericswanson/2010/01/21/links-for-2010-01-21/feed/</wfw:commentRss>
		</item>
		<item>
		<title>links for 2010-01-15</title>
		<link>http://blogs.us.sogeti.com/ericswanson/2010/01/15/links-for-2010-01-15/</link>
		<comments>http://blogs.us.sogeti.com/ericswanson/2010/01/15/links-for-2010-01-15/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 08:03:58 +0000</pubDate>
		<dc:creator>Eric Swanson</dc:creator>
		
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://blogs.us.sogeti.com/ericswanson/2010/01/15/links-for-2010-01-15/</guid>
		<description><![CDATA[

REBOL Technologies
Relative Expression Based Object Language: It uses &#34;relative expressions&#34; (lean, domain-specific languages) to create a powerful new method of creating Internet programs, scripts, and applications.
(tags: languages programming-languages programming development language framework)


Microsoft Virtualisation Technologies videos
A tv channel aimed at Microsoft Partners and Customers, devoted to Microsoft Virtualisation Technologies. Server, Desktop, Application and Presentation Virtualization, along [...]]]></description>
			<content:encoded><![CDATA[<ul class="delicious">
<li>
<div class="delicious-link"><a href="http://www.rebol.com/">REBOL Technologies</a></div>
<div class="delicious-extended">Relative Expression Based Object Language: It uses &quot;relative expressions&quot; (lean, domain-specific languages) to create a powerful new method of creating Internet programs, scripts, and applications.</div>
<div class="delicious-tags">(tags: <a href="http://delicious.com/ericis/languages">languages</a> <a href="http://delicious.com/ericis/programming-languages">programming-languages</a> <a href="http://delicious.com/ericis/programming">programming</a> <a href="http://delicious.com/ericis/development">development</a> <a href="http://delicious.com/ericis/language">language</a> <a href="http://delicious.com/ericis/framework">framework</a>)</div>
</li>
<li>
<div class="delicious-link"><a href="http://virtualboytv.com/">Microsoft Virtualisation Technologies videos</a></div>
<div class="delicious-extended">A tv channel aimed at Microsoft Partners and Customers, devoted to Microsoft Virtualisation Technologies. Server, Desktop, Application and Presentation Virtualization, along with a section for Management too</div>
<div class="delicious-tags">(tags: <a href="http://delicious.com/ericis/virtualization">virtualization</a> <a href="http://delicious.com/ericis/microsoft">microsoft</a> <a href="http://delicious.com/ericis/training">training</a> <a href="http://delicious.com/ericis/videos">videos</a> <a href="http://delicious.com/ericis/hyper-v">hyper-v</a>)</div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogs.us.sogeti.com/ericswanson/2010/01/15/links-for-2010-01-15/feed/</wfw:commentRss>
		</item>
		<item>
		<title>links for 2010-01-14</title>
		<link>http://blogs.us.sogeti.com/ericswanson/2010/01/14/links-for-2010-01-14/</link>
		<comments>http://blogs.us.sogeti.com/ericswanson/2010/01/14/links-for-2010-01-14/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 08:05:16 +0000</pubDate>
		<dc:creator>Eric Swanson</dc:creator>
		
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://blogs.us.sogeti.com/ericswanson/2010/01/14/links-for-2010-01-14/</guid>
		<description><![CDATA[

Fine: A Type-Preserving Compiler for End-to-End Security Verification &#8230;
The Fine compiler implements a type system that enables the enforcement of rich, stateful authorization and information-flow policies to be verified. Our compilation technique produces verifiable target code in a language called DCIL, an extension of CIL, the language of the .NET runtime. Code consumers can check [...]]]></description>
			<content:encoded><![CDATA[<ul class="delicious">
<li>
<div class="delicious-link"><a href="http://research.microsoft.com/en-us/downloads/2ff9af1d-43ec-422a-aa22-c9f8d07f0af8/default.aspx">Fine: A Type-Preserving Compiler for End-to-End Security Verification &#8230;</a></div>
<div class="delicious-extended">The Fine compiler implements a type system that enables the enforcement of rich, stateful authorization and information-flow policies to be verified. Our compilation technique produces verifiable target code in a language called DCIL, an extension of CIL, the language of the .NET runtime. Code consumers can check DCIL target programs using a syntactic byte-code verifier to establish the security of the code.</div>
<div class="delicious-tags">(tags: <a href="http://delicious.com/ericis/compiler">compiler</a> <a href="http://delicious.com/ericis/.net">.net</a> <a href="http://delicious.com/ericis/microsoft">microsoft</a> <a href="http://delicious.com/ericis/authorization">authorization</a> <a href="http://delicious.com/ericis/security">security</a> <a href="http://delicious.com/ericis/cil">cil</a> <a href="http://delicious.com/ericis/dcil">dcil</a>)</div>
</li>
<li>
<div class="delicious-link"><a href="http://research.microsoft.com/en-us/projects/dryad/">Dryad - Microsoft Research</a></div>
<div class="delicious-extended">Dryad is an infrastructure which allows a programmer to use the resources of a computer cluster or a data center for running data-parallel programs. A Dryad programmer can use thousands of machines, each of them with multiple processors or cores, without knowing anything about concurrent programming.</div>
<div class="delicious-tags">(tags: <a href="http://delicious.com/ericis/dryad">dryad</a> <a href="http://delicious.com/ericis/distributed">distributed</a> <a href="http://delicious.com/ericis/microsoft">microsoft</a> <a href="http://delicious.com/ericis/.net">.net</a> <a href="http://delicious.com/ericis/engineering">engineering</a> <a href="http://delicious.com/ericis/research">research</a> <a href="http://delicious.com/ericis/cluster">cluster</a> <a href="http://delicious.com/ericis/parallel">parallel</a> <a href="http://delicious.com/ericis/grid">grid</a>)</div>
</li>
<li>
<div class="delicious-link"><a href="http://www.microsoft.com/expression/products/SketchFlow_OverView.aspx">Rapidly prototype your user interfaces with SketchFlow</a></div>
<div class="delicious-extended">SketchFlow revolutionizes how quickly and efficiently you can demonstrate your vision for an application. It provides an informal and quick way to explore, iterate and prototype user interface scenarios, allowing you to evolve your concepts from a series of rough ideas into a living and breathing prototype that can be made as real as a particular client or project demands. This rapid, iterative and cost effective approach to prototyping allows you to concentrate on what matters most, being creative and building the best solution for your client, on time and within budget.</div>
<div class="delicious-tags">(tags: <a href="http://delicious.com/ericis/sketchflow">sketchflow</a> <a href="http://delicious.com/ericis/silverlight">silverlight</a> <a href="http://delicious.com/ericis/ux">ux</a> <a href="http://delicious.com/ericis/sketch">sketch</a> <a href="http://delicious.com/ericis/wpf">wpf</a> <a href="http://delicious.com/ericis/mockups">mockups</a> <a href="http://delicious.com/ericis/wireframing">wireframing</a> <a href="http://delicious.com/ericis/architecture">architecture</a> <a href="http://delicious.com/ericis/microsoft">microsoft</a> <a href="http://delicious.com/ericis/design">design</a> <a href="http://delicious.com/ericis/prototyping">prototyping</a> <a href="http://delicious.com/ericis/prototype">prototype</a> <a href="http://delicious.com/ericis/wireframe">wireframe</a>)</div>
</li>
<li>
<div class="delicious-link"><a href="http://www.irise.com/">iRise Prototyping and Requirements Visualization</a></div>
<div class="delicious-extended">iRise is an enterprise grade application definition platform used to quickly assemble working previews of business software that mimic the exact look, feel and behavior of the final product.  iRise empowers stakeholders to test drive and fully interact with proposed business software before any coding which eliminates confusion about what to build, cuts project cost and accelerates delivery.</div>
<div class="delicious-tags">(tags: <a href="http://delicious.com/ericis/requirements">requirements</a> <a href="http://delicious.com/ericis/prototyping">prototyping</a> <a href="http://delicious.com/ericis/prototype">prototype</a> <a href="http://delicious.com/ericis/design">design</a> <a href="http://delicious.com/ericis/simulation">simulation</a> <a href="http://delicious.com/ericis/usability">usability</a> <a href="http://delicious.com/ericis/wireframe">wireframe</a> <a href="http://delicious.com/ericis/visualization">visualization</a> <a href="http://delicious.com/ericis/software">software</a> <a href="http://delicious.com/ericis/architecture">architecture</a> <a href="http://delicious.com/ericis/technology">technology</a>)</div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogs.us.sogeti.com/ericswanson/2010/01/14/links-for-2010-01-14/feed/</wfw:commentRss>
		</item>
		<item>
		<title>links for 2010-01-12</title>
		<link>http://blogs.us.sogeti.com/ericswanson/2010/01/12/links-for-2010-01-12/</link>
		<comments>http://blogs.us.sogeti.com/ericswanson/2010/01/12/links-for-2010-01-12/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 08:04:34 +0000</pubDate>
		<dc:creator>Eric Swanson</dc:creator>
		
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://blogs.us.sogeti.com/ericswanson/2010/01/12/links-for-2010-01-12/</guid>
		<description><![CDATA[

Technical Preview for CAT.NET 2.0
CAT.NET is a static analysis tool on Visual Studio that helps find vulnerabilities like SQL Injection, CSRF, XSS among others, within managed code. This version is currently a technical preview which works on the command line only though for its release it will be integrated with Visual Studio&#039;s UI under the [...]]]></description>
			<content:encoded><![CDATA[<ul class="delicious">
<li>
<div class="delicious-link"><a href="http://channel9.msdn.com/posts/Jossie/Technical-Preview-for-CATNET-20/">Technical Preview for CAT.NET 2.0</a></div>
<div class="delicious-extended">CAT.NET is a static analysis tool on Visual Studio that helps find vulnerabilities like SQL Injection, CSRF, XSS among others, within managed code. This version is currently a technical preview which works on the command line only though for its release it will be integrated with Visual Studio&#039;s UI under the Code Analysis tab. In this interview you can learn all the new features as well as details on how to provide feedback on the tool.</div>
<div class="delicious-tags">(tags: <a href="http://delicious.com/ericis/.net">.net</a> <a href="http://delicious.com/ericis/microsoft">microsoft</a> <a href="http://delicious.com/ericis/development">development</a> <a href="http://delicious.com/ericis/visualstudio">visualstudio</a> <a href="http://delicious.com/ericis/security">security</a> <a href="http://delicious.com/ericis/infosec">infosec</a> <a href="http://delicious.com/ericis/cat.net">cat.net</a>)</div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogs.us.sogeti.com/ericswanson/2010/01/12/links-for-2010-01-12/feed/</wfw:commentRss>
		</item>
		<item>
		<title>links for 2010-01-06</title>
		<link>http://blogs.us.sogeti.com/ericswanson/2010/01/06/links-for-2010-01-06/</link>
		<comments>http://blogs.us.sogeti.com/ericswanson/2010/01/06/links-for-2010-01-06/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 08:02:41 +0000</pubDate>
		<dc:creator>Eric Swanson</dc:creator>
		
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://blogs.us.sogeti.com/ericswanson/2010/01/06/links-for-2010-01-06/</guid>
		<description><![CDATA[

Microsoft Training for Solution Providers
(tags: microsoft development developer .net tutorial tutorials learning screencasts training videos video)


]]></description>
			<content:encoded><![CDATA[<ul class="delicious">
<li>
<div class="delicious-link"><a href="http://www.msdev.com/">Microsoft Training for Solution Providers</a></div>
<div class="delicious-tags">(tags: <a href="http://delicious.com/ericis/microsoft">microsoft</a> <a href="http://delicious.com/ericis/development">development</a> <a href="http://delicious.com/ericis/developer">developer</a> <a href="http://delicious.com/ericis/.net">.net</a> <a href="http://delicious.com/ericis/tutorial">tutorial</a> <a href="http://delicious.com/ericis/tutorials">tutorials</a> <a href="http://delicious.com/ericis/learning">learning</a> <a href="http://delicious.com/ericis/screencasts">screencasts</a> <a href="http://delicious.com/ericis/training">training</a> <a href="http://delicious.com/ericis/videos">videos</a> <a href="http://delicious.com/ericis/video">video</a>)</div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogs.us.sogeti.com/ericswanson/2010/01/06/links-for-2010-01-06/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Syntax Highlighting!</title>
		<link>http://blogs.us.sogeti.com/ericswanson/2010/01/05/syntax-highlighting/</link>
		<comments>http://blogs.us.sogeti.com/ericswanson/2010/01/05/syntax-highlighting/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 19:47:13 +0000</pubDate>
		<dc:creator>Eric Swanson</dc:creator>
		
		<category><![CDATA[Life at Sogeti]]></category>

		<category><![CDATA[Sogeti]]></category>

		<guid isPermaLink="false">http://blogs.us.sogeti.com/ericswanson/?p=222</guid>
		<description><![CDATA[FYI to all Sogeti bloggers or any Sogetians thinking about blogging, corporate has kindly provided a syntax highlighting plug-in &#8220;GeSHi&#8221; (Generic Syntax Highlighter). I&#8217;ve updated the IObservable post as an example. GeSHi supports 112 languages: ABAP, Actionscript, ADA, Apache Log, AppleScript, APT sources.list, ASM (m68k), ASM (pic16), ASM (x86), ASM (z80), ASP, AutoIT, Backus-Naur form, [...]]]></description>
			<content:encoded><![CDATA[<p>FYI to all Sogeti bloggers or any Sogetians thinking about blogging, corporate has kindly provided a syntax highlighting plug-in <a href="http://qbnz.com/highlighter/index.php">&#8220;GeSHi&#8221; (Generic Syntax Highlighter)</a>. I&#8217;ve updated <a href="/ericswanson/2009/12/22/iobservable-reactive-and-composite-framework-event-management/">the IObservable post as an example</a>. GeSHi supports 112 languages: ABAP, Actionscript, ADA, Apache Log, AppleScript, APT sources.list, ASM (m68k), ASM (pic16), ASM (x86), ASM (z80), ASP, AutoIT, Backus-Naur form, Bash, Basic4GL, BlitzBasic, Brainf*, C, C for Macs, C#, C++, C++ (with QT), CAD DCL, CadLisp, CFDG, CIL / MSIL, COBOL, ColdFusion, CSS, D, Delphi, Diff File Format, DIV, DOS, DOT language, Eiffel, Fortran, FourJ&#8217;s Genero, FreeBasic, GetText, glSlang, GML, gnuplot, Groovy, Haskell, HQ9+, HTML, INI (Config Files), Inno, , INTERCAL, IO, Java, Java 5, Javascript, KiXtart, KLone C &#038; C++, LaTeX, Lisp, LOLcode, LotusScript, LScript, Lua, Make, mIRC, MXML, MySQL, NSIS, Objective C, OCaml, OpenOffice BASIC, Oracle 8 &#038; 11 SQL, Pascal, Perl, PHP, Pixel Bender, PL/SQL, POV-Ray, PowerShell, Progress (OpenEdge ABL), Prolog, ProvideX, Python, Q(uick)BASIC, robots.txt, Ruby, Ruby on Rails, SAS, Scala, Scheme, Scilab, SDLBasic, Smalltalk, Smarty, SQL, T-SQL, TCL, thinBasic, TypoScript, Uno IDL, VB.NET, Verilog, VHDL, VIM Script, Visual BASIC, Visual Fox Pro, Visual Prolog, Whitespace, Winbatch, Windows Registry Files, X++, XML, and Xorg.conf.</p>
<h3>Some Brief Examples:</h3>
<h4>HTML w/ line numbers:</h4>
<p><code></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">code</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">pre</span> <span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;html4strict&quot;</span> line<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;1&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h3</span>&gt;</span>Syntax Highlighting w/ GeSHi<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h3</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;syntaxHighlighting&quot;</span>&gt;</span>A Syntax Highlighting Example<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">em</span>&gt;</span>Emphasis<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">em</span>&gt;</span> with <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">strong</span>&gt;</span>strong<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">strong</span>&gt;</span> text<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span> pre&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">code</span>&gt;</span> <span style="color: #808080; font-style: italic;">&lt;!--The space is intentional to avoid ending my own pre tag in this post--&gt;</span></pre></td></tr></table></div>

<p></code></p>
<h4>CSS w/o line numbers:</h4>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.syntaxHighlighting</span> <span style="color: #00AA00;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">text-align</span><span style="color: #00AA00;">:</span><span style="color: #993333;">center</span><span style="color: #00AA00;">;</span>
   <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span><span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#999</span><span style="color: #00AA00;">;</span>
   <span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#ccc</span><span style="color: #00AA00;">;</span>
   <span style="color: #000000; font-weight: bold;">font-family</span><span style="color: #3333ff;">:tahoma</span><span style="color: #00AA00;">,</span>arial<span style="color: #00AA00;">,</span><span style="color: #993333;">sans-serif</span><span style="color: #00AA00;">;</span>
   <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span><span style="color: #933;">14pt</span><span style="color: #00AA00;">;</span>
   <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#336</span><span style="color: #00AA00;">;</span>
   <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #933;">10px</span><span style="color: #00AA00;">;</span>
   <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #933;">10px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.us.sogeti.com/ericswanson/2010/01/05/syntax-highlighting/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Observing .NET with IObservable</title>
		<link>http://blogs.us.sogeti.com/ericswanson/2009/12/22/iobservable-reactive-and-composite-framework-event-management/</link>
		<comments>http://blogs.us.sogeti.com/ericswanson/2009/12/22/iobservable-reactive-and-composite-framework-event-management/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 20:10:00 +0000</pubDate>
		<dc:creator>Eric Swanson</dc:creator>
		
		<category><![CDATA[Book Reviews]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[.net 4]]></category>

		<category><![CDATA[books]]></category>

		<category><![CDATA[Composite Framework]]></category>

		<category><![CDATA[education]]></category>

		<category><![CDATA[event driven architecture]]></category>

		<category><![CDATA[events]]></category>

		<category><![CDATA[Prism]]></category>

		<category><![CDATA[Reactive Framework]]></category>

		<guid isPermaLink="false">http://blogs.us.sogeti.com/ericswanson/?p=151</guid>
		<description><![CDATA[Erik Meijer and Brian Beckman introduced the concept of IObservable for .NET in their Channel 9 video &#8220;Expert to Expert: Brian Beckman and Erik Meijer - Inside the .NET Reactive Framework (Rx)&#8221;, which is getting included in .NET version 4. .NET events present a number of challenges to developers. Weak event managers, like the Composite [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://research.microsoft.com/en-us/um/people/emeijer/">Erik Meijer</a> and <a href="http://rebcabin.spaces.live.com/">Brian Beckman</a> introduced the concept of IObservable for .NET in their <a href="http://channel9.msdn.com">Channel 9</a><a> video </a><a href="http://channel9.msdn.com/shows/Going+Deep/Expert-to-Expert-Brian-Beckman-and-Erik-Meijer-Inside-the-NET-Reactive-Framework-Rx/">&#8220;Expert to Expert: Brian Beckman and Erik Meijer - Inside the .NET Reactive Framework (Rx)&#8221;</a>, which is getting <a href="http://channel9.msdn.com/shows/Going+Deep/Kim-Hamilton-and-Wes-Dyer-Inside-NET-Rx-and-IObservableIObserver-in-the-BCL-VS-2010/">included in .NET version 4</a>. .NET events present a number of challenges to developers. Weak event managers, like the <a href="http://www.codeplex.com/CompositeWPF">Composite Framework&#8217;s (Prism) &#8220;EventAggregator&#8221;</a>, act as an event publish-subscribe proxy to decouple direct event references for better memory garbage collection. <a href="http://www.silverbaylabs.org">Silver Bay Labs</a> did a <a href="http://development-guides.silverbaylabs.org/Video/Prism-Eventing">good overview video on the subject</a>, but <a href="http://msdn.microsoft.com/en-us/library/dd458915.aspx">Microsoft&#8217;s MSDN technical concepts documentation accurately describes the problem as well</a> (see the section under &#8220;Subscribing Using Strong References&#8221;).</p>
<p><strong>The Quick Problem Summary:</strong> .NET events are usually directly referenced through multi-cast delegates (a collection of classes that act like function pointers). I would call these references pointers, but these are managed references and this is important because managed references are managed through .NET garbage collection. When an object (&#8221;observer&#8221;) references an event on an object (&#8221;observable&#8221;) and the observable object goes out of scope (kind of), .NET garbage collection will not clean-up the observable, because of the observer&#8217;s event reference. Got it? You almost need a &#8220;Disposing&#8221; event on observable objects, so that observers can be notified and properly de-reference the subscribed event.</p>
<h3>What&#8217;s the Point? &#8230; First a Major WPF/Silverlight Eventing Digression</h3>
<p>I did a lot of WPF development earlier this year with the <a href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx">Model-View-ViewModel pattern</a>. A lot of the classes in this pattern will implement the <a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanging.aspx">INotifyPropertyChanging</a> and <a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx">INotifyPropertyChanged</a>. There is a lot of great debate around <a href="http://stackoverflow.com/questions/291518/inotifypropertychanged-vs-dependencyproperty-in-viewmodel">implementing these notification interfaces versus using the WPF DependencyProperty</a>. Ultimately, you end up with all of the public properties in these classes looking something like this:</p>
<p><code></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> abstract <span style="color: #FF0000;">class</span> BaseModel <span style="color: #008000;">:</span> INotifyPropertyChanging, INotifyPropertyChanged
<span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">event</span> PropertyChangingEventHandler PropertyChanging<span style="color: #008000;">;</span>
   <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">event</span> PropertyChangedEventHandler PropertyChanged<span style="color: #008000;">;</span>
&nbsp;
   <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> <span style="color: #0600FF;">void</span> OnPropertyChanging<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> propertyName<span style="color: #000000;">&#41;</span>
   <span style="color: #000000;">&#123;</span>
      <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">PropertyChanging</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
      <span style="color: #000000;">&#123;</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">PropertyChanging</span><span style="color: #000000;">&#40;</span>
            <span style="color: #0600FF;">this</span>, 
            <span style="color: #008000;">new</span> PropertyChangingEventArgs<span style="color: #000000;">&#40;</span>propertyName<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
&nbsp;
   <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> <span style="color: #0600FF;">void</span> OnPropertyChanged<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> propertyName<span style="color: #000000;">&#41;</span>
   <span style="color: #000000;">&#123;</span>
      <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">PropertyChanged</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
      <span style="color: #000000;">&#123;</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">PropertyChanged</span><span style="color: #000000;">&#40;</span>
            <span style="color: #0600FF;">this</span>, 
            <span style="color: #008000;">new</span> PropertyChangedEventArgs<span style="color: #000000;">&#40;</span>propertyName<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> BusinessModel <span style="color: #008000;">:</span> BaseModel
<span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">string</span> value<span style="color: #008000;">;</span>
&nbsp;
   <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> Value
   <span style="color: #000000;">&#123;</span>
      get
      <span style="color: #000000;">&#123;</span>
         <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">value</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
&nbsp;
      set
      <span style="color: #000000;">&#123;</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">OnPropertyChanging</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Value&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">value</span> <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">OnPropertyChanged</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Value&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p></code></p>
<p><strong>String Madness!</strong> That&#8217;s right! You&#8217;ve got strings everywhere, so uninstall your code refactoring utilities, because they are now useless. In fact, <a href="http://www.thejoyofcode.com">the Joy of Code</a> released a <a href="http://www.thejoyofcode.com/Automatically_Unit_Test_your_Model.aspx">model unit test framework</a> for just this kind of problem (along with other not-so-useless features).</p>
<p><strong>A Strongly-Typed Solution:</strong> There are more complex and robust solutions being developed on CodePlex, but they hadn&#8217;t worked out a solution at the time I wrote my own. So, we can improve this stringy solution with some effective use of .NET Lambda expressions&#8230; (Super-Secret Tip: download the source for the <a href="http://code.google.com/p/moq/">unit testing framework Moq</a> and review the &#8220;Setup&#8221; and &#8220;Verify&#8221; methods.)</p>
<p><code></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> abstract <span style="color: #FF0000;">class</span> BaseModel <span style="color: #008000;">:</span> INotifyPropertyChanging, INotifyPropertyChanged
<span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">event</span> PropertyChangingEventHandler PropertyChanging<span style="color: #008000;">;</span>
   <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">event</span> PropertyChangedEventHandler PropertyChanged<span style="color: #008000;">;</span>
&nbsp;
   <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> <span style="color: #0600FF;">void</span> OnPropertyChanging<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>Expression<span style="color: #008000;">&lt;</span>Func<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;&gt;</span> expression<span style="color: #000000;">&#41;</span>
   <span style="color: #000000;">&#123;</span>
      var memberExpression <span style="color: #008000;">=</span> expression.<span style="color: #0000FF;">Body</span> <span style="color: #0600FF;">as</span> MemberExpression<span style="color: #008000;">;</span>
&nbsp;
      <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">PropertyChanging</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
      <span style="color: #000000;">&#123;</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">PropertyChanging</span><span style="color: #000000;">&#40;</span>
            <span style="color: #0600FF;">this</span>, 
            <span style="color: #008000;">new</span> PropertyChangingEventArgs<span style="color: #000000;">&#40;</span>memberExpression.<span style="color: #0000FF;">Member</span>.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
&nbsp;
   <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> <span style="color: #0600FF;">void</span> OnPropertyChanged<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>Expression<span style="color: #008000;">&lt;</span>Func<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;&gt;</span> expression<span style="color: #000000;">&#41;</span>
   <span style="color: #000000;">&#123;</span>
      var memberExpression <span style="color: #008000;">=</span> expression.<span style="color: #0000FF;">Body</span> <span style="color: #0600FF;">as</span> MemberExpression<span style="color: #008000;">;</span>
&nbsp;
      <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">PropetyChanged</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
      <span style="color: #000000;">&#123;</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">PropertyChanged</span><span style="color: #000000;">&#40;</span>
            <span style="color: #0600FF;">this</span>, 
            <span style="color: #008000;">new</span> PropertyChangedEventArgs<span style="color: #000000;">&#40;</span>memberExpression.<span style="color: #0000FF;">Member</span>.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> BusinessModel <span style="color: #008000;">:</span> BaseModel
<span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">string</span> value<span style="color: #008000;">;</span>
&nbsp;
   <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> Value
   <span style="color: #000000;">&#123;</span>
      get
      <span style="color: #000000;">&#123;</span>
         <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">value</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
&nbsp;
      set
      <span style="color: #000000;">&#123;</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">OnPropertyChanging</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Value</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">value</span> <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">OnPropertyChanged</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Value</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p></code></p>
<h3>Still Interested in IObservable?</h3>
<p>
Because of my experience with the problems in .NET event references and the INotifyPropertyChang[...] interface implementations, I wrote a new solution called &#8220;IObservable&#8221;. Sweet! Now, circle back to the start of this post&#8230; Doh! Erik told the world about his IObservable and then Microsoft baked it into .NET 4 in the reactive framework. What&#8217;s more, their implementation looks nothing like what I did.
</p>
<div style="border:1px solid #999;margin:15px;padding:10px;text-align:center;font-weight:bold;font-size:14pt;font-family:arial,sans-serif"><a href="http://blogs.us.sogeti.com/ericswanson/files/2009/12/notify.zip">Download my IObservable Implementation - Renamed to INotify</a></div>
<h3>The Notification Solution Described</h3>
<p>
Download the zip file above and review the C# code file. The quickest description would be an example&#8230;
</p>
<p><code></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> MyObservable <span style="color: #008000;">:</span> MemberNotifier <span style="color: #008080; font-style: italic;">// all the goodies</span>
<span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">string</span> value<span style="color: #008000;">;</span>
&nbsp;
   <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> Value
   <span style="color: #000000;">&#123;</span>
      get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">value</span><span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
&nbsp;
      set
      <span style="color: #000000;">&#123;</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">OnChanging</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Value</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">value</span> <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">OnChanged</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Value</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> ObservableTestFixture
<span style="color: #000000;">&#123;</span>
   <span style="color: #000000;">&#91;</span>Fact<span style="color: #000000;">&#93;</span> <span style="color: #008080; font-style: italic;">// xUnit test</span>
   <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> TestMemberNotifications<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
   <span style="color: #000000;">&#123;</span>
      var observable <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> MyObservable<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #FF0000;">int</span> changingCount <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span>, changedCount <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
      <span style="color: #FF0000;">string</span> changingPropertyName <span style="color: #008000;">=</span> <span style="color: #0600FF;">null</span>, changedPropertyName <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
&nbsp;
      <span style="color: #008080; font-style: italic;">// the anonymous delegate is passed directly into the function call</span>
      <span style="color: #008080; font-style: italic;">// so, there are no managed references to clean up</span>
      <span style="color: #008080; font-style: italic;">// However, you should use &quot;UnregisterObserver&quot; if the delegate is assigned to an object instance</span>
      observable.<span style="color: #0000FF;">RegisterObserver</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>o, args<span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span>
         <span style="color: #000000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">// for the record, I don't like these &quot;is&quot; checks... it's most definately smelly code</span>
            <span style="color: #008080; font-style: italic;">// however, the interface for &quot;args&quot; can be implemented using any method (enums, bools, etc.)</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>args <span style="color: #008000;">is</span> MemberChangingNotification<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
               changingCount<span style="color: #008000;">++;</span>
               changingPropertyName <span style="color: #008000;">=</span> arg.<span style="color: #0000FF;">MemberExpression</span>.<span style="color: #0000FF;">Member</span>.<span style="color: #0000FF;">Name</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span> <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>args <span style="color: #008000;">is</span> MemberChangedNotification<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
               changedCount<span style="color: #008000;">++;</span>
               changedPropertyName <span style="color: #008000;">=</span> arg.<span style="color: #0000FF;">MemberExpression</span>.<span style="color: #0000FF;">Member</span>.<span style="color: #0000FF;">Name</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
         <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
      observable.<span style="color: #0000FF;">Value</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;test&quot;</span><span style="color: #008000;">;</span>
&nbsp;
      <span style="color: #008080; font-style: italic;">// strongly-typed sweetness</span>
      var expectedPropertyName <span style="color: #008000;">=</span> ExpressionHelper.<span style="color: #0000FF;">GetMember</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> see.<span style="color: #0000FF;">Value</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Name</span><span style="color: #008000;">;</span>
&nbsp;
      Assert.<span style="color: #0000FF;">AreEqual</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">1</span>, changingCount<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      Assert.<span style="color: #0000FF;">AreEqual</span><span style="color: #000000;">&#40;</span>expectedPropertyName, changingPropertyName<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      Assert.<span style="color: #0000FF;">AreEqual</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">1</span>, changedCount<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      Assert.<span style="color: #0000FF;">AreEqual</span><span style="color: #000000;">&#40;</span>expectedPropertyName, changedPropertyName<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p></code></p>
<p><strong>Performance?</strong> Because I use the reflection operations from the lambda expressions, I&#8217;d be curious to know if anyone has experienced performance degradation of any sort with this solution. The .NET team has done so much to improve reflection lookups that it&#8217;s usually not a problem, even in the enterprise.</p>
<h3>Event Driven Architecture</h3>
<p>
Yesterday, I finished reading <a href="http://www.manning.com/etzion/">&#8220;Event Processing in Action&#8221; by Manning Publishing</a> (not yet published to the public at the time of this post), which effectively describes the considerations that need to be made in Event Driven Architecture. The book covers the topic with examples in four different languages, <a href="http://www.aleri.com/">Aleri</a>, <a href="http://web.progress.com/en/apama/event-processing-platform.html">Apama</a>, <a href="http://esper.codehaus.org/">Esper</a>, and <a href="http://code.google.com/p/etalis/">Etalis</a>. Because these languages stand alone in many respects, it&#8217;s a refreshing perspective to step outside of Java or .NET and consider the many possibilities. The book was a solid read and I would recommend it to anyone interested in the subject. Of course, the book&#8217;s content has already begun to spin my head gears into thinking through the problems and solutions outlined here for even better solutions.
</p>
<h3>What do you think?</h3>
<p>Please comment and leave your thoughts on this solution, on Microsoft&#8217;s Reactive framework, weak eventing and the Composite Framework&#8217;s EventAggregator, etc.</p>
<div style="text-align:center"> <img src='http://blogs.us.sogeti.com/ericswanson/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <em>PS:</em> I am working on my birthday today and writing stuff like this, so be kind. <img src='http://blogs.us.sogeti.com/ericswanson/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </div>
<h3>Updates</h3>
<p><strong>Later today (WPF/Silverlight Notifications):</strong><br />
A much respected ex-coworker of mine suggested more could be done to simplify property setters and mentioned that <a href="http://blogs.msdn.com/gblock/">Glenn Block</a> was working on a solution that might be included in the <a href="http://code.msdn.microsoft.com/mef">Managed Extensibility Framework</a>. I haven&#8217;t reached out to Glenn yet, but here&#8217;s a quick and <em>untested</em> shot for WPF and Silverlight:
</p>
<p><code></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">// I'll take a shot at Wordpress coding... where's my intellisense?!</span>
<span style="color: #0600FF;">public</span> abstract <span style="color: #FF0000;">class</span> PropertyNotifier <span style="color: #008000;">:</span> 
   MemberNotifier, 
   INotifyPropertyChanging, 
   INotifyPropertyChanged
<span style="color: #000000;">&#123;</span>
   <span style="color: #008080; font-style: italic;">// the only requirement for INotifyPropertyChanging </span>
   <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">event</span> PropertyChangingEventHandler PropertyChanging<span style="color: #008000;">;</span>
&nbsp;
   <span style="color: #008080; font-style: italic;">// the only requirement for INotifyPropertyChanged</span>
   <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">event</span> PropertyChangedEventHandler PropertyChanged<span style="color: #008000;">;</span>
&nbsp;
   <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">override</span> <span style="color: #0600FF;">void</span> OnChanging<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>Expression<span style="color: #008000;">&lt;</span>Func<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;&gt;</span> expression<span style="color: #000000;">&#41;</span>
   <span style="color: #000000;">&#123;</span>
      <span style="color: #0600FF;">base</span>.<span style="color: #0000FF;">OnChanging</span><span style="color: #000000;">&#40;</span>expression<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// notify using the Observable pattern</span>
&nbsp;
      <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">PropertyChanging</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
      <span style="color: #000000;">&#123;</span>
         var memberExpression <span style="color: #008000;">=</span> expression.<span style="color: #0000FF;">Body</span> <span style="color: #0600FF;">as</span> MemberExpression<span style="color: #008000;">;</span>
&nbsp;
         <span style="color: #008080; font-style: italic;">// notify using events</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">PropertyChanging</span><span style="color: #000000;">&#40;</span>
            <span style="color: #0600FF;">this</span>, 
            <span style="color: #008000;">new</span> PropertyChanging<span style="color: #000000;">&#40;</span>memberExpression.<span style="color: #0000FF;">Member</span>.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
&nbsp;
   <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">void</span> OnChanged<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>Expression<span style="color: #008000;">&lt;</span>Func<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;&gt;</span> expression<span style="color: #000000;">&#41;</span>
   <span style="color: #000000;">&#123;</span>
      <span style="color: #0600FF;">base</span>.<span style="color: #0000FF;">OnChanged</span><span style="color: #000000;">&#40;</span>expression<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// notify using the Observable pattern</span>
&nbsp;
      <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">PropertyChanged</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
      <span style="color: #000000;">&#123;</span>
         var memberExpression <span style="color: #008000;">=</span> expression.<span style="color: #0000FF;">Body</span> <span style="color: #0600FF;">as</span> MemberExpression<span style="color: #008000;">;</span>
&nbsp;
         <span style="color: #008080; font-style: italic;">// notify using events</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">PropertyChanged</span><span style="color: #000000;">&#40;</span>
            <span style="color: #0600FF;">this</span>, 
            <span style="color: #008000;">new</span> PropertyChanged<span style="color: #000000;">&#40;</span>memberExpression.<span style="color: #0000FF;">Member</span>.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
&nbsp;
   <span style="color: #008080; font-style: italic;">// wrap a setter in Changing and Changed notifications</span>
   <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">void</span> SetWithNotifications<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>
      Expression<span style="color: #008000;">&lt;</span>Func<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;&gt;</span> expression, 
      Action setter<span style="color: #000000;">&#41;</span>
   <span style="color: #000000;">&#123;</span>
      <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">OnPropertyChanging</span><span style="color: #000000;">&#40;</span>expression<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      setter<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">OnPropertyChanged</span><span style="color: #000000;">&#40;</span>expression<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #008080; font-style: italic;">// now, implementing becomes incredibly simple!</span>
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> MyObservable <span style="color: #008000;">:</span> PropertyNotifier
<span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">string</span> value<span style="color: #008000;">;</span>
&nbsp;
   <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> Value
   <span style="color: #000000;">&#123;</span>
      get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">value</span><span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
&nbsp;
      set
      <span style="color: #000000;">&#123;</span>
         <span style="color: #008080; font-style: italic;">// pass the member expression and the setter action delegate</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">SetWithNotifications</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Value</span>, <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">value</span> <span style="color: #008000;">=</span> value<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #008080; font-style: italic;">// what about multiple notifications?</span>
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> MyObservablePerson <span style="color: #008000;">:</span> PropertyNotifier
<span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">string</span> firstName<span style="color: #008000;">;</span>
   <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">string</span> lastName<span style="color: #008000;">;</span>
&nbsp;
   <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> FirstName
   <span style="color: #000000;">&#123;</span>
      get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">firstName</span><span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
      set
      <span style="color: #000000;">&#123;</span>
         <span style="color: #008080; font-style: italic;">// ... [input validation ?] ...</span>
&nbsp;
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">SetWithNotifications</span><span style="color: #000000;">&#40;</span>
            <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">FirstName</span>, <span style="color: #008080; font-style: italic;">// member expression</span>
            <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> <span style="color: #008080; font-style: italic;">// setter</span>
            <span style="color: #000000;">&#123;</span>
               <span style="color: #008080; font-style: italic;">// wrap setter with change notifications for FullName</span>
               <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">OnPropertyChanging</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">FullName</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
               <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">firstName</span> <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span>
               <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">OnPropertyChanged</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">FullName</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
&nbsp;
   <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> LastName
   <span style="color: #000000;">&#123;</span>
      get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">lastName</span><span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
      set
      <span style="color: #000000;">&#123;</span>
         <span style="color: #008080; font-style: italic;">// ... [input validation] ...</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">SetWithNotifications</span><span style="color: #000000;">&#40;</span>
            <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">LastName</span>, 
            <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> 
            <span style="color: #000000;">&#123;</span>
               <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">OnPropertyChanging</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">FullName</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
               <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">lastName</span> <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span>
               <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">OnPropertyChanged</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">FullName</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
&nbsp;
      <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> FullName
      <span style="color: #000000;">&#123;</span>
         get      
         <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">return</span> <span style="color: #FF0000;">String</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;">&#40;</span>
               CultureInfo.<span style="color: #0000FF;">CurrentCulture</span>, 
               <span style="color: #666666;">&quot;{1}, {0}&quot;</span>, 
               <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">FirstName</span>, 
               <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">LastName</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
         <span style="color: #000000;">&#125;</span>
      <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #008080; font-style: italic;">/*
   FYI: You could also overload the SetWithNotifications method 
   to accept a primary member expression for the setter and a
   list of secondary member expressions for notification...
   The call would end up looking something like:
      this.SetWithNotifications(
         () =&gt; this.Value, 
         {
            () =&gt; this.DependantValue1,
            () =&gt; this.DependantValue2,
            () =&gt; this.DependantValue3
         },
         this.value = value);
&nbsp;
   The method could simply iterate the dependencies,
   calling Changing() and Changed() for each.
*/</span></pre></td></tr></table></div>

<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.us.sogeti.com/ericswanson/2009/12/22/iobservable-reactive-and-composite-framework-event-management/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
