<?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-7732705687679727257</id><updated>2011-11-27T16:36:22.398-08:00</updated><category term='NUnit'/><category term='Windows Forms'/><category term='Microsoft'/><category term='MVVM'/><category term='icons'/><category term='Deployment'/><category term='70-536'/><category term='Controls'/><category term='Customization'/><category term='WP7'/><category term='UI'/><category term='ClickOnce'/><category term='Prototype'/><category term='events'/><category term='interfaces'/><category term='ColorScheme'/><category term='PRIO'/><category term='Clean Code Developer'/><category term='Workaround'/><category term='Concurrency'/><category term='types'/><category term='XAML'/><category term='properties'/><category term='meta'/><category term='Visual Studio 2008'/><category term='ReSharper'/><category term='Community'/><category term='DateTime'/><category term='ToolStrip'/><category term='Conference'/><category term='Links'/><category term='NHibernate'/><category term='MCTS'/><category term='70-505'/><category term='JavaScript'/><category term='AutoMapper'/><category term='Compile Error'/><category term='SynchronizationContext'/><category term='WPF'/><category term='FileSytemWatcher'/><category term='Silverlight'/><title type='text'>YA.NB - Yet Another .Net Blog</title><subtitle type='html'>into and out of the trapfalls of daily programming</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-6584893951845500280</id><published>2011-11-15T23:12:00.001-08:00</published><updated>2011-11-16T06:27:03.515-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>A peek into the crystal ball - An empire named HTML5</title><content type='html'>After mobile Flash has been jilted, there's (more or less official) word out on the street that Silverlight 5 will be the last iteration of Microsoft's web interaction platform. Eventually, HTML5 seems to be the next big thing, and among many other reasons for the first major release of the web standard in ages, the following make most sense for me:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No Framework or runtime required&amp;nbsp;&lt;/li&gt;&lt;li&gt;open specification&lt;/li&gt;&lt;li&gt;in future, every browser will implement it without a plugin (bringing an end to license hell)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Microsoft sure knows how to amaze developers, and with the incarnation of XAML, have given us a toolset that enables us to develop for the web, the mobile and the windows platform in the same comprehensible way.&lt;br /&gt;HTML5 is supposed to do the very same thing, and in addition enable us to develop for iOS and other non-.Net-aware platforms as well, all with the help of JavaScript (yuck!). That's what I call zombie technology : I thought JS was dead, but here it comes, stabbing us all in the back (or, from a more flowery perspective, giving us all the help we need).&lt;br /&gt;&lt;br /&gt;Silverlight has - to my mind - always been one of those borderline technologies : I was never really certain whether it was a proof of concept (we can do what flash can do, but better) or a great white hope (with financial profit for Microsoft). The EOL notice - be it official or not - will give Silverlight 5 developers, authors and trainers a very hard time finding business, and what remains will be the technology that benefits from the Silverlight mindset (WPF, WP7), at least until it falls over the saucer's edge as well.&lt;br /&gt;&lt;br /&gt;In the end there will be one major Client technology, and that will be HTML5. That, of course, will only be true until its insufficiencies in specific scenarios show up and the next more colorful fish swims along. Even nowadays there's Delphi software being used and maintained, I have even come across a few COBOL relics in productive use. As technology lifecycles become shorter, it is us developers who have to keep up with the pace, which means : If you're a WPF specialist today, you should aim at becoming a WinRT specialist tomorrow. The environment is changing faster than ever, and yes - even HTML5 will be old in a few years' time. The empire rises and falls.&lt;br /&gt;&lt;br /&gt;A question to ponder about : How do I ever become a seasoned expert, how can I distinguish from the masses when the environment crumbles and rebuilds in shorter cycles? Any ideas? Mail me, I'd love to read those!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-6584893951845500280?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/6584893951845500280/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2011/11/peek-into-crystal-ball-empire-named.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/6584893951845500280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/6584893951845500280'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2011/11/peek-into-crystal-ball-empire-named.html' title='A peek into the crystal ball - An empire named HTML5'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-6782488537216727046</id><published>2011-08-30T16:08:00.001-07:00</published><updated>2011-08-30T16:12:50.320-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Customization'/><category scheme='http://www.blogger.com/atom/ns#' term='properties'/><category scheme='http://www.blogger.com/atom/ns#' term='Controls'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><title type='text'>Something very much like a PropertyGrid!</title><content type='html'>I've been working on a WPF Toolkit for my pastime project CrystalWars tonight, when I stumbled upon &lt;a href="http://www.codeproject.com/KB/grid/WpfPropertyGrid.aspx"&gt;this lovely implementation of a PropertyGrid in WPF&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;At first sight, and working with basic data types only, it works very smoothly. I'll have to dive into the custom section in the next few &lt;s&gt;days&lt;/s&gt; nights. The tutorial looks pretty telling to me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-6782488537216727046?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/6782488537216727046/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2011/08/something-very-much-like-propertygrid.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/6782488537216727046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/6782488537216727046'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2011/08/something-very-much-like-propertygrid.html' title='Something very much like a PropertyGrid!'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-7161347271800330391</id><published>2011-04-14T04:01:00.000-07:00</published><updated>2011-08-30T16:13:37.435-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Customization'/><category scheme='http://www.blogger.com/atom/ns#' term='Controls'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><title type='text'>Getting the Crisp back into your WPF Apps</title><content type='html'>WPF has a lot of advantages, it's perfectly sane data binding mechanism being one of the most outstanding ones.On the flipside, many people (meaning companies, mostly) have refused to switch from WinForms to WPF because of the "blurry" looks of applications written in WPF.&lt;br /&gt;&lt;br /&gt;This blurryness goes back to two mechanisms:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1)Text Smoothing&lt;/span&gt;&lt;br /&gt;Instead of relying on the system's ClearType mechanism, WPF does it's own thing-a-magic, which is blatantly inferior to the aforesaid. In fact, WPF smoothed fonts are a definite way to headaches, if read for some time.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.scottlogic.co.uk/blog/colin/wp-content/uploads/2009/07/wpf-cleartype-zoom2.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 204px; height: 132px;" src="http://www.scottlogic.co.uk/blog/colin/wp-content/uploads/2009/07/wpf-cleartype-zoom2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note : The image is from a &lt;a href="http://www.scottlogic.co.uk/blog/colin/2009/07/silverlight-v3-cleartype-font-rendering-a-comparison/"&gt;website&lt;/a&gt; that compares various Microsoft.Net Font-Smoothing implementations.&lt;br /&gt;&lt;br /&gt;They might be useful to integrate text in images, though.For business applications (displaying data grids etc.) this is a K.O. criterion. Nobody wants to have to take their glasses off in order to achieve readability, and nobody wants their software deployed along with a pack of aspirins.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2)SubPixel positioning&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/text/WindowsLiveWriter/LayoutRounding_996/smiley%20rendered_thumb.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 89px; height: 97px;" src="http://blogs.msdn.com/blogfiles/text/WindowsLiveWriter/LayoutRounding_996/smiley%20rendered_thumb.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Based on the fact that the WPF Engine positions Elements not only on pixel positions but also somewhere between them, it has to calculate values for the neighboring pixels in order to display graphical objects (controls, images,...).&lt;br /&gt;In that respect, WPF is a little over-achiever! The result is a pixel with a color value based on those of two or four surrounding pixels, visibly as crisp as a drop of ink in a water jar.&lt;br /&gt;&lt;br /&gt;What we initially hoped to be a cure, turned out to be ineffective : The SnapsToDevicePixels Property. I have tried adding it to all hierarchies of the visual stack, but without any trace of success.&lt;br /&gt;&lt;br /&gt;By default, WPF uses what it can to achieve a smooth look, so those mechanisms are set to work by default. For years, Microsoft has either ignored or not been able to satisfy the community's yell for help. Finally, with the release of WPF4, the options to switch those mechanisms off, are here!&lt;br /&gt;Here's two steps to get your crispiness back :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1) TextFormattingMode&lt;/span&gt;&lt;br /&gt;To get rid of WPF Not-So-ClearType font rendering, your root element should set the property TextOptions.TextFormattingMode to "Display". This, like Renderoptions.BitmapScalingMode, is an attached Property and can be set on a per-control level as well.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2) UseLayoutRounding&lt;/span&gt;&lt;br /&gt;Using Layout rounding solves all issues based on SubPixel positioning, as it moves the elements to pixel positions instead.&lt;br /&gt;That being said, it does what we would have expected SnapsToDevicePixels to do. As far as I have tested, all declarations of SnapsToDevicePixels can now safely be removed.&lt;br /&gt;Fortunately, it has to be declared at top level, so&lt;br /&gt;Further details on Layout Rounding can be read &lt;a href="http://blogs.msdn.com/b/text/archive/2009/08/27/layout-rounding.aspx"&gt;here &lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If your Images are scaled rather than used in their "native size", you might want to set the BitmapScalingMode property of your Top-Level declaration (e.g. Window or Page) to utilize HighQuality rendering.&lt;br /&gt;&lt;br /&gt;That should cease the era of the WPF-headache! All hail to King Crispy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-7161347271800330391?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/7161347271800330391/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2011/04/getting-crisp-back-into-your-wpf-apps.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/7161347271800330391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/7161347271800330391'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2011/04/getting-crisp-back-into-your-wpf-apps.html' title='Getting the Crisp back into your WPF Apps'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-1860797239698123933</id><published>2011-04-08T22:37:00.000-07:00</published><updated>2011-04-09T16:13:41.776-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ClickOnce'/><category scheme='http://www.blogger.com/atom/ns#' term='Deployment'/><title type='text'>Deploying ClickOnce-applications in different environments without modifying the assembly identity</title><content type='html'>The following describes a method that is viable for ClickOnce deployment using "Online Only" mode.&lt;br /&gt;&lt;br /&gt;One of the aspects I recently pondered about is code identity. In other words : Auditors ask me how I ensure that the software tested and accepted by the departments is exactly and with no alternations the assembly we deploy for productive use and not some tinkered-with version. &lt;br /&gt;"That's easy", I say, "I can't!". Because some config-variables are set between approval and release, the ClickOnce hashes differ and thus does the whole thing.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-uEZDilucLIM/TZ_w4yJMBxI/AAAAAAAAAGI/a6cPhgYeS2c/s1600/ClickOnce.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 174px;" src="http://1.bp.blogspot.com/-uEZDilucLIM/TZ_w4yJMBxI/AAAAAAAAAGI/a6cPhgYeS2c/s400/ClickOnce.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5593454120541095698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The image depicts the requirement rather roughly, but I think more detail is not required: An application should be stateless and not compiled to fit it's environment.&lt;br /&gt;&lt;br /&gt;The first thing coming to my mind to sail around this kind of trouble is keeping the App.config (or any other file of my personal gusto) a part of the deployment, but removing it from the hash. That would be easy, fast and a little dirty.&lt;br /&gt;First and foremost, and that should suffice as a counter argument, it would annihilate the ability to sign the ClickOnce manifest, which is really a nuisance. Not being able to add an issuer certificate would result in user frustration, as they would have to confirm their trust in me every time I publish an update of the software.&lt;br /&gt;&lt;br /&gt;After some research I tried using the ApplicationDeployment class, and here's a snippet I created that does the job:&lt;br /&gt;&lt;pre class="brush:c-sharp"&gt;     &lt;br /&gt;        private static void GetDeploymentEnvironment()&lt;br /&gt;        {&lt;br /&gt;            if (ApplicationDeployment.IsNetworkDeployed)&lt;br /&gt;            {&lt;br /&gt;                ApplicationDeployment dep = ApplicationDeployment.CurrentDeployment;&lt;br /&gt;                FileInfo f = new FileInfo(dep.UpdateLocation.AbsolutePath + ".env");&lt;br /&gt;                if (f.Exists)&lt;br /&gt;                {&lt;br /&gt;                    /// read file content and apply settings&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-1860797239698123933?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/1860797239698123933/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2011/04/deploying-clickonce-applications-in.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/1860797239698123933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/1860797239698123933'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2011/04/deploying-clickonce-applications-in.html' title='Deploying ClickOnce-applications in different environments without modifying the assembly identity'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-uEZDilucLIM/TZ_w4yJMBxI/AAAAAAAAAGI/a6cPhgYeS2c/s72-c/ClickOnce.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-887297848884724753</id><published>2010-01-07T01:41:00.000-08:00</published><updated>2010-01-07T02:07:53.467-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Compile Error'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Forms'/><title type='text'>Duplicate items are not supported by the "Resources" parameter</title><content type='html'>This is an Error Message that I have encountered for the first time today.&lt;br /&gt;It is most likely to occur when you copy forms and rename the copy automatically, &lt;br /&gt;which will cause the original to be renamed, too.&lt;br /&gt;&lt;br /&gt;In my first project I split the code of a Form into many partial classes, one partial class for each&lt;br /&gt;tab in the form. I created new partial classes the copy &amp; paste way, which worked alright before, but&lt;br /&gt;today I got the Message &lt;br /&gt; &lt;br /&gt; &lt;span style="font-weight:bold;font-style:italic;"&gt;The item [...].resources  was specified more than once in the "Resources" parameter.&lt;br /&gt; Duplicate items are not supported by the "Resources" parameter&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Actually you can only have one Resources File per class. What I did was unknowingly copy the form including the resources file&lt;br /&gt;(...that the VS project explorer hides under the Form's node), so that the resources were double-linked.&lt;br /&gt;&lt;br /&gt;Solution: delete the second resource file.&lt;br /&gt;&lt;br /&gt;BTW: As of now, I will also try to make my posts googleable for developers with a german IDE by&lt;br /&gt;adding German search terms or error messages:&lt;br /&gt;&lt;br /&gt;Das [...].resources-Element wurde im Resources-Parameter mehrfach angegeben.&lt;br /&gt;Doppelte Elemente werden vom Resources-Parameter nicht unterstützt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-887297848884724753?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/887297848884724753/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2010/01/duplicate-items-are-not-supported-by.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/887297848884724753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/887297848884724753'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2010/01/duplicate-items-are-not-supported-by.html' title='Duplicate items are not supported by the &quot;Resources&quot; parameter'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-2287458920993012477</id><published>2009-12-10T01:56:00.000-08:00</published><updated>2011-04-09T15:32:07.641-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workaround'/><category scheme='http://www.blogger.com/atom/ns#' term='FileSytemWatcher'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><title type='text'>Pulling the rug from under Uncle FileSystemWatcher</title><content type='html'>The FileSystemWatcher class is a nice treat if you need to trace file system modifications (e.g. wait for a file to be created or deleted in a specific path).&lt;br /&gt;&lt;br /&gt;The full &lt;a href="http://msdn.microsoft.com/de-de/library/system.io.filesystemwatcher%28VS.80%29.aspx"&gt;MSDN documentation&lt;/a&gt; gives specs and usage examples.&lt;br /&gt;&lt;br /&gt;You will see it's easy to use and still powerful, allowing a variety of scenarios to be monitored. There is one point, though, that I had to painfully find out by messing it up before realizing it was an issue at all.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Imagine the following scenario:&lt;/b&gt; &lt;br /&gt;- You are monitoring a network path (UNC or mapped drive), or let's rather say your FileSystemWatcher is.&lt;br /&gt;- The network path becomes unavailable (deleted or unavailable due to network trouble...)&lt;br /&gt;&lt;br /&gt;What would you expect? Well, forget about that, because what actually happens is the following: Nothing. Period.Even if the path resurfaces, your FileSystemWatcher is out of its game. That renders it rather useless, because who has a use for a deaf event listener?&lt;br /&gt;&lt;br /&gt;Anyway, that's what recently happened within a windows service I've developed. The solution is as plain as good:&lt;br /&gt;FileSystemWatcher offers an Error-event that will be fired in such cases. Subscribe to this event and, in the handler, create a new FileSystemWatcher to listen for events on the original Watcher's path.&lt;br /&gt;Check out the following program, which will watch a path C:\test on your local machine. Once it's running, delete the folder. If you re-create it within 30 seconds (well, 27 really) watching will be resumed, otherwise not.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c-sharp"&gt;&lt;br /&gt;    class Program&lt;br /&gt;    {&lt;br /&gt;        private static FileSystemWatcher fsw;&lt;br /&gt;&lt;br /&gt;        private static int retryInterval = 3;&lt;br /&gt;&lt;br /&gt;        private static int maxRetries = 10;&lt;br /&gt;&lt;br /&gt;        private static int numRetries = 0;&lt;br /&gt;&lt;br /&gt;        private static bool watcherInstanceCompromised;&lt;br /&gt;&lt;br /&gt;        [STAThread]&lt;br /&gt;        static void Main(string[] args)&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                Init();&lt;br /&gt;                &lt;br /&gt;                Console.ReadLine();&lt;br /&gt;            }&lt;br /&gt;            catch (Exception e)&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine(e.Message, e);&lt;br /&gt;                throw;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private static void Init()&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {                &lt;br /&gt;                fsw = new FileSystemWatcher();&lt;br /&gt;                fsw.Path = @"\\127.0.0.1\c$\test";&lt;br /&gt;                fsw.Created += OnCreated;&lt;br /&gt;                fsw.Error   += OnError;                &lt;br /&gt;                fsw.EnableRaisingEvents = true;&lt;br /&gt;                Console.WriteLine("watching {0}", fsw.Path);&lt;br /&gt;                numRetries = 0;&lt;br /&gt;                watcherInstanceCompromised = false;&lt;br /&gt;            }&lt;br /&gt;            catch (Exception e)&lt;br /&gt;            {&lt;br /&gt;                numRetries++;&lt;br /&gt;                Console.WriteLine( "could not initialize ({0})", numRetries );&lt;br /&gt;                Console.WriteLine(e.Message);&lt;br /&gt;                Console.WriteLine(e.StackTrace);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private static void OnCreated(object source, FileSystemEventArgs f)&lt;br /&gt;        {&lt;br /&gt;            Console.WriteLine( "file created : {0}", f.FullPath );&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private static void OnError(object source, ErrorEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            watcherInstanceCompromised = true;&lt;br /&gt;            Console.WriteLine( "error occured." );&lt;br /&gt;            fsw.Dispose();&lt;br /&gt;            while (numRetries &lt; maxRetries &amp;&amp; watcherInstanceCompromised)&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine("trying to init after {0} failed attempts", numRetries);&lt;br /&gt;                Init();&lt;br /&gt;                // sleep for a few seconds&lt;br /&gt;                System.Threading.Thread.Sleep(1000 * retryInterval);&lt;br /&gt;            }&lt;br /&gt;            if (watcherInstanceCompromised)&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine( "not back after {0} retries.", numRetries );&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine( "should be working smoothly now" );&lt;br /&gt;            }&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-2287458920993012477?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/2287458920993012477/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/12/pulling-rug-from-under-uncle.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/2287458920993012477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/2287458920993012477'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/12/pulling-rug-from-under-uncle.html' title='Pulling the rug from under Uncle FileSystemWatcher'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-6923976980524962478</id><published>2009-11-20T01:52:00.000-08:00</published><updated>2011-07-09T13:45:36.653-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVVM'/><category scheme='http://www.blogger.com/atom/ns#' term='AutoMapper'/><category scheme='http://www.blogger.com/atom/ns#' term='Clean Code Developer'/><title type='text'>Using AutoMapper for MVVM implementations</title><content type='html'>Being Clean Code Developers, whenever we start developing a new application, we try to improve our code quality, right? As a part of that, we librarify what can be librarified and use 3rd Party and Open Source assemblies wherever possible so we can concentrate on the really dirty work.&lt;br /&gt;&lt;br /&gt;OK, here's one thing &lt;a href="http://www.lieser-online.de/" target="_blank"&gt;Stefan Lieser&lt;/a&gt; brought to my attention in the course a Google Group discussion. It's called &lt;a href="http://automapper.codeplex.com/" target="_blank"&gt;AutoMapper&lt;/a&gt;, and as the name gives away is a great deal of help when you have to map instances of Type A to instances of type B (very simply put, really). Sounds rather boring at first glance, but me and my buddy Maik decided we'd take a look at it for our nhibernate based MVVM implementations, in which (up to now) the viewmodels were wrappers / proxies for the models. Apart from that, it does great Conversions from one list type to another, which was a numb piece of loop-through-source-store-in-destination.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The Gloria : Stickiness of memory addresses&lt;/span&gt;&lt;br /&gt;Having worked with NHibernate, you will have passed the point where you had to think about change tracking, a topic that will end up in overridden equality operators, which &lt;a href="http://nhforge.org/blogs/nhibernate/archive/2008/09/06/identity-field-equality-and-hash-code.aspx" target="_blank"&gt;others have written about&lt;/a&gt;.&lt;br /&gt;What turns out to be important in the whole process is the consistency of an object's memory address. Our wrapper ViewModels had to keep an inner Model instance and write through all changes made to its values to the inner object. This was prone to errors (copy &amp; paste, forgetfulness, over-tired because of long gaming nights) and burdensome, but necessary in order to keep the original model's address.&lt;br /&gt;Using Automapper allows to switch the class Type (to 'n' fro!) without loosing the memory location at any time, so it's a neat util for getting a ViewModel for a Model. Let the code speak.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c-sharp"&gt;&lt;br /&gt;public class Customer &lt;br /&gt;{&lt;br /&gt;    public int Id { get; set; }&lt;br /&gt;    &lt;br /&gt;    public string Name { get; set; }&lt;br /&gt;&lt;br /&gt;    public override string ToString()&lt;br /&gt;    {&lt;br /&gt;        return "CustomerModel: " + this.Id + " - " + this.Name;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="brush:c-sharp"&gt;&lt;br /&gt;public class CustomerView&lt;br /&gt;{&lt;br /&gt;    public int Id { get; set; }&lt;br /&gt;    &lt;br /&gt;    public string Name { get; set; }&lt;br /&gt;&lt;br /&gt;    public override string ToString()&lt;br /&gt;    {&lt;br /&gt;        return "CustomerViewModel: " + this.Id + " - " + this.Name;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now let's prove how the memory address remains unchanged. For that I have put together a small console-application.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c-sharp"&gt;&lt;br /&gt;static void Main(string[] args)&lt;br /&gt;        {&lt;br /&gt;            //creating a convertee&lt;br /&gt;            var customer = new Customer()&lt;br /&gt;                           {&lt;br /&gt;                               Id = 1,&lt;br /&gt;                               Name = "me"&lt;br /&gt;                           };&lt;br /&gt;            &lt;br /&gt;            //Creating Maps for 2-way mapping&lt;br /&gt;            Mapper.CreateMap&amp;lt;Customer, CustomerView&amp;gt;();&lt;br /&gt;            Mapper.CreateMap&amp;lt;CustomerView, Customer&gt;&amp;gt;();&lt;br /&gt;&lt;br /&gt;            // First mapping Model--&gt;ViewModel&lt;br /&gt;            CustomerView view = Mapper.Map&amp;lt;Customer, CustomerView&amp;gt;(customer);&lt;br /&gt;            Console.WriteLine(customer + ", mem addr = " + WriteMemAddr(customer));&lt;br /&gt;            Console.WriteLine(view + ", mem addr = " + WriteMemAddr(view));&lt;br /&gt;&lt;br /&gt;            // Now, change the ViewModel and Re-Convert it.&lt;br /&gt;            view.Name = "you";&lt;br /&gt;            var customer2 = Mapper.Map&amp;lt;CustomerView, Customer&amp;gt;(view);&lt;br /&gt;            Console.WriteLine(customer2 + ", mem addr = " + WriteMemAddr(customer2));&lt;br /&gt;            Console.ReadLine();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        static string WriteMemAddr(object o) &lt;br /&gt;        { &lt;br /&gt;            GCHandle handle = GCHandle.Alloc(o, GCHandleType.Normal); &lt;br /&gt;            IntPtr pointer = GCHandle.ToIntPtr(handle); &lt;br /&gt;            string pointerDisplay = pointer.ToString(); &lt;br /&gt;            handle.Free(); &lt;br /&gt;            return pointerDisplay ; &lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now run this. You will see that while converting the object is always in the same memory location. If that ain't gorgeous!&lt;br /&gt;&lt;br /&gt;Another sample/explanation can be found &lt;a href="http://www.bengtbe.com/blog/post/2009/04/14/Using-AutoMapper-to-map-view-models-in-ASPNET-MVC.aspx"&gt;here &lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-6923976980524962478?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/6923976980524962478/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/11/using-automapper-for-mvvm.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/6923976980524962478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/6923976980524962478'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/11/using-automapper-for-mvvm.html' title='Using AutoMapper for MVVM implementations'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-3043660494640309256</id><published>2009-10-30T18:10:00.000-07:00</published><updated>2009-10-30T18:21:32.660-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PRIO'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>A Retrospective look at the PRIO09 Conference</title><content type='html'>This year’s PRIO took place in Munich and was entitled with the rather general term “UI”, which seemed more than convenient for me, being a UI Developer ever since I wrote my first homepage back in 1997.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u3tEM8rYFtE/SuuPsn6PPaI/AAAAAAAAAE0/LsSvDqdzyzY/s1600-h/logo.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 162px; height: 112px;" src="http://3.bp.blogspot.com/_u3tEM8rYFtE/SuuPsn6PPaI/AAAAAAAAAE0/LsSvDqdzyzY/s400/logo.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5398566575123938722" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Taking a look at the program for &lt;a href="http://www.prioconference.de/programm_28_10_09.html"&gt;day one&lt;/a&gt;, I knew right away that I wouldn’t get far by following one of the predefined tracks. On the other side, it contained a whole Silverlight track, which I have no use for and could thus discard without further consideration (Same goes for the partner sessions). As a result I hopped between practical and conceptual talks, with a result that was way above my expectations. To mention the day’s hightlights : Mr. &lt;a href="planetgeek.ch"&gt;Urs Enzler&lt;/a&gt; shed some light on how he and his folks implement the single responsibility paradigm in combination with established patterns like M-V-VM, a both informative and important issue. After that I went (or rather stayed) to see and hear Bernd Marquardt, who brilliantly explained what’s currently in stock for writing Multi-threaded UIs and announced his follow-up speech that would explain some of what Microsoft’s new TPL concept will change and hopefully improve.&lt;br /&gt;&lt;br /&gt;Eventually, I received insights into AOP and what &lt;a href="http://www.postsharp.org/"&gt;PostSharp &lt;/a&gt;for you in the UI context (thanks to Monsieur Fraiteur, whose original talk could in part have passed for an homage to Mr. Bean) but also why I don’t think I’ll use it in the closer future.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.prioconference.de/programm_29_10_09.html"&gt;Day two&lt;/a&gt; was stuffed with so many interesting abstracts that I actually found it hard to decide which parts to listen to. First of all I was a little sorry I couldn’t visit &lt;a href="headwriteline.blogspot.com"&gt;Jörg Neumann&lt;/a&gt;, but there was one topic being discussed at that time that I preferred over his technology shootout: Empinia! It turned out that only five people (including the speaker, the audio technician and &lt;a href="http://dotnetpro.de/"&gt;Tilman Börner&lt;/a&gt; from the dotnetpro) found this issue worth their time, but to me it was one of the most interesting contributions to the whole conference. Thanks to Tobias Schnackenbeck from ibu Hamburg for this concise introduction into the platform.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_u3tEM8rYFtE/SuuP8Hu64cI/AAAAAAAAAE8/-qWgaqS4TZc/s1600-h/baum.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 152px; height: 167px;" src="http://4.bp.blogspot.com/_u3tEM8rYFtE/SuuP8Hu64cI/AAAAAAAAAE8/-qWgaqS4TZc/s400/baum.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5398566841364439490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After that I followed the conceptual track, which offered two speeches by Golo Roden (“Idea to finished UI – for developers”) and Michael Wiedeking (“GUI Design Patterns”). Both were entertaining and pastime and both speakers’ rhetoric skills are outstanding.&lt;br /&gt;&lt;br /&gt;Unfortunately my flight schedule forbade me to listen to Mr. Marquardt’s TPL speech, but if it was only half as good as the one the day before, it was brilliant.&lt;br /&gt;&lt;br /&gt;As you do on these occasions, I went around and talked to a variety of people (most of which I hadn’t known before) to ask for their impressions. The feedback I collected was all in all not as positive as I would have expected it. The reason for this, nevertheless, is rather obvious. The practical track was most satisfying – developers and code are a winning couple. The conceptual track though was the one where most clarification has been hoped for and where least of it was delivered. Some psycho-analysis, quite a lot of “the user acts like this because humans work like this”, and from time to time even only lukewarm air. It is satisfying, in a way, to hear the speaker say things that are congruent with your thoughts. But if it doesn’t go beyond that (or just gives it a pretty name), e.g. fails to give developers simple hints on simple techniques like visual grouping or anchoring, this will reduce its value dramatically, since you leave the talk with no way around / no tool to fix the everlasting gap between designers and developers.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;All in all, the prio was a worthwhile event and can only be recommended!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-3043660494640309256?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/3043660494640309256/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/10/retrospective-look-at-prio09-conference.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/3043660494640309256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/3043660494640309256'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/10/retrospective-look-at-prio09-conference.html' title='A Retrospective look at the PRIO09 Conference'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_u3tEM8rYFtE/SuuPsn6PPaI/AAAAAAAAAE0/LsSvDqdzyzY/s72-c/logo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-7806878815382871971</id><published>2009-09-08T02:26:00.000-07:00</published><updated>2009-11-05T16:24:10.560-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Customization'/><category scheme='http://www.blogger.com/atom/ns#' term='ReSharper'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='ColorScheme'/><title type='text'>Eye-Friendly Visual Studio ColorScheme (using ReSharper)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_u3tEM8rYFtE/SqYjqZlQUyI/AAAAAAAAAEs/-BFiauzkTuQ/s1600-h/EdelmeiersEyeFriendlyColorScheme.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 247px;" src="http://2.bp.blogspot.com/_u3tEM8rYFtE/SqYjqZlQUyI/AAAAAAAAAEs/-BFiauzkTuQ/s400/EdelmeiersEyeFriendlyColorScheme.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5379026016269259554" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Although seeming a bit too colourful, this ColorScheme is a lot more relaxing for the eyes. I noticed a drastic change of stress on my eyes after switching to it.&lt;br /&gt;&lt;br /&gt;You need JetBrains ReSharper to be able to use this ColorScheme.&lt;br /&gt;&lt;a href="http://edelmeier.com/downloads/EdelmeiersEyeFriendlyColorScheme.vssettings"&gt; - Download Link - &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-7806878815382871971?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/7806878815382871971/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/09/eye-friendly-visual-studio-colorscheme.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/7806878815382871971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/7806878815382871971'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/09/eye-friendly-visual-studio-colorscheme.html' title='Eye-Friendly Visual Studio ColorScheme (using ReSharper)'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_u3tEM8rYFtE/SqYjqZlQUyI/AAAAAAAAAEs/-BFiauzkTuQ/s72-c/EdelmeiersEyeFriendlyColorScheme.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-636538252777342586</id><published>2009-09-08T01:18:00.000-07:00</published><updated>2009-11-02T05:24:11.305-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workaround'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Visual Studio 2008 and Multi-Monitor-Setups</title><content type='html'>Very recently my Visual Studio 2008 started to show some strange behaviour:&lt;br /&gt;After moving docking / dockable tool windows to my second screen and arranging them there, I hit F5 to run/debug the application. This caused VS to crash and lose all IDE layout changes I had made so far. Reciprocally, changing the layout while debugging, then ending debug mode, results in the same error. I guess this must mean that the error arises when storing the IDE Layout for later retrieval. This behaviour is 100% reproducible.&lt;br /&gt;&lt;br /&gt;The problem seems to be a well-known one in the Microsoft Development department, but no one seems eager enough to fix it, as a list of unresolved issues at Connect show (&lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=376251"&gt;see here,&lt;/a&gt;&lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=419986"&gt;here,&lt;/a&gt;&lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=364335"&gt;here &lt;/a&gt;&lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=408302"&gt;or here&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;After Google did not provide me with a solution, I went on searching by myself, and the very first thing my Windows XP event log hinted me to was the failing component here,  msenv.dll. Depending on your System, there are multiple flavours of that file installed (e.g. for VS2005, VS2008, Office11,...).&lt;br /&gt;&lt;br /&gt;After some testing around (exchanging DLLs to ensure correct loading), I finally copied the version located at "/program files/commonfiles/microsoft shared/Help 9" to "$VS2008INSTALLDIR$/Common7/IDE", and finally can work properly again.&lt;br /&gt;&lt;br /&gt;I draw the conclusion that my msenv.dll has been compromised, but how, by what and why?&lt;br /&gt;&lt;br /&gt;What an ugly way of solving things...&lt;br /&gt;&lt;br /&gt;Please note that I have posted this article before, on my &lt;a href="http://edelmeier.blogspot.com"&gt;private blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-636538252777342586?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/636538252777342586/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/09/visual-studio-2008-und-multi-monitor.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/636538252777342586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/636538252777342586'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/09/visual-studio-2008-und-multi-monitor.html' title='Visual Studio 2008 and Multi-Monitor-Setups'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-643974624082932020</id><published>2009-07-17T00:30:00.000-07:00</published><updated>2011-04-09T15:35:12.273-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Concurrency'/><category scheme='http://www.blogger.com/atom/ns#' term='SynchronizationContext'/><category scheme='http://www.blogger.com/atom/ns#' term='NUnit'/><title type='text'>Performing Cross-Thread calls using the SynchronizationContext class</title><content type='html'>If you ever performed concurrent operations in .net, you might have stumbled across the problems that occur when you try to set/access the properties of an Object that's at home in another thread (e.g. when you try to set a Control state from a data loading BackgroundWorker). A very convenient way of bypassing this is the use of Control.InvokeRequired() and Control.Invoke(), which utilizes a delegate to send a message to the Control's thread.&lt;br /&gt;Anyway, this only works for Controls, and you might want just a little more than that.&lt;br /&gt;If so, you should look into SynchronizationContexts. It does pretty much the same thing, but works on non-GUI objects as well.&lt;br /&gt;&lt;br /&gt;The following sample is an approach you could use to keep track of all objects' SynchronizationContexts for being able to call DoSomething() on them later.&lt;br /&gt;Please make sure you add Exception handling wherever appropriate.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c-sharp"&gt;&lt;br /&gt;public class StateToggler&lt;br /&gt;{&lt;br /&gt;  private Dictionary&amp;lt;object, SynchronizationContext&amp;gt; synchronizationContexts =&lt;br /&gt;        new Dictionary&amp;lt;object, SynchronizationContext&amp;gt;();&lt;br /&gt;&lt;br /&gt;  public void RegisterObject(object obj)&lt;br /&gt;  {&lt;br /&gt;     this.synchronizationContexts.Add(obj, SynchronizationContext.Current);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;   public void DoSomethingToObject(object state)&lt;br /&gt;   {&lt;br /&gt;       if (!this.synchronizationContexts[state] == SynchronizationContext.Current)&lt;br /&gt;       {&lt;br /&gt;           this.synchronizationContexts[state].Send(DoSomethingToObject, state);&lt;br /&gt;       }&lt;br /&gt;       else&lt;br /&gt;       {&lt;br /&gt;           state.DoSomething();&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Testing this in NUnit got me stuck though. The Debugger should enter DoSomethingToObject() after the first call of Send(), but it just plain doesn't.&lt;br /&gt;I suppose NUnit's way of working (ThreadRunner) has some problems with this...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-643974624082932020?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/643974624082932020/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/07/performing-cross-thread-calls-using.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/643974624082932020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/643974624082932020'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/07/performing-cross-thread-calls-using.html' title='Performing Cross-Thread calls using the SynchronizationContext class'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-8507215189868749000</id><published>2009-07-02T02:03:00.000-07:00</published><updated>2011-04-09T16:14:52.334-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NUnit'/><title type='text'>IOException when deleting files in NUnit teardown methods</title><content type='html'>Now will you take a look at the following piece of code, dear?&lt;br /&gt;&lt;pre class="brush:c-sharp"&gt;&lt;br /&gt;[TestFixture]&lt;br /&gt;  public class FileSystemTests&lt;br /&gt;  {&lt;br /&gt;      private static readonly string testPath = "./Test";&lt;br /&gt;&lt;br /&gt;      [TestFixtureSetUp]&lt;br /&gt;      public void CreateTestSetEnvironment()&lt;br /&gt;      {&lt;br /&gt;          DirectoryInfo dir = new DirectoryInfo(testPath);&lt;br /&gt;          if (!dir.Exists)&lt;br /&gt;          {&lt;br /&gt;              dir.Create();&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      [TestFixtureTearDown]&lt;br /&gt;      public void DestroyTestSetEnvironment()&lt;br /&gt;      {&lt;br /&gt;          DirectoryInfo dir = new DirectoryInfo(testPath);&lt;br /&gt;          if (dir.Exists)&lt;br /&gt;          {&lt;br /&gt;              dir.Delete(true);&lt;br /&gt;          }    &lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      [TearDown]&lt;br /&gt;      public void DestroyTestEnvironment()&lt;br /&gt;      {&lt;br /&gt;          DirectoryInfo dir = new DirectoryInfo(testPath);&lt;br /&gt;          foreach ( FileInfo file in dir.GetFiles() )&lt;br /&gt;          {&lt;br /&gt;              file.Delete();&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      [Test]&lt;br /&gt;      public void Test()&lt;br /&gt;      {&lt;br /&gt;          FileInfo file = new FileInfo( string.Format( @"{0}\test.txt", testPath ));&lt;br /&gt;          file.Create();&lt;br /&gt;          Assert.IsTrue( file.Exists );&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;When I ran into IOExceptions in my unit tests, I extracted the matter in question into this neat little fixture. To cut this a little short, here's what happens:&lt;br /&gt;- Test() succeeds&lt;br /&gt;- TearDown runs into an IOException, saying test.txt is locked.&lt;br /&gt;The solution to this was found &lt;a href="http://stackoverflow.com/questions/374567/nunit-teardown-fails-what-process-is-accessing-my-files"&gt;here &lt;/a&gt;: &lt;br /&gt;After the test has run, the objects pointing to files have no scope anymore, but they still exist in memory. Hence, there's still references to the files and you can't delete / move them.&lt;br /&gt;&lt;br /&gt;What you have to do is remove the references by enforcing GC.Collect in the TearDowns:&lt;br /&gt;&lt;pre class="brush:c-sharp"&gt;&lt;br /&gt;public void DestroyTestSetEnvironment()&lt;br /&gt;{&lt;br /&gt;    GC.Collect();&lt;br /&gt;    DirectoryInfo dir = new DirectoryInfo(testPath);&lt;br /&gt;    if (dir.Exists)&lt;br /&gt;    {&lt;br /&gt;        dir.Delete(true);&lt;br /&gt;    }    &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[TearDown]&lt;br /&gt;public void DestroyTestEnvironment()&lt;br /&gt;{&lt;br /&gt;    GC.Collect();&lt;br /&gt;    DirectoryInfo dir = new DirectoryInfo(testPath);&lt;br /&gt;    foreach ( FileInfo file in dir.GetFiles() )&lt;br /&gt;    {&lt;br /&gt;        file.Delete();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-8507215189868749000?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/8507215189868749000/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/07/ioexception-when-deleting-files-in.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/8507215189868749000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/8507215189868749000'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/07/ioexception-when-deleting-files-in.html' title='IOException when deleting files in NUnit teardown methods'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-1408376274732551655</id><published>2009-06-15T23:31:00.000-07:00</published><updated>2011-04-09T16:15:44.970-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Prototype'/><title type='text'>A footnote on Prototype's Event.observe and mouseover / mouseout</title><content type='html'>Recently I worked on a website that had a CSS-based nested navigation and a form. The good old IE6 select overlay bug made it necessary to create an event handler that overlays the select box with an inline-frame (this is a common fix I have read about). To demonstrate the effect, I have set the form to invisible in this example.&lt;br /&gt;&lt;br /&gt;Mouseout looks like this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_u3tEM8rYFtE/SjiUO0WwdDI/AAAAAAAAAEE/2SqoMi37CFI/s1600-h/mouseout.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 112px;" src="http://2.bp.blogspot.com/_u3tEM8rYFtE/SjiUO0WwdDI/AAAAAAAAAEE/2SqoMi37CFI/s400/mouseout.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5348187539795637298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Mouseover then hides the form:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u3tEM8rYFtE/SjiUUL36_vI/AAAAAAAAAEM/rrAff4yoJ8Q/s1600-h/mouseover.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 121px;" src="http://1.bp.blogspot.com/_u3tEM8rYFtE/SjiUUL36_vI/AAAAAAAAAEM/rrAff4yoJ8Q/s400/mouseover.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5348187632008101618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;First I used Prototype's Event.observe():&lt;br /&gt;&lt;pre class="brush:javascript"&gt;&lt;br /&gt;Event.observe(window, 'load', function() &lt;br /&gt;{&lt;br /&gt;    if(navigator.appVersion.indexOf('MSIE 6.0') != -1){&lt;br /&gt;     Event.observe($('mainnavlist'), 'mouseover', function() {&lt;br /&gt;         $('form1').style.visibility = 'hidden';&lt;br /&gt;     });&lt;br /&gt; &lt;br /&gt;     Event.observe($('mainnavlist'), 'mouseout', function() {&lt;br /&gt;       $('form1').style.visibility = 'visible';&lt;br /&gt;     });&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Unsatisfyingly, this caused a lot of visual flickering.Eventually I found out that Event.observe interprets the event a bit different than javascript usually does, in detail : It is fired even if you enter a child element, so opening a parent menu and navigating my mouse over 5 child items fired 10 events (5 mouseovers when leaving children, 5 mouseouts when entering them).&lt;br /&gt;&lt;br /&gt;After changing the code to use standard JavaScript events straightened this out smoothly:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:javascript"&gt;&lt;br /&gt;Event.observe(window, 'load', function() &lt;br /&gt;{    &lt;br /&gt;    $('mainnavlist').onmouseover = function() &lt;br /&gt;    {&lt;br /&gt;        $('form1').style.visibility = 'hidden';&lt;br /&gt;    };&lt;br /&gt;&lt;br /&gt;    $('mainnavlist').onmouseout = function() &lt;br /&gt;    {&lt;br /&gt;        $('form1').style.visibility = 'visible';&lt;br /&gt;    };&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Capital!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-1408376274732551655?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/1408376274732551655/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/06/footnote-on-prototypes-eventobserve-and.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/1408376274732551655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/1408376274732551655'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/06/footnote-on-prototypes-eventobserve-and.html' title='A footnote on Prototype&apos;s Event.observe and mouseover / mouseout'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_u3tEM8rYFtE/SjiUO0WwdDI/AAAAAAAAAEE/2SqoMi37CFI/s72-c/mouseout.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-3745599649600159297</id><published>2009-06-15T23:30:00.000-07:00</published><updated>2009-06-15T23:31:22.182-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>A wonderful IE6 PNG-Fix for everyone</title><content type='html'>No words, just a single link:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://labs.unitinteractive.com/unitpngfix.php"&gt;http://labs.unitinteractive.com/unitpngfix.php&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-3745599649600159297?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/3745599649600159297/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/06/wonderful-ie6-png-fix-for-everyone.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/3745599649600159297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/3745599649600159297'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/06/wonderful-ie6-png-fix-for-everyone.html' title='A wonderful IE6 PNG-Fix for everyone'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-1214796410168764115</id><published>2009-05-12T04:33:00.000-07:00</published><updated>2011-04-09T16:18:34.334-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ToolStrip'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Forms'/><category scheme='http://www.blogger.com/atom/ns#' term='Controls'/><title type='text'>Hosting any control in a ToolStrip</title><content type='html'>When using ToolStrips, you soon discover that not many Classes of items can be added regularly.&lt;br /&gt;&lt;br /&gt;There is a simple way of adding any kind of Control to a ToolStrip by using the ToolStripControlHost class:&lt;br /&gt;&lt;pre class="brush:csharp"&gt;&lt;br /&gt;ToolStrip ts = new ToolStrip();&lt;br /&gt;ts.Items.Add( new ToolStripControlHost( new DateTimePicker()));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;However, there is NO design-time support for this. jfo has described how to add design-time support on his &lt;a href="http://blogs.msdn.com/jfoscoding/articles/477428.aspx"&gt;blog&lt;/a&gt;. I have tried this with a DateTimePicker Control and experienced strange Designer behaviour (The Designer show DTP as a permitted Item Type but when I select it, it disappears immediately.&lt;br /&gt;&lt;br /&gt;Another unexpected behaviour occurs in case of some third-party controls. If, for example, you add a Janus CalendarCombo to a ToolStripControlHost, the control vanishes and the ControlHost fails to show. Effectively, you've just lost a control :)&lt;br /&gt;&lt;br /&gt;After some research on the Janus Website, I found out that you have to set the hosting element's AutoSize Property to False.&lt;br /&gt;&lt;pre class="brush:csharp"&gt;&lt;br /&gt;ToolStrip ts = new ToolStrip();&lt;br /&gt;ToolStripControlHost tch = new ToolStripControlHost( new DateTimePicker())&lt;br /&gt;tch.AutoSize= false;&lt;br /&gt;ts.Items.Add( tch );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;My assumption is, that the component in question delivers its dimension as 0,0 to the ControlHost, so that the ControlHost automatically shrinks to 0,0 with it and is, albeit present, not visible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-1214796410168764115?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/1214796410168764115/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/05/hosting-any-control-in-toolstrip.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/1214796410168764115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/1214796410168764115'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/05/hosting-any-control-in-toolstrip.html' title='Hosting any control in a ToolStrip'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-3292426359275074005</id><published>2009-05-12T03:22:00.000-07:00</published><updated>2011-04-09T16:18:07.320-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DateTime'/><title type='text'>Get the Date-String (and only that) from a DateTime</title><content type='html'>Up to now, whenever I tried to get today's date in C#, I used DateTime.Today and&lt;br /&gt;started chopping away the time information using substrings.&lt;br /&gt;&lt;br /&gt;However, the DateTime type offers a method ToShortDateString() that does exactly what&lt;br /&gt;I did in three lines before PLUS it is hooked up with the thread's current culture.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;&lt;br /&gt;// old version, works for de-DE only&lt;br /&gt;DateTime.Now.ToString(new CultureInfo("de-DE")).Substring( 0, 10 );&lt;br /&gt;&lt;br /&gt;// new version, culture safe&lt;br /&gt;DateTime.Now.ToShortDateString();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;More useful DateTime stuff can be found &lt;a href="http://www.blackwasp.co.uk/CSharpDateTimeInformation.aspx"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-3292426359275074005?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/3292426359275074005/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/05/get-date-string-and-only-that-from.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/3292426359275074005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/3292426359275074005'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/05/get-date-string-and-only-that-from.html' title='Get the Date-String (and only that) from a DateTime'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-5917948790342979742</id><published>2009-05-11T01:16:00.000-07:00</published><updated>2011-04-09T16:17:42.666-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='properties'/><category scheme='http://www.blogger.com/atom/ns#' term='interfaces'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><title type='text'>Using distinct members of anonymous object-type instances</title><content type='html'>Sometimes it may happen that you have to set property values on objects depending on whether they exist or not. I though this was feasible using interfaces, but objects can only be checked against contracted interfaces (i.e. such interfaces that occur in the object's class hierarchy), so this is no good here.&lt;br /&gt;&lt;br /&gt;An easy way to achieve this is the type.GetProperty() and type.GetProperty().SetValue() methods, as explained below.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;&lt;br /&gt;PropertyInfo pi = obj.GetType().GetProperty("Enabled");&lt;br /&gt;bool enablable = (pi != null &amp;&amp; pi.PropertyType.Equals(typeof(bool)));&lt;br /&gt;&lt;br /&gt;if (enablable)&lt;br /&gt;{&lt;br /&gt;   obj.GetType().GetProperty( "Enabled" ).SetValue( obj, true, null );&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The very same thing can also be done with events, methods, fields, nested classes etc. See the following example for an event handler implementation: &lt;br /&gt;&lt;pre class="brush:csharp"&gt;&lt;br /&gt;EventInfo ei = obj.GetType().GetEvent("Paint");&lt;br /&gt;bool paintable = (ei != null);&lt;br /&gt;&lt;br /&gt;if (paintable)&lt;br /&gt;{&lt;br /&gt;   PaintEventHandler pe = _Paint;&lt;br /&gt;   obj.GetType().GetEvent("Paint").AddEventHandler(obj, pe);&lt;br /&gt;   obj.GetType().GetEvent("Paint").RemoveEventHandler(obj, pe);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-5917948790342979742?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/5917948790342979742/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/05/setting-distinct-values-on-anonymous.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/5917948790342979742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/5917948790342979742'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/05/setting-distinct-values-on-anonymous.html' title='Using distinct members of anonymous object-type instances'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-1506390324537231428</id><published>2009-05-01T11:48:00.001-07:00</published><updated>2009-11-05T23:04:45.811-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MCTS'/><category scheme='http://www.blogger.com/atom/ns#' term='70-505'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Microsoft Exam 70-505 Self-Paced Training Kit</title><content type='html'>To complete my MCTS, I currently study for 70-505.&lt;br /&gt;&lt;br /&gt;As I said about 70-536, the SPT is the best way to learn. Here comes the but:&lt;br /&gt;The mock exam is so faulty that you have to be very careful using it.I will update this post once Microsoft has put up a knowledge base site for this book and my errors have been submitted.&lt;br /&gt;&lt;br /&gt;UPDATE :&lt;a href="http://support.microsoft.com/kb/971344"&gt; And here it is!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Edit : After having taken the exam yesterday, I can tell for sure that using only the Self Paced Training Kit may result in a somewhat close call. Sure it helped me get through, but not as good as 70-536 (Score : 828). I think the Microsoft Official Classroom Course may have been of some use, eventually...Anyway, now I have the right to officially use these credentials: &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u3tEM8rYFtE/SgEvlOKrRvI/AAAAAAAAAD0/1r8d0mqGP5g/s1600-h/MCTS.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 110px; height: 80px;" src="http://3.bp.blogspot.com/_u3tEM8rYFtE/SgEvlOKrRvI/AAAAAAAAAD0/1r8d0mqGP5g/s400/MCTS.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5332595750287918834" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u3tEM8rYFtE/SgEvlKjNOWI/AAAAAAAAADs/CdD7pHeYNgg/s1600-h/MCP.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 160px; height: 80px;" src="http://1.bp.blogspot.com/_u3tEM8rYFtE/SgEvlKjNOWI/AAAAAAAAADs/CdD7pHeYNgg/s400/MCP.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5332595749317065058" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If that ain't hot...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-1506390324537231428?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/1506390324537231428/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/05/microsoft-exam-70-505-self-paced.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/1506390324537231428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/1506390324537231428'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/05/microsoft-exam-70-505-self-paced.html' title='Microsoft Exam 70-505 Self-Paced Training Kit'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_u3tEM8rYFtE/SgEvlOKrRvI/AAAAAAAAAD0/1r8d0mqGP5g/s72-c/MCTS.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-4398209233254335852</id><published>2009-04-08T03:59:00.000-07:00</published><updated>2009-04-21T15:21:27.698-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MCTS'/><category scheme='http://www.blogger.com/atom/ns#' term='70-536'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Preparing for and passing MCTS exam 70-536</title><content type='html'>Today, I passed my Microsoft 70-536 exam. More or less successful, I scored 894 (700 being the passing score) in a bit less than 90 minutes.&lt;br /&gt;After reading how much has already been said about this exam, I can summarize:&lt;br /&gt;&lt;br /&gt;- It does cover a very vast set of topics (the whole .NET-Framework), but only has a few questions for each.&lt;br /&gt;- The exam itself is rather short, containing no more than 40 questions. If you are getting many easy questions, this is an advantage. Otherwise...&lt;br /&gt;- Only really well-aimed preparation will make you fit for this. Just like a driver's license test, really.&lt;br /&gt;&lt;br /&gt;Eventually I have to admit that - although I have learned a lot during the preparation phase for this exam - I still wouldn't voluntarily mess around with many of the aspects it covered (like Security Zones or CAS-Policies). I just know they exist and that's about it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Preparation tips&lt;/span&gt;&lt;br /&gt;Exam preparation seems to be one of the many things, people are willing to spend money on. Many websites offer PDF-Files or Exam-Sets for the Visual Certexam Suite, some boards discuss the topics and last but not least Microsoft themselves offer preparation material.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;What I used to prepare&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;70-536 - Self Paced Training Kit &lt;/span&gt;&lt;br /&gt;A definite MUST HAVE: the companion CD is worth all the money. The Exam Prep application teaches you how to read the solutions and make out the important bits and furthermore delivers memorable explanations to most questions. Although it has a pool of 200 questions only (I think I've read that the exams are generated from a pool of about 300), this is the big catch. Note that I found two errata in the solutions, which i will post here later today.&lt;br /&gt;&lt;br /&gt;compare the yellow solution to the one below*&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_u3tEM8rYFtE/Sd0emXcSoCI/AAAAAAAAADE/aRL-IRDePa0/s1600-h/errata_1.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 392px; height: 400px;" src="http://3.bp.blogspot.com/_u3tEM8rYFtE/Sd0emXcSoCI/AAAAAAAAADE/aRL-IRDePa0/s400/errata_1.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5322443979098333218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;compare the last two solutions. unfortunately my screenshot is cut off there*&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_u3tEM8rYFtE/Sd0e3p5n3SI/AAAAAAAAADM/v9kVGuks8Ik/s1600-h/errata_2.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 370px; height: 400px;" src="http://1.bp.blogspot.com/_u3tEM8rYFtE/Sd0e3p5n3SI/AAAAAAAAADM/v9kVGuks8Ik/s400/errata_2.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5322444276110974242" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;In both cases, I have compared the solutions using Arraxis merge. By now, the error reports i have submitted have been &lt;a href="http://support.microsoft.com/kb/959409/en"&gt;verified&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The book itself serves no other purpose than the exam preparation and is well written. You should use it to cover up your weak spots, but don't expect to acquire the necessary knowledge by merely reading the book. Human memory tends to be rather fleeting, and it is very probable that your brain swaps out stuff you read 2 weeks ago to make room for new stuff.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;actualtests.com Certification Preparation (PDF File)&lt;/span&gt;&lt;br /&gt;A very recent one, from January if i recall correctly. Even though I guess the Visual Certexam-Set would have been a bit more valuable, I wouldn't buy it again. If you get it for free, though, it's a good addendum, since it prepares you in a very concise way.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Microsoft Official Course MOC-2957&lt;/span&gt;&lt;br /&gt;This classroom course covers all the topics that are part of the exam, but goes no further than skin-deep for most of them. For productive use, this course is absolutely worthless. For the exam it's not too bad, since it gives you a rough overview of what exists in the Framework and how it is most commonly used.&lt;br /&gt;Since this costs quite a penny, I wouldn't recommend it. Nevertheless, if you want to gain this surfacial overview yourself, you will have to do quite a lot of reading, since nothing comes in the pre-digested form of the course. And also, the value of the course depends on your trainer. If he/she merely reads the book to you, it is rather unvaluable (my trainer was &lt;span style="font-style:italic;"&gt;not&lt;/span&gt; a developer, so he knew his lecture, but not the pros and cons of all the tiny bits in "real life". Reminds of the Pratchett Quote "It would seem that you have no useful skill or talent whatsoever. Have you thought of going into teaching?").&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Real-Life Programming experience&lt;/span&gt;&lt;br /&gt;This probably beats any of the other, since you don't have to learn what you already know. It also helps you understand what you need the stuff you talk about for and get a feeling for it. It's basically the "getting your hands dirty" of our profession (which - considering the stuff that lives in many a keyboard - has a very literal meaning).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Summary&lt;/span&gt;&lt;br /&gt;Since this test asks you many things in a very concise way, it is advisable to be well prepared. This is not a test you praticipate in and pass whenever you feel like it. Buy the Microsoft-Kit and lock yourself up for a weekend or two, until you pass the mock tests with &gt; 90% on a regular basis. Spice up your knowledge from other sources (actualtests.com, other books), if you dont. Finally register for 70-536 (at prometric.com) and get it over with.&lt;br /&gt;&lt;br /&gt;* = &lt;small&gt;Copyright for the test contents resides with Microsoft, don't reproduce without explicit permission.&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-4398209233254335852?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/4398209233254335852/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/04/preparing-for-and-passing-mcts-exam-70.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/4398209233254335852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/4398209233254335852'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/04/preparing-for-and-passing-mcts-exam-70.html' title='Preparing for and passing MCTS exam 70-536'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_u3tEM8rYFtE/Sd0emXcSoCI/AAAAAAAAADE/aRL-IRDePa0/s72-c/errata_1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-2550090166341788881</id><published>2009-04-03T01:43:00.000-07:00</published><updated>2009-04-05T03:04:57.230-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>NHibernate FAQ</title><content type='html'>If you're in need of NHibernate braindumps, check out &lt;a href="http://blogs.hibernatingrhinos.com/nhibernate/Default.aspx"&gt;hibernatingrhinos&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-2550090166341788881?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/2550090166341788881/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/04/nhibernate-faq.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/2550090166341788881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/2550090166341788881'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/04/nhibernate-faq.html' title='NHibernate FAQ'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-8672812605210080882</id><published>2009-04-01T04:06:00.000-07:00</published><updated>2009-04-20T04:53:40.238-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='icons'/><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>Icon Search Engines</title><content type='html'>If you are in need of icons to spice up your applications, you might want to check out those links : &lt;br /&gt;&lt;br /&gt;&gt; &lt;a href="http://www.iconfinder.net"&gt;iconfinder.net&lt;/a&gt;&lt;br /&gt;&gt; &lt;a href="http://www.iconlet.com"&gt;iconlet.com&lt;/a&gt;&lt;br /&gt;&gt; &lt;a href="http://www.iconarchive.com"&gt;iconarchive.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Most of the provided icons are published under either a GPL or a LGPL license.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-8672812605210080882?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/8672812605210080882/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/04/icon-search-engines.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/8672812605210080882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/8672812605210080882'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/04/icon-search-engines.html' title='Icon Search Engines'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7732705687679727257.post-3377052365189513206</id><published>2009-03-31T23:49:00.001-07:00</published><updated>2011-04-09T16:19:51.471-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>How To : post code on the blog</title><content type='html'>Here's a short summary of how to post code on this blog:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;&lt;br /&gt;namespace net-fx.blogspot.com&lt;br /&gt;{&lt;br /&gt;  public class HelloWorld&lt;br /&gt;  {&lt;br /&gt;    public HelloWorld()&lt;br /&gt;    {&lt;br /&gt;      &lt;br /&gt;    } &lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7732705687679727257-3377052365189513206?l=net-fx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://net-fx.blogspot.com/feeds/3377052365189513206/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://net-fx.blogspot.com/2009/03/how-to-post-code-on-blog.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/3377052365189513206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7732705687679727257/posts/default/3377052365189513206'/><link rel='alternate' type='text/html' href='http://net-fx.blogspot.com/2009/03/how-to-post-code-on-blog.html' title='How To : post code on the blog'/><author><name>sebi</name><uri>http://www.blogger.com/profile/13512296642247792852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/-cnfZrxoP6a8/Tht7aPf-PXI/AAAAAAAAAHs/zt_zc-s8sR0/s220/profile.jpg'/></author><thr:total>0</thr:total></entry></feed>
