<?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-7913321130460922687</id><updated>2011-04-21T20:42:19.188-04:00</updated><category term='Shortcuts'/><category term='Outlook'/><title type='text'>The Famous Ham Sandwich</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7913321130460922687.post-3343895120457988841</id><published>2009-03-09T14:17:00.001-04:00</published><updated>2009-03-09T14:17:13.434-04:00</updated><title type='text'>Economics of Publishing</title><content type='html'>&lt;p&gt;&lt;a href="http://twit.tv/184"&gt;This Week In Tech&lt;/a&gt;, episode 184, has a very interesting discussion on what’s going on with content distribution. In particular, the fate of newspapers, the impact of the Kindle and what Amazon’s plans might be, and the economics of book publishing.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7913321130460922687-3343895120457988841?l=famoushamsandwich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/3343895120457988841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7913321130460922687&amp;postID=3343895120457988841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/3343895120457988841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/3343895120457988841'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/2009/03/economics-of-publishing.html' title='Economics of Publishing'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7913321130460922687.post-6168131383197119260</id><published>2009-02-18T10:45:00.001-05:00</published><updated>2009-02-18T10:51:04.413-05:00</updated><title type='text'>Using External .NET Config Files in a Windows Service</title><content type='html'>&lt;p&gt;The &lt;a class="zem_slink" title=".NET Framework" href="http://www.microsoft.com/net/" rel="homepage"&gt;.NET platform&lt;/a&gt; provides an easy way to configure your .NET application using an xml configuration file. At design time, the file is named “App.Config”. When you build your project (console application, &lt;a href="http://en.wikipedia.org/wiki/Windows_service"&gt;Windows service&lt;/a&gt;, etc.), the file is renamed to the form [ProgramName].exe.config. The file is deployed in the same directory as the executable. At runtime, the file is automatically picked up from the current directory by the &lt;a href="http://msdn.microsoft.com/en-us/library/system.configuration.configuration.aspx"&gt;Configuration&lt;/a&gt; class.&lt;/p&gt;  &lt;p&gt;The single App.config file works pretty well for simple stuff, but at some point it gets unwieldy and you want to separate the configuration into separate files. For example. &lt;a href="http://logging.apache.org/log4net/index.html"&gt;log4net&lt;/a&gt; and &lt;a href="http://www.springframework.net/"&gt;Spring.NET&lt;/a&gt; both provide mechanisms for using external config files. In a normal deployment scenario (e.g. a console application), it just works.&lt;/p&gt;  &lt;p&gt;Often, trouble arises when combining these external configuration files with a Windows service deployment. The built-in configuration classes seem to locate the main config file well enough, but the external files cannot be located. They are attempted to be loaded from %SystemRoot%\System32. Why? This is the location of the &lt;strong&gt;net&lt;/strong&gt; command, which is the host process for the service. I suspect the implementers of the external configuration files refer to the CurrentDirectory of the process, instead of the file location of the executable module.&lt;/p&gt;  &lt;p&gt;You can fix the problem by setting the CurrentDirectory of the process:&lt;/p&gt; &lt;!--&lt;br /&gt;{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Envy Code R VS;}}{\colortbl;??\red0\green0\blue0;\red227\green213\blue193;\red64\green0\blue128;\red1\green0\blue1;\red46\green83\blue209;\red48\green95\blue182;\red37\green146\blue65;\red163\green21\blue21;}??\fs24 \cb2\highlight2                 \cf3 var\cf0  \cf4 process\cf0  \cf5 =\cf0  \cf6 Process\cf5 .\cf4 GetCurrentProcess\cf0 ();\par ??                \cf3 if\cf0  (\cf4 process\cf5 .\cf4 MainModule\cf0  \cf5 !=\cf0  \cf3 null\cf0 )\par ??                \{\par ??                    \cf3 string\cf0  \cf4 newFilePath\cf0  \cf5 =\cf0  \cf4 process\cf5 .\cf4 MainModule\cf5 .\cf4 FileName\cf5 .\cf4 Substring\cf0 (\cf7 0\cf0 ,\par ??                        \cf4 process\cf5 .\cf4 MainModule\cf5 .\cf4 FileName\cf5 .\cf4 LastIndexOf\cf0 (\cf8 @"\\"\cf0 ));\par ??                    \cf6 Directory\cf5 .\cf4 SetCurrentDirectory\cf0 (\cf4 newFilePath\cf0 );\par ??                \}}&lt;br /&gt;--&gt; &lt;div style="font-family: Envy Code R VS; font-size: 9pt; color: black; background: #e3d5c1;"&gt;&lt;p style="margin: 0px; line-height:1.0em;"&gt;&lt;span style="color: #a68a4a; background: #edcfa3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/span&gt;&amp;nbsp;&lt;span style="color: #400080;"&gt;var&lt;/span&gt; &lt;span style="color: #010001;"&gt;process&lt;/span&gt; &lt;span style="color: #2e53d1;"&gt;=&lt;/span&gt; &lt;span style="color: #305fb6;"&gt;Process&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;.&lt;/span&gt;&lt;span style="color: #010001;"&gt;GetCurrentProcess&lt;/span&gt;();&lt;/p&gt;&lt;p style="margin: 0px; line-height:1.0em;"&gt;&lt;span style="color: #a68a4a; background: #edcfa3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/span&gt;&amp;nbsp;&lt;span style="color: #400080;"&gt;if&lt;/span&gt; (&lt;span style="color: #010001;"&gt;process&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;.&lt;/span&gt;&lt;span style="color: #010001;"&gt;MainModule&lt;/span&gt; &lt;span style="color: #2e53d1;"&gt;!=&lt;/span&gt; &lt;span style="color: #400080;"&gt;null&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin: 0px; line-height:1.0em;"&gt;&lt;span style="color: #a68a4a; background: #edcfa3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/span&gt;&amp;nbsp;{&lt;/p&gt;&lt;p style="margin: 0px; line-height:1.0em;"&gt;&lt;span style="color: #a68a4a; background: #edcfa3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #400080;"&gt;string&lt;/span&gt; &lt;span style="color: #010001;"&gt;newFilePath&lt;/span&gt; &lt;span style="color: #2e53d1;"&gt;=&lt;/span&gt; &lt;span style="color: #010001;"&gt;process&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;.&lt;/span&gt;&lt;span style="color: #010001;"&gt;MainModule&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;.&lt;/span&gt;&lt;span style="color: #010001;"&gt;FileName&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;.&lt;/span&gt;&lt;span style="color: #010001;"&gt;Substring&lt;/span&gt;(&lt;span style="color: #259241;"&gt;0&lt;/span&gt;,&lt;/p&gt;&lt;p style="margin: 0px; line-height:1.0em;"&gt;&lt;span style="color: #a68a4a; background: #edcfa3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001;"&gt;process&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;.&lt;/span&gt;&lt;span style="color: #010001;"&gt;MainModule&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;.&lt;/span&gt;&lt;span style="color: #010001;"&gt;FileName&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;.&lt;/span&gt;&lt;span style="color: #010001;"&gt;LastIndexOf&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;@"\"&lt;/span&gt;));&lt;/p&gt;&lt;p style="margin: 0px; line-height:1.0em;"&gt;&lt;span style="color: #a68a4a; background: #edcfa3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #305fb6;"&gt;Directory&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;.&lt;/span&gt;&lt;span style="color: #010001;"&gt;SetCurrentDirectory&lt;/span&gt;(&lt;span style="color: #010001;"&gt;newFilePath&lt;/span&gt;);&lt;/p&gt;&lt;p style="margin: 0px; line-height:1.0em;"&gt;&lt;span style="color: #a68a4a; background: #edcfa3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/span&gt;&amp;nbsp;}&lt;/p&gt;&lt;/div&gt;  &lt;p&gt;If you like, you can put this code into the OnStart method of your service. But you might need the info before that. In that case, put the code as early as possible.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Credit goes to Jose Joye, who &lt;a href="http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic29111.aspx"&gt;posted this idea&lt;/a&gt; back in 2005.&lt;/em&gt;&lt;/p&gt;  &lt;div class="zemanta-pixie" style="margin-top: 10px; height: 15px"&gt;&lt;a class="zemanta-pixie-a" title="Zemified by Zemanta" href="http://reblog.zemanta.com/zemified/7c86abfd-7fc3-44ca-9cf6-97e0eb125e79/"&gt;&lt;img class="zemanta-pixie-img" style="border-right: medium none; border-top: medium none; float: right; border-left: medium none; border-bottom: medium none" alt="Reblog this post [with Zemanta]" src="http://img.zemanta.com/reblog_e.png?x-id=7c86abfd-7fc3-44ca-9cf6-97e0eb125e79" /&gt;&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7913321130460922687-6168131383197119260?l=famoushamsandwich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/6168131383197119260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7913321130460922687&amp;postID=6168131383197119260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/6168131383197119260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/6168131383197119260'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/2009/02/using-external-net-config-files-in.html' title='Using External .NET Config Files in a Windows Service'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7913321130460922687.post-1527613195100614993</id><published>2009-01-02T14:24:00.010-05:00</published><updated>2009-01-02T15:58:30.835-05:00</updated><title type='text'>Basic Log4net Configuration</title><content type='html'>&lt;div&gt;&lt;div class="zemanta-img" style="display: block; float: right; margin: 1em; width: 212px;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Image:Skid5281.jpg"&gt;&lt;img alt="Logging" height="152" src="http://upload.wikimedia.org/wikipedia/en/thumb/c/ca/Skid5281.jpg/202px-Skid5281.jpg" style="border: medium none; display: block;" width="202" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;div class="zemanta-img-attribution" style="font-size: 0.8em;"&gt;Image via &lt;a href="http://en.wikipedia.org/wiki/Image:Skid5281.jpg"&gt;Wikipedia&lt;/a&gt;&lt;/div&gt;&lt;div class="zemanta-img-attribution" style="font-size: 0.8em;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;i&gt;(This post is mostly a reminder to myself on how to do this.&amp;nbsp; I have to rediscover it whenever I create a new app.&amp;nbsp; Maybe it will be useful for you too.)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Most of the time, when I want to setup logging with &lt;a class="zem_slink" href="http://logging.apache.org/log4net" rel="homepage" title="Apache Log4net"&gt;log4net&lt;/a&gt;, I want to put the log4net configuration into the application config file.&amp;nbsp; This is what I’ll be showing here.&amp;nbsp; So the first step is to put the necessary info into the App.config file:&lt;/div&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(227, 213, 193) none repeat scroll 0% 0%; color: black; font-family: envy code r vs; font-size: 12pt;"&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #400080;"&gt;configuration&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #400080;"&gt;configSections&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #400080;"&gt;section&lt;/span&gt;&lt;span style="color: #305fb6;"&gt; name=&lt;/span&gt;&lt;span style="color: #259241;"&gt;"log4net"&lt;/span&gt;&lt;span style="color: #305fb6;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type=&lt;/span&gt;&lt;span style="color: #259241;"&gt;"log4net.Config.Log4NetConfigurationSectionHandler, log4net"&lt;/span&gt;&lt;span style="color: #305fb6;"&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #400080;"&gt;configSections&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #400080;"&gt;appSettings&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #400080;"&gt;add&lt;/span&gt;&lt;span style="color: #305fb6;"&gt; key=&lt;/span&gt;&lt;span style="color: #259241;"&gt;"log4net.Internal.Debug"&lt;/span&gt;&lt;span style="color: #305fb6;"&gt; value=&lt;/span&gt;&lt;span style="color: #259241;"&gt;"false"&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #400080;"&gt;appSettings&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #400080;"&gt;log4net&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #400080;"&gt;appender&lt;/span&gt;&lt;span style="color: #305fb6;"&gt; name=&lt;/span&gt;&lt;span style="color: #259241;"&gt;"DefaultAppender"&lt;/span&gt;&lt;span style="color: #305fb6;"&gt; type=&lt;/span&gt;&lt;span style="color: #259241;"&gt;"log4net.Appender.ConsoleAppender"&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 12&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #400080;"&gt;layout&lt;/span&gt;&lt;span style="color: #305fb6;"&gt; type=&lt;/span&gt;&lt;span style="color: #259241;"&gt;"log4net.Layout.PatternLayout"&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 13&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #400080;"&gt;conversionPattern&lt;/span&gt;&lt;span style="color: #305fb6;"&gt; value=&lt;/span&gt;&lt;span style="color: #259241;"&gt;"%message%newline"&lt;/span&gt;&lt;span style="color: #305fb6;"&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 14&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #400080;"&gt;layout&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 15&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #400080;"&gt;appender&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 16&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #400080;"&gt;root&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 17&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #400080;"&gt;level&lt;/span&gt;&lt;span style="color: #305fb6;"&gt; value=&lt;/span&gt;&lt;span style="color: #259241;"&gt;"DEBUG"&lt;/span&gt;&lt;span style="color: #305fb6;"&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 18&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #400080;"&gt;appender-ref&lt;/span&gt;&lt;span style="color: #305fb6;"&gt; ref=&lt;/span&gt;&lt;span style="color: #259241;"&gt;"DefaultAppender"&lt;/span&gt;&lt;span style="color: #305fb6;"&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 19&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #400080;"&gt;root&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 20&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #400080;"&gt;log4net&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="color: #305fb6;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 21&lt;/span&gt;&amp;nbsp;&lt;span style="color: #305fb6;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #400080;"&gt;configuration&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;&amp;gt;&lt;/span&gt;    &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;A few things to note here:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;In the appSettings section is a key-value pair that when set to true will output log4net internal debug information.&amp;nbsp; This can be useful if something isn’t working right and you can’t figure out why.&amp;nbsp; I find that using &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx"&gt;dbgview&lt;/a&gt; is the best way to monitor this information. &lt;/li&gt;&lt;li&gt;In this example, I’m using the ConsoleAppender, but you could use anything.&amp;nbsp; I stripped out most of the pattern information since I don’t want things like threadId on the console output window. &lt;/li&gt;&lt;li&gt;The log4net assembly must be reachable by your application, which usually means having it either in the local directory or in the GAC. &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;The other thing you need to do is to mark the assembly so that log4net knows where to pick up the configuration settings.&amp;nbsp; Add this line to your AssemblyInfo.cs file:&lt;br /&gt;&lt;div style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(227, 213, 193) none repeat scroll 0% 0%; color: black; font-family: envy code r vs; font-size: 12pt;"&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 37&lt;/span&gt; [&lt;span style="color: #400080;"&gt;assembly&lt;/span&gt;: &lt;span style="color: #010001;"&gt;log4net&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;.&lt;/span&gt;&lt;span style="color: #010001;"&gt;Config&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;.&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;XmlConfigurator&lt;/span&gt;(&lt;span style="color: #010001;"&gt;Watch&lt;/span&gt; &lt;span style="color: #2e53d1;"&gt;=&lt;/span&gt; &lt;span style="color: #400080;"&gt;true&lt;/span&gt;)]&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;You can find detailed configuration instructions in the &lt;a href="http://logging.apache.org/log4net/release/manual/configuration.html"&gt;log4net manual&lt;/a&gt;.&lt;br /&gt;&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/576a822f-526e-4159-ae81-f78510b023c0/" title="Zemified by Zemanta"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=576a822f-526e-4159-ae81-f78510b023c0" style="border: medium none; float: right;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7913321130460922687-1527613195100614993?l=famoushamsandwich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/1527613195100614993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7913321130460922687&amp;postID=1527613195100614993' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/1527613195100614993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/1527613195100614993'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/2009/01/basic-log4net-configuration.html' title='Basic Log4net Configuration'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7913321130460922687.post-4180914096772176586</id><published>2008-12-17T10:48:00.001-05:00</published><updated>2008-12-17T10:48:58.570-05:00</updated><title type='text'>BabySmash and Oxite: A Tale of Two Projects</title><content type='html'>&lt;p&gt;&lt;a href="http://www.hanselman.com/blog/ASPNETMVCSamplesOxiteAndCommunity.aspx"&gt;Scott Hanselman&lt;/a&gt; makes an interesting comparison between &lt;a href="http://www.hanselman.com/blog/IntroducingBabySmashAWPFExperiment.aspx"&gt;BabySmash&lt;/a&gt; and &lt;a href="http://www.codeplex.com/oxite"&gt;Oxite&lt;/a&gt;.&amp;#160; BabySmash was pretty warmly received (the odd &amp;quot;Microsoft is teh suck&amp;quot; comment notwithstanding) and accepted as a starting point, while many seem to have reacted to Oxite with hostility.&amp;#160; Why? &lt;/p&gt;  &lt;p&gt;I suspect this has to do with the Microsoft name and expectations.&amp;#160; BabySmash started on Scott’s personal blog and didn't have any appearance of being a Microsoft endeavor.&amp;#160; He intentionally set expectations very low.&amp;#160; People cut it (and him) a lot of slack and took it in the spirit in which it was intended. &lt;/p&gt;  &lt;p&gt;On the other hand, Oxite is sponsored by Microsoft so the expectations are higher, even for a sample project.&amp;#160; I suspect many people don't see it as a project with individual names on it (even though it is - their names are right there for everyone to see).&amp;#160;&amp;#160; Likely they see it as something that got thrown over the wall by a big corporation, and so are less good-natured about their criticism.&amp;#160; Of course, there's no good reason for being uncivil, but it may explain the prevalent tone.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7913321130460922687-4180914096772176586?l=famoushamsandwich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/4180914096772176586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7913321130460922687&amp;postID=4180914096772176586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/4180914096772176586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/4180914096772176586'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/2008/12/babysmash-and-oxite-tale-of-two.html' title='BabySmash and Oxite: A Tale of Two Projects'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7913321130460922687.post-8236561784103495985</id><published>2008-10-16T14:04:00.006-04:00</published><updated>2008-11-07T09:22:05.752-05:00</updated><title type='text'>Generic foreach Loop Automatically Uses Explicit Cast</title><content type='html'>I ran into this curiosity today:&lt;br /&gt;&lt;br /&gt;&lt;div style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(227, 213, 193) none repeat scroll 0% 0%; color: black; font-family: envy code r vs; font-size: 12pt;"&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #400080;"&gt;public&lt;/span&gt; &lt;span style="color: #400080;"&gt;interface&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IFoo&lt;/span&gt; {}&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #400080;"&gt;public&lt;/span&gt; &lt;span style="color: #400080;"&gt;class&lt;/span&gt; &lt;span style="color: #305fb6;"&gt;Foo&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;IFoo&lt;/span&gt; {}&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #400080;"&gt;public&lt;/span&gt; &lt;span style="color: #400080;"&gt;interface&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IBar&lt;/span&gt; {}&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #400080;"&gt;public&lt;/span&gt; &lt;span style="color: #400080;"&gt;class&lt;/span&gt; &lt;span style="color: #305fb6;"&gt;Bar&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;IBar&lt;/span&gt; {}&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #400080;"&gt;internal&lt;/span&gt; &lt;span style="color: #400080;"&gt;class&lt;/span&gt; &lt;span style="color: #305fb6;"&gt;Foo2&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #400080;"&gt;public&lt;/span&gt; &lt;span style="color: #400080;"&gt;void&lt;/span&gt; &lt;span style="color: #010001;"&gt;X&lt;/span&gt;()&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;IList&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;Foo&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #010001;"&gt;foos&lt;/span&gt; &lt;span style="color: #2e53d1;"&gt;=&lt;/span&gt; &lt;span style="color: #400080;"&gt;new&lt;/span&gt; &lt;span style="color: #305fb6;"&gt;List&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;Foo&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;&amp;gt;&lt;/span&gt;();&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;IList&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IFoo&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #010001;"&gt;ifoos&lt;/span&gt; &lt;span style="color: #2e53d1;"&gt;=&lt;/span&gt; &lt;span style="color: #400080;"&gt;new&lt;/span&gt; &lt;span style="color: #305fb6;"&gt;List&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IFoo&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;&amp;gt;&lt;/span&gt;();&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;IList&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IBar&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #010001;"&gt;ibars&lt;/span&gt; &lt;span style="color: #2e53d1;"&gt;=&lt;/span&gt; &lt;span style="color: #400080;"&gt;new&lt;/span&gt; &lt;span style="color: #305fb6;"&gt;List&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IBar&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;&amp;gt;&lt;/span&gt;();&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;IList&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;Bar&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #010001;"&gt;bars&lt;/span&gt; &lt;span style="color: #2e53d1;"&gt;=&lt;/span&gt; &lt;span style="color: #400080;"&gt;new&lt;/span&gt; &lt;span style="color: #305fb6;"&gt;List&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #305fb6;"&gt;Bar&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;&amp;gt;&lt;/span&gt;();&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 18&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #400080;"&gt;foreach&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;IBar&lt;/span&gt; &lt;span style="color: #010001;"&gt;value&lt;/span&gt; &lt;span style="color: #400080;"&gt;in&lt;/span&gt; &lt;span style="color: #010001;"&gt;foos&lt;/span&gt;)&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001;"&gt;ibars&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;.&lt;/span&gt;&lt;span style="color: #010001;"&gt;Add&lt;/span&gt;(&lt;span style="color: #010001;"&gt;value&lt;/span&gt;);&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 23&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #400080;"&gt;foreach&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;IBar&lt;/span&gt; &lt;span style="color: #010001;"&gt;value&lt;/span&gt; &lt;span style="color: #400080;"&gt;in&lt;/span&gt; &lt;span style="color: #010001;"&gt;ifoos&lt;/span&gt;)&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001;"&gt;ibars&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;.&lt;/span&gt;&lt;span style="color: #010001;"&gt;Add&lt;/span&gt;(&lt;span style="color: #010001;"&gt;value&lt;/span&gt;);&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 28&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #400080;"&gt;foreach&lt;/span&gt; (&lt;span style="color: #305fb6;"&gt;Bar&lt;/span&gt; &lt;span style="color: #010001;"&gt;value&lt;/span&gt; &lt;span style="color: #400080;"&gt;in&lt;/span&gt; &lt;span style="color: #010001;"&gt;ifoos&lt;/span&gt;)&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001;"&gt;ibars&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;.&lt;/span&gt;&lt;span style="color: #010001;"&gt;Add&lt;/span&gt;(&lt;span style="color: #010001;"&gt;value&lt;/span&gt;);&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 32&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #010001;"&gt;bars&lt;/span&gt;&lt;span style="color: #2e53d1;"&gt;.&lt;/span&gt;&lt;span style="color: #010001;"&gt;Add&lt;/span&gt;(&lt;span style="color: #010001;"&gt;value&lt;/span&gt;);&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 33&lt;/span&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 34&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;span style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(237, 207, 163) none repeat scroll 0% 0%; color: #a68a4a;"&gt;&amp;nbsp;&amp;nbsp; 35&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;In each case, the compiler is using an explicit cast to convert the object.&amp;nbsp; Per the &lt;a href="http://msdn.microsoft.com/en-us/library/aa664754%28VS.71%29.aspx"&gt;C# Language Specification&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;The type of the &lt;/i&gt;&lt;i&gt;expression of a &lt;code&gt;foreach&lt;/code&gt; statement must be a collection type (as defined below), and an explicit conversion &lt;a href="http://msdn.microsoft.com/en-us/library/aa691288%28VS.71%29.aspx"&gt;(Section 6.2)&lt;/a&gt; must exist from the element type of the collection to the type of the iteration variable.&lt;/i&gt;&lt;/blockquote&gt;In each of these cases, an explicit conversion does exist, and so it compiles.&amp;nbsp; Of course, at runtime an InvalidCastException is thrown because it’s not valid.&amp;nbsp; So much for all that generic type safety happiness.&lt;br /&gt;Apparently, this question has been &lt;a href="http://blogs.msdn.com/ericlippert/archive/2007/04/16/chained-user-defined-explicit-conversions-in-c.aspx"&gt;asked and answered before&lt;/a&gt;.&amp;nbsp; They considered making it a compiler warning but decided that would be a “breaking change”:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;I considered adding a warning to the compiler for this case to say hey, be aware that your collection is of a more general type, this could fail at runtime. It turns out that there are so many programs which use this programming style, and so many of them have “compile with warnings as errors” turned on in their builds, that this would be a huge breaking change. So we opted to not do it.&lt;/i&gt;&lt;/blockquote&gt;This is specious.&amp;nbsp; The purpose of warnings is to advise you that you are engaging in dangerous behavior.&amp;nbsp; If I were the owner of one of these “many programs” I would want to know, not to have it swept under the rug so that my build succeeds.&amp;nbsp; If people want to ignore the warning, &lt;a href="http://msdn.microsoft.com/en-us/library/7f28x9z3.aspx"&gt;they’re free to do so&lt;/a&gt; in their configuration.&amp;nbsp; The result is that the rest of us are left with no safety net whatsoever.&lt;br /&gt;&lt;br /&gt;How can we mitigate this?&amp;nbsp;&amp;nbsp; Not great options, but here’s what we can do:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;unit testing – if our coverage is good, we’ll catch them at runtime&lt;/li&gt;&lt;li&gt;use the &lt;b&gt;var&lt;/b&gt; keyword, which will cause the &lt;i&gt;Add( )&lt;/i&gt; call to be complained about.&lt;/li&gt;&lt;li&gt;use static analysis to detect the explicit cast added by the compiler&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;i&gt;Special thanks to my coworkers who solved this problem (corporate policy prohibits me from disclosing anything more).&amp;nbsp; I work with some smart people (at least &lt;a href="http://steve-yegge.blogspot.com/2008/06/done-and-gets-things-smart.html"&gt;I think I do&lt;/a&gt;).&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7913321130460922687-8236561784103495985?l=famoushamsandwich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/8236561784103495985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7913321130460922687&amp;postID=8236561784103495985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/8236561784103495985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/8236561784103495985'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/2008/10/generic-foreach-loop-automatically-uses.html' title='Generic foreach Loop Automatically Uses Explicit Cast'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7913321130460922687.post-8887350218593633666</id><published>2008-07-26T13:40:00.001-04:00</published><updated>2008-07-26T13:40:34.639-04:00</updated><title type='text'>Will PutPlace Supplant Mozy for My Online Storage?</title><content type='html'>&lt;p&gt;I'm currently using &lt;a href="http://www.mozy.com"&gt;Mozy&lt;/a&gt; for backing up my data.&amp;#160; (Are you backing up your data offsite?&amp;#160; You should.)&amp;#160; I selected Mozy because all my data are encrypted prior to transmission.&amp;#160; Furthermore, I control the key, so even Mozy cannot access my data.&amp;#160; However, they don't offer a way to share files, which is kind of a bummer.&lt;/p&gt;  &lt;p&gt;Today, I learned about new kid on the block &lt;a href="http://www.putplace.com/"&gt;PutPlace&lt;/a&gt; (“&lt;strong&gt;secure&lt;/strong&gt;, organize, and share your digital life.”), who are currently in open beta.&amp;#160;&amp;#160; One thing PutPlace provides that Mozy does not is the ability to share selected data with others.&amp;#160; Also, PutPlace versions your files, allowing you access to prior versions.&amp;#160; That’s pretty cool.&amp;#160; &lt;/p&gt;  &lt;p&gt;On the down side, I expected a lot more in terms of data security.&amp;#160; PutPlace does not encrypt your data prior to transmission, nor is it encrypted prior to storage on &lt;a href="http://www.amazon.com/gp/browse.html?node=16427261"&gt;Amazon S3&lt;/a&gt; (although the transmissions channel itself is encrypted).&amp;#160; Instead, they rely on passwords:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;PutPlace stores your data using Amazon's S3 storage service-the web’s safest possible storage ‘facility’.&lt;/p&gt;    &lt;p&gt;We also ensure that no-one else can see your content by password protecting all of it. Only you, and the people you share your password with, will be able to view your stuff. Plus, we’ll soon offer an encryption service. That’s pretty much the equivalent of lead-lining your content.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;and &lt;a href="http://putplace.com/node/88"&gt;security through obscurity&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Even if we wanted to, we can’t see any of your data because your account is password protected. If you forget or lose your username or password, we will can assist you in setting up a new one, but we can’t retrieve your old one.&lt;/p&gt;    &lt;p&gt;As a default, we use the Amazon's S3 service to store your data (unless you request a different storage service). In Amazon, all links are private, so there’s no easy way to connect data back to a PutPlace account. Additionally, we upload data over encrypted links, which ensure your data is safe during the upload process. &lt;/p&gt;    &lt;p&gt;Finally, in the PutPlace database, we de-couple the filename from the user ID, which makes it impossible for unauthorized users to access your data.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It’s a good start.&amp;#160; But that encryption is a must-have, it’s not &lt;em&gt;secure&lt;/em&gt; without it.&amp;#160; Just ask &lt;a href="http://www.enterprisestorageforum.com/continuity/news/article.php/3499731"&gt;Iron Mountain&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Will PutPlace supplant Mozy for my online storage?&amp;#160; No, not quite &lt;em&gt;yet.&amp;#160; &lt;/em&gt;But it looks promising, and I’ll be watching.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7913321130460922687-8887350218593633666?l=famoushamsandwich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/8887350218593633666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7913321130460922687&amp;postID=8887350218593633666' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/8887350218593633666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/8887350218593633666'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/2008/07/will-putplace-supplant-mozy-for-my.html' title='Will PutPlace Supplant Mozy for My Online Storage?'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7913321130460922687.post-2894623331011373528</id><published>2008-05-18T14:30:00.001-04:00</published><updated>2008-05-18T14:30:15.379-04:00</updated><title type='text'>Fixed: SlickRun Flashing</title><content type='html'>&lt;p&gt;While using &lt;a href="http://www.bayden.com/SlickRun/"&gt;SlickRun&lt;/a&gt;, I had the experience that periodically it would go into what I call &amp;quot;seizure induction&amp;quot; mode, where it seemed the command box would try to grab screen focus, only to have it pulled away, only to grab it back, &lt;em&gt;ad infinitum&lt;/em&gt;.&amp;#160; The only way out of this loop that I could find was to keep clicking on the command box, and eventually it would stop.&lt;/p&gt;  &lt;p&gt;It turns out there is a very simple fix to the problem, but you must have the &lt;a href="http://www.bayden.com/SlickRun/updates.asp"&gt;3.9.8 Beta&lt;/a&gt; or later:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Open the SlickRun INI file, which is usually located in &amp;quot;C:\documents and settings\&amp;lt;username&amp;gt;\application data\slickrun&amp;quot;&lt;/li&gt;    &lt;li&gt;Find the section marked [General]&lt;/li&gt;    &lt;li&gt;Add the following on a separate line: &lt;strong&gt;AggressiveShowWindow=0&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Restart SlickRun.&lt;/li&gt; &lt;/ol&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7913321130460922687-2894623331011373528?l=famoushamsandwich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/2894623331011373528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7913321130460922687&amp;postID=2894623331011373528' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/2894623331011373528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/2894623331011373528'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/2008/05/fixed-slickrun-flashing.html' title='Fixed: SlickRun Flashing'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7913321130460922687.post-1550502646349157974</id><published>2008-05-13T13:56:00.003-04:00</published><updated>2008-05-13T15:14:17.527-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Outlook'/><title type='text'>Fixing the Mysterious Extra Lines in Email</title><content type='html'>&lt;p&gt;When I send messages from my Outlook client to an Internet address, the spacing between lines doesn't work out quite right.  Do you have this problem?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/dave.purrington/SCnYMlVZGYI/AAAAAAAAACw/jfBuq8A-hEY/s1600-h/WindowClipping%20%282%29%5B14%5D.png"&gt;&lt;img style="border: 0px none ; margin: 10px 0px 10px 20px;" alt="WindowClipping (2)" src="http://lh3.ggpht.com/dave.purrington/SCnWMFVZGTI/AAAAAAAAAC4/KZ2G0Tid9QQ/WindowClipping%20%282%29_thumb%5B10%5D.png?imgmax=800" border="0" height="334" width="644" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Not quite what you wanted, right?  It's a minor annoyance, but pretty persistent.  Whether you're using Rich Text or HTML, the problem remains.  It is not consistent, however, as the problem occurs for some fonts, but not others.  Using &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1843"&gt;Firebug&lt;/a&gt;, you can see that each line in the message is a paragraph (the &amp;lt;p&amp;gt; element).&lt;/p&gt;  &lt;p&gt;To fix the problem, in Outlook go to Tools/Options/Mail Format and &lt;em&gt;deselect&lt;/em&gt; "Reduce the file size of the message..."&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/dave.purrington/SCnWMlVZGUI/AAAAAAAAAC8/vjuQXFNg5mc/s1600-h/Options%5B16%5D.png"&gt;&lt;img style="border: 0px none ; margin: 10px 0px 10px 20px;" alt="Options" src="http://lh6.ggpht.com/dave.purrington/SCnWM1VZGVI/AAAAAAAAADA/n4Yi4-CFD4o/Options_thumb%5B12%5D.png?imgmax=800" border="0" height="484" width="419" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Here is the another similar message sent using the new options:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/dave.purrington/SCnWNFVZGWI/AAAAAAAAADE/UzusJG7x3bg/s1600-h/WindowClipping%20%284%29%5B15%5D.png"&gt;&lt;img style="border: 0px none ; margin: 10px 0px 10px 20px;" alt="WindowClipping (4)" src="http://lh5.ggpht.com/dave.purrington/SCnWNlVZGXI/AAAAAAAAADI/OmC1czzIVX0/WindowClipping%20%284%29_thumb%5B11%5D.png?imgmax=800" border="0" height="299" width="519" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7913321130460922687-1550502646349157974?l=famoushamsandwich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/1550502646349157974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7913321130460922687&amp;postID=1550502646349157974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/1550502646349157974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/1550502646349157974'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/2008/05/fixing-mysterious-extra-lines-in-email.html' title='Fixing the Mysterious Extra Lines in Email'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/dave.purrington/SCnWMFVZGTI/AAAAAAAAAC4/KZ2G0Tid9QQ/s72-c/WindowClipping%20%282%29_thumb%5B10%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7913321130460922687.post-8905790554156781979</id><published>2008-05-12T15:11:00.004-04:00</published><updated>2008-05-13T14:36:03.660-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Shortcuts'/><title type='text'>SlickRun for Search</title><content type='html'>&lt;p&gt;Here are a couple of &lt;a href="http://www.bayden.com/SlickRun/"&gt;SlickRun&lt;/a&gt; commands I'm using frequently.  There are lots of things the browser can do that you can hook into with SlickRun.  The most obvious is search.&lt;/p&gt;  &lt;p&gt;Here are a few that I use a lot (grabbed from the slickrun.srl file, located in ...\ApplicationSettings\SlickRun).  They're probably obvious, but I use them constantly.&lt;/p&gt;&lt;span style="font-weight: bold;"&gt;  Google&lt;/span&gt;  &lt;blockquote&gt;   &lt;p&gt;[g] &lt;br /&gt;Filename="firefox"  &lt;br /&gt;Path=""  &lt;br /&gt;Params="http://www.google.com/search?hl=en&amp;amp;btnG=Google+Search&amp;amp;q=$W$"  &lt;br /&gt;Notes=""Go to" web search from Google"&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Searching Google is as easy as &lt;span style="font-family:Consolas;"&gt;&amp;lt;ctr+ q&amp;gt;, g &amp;lt;search term&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Del.icio.us&lt;/span&gt;&lt;p&gt;I use the same approach for searching my &lt;a href="http://www.del.icio.us/"&gt;del.icio.us&lt;/a&gt; links:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[d] &lt;br /&gt;Filename="firefox"  &lt;br /&gt;Path=""  &lt;br /&gt;Params="http://del.icio.us/search/?fr=del_icio_us&amp;amp;p=$w$&amp;amp;type=user"  &lt;br /&gt;Notes=""&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Note that this is not the default del.icio.us search.  It searches only &lt;em&gt;my&lt;/em&gt; bookmarks, which is much much faster.  Using the del.icio.us web site as a model, it was a simple task to figure out the query string parameters I needed.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7913321130460922687-8905790554156781979?l=famoushamsandwich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/8905790554156781979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7913321130460922687&amp;postID=8905790554156781979' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/8905790554156781979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/8905790554156781979'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/2008/05/search-from-keyboard.html' title='SlickRun for Search'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7913321130460922687.post-7112412720489797274</id><published>2008-04-30T20:09:00.004-04:00</published><updated>2008-05-13T14:36:24.020-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Shortcuts'/><title type='text'>Visual Studio Tip: Jump to Item in Solution Explorer</title><content type='html'>&lt;p&gt;In his blog, &lt;a href="http://www.clariusconsulting.net/blogs/kzu/archive/2008/04/18/Locatingtheactiveiteminthesolutionexplorer.aspx"&gt;Daniel Cazzulino&lt;/a&gt; observes a difficulty in working with large projects in Visual Studio, and provides a helpful tip to locate the currently active file in the editor.  As Daniel points out, there is a setting in Visual Studio that will ensure that the current file in the editor is always highlighted in the Solution Explorer.&lt;/p&gt;  &lt;p&gt;If you are using &lt;a href="http://www.jetbrains.com/resharper/"&gt;ReSharper&lt;/a&gt;, you have an even better alternative.  There is a ReSharper command called ReSharper_LocateSolutionInExplorerAction.  By default, the command is mapped to &lt;strong&gt;&amp;lt;alt&amp;gt;+&amp;lt;shift&amp;gt;+L&lt;/strong&gt;, and it will select the file in the Solution Explorer (including putting focus on the pane).&lt;/p&gt;&lt;p&gt;UPDATE: &lt;a href="http://weblogs.asp.net/kdente/archive/2008/04/30/locating-the-active-item-in-solution-explorer.aspx"&gt;Kevin Dente&lt;/a&gt; posted a follow-up on the topic.  Kevin shows a two-line macro that accomplishes the same feat, which is great for those without ReSharper.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7913321130460922687-7112412720489797274?l=famoushamsandwich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/7112412720489797274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7913321130460922687&amp;postID=7112412720489797274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/7112412720489797274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/7112412720489797274'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/2008/04/jump-to-active-item-in-solution.html' title='Visual Studio Tip: Jump to Item in Solution Explorer'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7913321130460922687.post-3122593484614685152</id><published>2008-04-29T22:39:00.004-04:00</published><updated>2008-05-13T14:36:42.278-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Shortcuts'/><title type='text'>Free the Command Prompt with SlickRun</title><content type='html'>&lt;p&gt;A great way to improve your productivity at the keyboard is to actually keep your hands on it.  I base this on no scientific evidence whatsoever.  Still, I &lt;em&gt;feel&lt;/em&gt; much more productive when I'm not constantly reaching over for the mouse to start some app or open a browser.    &lt;/p&gt;  &lt;p&gt;One way to keep your hands on the keyboard is to learn the keyboard shortcuts for programs you use frequently.  Another way is to become proficient with entering text commands at the command prompt.  In Windows XP, all we get is the very feeble Start | Run.  Vista greatly improves on the &lt;a href="http://www.computerperformance.co.uk/vista/vista_run_command.htm"&gt;Run Command&lt;/a&gt; by making commands searchable.  Still, you cannot extend the commands easily.&lt;/p&gt;  &lt;p&gt;To address this, I use &lt;a href="http://www.bayden.com/SlickRun/"&gt;SlickRun&lt;/a&gt;.  It is a free tool from &lt;a href="http://www.bayden.com/"&gt;Bayden Systems&lt;/a&gt; that gives you a command prompt on demand.  Hit your keystroke (I use  ctrl + Q) and little text box pops up for you to enter commands.  In addition to acting as a command line, it will do things like:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Enter a DOS command.   It's a command line.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Type in a path -- SlickRun will auto-complete in a way that is context-sensitive, just as on the command line itself.&lt;/li&gt;    &lt;li&gt;Setup so-called MagicWords, or little macros to perform various commands.  For example, to search Google for a term, you can setup a MagicWord of "g" that takes search terms.  From the SlickRun prompt, simply type "g famoushamsandwich" and your search will be performed.&lt;/li&gt;    &lt;li&gt;Auto-complete prior commands.  If you have commands, MagicWords, or file locations that you use repeatedly, you can recall them with just a couple of keystrokes.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The tool is very configurable, allowing you to finely control its display properties and behavior.  There is even a scratch pad for jotting notes, called up by entering "jot".&lt;/p&gt;  &lt;p&gt;SlickRun is not the only tool for the job -- there are &lt;a href="http://www.hanselman.com/blog/ReplacingStartRunTheQuestContinues.aspx"&gt;many similar tools&lt;/a&gt;, but I find that SlickRun offers the most options.  To me, the extensibility of MagicWords really sells it.  The tool has a loyal user-base and you can even download MagicWord packs from the user community. &lt;/p&gt;  &lt;p&gt;Give it a try, and if you really like it, drop a &lt;a href="http://www.bayden.com/donate.asp"&gt;donation&lt;/a&gt; or buy something through &lt;a href="http://www.amazon.com/exec/obidos/redirect-home/baydensystems"&gt;their Amazon link&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7913321130460922687-3122593484614685152?l=famoushamsandwich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/3122593484614685152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7913321130460922687&amp;postID=3122593484614685152' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/3122593484614685152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/3122593484614685152'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/2008/04/free-command-prompt-with-slickrun.html' title='Free the Command Prompt with SlickRun'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7913321130460922687.post-6603233752084050146</id><published>2008-04-24T09:16:00.001-04:00</published><updated>2008-04-24T09:16:42.310-04:00</updated><title type='text'>Find New &amp; Shiny Stuff at MakeUseOf.com</title><content type='html'>&lt;p&gt;Looking around this morning I stumbled on an excellent site: &lt;a href="http://www.makeuseof.com/"&gt;MakeUseOf.com&lt;/a&gt;.&amp;#160; It has frequent posts on all kinds of websites, tools, &amp;amp; tips.&amp;#160; Much more useful than &lt;a href="http://lifehacker.com/"&gt;Lifehacker&lt;/a&gt;.&amp;#160; I've already found more than 75% of the posts to be interesting stuff.&lt;/p&gt;  &lt;p&gt;If you're using an RSS reader, the feed is &lt;a href="http://feeds.feedburner.com/Makeuseof"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7913321130460922687-6603233752084050146?l=famoushamsandwich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/6603233752084050146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7913321130460922687&amp;postID=6603233752084050146' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/6603233752084050146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/6603233752084050146'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/2008/04/find-new-shiny-stuff-at-makeuseofcom.html' title='Find New &amp;amp; Shiny Stuff at MakeUseOf.com'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7913321130460922687.post-6693411060146707598</id><published>2008-04-15T16:18:00.001-04:00</published><updated>2008-04-15T16:18:30.297-04:00</updated><title type='text'>Rumor: Microsoft to Open Retail Stores</title><content type='html'>&lt;p&gt;Out: &lt;a href="http://www.leftorium.com/" target="_blank"&gt;The Leftorium&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In: &lt;a href="http://gizmodo.com/378747/microsoft-planning-to-open-most-exciting-retail-stores-ever"&gt;The Microsoft Store&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7913321130460922687-6693411060146707598?l=famoushamsandwich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/6693411060146707598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7913321130460922687&amp;postID=6693411060146707598' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/6693411060146707598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/6693411060146707598'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/2008/04/rumor-microsoft-to-open-retail-stores.html' title='Rumor: Microsoft to Open Retail Stores'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7913321130460922687.post-3889970503508411853</id><published>2008-04-15T16:06:00.001-04:00</published><updated>2008-04-15T16:06:02.498-04:00</updated><title type='text'>Monster Cables Pushes Around the Wrong Small Company</title><content type='html'>&lt;p&gt;Read &lt;a href="http://yro.slashdot.org/yro/08/04/15/1612238.shtml"&gt;this hilarious response&lt;/a&gt; from a small audio cable company who received a cease-and-desist letter from Monster Cables, who allege patent infringement. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7913321130460922687-3889970503508411853?l=famoushamsandwich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/3889970503508411853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7913321130460922687&amp;postID=3889970503508411853' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/3889970503508411853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/3889970503508411853'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/2008/04/monster-cables-pushes-around-wrong.html' title='Monster Cables Pushes Around the Wrong Small Company'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7913321130460922687.post-3603929030464981094</id><published>2008-04-06T14:55:00.001-04:00</published><updated>2008-04-06T15:01:30.418-04:00</updated><title type='text'>Setting up a Subversion server on Windows</title><content type='html'>&lt;a href="http://www.codinghorror.com/blog/archives/001093.html"&gt;Jeff Atwood describes installing a Subversion server in Windows.&lt;/a&gt;   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;On Tortoise performance, he notes: &lt;/p&gt;  &lt;blockquote&gt;I'll never understand why, but by default, Tortoise tries to apply source control overlays across every single folder and drive on your system. This can lead to some odd, frustrating file locking problems. Much better to let Tortoise know that it should only work its shell magic on specific folders. Set this via &amp;quot;Icon Overlays&amp;quot;; look for the exclude and include paths. I set the exclude path to everything, and the include path to only my project folder(s). &lt;/blockquote&gt;  &lt;p&gt;I'd go a step further and say that if you have a project of substantial size, this still won't be enough to limit Tortoise from screwing up your disk I/O. That's because by default, Tortoise will recursively check the status on all folders. If you can do without that recursion, your I/O performance will be a lot better. Go to Tortoise Settings, and select &amp;quot;Icon Overlays.&amp;quot;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img height="282" alt="sshot-7" src="http://lh6.google.com/dave.purrington/R_keCbTLiRI/AAAAAAAAABY/b4fBEeaIGy4/sshot-7%5B11%5D.png" width="400" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Set the &amp;quot;Status Cache&amp;quot; value to &amp;quot;None&amp;quot; and folders will not have updated overlays, but you'll still have all the benefit of right-click commands that Tortoise provides. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7913321130460922687-3603929030464981094?l=famoushamsandwich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/3603929030464981094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7913321130460922687&amp;postID=3603929030464981094' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/3603929030464981094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/3603929030464981094'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/2008/04/setting-up-subversion-server-on-windows.html' title='Setting up a Subversion server on Windows'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7913321130460922687.post-5761311853008432477</id><published>2008-04-06T14:01:00.001-04:00</published><updated>2008-04-06T14:01:48.338-04:00</updated><title type='text'>FogCreek's CoPilot Software Free on Weekends</title><content type='html'>I haven't tried the service, but this software is like VNC or RemoteAssistance in Windows.  It's supposedly very easy to setup, and &lt;a href="http://www.joelonsoftware.com/items/2008/01/25.html"&gt;this article&lt;/a&gt; explains that it's now free on weekends.  Enjoy!   &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7913321130460922687-5761311853008432477?l=famoushamsandwich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://famoushamsandwich.blogspot.com/feeds/5761311853008432477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7913321130460922687&amp;postID=5761311853008432477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/5761311853008432477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7913321130460922687/posts/default/5761311853008432477'/><link rel='alternate' type='text/html' href='http://famoushamsandwich.blogspot.com/2008/04/fogcreek-copilot-software-free-on.html' title='FogCreek&amp;#39;s CoPilot Software Free on Weekends'/><author><name>dave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_CpBbsWA2xKY/R-FnNbTLiNI/AAAAAAAAAAM/iviGPqG6xgk/S220/images.jpg'/></author><thr:total>0</thr:total></entry></feed>
