<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2635652924590027936</id><updated>2012-01-30T15:50:36.058-08:00</updated><category term='mobile'/><category term='Resharper'/><category term='DVCS'/><category term='Sport'/><category term='Twitter'/><category term='Team Foundation Server'/><category term='MVVM'/><category term='MVC'/><category term='Dependency Injection'/><category term='Composite Application Block'/><category term='.Net'/><category term='Moq'/><category term='IPad'/><category term='AJAX'/><category term='XBOX360'/><category term='Structure Map'/><category term='MonoDevelop'/><category term='IRiver'/><category term='Rhino Mocks'/><category term='Neuropsychology'/><category term='Azure'/><category term='Mercurial'/><category term='Visual Studio 2010'/><category term='NBA'/><category term='Testing'/><category term='IPhone'/><category term='NDepend'/><category term='TDD'/><category term='Caliburn'/><category term='Windows Workflow'/><category term='Travel'/><category term='BDD'/><category term='Extension Methods'/><category term='ORM'/><category term='Unity'/><category term='Communication'/><category term='INotifyPropertyChanged'/><category term='C#4'/><category term='Application Architecture'/><category term='CodeRun'/><category term='Cloud'/><category term='Dependency'/><category term='NUnit'/><category term='Bridge to Brisbane'/><category term='Data Services'/><category term='AFL'/><category term='Continuous Integration'/><category term='Patterns and Practices'/><category term='IoC'/><category term='Organic Nursery Bedding'/><category term='IRiver P7'/><category term='REST'/><category term='PLINQ'/><category term='Software Development'/><category term='Team City'/><category term='Photography'/><category term='F#'/><category term='EuroTrip 2010'/><category term='IIS'/><category term='NMock2'/><category term='C#'/><category term='MVC3'/><category term='.Net4'/><category term='Panasonic'/><category term='Telerik'/><category term='Agile'/><category term='WCF'/><category term='Linq'/><category term='Success'/><category term='Scrum'/><category term='VS2010'/><category term='Autofac'/><category term='NHibernate'/><category term='MVVMLight'/><category term='MonoTouch'/><category term='Antons Lane'/><category term='Fluent NHibernate'/><category term='Environment Development'/><category term='Behaviour'/><category term='ASP.Net'/><category term='Fluent Interface'/><category term='WPF'/><category term='NBuilder'/><category term='Silverlight'/><title type='text'>Does it MATTer??</title><subtitle type='html'>An Aussie developer wondering about whether a problem is really a problem</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>79</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-5111569538133278033</id><published>2011-03-23T06:10:00.000-07:00</published><updated>2011-03-23T07:03:28.801-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='MonoDevelop'/><category scheme='http://www.blogger.com/atom/ns#' term='IPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='MonoTouch'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='IPad'/><title type='text'>MonoTouch with JSON using ASP.Net MVC</title><content type='html'>I feel like I am in the Monotouch zone @ the moment so this blog is a follow up to &lt;a href="http://merbla.blogspot.com/2011/03/monotouch-and-eventaggregator.html"&gt;MonoTouch and the Event Aggregator&lt;/a&gt;.   &lt;div&gt;&amp;#160;&lt;/div&gt;  &lt;div&gt;In this post, I wanted to focus on a simple way to communicate using Json using ASP.Net MVC. The sample code at &lt;a href="https://github.com/merbla/merblasamples"&gt;github&lt;/a&gt; contains a number of projects. Firstly there is a MVC app that has a &lt;a href="https://github.com/merbla/merblasamples/blob/master/MonoTouch/Merbla.IPhone/Merbla.IPhone.Web/Controllers/ServiceController.cs"&gt;ServiceController&lt;/a&gt;, which uses a JsonResult to expose a simple service that can be consumed. There is no need to spin up a WCF service here. The data is pretty simple as it returns a person entity.&lt;/div&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;[HandleError]&lt;br /&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ServiceController : Controller&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; JsonResult GetData ()&lt;br /&gt;    {&lt;br /&gt;        var people = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; List&amp;lt;Person&amp;gt;();&lt;br /&gt;        people.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Person{FirstName=&lt;span style="color: #006080"&gt;&amp;quot;Joe&amp;quot;&lt;/span&gt;, Surname =&lt;span style="color: #006080"&gt;&amp;quot;Smith&amp;quot;&lt;/span&gt;});&lt;br /&gt;        people.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Person{FirstName=&lt;span style="color: #006080"&gt;&amp;quot;Larry&amp;quot;&lt;/span&gt;, Surname =&lt;span style="color: #006080"&gt;&amp;quot;Jones&amp;quot;&lt;/span&gt;});&lt;br /&gt;        people.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Person{FirstName=&lt;span style="color: #006080"&gt;&amp;quot;Amy&amp;quot;&lt;/span&gt;, Surname =&lt;span style="color: #006080"&gt;&amp;quot;Johnston&amp;quot;&lt;/span&gt;});&lt;br /&gt;        &lt;br /&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;  Json(people); &lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Secondly we have an IPad app created in MonoTouch/MonoDevelop. This uses &lt;a href="http://hg.grumpydev.com/tinyioc/wiki/Home"&gt;TinyIoC&lt;/a&gt; and &lt;a href="http://hg.grumpydev.com/tinyioc/wiki/Home"&gt;TinyMessenger&lt;/a&gt; (thanks &lt;a href="http://twitter.com/#!/grumpydev"&gt;@GrumpyDev&lt;/a&gt;) to inject any dependencies and pass messages relating to the success of a rest client call. Behind the scenes the web service call plumbing is achieved using ported versions of &lt;a href="http://restsharp.org/"&gt;RestSharp&lt;/a&gt; and &lt;a href="http://json.codeplex.com/"&gt;Json.Net&lt;/a&gt;.&amp;#160; There is a repository that is going to do the service call, which publishes a message on a successful result.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&lt;br /&gt;  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; WebRepository : IRepository&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; WebRepository (ITinyMessengerHub messageHub)&lt;br /&gt;        {&lt;br /&gt;            _messageHub = messageHub;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; ITinyMessengerHub _messageHub;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; IRestClient _client;&lt;br /&gt;        &lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; IRestClient Client {&lt;br /&gt;            get {&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (_client == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) {&lt;br /&gt;                    _client = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RestClient (&lt;span style="color: #006080"&gt;&amp;quot;http://127.0.0.1:8080/&amp;quot;&lt;/span&gt;);&lt;br /&gt;                    _client.Timeout = 20000;&lt;br /&gt;                }&lt;br /&gt;                &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _client;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; GetPeople()&lt;br /&gt;        {&lt;br /&gt;            var request = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; GetPeopleRequest ();&lt;br /&gt;            &lt;br /&gt;            Client.ExecuteAsync (request, x =&amp;gt;&lt;br /&gt;            { &lt;br /&gt;                var people = JsonConvert.DeserializeObject&amp;lt;List&amp;lt;Person&amp;gt;&amp;gt; (x.Content); &lt;br /&gt;                _messageHub.PublishAsync(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PeopleMessage(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;, people));&lt;br /&gt;            });&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; GetPeopleRequest : RestRequest&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; GetPeopleRequest () : &lt;span style="color: #0000ff"&gt;base&lt;/span&gt;(&lt;span style="color: #006080"&gt;&amp;quot;service/getdata&amp;quot;&lt;/span&gt;, Method.GET)&lt;br /&gt;        {&lt;br /&gt;            RequestFormat = DataFormat.Json;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Lastly, there is a subscription made and an UIAlertView is wired up to show the response content.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&lt;br /&gt;  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; AppDelegate : UIApplicationDelegate&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; FinishedLaunching (UIApplication app, NSDictionary options)&lt;br /&gt;        {&lt;br /&gt;            BootStrap ();&lt;br /&gt;            &lt;br /&gt;            &lt;span style="color: #008000"&gt;//This could be done in any UIViewController&lt;/span&gt;&lt;br /&gt;             MessageHub.Subscribe&amp;lt;PeopleMessage&amp;gt;((m) =&amp;gt;{&lt;br /&gt;         &lt;br /&gt;                Dispatch(()=&amp;gt;{&lt;br /&gt;                    &lt;br /&gt;                    var message = &lt;span style="color: #006080"&gt;&amp;quot;People message received @ &amp;quot;&lt;/span&gt; + DateTime.Now; &lt;br /&gt;                    message += &lt;span style="color: #006080"&gt;&amp;quot;: &amp;quot;&lt;/span&gt; + m.Content&lt;br /&gt;                        .Select(p=&amp;gt; p.Surname)&lt;br /&gt;                            .Aggregate((text, item) =&amp;gt;&lt;br /&gt;                                text + &lt;span style="color: #006080"&gt;&amp;quot; Surname: &amp;quot;&lt;/span&gt; + item);&lt;br /&gt;         &lt;br /&gt;                    UIAlertView alert = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; UIAlertView();&lt;br /&gt;                    alert.Title = &lt;span style="color: #006080"&gt;&amp;quot;Service Call returned&amp;quot;&lt;/span&gt;;&lt;br /&gt;                    alert.AddButton(&lt;span style="color: #006080"&gt;&amp;quot;Ok&amp;quot;&lt;/span&gt;);&lt;br /&gt;                    alert.Message = message;&lt;br /&gt;                    alert.Show();         &lt;br /&gt;                });&lt;br /&gt;            });&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #008000"&gt;//Fire the method to get the data from the service&lt;/span&gt;&lt;br /&gt;            Repo.GetPeople();&lt;br /&gt;            &lt;br /&gt;            window.MakeKeyAndVisible ();&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;br /&gt;            &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; TinyIoC.TinyIoCContainer Container { get; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; set; }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; IRepository Repo &lt;br /&gt;        { &lt;br /&gt;            get { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Container.Resolve&amp;lt;IRepository&amp;gt;();}&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; ITinyMessengerHub MessageHub&lt;br /&gt;        {            &lt;br /&gt;            get{ &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Container.Resolve&amp;lt;ITinyMessengerHub&amp;gt;();    }&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; BootStrap ()&lt;br /&gt;        {&lt;br /&gt;            Container = TinyIoCContainer.Current;&lt;br /&gt;            Container.Register&amp;lt;ITinyMessengerHub, TinyMessengerHub&amp;gt; ().AsSingleton();&lt;br /&gt;            Container.Register&amp;lt;IRepository, WebRepository&amp;gt; ();        }    }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Please note that this implementation does not take into consideration Authentication/Authorisation or any other cross cutting concerns. At another time, I will post about possible implementation options similar to the OAuth Miguel has in &lt;a href="https://github.com/migueldeicaza/TweetStation"&gt;TweetStation&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Get Amongst It!!!!&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-5111569538133278033?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/5111569538133278033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=5111569538133278033' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5111569538133278033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5111569538133278033'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2011/03/monotouch-with-json-using-aspnet-mvc.html' title='MonoTouch with JSON using ASP.Net MVC'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-3378972449496906265</id><published>2011-03-22T06:21:00.000-07:00</published><updated>2011-03-22T07:16:27.544-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVVMLight'/><category scheme='http://www.blogger.com/atom/ns#' term='Caliburn'/><category scheme='http://www.blogger.com/atom/ns#' term='MonoDevelop'/><category scheme='http://www.blogger.com/atom/ns#' term='IPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='MonoTouch'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='IPad'/><title type='text'>Monotouch and the EventAggregator</title><content type='html'>&lt;p&gt;&lt;a href="http://monotouch.net/"&gt;Monotouch&lt;/a&gt; along with &lt;a href="http://monodevelop.com/"&gt;MonoDevelop&lt;/a&gt; is a great tool set that allows developers familiar with the .Net stack to create IPhone and IPad applications in a short amount of time.     &lt;br /&gt;    &lt;br /&gt;In doing various forms of development patterns fly around and often get mixed up with specific implementations. One pattern that I came quite fond of when doing WPF and Silverlight development is the &lt;a href="http://martinfowler.com/eaaDev/EventAggregator.html"&gt;Event Aggregator&lt;/a&gt;. This is often wrapped up in UI frameworks such as &lt;a href="http://caliburnmicro.codeplex.com/"&gt;Caliburn Micro&lt;/a&gt;, Prism and &lt;a href="http://mvvmlight.codeplex.com/"&gt;MVVM Light&lt;/a&gt;.     &lt;br /&gt;    &lt;br /&gt;After using this pattern over a number of different implementations, I have come to admire its ability to decouple UI components whilst letting them &amp;quot;opt in&amp;quot; to key events that occur in the application. Very similar to a mini service bus an Event Aggregator lets components publish and subscribe to events that are relevant to that components context.     &lt;br /&gt;    &lt;br /&gt;In doing a significant amount of Monotouch development lately I realised the need for a similar implementation.&amp;#160; Many MonTouch samples utilise the Application Delegate as a big global bucket of variables.&amp;#160; I have not been too comfortable with that approach so here goes...     &lt;br /&gt;    &lt;br /&gt;Firstly I have taken the &lt;a href="http://caliburnmicro.codeplex.com/SourceControl/changeset/view/af0a0f2926c3#src%2fCaliburn.Micro.Silverlight%2fEventAggregator.cs"&gt;EventAggregator&lt;/a&gt; and its surrounding infrastructure from the Caliburn Micro Project (Thanks &lt;a href="http://twitter.com/eisenbergeffect"&gt;@EisenbergEffect&lt;/a&gt;). Then with a few tweaks to cater for slight differences in the environments and a Dispatch method which represents the Caliburn Execute.OnUIThread we have a similar implementation.     &lt;br /&gt;    &lt;br /&gt;I created a quick UI View that allows an element to be dragged around the view. On release of the touch, this then uses the Event Aggregator to publish an event.     &lt;br /&gt;    &lt;br /&gt;I have two subscribers firstly a ConsoleHandler. &lt;/p&gt;    &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ConsoleHandler :IHandle&amp;lt;MovementFinished&amp;gt;&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; IEventAggregator _aggregator;&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; ConsoleHandler (IEventAggregator aggregator)&lt;br /&gt;    {&lt;br /&gt;        _aggregator = aggregator;&lt;br /&gt;        _aggregator.Subscribe(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; HandleEvent(MovementFinished message)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(&lt;span style="color: #006080"&gt;&amp;quot;Movement finished&amp;quot;&lt;/span&gt; + message.FinishDateTime.ToLongDateString());&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And secondly, the ApplicationDelegate itself, which updates a label when an event is published. &lt;br /&gt;&lt;br /&gt;&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&lt;br /&gt;  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; AppDelegate : UIApplicationDelegate,IHandle&amp;lt;MovementFinished&amp;gt;&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; IEventAggregator EventAggregator {get;set;}&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; ConsoleHandler Handler {get;set;}&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; FinishedLaunching (UIApplication app, NSDictionary options)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000"&gt;//Initialise the aggregator&lt;/span&gt;&lt;br /&gt;        EventAggregator = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; EventAggregator();&lt;br /&gt;        Handler = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ConsoleHandler(EventAggregator); &lt;br /&gt;        EventAggregator.Subscribe(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;);&lt;br /&gt;        &lt;br /&gt;        &lt;span style="color: #008000"&gt;///Create a ui view &lt;/span&gt;&lt;br /&gt;        var img = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MerblaImageView(EventAggregator,  &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RectangleF(64,64,64,64));&lt;br /&gt;        img.UserInteractionEnabled = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;br /&gt;        img.BackgroundColor = UIColor.Red;&lt;br /&gt;        img.Hidden = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        window.AddSubview(img);&lt;br /&gt;        window.MakeKeyAndVisible ();&lt;br /&gt;        &lt;br /&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; HandleEvent(MovementFinished message)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.outputLabel.Text += Environment.NewLine + message.FinishDateTime.ToShortTimeString();&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The code can be found @ &lt;a href="https://github.com/merbla/merblasamples"&gt;https://github.com/merbla/merblasamples&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;I am going to upload a short video covering this post as an experiment into video blogging. &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;Get Amongst It!!! &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-3378972449496906265?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/3378972449496906265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=3378972449496906265' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3378972449496906265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3378972449496906265'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2011/03/monotouch-and-eventaggregator.html' title='Monotouch and the EventAggregator'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-781817256556887995</id><published>2011-02-10T05:25:00.001-08:00</published><updated>2011-02-10T05:47:20.492-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Autofac'/><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='Dependency Injection'/><category scheme='http://www.blogger.com/atom/ns#' term='IoC'/><category scheme='http://www.blogger.com/atom/ns#' term='MVC3'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><title type='text'>IFilterProvider using Autofac for MVC 3</title><content type='html'>Recently I had to extend some of the filter functionality for MVC3 using the IFilterProvider and some custom Action Filters.&amp;nbsp; In my instance I was already using Autofac as an IoC container so I wanted to leverage my existing work. As there was not a lot of resources out there I thought I would knock up a quick post. Let’s set the scene Firstly a simple class that does something, in this case it does some logging.  &lt;div id="codeSnippetWrapper"&gt;&lt;span class="kwrd"&gt; &lt;div id="codeSnippetWrapper"&gt; &lt;div id="codeSnippetWrapper"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;interface&lt;/span&gt; IMerblaService&lt;br&gt;{&lt;br&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Log(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; message);&lt;br&gt;}   &lt;br&gt;&lt;br&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MerblaService : IMerblaService&lt;br&gt;{&lt;br&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Log(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; message)&lt;br&gt; {&lt;br&gt;  &lt;span style="color: #008000"&gt;//Log it&lt;/span&gt;&lt;br&gt; }&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&lt;br&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Next we have an custom Action Filter that we want to use to log all executing actions on controllers.&amp;nbsp; This may be a different custom controller that does some authorisation. &lt;br /&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;br /&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;br /&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;br&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MerblaActionFilter : IActionFilter&lt;br&gt;{&lt;br&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; IMerblaService _merblaService;&lt;br&gt; &lt;br&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; MerblaActionFilter(IMerblaService merblaService)&lt;br&gt; {&lt;br&gt;  _merblaService = merblaService;&lt;br&gt; }   &lt;br&gt; &lt;br&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; OnActionExecuting(ActionExecutingContext filterContext)&lt;br&gt; {&lt;br&gt;  _merblaService.Log(&lt;span style="color: #006080"&gt;"Executing"&lt;/span&gt;);&lt;br&gt; }   &lt;br&gt; &lt;br&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; OnActionExecuted(ActionExecutedContext filterContext)&lt;br&gt; {&lt;br&gt;  _merblaService.Log(&lt;span style="color: #006080"&gt;"Executed"&lt;/span&gt;);&lt;br&gt; }   &lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Now we want something that can inject any dependencies into the action filter, in this case the filter provider receives an Autofac container to resolve any dependencies.&lt;/p&gt;&lt;br /&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;br /&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MerblaFilterProvider : IFilterProvider&lt;br&gt;{&lt;br&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; IContainer _container;   &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; MerblaFilterProvider(IContainer container)&lt;br&gt; {&lt;br&gt;  _container = container;&lt;br&gt; }   &lt;br&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; IEnumerable&amp;lt;Filter&amp;gt; GetFilters(ControllerContext controllerContext, &lt;br&gt; ActionDescriptor actionDescriptor)&lt;br&gt; {&lt;br&gt;  var merblaActionFilter = _container.Resolve&amp;lt;MerblaActionFilter&amp;gt;();&lt;br&gt;  &lt;span style="color: #0000ff"&gt;yield&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Filter(merblaActionFilter, FilterScope.Global, order: &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);&lt;br&gt; }&lt;br&gt;}&lt;/pre&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;Lastly we need to wire up the container at the application level.&amp;nbsp; This can be done inside the Global.asax file &lt;br /&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;br /&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Application_Start()&lt;br&gt;{&lt;br&gt; var builder = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ContainerBuilder();&lt;br&gt; builder.RegisterType&amp;lt;MerblaService&amp;gt;().As&amp;lt;IMerblaService&amp;gt;();&lt;br&gt; builder.RegisterType&amp;lt;MerblaActionFilter&amp;gt;().As&amp;lt;MerblaActionFilter&amp;gt;();&lt;br&gt; builder.RegisterControllers(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt; (MvcApplication).Assembly);&lt;br&gt;&lt;br&gt; var container = builder.Build();&lt;br&gt; DependencyResolver.SetResolver(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; AutofacDependencyResolver(container));&lt;br&gt;&lt;br&gt; var provider = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MerblaFilterProvider(container);&lt;br&gt; FilterProviders.Providers.Add(provider);&lt;br&gt; &lt;br&gt; &lt;span style="color: #008000"&gt;//Other app bootstrapping.....&lt;/span&gt;&lt;br&gt;}&lt;/pre&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;There you have it, nice clean IoC using Autofac and MVC3 Action Filters, goodbye attribute declarations Get Amongst It!!!! &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-781817256556887995?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/781817256556887995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=781817256556887995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/781817256556887995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/781817256556887995'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2011/02/ifilterprovider-using-autofac-for-mvc-3.html' title='IFilterProvider using Autofac for MVC 3'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-3746400356905665290</id><published>2010-11-15T03:16:00.001-08:00</published><updated>2010-11-15T03:31:34.268-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='F#'/><category scheme='http://www.blogger.com/atom/ns#' term='Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Azure, AppFabric Service Bus and F#</title><content type='html'>&lt;p&gt;I have been doing quite a bit of work recently within the Microsoft cloud space. In that piece of work I have covered all of the offerings including AppFabric and Windows Azure.&amp;#160; The tooling is still a little raw however it does allow you to apply know concepts and patterns to application running or integrating with the cloud.&amp;#160; &lt;/p&gt;  &lt;p&gt;As a bit of fun (and the fact there is not much out there in the Blogosphere) I thought I would write up a quick example that showed these technologies working with F#.&amp;#160; I am slowly getting my head around F# however certainly not super comfortable yet.&lt;/p&gt;  &lt;p&gt;The example will illustrate the following concept.&amp;#160; Firstly an app sends a message to the queue, this queue is then processed regularly and any messages on sent to any subscribing clients via the service bus.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_CsLu6MHVy_A/TOEWnOuCEII/AAAAAAAAAP8/nMqRiUIXMpo/s1600-h/Initial-Azure15.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; width: 621px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 328px; border-left-width: 0px; padding-top: 0px" title="Initial Azure" border="0" alt="Initial Azure" src="http://lh4.ggpht.com/_CsLu6MHVy_A/TOEWof4ZkkI/AAAAAAAAAQA/zb-KDfYKw54/Initial-Azure_thumb9.png?imgmax=800" width="621" height="334" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Firstly the queue console app.&lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;br /&gt;&lt;font face="Courier New"&gt;open System     &lt;br /&gt;open System.Collections.Generic      &lt;br /&gt;open System.Diagnostics      &lt;br /&gt;open System.Linq      &lt;br /&gt;open System.Net       &lt;br /&gt;open System.ServiceModel;      &lt;br /&gt;open Merbla.Azure.FSharp.Contracts      &lt;br /&gt;open Microsoft.ServiceBus      &lt;br /&gt;open Microsoft.WindowsAzure       &lt;br /&gt;open Microsoft.WindowsAzure.StorageClient&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;let write( message:string) =     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(message)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;//Create the queue client&amp;#160; &lt;br /&gt;let queueClient = CloudStorageAccount.FromConfigurationSetting(&amp;quot;MyBlobConnection&amp;quot;).CreateCloudQueueClient()      &lt;br /&gt;let queue = queueClient.GetQueueReference(&amp;quot;MyQueue&amp;quot;)      &lt;br /&gt;let traceInfo message =&amp;#160; Trace.TraceInformation(message)&amp;#160; &lt;br /&gt;&amp;#160; &lt;br /&gt;write &amp;quot;Starting Queue Console app&amp;quot;       &lt;br /&gt;&amp;#160; &lt;br /&gt;write &amp;quot;Sending message to queue&amp;quot; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;//Add message to queue      &lt;br /&gt;let message = String.Format(&amp;quot;My Message {0}&amp;quot;, DateTime.Now)      &lt;br /&gt;let cloudMessage = new CloudQueueMessage(message)      &lt;br /&gt;queue.AddMessage(cloudMessage)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;write &amp;quot;Message Sent&amp;quot;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Then the worker role to process the queue &lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;open System     &lt;br /&gt;open System.Collections.Generic      &lt;br /&gt;open System.Diagnostics      &lt;br /&gt;open System.Linq      &lt;br /&gt;open System.Net      &lt;br /&gt;open System.Threading      &lt;br /&gt;open Microsoft.WindowsAzure      &lt;br /&gt;open Microsoft.WindowsAzure.Diagnostics      &lt;br /&gt;open Microsoft.WindowsAzure.ServiceRuntime      &lt;br /&gt;open Microsoft.WindowsAzure.StorageClient      &lt;br /&gt;open Microsoft.ServiceBus;      &lt;br /&gt;open System.ServiceModel;      &lt;br /&gt;open Merbla.Azure.FSharp.Contracts&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;type WorkerRole() =     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; inherit RoleEntryPoint() &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; let log message kind = Trace.WriteLine(message, kind)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; let queueClient = CloudStorageAccount.FromConfigurationSetting(&amp;quot;MyBlobConnection&amp;quot;).CreateCloudQueueClient()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; let queue = queueClient.GetQueueReference(&amp;quot;MyQueue&amp;quot;)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; let traceInfo message =&amp;#160; Trace.TraceInformation(message)       &lt;br /&gt;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; let sendMessage( message:string) =       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ServiceBusEnvironment.SystemConnectivity.Mode &amp;lt;- ConnectivityMode.AutoDetect;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; let credential = new TransportClientEndpointBehavior()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; credential.Credentials.SharedSecret.IssuerName &amp;lt;- &amp;quot;MyOwner&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; credential.Credentials.SharedSecret.IssuerSecret &amp;lt;- &amp;quot;MySecret&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; let channelFactory = new ChannelFactory&amp;lt;IService&amp;gt;(new NetEventRelayBinding(), new EndpointAddress(&amp;quot;MyServiceBusAddress&amp;quot;))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; channelFactory.Endpoint.Behaviors.Add(credential)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; let channel = channelFactory.CreateChannel();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; channel.SendMessage(message)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; let processQ =     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; let message = queue.GetMessage()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if message=null then       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; traceInfo &amp;quot;No items in the queue&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Thread.Sleep(5000)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; traceInfo &amp;quot;Message being processed&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sendMessage &amp;quot;Send message using F#&amp;quot;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; queue.DeleteMessage(message)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Thread.Sleep(5000)&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; override wr.Run() =&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; traceInfo &amp;quot;F# Worker Role Starting&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; while(true) do &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; processQ&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Thread.Sleep(10000)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; traceInfo &amp;quot;F# Worker Role Starting&amp;quot; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; override wr.OnStart() = &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ServicePointManager.DefaultConnectionLimit &amp;lt;- 12&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DiagnosticMonitor.Start(&amp;quot;DiagnosticsConnectionString&amp;quot;) |&amp;gt; ignore      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RoleEnvironment.Changing.Add(fun e -&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if e.Changes |&amp;gt; Seq.exists (fun change -&amp;gt; change :? RoleEnvironmentConfigurationSettingChange) then       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; e.Cancel &amp;lt;- true)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; base.OnStart()&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Lastly the console client to listen for any messages sent via the bus&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;open System     &lt;br /&gt;open System.Collections.Generic      &lt;br /&gt;open System.Diagnostics      &lt;br /&gt;open System.Linq      &lt;br /&gt;open System.Net       &lt;br /&gt;open System.ServiceModel;      &lt;br /&gt;open Merbla.Azure.FSharp.Contracts      &lt;br /&gt;open Microsoft.ServiceBus &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;let write( message:string) =     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(message)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;write &amp;quot;Starting Client Console app&amp;quot;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;//Represents the service that will listen for messages sent from the service bus     &lt;br /&gt;type RelayService() =      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; interface IService with      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; member this.SendMessage(message:string) =       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; write message&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;//Create host     &lt;br /&gt;ServiceBusEnvironment.SystemConnectivity.Mode &amp;lt;- ConnectivityMode.AutoDetect;      &lt;br /&gt;let credential = new TransportClientEndpointBehavior()      &lt;br /&gt;credential.Credentials.SharedSecret.IssuerName &amp;lt;- &amp;quot;MyOwner&amp;quot;      &lt;br /&gt;credential.Credentials.SharedSecret.IssuerSecret &amp;lt;- &amp;quot;MySecret&amp;quot;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;let serviceAddress = ServiceBusEnvironment.CreateServiceUri(&amp;quot;sb&amp;quot;, &amp;quot;MyServiceNamespace&amp;quot;, &amp;quot;MyServiceName&amp;quot;);      &lt;br /&gt;let host = new ServiceHost(typeof&amp;lt;RelayService&amp;gt;, serviceAddress)      &lt;br /&gt;let serviceEndpoint = host.AddServiceEndpoint(typeof&amp;lt;RelayService&amp;gt;, new NetEventRelayBinding(), String.Empty)       &lt;br /&gt;serviceEndpoint.Behaviors.Add(credential)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160; &lt;br /&gt;host.Open()      &lt;br /&gt;write(String.Format(&amp;quot;Connected - {0}&amp;quot;, serviceAddress.ToString()))      &lt;br /&gt;write &amp;quot;Hit Enter to exit, or wait for messages&amp;quot;      &lt;br /&gt;System.Console.ReadLine()      &lt;br /&gt;host.Close()&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Code is available at &lt;a href="http://code.google.com/p/merbla/"&gt;http://code.google.com/p/merbla/&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I would be interested to see a number of cloud service bus offerings working together, say Azure, Rabbit MQ and Amazon? &lt;/p&gt;  &lt;p&gt;Get Amongst It!!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-3746400356905665290?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/3746400356905665290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=3746400356905665290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3746400356905665290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3746400356905665290'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/11/azure-appfabric-service-bus-and-f.html' title='Azure, AppFabric Service Bus and F#'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_CsLu6MHVy_A/TOEWof4ZkkI/AAAAAAAAAQA/zb-KDfYKw54/s72-c/Initial-Azure_thumb9.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-4120358148446018540</id><published>2010-11-01T04:52:00.001-07:00</published><updated>2010-11-01T05:03:45.398-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVVM'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='MVVMLight'/><category scheme='http://www.blogger.com/atom/ns#' term='INotifyPropertyChanged'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>MVVM Light &amp; Strongly Typed RaisePropertyChanged</title><content type='html'>&lt;p&gt;I have been using &lt;a href="http://mvvmlight.codeplex.com/"&gt;MVVM Light&lt;/a&gt; recently for a Silverlight project I have been working on, its a great light weight framework that helps you quickly build up WPF &amp;amp; Silverlight applications using the MVVM UI pattern&lt;/p&gt;  &lt;p&gt;At the core of the framework is the ViewModelBase class, and it comes with a number of overloaded methods that help implement &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx"&gt;INotifyPropertyChanged&lt;/a&gt;.&amp;#160; On thing I have found however is the lack of strong typing when using these methods.&amp;#160; With a technique I learnt from &lt;a href="http://buffered.io/"&gt;OJ&lt;/a&gt;, here is some code that will surely help you.&lt;/p&gt;  &lt;p&gt;First of all, we need an extension method. This is going to do the hard work of getting the name of the property we want.&lt;/p&gt;  &lt;pre style="font-family: consolas,; font-size: small" class="csharp" courier="courier" new?,="New?," courier,="courier," monospace;="monospace;" background-color:="background-color:" #ffffff;?="#ffffff;?"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;static&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;class&lt;/span&gt; ExpressionExtensions&lt;br /&gt;&lt;span style="color: #008000"&gt;{&lt;/span&gt;  &lt;br /&gt;   &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;static&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;string&lt;/span&gt; GetPropertyNameString&lt;span style="color: #008000"&gt;&amp;lt;&lt;/span&gt;TOwner, TProperty&lt;span style="color: #008000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0600ff; font-weight: bold"&gt;this&lt;/span&gt; Expression&lt;span style="color: #008000"&gt;&amp;lt;&lt;/span&gt;Func&lt;span style="color: #008000"&gt;&amp;lt;&lt;/span&gt;TOwner, TProperty&lt;span style="color: #008000"&gt;&amp;gt;&amp;gt;&lt;/span&gt; propertyGetter&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #008000"&gt;{&lt;/span&gt;&lt;br /&gt;      var expression &lt;span style="color: #008000"&gt;=&lt;/span&gt; &lt;br /&gt;        propertyGetter&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Body&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;as&lt;/span&gt; MemberExpression &lt;br /&gt;             &lt;span style="color: #008000"&gt;??&lt;/span&gt; &lt;span style="color: #008000"&gt;(&lt;/span&gt;MemberExpression&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;(&lt;/span&gt;UnaryExpression&lt;span style="color: #008000"&gt;)&lt;/span&gt; propertyGetter&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Body&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Operand&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0600ff; font-weight: bold"&gt;return&lt;/span&gt; expression&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Member&lt;/span&gt;&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Name&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #008000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then we can implement the method possibly using a type that inherits ViewModelBase&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas,; font-size: small" class="csharp" courier="courier" new?,="New?," courier,="courier," monospace;="monospace;" background-color:="background-color:" #ffffff;?="#ffffff;?"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;class&lt;/span&gt; MerblaViewModeBase&lt;span style="color: #008000"&gt;&amp;lt;&lt;/span&gt;TViewModel&lt;span style="color: #008000"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #008000"&gt;:&lt;/span&gt; ViewModelBase&lt;br /&gt;&lt;span style="color: #008000"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;void&lt;/span&gt; RaisePropertyChanged&lt;span style="color: #008000"&gt;(&lt;/span&gt;Expression&lt;span style="color: #008000"&gt;&amp;lt;&lt;/span&gt;Func&lt;span style="color: #008000"&gt;&amp;lt;&lt;/span&gt;TViewModel, &lt;span style="color: #6666cc; font-weight: bold"&gt;object&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;gt;&amp;gt;&lt;/span&gt; propertyGetter&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;{&lt;/span&gt;&lt;br /&gt;            RaisePropertyChanged&lt;span style="color: #008000"&gt;(&lt;/span&gt;propertyGetter&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;GetPropertyNameString&lt;/span&gt;&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Finally, we can utilise this in a View Model like so…&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas,; font-size: small" class="csharp" courier="courier" new?,="New?," courier,="courier," monospace;="monospace;" background-color:="background-color:" #ffffff;?="#ffffff;?"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;class&lt;/span&gt; TestViewModel &lt;span style="color: #008000"&gt;:&lt;/span&gt;MerblaViewModeBase&lt;span style="color: #008000"&gt;&amp;lt;&lt;/span&gt;TestViewModel&lt;span style="color: #008000"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #008000"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0600ff; font-weight: bold"&gt;private&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;string&lt;/span&gt; _testProperty&lt;span style="color: #008000"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;string&lt;/span&gt; TestProperty&lt;br /&gt;        &lt;span style="color: #008000"&gt;{&lt;/span&gt;&lt;br /&gt;            get &lt;span style="color: #008000"&gt;{&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;return&lt;/span&gt; _testProperty&lt;span style="color: #008000"&gt;;&lt;/span&gt; &lt;span style="color: #008000"&gt;}&lt;/span&gt;&lt;br /&gt;            set&lt;br /&gt;            &lt;span style="color: #008000"&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #0600ff; font-weight: bold"&gt;if&lt;/span&gt;&lt;span style="color: #008000"&gt;(&lt;/span&gt;_testProperty&lt;span style="color: #008000"&gt;!=&lt;/span&gt;value&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #008000"&gt;{&lt;/span&gt;&lt;br /&gt;                    _testProperty &lt;span style="color: #008000"&gt;=&lt;/span&gt; value&lt;span style="color: #008000"&gt;;&lt;/span&gt;&lt;br /&gt;                    RaisePropertyChanged&lt;span style="color: #008000"&gt;(&lt;/span&gt;vm&lt;span style="color: #008000"&gt;=&amp;gt;&lt;/span&gt; vm&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;TestProperty&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #008000"&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #008000"&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #008000"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The code can be found @ &lt;a href="http://code.google.com/p/merbla/"&gt;http://code.google.com/p/merbla/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Get Amongst It!!!!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-4120358148446018540?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/4120358148446018540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=4120358148446018540' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4120358148446018540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4120358148446018540'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/11/mvvm-light-strongly-typed.html' title='MVVM Light &amp;amp; Strongly Typed RaisePropertyChanged'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-8912431007554176562</id><published>2010-10-12T05:04:00.001-07:00</published><updated>2010-10-12T05:04:26.403-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DVCS'/><category scheme='http://www.blogger.com/atom/ns#' term='Team City'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='Continuous Integration'/><title type='text'>CI with TeamCity using Mercurial as a local Repo</title><content type='html'>&lt;p&gt;It’s been some time since my last post so I thought I better “&lt;a href="http://merbla.blogspot.com"&gt;Get Amongst It&lt;/a&gt;”.&amp;#160; I recently had the need to set up a development environment and went for &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt; as the DVCS.&amp;#160; As a build server I have always been fond of &lt;a href="http://www.jetbrains.com/teamcity/"&gt;TeamCity&lt;/a&gt;, the fact its free for a small team of developers is always a plus.&lt;/p&gt;  &lt;p&gt;I have been using DVCS such as Git and Mercurial for some time now, however always hosted them on a provider such as &lt;a href="http://code.google.com/"&gt;Google Code&lt;/a&gt;, &lt;a href="http://bitbucket.org/"&gt;BitBucket&lt;/a&gt; or &lt;a href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt;.&amp;#160; In my recent situation, I needed to have the repository internal and not public facing.&amp;#160; Here is one solution.&lt;/p&gt;  &lt;p&gt;First of all, you will the following&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;TeamCity - &lt;a href="http://www.jetbrains.com/teamcity/index.html"&gt;http://www.jetbrains.com/teamcity/index.html&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Mercurial - &lt;a title="http://mercurial.selenic.com/downloads" href="http://mercurial.selenic.com/downloads"&gt;http://mercurial.selenic.com/downloads&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Install Mercurial (some people have issues with naming so for the purposes of this post I installed to C:\Mercurial.&amp;#160; Then Install Team City.&amp;#160; I then created a folder where my source repo was going to be located.&amp;#160; In my case C:\Source.&amp;#160; Then from a command prompt (you can use &lt;a href="http://tortoisehg.bitbucket.org/"&gt;TortoiseHg&lt;/a&gt; if you are GUI inclined).&lt;/p&gt;  &lt;p&gt;Initialise the repository on the server (make this a UNC share so other machines can view it)&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;C:\Source&amp;gt;hg init &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;You can now enable a web server to view the source &lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;C:\Source&amp;gt;hg serve&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_CsLu6MHVy_A/TLROlBCDypI/AAAAAAAAAPE/U7VLUq-xEZk/s1600-h/image%5B31%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; width: 586px; display: inline; height: 362px; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_CsLu6MHVy_A/TLROlnaQAqI/AAAAAAAAAPI/BboVa8cUPN0/image_thumb%5B27%5D.png?imgmax=800" width="598" height="374" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now, from your development machine, clone the repo, create your source code and commit as normal&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;C:\Source&amp;gt;hg clone &lt;a href="file://\\MERLBA-CI\Source\"&gt;\\MERLBA-CI\Source\&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;C:\Source&amp;gt;hg add &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;C:\Source&amp;gt;hg commit -u &amp;quot;merbla&amp;quot; -m &amp;quot;Initial Commit&amp;quot; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;C:\Source&amp;gt;hg push&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Now you have a working repo, its time to set up TeamCity, first create a project.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/TLROmnVWKQI/AAAAAAAAAPM/rpqiWj1yzvc/s1600-h/CreateProject%5B15%5D.png"&gt;&lt;img style="border-right-width: 0px; width: 524px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 211px; border-left-width: 0px" title="CreateProject" border="0" alt="CreateProject" src="http://lh4.ggpht.com/_CsLu6MHVy_A/TLROnVqGTXI/AAAAAAAAAPQ/CYvJu8n-bCQ/CreateProject_thumb%5B13%5D.png?imgmax=800" width="536" height="223" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then create a VCS Root using the command path to where you installed Mercurial and direct TeamCity to the UNC share that you set up for your repo.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/TLROoDg8tcI/AAAAAAAAAPU/N46XJsUU4L8/s1600-h/VCS%20Root%5B5%5D.png"&gt;&lt;img style="border-right-width: 0px; width: 529px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 372px; border-left-width: 0px" title="VCS Root" border="0" alt="VCS Root" src="http://lh4.ggpht.com/_CsLu6MHVy_A/TLROpN67YhI/AAAAAAAAAPY/4SRVVr7PSJY/VCS%20Root_thumb%5B3%5D.png?imgmax=800" width="541" height="384" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then create a Build Configuration &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/TLROp0eD_DI/AAAAAAAAAPc/GTcdli9DAeo/s1600-h/MyBuildConfig%5B5%5D.png"&gt;&lt;img style="border-right-width: 0px; width: 526px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 334px; border-left-width: 0px" title="MyBuildConfig" border="0" alt="MyBuildConfig" src="http://lh3.ggpht.com/_CsLu6MHVy_A/TLROqtP4oDI/AAAAAAAAAPg/egeCD2qxPas/MyBuildConfig_thumb%5B3%5D.png?imgmax=800" width="538" height="346" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Choose the version control created (eg.VCS Root) &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/TLROsGb8NKI/AAAAAAAAAPk/4hS4f5-2S2M/s1600-h/VersionControlSettings%5B7%5D.png"&gt;&lt;img style="border-right-width: 0px; width: 546px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 418px; border-left-width: 0px" title="VersionControlSettings" border="0" alt="VersionControlSettings" src="http://lh4.ggpht.com/_CsLu6MHVy_A/TLROtc9ajNI/AAAAAAAAAPo/QwDLy-DnFU0/VersionControlSettings_thumb%5B5%5D.png?imgmax=800" width="558" height="430" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Choose the build Runner. Depending on you development needs, choose the appropriate build runner.&amp;#160; In this case, this is a simple .Net 4 console app.&amp;#160; As such I have no build file, so I will use the sln option.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_CsLu6MHVy_A/TLROusEJcYI/AAAAAAAAAPs/jNaxeg8SaZc/s1600-h/BuildRunner%5B8%5D.png"&gt;&lt;img style="border-right-width: 0px; width: 593px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 354px; border-left-width: 0px" title="BuildRunner" border="0" alt="BuildRunner" src="http://lh6.ggpht.com/_CsLu6MHVy_A/TLROwHhxENI/AAAAAAAAAPw/fhoWG8K-ies/BuildRunner_thumb%5B6%5D.png?imgmax=800" width="605" height="366" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Configure the remaining setting of the TeamCity project such as triggers and dependencies.&amp;#160; Then when the project is triggered (manual or otherwise) your build will kick off using Mercurial as the repo.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/TLROxTzbQmI/AAAAAAAAAP0/UKNb7EIZD30/s1600-h/BuildOutput%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; width: 625px; display: inline; height: 148px; border-top: 0px; border-right: 0px" title="BuildOutput" border="0" alt="BuildOutput" src="http://lh5.ggpht.com/_CsLu6MHVy_A/TLROyF0cG2I/AAAAAAAAAP4/0QGA43nkZo0/BuildOutput_thumb%5B2%5D.png?imgmax=800" width="637" height="160" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Hopefully for you its Kermit (Green)&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-8912431007554176562?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/8912431007554176562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=8912431007554176562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8912431007554176562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8912431007554176562'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/10/ci-with-teamcity-using-mercurial-as.html' title='CI with TeamCity using Mercurial as a local Repo'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_CsLu6MHVy_A/TLROlnaQAqI/AAAAAAAAAPI/BboVa8cUPN0/s72-c/image_thumb%5B27%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-1792186015480293940</id><published>2010-06-08T13:29:00.001-07:00</published><updated>2010-06-08T13:29:16.243-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sport'/><category scheme='http://www.blogger.com/atom/ns#' term='Bridge to Brisbane'/><title type='text'>Bridge to Brisbane 2010</title><content type='html'>&lt;p&gt;Its that time again for the old &lt;a href="http://www.bridgetobrisbane.com.au/"&gt;Bridge to Brisbane&lt;/a&gt; fun run.&amp;#160; I have done it a few times in the past few years and it will be interesting to test a theory.&lt;/p&gt;  &lt;p&gt;The last two years, I have been in much better shape however have had events (30th Birthday’s and Bucks) the night before.&amp;#160; This year, I am going to keep the eve of the run clear from big events however the preparation in the weeks leading up to the race will be less than ideal for running.&amp;#160; (Tasting many types of beer from UK, Belgium, Germany, Austria and the Czech Republic).&lt;/p&gt;  &lt;p&gt;So the question is will I perform better when I am less fit and have a good nights sleep, or fitter and have a big night out.&lt;/p&gt;  &lt;p&gt;Previous Results&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://merbla.blogspot.com/2009/09/b2b-2009.html"&gt;2008&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://merbla.blogspot.com/2009/07/b2b.html"&gt;2009&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Get Amongst It!!!!!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-1792186015480293940?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/1792186015480293940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=1792186015480293940' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/1792186015480293940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/1792186015480293940'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/06/bridge-to-brisbane-2010.html' title='Bridge to Brisbane 2010'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-7552499445670139519</id><published>2010-06-07T04:35:00.001-07:00</published><updated>2010-06-07T04:35:28.396-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IRiver P7'/><category scheme='http://www.blogger.com/atom/ns#' term='IRiver'/><category scheme='http://www.blogger.com/atom/ns#' term='EuroTrip 2010'/><title type='text'>Yeah, I know it’s not an IPad</title><content type='html'>&lt;p&gt;Well, the overseas trip is getting ever closer, and the organising continues.&amp;#160; In that vain we have been looking for a device that will stack up against the following requirements&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Small&lt;/li&gt;    &lt;li&gt;Plays video&lt;/li&gt;    &lt;li&gt;Plays audio&lt;/li&gt;    &lt;li&gt;Good battery life&lt;/li&gt;    &lt;li&gt;Can withstand being handled by a 2 1/2 yr old&lt;/li&gt;    &lt;li&gt;Good value for money&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I know the &lt;a href="http://www.apple.com/ipad/"&gt;IPad&lt;/a&gt; has just been released, and the &lt;a href="http://au.playstation.com/psp/"&gt;PSP&lt;/a&gt; is a good portable gaming device however the net result was the &lt;a href="http://www.iriver.com.au/iriver/index.cfm?pageID=2&amp;amp;sID=1&amp;amp;prodID=30&amp;amp;"&gt;IRiver P7&lt;/a&gt;.&amp;#160; At a price of $247 (snagged some $ off for a $220 price tag) and with the simplicity of adding files via a simple USB connection (sorry no ITunes here), at early stages it seems a reasonable purchase.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/TAzZeyRllPI/AAAAAAAAAOA/sb0MhBbwSaw/s1600-h/p7%5B5%5D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; width: 224px; display: block; float: none; height: 224px; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="p7" border="0" alt="p7" src="http://lh5.ggpht.com/_CsLu6MHVy_A/TAzZfxjFriI/AAAAAAAAAOE/v1ehQS5ej-g/p7_thumb%5B3%5D.gif?imgmax=800" width="236" height="236" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It has a nice touch screen, which is responsive (as contrary to some reviews).&amp;#160; It provides support for some decent codec's for video and audio whilst also providing a FM Radio tuner.&lt;/p&gt;  &lt;p&gt;Time will tell how it stacks up to the heat of Dubai, the rush of London and the Metro in Paris….&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-7552499445670139519?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/7552499445670139519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=7552499445670139519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/7552499445670139519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/7552499445670139519'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/06/yeah-i-know-its-not-ipad.html' title='Yeah, I know it’s not an IPad'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_CsLu6MHVy_A/TAzZfxjFriI/AAAAAAAAAOE/v1ehQS5ej-g/s72-c/p7_thumb%5B3%5D.gif?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-2333007667438705333</id><published>2010-06-02T04:04:00.001-07:00</published><updated>2010-06-02T04:05:10.795-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Photography'/><category scheme='http://www.blogger.com/atom/ns#' term='Panasonic'/><title type='text'>Panasonic DMC-TZ10 Review</title><content type='html'>&lt;p&gt;With the overseas trip fast approaching, it was time to get a new point and shoot travel camera.&amp;#160; After a bit of research it was a battle between &lt;a href="http://www.sony.com.au/product/dsc-hx5v"&gt;Sony DSCHX5V&lt;/a&gt; and &lt;a href="http://panasonic.com.au/products/details.cfm?objectID=5495"&gt;Panasonic DMZ-TZ10&lt;/a&gt;.&amp;#160; I have previously had a Panasonic camera that was fantastic for my last overseas trip so I went with the gut instinct.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://panasonic.com.au/products/details.cfm?objectID=5495"&gt;DMZ-TZ10&lt;/a&gt; is at the high end of the point and shoot range.&amp;#160; It has a range of features (much of which the sony also provides),&amp;#160; The main feature I was interested in was the manual mode, so that I can learn some more about photography with out the price tag of an SLR.&amp;#160; Other neat items are GPS, HD Video (1280 x 720 vs the Sony full HD - 1920 x 1080).&amp;#160; Below is a quick picture taken using some of the macro settings.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; width: 567px; display: block; float: none; height: 408px; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="P1000004" border="0" alt="P1000004" src="http://lh3.ggpht.com/_CsLu6MHVy_A/TAY6qr5OWRI/AAAAAAAAANw/IY9A3x7vwB4/P1000004%5B13%5D.jpg?imgmax=800" width="640" height="360" /&gt; &lt;/p&gt;  &lt;p&gt;All in all, it seems a nice pocket size companion to ensure the holiday has some great memories.&amp;#160;&amp;#160; More to come when I go overseas….&lt;/p&gt;  &lt;p&gt;Get Amongst It!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-2333007667438705333?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/2333007667438705333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=2333007667438705333' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2333007667438705333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2333007667438705333'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/06/panasonic-dmc-tz10-review.html' title='Panasonic DMC-TZ10 Review'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_CsLu6MHVy_A/TAY6qr5OWRI/AAAAAAAAANw/IY9A3x7vwB4/s72-c/P1000004%5B13%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-6565970922343464593</id><published>2010-05-03T04:39:00.001-07:00</published><updated>2010-05-03T04:39:18.216-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Workflow'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Windows Workflow in C# 4.0 &amp;&amp; VB??</title><content type='html'>&lt;p&gt;I have been playing with .Net 4.0 recently, in particular Windows Workflow.&amp;#160; It has taken some leaps towards Model Driven Architecture and the type of development that a business user can understand.&amp;#160; There is one strange thing that I have found.&amp;#160; Below is a screen shot of a new C# 4.0 Workflow console application, and with is a simple if statement in a workflow.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/S9613IfG_3I/AAAAAAAAANI/dssfCq0xmWI/s1600-h/Workflow%5B5%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; width: 639px; display: inline; height: 306px; border-top: 0px; border-right: 0px" title="Workflow" border="0" alt="Workflow" src="http://lh6.ggpht.com/_CsLu6MHVy_A/S96130d8ZAI/AAAAAAAAANM/8uqQbruRDwU/Workflow_thumb%5B3%5D.png?imgmax=800" width="651" height="312" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Wait a second.. I thought it was a C# project.&amp;#160; I know VB has been a part of IDE such as Reporting Services and previous versions of Windows Workflow, but I thought the Visual Studio team could have easily used the text editor for a normal C# project here.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/S9614WYFktI/AAAAAAAAANQ/ibdngPTgsgc/s1600-h/Workflow2%5B5%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; width: 625px; display: inline; height: 297px; border-top: 0px; border-right: 0px" title="Workflow2" border="0" alt="Workflow2" src="http://lh4.ggpht.com/_CsLu6MHVy_A/S9615SQM05I/AAAAAAAAANU/tFEEx38zHk8/Workflow2_thumb%5B3%5D.png?imgmax=800" width="637" height="309" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Its not the end of the world I know, however these little touches are what makes a product shine that little more.&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-6565970922343464593?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/6565970922343464593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=6565970922343464593' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/6565970922343464593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/6565970922343464593'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/05/windows-workflow-in-c-40-vb.html' title='Windows Workflow in C# 4.0 &amp;amp;&amp;amp; VB??'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_CsLu6MHVy_A/S96130d8ZAI/AAAAAAAAANM/8uqQbruRDwU/s72-c/Workflow_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-3581014447707063606</id><published>2010-04-27T23:17:00.001-07:00</published><updated>2010-04-27T23:19:59.337-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Unity'/><category scheme='http://www.blogger.com/atom/ns#' term='Composite Application Block'/><category scheme='http://www.blogger.com/atom/ns#' term='IoC'/><category scheme='http://www.blogger.com/atom/ns#' term='Caliburn'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>WPF Frameworks - Using Caliburn to wrap CAB (Prism)</title><content type='html'>&lt;p&gt;Recently I created a &lt;a href="http://merbla.blogspot.com/2010/03/wpf-frameworks-cabprism-with-mvvm-and.html"&gt;post&lt;/a&gt; on using the MVVM presentation pattern with &lt;a href="http://unity.codeplex.com/"&gt;Unity&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/dd458809.aspx"&gt;CAB&lt;/a&gt; (aka Prism).&amp;#160; At the time I was researching other similar frameworks in this space.&amp;#160; One in particular that caught my eye was the &lt;a href="http://caliburn.codeplex.com/"&gt;Caliburn&lt;/a&gt; framework.&amp;#160; After looking through the documentation and reading some blogs, I was interested to see that the framework had a hook for Prism.&amp;#160; So I thought I would put it to the test.&lt;/p&gt;  &lt;p&gt;Using the module from my last post, I created a similar WPF shell structure.&amp;#160; Using the default conventions of Caliburn initially to get things going.&amp;#160; The app class in nearly a one to one with the previous example.&amp;#160; The XAML for the shell (hosting the CAB regions) is identical.&lt;/p&gt;  &lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; partial &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; App  &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; OnStartup(StartupEventArgs e)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        &lt;span style="color: #0000ff"&gt;base&lt;/span&gt;.OnStartup(e);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        var bootstrapper = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BootStrapper(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        bootstrapper.Run();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;In the bootstrapper, the code is very similar to that in the samples of Caliburn with the exception of some changes to use Unity as the IOC container and settings for my app. &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; BootStrapper&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Application _application;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; UnityAdapter _unityAdapter;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; BootStrapper(Application application)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        _application = application;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        _unityAdapter = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; UnityAdapter(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; UnityContainer());&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Run()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        RegisterDependencies();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;                  &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        CaliburnFramework&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;           .ConfigureCore(_unityAdapter)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;           &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;           .AfterStart(() =&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;           {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;               var binder = (DefaultBinder)ServiceLocator.Current.GetInstance&amp;lt;IBinder&amp;gt;();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;               binder.EnableMessageConventions();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;               binder.EnableBindingConventions();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;           })&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;           .WithPresentationFramework()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;           .WithCompositeApplicationLibrary(CreateShell )&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;           .WithModuleCatalog(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ModuleCatalog().AddModule(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(FootballModule)))&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;           .Start();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; RegisterDependencies()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        &lt;span style="color: #008000"&gt;//Register dependencies with Unity&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; DependencyObject CreateShell()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        ServiceLocator.Current.GetInstance&amp;lt;IWindowManager&amp;gt;()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            .Show(ServiceLocator.Current.GetInstance&amp;lt;ShellPresenter&amp;gt;(), &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;, ExecuteShutdownModel);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _application.MainWindow;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; ExecuteShutdownModel(ISubordinate subordinate, Action completed)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        completed();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;From there the application runs the modules as per normal, with a Caliburn wrapper.&amp;#160; As per normal, code is @ &lt;a href="http://merblasamples.codeplex.com/"&gt;MerblaSamples&lt;/a&gt; on Codeplex.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Get Amongst It!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-3581014447707063606?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/3581014447707063606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=3581014447707063606' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3581014447707063606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3581014447707063606'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/04/wpf-frameworks-using-caliburn-to-wrap.html' title='WPF Frameworks - Using Caliburn to wrap CAB (Prism)'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-7538708466792971592</id><published>2010-04-19T04:24:00.001-07:00</published><updated>2010-04-19T04:26:21.575-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#4'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Application Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net4'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Design by Contract and C# Optional Parameters</title><content type='html'>With the release of VS2010 also came the update to C# 4.0.&amp;#160; Along with this came a new feature in C# called Optional Parameters.&amp;#160; This allows for a developer to make a parameter optional rather than providing an overloaded method.&amp;#160; Below is an example…   &lt;br /&gt;  &lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Service : IService&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; DoSomething(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; thingA)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    { &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; DoSomething(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; thingA, [Optional] &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; thingB)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; DoSomething(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; thingA, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; thingB, &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; isSomeThing = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;interface&lt;/span&gt; IService&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; DoSomething(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; thingA);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; DoSomething(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; thingA, [Optional] &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; thingB);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; DoSomething(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; thingA, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; thingB, &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; isSomeThing = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;The example gives two usages, one using and attribute and another with a default parameter.&amp;#160; This then allows the following usage. &lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/S8w9dXRp5CI/AAAAAAAAANA/PeZmhltDdXA/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; width: 637px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 127px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_CsLu6MHVy_A/S8w9eAdEwWI/AAAAAAAAANE/v-98n2E6uH8/image_thumb%5B1%5D.png?imgmax=800" width="649" height="139" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This does concern me slightly in that I think it will detract from the concept of self documenting code.&amp;#160; Given the example above, I would not necessarily know which method is being called simply by glancing at a code base.&amp;#160;&amp;#160; In addition, the ability to create meaningful test such as those promoted by BDD and TDD practices could get muddied by this approach.&amp;#160; Lastly, it might be the large amount of SOA/Service interface type development I have done however I also believe detracts from the&amp;#160; design by contract concept.&amp;#160; In particular, the idea that as a developer I know the behaviour of a particular interface starts to look like code/design smell. However given the rise and rise of dynamic languages, this style of development could be on the increase.&amp;#160; I might just have to suck it and see. &lt;br /&gt;&lt;br /&gt;&lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-7538708466792971592?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/7538708466792971592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=7538708466792971592' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/7538708466792971592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/7538708466792971592'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/04/design-by-contract-and-c-optional.html' title='Design by Contract and C# Optional Parameters'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_CsLu6MHVy_A/S8w9eAdEwWI/AAAAAAAAANE/v-98n2E6uH8/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-3528539883766319329</id><published>2010-04-14T04:51:00.001-07:00</published><updated>2010-04-14T04:58:37.247-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PLINQ'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2010'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net4'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Go Get PLINQ’ed</title><content type='html'>&lt;p&gt;With Visual Studio 2010 going RTM this week, I thought it might be a good chance to to bang out a post re: some of the features I am keen to make use of within .Net 4.0.&lt;/p&gt;  One of the areas developers do seem to focus a lot of attention is multi threaded applications.&amp;#160; We have had the hardware for some time however for whatever reason, the uptake has been slower than I expected.&amp;#160; One of the features that have been released as a part of .Net 4.0 is Parallel API (&lt;a href="http://msdn.microsoft.com/en-us/library/dd460688(VS.100).aspx"&gt;PLINQ&lt;/a&gt;).&amp;#160; This has been in development for some time as a research project and has now made its way to mainstream .Net.  &lt;p&gt;Given the following, a simple Person class &lt;/p&gt; &lt;pre&gt;&lt;br /&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Person&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; FirstName { &lt;span style="color: #0000ff"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Surname { &lt;span style="color: #0000ff"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; DateTime BirthDate { &lt;span style="color: #0000ff"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;set&lt;/span&gt;; }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}&lt;/pre&gt;&lt;br /&gt;Then a method that take an enumerable collection and filters according such as...&lt;br /&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; IQueryable&amp;lt;Person&amp;gt; FilterPeople(IList&amp;lt;Person&amp;gt; people)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{ &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    var filteredPeople = people.Where(x =&amp;gt; x.BirthDate &amp;gt; DateTime.Now);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; filteredPeople.AsQueryable();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}&lt;/pre&gt;&lt;/pre&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/dd460688(VS.100).aspx"&gt;PLINQ&lt;/a&gt; API lets you make use of a multithreaded environment with a simple extension method.&lt;br /&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; IQueryable&amp;lt;Person&amp;gt; FilterPeopleAsParallel(IList&amp;lt;Person&amp;gt; people)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{ &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    var filteredPeople = people.AsParallel&amp;lt;Person&amp;gt;().Where(x =&amp;gt; x.BirthDate &amp;gt; DateTime.Now);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; filteredPeople.AsQueryable();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;} &lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;Pretty straight forward….&amp;#160; Now for a bit of proof on my aging laptop.&amp;#160; Using MSTest, I have the following tests.&amp;#160; I ensured the test data is setup prior to the tests so that they are not affected.&lt;br /&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;[TestMethod()]&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; FilterPeople()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #008000"&gt;//Arrange&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    PersonFilter target = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PersonFilter();   &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #008000"&gt;//Act&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    IQueryable&amp;lt;Person&amp;gt; actual = target.FilterPeople(_people);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #008000"&gt;//Assert&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    Assert.AreEqual(500000, actual.Count());&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;[TestMethod()]&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; FilterPeopleAsParallel()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #008000"&gt;//Arrange&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    PersonFilter target = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PersonFilter();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #008000"&gt;//Act&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    IQueryable&amp;lt;Person&amp;gt; actual = target.FilterPeopleAsParallel(_people);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #008000"&gt;//Assert&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    Assert.AreEqual(500000, actual.Count());&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;Below are the results,&lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/S8WsVAHp20I/AAAAAAAAAM4/2hlS4R6qYqQ/s1600-h/image%5B10%5D.png"&gt;&lt;img style="border-right-width: 0px; width: 615px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 74px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_CsLu6MHVy_A/S8WsVyTabdI/AAAAAAAAAM8/_PgawtvAu5s/image_thumb%5B8%5D.png?imgmax=800" width="627" height="86" /&gt;&lt;/a&gt;&amp;#160;&lt;br /&gt;&lt;br /&gt;So next time someone asks you about how you make use of multi threading apps, tell them to go get PLINQ’ed.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Get Amongst It!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-3528539883766319329?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/3528539883766319329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=3528539883766319329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3528539883766319329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3528539883766319329'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/04/go-get-plinqed.html' title='Go Get PLINQ’ed'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_CsLu6MHVy_A/S8WsVyTabdI/AAAAAAAAAM8/_PgawtvAu5s/s72-c/image_thumb%5B8%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-2862646994271473848</id><published>2010-03-31T04:20:00.001-07:00</published><updated>2010-03-31T04:20:24.000-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Sport'/><category scheme='http://www.blogger.com/atom/ns#' term='NBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Success'/><category scheme='http://www.blogger.com/atom/ns#' term='Application Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='AFL'/><title type='text'>Software Development and Professional Sport</title><content type='html'>&lt;p&gt;In the past I was a reasonably successful semi-professional sports person.&amp;#160; In that time I was fortunate enough to be coached and mentored by a myriad of professional players and coaches.&amp;#160; I played semi-pro&amp;#160; (not &lt;a href="http://www.imdb.com/name/nm0002071/"&gt;Will Ferrel&lt;/a&gt; &lt;a href="http://www.imdb.com/title/tt0839980/"&gt;Semi-Pro&lt;/a&gt;) for over 10 years, a similar timeframe to what I have spent professionally developing software.&amp;#160; Although that is a significant period of time, it has taken me that long to realise the similarities between software development and professional sport.&lt;/p&gt;  &lt;p&gt;Let’s think about some successful coaches, sports people and teams.&amp;#160; Maybe &lt;a href="http://en.wikipedia.org/wiki/Leigh_Matthews"&gt;Leigh Matthews&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Michael_Voss"&gt;Michael Voss&lt;/a&gt; and the &lt;a href="http://www.lions.com.au/"&gt;Brisbane Lions&lt;/a&gt;,or perhaps &lt;a href="http://en.wikipedia.org/wiki/Phil_Jackson"&gt;Phil Jackson&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Michael_Jordan"&gt;Michael Jordan&lt;/a&gt; and the &lt;a href="http://www.nba.com/bulls/"&gt;Chicago Bulls&lt;/a&gt; or lastly for those rugby league die hards, &lt;a href="http://en.wikipedia.org/wiki/Wayne_Bennett_(rugby_league)"&gt;Wayne Bennet&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Darren_Lockyer"&gt;Darryn Lockyer&lt;/a&gt; and the &lt;a href="http://www.broncos.com.au/"&gt;Brisbane Broncos&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In all these examples, there was a fantastic coach (perhaps Zen master).&amp;#160; There was a star, a person that could take things into their own hands when things were not so good and right the ship.&amp;#160; Finally, there was a great supporting cast that did the hard work and shone in their own right. &lt;/p&gt;  &lt;p&gt;In my experience software development can be quite similar.&amp;#160; There might be a project manager or an architect who might envisage where things need to go.&amp;#160; A lead dev who know his or her stuff inside out and finally a team of devs, testers, maybe analyst or many other combinations that gets the grunt work done.&amp;#160; &lt;/p&gt;  &lt;p&gt;Software development also suffers from similar issues seen in professional sport, maybe an architect who holds the designs in their heads where only they can access them, similar to a star who just wants to be the focus of attention.&amp;#160; Perhaps a team of devs that can’t deliver well due to lack of synergy or guidance on how work should be done.&amp;#160; Not too far removed from a set play that cannot be executed.&lt;/p&gt;  &lt;p&gt;Maybe you have experienced a single point of failure when one resource holds too many dependencies, much like a team that relies too heavily on the scoring out put of a star.&amp;#160;&amp;#160; Maybe you have experienced a situation where there was no rudder to&amp;#160; the ship and it took a new PM or lead dev to right the course, not too far removed of the appointment of a new coach.&lt;/p&gt;  &lt;p&gt;All in all, when I have been in a successful environment, it resembled when I was in a successful team. (aka &lt;a href="http://www.sportingpulse.com/assoc_page.cgi?client=1-4711-0-0-0&amp;amp;sID=85807&amp;amp;news_task=DETAIL&amp;amp;articleID=7335580&amp;amp;sectionID=85807"&gt;John Blair&lt;/a&gt;, David Lillico and the Morningside Panthers)&lt;/p&gt;  &lt;p&gt;Just a thought…I like my sport and I like my code.&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-2862646994271473848?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/2862646994271473848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=2862646994271473848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2862646994271473848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2862646994271473848'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/03/software-development-and-professional.html' title='Software Development and Professional Sport'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-7203952414628408502</id><published>2010-03-29T03:04:00.001-07:00</published><updated>2010-03-29T03:08:43.687-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Travel'/><title type='text'>My favourite places to visit – Entrevaux (France)</title><content type='html'>&lt;p&gt;Recently I have been getting organised for our trip over to Europe/UK in June.&amp;#160; Its always a tough but fun task working through the areas you think might be good to visit and the itinerary that might support it.&amp;#160; It got me to thinking of my travels and some of the places I enjoyed.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Entrevaux"&gt;Entrevaux&lt;/a&gt; is a little gem of a &lt;a href="http://www.provencebeyond.com/villages/entrevaux-provence-france.html"&gt;place&lt;/a&gt;, it shares lots of traits I find intriguing in rural Europe.&amp;#160; As soon as you walk over the draw bridge to enter the old town you are greeted by laneways and little pockets to explore.&amp;#160; It also has an impressive citadel that towers over the town below, the walk up and exploring the ruins is a great way to spend a couple of hours.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/S7B7Gty4s1I/AAAAAAAAAMo/P4yNVyxYYU8/s1600-h/Entrevaux_Alpes_de_Haute_Provence_France%5B5%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; width: 554px; display: inline; height: 448px; border-top: 0px; border-right: 0px" title="Entrevaux_Alpes_de_Haute_Provence_France" border="0" alt="Entrevaux_Alpes_de_Haute_Provence_France" src="http://lh3.ggpht.com/_CsLu6MHVy_A/S7B7HfRVyoI/AAAAAAAAAMs/3cLsOgka6Gs/Entrevaux_Alpes_de_Haute_Provence_France_thumb%5B3%5D.jpg?imgmax=800" width="566" height="458" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Taken from &lt;a href="http://upload.wikimedia.org/wikipedia/commons/4/4d/Entrevaux_Alpes_de_Haute_Provence_France.jpg"&gt;http://upload.wikimedia.org/wikipedia/commons/4/4d/Entrevaux_Alpes_de_Haute_Provence_France.jpg&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/S7B7Ieb8l2I/AAAAAAAAAMw/93sQsJHP6vI/s1600-h/IMGA0188%5B16%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; width: 557px; display: inline; height: 437px; border-top: 0px; border-right: 0px" title="IMGA0188" border="0" alt="IMGA0188" src="http://lh3.ggpht.com/_CsLu6MHVy_A/S7B7JVN1c0I/AAAAAAAAAM0/yhL997iJG3A/IMGA0188_thumb%5B14%5D.jpg?imgmax=800" width="569" height="449" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;View looking back to the town.&lt;/p&gt;  &lt;p&gt;I won’t get back to the French Riviera this trip, but I know I certainly will at some stage.&amp;#160; I can truly recommend a visit.&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-7203952414628408502?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/7203952414628408502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=7203952414628408502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/7203952414628408502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/7203952414628408502'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/03/my-favourite-places-to-visit-entrevaux.html' title='My favourite places to visit – Entrevaux (France)'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_CsLu6MHVy_A/S7B7HfRVyoI/AAAAAAAAAMs/3cLsOgka6Gs/s72-c/Entrevaux_Alpes_de_Haute_Provence_France_thumb%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-7362945704413488790</id><published>2010-03-28T03:35:00.001-07:00</published><updated>2010-03-28T03:53:48.685-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BDD'/><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Rhino Mocks'/><category scheme='http://www.blogger.com/atom/ns#' term='NMock2'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><category scheme='http://www.blogger.com/atom/ns#' term='Moq'/><title type='text'>Mocking Frameworks.. Quick Peek @ Moq, Rhino Mocks, NMock2</title><content type='html'>&lt;p&gt;Mocking is increasingly becoming a standard tool in more and more developers toolkits.&amp;#160; I have done my share of mocking and covered a variety of frameworks.&amp;#160; Rhino Mocks has been the framework I have used most extensively however recently I revisited other frameworks I have not used for a while.&amp;#160; That got me thinking, for those developers who have not had been exposed to mocking, choosing a mocking framework could be quite tough.&amp;#160; There are a multitude of options out there, so I thought I would give a one liner on the ones I knew the most.&lt;/p&gt;  &lt;p&gt;Here goes…..&lt;/p&gt;  &lt;p&gt;Below is the class under test, quite simple.&amp;#160; The method in question is Delete, and I want to ensure the logger logs correctly.&lt;/p&gt;  &lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Manager&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; ILogger _logger;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; IRepository _repository;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Manager(IRepository repository, ILogger logger)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _repository = repository;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _logger = logger;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; Delete(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; thingToDelete)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; successfull = _repository.Delete(thingToDelete);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (successfull)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;                _logger.Log(&amp;quot;&lt;span style="color: #8b0000"&gt;The thing was deleted&lt;/span&gt;&amp;quot;);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; successfull;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; Save(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; thingToSave)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; successfull = _repository.Save(thingToSave);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (successfull)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;                _logger.Log(&amp;quot;&lt;span style="color: #8b0000"&gt;The thing was saved&lt;/span&gt;&amp;quot;);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; successfull;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;    }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Using a simple implementation of Context Specification, below is the code for the frameworks &lt;a href="http://code.google.com/p/moq/"&gt;Moq&lt;/a&gt;, &lt;a href="http://www.ayende.com/projects/rhino-mocks.aspx"&gt;Rhino Mocks&lt;/a&gt; and &lt;a href="http://www.nmock.org/"&gt;NMock2&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;em&gt;Moq&lt;/em&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; When_a_thing_is_deleted_using_the_manager : ContextSpecification&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Mock&amp;lt;ILogger&amp;gt; _loggerMock;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Manager _manager;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Mock&amp;lt;IRepository&amp;gt; _repositoryMock;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        [Fact]&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; it_should_log_with_logger()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _loggerMock.Verify(x =&amp;gt; x.Log(&amp;quot;&lt;span style="color: #8b0000"&gt;The thing was deleted&lt;/span&gt;&amp;quot;), Times.Exactly(1));&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Because()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _manager.Delete(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; EstablishContext()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _repositoryMock = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Mock&amp;lt;IRepository&amp;gt;();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _repositoryMock.Setup(x =&amp;gt; x.Delete(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty)).Returns(&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _loggerMock = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Mock&amp;lt;ILogger&amp;gt;();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _manager = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Manager(_repositoryMock.Object, _loggerMock.Object);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;    }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Rhino Mocks&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; When_a_thing_is_deleted_using_the_manager : ContextSpecification&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; ILogger _loggerMock;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Manager _manager;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; IRepository _repositoryMock;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        [Fact]&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; it_should_log_with_logger()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _loggerMock.Expect(x =&amp;gt; x.Log(&amp;quot;&lt;span style="color: #8b0000"&gt;The thing was deleted&lt;/span&gt;&amp;quot;));&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Because()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _manager.Delete(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; EstablishContext()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _loggerMock = MockRepository.GenerateStub&amp;lt;ILogger&amp;gt;();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _repositoryMock = MockRepository.GenerateStub&amp;lt;IRepository&amp;gt;();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _repositoryMock.Stub(x =&amp;gt; x.Delete(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty)).Return(&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;).Repeat.Once();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _manager = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Manager(_repositoryMock, _loggerMock);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;    }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;NMock2&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; When_a_thing_is_deleted_using_the_manager : ContextSpecification&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; ILogger _loggerMock;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; Manager _manager;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; IRepository _repositoryMock;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        [Fact]&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; it_should_log_with_logger()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            Expect.On(_loggerMock)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;                .Method(&amp;quot;&lt;span style="color: #8b0000"&gt;Log&lt;/span&gt;&amp;quot;)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;                .With(&amp;quot;&lt;span style="color: #8b0000"&gt;The thing was deleted&lt;/span&gt;&amp;quot;)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;                .Will(Return.Value(&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;)); &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Because()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _manager.Delete(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; EstablishContext()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            var mockery = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Mockery();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _repositoryMock=  mockery.NewMock&amp;lt;IRepository&amp;gt;();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _loggerMock= mockery.NewMock&amp;lt;ILogger&amp;gt;();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            Stub.On(_repositoryMock)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;                .Method(&amp;quot;&lt;span style="color: #8b0000"&gt;Delete&lt;/span&gt;&amp;quot;)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;                .With(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;                .Will(Return.Value(&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;));&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            Stub.On(_loggerMock)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;                .Method(&amp;quot;&lt;span style="color: #8b0000"&gt;Log&lt;/span&gt;&amp;quot;)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;                .With(&amp;quot;&lt;span style="color: #8b0000"&gt;The thing was deleted&lt;/span&gt;&amp;quot;);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _manager = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Manager(_repositoryMock, _loggerMock);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;    }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Overall, the APIs are quite close in the application of their interfaces.&amp;#160; Moq and Rhino seem to be slightly more strongly typed and lend themselves to a more Lamda style of development (up to you to choose if this is good for you or not).&amp;#160; NMock attempts to be a fluent interface however still has some way to go.&amp;#160; For me, I am moving to Moq, until I give the frameworks and other look.&amp;#160;&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This is in no way an exhaustive list of framework or features, more a peek at a simple example&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-7362945704413488790?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/7362945704413488790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=7362945704413488790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/7362945704413488790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/7362945704413488790'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/03/mocking-frameworks-quick-peek-moq-rhino.html' title='Mocking Frameworks.. Quick Peek @ Moq, Rhino Mocks, NMock2'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-6814101180914496161</id><published>2010-03-23T03:36:00.001-07:00</published><updated>2010-03-25T02:41:20.889-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Unity'/><category scheme='http://www.blogger.com/atom/ns#' term='Composite Application Block'/><category scheme='http://www.blogger.com/atom/ns#' term='Dependency Injection'/><category scheme='http://www.blogger.com/atom/ns#' term='IoC'/><category scheme='http://www.blogger.com/atom/ns#' term='Application Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='AFL'/><title type='text'>WPF Frameworks - CAB(Prism) with MVVM and IOC</title><content type='html'>&lt;p&gt;I did a little searching around recently to find an example of the combination of the Composite Application Block/Guidance for WPF, using an IOC container (eg. Unity/Structure map) wrapped up with Presentation Model (MVVM more explicitly)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://elegantcode.com/author/blagunas/"&gt;Brian&lt;/a&gt; from Elegant Code had an &lt;a href="http://elegantcode.com/2009/06/05/bsdg-prismmvvm-for-wpf-presentation-sample-code/"&gt;example&lt;/a&gt; however there are not a plethora out there. I thought I would put my spin on it. Using the logical architecture of the CAB with a shell, infrastructure and related module assemblies I created a simple app. For this I wanted to use a topic that I knew well. So this app relates to a sport I know quite a lot about…. Australian Rules Football (Aussie Rules). &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Quite Lesson on Aussie Rules – Scoring&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The scoring system in Aussie Rules is made up of two parts. Firstly goals, worth 6 points and Behinds worth 1 point. Therefore a score line might be written 10-1-61 eg. (10 x6) + (1x1) = 61&lt;/p&gt;  &lt;p&gt;So using that model, I have the following.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/S6iZi3Ru5xI/AAAAAAAAAME/UWXe01_H1ss/s1600-h/image%5B8%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_CsLu6MHVy_A/S6iZjhNqXaI/AAAAAAAAAMI/lQcjqZWN0CM/image_thumb%5B4%5D.png?imgmax=800" width="680" height="348" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The module that contains the view model can then control the dependencies as follows&lt;/p&gt;  &lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; FootballModule : IModule&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; IUnityContainer _container;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; IRegionManager _regionManager;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; FootballModule(IUnityContainer container, IRegionManager regionManager)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _container = container;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _regionManager = regionManager;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        #region IModule Members&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Initialize()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            RegisterViewsAndServices();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            var presentationModel = _container.Resolve&amp;lt;IScoreboardViewModel&amp;gt;();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            IRegion mainRegion = _regionManager.Regions[Infrastructure.RegionNames.MainRegion];&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            mainRegion.Add(presentationModel.View);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            presentationModel.Initialise();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        #endregion&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; RegisterViewsAndServices()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _container.RegisterType&amp;lt;IFootballService,FootballService&amp;gt;();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _container.RegisterType&amp;lt;IFootballViewModel, FootballViewModel&amp;gt;();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _container.RegisterType(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(FootballView));&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _container.RegisterType&amp;lt;IScoreboardViewModel, ScoreboardViewModel&amp;gt;();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _container.RegisterType(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(ScoreBoardView)); &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;    }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;  &lt;br /&gt;The view is injected into the model, along with any other dependencies.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ScoreboardViewModel : IScoreboardViewModel&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; IFootballService _footballService;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; ScoreBoardView _view;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; MatchResult _matchResult;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; ScoreboardViewModel(IFootballService footballService, ScoreBoardView view)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _view = view;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _footballService = footballService;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; HomeTeamName&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _matchResult.HomeTeam.TeamName; }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; AwayTeamName&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _matchResult.AwayTeam.TeamName; }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; HomeGoals&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _matchResult.HomeTeamScore.Goals; }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; HomeBehinds&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _matchResult.HomeTeamScore.Behind; }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; HomeScore&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _matchResult.HomeTeamScore.ScoreTotal; }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; AwayGoals&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _matchResult.HomeTeamScore.Goals; }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; AwayBehinds&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _matchResult.AwayTeamScore.Behind; }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; AwayScore&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _matchResult.AwayTeamScore.ScoreTotal; }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        #region IScoreboardViewModel Members&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; UserControl View&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _view; }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Initialise()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _matchResult = _footballService.GetMatchResult();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _view.DataContext = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        #endregion&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; GetLatestMatchResult()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;            _matchResult = _footballService.GetMatchResult();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;    }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The result is a simple app to display the scoreboard.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/S6svvGtbckI/AAAAAAAAAMc/L6s3_IpzNV4/s1600-h/image9%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; width: 353px; display: inline; height: 182px; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_CsLu6MHVy_A/S6ib4F-L9II/AAAAAAAAAMg/Q-P63Ri1sxI/image9_thumb%5B2%5D.png?imgmax=800" width="365" height="194" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;My example can be found @ &lt;a href="http://merblasamples.codeplex.com/"&gt;Codeplex&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-6814101180914496161?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/6814101180914496161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=6814101180914496161' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/6814101180914496161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/6814101180914496161'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/03/wpf-frameworks-cabprism-with-mvvm-and.html' title='WPF Frameworks - CAB(Prism) with MVVM and IOC'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_CsLu6MHVy_A/S6iZjhNqXaI/AAAAAAAAAMI/lQcjqZWN0CM/s72-c/image_thumb%5B4%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-5272582974816744734</id><published>2010-03-21T16:20:00.000-07:00</published><updated>2010-03-21T19:04:33.201-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BDD'/><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Application Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Do Hackers use TDD or BDD</title><content type='html'>Developers often get caught up with the particulars of  our work.  We have all seen it, a dev more worried about the framework they are using than the product being delivered.  I know, I have been guilty of it.  Given that premise and that most of the time developers strive for a better outcome, I pose this question.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Do hackers use BDD or TDD??  Do they spend hours working on their User Stories?  Do they stub their tests such as....&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;GIVEN the account exists&lt;/div&gt;&lt;div&gt;AND I have the password&lt;/div&gt;&lt;div&gt;WHEN the application starts&lt;/div&gt;&lt;div&gt;THEN do some bad stuff&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Just a thought....   ;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;Get Amongst It!!!&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-5272582974816744734?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/5272582974816744734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=5272582974816744734' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5272582974816744734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5272582974816744734'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/03/do-hackers-use-tdd-or-bdd.html' title='Do Hackers use TDD or BDD'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-9126158432544975575</id><published>2010-03-08T03:05:00.001-08:00</published><updated>2010-03-08T03:05:29.547-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Antons Lane'/><title type='text'>Get Amongst it….. with Anton’s Lane</title><content type='html'>&lt;p&gt;My amazing wife’s new label &lt;a href="http://www.antonslane.com"&gt;Anton’s Lane&lt;/a&gt; is featured in the latest issue of &lt;a href="http://antonslane.blogspot.com/2010/03/peekaboo.html"&gt;Peekaboo&lt;/a&gt; Magazine.&amp;#160; A fantastic effort and great milestone for her.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/S5TZ8JH4RiI/AAAAAAAAAL0/oH1WpS_nCcc/s1600-h/Peekaboo_Front%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Peekaboo_Front" border="0" alt="Peekaboo_Front" src="http://lh3.ggpht.com/_CsLu6MHVy_A/S5TZ8uhEokI/AAAAAAAAAL4/z-3Uyl9lsvc/Peekaboo_Front_thumb%5B1%5D.jpg?imgmax=800" width="343" height="425" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/S5TZ9Rkwp6I/AAAAAAAAAL8/KVb-jlx5cGM/s1600-h/Matt%20-%20Peekaboo%20page%2030_March10%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Matt - Peekaboo page 30_March10" border="0" alt="Matt - Peekaboo page 30_March10" src="http://lh3.ggpht.com/_CsLu6MHVy_A/S5TZ-A2S2hI/AAAAAAAAAMA/X0gE4P9isBY/Matt%20-%20Peekaboo%20page%2030_March10_thumb%5B1%5D.jpg?imgmax=800" width="352" height="434" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-9126158432544975575?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/9126158432544975575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=9126158432544975575' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/9126158432544975575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/9126158432544975575'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/03/get-amongst-it-with-antons-lane.html' title='Get Amongst it….. with Anton’s Lane'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_CsLu6MHVy_A/S5TZ8uhEokI/AAAAAAAAAL4/z-3Uyl9lsvc/s72-c/Peekaboo_Front_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-6690811807254245146</id><published>2010-03-05T04:28:00.001-08:00</published><updated>2010-03-05T04:28:57.215-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Application Architecture'/><title type='text'>Quick peak at VS2010 Performance Profiling</title><content type='html'>&lt;p&gt;Ok… I have been bagging VS2010 recently in relation to the dependency components of the Architecture features.&amp;#160; I will say however overall I am quite pleased with the RC.&amp;#160; One feature that seems to have got a tweak is the performance profiling.&amp;#160; Below is a quick peak.&lt;/p&gt;  &lt;p&gt;I created a quick console app and ran the profiling, in particular the new concurrency option.&amp;#160; &lt;/p&gt;  &lt;p&gt;There are some great reports that come from this area.&amp;#160; For example a detailed view of CPU usage, marks, the split of cores and the usage of threads over the timeline of the profile.&amp;#160; &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:66721397-FF69-4ca6-AEC4-17E6B3208830:0a47c9d4-e19d-40cd-8db6-10d773f9dcec" class="wlWriterEditableSmartContent"&gt;&lt;a style="border:0px" href="http://cid-264154df1e2fb1e7.skydrive.live.com/redir.aspx?page=browse&amp;amp;resid=264154DF1E2FB1E7!168&amp;amp;ct=photos"&gt;&lt;img style="border:0px" alt="View VS 2010 Performance Profiling" src="http://lh4.ggpht.com/_CsLu6MHVy_A/S5D42Z8mujI/AAAAAAAAALw/OWbouq63Ths/InlineRepresentationa9dae944-ddd5-4b23-8fb7-0fbb136fb3f5%5B2%5D.jpg?imgmax=800" /&gt;&lt;/a&gt;&lt;div style="width:886px;text-align:right;" &gt;&lt;a href="http://cid-264154df1e2fb1e7.skydrive.live.com/redir.aspx?page=browse&amp;amp;resid=264154DF1E2FB1E7!168&amp;amp;ct=photos"&gt;View Full Album&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;Unlike the VS2010 dependency features these tools were responsive and quick to use.&amp;#160; Have I used them to solve an indepth problem…. no but at least I might check these tools out next time I have an issue.&lt;/p&gt;  &lt;p&gt;Get Amongst It!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-6690811807254245146?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/6690811807254245146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=6690811807254245146' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/6690811807254245146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/6690811807254245146'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/03/quick-peak-at-vs2010-performance.html' title='Quick peak at VS2010 Performance Profiling'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_CsLu6MHVy_A/S5D42Z8mujI/AAAAAAAAALw/OWbouq63Ths/s72-c/InlineRepresentationa9dae944-ddd5-4b23-8fb7-0fbb136fb3f5%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-3982947888771150377</id><published>2010-03-05T04:01:00.001-08:00</published><updated>2010-03-05T04:05:42.733-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dependency'/><category scheme='http://www.blogger.com/atom/ns#' term='NDepend'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Application Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and Practices'/><title type='text'>VS2010 RC vs NDepend v3 RC – Dependency Matrix</title><content type='html'>&lt;p&gt;Recently I &lt;a href="http://merbla.blogspot.com/2010/02/ndepend-v3-rc-vs-vs2010-rc-dependency.html"&gt;posted&lt;/a&gt; about the VS2010 RC and its new feature of tracking dependencies through an application.&amp;#160; I also made mention of NDepend and what it brings to the table in this space.&lt;/p&gt;  &lt;p&gt;At the time, I was also looking at a related feature called the dependency matrix.&amp;#160; Unfortunately VS2010 crashed a number of times when analysing the latest version of the Enterprise Library Blocks (v5 Beta).&amp;#160; So I decided I would cut the analysis down to the core libraries for the purposes of this post.&lt;/p&gt;  &lt;p&gt;So, after creating a solution with the Common project, I created a dependency graph as shown below.&amp;#160; This shows the high level view of the dependencies of the Common library.&amp;#160; Also shown below is the “Quick Clusters” view of a dependency graph.&amp;#160; This helps to represent the core item that is at the heart of the assemblies being analysed.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_CsLu6MHVy_A/S5DzfpCJQsI/AAAAAAAAALI/4nFfGAJS230/s1600-h/Capture%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Capture" border="0" alt="Capture" src="http://lh4.ggpht.com/_CsLu6MHVy_A/S5DzgXQ6ndI/AAAAAAAAALM/pSLrSFaNfag/Capture_thumb%5B2%5D.png?imgmax=800" width="881" height="677" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/S5DzhIL570I/AAAAAAAAALQ/8y71lk15vPg/s1600-h/Capture2%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Capture2" border="0" alt="Capture2" src="http://lh4.ggpht.com/_CsLu6MHVy_A/S5DziK9f6_I/AAAAAAAAALY/8sSDIAiMIqg/Capture2_thumb%5B1%5D.png?imgmax=800" width="888" height="457" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Following this, there is the ability to view the current graph as a matrix.&amp;#160; Look for the following toolbar item. &lt;a href="http://lh4.ggpht.com/_CsLu6MHVy_A/S5DyRlBF8UI/AAAAAAAAAKA/B2E0YiM5ois/s1600-h/image%5B13%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_CsLu6MHVy_A/S5DySJ8WpfI/AAAAAAAAAKE/OpMAnh1R50Q/image_thumb%5B7%5D.png?imgmax=800" width="30" height="31" /&gt;&lt;/a&gt; The output is below, however this is where I started loosing interest in the current VS2010 tool set.&amp;#160; It took 3 attempts for the following matrix (due to VS2010 not responding aka 18 mins).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/S5Dzii4TmqI/AAAAAAAAALc/D8l5DCJqJNI/s1600-h/Capture4%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Capture4" border="0" alt="Capture4" src="http://lh4.ggpht.com/_CsLu6MHVy_A/S5DzjXCSgFI/AAAAAAAAALg/inyJ-xT4Mpk/Capture4_thumb%5B2%5D.png?imgmax=800" width="885" height="606" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The reason this is unreadable is that all items (types, members etc) are on by default, giving you the most coarse grained view.&amp;#160; After drilling down via the Architecture Explorer, I was able to generate a another matrix showing the members within the Common.Utility namespace (see below) however by then I was well and truly over it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_CsLu6MHVy_A/S5DzkMYfFGI/AAAAAAAAALk/QuNo5lWfcDs/s1600-h/Capture5%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Capture5" border="0" alt="Capture5" src="http://lh4.ggpht.com/_CsLu6MHVy_A/S5DzlCrDC0I/AAAAAAAAALo/S1pqsgp3wtE/Capture5_thumb%5B1%5D.png?imgmax=800" width="861" height="857" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So… I then went over to NDepend V3 RC and followed a similar process.&amp;#160; First creating the dependency graph and then moving to the dependency matrix. (Pardon the pun but there are no dependencies in creating a graph prior to a matrix in NDepend).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/S5DyWdCLG_I/AAAAAAAAAKY/nkIG2DOS-pk/s1600-h/DependencyGraphSnapshot%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DependencyGraphSnapshot" border="0" alt="DependencyGraphSnapshot" src="http://lh5.ggpht.com/_CsLu6MHVy_A/S5DyXHqY6xI/AAAAAAAAAKc/ucxM2UTpuEU/DependencyGraphSnapshot_thumb%5B1%5D.png?imgmax=800" width="421" height="607" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/S5DyYLUe9dI/AAAAAAAAAKg/4wPnRxCiY4c/s1600-h/DependencyMatrixSnapshot%5B6%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DependencyMatrixSnapshot" border="0" alt="DependencyMatrixSnapshot" src="http://lh5.ggpht.com/_CsLu6MHVy_A/S5DyZRzr3FI/AAAAAAAAAKk/rcwHWPMzewQ/DependencyMatrixSnapshot_thumb%5B4%5D.png?imgmax=800" width="652" height="801" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is where NDepend comes into its own.&amp;#160; From a quick glace I can glean that there is a circular dependency between the instrumentation and configuration namespaces. Also, by simply hovering over the cells, a quick summary is displayed representing the items being compared.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/S5DyZ_pzTBI/AAAAAAAAAKo/WR_Gkkklfy8/s1600-h/Untitled%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Untitled" border="0" alt="Untitled" src="http://lh6.ggpht.com/_CsLu6MHVy_A/S5DybNPNapI/AAAAAAAAAKs/YASYTqLx4yE/Untitled_thumb%5B1%5D.png?imgmax=800" width="258" height="530" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;There is also a multitude of options to change the view of the matrix such as the weighting on cells (see below), view direct and indirect dependencies and expand selected areas to view information at a finer grained level.&amp;#160; Also you can create CQL that you can later run in a continuous integration build to ensure that problem issues are flagged early.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/S5DybSV5_FI/AAAAAAAAAKw/Tnr75AvINQI/s1600-h/Untitled%5B8%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Untitled" border="0" alt="Untitled" src="http://lh4.ggpht.com/_CsLu6MHVy_A/S5DycbHaSkI/AAAAAAAAAK0/10RUXc67b6s/Untitled_thumb%5B4%5D.png?imgmax=800" width="395" height="156" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;A favourite feature of mine is the ability to work back to a dependency graph for a particular problem section. For example the pic below displays a graph generated from the matrix for the dependencies of the Instrumentation classes on the System.Configuration assembly.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/S5DydWQv_1I/AAAAAAAAAK4/ozWWnHJl3BU/s1600-h/DependencyGraphSnapshot1%5B6%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DependencyGraphSnapshot1" border="0" alt="DependencyGraphSnapshot1" src="http://lh5.ggpht.com/_CsLu6MHVy_A/S5DyeXgLHKI/AAAAAAAAAK8/DAiwHsOoLNM/DependencyGraphSnapshot1_thumb%5B2%5D.png?imgmax=800" width="584" height="253" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; Lastly, there is absolute power in using the dependency graph and matrix side by side. This lets you look at dependencies in your preferred view and have the other view highlight and describe what you are looking at.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/S5DyfZel4MI/AAAAAAAAALA/JRASuaib4Z0/s1600-h/Untitled6%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Untitled6" border="0" alt="Untitled6" src="http://lh5.ggpht.com/_CsLu6MHVy_A/S5Dyg_7BbjI/AAAAAAAAALE/6qPXvdlSshk/Untitled6_thumb%5B2%5D.png?imgmax=800" width="903" height="472" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Either I am not sure how to drive the VS2010 dependency model or it is simply not up to RTM.&amp;#160; In any case it has a long way to go to provide the insight of NDepend.&amp;#160; It is great that Microsoft has recognised the importance of this area of development however it might be a release or two away before it is a serious day to day tool for use within an enterprise or any serious development shop. &lt;/p&gt;  &lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-3982947888771150377?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/3982947888771150377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=3982947888771150377' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3982947888771150377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3982947888771150377'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/03/vs2010-rc-vs-ndepend-v3-rc-dependency.html' title='VS2010 RC vs NDepend v3 RC – Dependency Matrix'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_CsLu6MHVy_A/S5DzgXQ6ndI/AAAAAAAAALM/pSLrSFaNfag/s72-c/Capture_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-778892191078449077</id><published>2010-02-22T02:57:00.001-08:00</published><updated>2010-02-22T02:57:00.608-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dependency'/><category scheme='http://www.blogger.com/atom/ns#' term='NDepend'/><category scheme='http://www.blogger.com/atom/ns#' term='Dependency Injection'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Application Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and Practices'/><title type='text'>NDepend v3 RC vs VS2010 RC Dependency Graph – A quick glance</title><content type='html'>&lt;p&gt;Not long ago many .net developers jumped and downloaded Visual Studio 2010 RC.&amp;#160; Some of the new features of the VS 2010 IDE include functionality that is available in a tool that I have used for sometime now - &lt;a href="http://www.ndepend.com/"&gt;NDepend&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;As is the case with a lot of Microsoft product releases, the intent is there but the execution for the first cut has not quite hit the mark.&amp;#160; This is not suprising when comparing a V1 release to V3 release.&amp;#160; &lt;/p&gt;  &lt;p&gt;In the flavour of looking at new products, I thought I would use the &lt;a href="http://entlib.codeplex.com/"&gt;Microsoft Patterns and Practices Enterprise Library Blocks v5.0 Beta&lt;/a&gt; to compare some of the dependency features of the products.&amp;#160; It has 25 projects and is a little more representative than the traditional hello world app.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Visual Studio 2010 – Dependency Graph&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;To create a dependency graph, its quite a simple process. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/S4Jiq3oF_iI/AAAAAAAAAIE/0fWbOzQbKqo/s1600-h/image3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_CsLu6MHVy_A/S4JirhXkieI/AAAAAAAAAII/sOSVFEb5k7M/image_thumb1.png?imgmax=800" width="582" height="182" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The default output below, is not the most enlightening view.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/S4Jiscz9yqI/AAAAAAAAAIM/x-sLZFqZNu8/s1600-h/image10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_CsLu6MHVy_A/S4JitFix9jI/AAAAAAAAAIQ/L9jTYh_7oGg/image_thumb4.png?imgmax=800" width="801" height="329" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;However with some quick changes (Left to right and zoom to 50%), it becomes a little clearer that this is quite a well architected set of assemblies considering the 25000 +&amp;#160; lines of code.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/S4JiuJOKwnI/AAAAAAAAAIU/VDc4Jg8RvnY/s1600-h/image15%5B1%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_CsLu6MHVy_A/S4JivIcAEbI/AAAAAAAAAIY/jJYH1PS-rIY/image15_thumb.png?imgmax=800" width="801" height="542" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Hovering over an assembly gives a summary of the compiled assembly&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/S4Jiv49BNcI/AAAAAAAAAIc/xyh6LT8Q1Cw/s1600-h/image19%5B1%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_CsLu6MHVy_A/S4JiwjnulGI/AAAAAAAAAIg/uBWyKQIcF6Q/image19_thumb.png?imgmax=800" width="802" height="210" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Clicking on the arrows allows a drill down look at what makes up the assembly in question.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_CsLu6MHVy_A/S4JixVPgvMI/AAAAAAAAAIk/jCe6N_vth2Q/s1600-h/image%5B57%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_CsLu6MHVy_A/S4JiyCAOlvI/AAAAAAAAAIo/tjrw53mPR_U/image_thumb%5B28%5D.png?imgmax=800" width="805" height="178" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;A further right click gives a context menu that allows some further investigation such as “Show Content”.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/S4JiygLBQ9I/AAAAAAAAAIs/4sH1NKyeSzI/s1600-h/image%5B15%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_CsLu6MHVy_A/S4JizQ5roYI/AAAAAAAAAIw/2KaZwBLahXg/image_thumb%5B6%5D.png?imgmax=800" width="538" height="481" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/S4Ji0HguNLI/AAAAAAAAAI0/aiWUi1xZGPI/s1600-h/image%5B17%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_CsLu6MHVy_A/S4Ji1JavB3I/AAAAAAAAAI4/zziVnvs-SvM/image_thumb%5B8%5D.png?imgmax=800" width="823" height="543" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Also, once an assembly or class is highlighted, you have the option of inspecting the dependencies by once again drilling down.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/S4Ji10yjxEI/AAAAAAAAAI8/iYjz_vOoCbw/s1600-h/image%5B21%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_CsLu6MHVy_A/S4Ji2lLY8cI/AAAAAAAAAJA/WUnq2I3oGDc/image_thumb%5B10%5D.png?imgmax=800" width="677" height="276" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_CsLu6MHVy_A/S4Ji3UF0dmI/AAAAAAAAAJE/2J5gg57SDG0/s1600-h/image%5B28%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_CsLu6MHVy_A/S4Ji4FWoJHI/AAAAAAAAAJI/dCBA1lquoEk/image_thumb%5B13%5D.png?imgmax=800" width="489" height="337" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Overall, its nice that Microsoft has realised the importance of understanding assembly and code dependencies.&amp;#160; It is sure to take leaps and bounds in future releases.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;NDepend&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;NDepend has been around for some time however the latest release has focused heavily on integration with the Visual Studio IDE.&amp;#160; It seems wherever you go there is some sort of context menu related to the product.&amp;#160; For example, to start a NDepend project in an existing solution, simply hover over the NDepend icon at the bottom right of the IDE and add a new project.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/S4Ji4le6wEI/AAAAAAAAAJM/mr0gC-RVvQE/s1600-h/image%5B36%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_CsLu6MHVy_A/S4Ji5UdwJcI/AAAAAAAAAJQ/BGc23KXiFC4/image_thumb%5B17%5D.png?imgmax=800" width="244" height="185" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Once it processes you can view the dependency diagram.&amp;#160; Immediately you have quite a different experience compared to VS2010’s dependency diagram.&amp;#160; The first thing that is noticeable is the size of the assemblies derived by the lines of code.&amp;#160; Similar to VS2010 hovering over an assembly gives a snapshot of the assembly including dependencies, lines of code, number of IL instructions and cyclomatic complexity.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/S4Ji6QOuQFI/AAAAAAAAAJU/db4hJTCqUEo/s1600-h/image%5B44%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_CsLu6MHVy_A/S4Ji76Z5OYI/AAAAAAAAAJY/vQuNXzQ9Omk/image_thumb%5B21%5D.png?imgmax=800" width="940" height="573" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The right click context menu on an assembly gives many options, one of which is to drill down or view the internal dependencies.&amp;#160; The result is many times quicker than the VS2010 drill down.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/S4Ji8nIhCZI/AAAAAAAAAJc/m74POB69TFc/s1600-h/image%5B52%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_CsLu6MHVy_A/S4Ji9RISNdI/AAAAAAAAAJg/NFoeMLYPQQE/image_thumb%5B25%5D.png?imgmax=800" width="413" height="465" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/S4Ji98A4xfI/AAAAAAAAAJk/fWl0Da-UGmQ/s1600-h/image%5B56%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_CsLu6MHVy_A/S4Ji-sNgyCI/AAAAAAAAAJo/nes71x3VrpY/image_thumb%5B27%5D.png?imgmax=800" width="925" height="196" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;NDepend also makes strong use of CQL (Code Query Language) which can then used to find related dependency issues.&amp;#160; This can then be used to enforce rules and constraints similar to FxCop or other code analysis tools.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Quick Summary&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Forgetting functionality, the most apparent difference in the tools are their speed of processing.&amp;#160; The guys @ NDepend certainly have their rendering nailed as they are quicker than VS2010 by a rate of at least 4/1. &lt;/p&gt;  &lt;p&gt;Overall, both these products are tools to give you a glimpse of what dependencies you have within your application. Something we all should take more note of.&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!!!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-778892191078449077?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/778892191078449077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=778892191078449077' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/778892191078449077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/778892191078449077'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/02/ndepend-v3-rc-vs-vs2010-rc-dependency.html' title='NDepend v3 RC vs VS2010 RC Dependency Graph – A quick glance'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_CsLu6MHVy_A/S4JirhXkieI/AAAAAAAAAII/sOSVFEb5k7M/s72-c/image_thumb1.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-7189476643140779336</id><published>2010-02-16T02:08:00.001-08:00</published><updated>2010-02-16T02:08:32.641-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Resharper'/><category scheme='http://www.blogger.com/atom/ns#' term='NUnit'/><title type='text'>Resharper NUnit Gotcha</title><content type='html'>&lt;p&gt;Recently I was authoring some tests in NUnit.&amp;#160; I had some settings in an application configuration file and it was growing large.&amp;#160; I decided to move this to the top of the app.config above the configSections group.&amp;#160; &lt;/p&gt;  &lt;p&gt;As opposed to throwing an exception, the Resharper test runner showed the tests as grey.&amp;#160; I should have known better, but I was hoping my tests would have told me I was wrong.&lt;/p&gt;  &lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; &lt;span style="color: #0000ff"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;appSettings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;add&lt;/span&gt; &lt;span style="color: #ff0000"&gt;key&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;appSettings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;configSections&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;configSections&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-7189476643140779336?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/7189476643140779336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=7189476643140779336' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/7189476643140779336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/7189476643140779336'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/02/resharper-nunit-gotcha.html' title='Resharper NUnit Gotcha'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-6318509663858704712</id><published>2010-02-06T21:35:00.001-08:00</published><updated>2010-02-06T21:35:48.182-08:00</updated><title type='text'>IDrive &amp; Windows 7 Installations</title><content type='html'>&lt;p&gt;Recently I have been upgrading a few tools for VS 2008/2010.&amp;#160; As expected this involved a number of installs/re-installs.&amp;#160; However on a number of occasions, I received the error &lt;strong&gt;&lt;em&gt;Error writing to file: C:\Config.Msi. &lt;/em&gt;&lt;/strong&gt;It took sometime to understand what was going on before I realised my online backup IDrive was causing the issue.&amp;#160; I also remembered encountering this issue once before.&lt;/p&gt;  &lt;p&gt;Simple fix was disabling IDrive whist doing the installs, now all is sweet.&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-6318509663858704712?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/6318509663858704712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=6318509663858704712' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/6318509663858704712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/6318509663858704712'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/02/idrive-windows-7-installations.html' title='IDrive &amp;amp; Windows 7 Installations'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-4034300647969352356</id><published>2010-01-07T03:25:00.001-08:00</published><updated>2010-01-07T03:25:03.868-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Organic Nursery Bedding'/><category scheme='http://www.blogger.com/atom/ns#' term='Neuropsychology'/><category scheme='http://www.blogger.com/atom/ns#' term='Antons Lane'/><title type='text'>2010 on the rise</title><content type='html'>&lt;p&gt;This time last year I had a quick &lt;a href="http://merbla.blogspot.com/2009/01/2009-here-we-come.html"&gt;post&lt;/a&gt; to start 2009.&amp;#160; I was quite happy say that two of the three are done and dusted.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;My amazing wife’s venture into Organic Nursery Bedding has launched&amp;#160; has launched. Check it out &lt;a href="http://www.antonslane.com"&gt;www.antonslane.com&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Her private practice where she practices Paediatric Neuropsychology is back in action.&amp;#160; &lt;a href="http://www.pdlc.com.au"&gt;www.pdlc.com.au&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Lastly, the third item on our list is at a respectable (65%), Coffee Conspectus is on its way…&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Who knows what 2010 will bring.&lt;/p&gt;  &lt;p&gt;Get Amongst It…… (or whatever you want to achieve this year)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-4034300647969352356?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/4034300647969352356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=4034300647969352356' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4034300647969352356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4034300647969352356'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2010/01/2010-on-rise.html' title='2010 on the rise'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-692771564784366596</id><published>2009-12-10T00:19:00.000-08:00</published><updated>2009-12-29T22:33:25.260-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BDD'/><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Testing frameworks you depend on</title><content type='html'>I have been working on a side project recently that makes use of a number of open source projects. In a number of cases I have been burnt by confirmed bugs in the frameworks. It got me thinking to what extent I should be testing external components. I have previously relied on testing integration points of frameworks, often with a simple interface. It highlighted a flaw in some of my code that expected certain results (aka Liskov Substitution Principle).   &lt;p&gt;So what is the appropriate level of testing needed when using a piece of code (or framework) that you have not created.&amp;#160; Would you consider testing the .Net framework, Rails?&lt;/p&gt;  &lt;p&gt;I have settled for a case by case basis, however it does make you think hard about who and what (company/organisation) has developed the libraries you depend on.&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-692771564784366596?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/692771564784366596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=692771564784366596' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/692771564784366596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/692771564784366596'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/12/testing-frameworks-you-depend-on.html' title='Testing frameworks you depend on'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-5558030907861429183</id><published>2009-11-26T04:39:00.001-08:00</published><updated>2009-11-26T04:39:47.345-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity'/><category scheme='http://www.blogger.com/atom/ns#' term='NDepend'/><category scheme='http://www.blogger.com/atom/ns#' term='IoC'/><category scheme='http://www.blogger.com/atom/ns#' term='Structure Map'/><title type='text'>IOC Containers – Who do they depend on?? (Part II – more NDepend)</title><content type='html'>&lt;p&gt;I recently posted about IOC containers and their &lt;a href="http://merbla.blogspot.com/2009/11/ioc-containers-who-do-they-depend-on.html"&gt;dependencies&lt;/a&gt;.&amp;#160; I was using NDepend in that post as an example tool to extract quick information relating to assemblies that are inherited when you add a framework to your project.&lt;/p&gt;  &lt;p&gt;Patrick of NDepend was nice enough to point out some other features that can aid this process.&amp;#160; As per his &lt;a href="http://codebetter.com/blogs/patricksmacchia/archive/2009/08/31/reveal-hidden-api-usage-tricks-from-any-net-application.aspx"&gt;blog&lt;/a&gt; post, you can you the build comparison tool to check two sets of assemblies.&amp;#160; &lt;/p&gt;  &lt;p&gt;In this case, Unity vs Structure Map&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Build Comparison&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/Sw53A-XR2hI/AAAAAAAAAG8/pUuAnuDnVxQ/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_CsLu6MHVy_A/Sw53Bvu62wI/AAAAAAAAAHA/A8kKMGh8IbI/image_thumb%5B1%5D.png?imgmax=800" width="696" height="402" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Output when searching for differences. (also available are searching by Method, Field, Type and Namespace)&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/Sw53CLm7COI/AAAAAAAAAHE/5djUgX7NJcE/s1600-h/image%5B8%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_CsLu6MHVy_A/Sw53DGvPtTI/AAAAAAAAAHI/EYIX5soZwMI/image_thumb%5B4%5D.png?imgmax=800" width="705" height="547" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;As you can see, there are a number of assemblies used by Structure Map that are not used by Unity.&amp;#160; (Unfortunately this seems to only be a one way view, eg. I cannot seem to search for the assemblies that have been introduced.&amp;#160; Then again, you probably care more about the new build.). On a similar note you can also search for items that are used differently.&amp;#160; The output also gives an overview of the changes.&amp;#160; I have found this quite useful on my own builds and major open source projects updates.&amp;#160; (eg. Fluent NHibernate recent upgrade to consume the latest version of NHibernate)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_CsLu6MHVy_A/Sw53Dm9LD6I/AAAAAAAAAHM/kg-OAdtNpCM/s1600-h/image%5B15%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_CsLu6MHVy_A/Sw53EnxxvZI/AAAAAAAAAHQ/nUcBqzIxB44/image_thumb%5B7%5D.png?imgmax=800" width="461" height="259" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; As I become more familiar with NDepend, I am finding new ways to apply its tooling to improve all facets of my code base.&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-5558030907861429183?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/5558030907861429183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=5558030907861429183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5558030907861429183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5558030907861429183'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/11/ioc-containers-who-do-they-depend-on_26.html' title='IOC Containers – Who do they depend on?? (Part II – more NDepend)'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_CsLu6MHVy_A/Sw53Bvu62wI/AAAAAAAAAHA/A8kKMGh8IbI/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-5785276782883891203</id><published>2009-11-23T03:18:00.001-08:00</published><updated>2009-11-23T03:18:33.370-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='Linq'/><category scheme='http://www.blogger.com/atom/ns#' term='Data Services'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>NHibnernate &amp; Data Services</title><content type='html'>&lt;p&gt;Just a quick note on how to expose data services (aka REST) from your NHibernate repository or any other business logic.&amp;#160; Say you have an entity like the one below.&amp;#160; Then if you mark you entity with attributes from the System.Data.Services.Client assembly you can expose the entities from a business layer that exposes IQueryable.&lt;/p&gt;  &lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  1: &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  2: &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Data;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  3: &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Data.Services.Common;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  4: &lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; FluentlyDo.Entities&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  5: {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  6:     [DataServiceKey(&amp;quot;&lt;span style="color: #8b0000"&gt;Id&lt;/span&gt;&amp;quot;)]&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  7:     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Person&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  8:     {        &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  9:         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; Id { &lt;span style="color: #0000ff"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;set&lt;/span&gt;; }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 10:         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; FirstName { &lt;span style="color: #0000ff"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;set&lt;/span&gt;; }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 11:         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Surname { &lt;span style="color: #0000ff"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;set&lt;/span&gt;; }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 12:         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;? Age { &lt;span style="color: #0000ff"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff"&gt;set&lt;/span&gt;; }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 13:     }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 14: }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Then add a Data Service that exposes your IQueryable interface property&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  1: &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; FluentDataService : DataService&amp;lt;ServiceAdapter&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  2:     {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  3:         &lt;span style="color: #008000"&gt;// This method is called only once to initialize service-wide policies.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  4:         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; InitializeService(IDataServiceConfiguration config)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  5:         {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  6:              config.SetEntitySetAccessRule(&amp;quot;&lt;span style="color: #8b0000"&gt;People&lt;/span&gt;&amp;quot;, EntitySetRights.AllRead);            &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  7:         }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  8:     }    &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt;  9:     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ServiceAdapter&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 10:     {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 11:         &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; PersonRepository _personRepository;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 12:         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; ServiceAdapter()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 13:         {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 14:             SessionManager manager = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SessionManager();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 15:             _personRepository = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PersonRepository(manager.CreateSessionFactory());&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 16:         }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 17:         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; IQueryable&amp;lt;Person&amp;gt; People&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 18:         {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 19:             &lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 20:             {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 21:                 &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _personRepository.GetAll(); &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 22:             }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 23:         }       &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 11px"&gt; 24:     }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Feed &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/SwpvhGlU5cI/AAAAAAAAAGw/LYRxsQVb_gE/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_CsLu6MHVy_A/SwpviN8muqI/AAAAAAAAAG4/-URqTZmo-e4/image_thumb%5B2%5D.png?imgmax=800" width="734" height="570" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;There it is…&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Get Amongst It!!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-5785276782883891203?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/5785276782883891203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=5785276782883891203' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5785276782883891203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5785276782883891203'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/11/nhibnernate-data-services.html' title='NHibnernate &amp;amp; Data Services'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_CsLu6MHVy_A/SwpviN8muqI/AAAAAAAAAG4/-URqTZmo-e4/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-7467026934352348002</id><published>2009-11-04T11:55:00.001-08:00</published><updated>2009-11-04T11:55:07.578-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team Foundation Server'/><title type='text'>Locks, locks go away.</title><content type='html'>&lt;p&gt;Recently we had some team members leave our project, unfortunately they still had some exclusive locks on files within Team Foundation Server (TFS).&amp;#160; To get around this you need to use the &lt;a href="http://msdn.microsoft.com/en-us/library/cc31bk2e(VS.80).aspx"&gt;TF.exe&lt;/a&gt; tool.&lt;/p&gt;  &lt;p&gt;The syntax is as follows.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;tf.exe LOCK &amp;quot;$/PathToTheFile/FileInQuestion.cs&amp;quot; /LOCK:NONE /WORKSPACE:WorkspaceOfTheUserWhoHasTheLock;UserWhoHasTheLock&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;tf.exe UNDO &amp;quot;$/PathToTheFile/FileInQuestion.cs&amp;quot; /WORKSPACE:WorkspaceOfTheUserWhoHasTheLock;UserWhoHasTheLock&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-7467026934352348002?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/7467026934352348002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=7467026934352348002' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/7467026934352348002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/7467026934352348002'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/11/locks-locks-go-away.html' title='Locks, locks go away.'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-1656559308390595558</id><published>2009-11-04T01:32:00.001-08:00</published><updated>2009-11-04T01:32:47.552-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity'/><category scheme='http://www.blogger.com/atom/ns#' term='NDepend'/><category scheme='http://www.blogger.com/atom/ns#' term='Dependency Injection'/><category scheme='http://www.blogger.com/atom/ns#' term='IoC'/><category scheme='http://www.blogger.com/atom/ns#' term='Structure Map'/><title type='text'>IOC Containers – Who do they depend on??</title><content type='html'>&lt;p&gt;I am a big fan of Inversion of Control (IOC) containers.&amp;#160; I strongly believe when used correctly they clean up your code by at least 30% .&amp;#160; They also help you understand your dependencies much better.&lt;/p&gt;  &lt;p&gt;There are many options for developers when choosing an IOC, of which most have extensive material, samples and documentation available.&amp;#160; Recently I was wondering what are the dependencies of an IOC container.&amp;#160; After all, they help apply the dependency injection pattern, but what do they in turn rely on.&amp;#160; To help with this exercise, I am using a tool called &lt;a href="http://www.ndepend.com/"&gt;NDepend&lt;/a&gt;.&amp;#160; This is similar to the dependency mapping available in the Beta of VS2010 but on steroids.&lt;/p&gt;  &lt;p&gt;I took two containers that I am familiar with.&amp;#160; The Microsoft Patterns and Practices implementation &lt;a href="http://unity.codeplex.com/"&gt;Unity&lt;/a&gt;, and the popular open source project &lt;a href="http://structuremap.sourceforge.net/Default.htm"&gt;StructureMap&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The first thing we notice about both frameworks is that they have little need to go outside the basics of the .Net framework.&amp;#160; As such they are both great candidates for any type of application, be it Web, WPF or services.&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="200"&gt;&lt;strong&gt;Unity&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="200"&gt;&lt;strong&gt;Structure Map&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/SvFKK-U06_I/AAAAAAAAAGQ/C0TWQtpB40c/s1600-h/DependencyGraphSnapshot3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DependencyGraphSnapshot" border="0" alt="DependencyGraphSnapshot" src="http://lh6.ggpht.com/_CsLu6MHVy_A/SvFKLR8vXFI/AAAAAAAAAGU/fAOkeWM8zmk/DependencyGraphSnapshot_thumb1.png?imgmax=800" width="478" height="140" /&gt;&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="200"&gt;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/SvFKMOudhpI/AAAAAAAAAGY/opESyvt49yM/s1600-h/image3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_CsLu6MHVy_A/SvFKMtTg1zI/AAAAAAAAAGc/BMtq_jT_Aiw/image_thumb1.png?imgmax=800" width="338" height="388" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Delving a little further, we find that both frameworks are similar in the namespaces they consume. Both making strong use of generics (to be expected), however Structure Map has some a fluent configuration options and so makes use of Linq.&amp;#160; It also has some specific implementations (Pipelines) that cover specific lifecycles such as ASP.Net.&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="200"&gt;&lt;strong&gt;Unity&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="200"&gt;&lt;strong&gt;Structure Map&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;&lt;strong&gt;&lt;a href="http://lh4.ggpht.com/_CsLu6MHVy_A/SvFKNBsiKrI/AAAAAAAAAGg/-D_0bnqn0jk/s1600-h/DependencyMatrixSnapshot6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DependencyMatrixSnapshot" border="0" alt="DependencyMatrixSnapshot" src="http://lh6.ggpht.com/_CsLu6MHVy_A/SvFKONb0IPI/AAAAAAAAAGk/1bsMRD-z4wc/DependencyMatrixSnapshot_thumb2.png?imgmax=800" width="400" height="633" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="200"&gt;&lt;a href="http://lh4.ggpht.com/_CsLu6MHVy_A/SvFKOjvsIfI/AAAAAAAAAGo/pqdx3YVZkmk/s1600-h/DependencyMatrixSnapshot13.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DependencyMatrixSnapshot" border="0" alt="DependencyMatrixSnapshot" src="http://lh3.ggpht.com/_CsLu6MHVy_A/SvFKPj_ji3I/AAAAAAAAAGs/eY8kPfzBhVo/DependencyMatrixSnapshot_thumb7.png?imgmax=800" width="468" height="644" /&gt;&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Comparing components in this way gives you a better understanding of what is under the hood.&amp;#160; This is just a quick overview of looking at frameworks and their dependencies.&amp;#160; Next time that you use a framework, it might be worth considering what other components and dependencies you are inheriting.&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-1656559308390595558?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/1656559308390595558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=1656559308390595558' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/1656559308390595558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/1656559308390595558'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/11/ioc-containers-who-do-they-depend-on.html' title='IOC Containers – Who do they depend on??'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_CsLu6MHVy_A/SvFKLR8vXFI/AAAAAAAAAGU/fAOkeWM8zmk/s72-c/DependencyGraphSnapshot_thumb1.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-8046761373867461370</id><published>2009-10-20T04:17:00.001-07:00</published><updated>2009-10-20T04:28:50.577-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Merlba Samples</title><content type='html'>&lt;p&gt;Over my time as a dev, I seem to constantly need old snippets and code for quite simple tasks.&amp;#160; Some people use snippets, some templates however I have decided to add all mine to an open source project.&lt;/p&gt;  &lt;p&gt;Currently hosted on Codeplex (this will be changing shortly) is &lt;a href="http://merblasamples.codeplex.com/"&gt;http://merblasamples.codeplex.com/&lt;/a&gt;.&amp;#160; Over time I am going to use this as a bit of a dumping ground for ideas and samples that I have collated.&lt;/p&gt;  &lt;p&gt;Case in point, I needed a simple method to allow for converting a legacy apps string representation to Title Case.&amp;#160; So I have added to the utilities.&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public static string AsTitleCase(this string s)     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var textInfo = Thread.CurrentThread.CurrentCulture.TextInfo;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var result&amp;#160; = textInfo.ToLower(s);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; result = textInfo.ToTitleCase(result); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return result;     &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-8046761373867461370?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/8046761373867461370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=8046761373867461370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8046761373867461370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8046761373867461370'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/10/merlba-samples.html' title='Merlba Samples'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-3869872462953238104</id><published>2009-10-05T03:10:00.001-07:00</published><updated>2009-10-05T03:10:57.730-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team Foundation Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Team City'/><category scheme='http://www.blogger.com/atom/ns#' term='Telerik'/><title type='text'>Telerik TFS Project Dashboard</title><content type='html'>&lt;p&gt;The project I am currently on uses &lt;a href="http://msdn.microsoft.com/en-us/teamsystem/default.aspx"&gt;TFS 2008&lt;/a&gt; (Team Foundation Server) and I am always on the look out for new add ins and tools to make life easier.&amp;#160; One I have mentioned in the past is Conchango’s &lt;a href="http://www.scrumforteamsystem.com/en/default.aspx"&gt;Scrum&lt;/a&gt; Process Template.&amp;#160; We are also using Telerik’s suite of ASP.Net controls within the web app we are building.&amp;#160; These two tools now have something in common… &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.telerik.com/products/tfsmanager-and-tfsdashboard.aspx"&gt;TFS Work Item Manager &amp;amp; TFS Project Dashboard&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Set out as a showcase for their WPF tools, it seems to be a combination of the current dashboards&amp;#160; available and the Office integration.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Kanban like??&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/SsnGFY6bw6I/AAAAAAAAAGA/9BHSbOni2HM/s1600-h/image%5B7%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_CsLu6MHVy_A/SsnGIBeRPjI/AAAAAAAAAGE/wZK0XBCFdmc/image_thumb%5B3%5D.png?imgmax=800" width="853" height="644" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Who broke the build&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/SsnGJSqOpbI/AAAAAAAAAGI/AzqRXdXPaMk/s1600-h/image%5B12%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_CsLu6MHVy_A/SsnGMORcsCI/AAAAAAAAAGM/pc5PdAVqWEU/image_thumb%5B6%5D.png?imgmax=800" width="853" height="464" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It’s not quite &lt;a href="http://www.jetbrains.com/teamcity/"&gt;Team City&lt;/a&gt; build intergration, however its could make the TFS experience all the more palatable. &lt;/p&gt;  &lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-3869872462953238104?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/3869872462953238104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=3869872462953238104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3869872462953238104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3869872462953238104'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/10/telerik-tfs-project-dashboard.html' title='Telerik TFS Project Dashboard'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_CsLu6MHVy_A/SsnGIBeRPjI/AAAAAAAAAGE/wZK0XBCFdmc/s72-c/image_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-8429743568859376592</id><published>2009-10-02T15:32:00.000-07:00</published><updated>2009-10-02T15:49:05.767-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XBOX360'/><title type='text'>FIFA 10 GOALLL!!!!!</title><content type='html'>&lt;img style="visibility:hidden;width:0px;height:0px;" border="0" width="0" height="0" src="http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyNTQ1MjI4MDMzMDAmcHQ9MTI1NDUyMjgxMjAzMCZwPTk1MDcxJmQ9Jmc9MSZvPTEwM2ViYmZmMzk2ZjRhZjI5OGIyZmIxYTkwNjIyY2UwJm9mPTA=.gif" /&gt;&lt;div&gt;I haven't played the Xbox in a while, so to have this as my first goal was pretty cool.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pitty it was not Timmy Cahill.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Get Amongst It!!!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;object width="640" height="360"&gt;&lt;param name="wmode" value="transparent" valuetype="data"&gt;&lt;param name="movie" value="http://cdn.www.easports.com/static/110.5.4/flash/mdMediaPlugin/mediaplayer.swf?file=http://cdn.content.easports.com/media2/fifa10/6303303/742A0001_0_FLV_VIDEO_uDK.flv&amp;amp;link=http://www.easportsfootball.co.uk/media/play/video/10020307&amp;amp;linkfromdisplay=true&amp;amp;linktarget=_top&amp;amp;image=" valuetype="data"&gt;&lt;embed src="http://cdn.www.easports.com/static/110.5.4/flash/mdMediaPlugin/mediaplayer.swf" type="application/x-shockwave-flash" wmode="transparent" width="640" height="360" allowscriptaccess="always" allowfullscreen="true" flashvars="height=360&amp;amp;width=640&amp;amp;file=http://cdn.content.easports.com/media2/fifa10/6303303/742A0001_0_FLV_VIDEO_uDK.flv&amp;amp;link=http://www.easportsfootball.co.uk/media/play/video/10020307&amp;amp;linkfromdisplay=true&amp;amp;linktarget=_top&amp;amp;image="&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-family: Arial, sans-serif; font-size: 12px;"&gt;&lt;a href="http://www.easports.com/" target="_top" shape="rect"&gt;EA Sports&lt;/a&gt;: &lt;a href="http://www.easportsfootball.co.uk/media/play/video/10020307" target="_top" shape="rect"&gt;Everton 1 - 0 Darlington&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-8429743568859376592?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/8429743568859376592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=8429743568859376592' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8429743568859376592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8429743568859376592'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/10/fifa-10.html' title='FIFA 10 GOALLL!!!!!'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-8328703490701827911</id><published>2009-09-21T04:15:00.001-07:00</published><updated>2009-09-21T04:15:57.794-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='Fluent NHibernate'/><title type='text'>Fluent NHibernate HasOne Mappings</title><content type='html'>&lt;p&gt;Every now and then you might work with a system that needs to represent a one to one mapping.&amp;#160; This does not occur too often, something that was evident when I did a quick search on Fluent NHibernate’s HasOne mapping action.&lt;/p&gt;  &lt;p&gt;Say you have something like the following relationship.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_CsLu6MHVy_A/SrdgaSUfE4I/AAAAAAAAAF4/GuQGN-8avak/s1600-h/image%5B6%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_CsLu6MHVy_A/SrdgbA7M-RI/AAAAAAAAAF8/AflWq0AIqaU/image_thumb%5B2%5D.png?imgmax=800" width="549" height="156" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You might have a mapping like the following&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public class NutMap : ClassMap&amp;lt;Nut&amp;gt;     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public NutMap()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Id(x =&amp;gt; x.Id)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .GeneratedBy      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Identity(); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; HasOne(x =&amp;gt; x.Bolt)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .ForeignKey(&amp;quot;FK_Bolt_to_Map&amp;quot;)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Cascade.All(); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;} &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public class BoltMap : ClassMap&amp;lt;Bolt&amp;gt;     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public BoltMap()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Id(x =&amp;gt; x.Id)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .GeneratedBy      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Identity(); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; HasOne(x =&amp;gt; x.Nut)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .ForeignKey(&amp;quot;FK_Bolt_to_Map&amp;quot;)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Cascade.All(); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;It all works as expected.&amp;#160; One situation I ran into was when a two tables were using the same identifier.&amp;#160; In that case the following code may help.&amp;#160; This is especially helpful in legacy systems which may have normalised tables and when a foreign key represents this one to one link .&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;Id(x =&amp;gt; x.Id).GeneratedBy.Foreign(&amp;quot;Property on the entity being mapped who’s id the entity being mapped should use&amp;quot;)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-8328703490701827911?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/8328703490701827911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=8328703490701827911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8328703490701827911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8328703490701827911'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/09/fluent-nhibernate-hasone-mappings.html' title='Fluent NHibernate HasOne Mappings'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_CsLu6MHVy_A/SrdgbA7M-RI/AAAAAAAAAF8/AflWq0AIqaU/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-1937832819214210110</id><published>2009-09-09T03:22:00.001-07:00</published><updated>2009-09-09T03:22:02.949-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>WCF &amp; IIS Metadata</title><content type='html'>&lt;p&gt;The other day I was wondering why a new set of WCF services could not be accessed via an AJAX Web site.&amp;#160; These were REST endpoints and all I was receiving in JavaScript was a cryptic error message.&lt;/p&gt;  &lt;p&gt;First thing was to ensure the trusty old setting in WCF to ensure the faults were reported through to the client.&amp;#160; This can be done in either the service behaviour or the debug settings for the endpoint.&lt;/p&gt;  &lt;p&gt;No luck :( &lt;/p&gt;  &lt;p&gt;After further investigation, I realised that IIS and WCF was not registering the correctly for ISAPI.&amp;#160; It was then a case of running the install for WCF for IIS (ServiceModelReg.exe) and all was great.&lt;/p&gt;  &lt;p&gt;Thinking back now, I was screwing with some handlers and settings in IIS.&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Install WCF for IIS&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms732012.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms732012.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Include Exceptions&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.includeexceptiondetailinfaults.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.includeexceptiondetailinfaults.aspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-1937832819214210110?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/1937832819214210110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=1937832819214210110' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/1937832819214210110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/1937832819214210110'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/09/wcf-iis-metadata.html' title='WCF &amp;amp; IIS Metadata'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-5452741487202063739</id><published>2009-09-09T03:04:00.001-07:00</published><updated>2009-09-09T03:04:46.846-07:00</updated><title type='text'>B2B 2009</title><content type='html'>&lt;p&gt;Well the 2009 Bridge to Brisbane is done and dusted and results are in.&amp;#160; Unfortunately a little over a minute on last time.&amp;#160; I guess there is always next year and hopefully no more 30th Birthdays the night before&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_CsLu6MHVy_A/Sqd9ubUD5tI/AAAAAAAAAFw/GRV7hP4cs78/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_CsLu6MHVy_A/Sqd9vTUbHUI/AAAAAAAAAF0/6JmTxt56fAo/image_thumb%5B1%5D.png?imgmax=800" width="659" height="211" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-5452741487202063739?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/5452741487202063739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=5452741487202063739' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5452741487202063739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5452741487202063739'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/09/b2b-2009.html' title='B2B 2009'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_CsLu6MHVy_A/Sqd9vTUbHUI/AAAAAAAAAF0/6JmTxt56fAo/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-2585137801001138667</id><published>2009-08-26T03:44:00.001-07:00</published><updated>2009-08-26T03:50:32.590-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='Linq'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Linq 2 Twitter</title><content type='html'>&lt;p&gt;I decided to have a play the other day with &lt;a href="http://www.codeplex.com/LinqToTwitter"&gt;LinqToTwitter&lt;/a&gt;.&amp;#160; I know that it has been around for some time however I had not had a good look at it.&lt;/p&gt;  &lt;p&gt;The code base available on &lt;a href="http://www.codeplex.com/LinqToTwitter"&gt;Codeplex&lt;/a&gt;, shows the ins and outs as well as two nice demos for a console app and a web site.&lt;/p&gt;  &lt;p&gt;I created a small console app within 5 minutes of downloading the source.&amp;#160; The code below shows a quick snippet of how to use this API&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/SpUTdOzYxgI/AAAAAAAAAFk/IaHnmR_0ogA/s1600-h/COde%5B1%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="COde" border="0" alt="COde" src="http://lh5.ggpht.com/_CsLu6MHVy_A/SpUSHuLdRdI/AAAAAAAAAFo/b5CYIRxx7Gs/COde_thumb.jpg?imgmax=800" width="732" height="350" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/SpUSIkOS5EI/AAAAAAAAAFc/efbacuH2uT4/s1600-h/console%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="console" border="0" alt="console" src="http://lh5.ggpht.com/_CsLu6MHVy_A/SpUSJaaG63I/AAAAAAAAAFg/lOe2jKJV2eA/console_thumb%5B1%5D.jpg?imgmax=800" width="737" height="291" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeplex.com/site/users/view/JoeMayo"&gt;Joe Mayo&lt;/a&gt; has done a great job on this.&lt;/p&gt;  &lt;p&gt;Get amongst it!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-2585137801001138667?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/2585137801001138667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=2585137801001138667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2585137801001138667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2585137801001138667'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/08/linq-2-twitter.html' title='Linq 2 Twitter'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_CsLu6MHVy_A/SpUSHuLdRdI/AAAAAAAAAFo/b5CYIRxx7Gs/s72-c/COde_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-3859436871076317492</id><published>2009-08-26T02:47:00.001-07:00</published><updated>2009-08-26T02:47:59.490-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IIS'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Damn you double hop</title><content type='html'>&lt;p&gt;Recently I came across the ‘old’ double hop authentication issue with IIS.&amp;#160; I have solved this numerous times in the past at previous roles, however it always took longer than needed.&amp;#160; &lt;/p&gt;  &lt;p&gt;In this case I was saved by a colleague that knew of the Authentication and Access Control Diagnostics tool.&amp;#160; Quite simply it helps diagnose these exact issues.&amp;#160; With a nice clean interface, it helped us on our way in no time.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/SpUEyjPy9nI/AAAAAAAAAFM/oT5ijl1x1TM/s1600-h/144955_large%5B1%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="144955_large" border="0" alt="144955_large" src="http://lh6.ggpht.com/_CsLu6MHVy_A/SpUEziKmVwI/AAAAAAAAAFQ/0bhLaABYWuY/144955_large_thumb%5B1%5D.jpg?imgmax=800" width="684" height="514" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Link for the x86 version, x64 is also available.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=e90fe777-4a21-4066-bd22-b931f7572e9a&amp;amp;displaylang=en"&gt;http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=e90fe777-4a21-4066-bd22-b931f7572e9a&amp;amp;displaylang=en&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-3859436871076317492?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/3859436871076317492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=3859436871076317492' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3859436871076317492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3859436871076317492'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/08/damn-you-double-hop.html' title='Damn you double hop'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_CsLu6MHVy_A/SpUEziKmVwI/AAAAAAAAAFQ/0bhLaABYWuY/s72-c/144955_large_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-5167786253881680340</id><published>2009-07-16T01:19:00.001-07:00</published><updated>2009-07-16T01:19:29.279-07:00</updated><title type='text'>B2B</title><content type='html'>&lt;p&gt;Well its that time of the year again for the &lt;a href="http://www.bridgetobrisbane.com.au/"&gt;Bridge to Brisbane&lt;/a&gt;.&amp;#160; I am not as fit as I was back in the days of the Mighty &lt;a href="http://www.sportingpulse.com/club_info.cgi?sportid=4&amp;amp;client=1-109-36633-0-0"&gt;Morningside Panthers&lt;/a&gt;, however I will give it another go.&lt;/p&gt;  &lt;p&gt;Last year was a reasonable time running in the Yellow Group and I hope to improve on that.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/Sl7iizzIxjI/AAAAAAAAAFE/7D_PJvCeeKA/s1600-h/B2B%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="B2B" border="0" alt="B2B" src="http://lh5.ggpht.com/_CsLu6MHVy_A/Sl7ikBjavhI/AAAAAAAAAFI/dCyjRNX3jHs/B2B_thumb%5B1%5D.png?imgmax=800" width="757" height="421" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This year I’m in the red group (above yellow) so I am hoping I can cut it. Results to follow. &lt;/p&gt;  &lt;p&gt;Get Amongst It!!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-5167786253881680340?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/5167786253881680340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=5167786253881680340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5167786253881680340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5167786253881680340'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/07/b2b.html' title='B2B'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_CsLu6MHVy_A/Sl7ikBjavhI/AAAAAAAAAFI/dCyjRNX3jHs/s72-c/B2B_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-884600959098768778</id><published>2009-07-01T05:42:00.001-07:00</published><updated>2009-07-01T05:42:14.205-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='Fluent NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>NHibernate Schema Export</title><content type='html'>&lt;p&gt;In my experience developers normally fit into two categories in relation to developing applications that interact with a database.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Data Up - &lt;/strong&gt;&lt;em&gt;Build the database, then work from up from the schema to relate domain objects and their relationships&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Domain Down -&lt;em&gt; &lt;/em&gt;&lt;/strong&gt;&lt;em&gt;Build the domain model, then work down to the schema ensuring the data from the domain is persisted&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Both have their pros &amp;amp; cons.&amp;#160; &lt;a href="http://nhforge.org/Default.aspx"&gt;NHibernate&lt;/a&gt; is just one tool that helps fill the void no matter which type the developer is. However there is one feature of this tool that I find useful and saves a lot of time&lt;/p&gt;  &lt;p&gt;Using the code example (Examples.FirstProject) from the &lt;a href="http://code.google.com/p/fluent-nhibernate/"&gt;Fluent NHibernate&lt;/a&gt; source we have the following domain.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/SktZmgPEvuI/AAAAAAAAAE0/F2oYof0Y38Y/s1600-h/Domain3.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Domain" border="0" alt="Domain" src="http://lh6.ggpht.com/_CsLu6MHVy_A/SktZnaZlgqI/AAAAAAAAAE4/xMtwdxaoPPA/Domain_thumb1.jpg?imgmax=800" width="415" height="431" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;By using the fluent configuration code below we can build up the mappings and export the schema (check the mapping files in the Examples.FirstProject)&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;Configuration configuration      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; = Fluently.Configure()       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Database       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (MsSqlConfiguration.MsSql2005       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .ConnectionString(conn =&amp;gt; conn.FromConnectionStringWithKey(&amp;quot;ExampleConnectionString&amp;quot;)))       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Mappings(m =&amp;gt; m.FluentMappings.AddFromAssemblyOf&amp;lt;Program&amp;gt;())       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .BuildConfiguration(); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;new SchemaExport(configuration).Create(true, true);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;When this is run, the following schema is created&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/SktZoWD4HcI/AAAAAAAAAE8/aoQeWuPBA3Q/s1600-h/Schema4.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Schema" border="0" alt="Schema" src="http://lh4.ggpht.com/_CsLu6MHVy_A/SktZpbl7ZfI/AAAAAAAAAFA/0-tB4CQvViw/Schema_thumb2.jpg?imgmax=800" width="651" height="476" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Guess which type of developer I am.&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-884600959098768778?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/884600959098768778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=884600959098768778' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/884600959098768778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/884600959098768778'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/07/nhibernate-schema-export.html' title='NHibernate Schema Export'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_CsLu6MHVy_A/SktZnaZlgqI/AAAAAAAAAE4/xMtwdxaoPPA/s72-c/Domain_thumb1.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-2021050915418698238</id><published>2009-06-18T14:28:00.001-07:00</published><updated>2009-06-18T14:29:05.787-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodeRun'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>CodeRun Application Samples</title><content type='html'>&lt;p&gt;I came across this site recently, it provides examples across a range of technologies but with a difference.&amp;#160; It shows an IDE and allows for compilation etc.&amp;#160; Check it out, imagine this combined with &lt;a href="http://stackoverflow.com/"&gt;StackOverFlow&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/SjqxiS6LjeI/AAAAAAAAAEs/MO-ankRHGZQ/s1600-h/coderun%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="coderun" border="0" alt="coderun" src="http://lh5.ggpht.com/_CsLu6MHVy_A/SjqxjR3hp9I/AAAAAAAAAEw/ZISIwRyk8kM/coderun_thumb%5B1%5D.jpg?imgmax=800" width="720" height="532" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.coderun.com/"&gt;http://www.coderun.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-2021050915418698238?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/2021050915418698238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=2021050915418698238' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2021050915418698238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2021050915418698238'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/06/coderun-application-samples.html' title='CodeRun Application Samples'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_CsLu6MHVy_A/SjqxjR3hp9I/AAAAAAAAAEw/ZISIwRyk8kM/s72-c/coderun_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-4578200624577690495</id><published>2009-06-18T04:51:00.001-07:00</published><updated>2009-06-18T04:51:59.279-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Fluent Interface'/><category scheme='http://www.blogger.com/atom/ns#' term='NBuilder'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Test Data and NBuilder</title><content type='html'>&lt;p&gt;Test Data is a strange beast. Good tests need good data. I am sure most developers have bashed away with classes and other methods to provide meaningful and reliable test data. Some times its easy, sometimes is hard.&lt;/p&gt;  &lt;p&gt;I have been using a little gem of a interface called &lt;a href="http://nbuilder.org/"&gt;NBuilder&lt;/a&gt; for some time now and think its a good tool to have in a developers bag. I am not sure what other frameworks are out there but this is a good starting point. &lt;/p&gt;  &lt;p&gt;Lets say you had the following classes with some rules around certain properties.&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public class Team     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public Team()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Players = new List&amp;lt;Player&amp;gt;();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public int TeamId { get; set; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public string Name { get; set; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public IList&amp;lt;Player&amp;gt; Players { get; set; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public int CountOfCrazyOldLeftHanders     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; get      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return Players.Where(x =&amp;gt; x.Type == PlayerType.CrazyOldLeftHander).Count();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public void AddPlayer(Player player)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Players.Add(player);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;} &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public class Player     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public int PlayerId { get; set; }&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public bool IsRightHanded { get; set; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public DateTime BirthDate { get; set; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public int Height { get; set; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public PlayerType Type     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; get      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var type = PlayerType.Normal;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (!IsRightHanded &amp;amp;&amp;amp; BirthDate &amp;lt;= DateTime.Today.AddYears(-100))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type = PlayerType.CrazyOldLeftHander; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return type;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;} &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public enum PlayerType     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Normal,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CrazyOldLeftHander      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Then you wanted to test this for many variations.&amp;#160; NBuilder can help.&lt;/p&gt;  &lt;p&gt;Below are some samples (there are more on the wiki)&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;var generator = new UniqueRandomGenerator(); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;var reallyOldPlayers = Builder&amp;lt;Player&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; .CreateListOfSize(20)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; .WhereTheFirst(10)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Have(x=&amp;gt; x.IsRightHanded = false)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .And(x=&amp;gt; x.BirthDate = DateTime.Today.AddYears(-200))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .And(x =&amp;gt; x.Height = generator.Next(1,200))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; .AndTheNext(10)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Have(x =&amp;gt; x.IsRightHanded = true)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .And(x =&amp;gt; x.BirthDate = The.Year(1980).On.July.The26th.At(2,00))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; .Build();&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;var teams = Builder&amp;lt;Team&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; .CreateListOfSize(10)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .WhereAll()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .HaveDoneToThem(x=&amp;gt; x.AddPlayer(Pick&amp;lt;Player&amp;gt;.RandomItemFrom(reallyOldPlayers)))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; .Build();&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;I am sure you get&lt;/font&gt; the idea.&amp;#160; Check it out, have a look and never have to setup huge test data ever again.&lt;/p&gt;  &lt;p&gt;Get Amongst It!!!!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-4578200624577690495?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/4578200624577690495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=4578200624577690495' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4578200624577690495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4578200624577690495'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/06/test-data-and-nbuilder.html' title='Test Data and NBuilder'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-3575699962496978388</id><published>2009-06-12T00:32:00.000-07:00</published><updated>2009-06-17T04:12:39.461-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>WPF vs Silverlight</title><content type='html'>Wintellect just realeased their guidance re WPF and Silverlight, worth a read.&lt;br /&gt;&lt;br /&gt;http://wpfslguidance.codeplex.com/&lt;br /&gt;&lt;br /&gt;Get amongst it!!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-3575699962496978388?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/3575699962496978388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=3575699962496978388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3575699962496978388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3575699962496978388'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/06/wpf-vs-silverlogjt.html' title='WPF vs Silverlight'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-8592935353012680060</id><published>2009-05-28T05:38:00.000-07:00</published><updated>2009-05-28T05:54:12.353-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='Fluent NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Fluent NHibernate with Stored Procedures Mark II</title><content type='html'>Recently I updated the configuration in one of my apps that was using stored procedures along with Fluent Mappings.  Still not sure if the stored procs can be done another way&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is my new session factory code&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Configuration cfg = new Configuration().Configure();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ISessionFactory sessionFactory = Fluently.Configure(cfg)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: normal; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="color:#FF9966;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FF9966;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;//Do the SQL Server Stuff&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;.Database &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;(MsSqlConfiguration.MsSql2005&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;.ConnectionString(conn =&gt; conn.FromConnectionStringWithKey("MyKillerApplication")) &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;.Cache(c =&gt; c.UseQueryCache() &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;.ProviderClass&lt;/span&gt;&lt;hashtablecacheprovider&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;() &lt;/span&gt;&lt;/hashtablecacheprovider&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;.UseMininmalPuts()) &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;) &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="color:#FF9966;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FF9966;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;//Add the fluent mappings &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;.Mappings(&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;m =&gt; m.FluentMappings.AddFromAssembly((&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#330099;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;typeof &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;(MySessionManager).Assembly)) &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="color:#FF9966;"&gt;//Table convention, great when you have some sort of coding&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FF9966;"&gt; standard in the dbase&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;.ConventionDiscovery.AddFromAssemblyOf&lt;/span&gt;&lt;sqltableconvention&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;()) &lt;/span&gt;&lt;/sqltableconvention&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="color:#FF9966;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FF9966;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;//Add traditional xml mappings &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;.Mappings(xml=&gt; xml.HbmMappings.AddFromAssembly(&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#330099;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;typeof&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; (MySessionManager).Assembly)) &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="color:#FF9966;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FF9966;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;//Build it up buttercup &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;.BuildSessionFactory();&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Get Amongst It!!!!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-8592935353012680060?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/8592935353012680060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=8592935353012680060' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8592935353012680060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8592935353012680060'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/05/fluent-nhibernate-with-stored.html' title='Fluent NHibernate with Stored Procedures Mark II'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-5539903921561676818</id><published>2009-05-22T16:25:00.000-07:00</published><updated>2009-05-22T16:27:44.814-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>When Agile Goes Wrong</title><content type='html'>Someone sent me this &lt;a href="http://www.youtube.com/watch?v=l1wKO3rID9g"&gt;link &lt;/a&gt;the other day.  I have seen similar ones before with Xbox live and other content however I had to laugh as the other day I added ignore to some tests that were failing due to data.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-5539903921561676818?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/5539903921561676818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=5539903921561676818' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5539903921561676818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5539903921561676818'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/05/when-agile-goes-wrong.html' title='When Agile Goes Wrong'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-4113323784030019298</id><published>2009-05-22T16:21:00.001-07:00</published><updated>2009-05-22T16:24:52.311-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><title type='text'>New Phone</title><content type='html'>Well I got around to getting a new phone.  I was initially not convinced with windows mobile however now I am thinking differently.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I ended up with the HTC Touch &lt;a href="http://www.htc.com/www/product/touchdiamond2/overview.html"&gt;Diamond2&lt;/a&gt;.  Its an update on the orignal with a better camera, battery life and looks and feels very similar to the HD.  Running windows mobile 6.1 should be interesting however with the touch flo style of the HTC you hardly know its there.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next is finding some good apps and changing phone companies.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-4113323784030019298?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/4113323784030019298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=4113323784030019298' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4113323784030019298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4113323784030019298'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/05/new-phone.html' title='New Phone'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-5767271033616076486</id><published>2009-05-17T17:58:00.000-07:00</published><updated>2009-05-17T18:09:49.806-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Environment Development'/><title type='text'>New Developer PCs</title><content type='html'>Today we upgraded our development PCs, its been a while coming however it should be a nice performance increase to help our productivity.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Current Developer Environment&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="text-decoration: underline;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Developer VM&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Window 2k3 Server&lt;/li&gt;&lt;li&gt;Single Core 2 @1.86 Ghz&lt;/li&gt;&lt;li&gt;1.48GB RAM &lt;/li&gt;&lt;li&gt;10 GB HD&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Running on &lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Windows XP Pro&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Single Core 2 @1.86 Ghz&lt;/li&gt;&lt;li&gt;3 GB RAM&lt;/li&gt;&lt;li&gt;20 Gig HD&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;New Developer PCs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Windows Vista x64&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Core 2 Quad Core@ 3 Ghz&lt;/li&gt;&lt;li&gt;8GB RAM&lt;/li&gt;&lt;li&gt;60 Gig hD&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-5767271033616076486?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/5767271033616076486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=5767271033616076486' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5767271033616076486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5767271033616076486'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/05/new-developer-pcs.html' title='New Developer PCs'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-4734613600813232224</id><published>2009-05-10T19:02:00.000-07:00</published><updated>2009-05-10T19:11:30.739-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Resharper'/><title type='text'>Resharper 4.5 Shortcuts</title><content type='html'>Resharper 4.5 has been out for some time.  And the shortcuts guides have been updated.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Get amongst it!!! &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.jetbrains.com/resharper/documentation/documentation.html"&gt;http://www.jetbrains.com/resharper/documentation/documentation.html&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-4734613600813232224?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/4734613600813232224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=4734613600813232224' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4734613600813232224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4734613600813232224'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/05/resharper-45-shortcuts.html' title='Resharper 4.5 Shortcuts'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-3945488498454295545</id><published>2009-05-08T16:51:00.000-07:00</published><updated>2009-05-08T19:33:20.677-07:00</updated><title type='text'>Talk Time</title><content type='html'>Well yesterday I had my phone in  my pocket and knocked into a table rendering the screen useless.  So its now time to find a new phone.  Question is.... what phone.&lt;div&gt; &lt;/div&gt;&lt;div&gt;Here is a current shortlist, are there any others out there  worth looking at in the Aussie market.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;IPhone (of course, but it is getting dated??)&lt;/li&gt;&lt;li&gt;Sony Ericson&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Xperia (Windows mobile, not sure about that)&lt;/li&gt;&lt;li&gt;LG KM 900 Arena&lt;/li&gt;&lt;li&gt;HTC Diamonnd&lt;/li&gt;&lt;li&gt;Nokia N85, N96&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;By the way great review website - http://youcompare.com.au/mobilephones&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-3945488498454295545?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/3945488498454295545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=3945488498454295545' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3945488498454295545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3945488498454295545'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/05/talk-time.html' title='Talk Time'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-3168304407100891691</id><published>2009-05-07T03:25:00.000-07:00</published><updated>2009-05-07T03:53:58.137-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>NHibernate and WCF</title><content type='html'>I came across a bit of a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;peculiar&lt;/span&gt; issue the other day.  I have been working with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;NHibernate&lt;/span&gt; for some time and had little to know issues (especially with mapping with Fluent &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;NHibernate&lt;/span&gt;). &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However recently I hit an issue with serialisation of my &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;POCO&lt;/span&gt; classes.  I had a particular class that was being used across a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;WCF&lt;/span&gt; service (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;wsHttp&lt;/span&gt;) however when I added the persistence layer the service call no longer worked.  It ended up being the proxy class that was being created by &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;NHibernate&lt;/span&gt; and inheriting from  my &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;POCO&lt;/span&gt; class.  It had some non &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;serialisable&lt;/span&gt; properties.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next time you are using &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;NHibernate&lt;/span&gt;, set a break point on your &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;POCO&lt;/span&gt; class and check out what is under the hood.  You can learn a lot.&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-3168304407100891691?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/3168304407100891691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=3168304407100891691' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3168304407100891691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3168304407100891691'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/05/nhibernate-and-wcf.html' title='NHibernate and WCF'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-8292345297724493458</id><published>2009-04-08T16:35:00.001-07:00</published><updated>2009-05-22T16:25:14.415-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Application Architecture'/><title type='text'>Being an Architect is not always about being an Architect</title><content type='html'>&lt;p&gt; A friend of mine sent me this &lt;a href="http://msdn.microsoft.com/en-us/library/bb402956.aspx"&gt;link&lt;/a&gt; which was poignant in current circumstances.  As I learn more over time, truly being an architect is less about technology. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-8292345297724493458?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/8292345297724493458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=8292345297724493458' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8292345297724493458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8292345297724493458'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/04/being-architect-is-not-always-about.html' title='Being an Architect is not always about being an Architect'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-2145566353160752546</id><published>2009-03-18T15:03:00.001-07:00</published><updated>2009-03-19T03:07:58.702-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='Fluent NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Ask and you shall receive</title><content type='html'>&lt;p&gt;Just like all developers, I have hacked around with problems always thinking I will solve it quickly.&amp;#160; Yesterday I had an issue with &lt;a href="http://fluentnhibernate.org/"&gt;FluentNHibernate&lt;/a&gt;, so after a while I though I would give &lt;a href="http://stackoverflow.com/"&gt;StackOverflow&lt;/a&gt; a go.&amp;#160; After all its got some great noise lately.&lt;/p&gt;  &lt;p&gt;What I love about this site, is its ease of use and the fact even the guru's use it.&amp;#160; I ask my question then &lt;strike&gt;12hrs&lt;/strike&gt; 3 hrs later the guy that wrote Fluent answers my question.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-2145566353160752546?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/2145566353160752546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=2145566353160752546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2145566353160752546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2145566353160752546'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/03/ask-and-you-shall-receive.html' title='Ask and you shall receive'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-7674846767466784257</id><published>2009-03-16T23:59:00.001-07:00</published><updated>2009-03-18T02:15:07.443-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Extension Methods'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>More Extension Methods</title><content type='html'>&lt;p&gt;Here are some more extension methods I have created recently.&amp;#160; I am trying to make my code as readable as possible as well as self documenting.&lt;/p&gt;  &lt;p&gt;Below are two extension methods and examples of their use when using Linq &amp;amp; Lambda.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Updated Code(thks Tim.Bellette.Net)&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;div&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;/div&gt; &lt;/div&gt;  &lt;div&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; isLessThanOrEqualTo(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt; DateTime d, DateTime dateTimeToCompare) &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; { &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; isLessThanOrEqualTo = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (d &amp;lt;= dateTimeToCompare) &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;     { &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;         isLessThanOrEqualTo = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;     } &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; isLessThanOrEqualTo; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt; } &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; isGreaterThanOrEqualTo(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt; DateTime d, DateTime dateTimeToCompare) &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt; { &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; isGreaterThanOrEqualTo = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (d &amp;gt;= dateTimeToCompare) &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;     { &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;         isGreaterThanOrEqualTo = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  20:&lt;/span&gt;     } &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  22:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; isGreaterThanOrEqualTo;            &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  23:&lt;/span&gt; } &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  24:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  25:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Test() &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  26:&lt;/span&gt; { &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  27:&lt;/span&gt;     IList&amp;lt;Journal&amp;gt; journals = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; List&amp;lt;Journal&amp;gt;(); &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  28:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  29:&lt;/span&gt;     &lt;span style="color: #008000"&gt;//Lambda &lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  30:&lt;/span&gt;     journals.AsQueryable().Where(x =&amp;gt; x.DateEntered.isGreaterThanOrEqualTo(DateTime.Now)); &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  31:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  32:&lt;/span&gt;     &lt;span style="color: #008000"&gt;//Linq &lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  33:&lt;/span&gt;     var a = from j &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; journals.AsQueryable() &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  34:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;where&lt;/span&gt; j.DateEntered.isGreaterThanOrEqualTo(DateTime.Now) &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  35:&lt;/span&gt;             select j; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  36:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-7674846767466784257?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/7674846767466784257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=7674846767466784257' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/7674846767466784257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/7674846767466784257'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/03/more-extension-methods.html' title='More Extension Methods'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-5509827333495124064</id><published>2009-03-03T15:41:00.001-08:00</published><updated>2009-03-03T15:41:11.208-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='Application Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and Practices'/><title type='text'>Fresh Technical Resources</title><content type='html'>&lt;p&gt;I have never been a super strong in design patterns and recently thought I should brush up on some content. Many developers would have been exposed to the Gang of Four patterns and possibly Mr Fowler’s &lt;a href="http://www.amazon.com/Enterprise-Application-Architecture-Addison-Wesley-Signature/dp/0321127420"&gt;Patterns of Enterprise Application Architecture&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;So looking for some new fresh resources I have picked up the following &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Dino Esposito’s &lt;a href="http://www.amazon.com/Enterprise-Application-Architecture-Addison-Wesley-Signature/dp/0321127420"&gt;book&lt;/a&gt; from MS, this is a good example of Fowler’s patterns applied to .Net&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.dofactory.com/Framework/Framework.aspx"&gt;DoFactory’s Pattern’s examples&lt;/a&gt; (specific to .net 3.5 including MVVM)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I also picked up the &lt;a href="http://www.amazon.com/NHibernate-Action-Pierre-Henri-Kuat&amp;eacute;/dp/1932394923"&gt;NHibernate in Action&lt;/a&gt; as a reference to sit by my desk.&lt;/p&gt;  &lt;p&gt;So far they have been a nice refresher on things I have not used for a while.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-5509827333495124064?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/5509827333495124064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=5509827333495124064' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5509827333495124064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5509827333495124064'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/03/fresh-technical-resources.html' title='Fresh Technical Resources'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-8444183570197895583</id><published>2009-02-25T17:03:00.001-08:00</published><updated>2009-02-25T17:06:06.585-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Extension Methods'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>My Extension Method of the Day</title><content type='html'>&lt;p&gt;Following Dazza's &lt;a href="http://darrynp.blogspot.com/2009/02/extension-method-of-day.html"&gt;post&lt;/a&gt; here is my extension method.&amp;#160; Similar to his its on the good old string class.&amp;#160; Now... what about the Damo method&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/SaXqSZHSSaI/AAAAAAAAADc/tqOkeYOWo1Q/s1600-h/StringExtension%5B1%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="157" alt="StringExtension" src="http://lh6.ggpht.com/_CsLu6MHVy_A/SaXqUHBEgEI/AAAAAAAAADg/5pS5L231YPA/StringExtension_thumb%5B1%5D.png?imgmax=800" width="384" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-8444183570197895583?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/8444183570197895583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=8444183570197895583' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8444183570197895583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8444183570197895583'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/02/my-extension-method-of-day.html' title='My Extension Method of the Day'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_CsLu6MHVy_A/SaXqUHBEgEI/AAAAAAAAADg/5pS5L231YPA/s72-c/StringExtension_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-8943023218426132897</id><published>2009-02-16T21:51:00.001-08:00</published><updated>2009-03-17T04:22:03.936-07:00</updated><title type='text'>Version Helper</title><content type='html'>&lt;p&gt;I was doing some work and was needing the version and name of assemblies all over the place.&amp;#160; &lt;/p&gt;  &lt;p&gt;So to instead of writing code like typeof etc I wrote a set of simple extension methods.&lt;/p&gt;  &lt;p&gt;Below is a quick example.&lt;/p&gt;    &lt;div&gt;&lt;div style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%;"&gt; &lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em; background-color: white;"&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; Extensions&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em;"&gt;{&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em; background-color: white;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; AssemblyName(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; o)&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em;"&gt;    {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em; background-color: white;"&gt;        &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; name = o.GetType().AssemblyQualifiedName;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em;"&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; name;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em; background-color: white;"&gt;    }&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em;"&gt;}&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em; background-color: white;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em;"&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; MyClass&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em; background-color: white;"&gt;{&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; GetInfo()&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em; background-color: white;"&gt;    {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em;"&gt;        &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; info = &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.AssemblyName();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em; background-color: white;"&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; info;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em;"&gt;    }&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; font-family: Consolas, 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt;  border-style: none; color: black; overflow: visible; padding: 0px 0px 0px 0px; width: 100%; margin: 0em; background-color: white;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-8943023218426132897?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/8943023218426132897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=8943023218426132897' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8943023218426132897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8943023218426132897'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/02/version-helper.html' title='Version Helper'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-5504128566705943053</id><published>2009-02-11T22:37:00.001-08:00</published><updated>2009-02-11T22:40:52.782-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='Fluent NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Fluent NHibernate with Stored Procedures</title><content type='html'>&lt;p&gt;In one of my projects we are looking to use Fluent NHibernate, on occasion we will need to use stored procedures for data access.&lt;/p&gt;  &lt;p&gt;As Fluent NHibernate does not yet support stored procs I was working on a way around this.&amp;#160; Our situation is an 80/20 rule, most of the time the fluent mapping will do the job.&amp;#160; I just wanted to make sure that we could cover both bases.&lt;/p&gt;  &lt;p&gt;People familiar with NHibernate will know the .hbm.xml file.&amp;#160; An embedded resource that is used to map the classes to the repository.&amp;#160; This is effectively what the Fluent framework replaces.&amp;#160; So in my case I need both Fluent and traditional NHibernate.&amp;#160; This is the current method (possible a hack) I have.&lt;/p&gt;  &lt;p&gt;//Create the config   &lt;br /&gt;NHibernate.config.Configuration config = new Configuration().Configure(); &lt;/p&gt;  &lt;p&gt;//Add Fluent Mapping   &lt;br /&gt;var persistenceModel = new FluentNHibernate.PersistenceModel();&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;persistenceModel.addMappingsFromAssembly((typeof(SessionManager).Assembly));     &lt;br /&gt;persistenceModel.Configure(config); &lt;/p&gt;  &lt;p&gt;//Add Traditional NHIbernate Mapping    &lt;br /&gt;//This method as per doco &amp;quot;Adds all of the assembly's embedded resources whose names end with .hbm.xml.&amp;quot;    &lt;br /&gt;config.AddAssembly(typeof(SessionManager).Assembly); &lt;/p&gt;  &lt;p&gt;//Build the session   &lt;br /&gt;return config.BuildSessionFactory();&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-5504128566705943053?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/5504128566705943053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=5504128566705943053' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5504128566705943053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5504128566705943053'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/02/fluent-nhibernate-with-stored.html' title='Fluent NHibernate with Stored Procedures'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-2798045961678229268</id><published>2009-02-11T15:17:00.001-08:00</published><updated>2009-02-11T15:20:58.752-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='Application Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Fluent NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='ORM'/><title type='text'>Entity Framework…. How I love thee (not really)</title><content type='html'>&lt;p&gt;Daz just &lt;a href="http://darrynp.blogspot.com/2009/02/me-versus-microsofts-entity-framework.html"&gt;posted&lt;/a&gt; about his challenges with Microsoft’s Entity Framework.&amp;#160; I have recently experienced similar issues, and as such I am in the process of evaluating a number of data access and ORM tools.&lt;/p&gt;  &lt;p&gt;At number one is NHibernate.&amp;#160; I never really liked NHibernate with all its crappy XML configuration. Things have changed thanks to &lt;a href="http://fluentnhibernate.org/"&gt;Fluent NHibernate&lt;/a&gt; and Linq to NHibernate.&lt;/p&gt;  &lt;p&gt;So… following on from my posts on Inversion of Control and Dependency Injection, I am going to continue in a similar vain combining the Fluent NHibernate and Unity/Structure Map.&lt;/p&gt;  &lt;p&gt;Here is a quick look.&lt;/p&gt;  &lt;div&gt;A&amp;#160; Fluent NHibernate mapping file with the following&lt;/div&gt;  &lt;ul&gt;   &lt;li&gt;a table name different to a class&lt;/li&gt;    &lt;li&gt;SQL identity column &lt;/li&gt;    &lt;li&gt;simple text field.&lt;/li&gt;    &lt;li&gt;utilising the Fluent NHibernate mapping quick start infrastructure (eg. IMapGenerator)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;public class ShopMap : ClassMap&amp;lt;Shop&amp;gt;, Mapping.Helpers.IMapGenerator   &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public ShopMap()    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // For when the table name is different to a class    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WithTable(&amp;quot;Shop&amp;quot;);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Identity Column SQL Server    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Id(x =&amp;gt; x.Id)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .GeneratedBy    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Identity(); &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Simple text field   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Map(x =&amp;gt; x.ShopName); &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; #region IMapGenerator Members &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; public XmlDocument Generate()   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return CreateMapping(new MappingVisitor());    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; #endregion   &lt;br /&gt;}&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-2798045961678229268?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/2798045961678229268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=2798045961678229268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2798045961678229268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2798045961678229268'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/02/entity-framework-how-i-love-thee-not.html' title='Entity Framework…. How I love thee (not really)'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-5164306085727811854</id><published>2009-02-08T21:55:00.001-08:00</published><updated>2009-02-08T21:58:51.470-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>System.DateTime &amp; BC</title><content type='html'>&lt;p&gt;I have been doing development for some time, however never come across the following.&lt;/p&gt;  &lt;p&gt;Representing a BC date and time.&amp;#160; &lt;/p&gt;  &lt;p&gt;How is this best done??&amp;#160; Thoughts??&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-5164306085727811854?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/5164306085727811854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=5164306085727811854' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5164306085727811854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5164306085727811854'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/02/systemdatetime-bc.html' title='System.DateTime &amp;amp; BC'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-4097419226508847197</id><published>2009-02-05T12:43:00.001-08:00</published><updated>2009-02-05T12:43:13.169-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sport'/><category scheme='http://www.blogger.com/atom/ns#' term='NBA'/><title type='text'>Gotta Love 10 HD</title><content type='html'>&lt;p&gt;I am just loving the early signs of Channel 10’s HD sport channel.&amp;#160; Earlier this week was the Super Bowl after the NBA Pistons v Cavaliers.&lt;/p&gt;  &lt;p&gt;Today they are showing the NBA Finals rematch of &lt;a href="http://www.yourtv.com.au/guide/index.cfm?action=session_info&amp;amp;event_id=25635038&amp;amp;region_id=75&amp;amp;sid=&amp;amp;loc=grid"&gt;Lakers v Celtics&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;I can’t wait until April when they go 24/7.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-4097419226508847197?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/4097419226508847197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=4097419226508847197' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4097419226508847197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4097419226508847197'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/02/gotta-love-10-hd.html' title='Gotta Love 10 HD'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-4159588395805353891</id><published>2009-02-04T16:32:00.001-08:00</published><updated>2009-02-05T12:40:05.102-08:00</updated><title type='text'>Technical Spike Source Code</title><content type='html'>&lt;p&gt;I am about to start a technical spike and was creating an area to place it within my source code structure.&amp;#160; One thing that I dislike when some people do technical spikes is they throw away the code base.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;DON’T!!!!!!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Its intellectual property, and when you are working for a company it is valuable to back up any design decisions that stem from the spike.&lt;/p&gt;  &lt;p&gt;After all, its not your IP, its the companies.&lt;/p&gt;  &lt;p&gt;Rant complete&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-4159588395805353891?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/4159588395805353891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=4159588395805353891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4159588395805353891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4159588395805353891'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/02/technical-spike-source-code.html' title='Technical Spike Source Code'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-5347037563597614015</id><published>2009-02-04T02:30:00.001-08:00</published><updated>2009-02-04T02:46:32.759-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unity'/><category scheme='http://www.blogger.com/atom/ns#' term='Dependency Injection'/><category scheme='http://www.blogger.com/atom/ns#' term='IoC'/><category scheme='http://www.blogger.com/atom/ns#' term='Application Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Structure Map'/><title type='text'>IOC/DI – Part 2 of n</title><content type='html'>&lt;p&gt;After my first post I was thinking about the syntax of using Unity and Structure Map.&lt;/p&gt;  &lt;p&gt;In a previous role, chaining was thought of to be the devil , as such the syntactical differences of the two framework are interesting to compare.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Simply Registering of Types &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In this case, I don’t see too much of an issue&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Structure Map&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;ForRequestedType&amp;lt;IMyObject&amp;gt;().TheDefault.Is.OfConcreteType&amp;lt;MyObject&amp;gt;();&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Unity&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;Container.RegisterType&amp;lt;IMyObject, MyObject&amp;gt;();&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;However when you get into more complex situations e.g. Singletons, I believe Structure Map has an edge for readability.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Singletons&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Structure Map&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;ForRequestedType&amp;lt;IRouteConfigurer&amp;gt;()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; .AsSingletons()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; .TheDefault.Is.OfConcreteType&amp;lt;RouteConfigurer&amp;gt;();&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Unity&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;Container.RegisterType&amp;lt;IMyObject&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (MyObject, new ContainerControlledLifetimeManager());&lt;/font&gt;&lt;/p&gt; &lt;style type="text/css"&gt;&lt;br /&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;p&gt;Thoughts???&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-5347037563597614015?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/5347037563597614015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=5347037563597614015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5347037563597614015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/5347037563597614015'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/02/iocdi-part-2-of-n.html' title='IOC/DI – Part 2 of n'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-4647401621897659954</id><published>2009-02-01T22:44:00.001-08:00</published><updated>2009-02-02T01:48:10.926-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>WCF Tools</title><content type='html'>&lt;p&gt;One of my mates recently asked me a WCF question, I used to get a lot of these questions in my last role as I seemed to become the guy to talk to re: WCF.&lt;/p&gt;  &lt;p&gt;When I initially started working with WCF, I was often hacking around in the Web.Config.&amp;#160; I soon found the tools that make your life so much easier.&amp;#160; These tools can be found when using a vanilla Visual Studio install in C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\.&amp;#160; VS 2008 has the editor on the tools menu however the other you might need to create your own shortcut.&amp;#160; Below are screenshots of the respective tools.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;WCF Configuration Editor (SvcConfigEditor.exe)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_CsLu6MHVy_A/SYaV_0SHixI/AAAAAAAAAC8/NeIrwMkRC4w/s1600-h/image%5B4%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="453" alt="image" src="http://lh4.ggpht.com/_CsLu6MHVy_A/SYaWB6ZeGHI/AAAAAAAAADA/YNz8uhDIEM0/image_thumb%5B2%5D.png?imgmax=800" width="592" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;WCF Trace Viewer (SvcTraceViewer.exe)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_CsLu6MHVy_A/SYaWC4z2XwI/AAAAAAAAADE/PKO4oN-fua4/s1600-h/image%5B10%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="446" alt="image" src="http://lh3.ggpht.com/_CsLu6MHVy_A/SYaWEG8gItI/AAAAAAAAADI/UDlkQKO3AgM/image_thumb%5B6%5D.png?imgmax=800" width="610" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The viewer is a great diagnostic tool when WCF goes wrong.&amp;#160; Here is a quick example of how to use it.&amp;#160; I created a new WCF Project with a console client, added a service reference and code to wire up the client.&amp;#160; Firstly opening the web.config in the editor I turned on the tracing capabilities of WCF.&amp;#160; This can be done by clicking on the Diagnostics item, then enabling tracing.&amp;#160; (In this example, I set it to Verbose)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/SYaWFeB_TZI/AAAAAAAAADM/xwIogvrMfZo/s1600-h/image%5B19%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="546" alt="image" src="http://lh3.ggpht.com/_CsLu6MHVy_A/SYaWHWoDCqI/AAAAAAAAADQ/FA_WSytt2z8/image_thumb%5B11%5D.png?imgmax=800" width="714" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;After running the console app, the service logs to a trace file located in the root of the service.&amp;#160; Then using the trace viewer you can open up the file and view the output.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_CsLu6MHVy_A/SYaWJBjfc2I/AAAAAAAAADU/d7ItfgdKYvg/s1600-h/image%5B24%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="545" alt="image" src="http://lh4.ggpht.com/_CsLu6MHVy_A/SYaWL66m1yI/AAAAAAAAADY/SmjsqQDv5v0/image_thumb%5B14%5D.png?imgmax=800" width="817" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I have found this very helpful when things like authentication issues, and timeouts occur.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-4647401621897659954?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/4647401621897659954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=4647401621897659954' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4647401621897659954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4647401621897659954'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/02/wcf-tools.html' title='WCF Tools'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_CsLu6MHVy_A/SYaWB6ZeGHI/AAAAAAAAADA/YNz8uhDIEM0/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-234358168906248937</id><published>2009-01-26T20:45:00.001-08:00</published><updated>2009-01-26T20:45:11.943-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team Foundation Server'/><title type='text'>TFS - Workspaces</title><content type='html'>&lt;p&gt;I have been working with TFS lately and come across an issue when creating a new build for one of my projects.&amp;#160; As the build server runs under a server account the mapped workspace is under that users name.&amp;#160; After I created a new build I was receiving the &amp;quot;The workspace is already mapped.....&amp;quot;&amp;#160; &lt;/p&gt;  &lt;p&gt;I had solved this one before however could not remember the command line syntax.&amp;#160; So here it is.&lt;/p&gt;  &lt;p&gt;Firstly, open VS command prompt and using tf.exe&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;List all workspaces for all owners&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;tf workspaces /owner:*&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Delete unneeded workspace&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;tf workspace /delete /server:[servername] [workspacename];[ownername]&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-234358168906248937?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/234358168906248937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=234358168906248937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/234358168906248937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/234358168906248937'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/01/tfs-workspaces.html' title='TFS - Workspaces'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-3653126529582956658</id><published>2009-01-21T21:55:00.001-08:00</published><updated>2009-01-21T22:07:21.744-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dependency Injection'/><category scheme='http://www.blogger.com/atom/ns#' term='IoC'/><category scheme='http://www.blogger.com/atom/ns#' term='Application Architecture'/><title type='text'>IOC/DI - Part 1 of n</title><content type='html'>&lt;p&gt;Recently I have been doing a lot of work lately in relation to Inversion of Control (&lt;a href="http://en.wikipedia.org/wiki/Inversion_of_Control"&gt;IOC&lt;/a&gt;) and dependency injection.&amp;#160; As I go, I am having many Aaaha moments.&amp;#160; So I thought that I might start blogging about my experiences.&lt;/p&gt;  &lt;p&gt;The two main frameworks I have working with are &lt;a href="http://structuremap.sourceforge.net/Default.htm"&gt;Structure Map&lt;/a&gt; and &lt;a href="http://www.codeplex.com/unity"&gt;Unity&lt;/a&gt;.&amp;#160; Both have their strengths and weaknesses (IMO).&lt;/p&gt;  &lt;p&gt;I am working using the IOC within two scopes, firstly a service layer and secondly a UI (ASP.Net Web Forms).&amp;#160; I would have loved to try the ASP.Net MVC however third party control requirements meant that it was not to be the case.&lt;/p&gt;  &lt;p&gt;One thing that I have been thinking about is where the IOC container should live.&amp;#160; This became apparent when contrasting Structure Map and Unity.&amp;#160; &lt;/p&gt;  &lt;p&gt;Structure Map has the ObjectFactory object, a static class and as such is quite accessible. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Structure Map&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In Structure Map you just register your types against Object Factory.&lt;/p&gt;  &lt;p&gt;public class MyRegistry : Registry   &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; protected override void configure()    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ForRequestedType&amp;lt;IObject&amp;gt;()    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .TheDefault.Is.Object(new Object()) &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }   &lt;br /&gt;} &lt;/p&gt;  &lt;p&gt;public class BootStrapper   &lt;br /&gt;{ &lt;/p&gt;  &lt;p&gt; ObjectFactory.Initialize(x =&amp;gt;   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; x.AddRegistry(new MyRegistry());     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }); Unity    &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Unity&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Unity, so far that I am aware of does not have an equivalent object.&amp;#160; As such you need to implement your own, perhaps something like the following &lt;/p&gt;  &lt;p&gt;public class IoC   &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private static IUnityContainer _container = null;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; public static IUnityContainer Container   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; get    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (_container == null)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CreateContainer();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; private static CreateContainer()   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _container = new UnityContainer; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _container.RegisterType&amp;lt;IObject, Object&amp;gt;();   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I like both IoCs so far, and I am sure I will find many more interesting quirks as I go.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-3653126529582956658?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/3653126529582956658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=3653126529582956658' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3653126529582956658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3653126529582956658'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/01/iocdi-part-1-of-n.html' title='IOC/DI - Part 1 of n'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-1347506817231908434</id><published>2009-01-19T12:41:00.001-08:00</published><updated>2009-01-19T12:41:49.967-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team Foundation Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Application Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Communication'/><title type='text'>Tools for the trade</title><content type='html'>&lt;p&gt;In my previous &lt;a href="http://merbla.blogspot.com/2008/12/conchang-who.html"&gt;post&lt;/a&gt; I mentioned the Scrum for Team system template for Team Foundation Server.&amp;#160; Another forgotten gem is the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c568fba9-3a62-4781-83c6-fdfe79750207&amp;amp;displaylang=en"&gt;Team Foundation Server Web Access Power To&lt;/a&gt;y, previously from Team Plain.&amp;#160; &lt;/p&gt;  &lt;p&gt;Its a great little tool that provides the same functionality as Team Explorer through a web interface.&amp;#160; I have found great use for it when you are not at your machine (say a Sprint planning meeting).&lt;/p&gt;  &lt;p&gt;And what’s more, when you use a custom template like Scrum, it can cater for the new terminology and you can create, edit your Sprint plan with ease.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-1347506817231908434?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/1347506817231908434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=1347506817231908434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/1347506817231908434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/1347506817231908434'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/01/tools-for-trade.html' title='Tools for the trade'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-3618298335112430231</id><published>2009-01-08T17:40:00.001-08:00</published><updated>2009-01-08T17:42:22.949-08:00</updated><title type='text'>2009 Here we come</title><content type='html'>&lt;p&gt;Well its 2009 and the world is awaiting.&amp;#160; Lots of stuff on the horizon, look out for Anton’s Lane, the return of PDLC and a new venture “Coffee Conspectus”&lt;/p&gt;  &lt;p&gt;Best wishes to all and I hope you have a safe and prosperous 2009 &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-3618298335112430231?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/3618298335112430231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=3618298335112430231' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3618298335112430231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3618298335112430231'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2009/01/2009-here-we-come.html' title='2009 Here we come'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-2344365128306055782</id><published>2008-12-14T02:10:00.001-08:00</published><updated>2008-12-14T02:16:42.153-08:00</updated><title type='text'>Merry Christmas</title><content type='html'>&lt;p&gt;Merry Christmas to all… and to all a gute nacht&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_CsLu6MHVy_A/SUTc4of0rKI/AAAAAAAAACY/Lx73IjR7uD8/s1600-h/Anton%5B2%5D.png"&gt;&lt;img title="Anton" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="363" alt="Anton" src="http://lh5.ggpht.com/_CsLu6MHVy_A/SUTbpe3jEGI/AAAAAAAAACc/8tH1eqehEnc/Anton_thumb%5B1%5D.png?imgmax=800" width="660" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-2344365128306055782?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/2344365128306055782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=2344365128306055782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2344365128306055782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2344365128306055782'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2008/12/merry-christmas.html' title='Merry Christmas'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_CsLu6MHVy_A/SUTbpe3jEGI/AAAAAAAAACc/8tH1eqehEnc/s72-c/Anton_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-3318169892633313016</id><published>2008-12-11T21:33:00.001-08:00</published><updated>2008-12-11T21:33:15.043-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team Foundation Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='Communication'/><title type='text'>Conchang Who?</title><content type='html'>&lt;p&gt;I can not say enough for the Scrum for Team System &lt;a href="http://scrumforteamsystem.com/en/default.aspx"&gt;add in&lt;/a&gt; by &lt;a href="http://www.conchango.com/"&gt;Conchango&lt;/a&gt;.&amp;#160; Implementing a base version of TFS can be tough, the install is clunky (especially when you are splitting the data and application tier) and base MSF Agile can be quite daunting when you first look at it.&amp;#160; &lt;/p&gt;  &lt;p&gt;Me, I like scrum.&amp;#160; The add in relates all TFS work back to terms you know and love.&amp;#160; Product Backlog, Sprint Backlog, Retrospectives etc.&lt;/p&gt;  &lt;p&gt;The reports are great, the task board (just need a 50” LCD), burn down charts etc etc etc.&lt;/p&gt;  &lt;p&gt;My hats off to Conchango and their edition for TFS 2008 is a great improvement&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-3318169892633313016?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/3318169892633313016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=3318169892633313016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3318169892633313016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3318169892633313016'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2008/12/conchang-who.html' title='Conchang Who?'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-4195393478235715237</id><published>2008-12-08T14:07:00.001-08:00</published><updated>2008-12-08T14:07:25.137-08:00</updated><title type='text'>Like he said x 2</title><content type='html'>&lt;p&gt;It seems that I have been chasing &lt;a href="darrynp.blogspot.com"&gt;Daz&lt;/a&gt; recently in relation to posts.&amp;#160; However I must concur with his &lt;a href="http://darrynp.blogspot.com/2008/12/back-of-napkin-is-poo.html"&gt;post&lt;/a&gt; re Dan Roam’s book - &lt;a href="http://www.amazon.com/Back-Napkin-Solving-Problems-Pictures/dp/1591841992"&gt;The Back of the Napkin: Solving Problems and Selling Ideas with Pictures&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I picked up this book about 6 months ago and enjoyed the read.&amp;#160; In fact I have it sitting at my desk where I work.&amp;#160; Its a great way to look at communication, hopefully that allows you to convey your message to any audience.&amp;#160; I think I will read it again soon to refresh my memory.&amp;#160; &lt;/p&gt;  &lt;p&gt;Just remember to carry your Swiss army knife of Visual Thinking&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-4195393478235715237?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/4195393478235715237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=4195393478235715237' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4195393478235715237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/4195393478235715237'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2008/12/like-he-said-x-2.html' title='Like he said x 2'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-6694687328454376477</id><published>2008-12-01T02:36:00.001-08:00</published><updated>2008-12-01T02:36:27.983-08:00</updated><title type='text'>New Wheels</title><content type='html'>&lt;p&gt;It has taken some time however we finally bought a new &lt;a href="http://www.facebook.com/album.php?aid=52886&amp;amp;l=0bf5f&amp;amp;id=744864155"&gt;car&lt;/a&gt; to let us do the things we wanted to do and help Ramona with little Anton.&amp;#160; &lt;/p&gt;  &lt;p&gt;Now for a new surfboard……….&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-6694687328454376477?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/6694687328454376477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=6694687328454376477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/6694687328454376477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/6694687328454376477'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2008/12/new-wheels.html' title='New Wheels'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-8131964932112155319</id><published>2008-11-29T13:39:00.001-08:00</published><updated>2008-11-29T14:23:02.442-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Application Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and Practices'/><title type='text'>Like he said….</title><content type='html'>&lt;p&gt;Following on from my last post, &lt;a href="http://darrynp.blogspot.com/2008/11/one-of-best-guides-ever.html"&gt;Darryn&lt;/a&gt; made mention of the P&amp;amp;P’s new pocket guides.  I discovered these last week and have already handed them to the lead developer and the enterprise architect.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeplex.com/AppArch/Wiki/View.aspx?title=Pocket%20Guides"&gt;These&lt;/a&gt; are a cut down version of the more &lt;a href="http://msdn.microsoft.com/en-us/library/aa139630.aspx"&gt;meaty&lt;/a&gt; guides, and are a little easier to digest.  I just wish &lt;a href="http://shapingsoftware.com/"&gt;Mr Meier&lt;/a&gt; and his crew released it earlier than last week as I have just finished reading the full cut versions&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-8131964932112155319?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/8131964932112155319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=8131964932112155319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8131964932112155319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/8131964932112155319'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2008/11/like-he-said.html' title='Like he said….'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-3249137752999588620</id><published>2008-11-27T14:20:00.001-08:00</published><updated>2008-11-29T13:58:59.058-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Application Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and Practices'/><title type='text'>Quality Reference Material</title><content type='html'>&lt;p&gt;With the ever changing landscape of application development, it is often hard to keep up with the latest trends, another aspect that can be quite daunting is to keep up with best practice.  &lt;/p&gt;  &lt;p&gt;Microsoft have done some good work in this space with the &lt;a href="http://msdn.microsoft.com/en-us/practices/default.aspx"&gt;Patterns and Practices&lt;/a&gt; guys doing their bit for the developers.  On of my colleges also put me on to Windows Server System Reference Architecture (&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=D44E34EC-B4E2-49A1-9F40-9ED4BA3765DF&amp;amp;displaylang=en"&gt;WSSRA&lt;/a&gt;).  When you are building a system from scratch and there is a lot of scrutiny, its nice to have the vendor backing up your design.&lt;/p&gt;  &lt;p&gt;Both these resources tell you how to build scenario based solutions, simply understand your business requirements and find the related reference.  Most of the time the solution you are thinking of has been implemented before.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-3249137752999588620?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/3249137752999588620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=3249137752999588620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3249137752999588620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/3249137752999588620'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2008/11/quality-reference-material.html' title='Quality Reference Material'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-7570802096867112007</id><published>2008-11-25T21:44:00.000-08:00</published><updated>2008-11-29T14:00:17.059-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Behaviour'/><title type='text'>Training it..</title><content type='html'>I recently started a new role and as a result I am talking the train more and more.  The psychology of sitting on a train amazes me.&lt;br /&gt;&lt;br /&gt;Previously I used the &lt;a href="http://www.translink.qld.gov.au/qt/TransLin.nsf/index/ferry_main"&gt;City Cat&lt;/a&gt; for the most part of two years. It is a great way to get home following a tough day at the office, people are friendly, smiling and generally having a good time.  You might think the high number of tourists is the reason for this jovial escapade, however most commuters are actually locals.&lt;br /&gt;&lt;br /&gt;Below is a list of five behaviours that I love to observe when on trains (and sometime buses).&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The reluctance to make eye contact&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A person sits on the aisle seat as to ensure no on sits beside them&lt;/li&gt;&lt;li&gt;The rush both when getting on and off trains&lt;/li&gt;&lt;li&gt;The awkard silence&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Watching someone's face when they overhear a conversation that may be a little off putting (normally when different social economic backgrounds are present)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-7570802096867112007?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/7570802096867112007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=7570802096867112007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/7570802096867112007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/7570802096867112007'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2008/11/training-it.html' title='Training it..'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-6098048227955331865</id><published>2008-11-22T12:44:00.000-08:00</published><updated>2008-11-22T13:40:32.228-08:00</updated><title type='text'>Asus Eee PC 901</title><content type='html'>Yesterday, I got an &lt;a href="http://eeepc.asus.com/global/product901.html?n=0"&gt;Asus Eee PC&lt;/a&gt; so far it is fantastic. I got the solid state drive with wireless n.  It already came with &lt;a href="http://www.openoffice.org/"&gt;Open Office&lt;/a&gt; which I have been using for some time on my Vista laptop.  Its light (1.1 kg with battery) and quick to boot.&lt;br /&gt;&lt;br /&gt;Currently loading express versions of Visual Studio so it will be interesting to see how that performs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-6098048227955331865?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/6098048227955331865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=6098048227955331865' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/6098048227955331865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/6098048227955331865'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2008/11/asus-eee-pc-901.html' title='Asus Eee PC 901'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-2820975066056057675</id><published>2008-11-12T18:36:00.000-08:00</published><updated>2008-11-29T14:00:06.560-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Behaviour'/><category scheme='http://www.blogger.com/atom/ns#' term='Communication'/><title type='text'>Hearing vs Listening</title><content type='html'>I had a situation today that a college asked for help.  Of course I jumped at the chance.  After about twenty minutes of discussion we had developed an entirely new solution to his problem and had not addressed what he actually asked.&lt;br /&gt;&lt;br /&gt;It reiterated the difference between hearing and listening.  I was eager to help however I actually did quite the opposite.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-2820975066056057675?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/2820975066056057675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=2820975066056057675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2820975066056057675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2820975066056057675'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2008/11/hearing-vs-listening.html' title='Hearing vs Listening'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-2954257245230467984</id><published>2008-11-12T02:34:00.000-08:00</published><updated>2008-11-29T13:59:44.240-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Behaviour'/><title type='text'>Exit Mode</title><content type='html'>I start a new role next week.  However something has been on my mind for some time.  How best do I ensure that the IP I have gathered (if any) is most effectively passed on to the people that might pick up my work.&lt;br /&gt;&lt;br /&gt;Is code enough? What about screen casts? What is the best form of communication to ensure what I have tried to achieve is clear to other developers.  Secondly is that different to the best form of communication to other team members eg BAs?&lt;br /&gt;&lt;br /&gt;I have always liked the saying "Horses for courses" however what if I have just chosen the wrong horse.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-2954257245230467984?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/2954257245230467984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=2954257245230467984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2954257245230467984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2954257245230467984'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2008/11/exit-mode.html' title='Exit Mode'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-2702145063829574985</id><published>2008-11-07T14:25:00.001-08:00</published><updated>2008-11-07T15:26:27.868-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><title type='text'>Good old XAML</title><content type='html'>The last couple of years I have been developing UI primarily in Windows Forms.  I have also dabbled a little with WPF and Silverlight.  I have never really had a passion for windows forms finding them often ugly and just not a good user experience.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Recently I had a sqiz at the &lt;a href="http://www.codeplex.com/CompositeWPF"&gt;Composite Application Guidance&lt;/a&gt; and came across an example for the &lt;a href="http://www.codeplex.com/CompositeWPFContrib"&gt;extensions &lt;/a&gt;that have been created by the community. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In one of the samples, they use the new HierarchicalDataTemplate, just one of many new templates in WPF.  What intested me was the power of the markup.  Below is a quick peek at what I am getting at.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Say I have a simple WPF application.  In it I have a stackpanel with a tree view inside it.  It makes reference to a static xml provider and a HierarchicalDataTemplate. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://3.bp.blogspot.com/_CsLu6MHVy_A/SRTLyCYYLrI/AAAAAAAAAAc/A4PtR4xgRGQ/s400/Xaml.png" style="cursor:pointer; cursor:hand;width: 400px; height: 238px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5266057924795969202" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The result is a simple tree view.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://3.bp.blogspot.com/_CsLu6MHVy_A/SRTMMxXVrDI/AAAAAAAAAAk/cMmSR5o1XPY/s400/Xaml.png" style="cursor:pointer; cursor:hand;width: 206px; height: 105px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5266058384084675634" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However if you add some styles, templates and animation you get the following.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://4.bp.blogspot.com/_CsLu6MHVy_A/SRTNj3cKCJI/AAAAAAAAAAs/BGwJwcYxSgw/s400/Xaml.png" style="cursor:pointer; cursor:hand;width: 400px; height: 204px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5266059880364116114" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As developers we now have no reason to build mindless apps that mimic the look and feel of circa 1990.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Check out the WPFQuickstartWithCAL example &lt;a href="http://www.codeplex.com/CompositeWPFContrib"&gt;here&lt;/a&gt; .&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-2702145063829574985?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/2702145063829574985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=2702145063829574985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2702145063829574985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/2702145063829574985'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2008/11/good-old-xaml.html' title='Good old XAML'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_CsLu6MHVy_A/SRTLyCYYLrI/AAAAAAAAAAc/A4PtR4xgRGQ/s72-c/Xaml.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2635652924590027936.post-9064305012717655254</id><published>2008-11-06T13:24:00.000-08:00</published><updated>2008-11-06T14:01:03.667-08:00</updated><title type='text'>Come one, come all</title><content type='html'>Well, I promised myself when I got things "in order" I would start a blog.&lt;br /&gt;&lt;br /&gt;Here it is..... I am sure I will cop some flak from a couple of colleges (&lt;a href="http://twitter.com/robpearson"&gt;Pearso&lt;/a&gt;, &lt;a href="http://darrynp.blogspot.com/"&gt;Dazz&lt;/a&gt;, &lt;a href="http://tim.bellette.net/"&gt;Tim.Bellette.Net&lt;/a&gt;) if this gets stale.  I am not sure what sort of content there will be but I hope its a palatable mix of tech and life.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2635652924590027936-9064305012717655254?l=merbla.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://merbla.blogspot.com/feeds/9064305012717655254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2635652924590027936&amp;postID=9064305012717655254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/9064305012717655254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2635652924590027936/posts/default/9064305012717655254'/><link rel='alternate' type='text/html' href='http://merbla.blogspot.com/2008/11/well-i-promised-myself-when-i-got.html' title='Come one, come all'/><author><name>Matthew Erbs</name><uri>http://www.blogger.com/profile/07736820067066004954</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
