<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5870919</id><updated>2011-07-08T01:27:27.807+02:00</updated><category term='NHibernate'/><category term='design'/><category term='ReSharper'/><category term='testing'/><category term='tools'/><category term='guis'/><category term='architecture'/><category term='hacks'/><category term='must-read'/><title type='text'>rkse</title><subtitle type='html'>Personal Notepad</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>44</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5870919.post-2854537857090128505</id><published>2009-12-09T16:46:00.001+01:00</published><updated>2009-12-09T16:46:15.123+01:00</updated><title type='text'>Ignore whitespace in TFS compare</title><content type='html'>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://adventuresinsoftware.com/blog/?p=330" href="http://adventuresinsoftware.com/blog/?p=330"&gt;http://adventuresinsoftware.com/blog/?p=330&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_LliJGkj9tZ4/Sx_GRH9KOxI/AAAAAAAAAR8/e11KrjGg8Ts/s1600-h/image%5B10%5D.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="394" alt="image" src="http://lh6.ggpht.com/_LliJGkj9tZ4/Sx_GRgXcWwI/AAAAAAAAASI/G-5qrehubP0/image_thumb%5B10%5D.png?imgmax=800" width="781" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Command: C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\diffmerge.exe &lt;/p&gt;  &lt;p&gt;Arguments: %1 %2 %6 %7 %5 /ignorespace&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-2854537857090128505?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/2854537857090128505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=2854537857090128505' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/2854537857090128505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/2854537857090128505'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/12/ignore-whitespace-in-tfs-compare.html' title='Ignore whitespace in TFS compare'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_LliJGkj9tZ4/Sx_GRgXcWwI/AAAAAAAAASI/G-5qrehubP0/s72-c/image_thumb%5B10%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-6322359537354261655</id><published>2009-07-15T16:35:00.001+02:00</published><updated>2009-07-15T16:35:34.102+02:00</updated><title type='text'>Timelock</title><content type='html'>&lt;a href="http://www.interact-sw.co.uk/iangblog/2004/04/26/yetmoretimedlocking"&gt;IanG on Tap: Oh No! Not the TimedLock Again!&lt;/a&gt;: "Oh No! Not the TimedLock Again!"&lt;br /&gt;&lt;br /&gt;This code shows how to do locks with timeouts and a way to check if someone forgot to call Dispose on a IDisposable struct.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-6322359537354261655?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/6322359537354261655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=6322359537354261655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/6322359537354261655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/6322359537354261655'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/07/timelock.html' title='Timelock'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-1937403358926792419</id><published>2009-07-08T15:12:00.004+02:00</published><updated>2009-07-09T09:47:59.987+02:00</updated><title type='text'>C# Object Initializers. More than meets the eye</title><content type='html'>Up till today I liked &lt;a href="http://weblogs.asp.net/dwahlin/archive/2007/09/09/c-3-0-features-object-initializers.aspx"&gt;C# object initializers&lt;/a&gt; because the looked nicer and when using parameter objects they even turn into something like named parameters.&lt;br /&gt;&lt;br /&gt;But just a couple of minutes ago I was changing some test data creation code that didn't use object initializers but plain property assignments.&lt;br /&gt;&lt;br /&gt;As I use ReSharper I alt-returned the assignments into an initializer. What struck me was that not all property assignments where put into the initializer.&lt;br /&gt;&lt;br /&gt;Why? Because the same property had two assignments (of course with different values). I only noticed that when I was trying to incorporate the assignment into the initializer and the red squiglies from ReSharper. The C# compiler issues an error when you try to compile this type of code:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;error CS1912: Duplicate initialization of member 'X'&lt;/blockquote&gt;So object initializers not only look better, they prevent you from making such a dumb mistake.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-1937403358926792419?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/1937403358926792419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=1937403358926792419' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/1937403358926792419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/1937403358926792419'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/07/c-object-initializers-more-than-meets.html' title='C# Object Initializers. More than meets the eye'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-5221762173337811207</id><published>2009-07-06T16:49:00.000+02:00</published><updated>2009-07-06T16:49:24.849+02:00</updated><title type='text'>Cool Solutions: Ninotech Path Copy 4</title><content type='html'>&lt;a href="http://www.novell.com/coolsolutions/tools/13986.html"&gt;Cool Solutions: Ninotech Path Copy 4&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-5221762173337811207?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.novell.com/coolsolutions/tools/13986.html' title='Cool Solutions: Ninotech Path Copy 4'/><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/5221762173337811207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=5221762173337811207' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/5221762173337811207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/5221762173337811207'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/07/cool-solutions-ninotech-path-copy-4.html' title='Cool Solutions: Ninotech Path Copy 4'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-4979519812936244190</id><published>2009-07-06T14:00:00.003+02:00</published><updated>2009-07-06T14:38:04.267+02:00</updated><title type='text'>Preparation for 3rd meeting on C#iD: Nullables</title><content type='html'>Once again: There are still lots of things I do not know about the CLR. I find it more shocking on each occasion.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I was not aware of the GetValueOrDefault method on Nullable&lt;t&gt;. Never used it.&lt;/t&gt;&lt;/li&gt;&lt;li&gt;Boxing/Unboxing of Nullables: 4.2.2 pp 118, 119: I had no idea that this might be an issue. But that boxing an instance of Nullable&lt;t&gt; results in either a null reference or a boxed value of the underlying type does make perfect sense.&lt;/t&gt;&lt;/li&gt;&lt;li&gt;The class Nullable. Never used it as well. But I should have used the GetUnderlyingType method. I firmly believe that I have implemented exactly that feature two or three times in the last couple of years in various project using reflection.&lt;/li&gt;&lt;li&gt;No supprise about the null coalescing operator. But I notice that it is one of the lesser known features of C#. My estimation is that 2 out of 3 devs do not know it.&lt;/li&gt;&lt;li&gt;Using Nullable&lt;t&gt; for trying an operation: That idea is brilliant. Why didn't I thing of it? I used it right away.&lt;/t&gt;&lt;/li&gt;&lt;li&gt;Combining Comparers by using Nullable&lt;int&gt; as the return type and than applying the null coalescing operator is a very cool thing especially regarding the readability/maintainability of the code. &lt;/int&gt;&lt;/li&gt;&lt;/ul&gt;Regarding the last topic I was thinking on how we would implement to allow the end user to create a sort expression by combining individual comparers. That still does not get any better with the solution presented in C#iD (to be fair: it never claimed to solve such a request, but I find it still interesting).&lt;br /&gt;My first idea was to have each comparer have a reference to a NextComparer to which it would delegate if it's own result would be 0 (zero). That would allow us to chain together comparer in any sequence we like at runtime. It would be something like a &lt;a href="http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern"&gt;Chain of Responsibility&lt;/a&gt;.&lt;br /&gt;What I do not like about it is the fact that now the Comparer have to compare and have to handle the chaining as well. So I think having &lt;a href="http://en.wikipedia.org/wiki/Decorator_pattern"&gt;Decorator &lt;/a&gt;for the comparer that will take care of the chainging, the delegating to the next element of the chain and will decide how to handle the end of the chain would be much better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-4979519812936244190?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/4979519812936244190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=4979519812936244190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/4979519812936244190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/4979519812936244190'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/07/preparation-for-3rd-meeting-on-cid.html' title='Preparation for 3rd meeting on C#iD: Nullables'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-9118269556167161415</id><published>2009-06-24T17:12:00.002+02:00</published><updated>2009-06-24T17:19:19.182+02:00</updated><title type='text'>Follow up for the second c#ID Study Group Meeting</title><content type='html'>Very good discussion arround generics. It is baffling how you gain insight when trying to explain something.&lt;br /&gt;&lt;br /&gt;I've found that most developers don't now the concept of single, double and multiple dispatch.&lt;br /&gt;I strongly recomment to read up on this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Multiple_dispatch"&gt;Multiple Dispatch&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Visitor_pattern"&gt;Visitor Pattern &lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-9118269556167161415?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/9118269556167161415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=9118269556167161415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/9118269556167161415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/9118269556167161415'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/06/follow-up-for-second-cid-study-group.html' title='Follow up for the second c#ID Study Group Meeting'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-3792124073994699052</id><published>2009-06-22T07:18:00.003+02:00</published><updated>2009-06-24T12:31:37.484+02:00</updated><title type='text'>Preparation for the second meeting of the c#ID Study Group Würzburg</title><content type='html'>&lt;p&gt;The last meeting has been quite a long time ago because one of us three took a vacation of a couple of weeks. So here we are back again.&lt;/p&gt;  &lt;p&gt;The topic of this meeting is chapter 3: Parameterized typing with generics.&lt;/p&gt;  &lt;p&gt;As I am now in my 4th year of developing with C# 2 there have been few really new and stunning facts in this chapter. Still I’ve learned quit a good bit and I was able to pick up quite a couple of terms that help me clarify my understanding of how generics work.&lt;/p&gt;  &lt;p&gt;Here are the main points that were very valuable to me:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The diagram on page 68 is really an eye opener as it explains the relationship between unbound generic types, constructed (generic) types and instances.  I wont put a copy of this diagram here. Go get the book! &lt;/li&gt;    &lt;li&gt;The way the runtime constructs a type from an unbound generic type for each different combination of the generic parameters. &lt;/li&gt;    &lt;li&gt;The way comparison are performed with the == and != operators based on the constraints on the generic type parameters as explained on pp 82, 83. &lt;/li&gt;    &lt;li&gt;Very interesting is the demonstration on page 87 that each constructed type has its own static constructor . &lt;/li&gt;    &lt;li&gt;I cannot remember finding any hint, that there are no generic methods in C++. Which is obvious if you look at how templates are a king of "preprocessor on steroids". The generic parameters of generic methods are only available at runtime (are they really?) but not at compile time.&lt;br /&gt;Which leads me to another question: Are generic parameters of methods resolved based on the runtime or on the compile time type?&lt;/li&gt;&lt;li&gt;OMG: Covariance and Contravariance again!&lt;/li&gt;&lt;li&gt;On p. 103 the options for working arround the invariance of generic types. The last item talks about a generic helper method to convert the items in a collection. Here should be mentioned that there is a method System.Linq.Enumerable.Cast&lt;tresult&gt;(IEnumberable) that does just that. I think a hint would be in order even if this C# 3 features are dealt with later in the book.&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-3792124073994699052?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/3792124073994699052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=3792124073994699052' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/3792124073994699052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/3792124073994699052'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/06/preparation-for-second-meeting-of-cid.html' title='Preparation for the second meeting of the c#ID Study Group Würzburg'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-4894646498564632292</id><published>2009-05-14T09:28:00.000+02:00</published><updated>2009-05-14T09:28:19.046+02:00</updated><title type='text'>What Every Computer Scientist Should Know About Floating-Point Arithmetic</title><content type='html'>Pointed to by Coding Horror blog.&lt;br /&gt;I should read that some time.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;a href="http://docs.sun.com/source/806-3568/ncg_goldberg.html#674"&gt;What Every Computer Scientist Should Know About Floating-Point Arithmetic&lt;/a&gt;: "What Every Computer Scientist Should Know About Floating-Point Arithmetic"&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-4894646498564632292?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://docs.sun.com/source/806-3568/ncg_goldberg.html#674' title='What Every Computer Scientist Should Know About Floating-Point Arithmetic'/><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/4894646498564632292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=4894646498564632292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/4894646498564632292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/4894646498564632292'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/05/what-every-computer-scientist-should.html' title='What Every Computer Scientist Should Know About Floating-Point Arithmetic'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-5643437664380500019</id><published>2009-05-11T10:12:00.000+02:00</published><updated>2009-05-11T10:12:39.437+02:00</updated><title type='text'>The Old New Thing : How to recognize different types of sentinel timestamps from quite a long way away</title><content type='html'>&lt;a href="http://blogs.msdn.com/oldnewthing/archive/2005/10/28/486194.aspx"&gt;The Old New Thing : How to recognize different types of sentinel timestamps from quite a long way away&lt;/a&gt;: "How to recognize different types of sentinel timestamps from quite a long way away"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-5643437664380500019?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/oldnewthing/archive/2005/10/28/486194.aspx' title='The Old New Thing : How to recognize different types of sentinel timestamps from quite a long way away'/><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/5643437664380500019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=5643437664380500019' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/5643437664380500019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/5643437664380500019'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/05/old-new-thing-how-to-recognize.html' title='The Old New Thing : How to recognize different types of sentinel timestamps from quite a long way away'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-8988736100559938005</id><published>2009-04-29T12:38:00.003+02:00</published><updated>2009-04-29T13:14:58.384+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hacks'/><title type='text'>Using Launchy to take quick notes</title><content type='html'>I've added an entry to Launchy's Runner plugin to take quick notes.&lt;br /&gt;I just type tn &lt;tab&gt; someText and the someText gets appended with date and time stamp to the file c:\notes.txt.&lt;br /&gt;&lt;br /&gt;The item is defined like this:&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;Name: tn&lt;br /&gt;Program: cmd.exe&lt;br /&gt;Arguments: /C "echo %Date% %Time%&gt;&gt; c:\notes.txt &amp;amp; echo $$ &gt;&gt; c:\notes.txt &amp;amp; echo_&gt;&gt; c:\notes.txt"&lt;/span&gt;&lt;/tab&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-8988736100559938005?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/8988736100559938005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=8988736100559938005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/8988736100559938005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/8988736100559938005'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/04/using-launchy-to-take-quick-notes.html' title='Using Launchy to take quick notes'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-6560370193570911793</id><published>2009-04-29T10:10:00.004+02:00</published><updated>2009-04-29T13:15:26.469+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hacks'/><title type='text'>WinXP Batch for Exporting Balsamiq Mockups to Pngs</title><content type='html'>&lt;span style=";font-family:courier new;font-size:85%;"  &gt;@echo off&lt;br /&gt;rem Export all Balsamic Mockup files to pngs in the same directory.&lt;br /&gt;setlocal&lt;br /&gt;if not "%echo%"=="" echo %echo%&lt;br /&gt;set prog="%ProgramFiles%\Balsamiq Mockups\Balsamiq Mockups.exe"&lt;br /&gt;&lt;br /&gt;for %%m in (*.bmml) do call :ProcessFile "%%m"&lt;br /&gt;&lt;br /&gt;exit /b&lt;br /&gt;&lt;br /&gt;:ProcessFile&lt;br /&gt;rem must provide fully qualified paths of balsamiq&lt;br /&gt;%prog% export "%~f1" "%~d1%~p1%~n1.png"&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:times new roman;font-size:100%;"  &gt;Edit 29-Apr-2009 13:10 (EDST)&lt;br /&gt;Peldi asked my to include a link to the&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://www.getsatisfaction.com/balsamiq/topics/shell_scripts_to_export_multiple_mockups"&gt;Balsamiq support site&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:times new roman;font-size:130%;"  &gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:times new roman;"&gt;and I hereby oblige happily. I should have looked there first - I just enjoy to much writing shell scripts.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-6560370193570911793?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/6560370193570911793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=6560370193570911793' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/6560370193570911793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/6560370193570911793'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/04/winxp-batch-for-exporting-balsamiq.html' title='WinXP Batch for Exporting Balsamiq Mockups to Pngs'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-8620513400180751338</id><published>2009-04-19T20:45:00.001+02:00</published><updated>2009-04-19T20:45:38.669+02:00</updated><title type='text'>Ideas for Lego Mindstorms projects</title><content type='html'>&lt;p&gt;Today has been my son Viktor’s ninth birthday. He is a rather bright kid with a keen interest in everything that you have to build on your own. I would say he is a natural geek. &lt;/p&gt;  &lt;p&gt;As I am not so proficient in handy work my wife and me decided on a LEGO Mindstorms NXT set for Viktor as this years birthday gift. That way I might be able to help him with his projects.&lt;/p&gt;  &lt;p&gt;As I am sitting in my train back to my job back to Wurzburg to my software contracting job and reading “The unofficial LEGO MINDSTORMS NXT Inventor’s Guide” I come up with some ideas:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Building a robot that will write messages by pouring sand (maybe colored) &lt;/li&gt;    &lt;li&gt;Sending those messages via Bluetooth (from a mobile phone?)&lt;/li&gt;    &lt;li&gt;A device that will squirrel of to the darkest corner of the room as soon as it detects someone entering the room. The device already has a name: Scarry Frank.&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/5870919-8620513400180751338?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/8620513400180751338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=8620513400180751338' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/8620513400180751338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/8620513400180751338'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/04/ideas-for-lego-mindstorms-projects.html' title='Ideas for Lego Mindstorms projects'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-8326920268474753667</id><published>2009-04-08T18:36:00.013+02:00</published><updated>2009-04-08T19:22:53.747+02:00</updated><title type='text'>Creating UI Mockups. Focus on Essentials: Balsamiq Mockups</title><content type='html'>I've been starting a new job as a contract developer recently. I explicitly statet that I am not a "GUI guy". But people just don't listen. I ended up with the task of designing a UI for an app.&lt;br /&gt;Initially I was told to do the screen design in ... &lt;a href="http://www.sparxsystems.com/products/ea/index.html"&gt;Enterprise Architect&lt;/a&gt;. Well that what they use in this shop, so I went along with it.&lt;br /&gt;&lt;br /&gt;The problem: You can almost do screen design. But there are a lot of things you can do much better in EA: Class diagrams, sequence diagrams, you know it. So I ended up with a sloppy screen design that had few essential details in it and a bunch of real UML diagramms that the users couldn't care less. One user remarked: "Is this app gona run on Windows 3.11. The screens just look like it."&lt;br /&gt;Well, when all you have is a hammer...&lt;br /&gt;&lt;br /&gt;Then I remembered a tool whose main purpose was to do screen mockups. Its called &lt;a href="http://www.balsamiq.com/products/mockups"&gt;Balsamiq Mockups&lt;/a&gt;. It is an Adobe Air application. So it runs on almost anything you can think of: Mac, Windows, Linux. The even have plugins for a couple of Wikis like Confluence and the like.&lt;br /&gt;What took me a week with EA, I could redo in a day with the suggestions I got from the users. There are two reasons I can think of that made it so quick:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It was the second time arround for me.&lt;/li&gt;&lt;li&gt;Balsamiq Mockups focuses on screen mockups and nothing else.&lt;/li&gt;&lt;/ol&gt;I do not want to say that EA is a bad tool. It was just not the right tool for the job at hand.&lt;br /&gt;&lt;br /&gt;So what I did is buying a license for Balsamiq Mockups Desktop and churned out screen designs like there is no tomorrow. Yes I bought the license myself, yes I installed unauthorized software on a company machine, yes I am dumb and I am guilty. But I just can't stand to being slowed down by some not so inspired company policies. If I get fired for this, I'll complain to Balsamiq.&lt;br /&gt;&lt;br /&gt;The designs included a lot of tree views and what really hooked me for Balsamiq was the ease I could mock up tree view by entering text. Before that I was doing those mocks in Visual Studio by creating a form and mangling the controls on it until it looked right. I already told you that I am dumb, didn't I?&lt;br /&gt;&lt;br /&gt;Here is a simple screen mockup that I created (not from my job at the company):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_LliJGkj9tZ4/SdzYPnbUmuI/AAAAAAAAAPo/4UCA7_O0aSU/s1600-h/Media+Library.png"&gt;&lt;img style="cursor: pointer; width: 636px; height: 359px;" src="http://1.bp.blogspot.com/_LliJGkj9tZ4/SdzYPnbUmuI/AAAAAAAAAPo/4UCA7_O0aSU/s400/Media+Library.png" alt="" id="BLOGGER_PHOTO_ID_5322366622438300386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(Sorry for the bad image quality. It's the first time I uploaded an image to my blog.)&lt;br /&gt;&lt;br /&gt;As you can see on the left hand side there is a tree view. To create that tree view I just had to enter&lt;br /&gt;&lt;blockquote&gt;F My Library&lt;br /&gt;.&gt;Books&lt;br /&gt;.&gt;Music&lt;br /&gt;.&gt;Videos&lt;br /&gt;F Other's&lt;br /&gt;.f Daniel&lt;br /&gt;..&gt;Books&lt;br /&gt;.f Elke&lt;br /&gt;..&gt;TV&lt;br /&gt;.f Susi&lt;br /&gt;..&gt;TV&lt;br /&gt;..&gt;Music&lt;/blockquote&gt;I wont go into the syntax. You can just look it up on their web site.&lt;br /&gt;&lt;br /&gt;What really got me when I showed the stuff to my co-workers. Me the non-gui guy comming up with screens like I was some turtle-neck wearing design type.&lt;br /&gt;&lt;br /&gt;First voices are heard about doing all the screen designs with this tool and buying some licenses.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-8326920268474753667?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/8326920268474753667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=8326920268474753667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/8326920268474753667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/8326920268474753667'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/04/creating-ui-mockups-focus-on-essentials.html' title='Creating UI Mockups. Focus on Essentials: Balsamiq Mockups'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_LliJGkj9tZ4/SdzYPnbUmuI/AAAAAAAAAPo/4UCA7_O0aSU/s72-c/Media+Library.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-7295544498616287371</id><published>2009-04-03T07:29:00.000+02:00</published><updated>2009-04-03T07:29:41.761+02:00</updated><title type='text'>Assembly generation failed Referenced assembly ‘xxx’ does not have a strong name</title><content type='html'>&lt;a href="http://www.nablasoft.com/alkampfer/index.php/2009/03/13/assembly-generation-failed-referenced-assembly-xxx-does-not-have-a-strong-name/"&gt;Assembly generation failed Referenced assembly ‘xxx’ does not have a strong name&lt;/a&gt;: "Assembly generation failed Referenced assembly ‘xxx’ does not have a strong name"&lt;br /&gt;&lt;br /&gt;How to sign an assembly you do not have the source code for.&lt;br /&gt;&lt;br /&gt;As I am reading this on 3-April I just make sure that it was posted not three days ago but in the middle of march. That is just incredible: A two line solution to a problem I thought was hard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-7295544498616287371?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.nablasoft.com/alkampfer/index.php/2009/03/13/assembly-generation-failed-referenced-assembly-xxx-does-not-have-a-strong-name/' title='Assembly generation failed Referenced assembly ‘xxx’ does not have a strong name'/><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/7295544498616287371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=7295544498616287371' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/7295544498616287371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/7295544498616287371'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/04/assembly-generation-failed-referenced.html' title='Assembly generation failed Referenced assembly ‘xxx’ does not have a strong name'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-8275936268706058552</id><published>2009-03-23T11:21:00.000+01:00</published><updated>2009-03-23T11:21:51.467+01:00</updated><title type='text'>Jean-Paul S. Boodhoo's Blog - ReSharper Templates</title><content type='html'>&lt;a href="http://blog.jpboodhoo.com/ReSharperTemplates.aspx"&gt;Jean-Paul S. Boodhoo's Blog - ReSharper Templates&lt;/a&gt;: "ReSharper Templates"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-8275936268706058552?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blog.jpboodhoo.com/ReSharperTemplates.aspx' title='Jean-Paul S. Boodhoo&apos;s Blog - ReSharper Templates'/><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/8275936268706058552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=8275936268706058552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/8275936268706058552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/8275936268706058552'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/03/jean-paul-s-boodhoos-blog-resharper_23.html' title='Jean-Paul S. Boodhoo&apos;s Blog - ReSharper Templates'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-3248884031508164023</id><published>2009-03-22T11:55:00.001+01:00</published><updated>2009-03-22T11:56:21.258+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='must-read'/><title type='text'>Getting started with Boodhoo BDD | Sleep Overrated</title><content type='html'>&lt;p&gt;Maybe with his &lt;a title="help " href="http://sleepoverrated.com/archive/2009/01/getting-started-with-boodhoo-bdd/"&gt;help &lt;/a&gt; I might finally grok it.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-3248884031508164023?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/3248884031508164023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=3248884031508164023' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/3248884031508164023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/3248884031508164023'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/03/getting-started-with-boodhoo-bdd-sleep.html' title='Getting started with Boodhoo BDD | Sleep Overrated'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-659230364415002045</id><published>2009-03-22T11:21:00.001+01:00</published><updated>2009-03-22T11:21:25.023+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>ReSharper Templates | ThoughtShapes</title><content type='html'>&lt;p&gt;Some &lt;a title="ReSharper Live Templates" href="http://www.thoughtshapes.com/DevelopmentHelpers/ResharperLiveTemplate.htm"&gt;ReSharper Live Templates&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It is somewhat dated by I find recreating the ones used for unit testing all the time. So finally I have a link to the original post. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-659230364415002045?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/659230364415002045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=659230364415002045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/659230364415002045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/659230364415002045'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/03/resharper-templates-thoughtshapes.html' title='ReSharper Templates | ThoughtShapes'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-4840173663232028552</id><published>2009-03-22T10:27:00.001+01:00</published><updated>2009-03-22T10:29:19.437+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>VI style short cut key defs for ReSharper</title><content type='html'>&lt;p&gt;&lt;a href="http://blog.jpboodhoo.com/ReSharperHelperNdashAutoHotkeyScript.aspx"&gt;Jean-Paul S. Boodhoo's Blog - ReSharper Helper &amp;#8211; AutoHotkey Script&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;These are VI style short cut key defs for ReSharper &lt;/p&gt;  &lt;table&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td&gt;&lt;font face="Courier"&gt;Move Down A Method &lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&lt;font face="Courier"&gt;Alt-J&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font face="Courier"&gt;Move Up A Method &lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&lt;font face="Courier"&gt;Alt-K &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font face="Courier"&gt;Move Method Up &lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&lt;font face="Courier"&gt;Control-Shift-Alt-K &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font face="Courier"&gt;Move Method Down &lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&lt;font face="Courier"&gt;Control-Shift-Alt-J &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font face="Courier"&gt;Go to next usage &lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&lt;font face="Courier"&gt;Shift-Alt-J &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font face="Courier"&gt;Go to previous usage &lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&lt;font face="Courier"&gt;Shift-Alt-K &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font face="Courier"&gt;Generate Code &lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&lt;font face="Courier"&gt;Alt-I &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font face="Courier"&gt;Highlight Current Usages &lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&lt;font face="Courier"&gt;Alt-8 &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font face="Courier"&gt;Find Usages &lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&lt;font face="Courier"&gt;Alt-9 &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;font face="Courier"&gt;Next Error In Solution &lt;/font&gt;&lt;/td&gt;        &lt;td&gt;&lt;font face="Courier"&gt;Alt-0 &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-4840173663232028552?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/4840173663232028552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=4840173663232028552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/4840173663232028552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/4840173663232028552'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/03/vi-style-short-cut-key-defs-for.html' title='VI style short cut key defs for ReSharper'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-5095894187618491042</id><published>2009-03-21T13:36:00.001+01:00</published><updated>2009-03-21T13:36:32.869+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>download : vim online</title><content type='html'>&lt;a href="http://www.vim.org/download.php#pc"&gt;download : vim online&lt;/a&gt;&lt;br /&gt;This is the version for Windows&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-5095894187618491042?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.vim.org/download.php#pc' title='download : vim online'/><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/5095894187618491042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=5095894187618491042' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/5095894187618491042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/5095894187618491042'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/03/download-vim-online.html' title='download : vim online'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-7696257915924365511</id><published>2009-03-21T13:32:00.001+01:00</published><updated>2009-03-21T13:32:29.110+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>Jean-Paul S. Boodhoo's Blog - BDD AutoHotKey Script Update - Take 2</title><content type='html'>&lt;a href="http://blog.jpboodhoo.com/BDDAutoHotKeyScriptUpdateTake2.aspx"&gt;Jean-Paul S. Boodhoo's Blog - BDD AutoHotKey Script Update - Take 2&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-7696257915924365511?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blog.jpboodhoo.com/BDDAutoHotKeyScriptUpdateTake2.aspx' title='Jean-Paul S. Boodhoo&apos;s Blog - BDD AutoHotKey Script Update - Take 2'/><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/7696257915924365511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=7696257915924365511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/7696257915924365511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/7696257915924365511'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/03/jean-paul-s-boodhoos-blog-bdd.html' title='Jean-Paul S. Boodhoo&apos;s Blog - BDD AutoHotKey Script Update - Take 2'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-3562396517682261466</id><published>2009-03-21T13:18:00.002+01:00</published><updated>2009-03-21T13:29:49.343+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>Visual Studio Settings</title><content type='html'>These &lt;a href="http://rapidshare.com/files/211775273/Exported-2009-03-21.vssettings"&gt;VS 2008 Settings&lt;/a&gt; (hope no one takes offense in this rs link) include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Consolas as font&lt;/li&gt;&lt;li&gt;Keyborad shortcuts for TestDriven.Net (runtest, debug, rerun, rerun with debug)&lt;/li&gt;&lt;li&gt;Show line numbers&lt;/li&gt;&lt;li&gt;Switched off outlining&lt;/li&gt;&lt;li&gt;Minimal Toolbar&lt;/li&gt;&lt;/ul&gt;Realy need to add a post for Resharper live templates&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-3562396517682261466?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/3562396517682261466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=3562396517682261466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/3562396517682261466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/3562396517682261466'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/03/visual-studio-settings.html' title='Visual Studio Settings'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-6798086760682703668</id><published>2009-03-21T12:53:00.001+01:00</published><updated>2009-03-21T12:53:16.848+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>AutoHotkey Download</title><content type='html'>&lt;a href="http://www.autohotkey.com/download/"&gt;AutoHotkey Download&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-6798086760682703668?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.autohotkey.com/download/' title='AutoHotkey Download'/><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/6798086760682703668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=6798086760682703668' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/6798086760682703668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/6798086760682703668'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/03/autohotkey-download.html' title='AutoHotkey Download'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-526383720433451906</id><published>2009-03-21T12:51:00.001+01:00</published><updated>2009-03-21T12:53:43.080+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>JSON Viewer - Home</title><content type='html'>&lt;a href="http://www.codeplex.com/JsonViewer/Wiki/View.aspx?title=Installation&amp;amp;referringTitle=Home"&gt;JSON Viewer - Home&lt;/a&gt;: "JSON Viewer"&lt;br /&gt;Includes stand alone application as well as a debug visualizer for Visual Studio and a Fiddler add in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-526383720433451906?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codeplex.com/JsonViewer/Wiki/View.aspx?title=Installation&amp;referringTitle=Home' title='JSON Viewer - Home'/><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/526383720433451906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=526383720433451906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/526383720433451906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/526383720433451906'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/03/json-viewer-home.html' title='JSON Viewer - Home'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-1620138508140337619</id><published>2009-03-21T12:47:00.000+01:00</published><updated>2009-03-21T12:48:11.186+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>PowerCommands for Visual Studio 2008</title><content type='html'>So finally I will use this as a note to self thing.&lt;br /&gt;Never forget it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-1620138508140337619?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.msdn.microsoft.com/PowerCommands' title='PowerCommands for Visual Studio 2008'/><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/1620138508140337619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=1620138508140337619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/1620138508140337619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/1620138508140337619'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2009/03/powercommands-for-visual-studio-2008.html' title='PowerCommands for Visual Studio 2008'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-8041107112922592952</id><published>2007-07-06T14:10:00.001+02:00</published><updated>2007-07-06T14:14:45.358+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>slightly enhanced Higher-Level Abstractions on Enumerations</title><content type='html'>&lt;p&gt;&lt;a href="http://thought-tracker.blogspot.com/2007/04/higher-level-abstractions-on.html"&gt;Andrei has some nice code to work with Enumerations&lt;/a&gt; and while showing it to the team today, I tried to chain calls like this:&lt;/p&gt; &lt;div style="font-size: 10pt; background: white 0% 50%; color: black; font-family: consolas; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;pre style="margin: 0px"&gt;      &lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;br /&gt;&lt;div style="font-size: 10pt; background: white 0% 50%; color: black; font-family: consolas; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;pre style="margin: 0px"&gt;        [&lt;span style="color: rgb(43,145,175)"&gt;Test&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Can_Chain_Select_Collect_and_More() {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;bool&lt;/span&gt; satisfying = &lt;span style="color: rgb(43,145,175)"&gt;Enumerating&lt;/span&gt;.On(_array)&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;                .Select(IsEven)&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;                .Collect&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: blue"&gt;delegate&lt;/span&gt;(&lt;span style="color: blue"&gt;string&lt;/span&gt; input) { &lt;span style="color: blue"&gt;return&lt;/span&gt; input + &lt;span style="color: rgb(163,21,21)"&gt;"-"&lt;/span&gt; + input; })&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;                .AreAllSatisfying(Satisfies);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;            &lt;span style="color: rgb(43,145,175)"&gt;Assert&lt;/span&gt;.IsTrue(satisfying);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;bool&lt;/span&gt; Satisfies(&lt;span style="color: blue"&gt;string&lt;/span&gt; obj) {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;            &lt;span style="color: blue"&gt;return&lt;/span&gt; obj == &lt;span style="color: rgb(163,21,21)"&gt;"2-2"&lt;/span&gt; || obj == &lt;span style="color: rgb(163,21,21)"&gt;"4-4"&lt;/span&gt; || obj == &lt;span style="color: rgb(163,21,21)"&gt;"6-6"&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;font face="Trebuchet MS"&gt;But this did not work :-( (To much C# 3.0 exposure I guess) because methods like Select and Collect return ICollection&amp;lt;T&amp;gt;. &lt;/font&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;font face="Trebuchet MS"&gt;So I changed it. &lt;/font&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;font face="Trebuchet MS"&gt;You can grab it here: &lt;/font&gt;&lt;a href="http://www.geocities.com/ralfkret1/download/Enumerating.zip"&gt;&lt;font face="Trebuchet MS"&gt;Enumerating.Zip&lt;/font&gt;&lt;/a&gt;&lt;font face="Trebuchet MS"&gt;. Of course all praise to Andrei, all blame to me.&lt;/font&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;font face="Trebuchet MS"&gt; &lt;/font&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;font face="Trebuchet MS"&gt;How did I do it?&lt;/font&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;font face="Trebuchet MS"&gt;Well I Just changed&lt;/font&gt; &lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;ICollection&lt;/span&gt;&amp;lt;R&amp;gt; Collect&amp;lt;R&amp;gt;(&lt;span style="color: rgb(43,145,175)"&gt;Converter&lt;/span&gt;&amp;lt;T, R&amp;gt; convert);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-size: 10pt; background: white 0% 50%; color: black; font-family: consolas; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;ICollection&lt;/span&gt;&amp;lt;R&amp;gt; Map&amp;lt;R&amp;gt;(&lt;span style="color: rgb(43,145,175)"&gt;Converter&lt;/span&gt;&amp;lt;T, R&amp;gt; convert);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;ICollection&lt;/span&gt;&amp;lt;T&amp;gt; Select(&lt;span style="color: rgb(43,145,175)"&gt;Predicate&lt;/span&gt;&amp;lt;T&amp;gt; satisfies);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;ICollection&lt;/span&gt;&amp;lt;T&amp;gt; FindAll(&lt;span style="color: rgb(43,145,175)"&gt;Predicate&lt;/span&gt;&amp;lt;T&amp;gt; satisfies);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;ICollection&lt;/span&gt;&amp;lt;T&amp;gt; Filter(&lt;span style="color: rgb(43,145,175)"&gt;Predicate&lt;/span&gt;&amp;lt;T&amp;gt; satisfies);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;ICollection&lt;/span&gt;&amp;lt;T&amp;gt; Reject(&lt;span style="color: rgb(43,145,175)"&gt;Predicate&lt;/span&gt;&amp;lt;T&amp;gt; satisfies);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;ICollection&lt;/span&gt;&amp;lt;R&amp;gt; SelectThenCollect&amp;lt;R&amp;gt;(&lt;span style="color: rgb(43,145,175)"&gt;Predicate&lt;/span&gt;&amp;lt;T&amp;gt; satisfies, &lt;span style="color: rgb(43,145,175)"&gt;Converter&lt;/span&gt;&amp;lt;T, R&amp;gt; converter);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;ICollection&lt;/span&gt;&amp;lt;T&amp;gt; Sort(&lt;span style="color: rgb(43,145,175)"&gt;Comparison&lt;/span&gt;&amp;lt;T&amp;gt; comparison);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;font face="Trebuchet MS"&gt;to &lt;/font&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;IEnumerating&lt;/span&gt;&amp;lt;R&amp;gt; Collect&amp;lt;R&amp;gt;(&lt;span style="color: rgb(43,145,175)"&gt;Converter&lt;/span&gt;&amp;lt;T, R&amp;gt; convert);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="background: white 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial" color="black" size="10pt" face="consolas"&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;IEnumerating&lt;/span&gt;&amp;lt;R&amp;gt; Map&amp;lt;R&amp;gt;(&lt;span style="color: rgb(43,145,175)"&gt;Converter&lt;/span&gt;&amp;lt;T, R&amp;gt; convert);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;IEnumerating&lt;/span&gt;&amp;lt;T&amp;gt; Select(&lt;span style="color: rgb(43,145,175)"&gt;Predicate&lt;/span&gt;&amp;lt;T&amp;gt; satisfies);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;IEnumerating&lt;/span&gt;&amp;lt;T&amp;gt; FindAll(&lt;span style="color: rgb(43,145,175)"&gt;Predicate&lt;/span&gt;&amp;lt;T&amp;gt; satisfies);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;IEnumerating&lt;/span&gt;&amp;lt;T&amp;gt; Filter(&lt;span style="color: rgb(43,145,175)"&gt;Predicate&lt;/span&gt;&amp;lt;T&amp;gt; satisfies);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;IEnumerating&lt;/span&gt;&amp;lt;T&amp;gt; Reject(&lt;span style="color: rgb(43,145,175)"&gt;Predicate&lt;/span&gt;&amp;lt;T&amp;gt; satisfies);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;IEnumerating&lt;/span&gt;&amp;lt;R&amp;gt; SelectThenCollect&amp;lt;R&amp;gt;(&lt;span style="color: rgb(43,145,175)"&gt;Predicate&lt;/span&gt;&amp;lt;T&amp;gt; satisfies, &lt;span style="color: rgb(43,145,175)"&gt;Converter&lt;/span&gt;&amp;lt;T, R&amp;gt; converter);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;IEnumerating&lt;/span&gt;&amp;lt;T&amp;gt; Sort(&lt;span style="color: rgb(43,145,175)"&gt;Comparison&lt;/span&gt;&amp;lt;T&amp;gt; comparison);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;font face="Trebuchet MS"&gt;So its possible to chain commands that return more than one thing. &lt;/font&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;font face="Trebuchet MS"&gt;And I added&lt;/font&gt; &lt;/pre&gt;&lt;pre style="margin: 0px"&gt;        &lt;span style="color: rgb(43,145,175)"&gt;ICollection&lt;/span&gt;&amp;lt;T&amp;gt; ToCollection();&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-size: 10pt; background: white 0% 50%; color: black; font-family: consolas; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;pre style="margin: 0px"&gt;&lt;font face="Trebuchet MS"&gt;to make the tests work.&lt;/font&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt; &lt;/pre&gt;&lt;pre style="margin: 0px"&gt; &lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-8041107112922592952?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/8041107112922592952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=8041107112922592952' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/8041107112922592952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/8041107112922592952'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/07/slightly-enhanced-higher-level.html' title='slightly enhanced Higher-Level Abstractions on Enumerations'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-6978838350076406297</id><published>2007-06-27T07:36:00.001+02:00</published><updated>2007-06-27T13:25:39.704+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>Constructor Injected Dependency vs. Setter Injected Dependeny</title><content type='html'>&lt;p&gt;Just a thought: I always felt more comfortable with CID than with SID, but that was really just a feeling. While I was reading some code, I realized that with CID there is no chance that a dependency will show up in the interface, because interfaces don't have constructors. So the dependencies of a service are much better hidden from the clients of the service.&lt;/p&gt; &lt;p&gt;Of course one could separate the service interface and dependency interface and I would do just that if I couldn't go with CID. &lt;/p&gt; &lt;p&gt;Which leads to another interesting topic: In what situations is CID not working?&lt;/p&gt; &lt;p&gt;Off the top of my head I can thing of the following situations:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Legacy Code: Obvious! You would be lucky if that stuff used Dependency Injection at all, so do not get greedy!  &lt;li&gt;Cyclic Dependencies: That should be avoided anyway, right?  &lt;li&gt;Optional Dependencies: Not really. I would rather inject a default implementation (e.g. something like a Null Object).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Right now I can't think up any more scenarios.&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:4ef426ee-b965-4f6e-a98d-bbe5908134b6" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;del.icio.us Tags: &lt;a href="http://del.icio.us/popular/IoC" rel="tag"&gt;IoC&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/Design" rel="tag"&gt;Design&lt;/a&gt;, &lt;a href="http://del.icio.us/popular/Patterns" rel="tag"&gt;Patterns&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-6978838350076406297?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/6978838350076406297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=6978838350076406297' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/6978838350076406297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/6978838350076406297'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/06/constructor-injected-dependency-vs.html' title='Constructor Injected Dependency vs. Setter Injected Dependeny'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-813542658110413104</id><published>2007-06-20T10:18:00.001+02:00</published><updated>2007-06-20T10:18:51.171+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ReSharper'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>One more R# shortcut I didn't know about</title><content type='html'>&lt;p&gt;I do use the R# shortcut Ctrl+Alt+F for reformatting code very often. But the dialog that shows up then asking me to confirm options I have alredy set allways puts me off. &lt;/p&gt; &lt;p&gt;When listing all available shortcuts for my VS 2005 with &lt;a href="http://www.codinghorror.com/blog/archives/000412.html"&gt;this very neat script&lt;/a&gt;,&amp;nbsp;I found&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;span class="kbd"&gt;Ctrl&lt;/span&gt;+&lt;span class="kbd"&gt;Shift&lt;/span&gt;+&lt;span class="kbd"&gt;Alt&lt;/span&gt;+&lt;span class="kbd"&gt;F&lt;/span&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;which is "&lt;strong&gt;SilentReformatCode&lt;/strong&gt;".&lt;/p&gt; &lt;p&gt;BTW: Does anyone know what the &lt;b&gt;EnableDaemon&lt;/b&gt; command is doing? (Ctrl+8)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-813542658110413104?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/813542658110413104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=813542658110413104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/813542658110413104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/813542658110413104'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/06/one-more-r-shortcut-i-didn-know-about.html' title='One more R# shortcut I didn&amp;#39;t know about'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-4555013134951181525</id><published>2007-06-14T22:32:00.001+02:00</published><updated>2007-06-14T22:36:25.439+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><title type='text'>When it comes to NHibernate, dates are no fun!</title><content type='html'>&lt;p&gt;I just stumbled on some nasty behavior. While preparing some presenation on mapping existing schemas with NHibernate, I was using a mapped version of Northwind to do some queries. &lt;/p&gt; &lt;p&gt;I queried all the Customers with all their orders. As usual I was doing this in a transaction and expected that nothing would have changed, so nothing would be written back to the db. Nevertheless an exception of the type Data.SqlTypes.SqlTypeException with the message "SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.".&lt;/p&gt; &lt;p&gt;What had happend was this:&lt;/p&gt; &lt;p&gt;The Order contains a nullable column ShippingDate. I didn't map that column as a Nullable&amp;lt;DateTime&amp;gt; but just as DateTime. When NHibernate reads the row from the db, the value is null, and that's what the session remembers. When the Order object&amp;nbsp;is rehydrated&amp;nbsp;by NHibernate the ShippingDate is set to the value DateTime.MinValue. When the Session is synchronized with the db, NHibernate assumes that something has changed, because the currentState and the previousState are different and tries to update the row. Wich in turn fails, because DateTime.MinValue won't fit into a SqlServer datetime column.&lt;/p&gt; &lt;p&gt;I was lucky I could just inject my "StopHereForDebuggingInterceptor" into the session to look at what was happening. Mapping the Field as DateTime? solved the issue. I wonder if the descicion to map DBNull to DateTime.MinValue was a sound one.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-4555013134951181525?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/4555013134951181525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=4555013134951181525' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/4555013134951181525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/4555013134951181525'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/06/when-it-comes-to-nhibernate-dates-are.html' title='When it comes to NHibernate, dates are no fun!'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-6629435185427611419</id><published>2007-06-14T20:04:00.001+02:00</published><updated>2007-06-14T20:07:56.518+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Underscores are terible, but_I_still_use_them</title><content type='html'>&lt;p&gt;I must admit, I get the creeps when I look at some code and see unterscores used all over the place. It's so old school to me. And it has been my (lame) excuse for a while for not digging deeper into the&amp;nbsp;Ruby language.&lt;/p&gt; &lt;p&gt;But there is one place where underscores make sense: Naming your unit test methods! It is just good to write somthing like&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font face="Courier New"&gt;When_user_enters_search_term_longer_than_three_characters_Presenter_fetches_matching_products&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Unfortunately it is a PITA to type such as thing. Today I came accros a really good idea from Jean-Paul Boodhoo while watching a dnrTV screencast. He has build himself a Visual studio macro that just picks up the current selection and replaces every space with an underscore. &lt;/p&gt; &lt;p&gt;As I was sitting on the train while watching, there was no way of downloading this macro (and I'm not sure if it can be downloaded), so I had to role my own and here it is:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font face="Courier New"&gt;Sub MakeCompileableTestName()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DTE.Find.FindWhat = " "&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DTE.Find.ReplaceWith = "_"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DTE.Find.Target = &lt;br&gt;vsFindTarget.vsFindTargetCurrentDocumentSelection&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DTE.Find.MatchCase = False&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DTE.Find.MatchWholeWord = False&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DTE.Find.MatchInHiddenText = False&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxLiteral&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DTE.Find.ResultsLocation = vsFindResultsLocation.vsFindResultsNone&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DTE.Find.Action = vsFindAction.vsFindActionReplaceAll&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DTE.Find.Execute()&lt;br&gt;End Sub&lt;/font&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;It seems to work nicely and I have assigned it to the Ctrl-Shift-Insert Keyboard shortcut.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-6629435185427611419?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/6629435185427611419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=6629435185427611419' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/6629435185427611419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/6629435185427611419'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/06/underscores-are-terible.html' title='Underscores are terible, but_I_still_use_them'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-8856461841079072117</id><published>2007-06-14T09:07:00.000+02:00</published><updated>2007-06-14T09:07:20.773+02:00</updated><title type='text'>Patrick Cauldwell's Blog - This I believe... the developer edition</title><content type='html'>I came just accros this on Scott Hanselman's Computer Zen: &lt;a href="http://www.cauldwell.net/patrick/blog/ThisIBelieveTheDeveloperEdition.aspx"&gt;Patrick Cauldwell's Blog - This I believe... the developer edition.&lt;/a&gt; and I am about to discuss it right now with my team (the ones that are just picking up .NET development). I think that is a really good starting point.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-8856461841079072117?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.cauldwell.net/patrick/blog/ThisIBelieveTheDeveloperEdition.aspx' title='Patrick Cauldwell&apos;s Blog - This I believe... the developer edition'/><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/8856461841079072117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=8856461841079072117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/8856461841079072117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/8856461841079072117'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/06/patrick-cauldwells-blog-this-i-believe.html' title='Patrick Cauldwell&apos;s Blog - This I believe... the developer edition'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-2222598842192672196</id><published>2007-06-12T21:01:00.001+02:00</published><updated>2007-06-12T21:09:17.474+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>C# Regions Suck</title><content type='html'>&lt;p&gt;The more I see of it, the more I firmly believe that C# regions are not a good thing - at least if the code has been written by some human.&lt;/p&gt; &lt;p&gt;I was just listening/watching a screencast about the &lt;a href="http://www.dnrtv.com/default.aspx?showID=12"&gt;CSLA Framework on dnrTV&lt;/a&gt;&amp;nbsp;and Rocky and the other guy just drool about how cool regions are when looking at one of the CSLA example classes which has around 441 lines of code and 6 regions and 23 methods which do such diverse things like validation authorization, instance creation, data access, existence checking and even some so called business methods, that more or less are just getters and setters for the data behind an object.&lt;/p&gt; &lt;p&gt;Back to my heading: The regions in C# (not sure if there is such a thing for vb.net) are used to give some structure to a class that is doing to much. This seems very much like a &lt;a href="http://en.wikipedia.org/wiki/God_object"&gt;GOD OBJECT&lt;/a&gt; that should be torn appart along the lines of the &lt;a href="http://en.wikipedia.org/wiki/Single_responsibility_principle"&gt;SINGLE RESPONSIBILITY PRINCIPLE&lt;/a&gt; in the first place. Using regions here is just window dressing.&lt;/p&gt; &lt;p&gt;Btw: The CSLA is doing some interessting things, but I still do not understand why it does those things so clumsily.&lt;/p&gt; &lt;p&gt;The following code shows an example of how CSLA is checking that the current user can read a data value from an object. &lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#008000"&gt;public&amp;nbsp;object SomeProperty {&lt;br&gt;&amp;nbsp; get&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CanReadProperty(true);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return _someProperty;&lt;br&gt;&amp;nbsp; }&lt;br&gt;}&lt;/font&gt; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;So there's the security concern intermingled with the rest.&lt;/p&gt; &lt;p&gt;If the member where defined like this&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#008000"&gt;public&amp;nbsp;virtual object SomeProperty {&lt;br&gt;&amp;nbsp; get&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return _someProperty;&lt;br&gt;&amp;nbsp; }&lt;br&gt;}&lt;/font&gt; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;it would be easy to have a decorator arround the object that is taking care of the authorization, so the security aspect would be out of the business code. If you used something like &lt;a href="http://wiki.castleproject.org/index.php/DynamicProxy"&gt;DynamicProxy&lt;/a&gt; , you could make the security aspect even generic (not like in Generics) by introducing an Interceptor that handles all the property access with the same logic, maybe using Attributes to declare who is allowed to access the data. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-2222598842192672196?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/2222598842192672196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=2222598842192672196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/2222598842192672196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/2222598842192672196'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/06/c-regions-suck.html' title='C# Regions Suck'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-6904224853356686445</id><published>2007-06-07T18:52:00.000+02:00</published><updated>2007-06-07T19:11:32.210+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='guis'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>For me its the end of the Gui Architectur Confusion! Presenter First rules</title><content type='html'>&lt;font style="font-family: verdana;" size="3"&gt;After reading about GUI architectures &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2007/06/05/build-your-own-cab-part-7-what-s-the-model.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://www.martinfowler.com/eaaDev/uiArchs.html"&gt;here&lt;/a&gt; and after being in a project where the GUI layer has been architected by a real architekt (as in "over 40 and over confident") into an unusable mess, I believe I've finally found the holy grail. For me it is at least. Look for yourself at &lt;a href="http://atomicobject.com/pages/Presenter+First"&gt;this&lt;/a&gt; and make up your mind.&lt;br /&gt;&lt;br /&gt;The even have a notion about what I have called &lt;span style="font-weight: bold;"&gt;The User as a Service&lt;/span&gt; every now and then.&lt;br /&gt;&lt;br /&gt;What is the best thing about &lt;span style="font-weight: bold;"&gt;Presenter First&lt;/span&gt;, is that it not only takes into account architecture but also the actual develoment process and it is a perfect fit for TDD. And Presenter First seems to be a very good addition to &lt;a href="http://domaindrivendesign.org/"&gt;DDD&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I came accros this by looking at the most unlikely place to find something that is so simple and so elegant and looks so feasible (not to mention that you can do it without software factories, domain specific languages, code generation (well the authors actually use some code generation but it is not needed), visual designers) at ARCast on Channel 9. They have two episodes&lt;br /&gt;&lt;/font&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=312315"&gt;ARCast.net - Presenter First Pattern (Part 1)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=313377"&gt;ARCast.net - Presenter First Pattern (Part 2)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br style="font-family: verdana;"&gt;&lt;span style="font-family: verdana;"&gt;My advice&lt;/span&gt;&lt;br style="font-family: verdana;"&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;Read the papers&lt;/li&gt;&lt;li&gt;Listen to the podcasts&lt;/li&gt;&lt;li&gt;Look at the examples&lt;/li&gt;&lt;li&gt;Try it in your project&lt;/li&gt;&lt;li&gt;Be happy!&lt;/li&gt;&lt;/ul&gt;&lt;br style="font-family: verdana;"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-6904224853356686445?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/6904224853356686445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=6904224853356686445' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/6904224853356686445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/6904224853356686445'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/06/for-me-its-end-of-gui-architectur.html' title='For me its the end of the Gui Architectur Confusion! Presenter First rules'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-2960247609037009314</id><published>2007-05-31T08:57:00.000+02:00</published><updated>2007-05-31T08:57:51.844+02:00</updated><title type='text'>Microsoft Surface</title><content type='html'>&lt;a href="http://www.microsoft.com/surface/"&gt;Microsoft Surface&lt;/a&gt;&lt;br /&gt;Just incredible!&lt;br /&gt;Look at Experiance Surface / The Possibilities&lt;br /&gt;I came across it by way of &lt;a href="http://www.sellsbrothers.com/"&gt;http://www.sellsbrothers.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-2960247609037009314?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.microsoft.com/surface/' title='Microsoft Surface'/><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/2960247609037009314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=2960247609037009314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/2960247609037009314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/2960247609037009314'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/05/microsoft-surface.html' title='Microsoft Surface'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-3768445493723960779</id><published>2007-05-23T12:54:00.000+02:00</published><updated>2007-05-23T12:54:47.677+02:00</updated><title type='text'>Peli's Farm - Production Grammar Framework for .NET and applications to Software Testing</title><content type='html'>&lt;a href="http://blog.dotnetwiki.org/archive/2004/06/09/375.aspx"&gt;Peli's Farm - Production Grammar Framework for .NET and applications to Software Testing&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I cannot believe It took me close to three years until I descovered that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-3768445493723960779?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blog.dotnetwiki.org/archive/2004/06/09/375.aspx' title='Peli&apos;s Farm - Production Grammar Framework for .NET and applications to Software Testing'/><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/3768445493723960779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=3768445493723960779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/3768445493723960779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/3768445493723960779'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/05/pelis-farm-production-grammar-framework.html' title='Peli&apos;s Farm - Production Grammar Framework for .NET and applications to Software Testing'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-7533522873809287997</id><published>2007-05-12T10:54:00.000+02:00</published><updated>2007-05-12T10:55:24.042+02:00</updated><title type='text'>Annoying TortoiseSVN Bug while Patching "The file ... was found twice!?!"</title><content type='html'>I&amp;#39;ve been fiddling arround with the trunk of with fit.net&lt;br&gt;(&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=167811"&gt;http://sourceforge.net/project/showfiles.php?group_id=167811&lt;/a&gt;) lately&lt;br&gt;and I keep my changes in Tortoise patches, so I can reaply them after an&lt;br&gt;update -- or at least that&amp;#39;s what I planned to do. Yesterday I found an&lt;br&gt;ugly (and allready known) bug in Tortoise 1.4.3, Build 8645. When files&lt;br&gt;occure more than once in a patch, the error message &amp;quot;The file ... was&lt;br&gt;found twice!?!&amp;quot; appears. The only solution I&amp;#39;ve found is to remove the&lt;br&gt;duplicate entries from the path.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-7533522873809287997?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/7533522873809287997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=7533522873809287997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/7533522873809287997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/7533522873809287997'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/05/annoying-tortoisesvn-bug-while-patching.html' title='Annoying TortoiseSVN Bug while Patching &quot;The file ... was found twice!?!&quot;'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-3581657466920717472</id><published>2007-05-09T15:38:00.000+02:00</published><updated>2007-05-09T18:04:54.637+02:00</updated><title type='text'>Educating the Team II (follow up to &gt;&gt;It's harder than I thought&lt;&lt;)</title><content type='html'>&lt;p&gt;&lt;span style="font-family:Verdana;"&gt;After laying some groundwork to understand C# and a tiny bit of .NET I would like to go more hands on. As the requirements are not as far as they should be (remember: NO ON SITE CUSTMER YET) I was thinking of picking a playground scenario my self and take it over the hurdles.&lt;br /&gt;&lt;br /&gt;Here are the things I would like to do in the order I intent to do them&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Verdana;"&gt;Pick two features. &lt;/span&gt;&lt;li&gt;&lt;span style="font-family:Verdana;"&gt;Define Acceptance Tests. &lt;/span&gt;&lt;li&gt;&lt;span style="font-family:Verdana;"&gt;Implement Acceptance Tests with FIT (not Fitnesse - I don't see an easy way to manage it in revision control). &lt;/span&gt;&lt;li&gt;&lt;span style="font-family:Verdana;"&gt;Set up Continuous Integration running the FIT Tests - which will be&lt;span class="515410413-09052007"&gt; all&lt;/span&gt; red at that point. &lt;/span&gt;&lt;li&gt;&lt;span style="font-family:Verdana;"&gt;Implement the features with automated developer tests. &lt;/span&gt;&lt;li&gt;&lt;span style="font-family:Verdana;"&gt;Enhance the CI to do the actual build, test and the packaging. &lt;/span&gt;&lt;li&gt;&lt;span style="font-family:Verdana;"&gt;Demo the result to the Management.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:Verdana;"&gt;I would like to pick two features because the one feature I had in mind which we could use later on was Authentication and Authorization. As this is an infrastructure concern there is nothing to show off to the management later on. So I need to add a showcase scenario as well. For now lets say we manage some goods and only certain people are allowed to view the wholesale price and only some people are allowed to change our retail price .&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="515410413-09052007"&gt;&lt;span style="font-family:Verdana;"&gt;So we will build some simple app that allows a user to enter, view, change, delete and query the goods. No fancy stuff. A good is described by its number, description, wholesale price, and retail price. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;As the application we will build will be running &lt;span class="515410413-09052007"&gt;as a SmartClient &lt;/span&gt;in a Windows environment&lt;span class="515410413-09052007"&gt;,&lt;/span&gt; it makes sense to use integrated security. So if some user is logged on we just believe he is who Windows claims him to be. So this takes care of authentication. For authorization we would like to use memberships in Windows groups: You can print that &lt;em&gt;&lt;span class="515410413-09052007"&gt;really_secret_report &lt;/span&gt;&lt;/em&gt;only if you are a member of the &lt;em&gt;ourapplication_ReportingLevel2 &lt;/em&gt;group. &lt;span class="515410413-09052007"&gt;But there will be situations where integrated security will not work. There might be some customers that do not use a Windows Domain or there might be POS terminals which are used by more than one person without actually logging on as themselves. I've seen systems used in restaurants where the waiters were using some key - either a real key or something like a chip - to identify themselves on the terminal. If our application is running in such an environment we would like to switch our authentication and authorization provider. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="515410413-09052007"&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="515410413-09052007"&gt;&lt;span style="font-family:Verdana;"&gt;And even if we would aim only for integrated security, we would like to keep our software decoupled from the actual implementation of the provider: It would be absolutely impossible to run either our unit tests nor out acceptance tests against a Windows domain providing the auth-info. There is no way we would be able to gain enough direct access to the Windows domain to set it up in the way we need it. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="515410413-09052007"&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="515410413-09052007"&gt;&lt;span style="font-family:Verdana;"&gt;This is an ideal reason to introduce the team to the concepts of IoC and Testability. It pays to be able to switch implementations without affecting the application. It pays while developing because we can work in parallel on both features and can run tests for the app even if the auth-provider is under development. And it pays while in production because we can enhance our application to work in an environment that does not have integrated authentication.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="515410413-09052007"&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="515410413-09052007"&gt;&lt;span style="font-family:Verdana;"&gt;Even if we are able to switch the auth-provider, the first implementation I expect to ship is the one for Windows integrated security. We will start to work on a module that handles the management of users and roles when we face the first environment where we need it. This defers the work on a user management module until some later time. No need to pay interest rates until then, no need to delay other features that are more important for the application and the vast majority of customers.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="515410413-09052007"&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="515410413-09052007"&gt;&lt;span style="font-family:Verdana;"&gt;Please give your feedback...&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-3581657466920717472?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/3581657466920717472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=3581657466920717472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/3581657466920717472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/3581657466920717472'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/05/educating-team-ii-follow-up-to-its.html' title='Educating the Team II (follow up to &gt;&gt;It&apos;s harder than I thought&lt;&lt;)'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-9071707626599558787</id><published>2007-05-08T20:46:00.001+02:00</published><updated>2007-05-08T20:46:40.304+02:00</updated><title type='text'>It's harder than I thought</title><content type='html'>&lt;!-- Converted from text/plain format --&gt; &lt;P&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;So now it's the second day of my new project  and there are more things to do that I have exspected.&lt;BR&gt;These are the  problems:&lt;/FONT&gt; &lt;/FONT&gt;&lt;/P&gt; &lt;UL&gt;   &lt;LI&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;There no on site customer in sight&lt;/FONT&gt;    &lt;/FONT&gt;   &lt;LI&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;From the four people assigned to my    project three are still working on the old product&lt;/FONT&gt; &lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;DIV&gt;&lt;FONT face=Verdana size=2&gt;People are new to &lt;/FONT&gt;&lt;/DIV&gt; &lt;UL&gt;   &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;.NET&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;C#&lt;/FONT&gt;    &lt;LI&gt;&lt;SPAN class=203054316-08052007&gt;&lt;FONT face=Verdana size=2&gt;Visual Studio    2005 (so they do not know about ReSharper or ViEmu)&lt;/FONT&gt;&lt;/SPAN&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Design Patterns&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN    class=203054316-08052007&gt;PoEAA&lt;/SPAN&gt;&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;Source    control&lt;/SPAN&gt;&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;Automated    builds&lt;/SPAN&gt;&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;Continuous    Integration&lt;/SPAN&gt;&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN    class=203054316-08052007&gt;OO&amp;nbsp;programming&lt;/SPAN&gt;&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN    class=203054316-08052007&gt;Refactoring&lt;/SPAN&gt;&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;Domain Driven    Design (well, I didn't dare to ask)&lt;/SPAN&gt;&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;Automated    developer tests&lt;/SPAN&gt;&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;Automated    acceptance tests&lt;/SPAN&gt;&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;IoC and    containers&lt;/SPAN&gt;&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;Layered    architectures&lt;/SPAN&gt;&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN    class=203054316-08052007&gt;O/RM&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;DIV&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;I could extend the  list even more. This seems daunting. Every bit of knowledge I took for granted  in my old project is just not there. So I have to start from  scratch&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt; &lt;DIV&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN  class=203054316-08052007&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt; &lt;DIV&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;Enough complaints.  Here are the things I plan to get the team started.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt; &lt;UL&gt;   &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;Quick intro into    VS 2005&lt;/SPAN&gt;&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;Hands on: How to    write Hello World in C#&lt;/SPAN&gt;&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;Hands on: Hello    World 2007: Greeting is comming from a ClassLibrary&lt;/SPAN&gt;&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;Wrap up    References: Binary, Project, COM, WebServices&lt;/SPAN&gt;&lt;/FONT&gt;    &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;C# 1    -&amp;nbsp;Types: Classes, Interfaces, Enums, Structs || Value Types -- Reference    Types || Build in Value Types&lt;/SPAN&gt;&lt;/FONT&gt;   &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;C# 2 -    Statements: method call, if..else, Nested if statements, switch statment,    goto, while loop, do..while loop, for loop, continue and break, block    statement.&lt;/SPAN&gt;&lt;/FONT&gt;   &lt;LI&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;C# 3    -&amp;nbsp;Operators: Assignment, +-*/, %, += -= *= /= %=, Prefix and Postfix ++    --, Relational == &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= !=, Logical &amp;amp;&amp;amp; || !, Short    Circuit Evaluation, Ternary Operator ? :, Precedence of    Operators&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;DIV&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN class=203054316-08052007&gt;to be continued  later...&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-9071707626599558787?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/9071707626599558787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=9071707626599558787' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/9071707626599558787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/9071707626599558787'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/05/its-harder-than-i-thought.html' title='It&apos;s harder than I thought'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-1904473856118185837</id><published>2007-05-02T10:57:00.000+02:00</published><updated>2007-05-02T10:58:12.636+02:00</updated><title type='text'>When the Iron Triangle becomes an Iron Rectangle</title><content type='html'>We usually speak of the Iron Triangle (aka Time, Resources, Features)&lt;br&gt;when it comes to software projects. More often than not this triangle&lt;br&gt;turns into a rectangle when you are working as a freelance consultant.&lt;br&gt;The people are not only hiring you to produce a certain amount of&lt;br&gt;features within a given time frame while using a certain amount of&lt;br&gt;resources, they expect you to train their internal staff on the way.&lt;br&gt;This can take some work and it will result in less features, or more&lt;br&gt;time or resources used. &lt;br&gt;In the past I often forgot to point that out to the people who are&lt;br&gt;hiring me. Thankfully my new assignment is mostly about knowledge&lt;br&gt;transfer, even if we will be developing useful software on the way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-1904473856118185837?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/1904473856118185837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=1904473856118185837' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/1904473856118185837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/1904473856118185837'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/05/when-iron-triangle-becomes-iron.html' title='When the Iron Triangle becomes an Iron Rectangle'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-1551723844770363819</id><published>2007-05-02T09:30:00.001+02:00</published><updated>2007-05-02T09:30:58.741+02:00</updated><title type='text'>Trying to Post via Email - Take 2</title><content type='html'>&lt;!-- Converted from text/plain format --&gt; &lt;P&gt;&lt;FONT face=Arial size=2&gt;I usually write my emails in Outlook in a Text only  format. &lt;EM&gt;Unfortunately Outlook seems to add line breaks after a fixed number  of characters&lt;/EM&gt; which screws up the layout of my blog  posts.&lt;/FONT&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-1551723844770363819?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/1551723844770363819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=1551723844770363819' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/1551723844770363819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/1551723844770363819'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/05/trying-to-post-via-email-take-2.html' title='Trying to Post via Email - Take 2'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-7688949393493266694</id><published>2007-05-02T09:15:00.001+02:00</published><updated>2007-05-02T09:15:17.212+02:00</updated><title type='text'>Blogging via Email - Does it really work?</title><content type='html'>If you are reading this post you&amp;#39;re a victim of my attempts to blog via&lt;br&gt;email. &lt;br&gt;You&amp;#39;re asking why I am doing such nonsense. Well, I exspect to be&lt;br&gt;commuting for an hour every day by train for my new assignment. And I&lt;br&gt;will be offline while on the train, I want to be able to write down my&lt;br&gt;thoughts in my email client and send it off when I am online again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-7688949393493266694?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/7688949393493266694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=7688949393493266694' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/7688949393493266694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/7688949393493266694'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/05/blogging-via-email-does-it-really-work.html' title='Blogging via Email - Does it really work?'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-6723769303104395332</id><published>2007-04-27T10:07:00.000+02:00</published><updated>2007-04-27T10:55:50.151+02:00</updated><title type='text'>New Job</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;So after more than a month of searching I've found a new project. After having offers by the dozens to work as a coder (or rather a &lt;a href="http://www.ayende.com/Blog/archive/2007/03/16/Darl-The-Data-Entry-Developer.aspx"&gt;DARL&lt;/a&gt;) or even as a product specialist (I mention Sharepoint somewhere in my cv and was flodded with offers), I finally signed the contract for the project of my dreams.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Trebuchet MS;"&gt;Imagine the setting: There is a software company that is doing a lot of J2EE develoment. The only thing not J2EE is a team of 5 people who are maintaining an application written in VB6 that is out in the market. Now the company has decided that this application needs a rewrite and what is what is even more important: that the company must build some .NET muscle. So the hired me on a contract basis to work as a coach/architect/lead developer (maybe even evangelist) to lead the team in to the brave new world of .NET. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Trebuchet MS;"&gt;The gig starts in one week so I have some time to figure out how to make this happen.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Trebuchet MS;"&gt;I'll plan to write down in the blog what I intend to do and how it will turn out.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-6723769303104395332?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/6723769303104395332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=6723769303104395332' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/6723769303104395332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/6723769303104395332'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/04/new-job.html' title='New Job'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-117518403143955318</id><published>2007-03-29T18:54:00.000+02:00</published><updated>2007-03-29T19:00:31.450+02:00</updated><title type='text'>Learning by Watching Good People Work</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;I am just watching Ayende Rahiens screencast &lt;a href="http://www.ayende.com/hibernating-rhinos.aspx"&gt;Hibernating RhinoMocks&lt;/a&gt; and besides learning something about RhinoMocks I can learn how he works with Visual Studio and ReSharper. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Trebuchet MS;"&gt;Most of the time he is to quick for me to get it the first time I see what he is doing. But in a screencast you just stop the Media Player go back a bit and step through. Thats just a fantistic way to learn.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-117518403143955318?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/117518403143955318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=117518403143955318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/117518403143955318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/117518403143955318'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/03/learning-by-watching-good-people-work.html' title='Learning by Watching Good People Work'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-117517620074632827</id><published>2007-03-29T15:49:00.000+02:00</published><updated>2007-03-29T16:39:08.030+02:00</updated><title type='text'>Update on "Lots of Projects in a Visual Studio 2005 Solution"</title><content type='html'>&lt;span style="font-family:Trebuchet MS;"&gt;We have been using Resharper for quite a while now and for some solutions that are set up &lt;a href="http://rkse.blogspot.com/2006_10_01_rkse_archive.html#116101141696927183"&gt;like I described earlier&lt;/a&gt;, ReSharper marks lots of types as "unknown". &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Trebuchet MS;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Trebuchet MS;"&gt;So if you are using ReSharper (and you definitely should use it), the soltion I described is no solution at all.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Trebuchet MS;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Trebuchet MS;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-117517620074632827?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://rkse.blogspot.com/2007_03_01_rkse_archive.html#117517620074632827' title='Update on &quot;Lots of Projects in a Visual Studio 2005 Solution&quot;'/><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/117517620074632827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=117517620074632827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/117517620074632827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/117517620074632827'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2007/03/update-on-lots-of-projects-in-visual.html' title='Update on &quot;Lots of Projects in a Visual Studio 2005 Solution&quot;'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5870919.post-116101141696927183</id><published>2006-10-16T17:08:00.000+02:00</published><updated>2009-03-22T10:37:49.682+01:00</updated><title type='text'>Lots of projects in a Visual Studio 2005 Solution</title><content type='html'>&lt;span style="font-family: trebuchet ms"&gt;&lt;span style="font-size: 85%"&gt;     &lt;br /&gt;Well, we have a significant amount of projects (around 80) in our so called &amp;quot;official&amp;quot; solution. The is the solution we use on our TeamFoundation Server for the build process and under some circumstances on our local developer boxes.As this is mostly unbearable for normal development, I have developed the following trick - called &amp;quot;stripped down solution&amp;quot;: &lt;/span&gt;    &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 85%"&gt;   &lt;br /&gt;&lt;span style="font-family: trebuchet ms"&gt;1. Get the whole source code for the solution.     &lt;br /&gt;2. Build the solution. I use &amp;quot;msbuild official.sln&amp;quot; from the commandline.      &lt;br /&gt;3. Create a new solution. I have an item in my Explorer/New menu forthat.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: trebuchet ms"&gt;   &lt;br /&gt;&lt;span style="font-size: 85%"&gt;4. Open the new solution and add just those projects you plan to develop in. Usually this is the production project and the test project. &lt;/span&gt;    &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 85%"&gt;   &lt;br /&gt;&lt;span style="font-family: trebuchet ms"&gt;Why does this work?&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: trebuchet ms"&gt;   &lt;br /&gt;&lt;span style="font-size: 85%"&gt;When the solution has been built, all the references between projects in the solution are pointing to the assemblies in the build output of the referenced project. This is accomplished by step 2. When you remove a project from a solution all the references to that project are removed from the referencing projects. So we do it the other way around: We start with an empty solution and just add the things we want to change.You might get worried when you look at the list of references in the Solution Explorer: some of the references show a warning sign. You can ignore that almost all of the time. Your solution will work as expected. &lt;/span&gt;    &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 85%"&gt;   &lt;br /&gt;&lt;span style="font-family: trebuchet ms"&gt;Some additional remarks.     &lt;br /&gt;      &lt;br /&gt;Why the mega-solution?      &lt;br /&gt;-&amp;gt; It binds together all the visual studio projects we want to build at once.      &lt;br /&gt;Are there situations where the stripped down solution does not work?      &lt;br /&gt;-&amp;gt; Yes! When you rename an identifier, automatic renaming applies only to the projects within the current solution. So for that you will need the mega-solution again.      &lt;br /&gt;-&amp;gt; Adding project references. You obviously will need the mega solution to do that.      &lt;br /&gt;Do you check in the stripped down solutions?      &lt;br /&gt;-&amp;gt; No! The stripped down solutions are tailored to the developer and the task at hand. The stripped down solution I am using today will have little relevance for some other developer next week.      &lt;br /&gt;      &lt;br /&gt;Maybe this will work with unloading the projects as well, but I have not tried this yet.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: trebuchet ms"&gt;   &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5870919-116101141696927183?l=rkse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://rkse.blogspot.com/2007_03_01_rkse_archive.html#117517620074632827' title='Lots of projects in a Visual Studio 2005 Solution'/><link rel='replies' type='application/atom+xml' href='http://rkse.blogspot.com/feeds/116101141696927183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5870919&amp;postID=116101141696927183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/116101141696927183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5870919/posts/default/116101141696927183'/><link rel='alternate' type='text/html' href='http://rkse.blogspot.com/2006/10/lots-of-projects-in-visual-studio-2005.html' title='Lots of projects in a Visual Studio 2005 Solution'/><author><name>Ralf</name><uri>http://www.blogger.com/profile/12069459854043020942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
