Monday, February 06, 2012
 
   
 
Welcome to my site

First let me say thanks for stopping by my site. My name is David Hanson-Graville and I am a IT consultant working in the UK. Let me make it clear, I am passionate about technology and specifically .net and its various forms. I've programmed in a range of langages, but I can say, I am now at my happiest when coding with c#. I hope my blog is an enjoyable & educational read and please feel free to email me at David.Hanson@OnTheBlog.net if you have any questions. 

OnTheBlog Minimize
Author: David Hanson Created: Wed, 02 Jan 2008 20:28:49 GMT
All things .net, wpf, XAML, C#, Workflow Foundation and many more.

PDC 2010 cast doubt on Silverlight but what does it really mean?
By David Hanson on Sun, 31 Oct 2010 21:40:04 GMT

In case you have been living in a hole for the last week I imagine you have probably heard on the blogsphere about the demise of Silverlight now that HTML 5 is here and Microsoft are backing it. Without getting into the details of why they would do this, I think generally its a supersmart approach for the Blue man group. HTML 5 is here to stay as far as standards for the web go its the best we've got.

Either way over the weekend I had a long thought about what it means and I eventually came to the conclusion that it won't make much a huge difference and that Silverlight & xaml based technologies won't be going anywhere. The reason is that although HTML 5 does provide a number of new RIA features such as vector based drawing, socket programming, asynchronous operations etc. It will still lack hugely when it comes to developing sophisticated line of business applications. It will also never be at the forefront of innovation. Technologies and trends change and proprietary tech such as Silverlight and Flash will be at the forefront of this change.

A good rule of thumb is that if an application is not going to need to be deployed to the public web as most LOB's aren't then Silverlight will be the natural fit. However if it's a commercial application available to the public then HTML 5 would be a better fit. Besides I would be surprised if at some point we don't see a Silverlight to HTML compiler to bridge that gap.

Eitherway change is good and that's why we are in this game!

That's my 2 pence anyways.

Comments (0)

Windows Phone 7 Emulator standalone installer (July bits)
By David Hanson on Sat, 24 Jul 2010 05:27:22 GMT

Hello out there.

Well I haven't updated this site for about 6 months and I thought I would try and be a little more active. The reason for my lack of posts is that I am currently in Australia travelling in a campervan and connectivity has been a bit of issue. The distraction of sunshine and beautiful sights doesn't help either.

Anyways I have just started getting to grips with the July Windows Phone 7 Beta tools and came across annoying issue with the installer. Basically it makes you download 300mb of data as part of the install. As I only wanted to download the Emulator (specifically the x64 version) I hunted around the installed settings file (located in a temp directory) an eventually stumbled upon the following two links which allow you to download it seperately. Hope this helps someone else who had this problem.

http://go.microsoft.com/fwlink/?LinkId=194975

http://go.microsoft.com/fwlink/?LinkId=194976

PS. Word to MS. Stop using online installers.... they are driving me mental on a flakey 3g connection in the bush!

Comments (2)

Introducing #Fellows
By David Hanson on Fri, 19 Mar 2010 20:58:27 GMT

Just a quick note to make readers aware of a new blogging site called #Fellows. This community site aggregates the blogs of a number of smart .Netters from the UK. Enjoy.

Comments (0)

Rx, Reactive Extensions and Observable T
By David Hanson on Tue, 26 Jan 2010 10:31:57 GMT

I have been seeing quite a lot of talk on the tweet feeds and blog posts recently about the new Reactive Extensions that are being released. Now I was struggling to get my head around it at first but read this simple blog post which really helped clarify what Rx actually offers. It seems very powerful, and could be a game changer for event processing in the same way Linq was for list data. Really like the drag and drop example in this  post as it becomes very clear the intention of the code shown below. 

Define the events you wish to monitor

var mouseDown = from evt in Observable.FromEvent<MouseButtonEventArgs>(image, "MouseDown"
                
select evt.EventArgs.GetPosition(image);
var mouseUp = Observable.FromEvent<MouseButtonEventArgs>(image, "MouseUp");
var mouseMove = from evt in Observable.FromEvent<MouseEventArgs>(image, "MouseMove") 
                
select evt.EventArgs.GetPosition(this);

Then define your query which will tie these events together into a logical form for your requirement (In this case drag and drop)

var q = & ...
Comments (1) More...

Calling a generic method with Expression.Call
By David Hanson on Sun, 17 Jan 2010 09:05:54 GMT

The other day I came across a comment in the code base of the application I'm currently working on that said the following.

// Having to loop through the GetMethods() array is pretty rubbish, even if we are using LINQ. If someone knows how to use GetMethod to get the generic method definition, then correct the code, email me and I'll buy you a pint.

Now looking into this issue it turns out that the author is correct, you cannot actually use Type.GetMethod() to invoke a Generic Method. As a result the approach the dev used was to call Type.GetMethods() which returns all methods on the type and then apply some linq filtering to identify the generic method they wish to invoke. Once filtered a quick call to MakeGenericMethod then you can invoke it. This is shown below.

typeof(FrameworkHelper)
    .GetMethods()
    .Where(method => method.IsGenericMethod && method.Name == "DeleteEntity")
    .Select(method => method.MakeGenericMethod(actualEntityType))
    .First()
    .Invoke(null, new object[] { entity });

So having a think about this for a bit and then recalling some great blog posts I had read from Bart De Smet's blog about expression tree's I wondered if we could use the Expression.Call method to achieve the same results. After some tinkering with the overloads for this method I eventually figured it out and result is shown below.

ParameterExpression param = Expression.Parameter(typeof(Entity), "param");
var method = Expression.Call(typeof(FrameworkHelper), "DeleteEntity", new[] { typeof(Entity) }, param).Method;
method.Invoke(null, new object[] { entity });

In the code above we create an instance of a Parameter expression which requires the Type of the parameter we are going to pass to the method. Then in order to invoke the method we need to build the call expression on line 2. Here we use the Expression.Call static method which has a number of overloads.

The first param is the type which holds the static method we wish to invoke, the next paramter is the method name which is passed as string. The third paramter is the types that the method signature defines. This is passed as an array of objects. Finally is the ParamExpression we constructed on the previous line. The final part once we have the methodInfo is to invoke it by pa ...

Comments (0) More...

Raising binding exceptions in WPF & Silverlight with .net 4.0 Dynamics
By David Hanson on Mon, 14 Dec 2009 14:00:19 GMT
It’s been a while since I’ve posted anything. Sorry about that. This has mainly been due to a busy social and work schedule which has not given me the time I’ve needed to create the content that’s been floating around my desk as post it notes. In this post I would like to revisit dynamic typing support in .NET 4.0 and apply it to a real world scenario.
 
Proxying and Interception with Dynamics
 
If you’re like me then I imagine you have been playing with .NET 4.0 for quite a while now. There is a wealth of new language features to play with in this release and I’m excited about the RTM come march. One of the features I have discussed previously is the support for dynamic typing. Dynamics brings with it some new approaches to problems that static languages have often found difficult to solve. In this post we will be looking at the topic of dynamic proxying, interception and AOP.
 
The common goal of these techniques is to allow a programmer to be able to inject code transparently before and after a method has been invoked. This is illustrated below in the diagram below.
 

 
If you have not come across this concept before you may ask what is the point of intercepting a method before and after execution. A layer of indirection is particularly useful when trying to inject code between a client and our objects. The reason we do this as it allows us to implement secondary support functions such as logging, transaction management, code contracts and other utility code outside the body of our method. What we find when we implement an proxy pattern is that once we have removed this secondary code the readability of our code improves tremendously and we have also increased our separation of concerns.
 
Now you can see the benefits of this approach, let’s turn our attention to how we go about implementing this in our code. Luckily for us there has been a lot of smart people working hard to help make this process easier. If you do a search for proxy pattern’s or aspect orientated programming you will find a heap of information. When it comes to AOP there are a number of frameworks which have already been developed. These are listed below. 
 
Aspect#
Encase AOP
Spring.NET
Aspect.NET
AspectDNG
Dynamic Proxy
Compose*
Loom.NET
PostSharp
 
Each of these frameworks make use of a number techniques to the injection of code both before and after execution of a method. These generally fall into 4 categories.
 
MSIL injection – Here we inject MSIL code into the body of the method being executed. (Post sharp)
 
Runtime dynamic injection – Using techniques such as reflection we invoke methods dynamically.
 
Type builder injection – R ...
Comments (0) More...

Defensive coding source available.
By David Hanson on Sun, 13 Dec 2009 09:57:57 GMT

I had a request to make the defensive coding source code available.  So here you go.

Download

Comments (1)

Extension method to find the nearest common ancestor of a given type.
By David Hanson on Thu, 10 Sep 2009 14:51:25 GMT

I had a problem recently where I had an inheritance hierarchy of which I needed to find a common ancestor type between two objects. Below shows a quick mock up of the situation I faced.

As you can see the Person type is the common ancestor for both Student and Teacher. In order to solve this issue I decided to write the following extension method for the Type type to be able to locate it easily in the future. Code below for anyone interested. Hope it helps.

    ///
    /// Extension methods for the Type
    ///
    public static class TypeExtensions
    {
        ///
        /// Finds the nearest common ancestor for a given type.
        ///
        /// The type.
        /// Type of the target.
        ///
        public static Type FindCommonAncestor (this Type type, Type targetType)
        {
            if (targetType.IsAssignableF ...
Comments (0) More...

RDL Parameter Reader
By David Hanson on Fri, 28 Aug 2009 08:17:58 GMT

I currently working on retro fitting some SQL server reports into the application we are building. I needed a quick way to view all the parameters each report uses. The code below is a quick snippet to do just that. Just point it at a directory with the RDL files in an away you go.  Note: This code does the bare minimum and is used for SQL Server 2005 RDL. I haven't checked to see if it works on SQL 2008 RDL. Thought it might help someone.

       public Report()
            {
                Parameters = new List<Parameter>();
            }
 
            public string ReportName { get; set; }
            public List<Parameter> Parameters{ get; set;}
        }
 
        ///
        /// Represents a report parameter.
        ///
        public class Parameter
        {
            public
Comments (0) More...

NDC 2009 Videos
By David Hanson on Fri, 03 Jul 2009 10:25:54 GMT
·         Scott Hanselman - Deep Tour of .NET 4
·         Ted Neward - Why the Next Five Years Will Be About Languages
·         Michael Feathers - Seven Blind Alleys in Software Design
·         Jonas Follesø - MVVM Patterns for Silverlight and WPF applications
·         Luca Bolognese - The Future of C#
·         Tim Huckaby -
Comments (0) More...

Defensive Coding
By David Hanson on Fri, 05 Jun 2009 06:33:18 GMT
How often have you seen code like this?
 
private void AllocateRoles(RoleChangeInfo roleChangeInfo)
{
            foreach (Role role in roleChangeInfo.Roles)
            {
                if (roleChangeInfo.Person.Age > 21 && roleChangeInfo.Person is Senior)
                    RoleChangeService.AddRole(rolechangeInfo.Person, role);
            }
      }
 
 
If we deconstruct this code we can see that the method AllocateRoles should received an instance of a RoleChangeInfo which is a container for all the information that is required to add the roles to the appropriate person. If we take a look at the implementation of this type we can see that it’s fairly simplistic.  It holds the ID of the Role and a RoleTaken DateTime.
 
public class Role
{
    public int ID { get; set; }
    public DateTime? RoleTaken { get; set; }
}
 
The body of the AllocateRoles method consists of a simple ForEach iteration around the Roles collection and with each role we check to make sure the person is older than 21 and they are of type senior. If both of these conditions are true then we call the RoleChangeService.AddRole method which will perform the work and update the RoleTaken.
 
I have come across this kind of code many times in the past and it is a good example of where a developer has made a number ...
Comments (2) More...

Microsoft® Silverlight™ 3 Tools Beta 1
By David Hanson on Wed, 18 Mar 2009 15:02:54 GMT

Want to start developing for Silverlight 3.0? Well you can now download the tools you need for Visual Studio from Microsoft.

Download here

Comments (0)

Silverlight 3: Some info!
By David Hanson on Wed, 18 Mar 2009 10:46:11 GMT

Today see's the start of MIX09. As a result I decided to look on the agenda for the sessions that are taking place over the next few days and I came across this little nugget if information on Silverlight 3. The session is titled "What's new in Silverlight 3" The brief synopsis gives us a sneak peak as to what to expect from Scotts Keynote.

"Take a tour of the new features in Silverlight 3 including a dive into some of the new experience oriented features like pixel shaders, perspective 3D, animation enhancements, bitmap APIs and improvements to the media stack. Also hear about new Silverlight base framework additions including updates to the style model, data binding improvements, improved resource handling and improvements to the web services stack."

Looking forward to those 3D demo's already!

Comments (0)

Next SLUG Meeting: Thursday 26th March 2009
By David Hanson on Tue, 17 Mar 2009 13:51:00 GMT

So it s been a while since I have blogged. I wont bore you with the details but what with moving home, project commitments and lots going on in my personal life I've just not had time to focus. This post is to get me started again .

The next SLUG meeting has been announced. You can find details of it here . Its going to follow a GROK TALK format, this means that anyone can have 15 mins talking to the group about experiences they have had with Silverlight. Mark is also looking for MIX attendees to come along and share their thoughts on this years announcements etc.

 

Comments (0)

Is BizTalk Dead - Part 2
By David Hanson on Wed, 26 Nov 2008 21:18:25 GMT

Back at the beginning of the year I wrote a blog post about the awkward conflict that BizTalk faced now that WF was on the scene.  Although at the time of writing there was an obvious cross over between the products, BizTalk still offered a number of key advantages over bog standard workflow. Due to some emails I received I decided to look around Microsoft's code projects and see what I could find. It was way back in Feb that I came across OSLO.

9 Months later and with PDC out of the way, OSLO and Microsofts strategy for WF is far more clear. OSLO seemed to evolve over the last few months into the codename primarily used for the modelling language and toolset announced. Microsoft also showed off a whole new version of WF for .NET 4.0. This new version of WF comes with some major improvements.

  • WF has been rewritten from the ground up.
  • Performance has been dramatically increased
  • Services and Workflow can be written purely with XAML
  • A new customisable designer surface
  • Large number of new activities for developing workflows
  • Seamless integration with WCF

So with WF being upgraded to a spanky new version which offers a wealth of new features please bare in mind that BizTalk'ers are still waiting for their orchestration engine to be updated to use the new WF engine. Given the new version of WF being announced I would be wondering how long its going to take before I see that in BizTalk?

Back to the original OSLO article I found way back in Februrary, the article talked of a new WF hosting engine. This part of the puzzle we now know has been codenamed "Dublin". If you haven't heard of Dublin yet and your into BizTalk then hold your breath as the diagram below (taken from MSDN) may look familiar.

 

 Dublin is the application server that has long been missing from the Microsoft product set. Announced to be a part of Windows Server , Dublin provides a runtime which hosts WF workflows and provides services for persistence, tracking, management, message forwarding and much more. The Dublin runtime is implemented on SQL Server server which allows WF developers to create long running workflows. Prior to Dublin this was only possible by either rolling your own or implementing BizTalk.

Is this sounding familiar to you? Well it doesn't stop there I'm afraid. Dublin can also run as part of farm of servers whereby each instance  can use a single shared persistence store. Dublin also provides automatic workflow activation as part of its message routing architecture.

As you can see Dublin is the future. Even Microsoft recognise the awkward overlap of features as evidenced by this MSDN article.


For anybody familiar with BizTalk Server, looking at “Dublin” might cause a slight sense of déjà vu. Supporting workflow-based logic, providing a monitoring and management infrastructure: These are things that BizTalk Server does today. What’s the future of BizTalk Server in a “Dublin” world?

The key thing to understand is that “Dublin” doesn’t directly target traditional BizTalk scenarios. For example, enterprise application integration and business-to-business connections via EDI will still use BizTalk Server. Similarly, bringing existing applications into the service-oriented world by exposing their functions and/or data through BizTalk Server will continue to make sense. While the reach of “Dublin” may grow over time, BizTalk Server r ...

Comments (1) More...

Print  
Tweets Minimize
Twitter / LordHanson
  1. LordHanson: #southeastern have once again proved their rolling stock can reach new lows.

    Published Wed, 01 Feb 2012 08:09:05 +0000 by
  2. LordHanson: Checked in at The Cards http://t.co/LANfHukb

    Published Sun, 29 Jan 2012 11:04:51 +0000 by
  3. LordHanson: @BillGates Run for president Bill.

    Published Fri, 27 Jan 2012 08:41:35 +0000 by
  4. LordHanson: @swhelband Again!

    Published Fri, 27 Jan 2012 08:39:44 +0000 by
  5. LordHanson: The update for the Nokia Lumia recently has done wonders for battery life! Good job #Nokia #windowsphone

    Published Fri, 27 Jan 2012 08:36:27 +0000 by
  6. LordHanson: Checked in at Victoria Station http://t.co/L0BJ5smd

    Published Thu, 26 Jan 2012 08:35:41 +0000 by
  7. LordHanson: @pdl_uk VAT No: 924 5933 08 Shoulder again! Dang!

    Published Wed, 25 Jan 2012 21:47:45 +0000 by
  8. LordHanson: @tommyjmquinn I think that would be easier. Next Thursday ok?

    Published Wed, 25 Jan 2012 21:04:46 +0000 by
  9. LordHanson: @tommyjmquinn London bridge doable?

    Published Wed, 25 Jan 2012 20:32:34 +0000 by
  10. LordHanson: @tommyjmquinn so where's the meet?

    Published Wed, 25 Jan 2012 19:04:02 +0000 by
  11. LordHanson: @tommyjmquinn your choice mate. Somewhere easy to get to from Bankside. :-D

    Published Tue, 24 Jan 2012 22:01:20 +0000 by
  12. LordHanson: @tommyjmquinn so Darius, Justin and me confirmed. Thursday good for you? Waiting to hear from Sal.

    Published Tue, 24 Jan 2012 21:47:21 +0000 by
  13. LordHanson: @mark_mann which is illegal I thought!

    Published Tue, 24 Jan 2012 21:46:17 +0000 by
  14. LordHanson: Details on Windows Phone 8 confirms NT kernel http://t.co/5Qg1MILl

    Published Tue, 24 Jan 2012 21:34:11 +0000 by
  15. LordHanson: But next target for framework is #winrt. Need to see if my dependencies like DI, RX, ReactiveUi etc will work. Hmm

    Published Mon, 23 Jan 2012 08:33:16 +0000 by
  16. LordHanson: @pdl_uk hey Phil, how's marathon training going?

    Published Mon, 23 Jan 2012 08:31:37 +0000 by
  17. LordHanson: So I now have a framework for apps which targets .net, Silverlight and windows phone. Thankyou project linker!

    Published Mon, 23 Jan 2012 08:28:08 +0000 by
  18. LordHanson: For some reason dropped twitter for a month. Can't say I missed it really. Maybe I need to broaden my follow list!

    Published Mon, 23 Jan 2012 08:24:44 +0000 by
  19. LordHanson: Soo much hype over SIRI when it came out yet I never see anyone use it and don't know anybody who does either. #apple #sooverhyped

    Published Mon, 23 Jan 2012 08:23:18 +0000 by
  20. LordHanson: #southeastern customer satisfaction survey given to me today. This should be fun! Bit wait......no extremely poor option! Just very poor.

    Published Mon, 23 Jan 2012 08:20:09 +0000 by
Print  
Archive Minimize
Print  
Contact me Minimize
Print  
Microsoft Certs Minimize







Print  
Silverlight News Minimize
Silverlight - Google News
  1. Windows Phone 8 - Silverlight Apps Are Legacy - iProgrammer

    Published Fri, 03 Feb 2012 13:03:27 GMT by
  2. Super Bowl Streaming Fail - StreamingMedia.com

    Published Mon, 06 Feb 2012 05:59:33 GMT by
  3. Delphi Developers Rejoice at Silverlight, FireMonkey and VCL Coming Together ... - San Francisco Chronicle (press release)

    Published Tue, 31 Jan 2012 17:34:58 GMT by
  4. WP7 Upgrades and WP8 - Silverlight or C++ - iProgrammer

    Published Tue, 31 Jan 2012 17:21:58 GMT by
  5. Watch The 2012 Super Bowl Online - SportsGrid

    Published Sun, 05 Feb 2012 23:15:21 GMT by
  6. US viewers can watch Super Bowl on Mac, iOS - Macworld

    Published Sun, 05 Feb 2012 20:22:31 GMT by
  7. Hydra 4 Sharpens Its Teeth, Breathes New Fire - Dr. Dobb's

    Published Sun, 05 Feb 2012 17:25:01 GMT by
  8. Will Silverlight live or die? Microsoft won't say - InfoWorld

    Published Fri, 27 Jan 2012 11:00:46 GMT by
  9. Cablevision Flips Live TV To Laptops With Microsoft Silverlight - Multichannel News

    Published Fri, 27 Jan 2012 17:24:53 GMT by
  10. Do SharePoint & Silverlight Have a Future Together? - CMSWire

    Published Mon, 16 Jan 2012 17:29:27 GMT by
Print