<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUMBRX88cSp7ImA9WhRbEUw.&quot;"><id>tag:blogger.com,1999:blog-15135700</id><updated>2012-02-01T17:24:14.179+01:00</updated><category term="Alt.Net" /><category term="Motivation" /><category term="Denpendency Injection" /><category term="dynamic" /><category term=".Net" /><category term="DataBinding" /><category term="Pragmatic" /><category term="Security" /><category term="4.0" /><category term="SOA" /><category term="IDE" /><category term="Idea" /><category term="Test" /><category term="3.5" /><category term="JQuery" /><category term="Sales" /><category term="Leadership" /><category term="namespaces" /><category term="Mono" /><category term="Human nature" /><category term="Storage" /><category term="Code generation" /><category term="Documents" /><category term="Cloud" /><category term="Extension methods" /><category term="Xaml" /><category term="Project Management" /><category term="REST" /><category term="XML" /><category term="DataBindding" /><category term="Design" /><category term="delivery" /><category term="F#" /><category term="Knowledge" /><category term="Reflection" /><category term="plain" /><category term="XPath" /><category term="WCF" /><category term="Evolution" /><category term="generics" /><category term="Validation" /><category term="OR mapping" /><category term="NHibernate" /><category term="components" /><category term="framework" /><category term="Domain Model" /><category term="Poco" /><category term="WPF" /><category term="Entity Framework" /><category term="dependencies" /><title>throws dotNetException</title><subtitle type="html">Promoting common sense.
&lt;br&gt;&lt;br&gt;&lt;i&gt;Alternatively: Promoting uncommon sense and exposing common nonsense&lt;/i&gt;</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://dotnetexception.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Rune Juhl-Petersen</name><uri>https://profiles.google.com/101185513916654144484</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-71e15bODk8Q/AAAAAAAAAAI/AAAAAAAAACw/Ozl3aMWDK9s/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>108</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/ThrowsDotnetexception" /><feedburner:info uri="throwsdotnetexception" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CkANSXo-eCp7ImA9WhRUF0Q.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-3739906546776292829</id><published>2012-01-25T15:30:00.000+01:00</published><updated>2012-01-28T23:46:38.450+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-28T23:46:38.450+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Pragmatic" /><category scheme="http://www.blogger.com/atom/ns#" term="Xaml" /><category scheme="http://www.blogger.com/atom/ns#" term="framework" /><category scheme="http://www.blogger.com/atom/ns#" term=".Net" /><title>Era of the XAML user interface</title><content type="html">I hear the term &lt;a href="http://msdn.microsoft.com/en-us/library/ms752059.aspx" target="_blank"&gt;XAML&lt;/a&gt; user interfaces mentioned way too often these days.&lt;br /&gt;
&lt;br /&gt;
XAML has in fact nothing to do with userinterfaces. XAML is just a language for instantiating an object structure. I have previously written about how I have used it as a configuration language for my applications, a &lt;a href="http://dotnetexception.blogspot.com/2008/04/xaml-ultra-lightweight-ioc-container.html" target="_blank"&gt;sort of light weight dependency injection framework&lt;/a&gt;. To show that &lt;a href="http://en.wikipedia.org/wiki/Windows_Presentation_Foundation" target="_blank"&gt;WPF&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Silverlight" target="_blank"&gt;Silverligth&lt;/a&gt; are not the only UI frameworks that can be used with XAML I have used XAML to create a small &lt;a href="http://en.wikipedia.org/wiki/Windows_Forms" target="_blank"&gt;Windows Forms&lt;/a&gt; form.&lt;br /&gt;
&lt;br /&gt;
The root node of my XAML file will be Form. By providing "&lt;span style="color: blue; font-family: Consolas;"&gt;&lt;span style="color: blue; font-family: Consolas;"&gt;&lt;span style="color: blue; font-family: Consolas;"&gt;clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;" as the default namespace Visual Studio and .net will recognize the elements and validate them to match a structure that is allowed beneath a form. If you need to use other .net namespaces, you just add a prefixed&amp;nbsp;xml namespace for each of those .net namespaces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-Wa8c4dG3Alo/Tx0es6YcS2I/AAAAAAAAAJA/M3e4771v6IM/s1600/xamlform.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="230" nfa="true" src="http://2.bp.blogspot.com/-Wa8c4dG3Alo/Tx0es6YcS2I/AAAAAAAAAJA/M3e4771v6IM/s400/xamlform.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Visual Studio will pr default open a WPF/Silverlight visual presentation along with the text editor when opening the XAML file. As we are not using WPF or silverlight the visual presentation will not show anything usefull. The XAML can be distributed as a file besides you application, embedded as XAML or embedded as BAML (XAML compiled to a binary format). The BAML approach is probably the most sensible solution for a real life application.&lt;br /&gt;
&lt;br /&gt;
To create an instance of the form just give the&amp;nbsp;XAML stream to a&amp;nbsp;XamlReader and cast the result to a Form object.&amp;nbsp;Now the form can be displayed by calling Show, like you would on any other windows form.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-9S1omU2GMQc/Tx0fsxjI9ZI/AAAAAAAAAJI/CxNvr8orJzo/s1600/hookupform.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="70" nfa="true" src="http://2.bp.blogspot.com/-9S1omU2GMQc/Tx0fsxjI9ZI/AAAAAAAAAJI/CxNvr8orJzo/s400/hookupform.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
When the form object has been created, i use two lines of code to hookup some eventhandlers before showing the form. The find method on the form is an extension method for Form that flattens that flattens the structure of the form so that &lt;a href="http://en.wikipedia.org/wiki/Language_Integrated_Query" target="_blank"&gt;LINQ&lt;/a&gt; can be used on it. The generic type is a filter that only returns the controls of that type and the lambda is a further filter. The find method has been implemented in the plain framework, so you can go there to se the implementation.&lt;br /&gt;
The Do method is just like the ForEach method on List, this however work for any type of IEnumerable&amp;lt;T&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The first of the two lines finds all buttons whose name start with "Command" and hook them up to an event handler. The second line hooks an event handler to the TextChanged event of all controls whose name start with Value. In this way it is easy to use a naming convention to hook the UI up to business logic. Dependind on your architecture, you might hook it up to fire commands or whatever.&lt;br /&gt;
&lt;br /&gt;
You might implement some layout manager the same way, or you might inherit panel or something other control and create a layout manager that way. By implementing you own controls you can also put metadata on the controls in your UI.&lt;br /&gt;
&lt;br /&gt;
So, XAML has the potential of being used with other UI frameworkds than WPF and Silverlight.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://dotnetexception.blogspot.com/2008/04/xaml-ultra-lightweight-ioc-container.html" target="_blank"&gt;http://dotnetexception.blogspot.com/2008/04/xaml-ultra-lightweight-ioc-container.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-3739906546776292829?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LLaO44F-CxpN7NE2VZ95Nb-WRtI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LLaO44F-CxpN7NE2VZ95Nb-WRtI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LLaO44F-CxpN7NE2VZ95Nb-WRtI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LLaO44F-CxpN7NE2VZ95Nb-WRtI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=w87lumREsXU:THDRY4FKkkI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=w87lumREsXU:THDRY4FKkkI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=w87lumREsXU:THDRY4FKkkI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/w87lumREsXU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/3739906546776292829/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2012/01/era-of-xaml-user-interface.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/3739906546776292829?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/3739906546776292829?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/w87lumREsXU/era-of-xaml-user-interface.html" title="Era of the XAML user interface" /><author><name>Rune Juhl-Petersen</name><uri>https://profiles.google.com/101185513916654144484</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-71e15bODk8Q/AAAAAAAAAAI/AAAAAAAAACw/Ozl3aMWDK9s/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-Wa8c4dG3Alo/Tx0es6YcS2I/AAAAAAAAAJA/M3e4771v6IM/s72-c/xamlform.PNG" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2012/01/era-of-xaml-user-interface.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQAQX8yeyp7ImA9WhRVGUU.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-4253412291085230948</id><published>2012-01-19T15:29:00.000+01:00</published><updated>2012-01-19T15:29:00.193+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-19T15:29:00.193+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="framework" /><category scheme="http://www.blogger.com/atom/ns#" term="delivery" /><category scheme="http://www.blogger.com/atom/ns#" term=".Net" /><title>Suitable Business model?</title><content type="html">I have created a prototype for an application.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;I know there is a market for what the application does as there are existing products that have same target audience.&lt;/li&gt;
&lt;li&gt;Existing products are VERY pricy.&lt;/li&gt;
&lt;li&gt;The product is simpler and easier to maintain than existing products in the market.&lt;/li&gt;
&lt;/ul&gt;
I just have one problem. How should I put this to market?&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
A way could be to make it open source. This has worked for me&amp;nbsp;with plain. Plain was however a theoretical experiment, a playground for thougths on how simple and easy application architecture could be made. There was never&amp;nbsp;a plan for a final release because the process was more important. The no limits and no constraints meant that we could implement a search filter framework that resembled Linq a bit before we ever heard of Linq.&amp;nbsp;A validation framework much like the one now found in nHibernate and ASP.Net Mvc 3 etc.. But plain intentionaly&amp;nbsp;lacked one thing that I would like my new project to have. Exposure and usage.&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Open source the product and commercialize tools and support.&lt;/li&gt;
&lt;li&gt;Open sourcing everything.&lt;/li&gt;
&lt;li&gt;Make everything closed source.&lt;/li&gt;
&lt;li&gt;Some others I haven't thought of.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;/div&gt;
This is a more finite problem and I want to work towards a releasable codebase. Will a enterprise product ever be popular if it is cheap?&lt;br /&gt;
Will it be possible to have a differentiated licensing model for hobbyists and enterprises. Will this model result in&amp;nbsp;a greater usage? Is it at all possible to have the kind of openness and transparency I'm looking for if the project is not open source?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-4253412291085230948?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3gYmoNtmfiEeKQkG6el51fK6I4M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3gYmoNtmfiEeKQkG6el51fK6I4M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3gYmoNtmfiEeKQkG6el51fK6I4M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3gYmoNtmfiEeKQkG6el51fK6I4M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=5zV2zaf_ENM:twyu0eafvEA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=5zV2zaf_ENM:twyu0eafvEA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=5zV2zaf_ENM:twyu0eafvEA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/5zV2zaf_ENM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/4253412291085230948/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2012/01/suitable-business-model.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/4253412291085230948?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/4253412291085230948?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/5zV2zaf_ENM/suitable-business-model.html" title="Suitable Business model?" /><author><name>Rune Juhl-Petersen</name><uri>https://profiles.google.com/101185513916654144484</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-71e15bODk8Q/AAAAAAAAAAI/AAAAAAAAACw/Ozl3aMWDK9s/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2012/01/suitable-business-model.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IGQH04eCp7ImA9WhRVGEU.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-2830889338334095784</id><published>2012-01-18T11:12:00.000+01:00</published><updated>2012-01-18T11:12:01.330+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-18T11:12:01.330+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Denpendency Injection" /><category scheme="http://www.blogger.com/atom/ns#" term=".Net" /><title>Declarative structure initialization</title><content type="html">I'm on the lookout for a &lt;a href="http://martinfowler.com/articles/injection.html" target="_blank"&gt;Dependency Injection&lt;/a&gt; framework for .net that supports a small, compact and declarative syntax. I want it to be so easy that non programmers can figure out what is going on.&lt;br /&gt;
&lt;br /&gt;
My first thoughts were on &lt;a href="http://en.wikipedia.org/wiki/Extensible_Application_Markup_Language" target="_blank"&gt;XAML&lt;/a&gt; as it is simple and declarative. The reason for not choosing this anyway is that it doesn't support generics in a nice way. By not in a nice way I mean very verbose and strange. On top of that XAML is not implemented on mono.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.springframework.net/" target="_blank"&gt;Springframework&lt;/a&gt; and&amp;nbsp;&lt;a href="http://docs.castleproject.org/Windsor.MainPage.ashx" target="_blank"&gt;Castle Winsor&lt;/a&gt;&amp;nbsp;is also too verbose for my likings. Although they are&amp;nbsp;very good, they still require me to define my object at one place and reference they together in a structure somewhere else. Thsi is not a bad thing, I would just, also, like the possibility to create the objects in the structure inline where they are needed.&lt;br /&gt;
&lt;br /&gt;
Another solution could be to consume code and execute it. This ofcorse is also way off compared to what I want to accomplish.&lt;br /&gt;
&lt;br /&gt;
Any Ideas on what path to follow?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-2830889338334095784?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/czhq0AzBztI5Kn5AuQoO1jrEzQs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/czhq0AzBztI5Kn5AuQoO1jrEzQs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/czhq0AzBztI5Kn5AuQoO1jrEzQs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/czhq0AzBztI5Kn5AuQoO1jrEzQs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=R6VoSXSxtNo:EwnKTnvv-zY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=R6VoSXSxtNo:EwnKTnvv-zY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=R6VoSXSxtNo:EwnKTnvv-zY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/R6VoSXSxtNo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/2830889338334095784/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2012/01/declarative-structure-initialization.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/2830889338334095784?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/2830889338334095784?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/R6VoSXSxtNo/declarative-structure-initialization.html" title="Declarative structure initialization" /><author><name>Rune Juhl-Petersen</name><uri>https://profiles.google.com/101185513916654144484</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-71e15bODk8Q/AAAAAAAAAAI/AAAAAAAAACw/Ozl3aMWDK9s/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2012/01/declarative-structure-initialization.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIAQXg-fyp7ImA9WhRVF0Q.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-6895701042683243978</id><published>2012-01-04T16:00:00.000+01:00</published><updated>2012-01-17T10:45:40.657+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-17T10:45:40.657+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dependencies" /><category scheme="http://www.blogger.com/atom/ns#" term="generics" /><category scheme="http://www.blogger.com/atom/ns#" term=".Net" /><title>Wishlist: Derived generic parameters</title><content type="html">In .Net generics gives a nice way to make type agnostic code that are not limited to a specific type.&lt;br /&gt;
&lt;br /&gt;
The following two types are taken from the plain framework.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: x-small;"&gt;interface IBusinessEntity&amp;lt;T&amp;gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; T Id {get;set;}&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: x-small;"&gt;interface IDao&amp;lt;T,TT&amp;gt; where T : IBusinessEntity&amp;lt;TT&amp;gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; T Get(TT);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TT Save(T);&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
As shown you can use gemeric types as generic parameters for other types. In the IDao interface, I have specified that T must be a IBusinessEntity interface with the TT type as a generic parameter.&lt;br /&gt;
In my example I will create a Article class that implements the IBusinessEntity interface and a generic Dao implementation&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: x-small;"&gt;class Article : IBusinessEntity&amp;lt;int&amp;gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //some code&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: x-small;"&gt;class Dao&amp;lt;T,TT&amp;gt; : IDao&amp;lt;T,TT&amp;gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //some code&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
Now&amp;nbsp;I want to get a dao for the class you just created. As Article has int as a generic parameter, the Dao objects has to defined with the article type as well as int to be able to compile.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: x-small;"&gt;var dao = new Dao&amp;lt;Article,int&amp;gt;();&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Once you apply "Article", the only valid type as TT is "int". If you apply anything else, the compiler will let you know that "Article" is not valid. The reason for this is that in the definition of IDao, T has a requirement for T, not TT.&lt;br /&gt;
It has been bugging me that the compiler complains about the type of&amp;nbsp;T and not the type of TT. T is the important generic parameter, and TT could just be derived from that.&lt;br /&gt;
&lt;br /&gt;
In future releases of .net I would like to be able to write the following.&lt;br /&gt;
&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: x-small;"&gt;interface&amp;nbsp;IDao&amp;lt;T&amp;lt;TT&amp;gt;&amp;gt; where T : IBusinessEntity&amp;lt;TT&amp;gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; T Get(TT);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TT Save(T);&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
This way I could&amp;nbsp;specify TT as part of the signature, but as TT is derived from what type T is, I would&amp;nbsp;only have to specify T when using it.&lt;br /&gt;
When creating the dao I could&amp;nbsp;then write.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: x-small;"&gt;var dao = new Dao&amp;lt;Article&amp;gt;();&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This is a small improvement, but it would remove some strange dependency error&amp;nbsp;when using multiple generic parameters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-6895701042683243978?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VZ4gwUEUVmzPXJwFoFQJKU77ocE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VZ4gwUEUVmzPXJwFoFQJKU77ocE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VZ4gwUEUVmzPXJwFoFQJKU77ocE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VZ4gwUEUVmzPXJwFoFQJKU77ocE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=n2544gWxY5Q:CyBqepyvKG8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=n2544gWxY5Q:CyBqepyvKG8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=n2544gWxY5Q:CyBqepyvKG8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/n2544gWxY5Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/6895701042683243978/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2012/01/wishlist-derived-generic-parameters.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/6895701042683243978?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/6895701042683243978?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/n2544gWxY5Q/wishlist-derived-generic-parameters.html" title="Wishlist: Derived generic parameters" /><author><name>Rune Juhl-Petersen</name><uri>https://profiles.google.com/101185513916654144484</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-71e15bODk8Q/AAAAAAAAAAI/AAAAAAAAACw/Ozl3aMWDK9s/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2012/01/wishlist-derived-generic-parameters.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUER346fip7ImA9WhRTGU4.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-4173946859071590189</id><published>2011-11-10T13:45:00.004+01:00</published><updated>2011-11-10T15:10:06.016+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-10T15:10:06.016+01:00</app:edited><title>Mostly immutable</title><content type="html">I have had the "pleasure" of working with BizTalk on a few projects now.&lt;br /&gt;
&lt;br /&gt;
I will save my general impression of Biztalk for another post. This is just to mention a undocumented side effect in BizTalk.&lt;br /&gt;
&lt;br /&gt;
One of the key things in BizTalk is that all messages are immutable. I have found this to be mostly true.&lt;br /&gt;
&lt;br /&gt;
In the following Message_1 and Message_2 are messages and should be immutable (except for in the block that constructs them)&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue; font-family: 'Courier New', Courier, monospace; font-size: small;"&gt;Variable_1 = Message_1;&lt;br /&gt;XmlSplitter.GetSFPage(Variable_1,0,2);&lt;br /&gt;Message_2 = new System.Xml.XmlDocument();&lt;br /&gt;Message_2.LoadXml(Message_1.OuterXml);&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: lime; font-family: 'Courier New', Courier, monospace; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
Message_1 is constructed elsewhere and yet we are able to change it by loading it into an XmlDocument. the above code is XLANG and I think it's a bug that the first line of code does not clone the message.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-4173946859071590189?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TdAtfzqrZLmE1tcPvpq_Zovxa2k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TdAtfzqrZLmE1tcPvpq_Zovxa2k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TdAtfzqrZLmE1tcPvpq_Zovxa2k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TdAtfzqrZLmE1tcPvpq_Zovxa2k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=tQLvoYlaCvQ:yRBJmclBZjQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=tQLvoYlaCvQ:yRBJmclBZjQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=tQLvoYlaCvQ:yRBJmclBZjQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/tQLvoYlaCvQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/4173946859071590189/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2011/11/mostly-immutable.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/4173946859071590189?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/4173946859071590189?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/tQLvoYlaCvQ/mostly-immutable.html" title="Mostly immutable" /><author><name>Rune Juhl-Petersen</name><uri>https://profiles.google.com/101185513916654144484</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-71e15bODk8Q/AAAAAAAAAAI/AAAAAAAAACw/Ozl3aMWDK9s/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2011/11/mostly-immutable.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAEQX4_cSp7ImA9WhZbEkw.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-2488018521372734990</id><published>2011-06-15T08:11:00.002+02:00</published><updated>2011-06-16T09:51:40.049+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-16T09:51:40.049+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Security" /><title>Token based credit cards</title><content type="html">Like so many others I have an account on the playstation network. I also have accounts on iTunes and on Amazon. What these services have in common is that they save you credit card information on their servers so you don't have to type them every time you need to buy something from them.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This makes it very easy for users to buy stuff from them once the users are logged into their systems. This design however has some serious flaws. A problem is that all the informations needed to withdraw money from your credit card is registered on each service provider. You have more or less handed out a master key to your bank account. Online trade is based on trust and although I do trust these sites not to misuse my creditcard details, they are just managed by humans and are therefore not perfect. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What I would like to see is some kind of token based credit card for the internet. For any site that would like to persist my credit card information I could create a token that they could use to withdraw money from my credit card in the future. This way I could remove their access to my credit card without closing the card entirely. If the token was compromised I could see from which site they got it.&lt;/div&gt;&lt;div&gt;If the tokens included knowledge of the site it was to be used with, it would also be possible for banks to invalidate all tokens issued for a specific site such as Playstation Network.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I just think the current creditcard technology on the net seems a bit outdated.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-2488018521372734990?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EHrnoaaPv6rKE6XXAOWe7eNeksM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EHrnoaaPv6rKE6XXAOWe7eNeksM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EHrnoaaPv6rKE6XXAOWe7eNeksM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EHrnoaaPv6rKE6XXAOWe7eNeksM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=TvtYrcgerC0:vKjphWZTfvo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=TvtYrcgerC0:vKjphWZTfvo:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=TvtYrcgerC0:vKjphWZTfvo:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/TvtYrcgerC0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/2488018521372734990/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2011/05/token-based-credit-cards.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/2488018521372734990?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/2488018521372734990?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/TvtYrcgerC0/token-based-credit-cards.html" title="Token based credit cards" /><author><name>Rune Juhl-Petersen</name><uri>https://profiles.google.com/101185513916654144484</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-71e15bODk8Q/AAAAAAAAAAI/AAAAAAAAACw/Ozl3aMWDK9s/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2011/05/token-based-credit-cards.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4NRn0-fCp7ImA9WhZREkQ.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-8732814558784009850</id><published>2011-04-08T22:59:00.003+02:00</published><updated>2011-04-08T23:09:57.354+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-08T23:09:57.354+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="XPath" /><category scheme="http://www.blogger.com/atom/ns#" term="XML" /><title>XPath - fixed!</title><content type="html">As you might have read in my previous post, I'm not too happy about the way the XPath works with namespaces.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To make things better I have created some regular expressions that will allow me to write XPaths the way I want to write them and still have them work with real XPath engines out there. It makes the XPath ignorant towards namespaces that are not defined in my XPath query. Namespaces that are defined in my XPath query will be handled like before.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;if(!xpath.StartsWith("/")){&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;xpath= "./" + xpath;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;xpath = Regex.Replace(xpath,@"/(?&lt;node&gt;[\w]+)\[","/*[local-name()=='${node}' and ");&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/node&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;xpath = Regex.Replace(xpath,@"/(?&lt;node&gt;[\w]+)","/*[local-name()=='${node}']");&lt;/node&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;PS. I'll get back to the post and tidy the code up later&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-8732814558784009850?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0Rz8CoyB80KhlcvcxqTr6T3V6Tc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0Rz8CoyB80KhlcvcxqTr6T3V6Tc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0Rz8CoyB80KhlcvcxqTr6T3V6Tc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0Rz8CoyB80KhlcvcxqTr6T3V6Tc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=LHb0ny8CrsE:8AWS-qME7r0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=LHb0ny8CrsE:8AWS-qME7r0:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=LHb0ny8CrsE:8AWS-qME7r0:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/LHb0ny8CrsE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/8732814558784009850/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2011/04/xpath-fixed.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/8732814558784009850?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/8732814558784009850?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/LHb0ny8CrsE/xpath-fixed.html" title="XPath - fixed!" /><author><name>Rune Juhl-Petersen</name><uri>https://profiles.google.com/101185513916654144484</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-71e15bODk8Q/AAAAAAAAAAI/AAAAAAAAACw/Ozl3aMWDK9s/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2011/04/xpath-fixed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4AQ30-eCp7ImA9WhZREEQ.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-7365016255959290184</id><published>2011-04-02T10:10:00.002+02:00</published><updated>2011-04-06T15:52:22.350+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-06T15:52:22.350+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="XPath" /><category scheme="http://www.blogger.com/atom/ns#" term="namespaces" /><category scheme="http://www.blogger.com/atom/ns#" term="XML" /><title>namespace mismatch</title><content type="html">Once in a while you come across technologies that on their own are great, but put together are painful. Either you just live with the pain, you deselect one of the technologies or you try to improve the way they interact. This is the case with namespaces and xml/xpath.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let me just explain that I am a big fan of XML and of XPath and XMLSchemas. They are related and work quite nicely. The schemas describe the data structure and can be used for validation. The XML &lt;b&gt;&lt;i&gt;is&lt;/i&gt;&lt;/b&gt; the datastructure and XPath is the query language for searching in the datastructure. Together these are very powerful.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Over the years I have heard a lot of people complain about XML, but often they are using it for the wrong purpose, they don't know the power of XPath to assist them or they are drowning in namespaces and prefixes in their xml documents.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Namespaces in xml are introduced to allow cross references across schemas and thereby allowing reuse of schemas. Every namespace, other than the default namespace, is given a prefix. For loosely structured documents this enables the writer of the XML document to specify on every single element, in what namespace it is defined. A good example of that is the XSLT documents. Here prefixes helps the writer of the xml validate only the elements that are part of the XSLT transformation logic. For this purpose namespaces and prefixes are great.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What I generally see with custom xml structures however is that the structure is more strictly defined and name clashes are less likely. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If I were to define the way xml and xsd would work with namespaces I would make the namespace prefixes optional on xml nodes where type and namespace could be derived from its placement in the structure. If the schema eg. only allows for one type of "address" element at a given location, why should I specify what type of address element it is? Only where name and type clashes occur would I demand namespace prefixes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Namespaces should be treated as metadata of elements. They are just for validation and identifying the type of an element where name clashes could occur. For everything else they are irrelevant.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That brings me on to XPath and namespaces. Namespace information is metadata as far as XPath is concerned and you have to ask for the details if you want to use it in the query. It's a different story with prefixes. Actually the prefix is part of the name you can search for. This makes absolutely no sense as prefixes are only valid within a single document, and a the next document you receive might have other prefixes but be just as valid. The impact is that you have to make your XPath queries quite verbose to ignore the prefix and it really is a painful experience. If I could redesign XPath, I would make XPath ignore the prefixes of elements to be the default behaviour. Actually I don't see where anyone should use the prefix knowledge in a search. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&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/15135700-7365016255959290184?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BI7o2FHe7IKL2hw0dMaNsAyUpn0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BI7o2FHe7IKL2hw0dMaNsAyUpn0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BI7o2FHe7IKL2hw0dMaNsAyUpn0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BI7o2FHe7IKL2hw0dMaNsAyUpn0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=BQwNpPSGojg:TVftPEHEX5A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=BQwNpPSGojg:TVftPEHEX5A:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=BQwNpPSGojg:TVftPEHEX5A:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/BQwNpPSGojg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/7365016255959290184/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2011/04/namespace-mismatch.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/7365016255959290184?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/7365016255959290184?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/BQwNpPSGojg/namespace-mismatch.html" title="namespace mismatch" /><author><name>Rune Juhl-Petersen</name><uri>https://profiles.google.com/101185513916654144484</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-71e15bODk8Q/AAAAAAAAAAI/AAAAAAAAACw/Ozl3aMWDK9s/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2011/04/namespace-mismatch.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcCQ305fip7ImA9Wx9WFE8.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-6522784682046295533</id><published>2011-01-18T16:30:00.000+01:00</published><updated>2011-01-19T09:01:02.326+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-19T09:01:02.326+01:00</app:edited><title>When descission makers are clueless</title><content type="html">It's a well known fact that you don't have to know anything to make a&amp;nbsp;descision. Not knowing anything really speeds up the process of descisions and in some cases the descisions are just as good. In some cases they come with a price of being worthless or even disasterous.&lt;br /&gt;
&lt;br /&gt;
When you don't know about what you are to descide upon a common aproach is to seek advice by somebody that know something about the subject. &lt;br /&gt;
&lt;br /&gt;
Clueless descissions&amp;nbsp;are most destructive when done in higher management because the consequences are often bigger. This includes politicians that are elected to make descissions. In Denmark there have rescently been some bad examples of such descissions regarding IT.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Descissions about open document standards. Politicians kept OOXML in the loop although there was a better alternative that was more open at that time.&lt;/li&gt;
&lt;li&gt;NemId was chosen as the new authentication for citizens of Denmark when communicating with the goverment. (about taxes and stuff). I have used it and its work nicely from the end users point of view. The problem with the solution is that is uses certificates with public/private keys...&amp;nbsp; The private keys are placed on a centralized server. They have broken basic security principles and I think that is a problem.&lt;/li&gt;
&lt;li&gt;Rejsekortet is a new way of paying for public transportation. To do this they implemented their own encryption algorithm. The system has not been put into production yet, but the encryption algoritm has already been broken.&lt;/li&gt;
&lt;li&gt;Digital elections. Computers can be used for almost anything else. Elections part of a democratic proccess is not part of what computers can be used for. Pure electronic elections don't support recounting of votes and tampering with all votes can't be guarenteed. Elections of less importance,&amp;nbsp;with truely trustworthy third parties can be implemented. Everybody has a interest in a democratic election and there is no trustworthy part that can ensure that the votes are not tampered with. It has been decided by politicians that electronic elections will be tried out.&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-6522784682046295533?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eK98HUWXGRTh_WVbrJLg1vy1tGA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eK98HUWXGRTh_WVbrJLg1vy1tGA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eK98HUWXGRTh_WVbrJLg1vy1tGA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eK98HUWXGRTh_WVbrJLg1vy1tGA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=jaDBHRTwfTw:nwsxp4jP1EE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=jaDBHRTwfTw:nwsxp4jP1EE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=jaDBHRTwfTw:nwsxp4jP1EE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/jaDBHRTwfTw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/6522784682046295533/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2010/01/when-descission-makers-are-clueless.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/6522784682046295533?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/6522784682046295533?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/jaDBHRTwfTw/when-descission-makers-are-clueless.html" title="When descission makers are clueless" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2010/01/when-descission-makers-are-clueless.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ADSHs4fCp7ImA9Wx9WE0k.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-8136070839361710363</id><published>2011-01-18T10:03:00.002+01:00</published><updated>2011-01-18T10:09:39.534+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-18T10:09:39.534+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dynamic" /><category scheme="http://www.blogger.com/atom/ns#" term="Reflection" /><category scheme="http://www.blogger.com/atom/ns#" term=".Net" /><category scheme="http://www.blogger.com/atom/ns#" term="4.0" /><title>Dynamic method binding</title><content type="html">One of the added features to ﻿C# 4.0 was dynamic objects. It gives late binding to C# so everything doesn't have to checked at compile time. In some cases this makes it a lot easier to use reflection as you don't have to use any of the .net API's to do so. You can act directly on the object as if you had the type at hand. All you need to know is the footprint of what you need to access. Most examples emphasize how this can be used when integrating with other technologies like old com objects etc, but I have been looking for usages outside that scope. One is ofcourse reflection, another one is dynamic method binding that I will try and explain.&lt;br /&gt;
﻿﻿﻿﻿﻿﻿ &lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_H4ZQbYRhfK0/TTRPMAKkC_I/AAAAAAAABb4/B23mb2laDx0/s1600/dynamicclasses.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" n4="true" src="http://3.bp.blogspot.com/_H4ZQbYRhfK0/TTRPMAKkC_I/AAAAAAAABb4/B23mb2laDx0/s1600/dynamicclasses.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Basic OO with cats and dogs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;I create&amp;nbsp;the traditionel object structure to support me explain what I mean. Animal is a pure abstract concept, Cat is an Animal and so is Dog.&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;a href="http://3.bp.blogspot.com/_H4ZQbYRhfK0/TTRPYah0fZI/AAAAAAAABb8/UxheTTkGkpc/s1600/dynamicmethods.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" n4="true" src="http://3.bp.blogspot.com/_H4ZQbYRhfK0/TTRPYah0fZI/AAAAAAAABb8/UxheTTkGkpc/s1600/dynamicmethods.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Make the animals make som noise&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;﻿﻿﻿I have created a&amp;nbsp;MakeSound method that operates on&amp;nbsp;the interface and one for each of the classes.﻿ As there is no general sound that will match any animal&amp;nbsp;I just print ????? to the screen when in the context of Animal. &lt;br /&gt;
What I want is to have a list of animals containing cats and dogs and then call the MakeSound for each animal in the list.﻿&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_H4ZQbYRhfK0/TTRRQ6DWz9I/AAAAAAAABcA/ouxbcfwfJ-s/s1600/dynamic.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" n4="true" src="http://2.bp.blogspot.com/_H4ZQbYRhfK0/TTRRQ6DWz9I/AAAAAAAABcA/ouxbcfwfJ-s/s1600/dynamic.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;As in C# &amp;lt; 4.0&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;The big question is what method is actually called. The answer is that the method binding is done at compile time, the best match is the method that takes the interface as a parameter. All the objects are treated as of type Animal. This is the way it has always worked in C# and it should therefore be no surprise if you have been in a similar situation. The output is as follows.&lt;br /&gt;
﻿ &lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_H4ZQbYRhfK0/TTRSnPcdE5I/AAAAAAAABcI/LdCMAk_OvzM/s1600/outputVar.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" n4="true" src="http://3.bp.blogspot.com/_H4ZQbYRhfK0/TTRSnPcdE5I/AAAAAAAABcI/LdCMAk_OvzM/s1600/outputVar.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Result of program with static method binding&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;﻿﻿﻿﻿﻿ &lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="clear: right; cssfloat: right; float: right; margin-bottom: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_H4ZQbYRhfK0/TTRStX4vAoI/AAAAAAAABcM/uKc6uqNipns/s1600/dynamicvar.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" n4="true" src="http://3.bp.blogspot.com/_H4ZQbYRhfK0/TTRStX4vAoI/AAAAAAAABcM/uKc6uqNipns/s1600/dynamicvar.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Use of var keyword&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;﻿﻿﻿﻿﻿﻿ &lt;br /&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;With&amp;nbsp;C# 3.5 the var keyword was introduced. One might think that this changed the way this would work as the programmer no longer defines the type and the framework should therefore be able to select a better method implementation automatically. The answer is that the var is just a way to have the compiler derive the type instead of the programmer. This is all done at compile time and the best match will therefore still be the method that operates on the interface.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_H4ZQbYRhfK0/TTRS_bzImFI/AAAAAAAABcU/dZLP3yg_c4w/s1600/dynamicchange.PNG" imageanchor="1" style="clear: left; cssfloat: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" n4="true" src="http://1.bp.blogspot.com/_H4ZQbYRhfK0/TTRS_bzImFI/AAAAAAAABcU/dZLP3yg_c4w/s1600/dynamicchange.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Handle the objects as dynamic instead&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;The dynamic keyword was introduced with C# 4.0 and this changes the possibilities when writing code like this. When treating every object in the list as a dynamic object, the compiler won't bind to any method but will leave it to the runtime to make the connection. This means that the type of every object is considered and handled on its own and the items in the list won't nescesarily result in the same method being called. This can be very usefull when iterating tree structures etc. The downside is that you will have no intellisense and no compile time validation when writing the code.&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;
&lt;/div&gt;As the best methods are now called, the output will be cat and dog specific.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_H4ZQbYRhfK0/TTRTD1T8lwI/AAAAAAAABcY/-_tkSjTUbtg/s1600/outputdynamic.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" n4="true" src="http://2.bp.blogspot.com/_H4ZQbYRhfK0/TTRTD1T8lwI/AAAAAAAABcY/-_tkSjTUbtg/s1600/outputdynamic.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Output when treating the objects as dynamic&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;This can definately clean up some of my code. I might write a comment along with the code so that people in the future can figure out my intentions.&lt;br /&gt;
&lt;br /&gt;
Related posts:&lt;br /&gt;
&lt;a href="http://dotnetexception.blogspot.com/2009/11/wrapping-objects-with-interfaces.html"&gt;Wrapping objects with interfaces&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://dotnetexception.blogspot.com/2009/11/dynamic-duck-typing-in-net-35.html"&gt;Dynamic duck typing in .Net 3.5&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-8136070839361710363?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IH1Ibek7ymidz-qDUuz-KqlWmzQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IH1Ibek7ymidz-qDUuz-KqlWmzQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IH1Ibek7ymidz-qDUuz-KqlWmzQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IH1Ibek7ymidz-qDUuz-KqlWmzQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=AsEJpV2TYZw:j1vxbRyPcks:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=AsEJpV2TYZw:j1vxbRyPcks:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=AsEJpV2TYZw:j1vxbRyPcks:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/AsEJpV2TYZw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/8136070839361710363/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2011/01/dynamic-method-binding.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/8136070839361710363?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/8136070839361710363?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/AsEJpV2TYZw/dynamic-method-binding.html" title="Dynamic method binding" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_H4ZQbYRhfK0/TTRPMAKkC_I/AAAAAAAABb4/B23mb2laDx0/s72-c/dynamicclasses.PNG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2011/01/dynamic-method-binding.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkENRnk5fCp7ImA9Wx5XE0k.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-6759248509323496573</id><published>2010-09-13T03:44:00.002+02:00</published><updated>2010-09-13T04:24:57.724+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-13T04:24:57.724+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Human nature" /><category scheme="http://www.blogger.com/atom/ns#" term="Test" /><category scheme="http://www.blogger.com/atom/ns#" term="Motivation" /><title>Testers vs. Developers</title><content type="html">Some time ago I read somewhere that Microsoft had problems getting software testers in Denmark. They were puzzled by this as they found the workforce to be educated and they had no trouble finding developers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although testers and developers should share some common knowledge of technology, their personalities are completely different. Good developers need to be inovative to be able to find solutions to problem they have never seen before. They should focus on the big picture and always strive for the best compromise. Good testers on the other hand have to focus on details and they need to be able to repeat an exact action and follow a script. The qualities wanted are opposites and it will most likely never be possible to find a person that posseses both.&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://dotnetexception.blogspot.com/2007/11/my-prefered-developer-profile.html"&gt;My Prefered Developer Profile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dotnetexception.blogspot.com/2010/01/there-is-no-such-thing-as-perfect.html"&gt;There is no such thing as perfect&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.version2.dk/artikel/14884-test-er-fy-ord-i-jobannoncer-microsoft-kan-ikke-hyre-danske-software-testere"&gt;http://www.version2.dk/artikel/14884-test-er-fy-ord-i-jobannoncer-microsoft-kan-ikke-hyre-danske-software-testere&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-6759248509323496573?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-SBCjJ93YKQMdJJbmzDB8pk7pJ0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-SBCjJ93YKQMdJJbmzDB8pk7pJ0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-SBCjJ93YKQMdJJbmzDB8pk7pJ0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-SBCjJ93YKQMdJJbmzDB8pk7pJ0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=wLSj_Ol3L3E:K6YwEHQDbaM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=wLSj_Ol3L3E:K6YwEHQDbaM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=wLSj_Ol3L3E:K6YwEHQDbaM:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/wLSj_Ol3L3E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/6759248509323496573/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2010/09/testers-vs-developers.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/6759248509323496573?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/6759248509323496573?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/wLSj_Ol3L3E/testers-vs-developers.html" title="Testers vs. Developers" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2010/09/testers-vs-developers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEASXc5eCp7ImA9Wx5SEEU.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-486648729004322223</id><published>2010-08-06T11:24:00.000+02:00</published><updated>2010-08-06T11:24:08.920+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-06T11:24:08.920+02:00</app:edited><title>5 years and still going</title><content type="html">Yesterday it was 5 years since I started this blog. I started it because I needed somewhere to let steam out. (And I actually started it together with a friend) I wasn't sure I would be able to continue posting to it but after 5 years I still have issues I want to share (with myself). Luckily the world never stops changing and I never stop discovering things I hadn't thought of before.&lt;br /&gt;
&lt;br /&gt;
The focus has been from very technical to philosofical about human nature. I'm looking forward for all the new blogpost that I am to write :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-486648729004322223?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Mo-CGa1oGrYvd6vXyw_PTwN0sAU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Mo-CGa1oGrYvd6vXyw_PTwN0sAU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Mo-CGa1oGrYvd6vXyw_PTwN0sAU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Mo-CGa1oGrYvd6vXyw_PTwN0sAU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=zKWw7u4o4jk:sgiC4itt5m8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=zKWw7u4o4jk:sgiC4itt5m8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=zKWw7u4o4jk:sgiC4itt5m8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/zKWw7u4o4jk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/486648729004322223/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2010/08/5-years-and-still-going.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/486648729004322223?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/486648729004322223?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/zKWw7u4o4jk/5-years-and-still-going.html" title="5 years and still going" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2010/08/5-years-and-still-going.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAEQXozeip7ImA9WxFUE00.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-4521225662413579584</id><published>2010-06-23T17:25:00.002+02:00</published><updated>2010-06-23T17:25:00.482+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-23T17:25:00.482+02:00</app:edited><title>Trust me, I know what I'm doing</title><content type="html">Trust is important to any social relationship or communication. While I was out for a run I listened to a podcast about this and it really made me think. It stated that trust is also good for business. If you trust your surroundings you will be more open for doing business. Societies based on trust have a higher growth than societies that do not incorporate trust. This is a great message that I will try to spread around.&lt;br /&gt;
&lt;br /&gt;
On a personal level you will gain a lot by trusting other people as well. By doing so you can benefit a lot more from other people. If you for instance are an employer, but don't trust your employees the only value they can add to your organisation is doing the stuff you though of to begin with. Once you trust your employees, they will be able to add value to your organisation on their own. You will no longer have to supervise them and they will be able to inovate. They will have&amp;nbsp;to take ownership and it will lead to a higher level of motivation.&lt;br /&gt;
&lt;br /&gt;
Actually you should not trust me because I know what I am doing. You should trust me because it is in my best interrest to help you out and because you will benefit more if you let me do it my way.&lt;br /&gt;
&lt;br /&gt;
Related posts:&lt;br /&gt;
&lt;a href="http://dotnetexception.blogspot.com/2010/04/leadership-is-about-motivation.html"&gt;http://dotnetexception.blogspot.com/2010/04/leadership-is-about-motivation.html&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://dotnetexception.blogspot.com/2009/11/flank-your-problems.html"&gt;http://dotnetexception.blogspot.com/2009/11/flank-your-problems.html&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://dotnetexception.blogspot.com/2010/01/there-is-no-such-thing-as-perfect.html"&gt;http://dotnetexception.blogspot.com/2010/01/there-is-no-such-thing-as-perfect.html&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://dotnetexception.blogspot.com/2009/03/misunderstanding-path-to-new-ideas.html"&gt;http://dotnetexception.blogspot.com/2009/03/misunderstanding-path-to-new-ideas.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-4521225662413579584?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CGPHaJnAC6O5Ny2lpKA6rSEb0RY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CGPHaJnAC6O5Ny2lpKA6rSEb0RY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CGPHaJnAC6O5Ny2lpKA6rSEb0RY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CGPHaJnAC6O5Ny2lpKA6rSEb0RY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=frqamY_9HQM:OXU5f45JlPo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=frqamY_9HQM:OXU5f45JlPo:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=frqamY_9HQM:OXU5f45JlPo:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/frqamY_9HQM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/4521225662413579584/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2010/06/trust-me-i-know-what-im-doing.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/4521225662413579584?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/4521225662413579584?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/frqamY_9HQM/trust-me-i-know-what-im-doing.html" title="Trust me, I know what I'm doing" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2010/06/trust-me-i-know-what-im-doing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUNQno9fSp7ImA9WxFQFkg.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-2911188135154646708</id><published>2010-05-14T16:26:00.000+02:00</published><updated>2010-05-12T11:41:33.465+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-12T11:41:33.465+02:00</app:edited><title>Discuss this!</title><content type="html">I have categorized discussions in 4 groups&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Religious&lt;/strong&gt;&lt;br /&gt;
When in the context of a religion, the main goal of a discussion is to reach an already given conclusion. Any valid arguments are discharted if they contradict the given conclusion.&lt;br /&gt;
This kind of discussion is often held by religious people such as evangelists (the software kind too) or sales people. It's also the favorite form for drunk people trying to argue that they are not drunk.&lt;br /&gt;
Religious discussions also occur if you are too specialized. If the only tool you know how to use is a hammer, you are bound to use a hammer to solve every problem.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Philosophical&lt;/strong&gt;&lt;br /&gt;
These are discussions without a goal. That might sound useless, but it's not that bad at all. It's about questioning your own beliefs.&lt;br /&gt;
It's a mind opener. It's about challenging your ideas, getting the big picture.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Scientific&lt;/strong&gt;&lt;br /&gt;
The scientific discussion is about reducing the complexity of a domain. The conclusions might be inaccurate, but it should result in the optimal solution all things considered. Issues like feasibility and return of investment are handled in these discussions as well as risks. It should be noted that a conclusion concluded today, might me changed tomorrow. Scientific discussions embrace and accept change.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Lawful&lt;/strong&gt;&lt;br /&gt;
Law is about details. The more the merrier. When you reach the maximum amount of details any human can comprehend, you are about half way there. The downside is that often the big picture and reasoning is lost in the pursuit for details. Although the focus is on details, even the details are sometimes lost in discussions like that. The last man standing is the one with photographic memory and who can stay awake the longest. To succeed in this category I suggest that you give up on any social life and start nit picking on your surroundings. Although there can be a winner in such a discussion, the real looser is the common sense and productivity.&lt;br /&gt;
Law is a primal discussion form and we are trained to master it when we have arguments in kindergarten about what is right and wrong and which kid has more candy (milimeterdemokrati).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When it comes to software development, you might have these different discussions at different points of time on your project. The religious discussions occur in the beginning of a project, or when changes to the project occur. Although the religious debate has a high return in the short term, the long term might suffer.&lt;br /&gt;
As the philosophical discussion is about challenging your current beliefs, it's great for workshops or when a project is stuck in a dead end.&lt;br /&gt;
The scientific discussion is great for decision making on a project. What separates a decision derived from a scientific discussion from a religious discussion is the scope.&lt;br /&gt;
The lawful discussion comes into play on a software project when someone feels he's not treated right. The discussion often can't be resolved by the parties involved and a third party is then required.&lt;br /&gt;
&lt;br /&gt;
Let the discussions begin!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-2911188135154646708?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/C6yOCFokoIhNjhr0d0hZKdyk8rU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C6yOCFokoIhNjhr0d0hZKdyk8rU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/C6yOCFokoIhNjhr0d0hZKdyk8rU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C6yOCFokoIhNjhr0d0hZKdyk8rU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=wqWyefUxkqA:tjWMy1vn0qA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=wqWyefUxkqA:tjWMy1vn0qA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=wqWyefUxkqA:tjWMy1vn0qA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/wqWyefUxkqA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/2911188135154646708/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2010/05/discuss-this.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/2911188135154646708?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/2911188135154646708?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/wqWyefUxkqA/discuss-this.html" title="Discuss this!" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2010/05/discuss-this.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQESHY6cCp7ImA9WxFSEUk.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-1610526089158494949</id><published>2010-04-13T09:18:00.003+02:00</published><updated>2010-04-13T09:38:29.818+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-13T09:38:29.818+02:00</app:edited><title>Change the world, bit by bit</title><content type="html">Although you meet resistance, you should still still keep on trying to change the world.&lt;br /&gt;
&lt;br /&gt;
When it comes to software you are often met with statements like:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;This technology is going to be a mayor player.&lt;/li&gt;
&lt;li&gt;Its a strategic decission to use this product.&lt;/li&gt;
&lt;li&gt;Thats what the client wants.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
If you are a software developer and know better than what has been presented to you, you should share this knowledge. If we let the world evolve by the words of marketing people, complexity will keep on increasing, with out any innovation. If you want to help reducing complexity, please do let the people around you know when they are mistaken.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-1610526089158494949?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XphqDoUZvJOz4QtDkzlSs0LacSM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XphqDoUZvJOz4QtDkzlSs0LacSM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XphqDoUZvJOz4QtDkzlSs0LacSM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XphqDoUZvJOz4QtDkzlSs0LacSM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=-4WmdqoWQS8:p19rZIo8Lrk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=-4WmdqoWQS8:p19rZIo8Lrk:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=-4WmdqoWQS8:p19rZIo8Lrk:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/-4WmdqoWQS8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/1610526089158494949/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2010/04/change-world-bit-by-bit.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/1610526089158494949?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/1610526089158494949?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/-4WmdqoWQS8/change-world-bit-by-bit.html" title="Change the world, bit by bit" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2010/04/change-world-bit-by-bit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YAQHo7cSp7ImA9WxFSEEg.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-6500439178849135761</id><published>2010-04-12T07:01:00.002+02:00</published><updated>2010-04-12T08:52:21.409+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-12T08:52:21.409+02:00</app:edited><title>Hierarchy of Information</title><content type="html">&lt;div&gt;Most enterprise software solutions deals with data. Actually I can't think of any that don't. Many enterprise solutions deal with lots of data. The application helps the user to deal with these massive amounts of data.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
I think of different levels of information. Each level decreases in size, but increases in value. Data in its lowest level is not very valuable. A bit or a byte of data is quite useless out of context. When characters are added together to form a string, the value increases significantly. A string in the form of a sentence is easier to remember than a equally amount of random bytes. The amount of information has decreased, but its value has increased. We are now able to compress the information to something smaller. Raw data is refined to information, knowledge and wisdom.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5089201369850016466" src="http://4.bp.blogspot.com/_H4ZQbYRhfK0/RqB5rqBXctI/AAAAAAAAAAM/kmZN2UdqRHY/s400/datapyramid.png" style="cursor: hand; display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Earth computer in &lt;a href="http://www.amazon.co.uk/gp/product/0330258648?ie=UTF8&amp;amp;tag=throwsdotnete-21&amp;amp;linkCode=as2&amp;amp;camp=1634&amp;amp;creative=19450&amp;amp;creativeASIN=0330258648"&gt;The Hitchhiker's Guide To The Galaxy&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.co.uk/e/ir?t=throwsdotnete-21&amp;amp;l=as2&amp;amp;o=2&amp;amp;a=0330258648" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; margin: 0px;" width="1" /&gt;&amp;nbsp;is the ultimate example of this refinement of information. All the information in the world is refined to the very short and easy to remember result: &lt;em&gt;"42".&lt;/em&gt; If this was not fiction, this result would be the single most valuable piece of information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Every business strives to find the secrets of making lots of money( or save the planet ), and every business application is build to expose these secrets. &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/15135700-6500439178849135761?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_1uSAoZbH_-TXS4eZmp_Fpfd2xI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_1uSAoZbH_-TXS4eZmp_Fpfd2xI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_1uSAoZbH_-TXS4eZmp_Fpfd2xI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_1uSAoZbH_-TXS4eZmp_Fpfd2xI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=4l2349TY19A:cjX6GZ8-_5g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=4l2349TY19A:cjX6GZ8-_5g:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=4l2349TY19A:cjX6GZ8-_5g:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/4l2349TY19A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/6500439178849135761/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2010/04/hierarchy-of-information.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/6500439178849135761?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/6500439178849135761?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/4l2349TY19A/hierarchy-of-information.html" title="Hierarchy of Information" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_H4ZQbYRhfK0/RqB5rqBXctI/AAAAAAAAAAM/kmZN2UdqRHY/s72-c/datapyramid.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2010/04/hierarchy-of-information.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEBQXozfCp7ImA9WxFTFks.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-3440332731015956910</id><published>2010-04-07T18:04:00.005+02:00</published><updated>2010-04-07T19:50:50.484+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-07T19:50:50.484+02:00</app:edited><title>Somebody has been reading my mind</title><content type="html">This december I won a book (actually I won four, but the other ones were just not as great) in a technology contest. I don't know how I have missed out on this one. I have seen it on the booksshelfes but I have not read it until now. I must say that its brilliant. "The Pragmatic Programmer" is a pleasure to read.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.amazon.co.uk/gp/product/020161622X?ie=UTF8&amp;amp;tag=throwsdotnete-21&amp;amp;linkCode=as2&amp;amp;camp=1634&amp;amp;creative=6738&amp;amp;creativeASIN=020161622X" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://ecx.images-amazon.com/images/I/41HXiIojloL._SL160_.jpg" /&gt;&lt;/a&gt;The Pragmatic programmer is about thinking while you develop. It &amp;nbsp;promotes the obvious that is apparently not as obvious as we thought.&amp;nbsp;Its as if the authors read my blog posts before I even wrote them :) This book really makes you think and I hope I can get my current collegues as well as future ones to read this so they can reflect a little about their actions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-3440332731015956910?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ufsFEVjWEGXJJyLP3LCMxZG5x9o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ufsFEVjWEGXJJyLP3LCMxZG5x9o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ufsFEVjWEGXJJyLP3LCMxZG5x9o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ufsFEVjWEGXJJyLP3LCMxZG5x9o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=Jq3ztXR7Q8w:VXQSTTHDnLk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=Jq3ztXR7Q8w:VXQSTTHDnLk:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=Jq3ztXR7Q8w:VXQSTTHDnLk:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/Jq3ztXR7Q8w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/3440332731015956910/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2010/04/somebody-has-been-reading-my-mind.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/3440332731015956910?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/3440332731015956910?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/Jq3ztXR7Q8w/somebody-has-been-reading-my-mind.html" title="Somebody has been reading my mind" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2010/04/somebody-has-been-reading-my-mind.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIBSHo8eyp7ImA9WxFXE0U.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-3120189913775053700</id><published>2010-04-06T16:26:00.003+02:00</published><updated>2010-05-20T21:25:59.473+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-20T21:25:59.473+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Leadership" /><category scheme="http://www.blogger.com/atom/ns#" term="Knowledge" /><category scheme="http://www.blogger.com/atom/ns#" term="Motivation" /><title>Leadership is about motivation</title><content type="html">Leadership is not a simple task, but I think you will come far if you focus on motivation.&lt;br /&gt;
&lt;br /&gt;
How to motivate while you lead can be done in a number of ways. The first step is of course to understand your teammembers. Find out what makes them tick.&lt;br /&gt;
I think the best way to go is to find common interests and focus on that. Knowing the persons on your team makes it easier to find something that will naturally interest the individual.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Cool cash&lt;/span&gt;&lt;br /&gt;
This an easy way to motivate people. Money is a fundamental requirement for everybody. The problem with this is thats if this is your only motivator you can easily be outbid by others.&lt;br /&gt;
If we reflect this to training a dog this resemples giving your dog treats when it does what you tell it to. It will work as long as the dog is hungry and likes your treats. If someone shows up with better treats you have lost.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Fear&lt;/span&gt;&lt;br /&gt;
This is the opposite of the Cool Cash motivator. This is where you punish people if they don't do as they are told. This method has worked like a charm for many dictators in the past. The downside is that there can't be&amp;nbsp;any alternatives to your leadership, and thats not easy to enforce in todays society. This works best if you have an uneducated workforce.&lt;br /&gt;
In dog training this resembles beating your dog untill it does it right.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Common interests&lt;/span&gt;&lt;br /&gt;
You need emphathy to succed with this one. You need to understand what drives the people working for you. If your workforce matches the tasks you have, it's going to be easy. They will more or less do it right whatever you say. This is about choosing the right team for the job. If you need to herd sheep, choosing a hunting dog would be a bad choice.&lt;br /&gt;
&lt;br /&gt;
Once you have your team put together you need to know what drives your team members. Some people strive for acknowledgement by coworkers, some live by the shear technology challenge presented to them and other people strive by other things. It's important to realize that motivation is not just important as to maximize output by your team. If you don't know how to motivate your team, it will collapse. And chances are that it will influence other parts of your business.&lt;br /&gt;
In dog world this resembles: If you have a herd dog and don't provide stimuli, it will take your house apart.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-3120189913775053700?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ngXV5DUPrj9wCN46WeEFmm9xDLI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ngXV5DUPrj9wCN46WeEFmm9xDLI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ngXV5DUPrj9wCN46WeEFmm9xDLI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ngXV5DUPrj9wCN46WeEFmm9xDLI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=QnzZe8o7t-8:e2UcJAwqHkg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=QnzZe8o7t-8:e2UcJAwqHkg:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=QnzZe8o7t-8:e2UcJAwqHkg:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/QnzZe8o7t-8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/3120189913775053700/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2010/04/leadership-is-about-motivation.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/3120189913775053700?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/3120189913775053700?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/QnzZe8o7t-8/leadership-is-about-motivation.html" title="Leadership is about motivation" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2010/04/leadership-is-about-motivation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YFSX4yeyp7ImA9WxBaEko.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-431394028778384372</id><published>2010-03-22T17:34:00.005+01:00</published><updated>2010-03-22T18:31:58.093+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-22T18:31:58.093+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Project Management" /><title>Plans are just for a general direction</title><content type="html">By now, it must be clear to most people in the software industry that software projects seldomly go as planned. &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_H4ZQbYRhfK0/S6dqBjrudqI/AAAAAAAAAJU/1of9XyWMj6U/s1600-h/41_15_13---Road-Closed-Detour-Sign_web.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_H4ZQbYRhfK0/S6dqBjrudqI/AAAAAAAAAJU/1of9XyWMj6U/s320/41_15_13---Road-Closed-Detour-Sign_web.jpg" vt="true" /&gt;&lt;/a&gt;&lt;/div&gt;There is a lot of debate in Denmark about &lt;br /&gt;
large govermental IT projects that fail. It would have surprised me more if they didn't fail. They are large project with a vast number of details that must all be fullfilled for the projects to succeed. That's just not a realistic scenario.&lt;br /&gt;
&lt;br /&gt;
An IT software project is about inovation and not about building something already known.&amp;nbsp;If you encounter a bump on the way on the road, you shouldn't have to force your way through it if there is a more sensible way around&amp;nbsp;that was not part of the project to begin with. There's bound to be some experimentation going on during&amp;nbsp;any project and you must be able to change the requirements along the way&amp;nbsp;as&amp;nbsp;the parties involved&amp;nbsp;get smarter and discover things about the domain at hand.&lt;br /&gt;
&lt;br /&gt;
These days, the role of the project manager isn't to keep the project on track, but find a way &lt;em&gt;when&lt;/em&gt; changes to the requirement ocur (not if, when). &lt;br /&gt;
If an IT software project is to support change, it's needless to say that it requires a lot of involvement from the client (the buyer of the project). You can't order some software that takes 3 years to build and expect it to be like you imagined it to be if it is build solely based on a document you wrote to begin with. If you want to benefit from a project you have to get your fingers dirty yourself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-431394028778384372?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/drwOF_CwqVoAQ-o7HCrRBJd3fYE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/drwOF_CwqVoAQ-o7HCrRBJd3fYE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/drwOF_CwqVoAQ-o7HCrRBJd3fYE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/drwOF_CwqVoAQ-o7HCrRBJd3fYE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=q6ATUqzzNbk:tcyUGDuwm3E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=q6ATUqzzNbk:tcyUGDuwm3E:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=q6ATUqzzNbk:tcyUGDuwm3E:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/q6ATUqzzNbk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/431394028778384372/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2010/03/plans-are-just-for-general-direction.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/431394028778384372?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/431394028778384372?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/q6ATUqzzNbk/plans-are-just-for-general-direction.html" title="Plans are just for a general direction" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_H4ZQbYRhfK0/S6dqBjrudqI/AAAAAAAAAJU/1of9XyWMj6U/s72-c/41_15_13---Road-Closed-Detour-Sign_web.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2010/03/plans-are-just-for-general-direction.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4HQHY4eip7ImA9WxBbGUQ.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-9039789151307054402</id><published>2010-03-19T11:35:00.000+01:00</published><updated>2010-03-19T11:35:31.832+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-19T11:35:31.832+01:00</app:edited><title>Being disposable is a goal in it self</title><content type="html">Your true value is shown if you are disposable and still have a job. This means that your work is actually appreciated. If you kling on to your job by having a bunch of old applications that just don't work unless you're around, then in my opinion you have failed. &lt;br /&gt;
&lt;br /&gt;
The same goes with the applications that you make. If you make applications that depend on your future presence you are just gathering new responsebilities along the way. In the end you are not going to be inovative because your past will haunt you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-9039789151307054402?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/92sW8vCSyahusecxNw_U_pbgJkM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/92sW8vCSyahusecxNw_U_pbgJkM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/92sW8vCSyahusecxNw_U_pbgJkM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/92sW8vCSyahusecxNw_U_pbgJkM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=xQcwq6KXv8Q:jWNZWfCQHhs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=xQcwq6KXv8Q:jWNZWfCQHhs:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=xQcwq6KXv8Q:jWNZWfCQHhs:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/xQcwq6KXv8Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/9039789151307054402/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2010/03/being-disposable-is-goal-in-it-self.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/9039789151307054402?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/9039789151307054402?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/xQcwq6KXv8Q/being-disposable-is-goal-in-it-self.html" title="Being disposable is a goal in it self" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2010/03/being-disposable-is-goal-in-it-self.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cDR38yeCp7ImA9WxBUEEk.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-7265490204088758783</id><published>2010-02-24T20:50:00.001+01:00</published><updated>2010-02-24T20:51:16.190+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-24T20:51:16.190+01:00</app:edited><title>SAAS vs. thick client</title><content type="html">The other day my work computer crashed. I took me quite a while to get up to speed. The IT department ofcourse provides a standard image they can put on my computer and get me part of the way. The programs I depend on and the antivirus provided are not good friends so I chose to install the computer on my own.&lt;br /&gt;
&lt;br /&gt;
So...  I'm down to installing the operating system, installing different office products to read documents and some development tools. A lot of time is spend finding the programs i need, and finding licence keys that match. After a days I'm still missing some programs that I will need later. Its a long and slow proccess...&lt;br /&gt;
&lt;br /&gt;
Why does commercial software need to be so troublesome to install?.&lt;br /&gt;
&lt;br /&gt;
If I could do with open source tools (thats not an option) i'm sure I could have set up an ubuntu with all the packages in an hour or so. I wouldn't have to find and download the software i need and I wouldn't have the trouble of typing in keys and trying to activate them and find out why they didn't activate properly.&lt;br /&gt;
&lt;br /&gt;
For my personal stuff I have moved everything to google apps. This means that once I have a browser up and running I'm good to go. This and the fact that I don't have to think about backups etc. is a sure winner for me!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-7265490204088758783?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FmII1ekwDuWIbFaLCUceVS9RbuU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FmII1ekwDuWIbFaLCUceVS9RbuU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FmII1ekwDuWIbFaLCUceVS9RbuU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FmII1ekwDuWIbFaLCUceVS9RbuU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=29KIZuGhz4A:59np0-J5Xh0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=29KIZuGhz4A:59np0-J5Xh0:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=29KIZuGhz4A:59np0-J5Xh0:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/29KIZuGhz4A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/7265490204088758783/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2010/02/saas-vs-thick-client.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/7265490204088758783?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/7265490204088758783?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/29KIZuGhz4A/saas-vs-thick-client.html" title="SAAS vs. thick client" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2010/02/saas-vs-thick-client.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMHRng5fip7ImA9WxBVFkQ.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-1633247502563078964</id><published>2010-02-20T16:28:00.001+01:00</published><updated>2010-02-20T21:23:57.626+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-20T21:23:57.626+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Human nature" /><category scheme="http://www.blogger.com/atom/ns#" term="Pragmatic" /><category scheme="http://www.blogger.com/atom/ns#" term="dependencies" /><category scheme="http://www.blogger.com/atom/ns#" term="Project Management" /><category scheme="http://www.blogger.com/atom/ns#" term="components" /><title>Predictability is a key feature</title><content type="html">You can run a rally car on ice. You can travel under water. You can create a fast program based on slow components.&lt;br /&gt;
&lt;br /&gt;
This is all due to predictability. While racing on ice you know more or less what friction you will get and what it will take to change direction. You will know how far you need to see ahead to be able to stay on track. If that criteria is met you can go as fast as possible.&lt;br /&gt;
&lt;br /&gt;
On the oter hand, if you are racing on a mixed surface, you have to go slower. While you have traction you have to drive with a big margin to be able to control your skid if you suddently loose traction. While you lack traction you have to drive slower because if you skid around the corners and reach a high friction area you will end up in the ditch. Given the choice I would definately choose the high predictablity over max traction.&lt;br /&gt;
&lt;br /&gt;
If you know all the parameters of a software project up front you are pretty safe. If you know all the parameters up front, you will also be the first in history to do so. Are you so sure of your requiremetns that you can choose components that fulfill your requirements but are not flexible enought to handle requirement changes? Are you so sure of your performance demands that you &amp;nbsp;can choose components that perform well but don't scale if your demands change?&lt;br /&gt;
&lt;br /&gt;
Flexibility is often a an underrated feature. Its hard to put in sales brochures. Its hard to tell customers that the extra cost is to support their requirements in the future that they are not aware of yet. Often it has to do with how mature an IT project organisation you are dealing with. The more mature it is, the greater the chance of it expecting changes in the future and the more flexibility it wants from its IT systems. My experience is that these changes will amerge before the end of the project and the flexibility will end up saving them money before the project has ended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-1633247502563078964?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eFXR6iU8D3SP7zqfxCddxqIxsnU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eFXR6iU8D3SP7zqfxCddxqIxsnU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eFXR6iU8D3SP7zqfxCddxqIxsnU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eFXR6iU8D3SP7zqfxCddxqIxsnU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=bqcYTTtGTO4:1fw5fmIg3Uo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=bqcYTTtGTO4:1fw5fmIg3Uo:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=bqcYTTtGTO4:1fw5fmIg3Uo:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/bqcYTTtGTO4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/1633247502563078964/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2010/02/predictability-is-key-feature.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/1633247502563078964?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/1633247502563078964?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/bqcYTTtGTO4/predictability-is-key-feature.html" title="Predictability is a key feature" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2010/02/predictability-is-key-feature.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cCQnc6fyp7ImA9WxBVGEg.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-6069337018923479665</id><published>2010-02-16T14:32:00.002+01:00</published><updated>2010-02-22T16:04:23.917+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-22T16:04:23.917+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Human nature" /><category scheme="http://www.blogger.com/atom/ns#" term="Project Management" /><title>Whats your projects focus?</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_H4ZQbYRhfK0/S3UqFhW-xoI/AAAAAAAAAIw/UQOmOPUH7ic/s1600-h/focus.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="155" src="http://4.bp.blogspot.com/_H4ZQbYRhfK0/S3UqFhW-xoI/AAAAAAAAAIw/UQOmOPUH7ic/s400/focus.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;My diagram illustrates the focus in a project. The blue on the left hand side is the business and the red on the right is the techonolgy focus on a project. The focus on any technology project will go from somewhere on the left towards the right.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;In the 'A' section focus is on the business processes. Its&amp;nbsp;&lt;b&gt;The Why &lt;/b&gt;of the project.&amp;nbsp;This is where you have to justify the business processes. Are the business processes really business processes or are they in fact based on limitations in old systems. If there are any mayor improvements to the busines process, this is the place to discover them.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;In the 'B' section business and technology are equally important. Its &lt;b&gt;The How&lt;/b&gt; of the project.&amp;nbsp;This is where you figure out the technical specifications for the project. There might be some adjustments to the business to make it feasible.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;In 'C' its mostly about technology. Its &lt;b&gt;The Where&lt;/b&gt; of the project.&amp;nbsp;Here there is little you can do to the business. You just have to implement the stuff that has been decided.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;A mistake I have seen on a lot of projects is that they focus on technology. They skip to "The How" or "The Where". They haven't realized that the real benefit from technology comes when you also change the way you operate and the way you think. The reason for skipping "The Why" is often that they claim its a technology project and they already know about their business. Some people are actually offended if you suggest improvements to the way they work. Its very sad to be on such a project.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Many projects I have worked on are based on contracts that include a lot of requirements. If they have not recieved guidance in making these requirements, they have missed out on a lot of possible proccess improvements. If your project is all in the C section the benefits from the project will be minimal, and the project will be more or less pointless.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;My recommendation is to keep the focus as far to the left as human possible. Thats where the sweet honey is :)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The diagram can also be applied to technical documentation or books. They will and should start by outlining what it is all about. As you proceed through the text it will focus more and more on the technology. For me I find the first half of a technical book easier to read than the last half.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-6069337018923479665?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/p4h3049bp9fDnsmV3V07AnunAY0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p4h3049bp9fDnsmV3V07AnunAY0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/p4h3049bp9fDnsmV3V07AnunAY0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p4h3049bp9fDnsmV3V07AnunAY0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=Pm2Ci7XMf_0:PKkJRCiTURc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=Pm2Ci7XMf_0:PKkJRCiTURc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=Pm2Ci7XMf_0:PKkJRCiTURc:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/Pm2Ci7XMf_0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/6069337018923479665/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2010/02/whats-your-projects-focus.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/6069337018923479665?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/6069337018923479665?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/Pm2Ci7XMf_0/whats-your-projects-focus.html" title="Whats your projects focus?" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_H4ZQbYRhfK0/S3UqFhW-xoI/AAAAAAAAAIw/UQOmOPUH7ic/s72-c/focus.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2010/02/whats-your-projects-focus.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIMSXs8fip7ImA9WxBWFU4.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-6434445621350550878</id><published>2010-02-07T10:23:00.000+01:00</published><updated>2010-02-07T10:23:08.576+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-07T10:23:08.576+01:00</app:edited><title>HTML5 to the resque!</title><content type="html">I have previously written that I was disappointed with silverlight as a platform for rich user interfaces in a browser. It probably has a lot of nice features, but as a web technology it's not really important if it is not platform independant.&lt;br /&gt;
&lt;br /&gt;
I went to see a demonstration of HTML5 the other day. I don't think there is much you can do in Silverlight or Flash that you can't do in HTML5. Silverlight and Flash are bound to fade out and their domain is going to be taken over by HTML5.&lt;br /&gt;
&lt;br /&gt;
Internet Explorer is currently the only mayor browser not supporting HTML5. You can however install a plugin that will allow HTML5 to be displayed correctly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-6434445621350550878?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qRT_HsTLhJCtPO_eBST5QoBjJ9I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qRT_HsTLhJCtPO_eBST5QoBjJ9I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qRT_HsTLhJCtPO_eBST5QoBjJ9I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qRT_HsTLhJCtPO_eBST5QoBjJ9I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=cYtcS_orjEI:-KIMs-7WkzQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=cYtcS_orjEI:-KIMs-7WkzQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=cYtcS_orjEI:-KIMs-7WkzQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/cYtcS_orjEI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/6434445621350550878/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2010/02/html5-to-resque.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/6434445621350550878?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/6434445621350550878?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/cYtcS_orjEI/html5-to-resque.html" title="HTML5 to the resque!" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2010/02/html5-to-resque.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4GRHY9fCp7ImA9WxBXF0s.&quot;"><id>tag:blogger.com,1999:blog-15135700.post-3699264745685326513</id><published>2010-01-29T11:28:00.000+01:00</published><updated>2010-01-29T11:28:45.864+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-29T11:28:45.864+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Human nature" /><category scheme="http://www.blogger.com/atom/ns#" term="Motivation" /><title>Being a Generalist</title><content type="html">Thats me!&lt;br /&gt;
&lt;br /&gt;
I dream in abstracts and concepts and avoid anything with substance.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_H4ZQbYRhfK0/S2K33XgdCKI/AAAAAAAAAIg/ZpYFFwRJ3_M/s1600-h/ultimate-geeks-multi-tool-hammer-detail.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/_H4ZQbYRhfK0/S2K33XgdCKI/AAAAAAAAAIg/ZpYFFwRJ3_M/s200/ultimate-geeks-multi-tool-hammer-detail.jpg" width="143" /&gt;&lt;/a&gt;&lt;/div&gt;Some people like using their time getting better at what they already know. I seldomly have more than one book on a subject and have a hard time focussing on a single issue long enough to get any real experience with it. As soon as I have basic knowledge of a subject I tend to move on. This doesn't mean that I don't have a lot of books or isn't constantly on the lookout for new input. Au contraire.&lt;br /&gt;
&lt;br /&gt;
If we take databases as an example. My interest stops at tables and what you can do with ANSI SQL. What features each database implementation has is not really important to me. I can look that up if I need it later.&lt;br /&gt;
&lt;br /&gt;
The disadvantage of this approach is that I'm dependend on my team to complete anything. Luckily I like working together with people.&lt;br /&gt;
&lt;br /&gt;
The advantage is that the knowledge I gather isn't easily outdated and it can therefore accumulate over time. In other words I don't have to start from scratch every other year by learning new technologies.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15135700-3699264745685326513?l=dotnetexception.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LrswqO2Jcvxizbkc2jAylWd0B_Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LrswqO2Jcvxizbkc2jAylWd0B_Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LrswqO2Jcvxizbkc2jAylWd0B_Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LrswqO2Jcvxizbkc2jAylWd0B_Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=i2f5_k_DP9Q:EXGkJ2JOAXA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?a=i2f5_k_DP9Q:EXGkJ2JOAXA:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThrowsDotnetexception?i=i2f5_k_DP9Q:EXGkJ2JOAXA:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThrowsDotnetexception/~4/i2f5_k_DP9Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dotnetexception.blogspot.com/feeds/3699264745685326513/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://dotnetexception.blogspot.com/2010/01/being-generalist.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/3699264745685326513?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15135700/posts/default/3699264745685326513?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ThrowsDotnetexception/~3/i2f5_k_DP9Q/being-generalist.html" title="Being a Generalist" /><author><name>Rune Juhl-Petersen</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://bp2.blogger.com/_H4ZQbYRhfK0/Rx2aUJGbShI/AAAAAAAAAAg/twIbiW-uQgo/s400/rune.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_H4ZQbYRhfK0/S2K33XgdCKI/AAAAAAAAAIg/ZpYFFwRJ3_M/s72-c/ultimate-geeks-multi-tool-hammer-detail.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://dotnetexception.blogspot.com/2010/01/being-generalist.html</feedburner:origLink></entry></feed>

