<?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-581740227571888189</id><updated>2012-02-16T20:43:11.618-05:00</updated><category term='PCMover'/><category term='Windows XP'/><category term='Microsoft'/><category term='cryptography'/><category term='subclass'/><category term='GetEnumerator'/><category term='portable apps'/><category term='pc performance'/><category term='explorer'/><category term='iterative'/><category term='methodology'/><category term='Windows'/><category term='faster computer'/><category term='ASP.NET'/><category term='PC mover Windows 7 Upgrade Assistant'/><category term='software development'/><category term='Webcontrol'/><category term='tune up pc'/><category term='arraylist'/><category term='slow computer'/><category term='Chrome'/><category term='analysis'/><category term='Command line'/><category term='registry hack'/><category term='FxCop'/><category term='.net'/><category term='performance'/><category term='Treeview'/><category term='Miscellaneous'/><category term='firewall'/><category term='PC Mover'/><category term='Important'/><category term='Services'/><category term='folder view'/><category term='slow pc'/><category term='Reflector'/><category term='vb.net'/><category term='uninstall'/><category term='Windows 7'/><category term='Reviews'/><category term='steganography'/><category term='process'/><category term='Thunderbird'/><category term='IEnumerable'/><category term='faster pc'/><category term='ccmexec.exe'/><category term='Google'/><category term='TuneUp Utilities 2011'/><category term='Development'/><category term='Laplink'/><category term='antivirus'/><category term='software'/><category term='disk thrash'/><category term='generics'/><category term='Operating Systems'/><category term='SVCHost.exe'/><category term='HTML'/><category term='Tips Tricks and Tweaks'/><category term='DOS Commands'/><category term='Free'/><category term='Windows 7 upgrade'/><category term='SMS Host Agent'/><category term='DOS'/><category term='Utilities'/><title type='text'>My Life In Code</title><subtitle type='html'>Software reviews, software development, commentary, tips, tricks and tweaks.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-2687015682773590708</id><published>2011-07-03T20:19:00.000-04:00</published><updated>2011-07-03T20:19:28.472-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reviews'/><category scheme='http://www.blogger.com/atom/ns#' term='uninstall'/><category scheme='http://www.blogger.com/atom/ns#' term='faster computer'/><category scheme='http://www.blogger.com/atom/ns#' term='Utilities'/><category scheme='http://www.blogger.com/atom/ns#' term='faster pc'/><category scheme='http://www.blogger.com/atom/ns#' term='slow pc'/><category scheme='http://www.blogger.com/atom/ns#' term='tune up pc'/><category scheme='http://www.blogger.com/atom/ns#' term='pc performance'/><category scheme='http://www.blogger.com/atom/ns#' term='TuneUp Utilities 2011'/><category scheme='http://www.blogger.com/atom/ns#' term='slow computer'/><title type='text'>TuneUp Utilities 2011, Reviewed.</title><content type='html'>There are a few hard fast truths in life when it comes to computers. One such truth is that the more programs you install, the slower your system becomes. In fact, it's not just a law of computing - it's a big pain for PC users in every walk of life!&lt;br /&gt;&lt;br /&gt;You can see evidence of this in late night television. Just pay attention to the number of late night infomercials for miracle software that will make your PC faster. In fact, one such piece of infomercial junkware is actually called My Faster PC!  Other variations on this theme usually revolve around changing the order of the keywords or substituting similar terms... MyCleanPC or CleanMyPC etc.. you get the idea.&lt;br /&gt;&lt;br /&gt;Those are nothing more than junk, sold to unsuspecting users in their moment of frustration and weakness.&lt;br /&gt;&lt;br /&gt;A better solution to your slow PC problems is &lt;a href="http://www.amazon.com/gp/product/B004H43TFS/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=mlic-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399373&amp;amp;creativeASIN=B004H43TFS"&gt;TuneUp Utilities 2011&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Their motto is:&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;"Deactivation instead of installation"&lt;/b&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Features&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fixes software problems and speeds up you PC.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Provides the tools to properly maintain up to 3 PCs.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;New program deactivator with programs-on-demand technology.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Selectively turn off 70+ windows features that are not used on a daily basis.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Turbo Mode helps you get your PC to maximum speed.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;User-friendly Start Center makes it easy to see your optimization status at a glance.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Includes over 30 intuitive optimization tools.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Description&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;TuneUp Utilities 2011 is a comprehensive suite of tools designed to automatically optimize Windows and make your PC run like new again. TuneUp can help you free up disk space and increase performance by up to 60%. It will also help you clean up Windows and solve numerous problems or  the many annoyances common with Windows.&lt;br /&gt;&lt;br /&gt;TuneUp features an easy to follow  Optimization Report which outlines the maintenance that should be performed as well as the problems it will fix.&lt;br /&gt;&lt;br /&gt;All of this can be set to run when your PC is idle. That means TuneUp will be busy working on your system only when you're not - no interruption in your schedule!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;System Requirements&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Windows XP (Service Pack 2 or higher), Windows Vista or Windows 7 (32- and 64-Bit)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Processor with at least 300 MHz, 256 MB RAM&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Screen resolution at least 1024 x 600 pixels&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Online version: min. 80 MB free hard disk space&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;CD version: min. 300 MB free hard disk space (and CD or DVD drive)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Internet Explorer 6 or higher&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Why I love this product.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are dozens of utilities on the market and hundreds of freeware and shareware utilities on the web that do a lot of what TuneUp does, but TuneUp packages all those disparate features into one easy to use program.&lt;br /&gt;&lt;br /&gt;But that's just a nice thing to have. What really sets &lt;a href="http://www.amazon.com/gp/product/B004H43TFS/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=mlic-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399373&amp;amp;creativeASIN=B004H43TFS"&gt;TuneUp Utilities 2011&lt;/a&gt; apart from this crowd is its ability to deactivate, or disable other programs instead of uninstalling them.&lt;br /&gt;&lt;br /&gt;This is the first utility I've seen that enables the user to selectively choose which programs run and which do not without uninstalling them. This means that you can try out different scenarios before you commit to removing the applications.&lt;br /&gt;&lt;br /&gt;All too often people uninstall programs in the hope of improving performance or fixing some sort of crash only to find that it didn't help and they would have continued to use that program if they knew it wasn't contributing to the problem. &lt;br /&gt;&lt;br /&gt;Also, TuneUp lets you put your PC into Turbo Mode to maximize performance. This is unlikely to be a long term solution for most users, as it disables many windows features and applications that the user might actually use, but it provides a way to test out the PC in a stripped-down, lean and mean sort of setting. If your PC is slow in Turbo Mode, then it's likely you need to upgrade your hardware and simple software tweaks aren't going to be enough.&lt;br /&gt;&lt;br /&gt;On the other hard, you may discover that your PC is much faster, and that you can adjust your style to use less of what you have installed. You may have a new computer without having to actually buy one, and how nice would that be?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/B004H43TFS/ref=as_li_ss_tl?ie=UTF8&amp;tag=mlic-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399373&amp;creativeASIN=B004H43TFS"&gt;Tuneup Utilities 3-User&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=&amp;l=as2&amp;o=1&amp;a=B004H43TFS&amp;camp=217145&amp;creative=399373" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-2687015682773590708?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/2687015682773590708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2011/07/tuneup-utilities-2011-reviewed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/2687015682773590708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/2687015682773590708'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2011/07/tuneup-utilities-2011-reviewed.html' title='TuneUp Utilities 2011, Reviewed.'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-2910510517296594925</id><published>2011-06-07T21:37:00.001-04:00</published><updated>2011-06-11T13:26:07.986-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PC Mover'/><category scheme='http://www.blogger.com/atom/ns#' term='Reviews'/><category scheme='http://www.blogger.com/atom/ns#' term='Laplink'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7 upgrade'/><category scheme='http://www.blogger.com/atom/ns#' term='Utilities'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='PCMover'/><category scheme='http://www.blogger.com/atom/ns#' term='PC mover Windows 7 Upgrade Assistant'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows XP'/><title type='text'>LapLink PC Mover Reviewed.</title><content type='html'>It's a little known fact that only&amp;nbsp; 14 of the 66 possible upgrade scenarios detailed by Microsoft are supported by Windows 7. Worse yet - upgrading from Windows XP to Windows 7 is not one of those 14 supported!&lt;br /&gt;&lt;br /&gt;So what's a PC user to do?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;PCmover Windows 7 Upgrade Assistant&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/B002TA4ZKA/ref=as_li_tf_tl?ie=UTF8&amp;amp;tag=mlic-20&amp;amp;linkCode=as2&amp;amp;camp=217153&amp;amp;creative=399349&amp;amp;creativeASIN=B002TA4ZKA"&gt;PC mover Windows 7 Upgrade Assistant&lt;/a&gt;, by Laplink, steps in to fill this gap left by Microsoft.&lt;br /&gt;&lt;br /&gt;Besides being one of the best and easiest ways to&amp;nbsp; upgrade from XP to Windows 7, it may be one of the only ways.&lt;br /&gt;&lt;br /&gt;PCmover Windows 7 Upgrade Assistant provides an easy to follow process to upgrade or migrate your applications and settings from any version of Windows 2000 and up.&lt;br /&gt;&lt;br /&gt;Whether it's from one PC to another or on a single PC before and after a Windows 7 Upgrade, your programs, files and settings are transferred from your previous installation of Windows to your Windows 7 installation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;The only path to Windows 7 from XP.&lt;/span&gt;&lt;br /&gt;As mentioned above, users who want to upgrade their existing Windows XP to Windows 7 really have no other way to do so without reinstalling (and re-registering and configuring) everything afterwards.&lt;br /&gt;&lt;br /&gt;Take a look at this chart, detailing the supported upgrade paths from Microsoft&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-B16g_MQcGD8/Te7ODikNAOI/AAAAAAAAAEQ/x6dAtJp1UOg/s1600/B002TA4ZKA-1.jpg" imageanchor="1" style="margin-left: -10px; margin-right: 1em;"&gt;&lt;img border="0" height="600" src="http://2.bp.blogspot.com/-B16g_MQcGD8/Te7ODikNAOI/AAAAAAAAAEQ/x6dAtJp1UOg/s640/B002TA4ZKA-1.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;As you can see, the only way to upgrade from XP to Windows 7 without reinstalling everything is with a program like PCmover.&lt;br /&gt;&lt;br /&gt;PCmover allows you to migrate your programs, settings and registration info in one easy to follow process without the original installation CDs&amp;nbsp; and serial numbers.&lt;br /&gt;&lt;br /&gt;Why Microsoft chose to not support the most common upgrade paths like XP to Windows 7, Vista Home Premium to Windows 7 Professional and Vista 32-bit to Windows 7 64-bit is beyond me, but PCMover handles all of these.&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;Features.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;PCmover Windows 7 Upgrade Assistant makes upgrading from any version of Windows (2000 and later) to Windows 7 easy.&lt;br /&gt;&lt;br /&gt;Easy to follow process:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Simply choose which applications you want to move to your upgraded PC&lt;/li&gt;&lt;li&gt;Choose which folders you want and uncheck any file types that you don't want&lt;/li&gt;&lt;li&gt;Follow the simple wizard to perform the upgrade&lt;/li&gt;&lt;li&gt;All programs, files and settings remain as they were in your old operating system with one easy step&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;You choose the applications you want to have on your upgraded PC.You choose the folders and files to carry forward. You &lt;b&gt;don't&lt;/b&gt; have to register, reinstall or re-enter serial numbers when you're done!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Pros&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Laplink has a history of quality and reliability. PCmover Windows 7 Upgrade Assistant continues this history.&lt;br /&gt;&lt;br /&gt;If instructions and precautions are observed, PCmover really will migrate your data from your old machine to your new, Windows 7 machine. It can save you hours of reinstalling hassle!&lt;br /&gt;&lt;br /&gt;PCmover's user interface is simple and easy to follow, with familiar metaphors like Moving Van graphics and indicators to help make things easier to understand. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Cons&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As easy as PCMover makes the process of migrating your existing applications and data to Windows 7, it's still a very complicated process. Here are a few tips to help you avoid some of the situations commonly at the heart of some of the bad reviews on the web:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Be sure to backup your data before running PCMover.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Read the manual before completing the process.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;It's especially important to follow those 2 steps when doing an in-place upgrade to Windows 7 using PCmover. This is when you're upgrading your existing version of Windows on a single machine. It's a much more complex process and inherently more prone to problems. Observing all the instructions will reduce if not eliminate these problems.&lt;br /&gt;&lt;br /&gt;It's also important to note that there are some programs that may not be compatible with the new hardware or with Windows 7. PCMover cannot correct this problem, and you will need to contact the company that produces the old program and see if there is a newer version that's compatible with your hardware.&lt;br /&gt;&lt;br /&gt;Additionally, files with Digital Rights Management (DRM) such as music files and programs that require keys or serial numbers with a hardware fingerprint may require reactivation. &lt;br /&gt;&lt;br /&gt;Lastly, PCMover is an upgrade only solution - it does not integrate applications and setting from Windows 7 down to XP or Vista or any other version of Windows older than 7.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=mlic-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=B002TA4ZKA&amp;amp;IS1=1&amp;amp;ref=tf_til&amp;amp;fc1=000000&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=FFFFFF&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 240px; width: 120px;"&gt;&lt;/iframe&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/581740227571888189-2910510517296594925?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/2910510517296594925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2011/06/laplink-pc-mover-reviewed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/2910510517296594925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/2910510517296594925'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2011/06/laplink-pc-mover-reviewed.html' title='LapLink PC Mover Reviewed.'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-B16g_MQcGD8/Te7ODikNAOI/AAAAAAAAAEQ/x6dAtJp1UOg/s72-c/B002TA4ZKA-1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-2270942356504667445</id><published>2009-08-04T07:12:00.003-04:00</published><updated>2011-06-06T22:14:18.378-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='antivirus'/><category scheme='http://www.blogger.com/atom/ns#' term='Free'/><title type='text'>Free Antivirus Recommendations (Protect Yourself Online With FreeAntiVirus Software).</title><content type='html'>I got tired of shelling out $40+ a year for antivirus protection long ago. Aside form the price, what really bugged me was the bloat! It became more and more difficult to find a simple antivirus or rootkit scanner, without system tuning, performance monitoring and benchmarking bloat that the big guys were packaging with their virus scanner.&lt;br /&gt;&lt;br /&gt;The great thing is - with all the free antivirus programs available today, &lt;strong&gt;you don't need to shell out any money&lt;/strong&gt; and most are simply virus protection without the bloat.&lt;br /&gt;&lt;h2&gt;Free Antivirus Recommendations&lt;/h2&gt;&lt;br /&gt;There are many free antivirus programs on the Internet today. I've been looking for the best for my home PC, and to that end I examined ClamWin, Avast!, AVG, Antivir. Here are my thoughts on each:&lt;br /&gt;&lt;h3&gt;&lt;span style="text-decoration: underline;"&gt;&lt;a href="http://www.clamwin.com/content/view/71/1/"&gt;ClamWin.&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-NzxHKaIvXNg/Te2JMJgNY_I/AAAAAAAAAEA/E8Z2G3k7Jgk/s1600/clamwin.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="220" src="http://4.bp.blogspot.com/-NzxHKaIvXNg/Te2JMJgNY_I/AAAAAAAAAEA/E8Z2G3k7Jgk/s320/clamwin.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;PROS:&lt;/strong&gt;&lt;br /&gt;ClamWin has an simple user interface, and is available in a &lt;a href="http://portableapps.com/apps/utilities/clamwin_portable"&gt;portable version &lt;/a&gt;that can run on a USB thumb drive.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;CONS:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Doesn't include an on-access, real-time scanner. This means it's basically relegated to an "after the fact" scanner - only worthwhile if you suspect you have an infection. This is enough to disqualify it from the running for my purpose, though I do use it on my thumb drive. I might come in handy if I need to diagnose a friend's PC problem someday, (which actually happens quite a bit to me!)&lt;br /&gt;&lt;h3&gt;&lt;span style="text-decoration: underline;"&gt;&lt;a href="http://www.google.com/url?sa=t&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Ffree.avg.com%2F&amp;amp;ei=3n9oSrStNY_UNeWW-c8M&amp;amp;rct=j&amp;amp;q=avg+free&amp;amp;usg=AFQjCNGC_5wf_ZlpTvTBmerEaNG3uLMPgA"&gt;AVG.&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-dCm1lYFjgt0/Te2JTRwMzLI/AAAAAAAAAEE/eWSZUvfjVdg/s1600/AVG-Free-Edition_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="234" src="http://4.bp.blogspot.com/-dCm1lYFjgt0/Te2JTRwMzLI/AAAAAAAAAEE/eWSZUvfjVdg/s320/AVG-Free-Edition_1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I then moved on to AVG. I have used (and still use today on my laptop) AVG 7.5 for over a year now with no complaints. When I saw they had a new version (8.0), with a slick new interface and a scan engine revamped for speed I figured I'd upgrade to 8.0 and be loving life.&lt;br /&gt;&lt;br /&gt;Not so much.&lt;br /&gt;&lt;br /&gt;AVG 8.0 would not work when installed on my 2000 desktop. It installed, but would not scan. Neither would it save any settings. There was no error message, it just behaved as though I never issued a command. In short, it blew me off. So I blew it off, and when back to 7.5.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;PROS:&lt;/strong&gt;&lt;br /&gt;The AVG 7.5 interface is simple, not slick but effective. It gets the job done, and uses minimal system resources to do it and that's a plus in my book. AVG free offers email protection (inbound and outbound) as well as protection against worms, viruses, and Trojans.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;CONS:&lt;/strong&gt;&lt;br /&gt;AVG makes a rootkit detector and anti-phishing software, but offers both of these as separate programs. This might not bother some users, but it does provide a feature gap between its paid for counterparts like Symantec and McAfee.&lt;br /&gt;&lt;br /&gt;Perhaps the biggest drawback to AVG 7.5 free is the scheduler. The user can schedule a full computer scan and daily definition updates, but they cannot choose the exact time of each. Instead, the interface offers a time range to choose from. For example, the user can select to have the definition updates downloaded between 6 am - 8 am, and the program will select a random time within that range. This is an annoyance, but could be problematic for users who shutdown their PCs at night.&lt;br /&gt;&lt;h3&gt;&lt;span style="text-decoration: underline;"&gt;&lt;a href="http://www.google.com/url?sa=t&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fwww.free-av.com%2F&amp;amp;ei=N4FoSuP-KYe6NY_u7doP&amp;amp;rct=j&amp;amp;q=antivir&amp;amp;usg=AFQjCNH_6de77kH07uFTqXIL3idFhUtKcg"&gt;AntiVir&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-BNtBGY9cfOA/Te2JX9dQtcI/AAAAAAAAAEI/lvpetLDXjvg/s1600/AntiVir-Personal-Edition_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="226" src="http://4.bp.blogspot.com/-BNtBGY9cfOA/Te2JX9dQtcI/AAAAAAAAAEI/lvpetLDXjvg/s320/AntiVir-Personal-Edition_3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Since the latest AVG interface was problematic on my older computer, I started my search again for a better option. Next I tried Avira Antivir Free. At first, this was a serious contender offering robust coverage of various types of attack. Then I noticed a serious flaw - no email scanner! Couple that with an obnoxious ad window, and it was on to the next candidate.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;PROS:&lt;/strong&gt;&lt;br /&gt;While AVG offers rootkit detection as a separate product, Antivir includes rootkit detection, as well as protection against worms, viruses, and Trojans. Antivir also includes protection against phishing.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;CONS:&lt;/strong&gt;&lt;br /&gt;Avira Antivir Free does not have an email scanner. This is something that is included with the other packages reviewed here, and it seems like a pretty big gap since email is a major entry point for virus infection. One of the biggest downsides, IMO, is an in-your-face very LARGE ad window that crops up daily. With the other options out there in the free antivirus market, this is enough to make me take a pass on AntiVir&lt;br /&gt;&lt;h3&gt;&lt;span style="text-decoration: underline;"&gt;&lt;a href="http://www.avast.com/eng/avast-free-home-antivirus-antispyware.html"&gt;Avast! 4 Home Edition.&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-p8hF7PdRllk/Te2Jb2-v4PI/AAAAAAAAAEM/yDSxra8IfEc/s1600/Avast-Home-Edition_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="105" src="http://4.bp.blogspot.com/-p8hF7PdRllk/Te2Jb2-v4PI/AAAAAAAAAEM/yDSxra8IfEc/s320/Avast-Home-Edition_1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The last free antivirus program I tried was Avast! 4 Home Edition. Quite frankly, it's the last one I tried because it was the best.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;PROS:&lt;br /&gt;&lt;/strong&gt;Avast! includes Anti-spyware and Anti-rootkit built-in. Each is implemented in separate processes for scanning web, mail, P2P, IM, network and on access traffic. Each one of these processes can be stopped, started or disabled so if you don't have P2P or IM software - you can disable it. This is quite handy on older PCs with less available resources. It also offers Automatic updates, Virus Chest and System integration. The UI is excellent (especially for a free app) and it supports 64-bit Windows and Internationalization.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;CONS:&lt;/strong&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-NzxHKaIvXNg/Te2JMJgNY_I/AAAAAAAAAEA/E8Z2G3k7Jgk/s1600/clamwin.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-NzxHKaIvXNg/Te2JMJgNY_I/AAAAAAAAAEA/E8Z2G3k7Jgk/s1600/clamwin.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;I honestly haven't noticed any real problems with Avast!. If I had to choose something, I suppose I'd say that it is a bit more heavy on the RAM usage than some of the others, but given the completeness of the features, I don't think it's excessive. Besides, the modular scanner architecture allows you to shut down or disable unneeded services.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-2270942356504667445?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/2270942356504667445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/08/free-antivirus-recommendations-protect_04.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/2270942356504667445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/2270942356504667445'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/08/free-antivirus-recommendations-protect_04.html' title='Free Antivirus Recommendations (Protect Yourself Online With FreeAntiVirus Software).'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-NzxHKaIvXNg/Te2JMJgNY_I/AAAAAAAAAEA/E8Z2G3k7Jgk/s72-c/clamwin.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-3073944629559252421</id><published>2009-07-30T06:18:00.003-04:00</published><updated>2011-06-06T22:11:43.551-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firewall'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Free'/><title type='text'>Free Firewall Recommendations (Protect Yourself Online With These FreeFirewalls)</title><content type='html'>If your home computer is connected to the internet, or to other computers that are connected to the internet -&lt;strong&gt; you need a firewall&lt;/strong&gt;. It's as simple as that.&lt;br /&gt;&lt;br /&gt;Hackers and hacker software are constantly probing the internet for computers without a firewall. When such a computer (A.K.A. "victim") is found, it is targeted with spyware, viruses, trojans, key stroke loggers and anything else a deviant mind can devise. If you don't want to be a victim, then you need to protect yourself.&lt;br /&gt;&lt;h2&gt;How not to be a victim.&lt;/h2&gt;&lt;br /&gt;Here are 2 really great personal firewall programs that are&lt;strong&gt; absolutely free&lt;/strong&gt; for personal use.&lt;br /&gt;&lt;h3&gt;Comodo&lt;/h3&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-SqeQor9Iq-w/Te2IZsA2J7I/AAAAAAAAAD4/rZ4dn_JbaqQ/s1600/comodofw.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="276" src="http://2.bp.blogspot.com/-SqeQor9Iq-w/Te2IZsA2J7I/AAAAAAAAAD4/rZ4dn_JbaqQ/s400/comodofw.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Comodo is free for home use. You may be wondering why a company would give away a program for free that is sold for $40 and more by other companies. This thought alone is often enough for many computer owners to skip the free alternative and shell out the money for the "internet protection" software suites.&lt;br /&gt;&lt;br /&gt;This is a very normal concern, but here are some things to consider that will probably alleviate those worries.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1). &lt;/strong&gt;Take a look at those Internet protection suites and see what's included.&lt;br /&gt;Often times, it's not just a firewall but anti spyware, anti virus, web filters, system tuning and maintenance - in other words, the kitchen sink! This is because the makers of the all-inclusive software suites know that each piece isn't worth the full price alone, or they would charge for each piece. So they package them all together and charge one price hoping you'll need at least one of those products enough to buy the whole suite.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2). &lt;/strong&gt;Most free alternatives offer a slim feature set in the free version, but increased features for the professional version. Also, the free version is often times only free for indiviual use, not businesses. So the company or developer makes money from business use.&lt;br /&gt;&lt;br /&gt;That being said, the free versions of Comodo and Zonealarm are more than enough for most home users.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Comodo Features (courtesy of the Comodo website):&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Complete protection from Hackers, Spyware, Trojans and Identity theft&lt;/li&gt;&lt;li&gt;Host Intrusion Prevention System stops malware from being installed&lt;/li&gt;&lt;li&gt;Free Download. No charges or license fees ever&lt;/li&gt;&lt;li&gt;Powerful and intuitive Security Rules Interface&lt;/li&gt;&lt;li&gt;'Smart' Popup Alerts&lt;/li&gt;&lt;li&gt;Application Behavior Analysis&lt;/li&gt;&lt;li&gt;Automatic 'Firewall Training' mode&lt;/li&gt;&lt;li&gt;Windows Security Center Integration&lt;/li&gt;&lt;li&gt;Self Protection against Critical Process Termination&lt;/li&gt;&lt;li&gt;Application Recognition Database&lt;/li&gt;&lt;li&gt;Automatic Updates&lt;/li&gt;&lt;li&gt;Improved Firewall Event Logging&lt;/li&gt;&lt;li&gt;Submit Suspicious Files to Comodo&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;strong&gt;System Requirements (version 3.9)&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Windows XP - 32 and 64 bit versions&lt;/li&gt;&lt;li&gt;Windows Vista - 32 and 64 bit versions&lt;/li&gt;&lt;li&gt; 64 Mb RAM&lt;/li&gt;&lt;li&gt; 50 Mb free disk space&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;You can&lt;a href="http://www.personalfirewall.comodo.com/benefits.html"&gt; read more about the benefits Comodo Firewall here&lt;/a&gt;.&lt;br /&gt;You can &lt;a href="http://www.personalfirewall.comodo.com/"&gt;download Comodo Personal Firewall here.&lt;/a&gt;&lt;br /&gt;&lt;h3&gt;ZoneAlarm&lt;/h3&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-V9NJs2HQRbg/Te2IyrskRHI/AAAAAAAAAD8/kG7Gx5rh8Yw/s1600/ZoneAlarm-Free_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-V9NJs2HQRbg/Te2IyrskRHI/AAAAAAAAAD8/kG7Gx5rh8Yw/s400/ZoneAlarm-Free_3.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;ZoneAlarm started as a free only firewall, but experienced significant success and rapidly evolved into a Pro verison. I have used ZoneAlarm on my personal computers for years, with great results. When gathering links for this article, I realized it's become pretty difficult to find the free for persoanla use version. It seems that ZoneLabs (the maker of ZoneAlarm) has gotten aggressive in promoting their professional (read: not-free) version. so far, the actual software has remained ad free, so I can't complain too much.&lt;br /&gt;&lt;br /&gt;Features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Systematically identifies hackers and blocks access attempts&lt;/li&gt;&lt;li&gt;Automatically makes your computer invisible to anyone on the Internet (Stealth Mode)&lt;/li&gt;&lt;li&gt;Intrusion Blocking systematically identifies hackers and blocks access attempts.&lt;/li&gt;&lt;li&gt;Stealth Mode automatically makes your computer invisible to anyone on the Internet.&lt;/li&gt;&lt;li&gt;Automatic Program Configuration provides safety and simplicity by automatically configuring programs. Automatically decides whether to allow or deny Internet access to individual programs.&lt;/li&gt;&lt;li&gt;Expert Controls give savvy users precise control over security settings.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;You can &lt;a href="http://www.zonealarm.com/store/content/company/products/znalm/freeDownload.jsp"&gt;download ZoneAlarm Free here.&lt;/a&gt;&lt;br /&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;br /&gt;As I said, I've used ZoneAlarm for years and love it. I have only been using Comodo for a little over a year on my laptop and have had no problems with it.&lt;br /&gt;&lt;br /&gt;The only downside to both is that the learning mode can be confusing for inexperienced users. Often times a popup will display asking the user if they want to allow application XYZ to act as a server. Most inexperienced users don't know what the hell that means and can get flustered. What I've done is after installing the firewall, I run all known internet user apps (browser, IM chat, anti-virus update, email, etc...) to "teach" the firewall that these are certified apps. After that, I tell the user (usually a relative or close friend) if it prompts you in the future click "no" or call me.&lt;br /&gt;&lt;br /&gt;Comodo advertises "Comodo Firewall  offers the highest levels of perimeter security against inbound and outbound threats" I tend to believe them only because I've found that comodo prompts me WAY more than Zonealarm. It seems that Comodo distinguishes how a url was requested by a browser. For example, if the user clicks a link from a word doc, then Comodo will interrupt and inform the user that another application has requested the browser load ".. www.abc.com..." This is great for experienced users, but will definitely be too much for the inexperenced grandma looking to chat with the grand kids... In that situation, I would recommend ZoneAlarm.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-3073944629559252421?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/3073944629559252421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/07/free-firewall-recommendations-protect_30.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/3073944629559252421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/3073944629559252421'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/07/free-firewall-recommendations-protect_30.html' title='Free Firewall Recommendations (Protect Yourself Online With These FreeFirewalls)'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-SqeQor9Iq-w/Te2IZsA2J7I/AAAAAAAAAD4/rZ4dn_JbaqQ/s72-c/comodofw.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-2343260504652557551</id><published>2009-07-28T06:10:00.002-04:00</published><updated>2011-06-01T22:28:21.017-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Free'/><title type='text'>Are Free Antivirus and Firewall Products Really Any Good?</title><content type='html'>There was a time in my life when I used security and protection suites like Norton and McAfee, but after a while I grew unsatisfied with them.&lt;br /&gt;&lt;br /&gt;"&lt;em&gt;&lt;strong&gt;But Norton and McAfee are giants in the industry that pack every last bit of there software with features users never dreamed of! What more could you want?&lt;/strong&gt;&lt;/em&gt;", I hear you ask.&lt;br /&gt;&lt;br /&gt;Well, that's kind of the point. Over the years, software suites like these just continued full speed down the road to bloatware. They kept accumulating features like a snowball rolling down hill. They've got features and functionality I never used, and don't really need quite frankly. Often times the system tuning and performance components just sat idle, using my system's increasingly valuable and every more rare RAM. &lt;br /&gt;&lt;br /&gt;I did what most people do, I suppose. I bitched incessantly about paying for features I didn't use, didn't want, and worst of all had to actively work at removing from my system! Most times that wasn't even an option, since everything threaded together in a tight knot, with system failure at every turn so  that you couldn't pick and choose the features you needed without having all the needless bloat to go along with it.&lt;br /&gt;&lt;br /&gt;Then I realized that some other bright people were experiencing the same headaches and were in a position to do something about it. What they did was create their own programs to solve each discrete problem. In other words my friends, say farewell to bloatware!&lt;br /&gt;&lt;br /&gt;So now I assemble a patch work of software products that do what I need. They do one thing, and do it well. I use one free program for firewall protection, another free program for virus protection, and various other applications for system tuning and performance, spyware, etc....&lt;br /&gt;&lt;br /&gt;I admit, I was hesitant at first. I had questions about how safe and effect these products were. I thought that they couldn't be that good if they were free. Why would someone (or a company) produce software for free if other companies could make $40+ selling it?&lt;br /&gt;&lt;br /&gt;Well, the answer is pretty simple. Makers of Comodo, and ZoneAlarm (my firewall products) as well as AVG Antivirus make money on the professional versions of their software as well as business users. &lt;br /&gt;&lt;br /&gt;The general idea is that they offer a fully functional version free for personal use, and a different version with more features for a price. So far, with Comodo, ZoneAlarm, and AVG Antivirus I have been very satisfied with the performance and feature set of the free versions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-2343260504652557551?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/2343260504652557551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/07/are-free-antivirus-and-firewall_28.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/2343260504652557551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/2343260504652557551'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/07/are-free-antivirus-and-firewall_28.html' title='Are Free Antivirus and Firewall Products Really Any Good?'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-5053724954925597777</id><published>2009-07-23T18:06:00.004-04:00</published><updated>2011-06-06T22:06:40.640-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips Tricks and Tweaks'/><category scheme='http://www.blogger.com/atom/ns#' term='disk thrash'/><category scheme='http://www.blogger.com/atom/ns#' term='SMS Host Agent'/><category scheme='http://www.blogger.com/atom/ns#' term='ccmexec.exe'/><title type='text'>How To Control Disk Thrash From ccmexec.exe (SMS Agent).</title><content type='html'>Today started like any other day at work. I sat down, logged into my PC and was greeted by the thrashing sound of my hard drive. I've come to realize that the bottleneck in my work PC is by far the hard drive. I don't need any bench marking software, I simple try to access a file or two. Sometimes, I simply open windows explorer and wait.&lt;br /&gt;&lt;br /&gt;I finally got so disgusted I fired up &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Ftechnet.microsoft.com%2Fen-us%2Fsysinternals%2Fbb896645.aspx&amp;amp;ei=3SpmStOoB5HOM5C0tJQB&amp;amp;usg=AFQjCNHXuPMlMQXHYI8SttVVq34x3eOhYw"&gt;procman&lt;/a&gt; and dug through the activity to find the culprit.&lt;br /&gt;&lt;br /&gt;I had to scroll down to the bottom of a couple thousand lines of activity before I saw a clear pattern, but lo and behold what I saw was incredible!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;There were literally thousands of disk writes to my pagefile - and all I had done was log in!&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The bizarre part was that the files being read and written to the swap file were &lt;strong&gt;files I was not touching&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;I saw that the process performing all this thrashing was something called "ccmexec.exe". I'd actually never heard of this process, but after some quick googling I discovered its the exe for the SMS Agent service.&lt;br /&gt;&lt;br /&gt;This service (the&amp;nbsp; Systems Management Server service) performs an indexing or cataloging of all the files on the disk so that windows update will have the latest info on versions of OS files that may need patching. Sounds great, but I'm not sure it's worth the cost considering the downtime and aggravation I experience waiting for this thing to chew through my 150GB drive.&lt;br /&gt;&lt;br /&gt;My first instinct was to disable the service in the services control panel applet, but I figured that the corporate IT staff would eventually get a tad upset when they realized my system didn't have the latest patches installed because I disabled the service.&lt;br /&gt;&lt;br /&gt;So, I was faced with my own &lt;a href="http://www.google.com/url?sa=t&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FKobayashi_Maru&amp;amp;ei=my1mSqmkMpXANoD3vJkB&amp;amp;rct=j&amp;amp;q=kobayashi+maru&amp;amp;usg=AFQjCNEEZGcPKn0fUKtXd9Qj76OudtTQ2A"&gt;kobayashi maru scenario&lt;/a&gt; : I was ineffective while this thing chewed threw my file system, but I couldn't disable the service without sending up corporate red flags that I was a bad citizen.&lt;br /&gt;&lt;br /&gt;Then I hit on a solution - a scheduled task to ensure the service did run, just not when I was busy working. I actually used two batch files, one for each task of starting and stopping the service.&lt;br /&gt;&lt;br /&gt;Open up notepad (or your text editor of choice), and type the following:&lt;br /&gt;&lt;blockquote&gt;net start CcmExec&lt;/blockquote&gt;&lt;br /&gt;save the file as &lt;em&gt;"SMS Agent start.bat"&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now, start a new text file and enter:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;net stop CcmExec&lt;/blockquote&gt;&lt;br /&gt;save the file as &lt;em&gt;"SMS Agent stop.bat"&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Note: &lt;/strong&gt;you can also replace "net" with "sc", to use the newer Service Control manager command line tool.&lt;br /&gt;&lt;br /&gt;Then, set the startup type of the SMS Agent Host service to "Manual" in the services control panel applet.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-W_v6WIqfK8E/Te2HQpeR9XI/AAAAAAAAADw/7-vGG87IT7E/s1600/SMS+Svc.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/-W_v6WIqfK8E/Te2HQpeR9XI/AAAAAAAAADw/7-vGG87IT7E/s640/SMS+Svc.jpg" width="374" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Next, create a scheduled task to run after hours that runs the "SMS Agent start.bat" file, and another task that runs the&amp;nbsp; "SMS Agent stop.bat" before you get into the office.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-iZPrqOPTXhA/Te2HiCRmi5I/AAAAAAAAAD0/p_l-alK3wGI/s1600/SMS+Scheduler.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="155" src="http://1.bp.blogspot.com/-iZPrqOPTXhA/Te2HiCRmi5I/AAAAAAAAAD0/p_l-alK3wGI/s400/SMS+Scheduler.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The best of both worlds - you remain productive and a good corporate citizen (after hours)!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-5053724954925597777?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/5053724954925597777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/07/how-to-control-disk-thrash-from_23.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/5053724954925597777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/5053724954925597777'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/07/how-to-control-disk-thrash-from_23.html' title='How To Control Disk Thrash From ccmexec.exe (SMS Agent).'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-W_v6WIqfK8E/Te2HQpeR9XI/AAAAAAAAADw/7-vGG87IT7E/s72-c/SMS+Svc.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-239038082517565984</id><published>2009-07-21T17:59:00.002-04:00</published><updated>2011-06-06T21:58:48.638-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><category scheme='http://www.blogger.com/atom/ns#' term='iterative'/><category scheme='http://www.blogger.com/atom/ns#' term='methodology'/><title type='text'>Lessons in Software Development From the Apollo Moon Missions.</title><content type='html'>&lt;div style="float:none;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-TT1m-NwMLEA/Te2FOi0n_sI/AAAAAAAAADs/LLIj3yhZYcI/s1600/Apollo11_Launch.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-TT1m-NwMLEA/Te2FOi0n_sI/AAAAAAAAADs/LLIj3yhZYcI/s400/Apollo11_Launch.jpg" width="291" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Monday was the 40th anniversary of the Apollo 11 lunar landing. The story of the Apollo program is an historic and inspirational one, but it's also relevant to software development.&lt;br /&gt;&lt;br /&gt;To understand the significance of the Apollo program from an engineering standpoint, we must begin at the beginning...&lt;br /&gt;Gus Grissom, Ed White and Roger B. Chaffee were killed on the launch pad when the Apollo 1 capsule burst into flames just prior to the launch test. What happened? Well, &lt;a href="http://en.wikipedia.org/wiki/Apollo_1"&gt;according to Wikipedia&lt;/a&gt; (I know, far from an unimpeachable source, but bear with me here):&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;"Although the ignition source of the fire was never conclusively identified, the astronauts' deaths were attributed to a wide range of lethal design hazards in the early Apollo command module. Among these were the use of a high-pressure 100 percent-oxygen atmosphere for the test, wiring and plumbing flaws, flammable materials in the cockpit (such as Velcro), an inward-opening hatch that would not open in this kind of an emergency and the flight suits worn by the astronauts."&lt;/blockquote&gt;&lt;br /&gt;In short, no one knows for sure what specifically caused the fire, but everyone agrees that some fundamental errors led to the conditions (whatever they ultimately were).&lt;br /&gt;&lt;br /&gt;what really went wrong was at the planning and design stage. NASA was in such a rush to make up lost time in the space race with the USSR, that they got cocky after early successes, cut corners and went full bore toward a fully manned, Apollo capsule before they were really ready.&lt;br /&gt;&lt;br /&gt;The precursor missions to Apollo were the Mercury and Gemini projects. These projects had highly specific mission statements and each was directed toward a discrete piece of the overall lunar landing mission. Project Mercury was directed toward getting a man into space, and back again. The goal of project Gemini  was to perform extra-vehicular activity (pre-cursor to space walk), and docking maneuvers.&lt;br /&gt;&lt;br /&gt;NASA began the mission to the moon with an iterative approach, but switch to a more waterfall like approach where they tried to construct a whole new capsule module from scratch, with the intent of landing on the moon and returning. &lt;strong&gt;They used the knowledge gained from the earlier Mercury and Gemini projects, but constructed new - and untested - equipment for Apollo.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The parallel to software development is using an iterative approach to develop phase I of a project, only to throw it away and start over on phase II. The whole purpose of the iterative approach is to focus on small, achievable parts of a greater whole to maintain momentum but also to limit what must be tested and hence limit (theoretically) the universe of possible bugs.&lt;br /&gt;&lt;br /&gt;I think the 2 most important software development lessons we can learn from the Mercury, Gemini and Apollo missions are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;To be successful, have clear and concise mission objectives (goals).&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Start small, and build on each success.&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;This is what made the Gemini and Mercury missions so successful, and ultimately made Apollo 11 possible and it will drastically improve the odds of your next software project being a success as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-239038082517565984?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/239038082517565984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/07/lessons-in-software-development-from_21.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/239038082517565984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/239038082517565984'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/07/lessons-in-software-development-from_21.html' title='Lessons in Software Development From the Apollo Moon Missions.'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-TT1m-NwMLEA/Te2FOi0n_sI/AAAAAAAAADs/LLIj3yhZYcI/s72-c/Apollo11_Launch.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-9164520487540320678</id><published>2009-07-17T06:13:00.001-04:00</published><updated>2011-05-28T14:39:42.221-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='steganography'/><category scheme='http://www.blogger.com/atom/ns#' term='cryptography'/><category scheme='http://www.blogger.com/atom/ns#' term='Miscellaneous'/><title type='text'>Fun with Cryptography</title><content type='html'>Here's a little Friday fun from Monty at &lt;a href="http://www.mr01001101.co.uk/"&gt;MR01001101.&lt;br/&gt;&lt;br/&gt;&lt;/a&gt;He's got Cryptography and Steganography essays and, here's the fun bit, puzzles that take the user through a chain of tests through his site.&lt;br/&gt;&lt;br/&gt;Puzzles range from simple alphabetic substitution to symbolic images to Egyptian hieroglyphs. Fun stuff, and it'll give your brain a workout too.&lt;br/&gt;&lt;br/&gt;Wonder what's behind the cryptic sounding name of MR01001101 ? Well, it's not as mysterious as it sounds:&lt;br/&gt;&lt;br/&gt;&lt;blockquote&gt;&lt;br/&gt;"Why 01001101? It is binary for M and it arrived when I signed up for my first geocities site drunk. I also bought this domain intoxicated. Will I ever learn?"&lt;br/&gt;&lt;br/&gt;&lt;/blockquote&gt;&lt;br/&gt;&lt;br/&gt;:-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-9164520487540320678?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/9164520487540320678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/07/fun-with-cryptography_17.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/9164520487540320678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/9164520487540320678'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/07/fun-with-cryptography_17.html' title='Fun with Cryptography'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-6946305909659773507</id><published>2009-07-14T06:53:00.001-04:00</published><updated>2011-06-01T22:22:27.031-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='analysis'/><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><category scheme='http://www.blogger.com/atom/ns#' term='methodology'/><title type='text'>The 3 Most Important Questions You Should Ask About Each Bug You Find.</title><content type='html'>I stumbled upon (&lt;a href="http://www.stumbleupon.com/"&gt;quite literally&lt;/a&gt;) an article by Tom Van Vleck titled &lt;a href="http://www.multicians.org/thvv/threeq.html"&gt;&lt;em&gt;Three Questions About Each Bug You Find&lt;/em&gt;&lt;/a&gt; today, and thought I would share it:&lt;br/&gt;&lt;blockquote&gt;"The key idea behind these questions is that every bug is a symptom of an underlying process. You have to treat the symptoms, but if all you do is treat symptoms, you'll continue to see more symptoms forever. You need to find out what process produced the bug and change the process. The underlying process that caused your bug is probably non-random and can be controlled, once you identify what happened and what caused it to happen."&lt;/blockquote&gt;&lt;br/&gt;Tom uses these questions to get to the heart of the matter and weed out the root cause of the bug.&lt;br/&gt;&lt;h3&gt;1. Is this mistake somewhere else also?&lt;/h3&gt;&lt;br/&gt;You want to know if this bug was unique, or due to a problem in a pattern of approach to the specific problem. If it's unique, you can move on to the next question, but if it's systemic, you'll need to address your approach to the development problem the code was intended to solve and devise a new pattern or correct the one in place.&lt;br/&gt;&lt;h3&gt;2. What next bug is hidden behind this one?&lt;/h3&gt;&lt;br/&gt;Often times a bug will either halt the execution of code, or cause the lines after the bug to be bypassed. once you fix the bug, those other lines of code will begin to execute. Be sure to check those for any bugs. Also, consider whether your fix to this bug could cause any new bugs to be introduced.&lt;br/&gt;&lt;h3&gt;3. What should I do to prevent bugs like this?&lt;/h3&gt;&lt;br/&gt;Learn from this mistake. Could the problem be avoided by adding a new test condition to your NUnit test(s)? Should you implement a change to your pattern to check for null reference or out of bounds exceptions sooner? Bugs happen, but if you can use them as teachable moments and learn from them, then they will at least provide some value and make you less likely to run into the same bug in the future.&lt;br/&gt;&lt;br/&gt;It's not always an easy process, mostly because it requires a sort of detached introspection and willingness to be critical and objective when looking at your work. These character traits are not always in high supply, and we humans can often get in the way, but if you can master these techniques you will go far young padawan.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-6946305909659773507?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/6946305909659773507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/07/3-most-important-questions-you-should_14.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/6946305909659773507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/6946305909659773507'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/07/3-most-important-questions-you-should_14.html' title='The 3 Most Important Questions You Should Ask About Each Bug You Find.'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-6427030401267985706</id><published>2009-07-09T05:47:00.002-04:00</published><updated>2011-06-01T22:28:35.199-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Operating Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Google Chrome: the OS.</title><content type='html'>Google announced last Tuesday that it has its sights on &lt;a href="http://finance.yahoo.com/news/Googles-new-operating-system-apf-3422727478.html?x=0&amp;sec=topStories&amp;pos=3&amp;asset=&amp;ccode="&gt;dethroning Microsoft as desktop OS king&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"The new operating system, announced late Tuesday night on Google's Web site, will be based on the company's nine-month-old Web browser, Chrome. Google intends to rely on help from the community of open-source programmers to develop the Chrome operating system, which is expected to begin running computers in the second half of 2010."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Google is focusing on the Netbook market, which is a smart first step. I'm not sure how successful they will ultimately be beyond that though. Netbooks are perfectly suited to a browser based OS - they've got inherently less RAM and CPU power and are targeted specifically to the Internet/e-mail user. I don't see any wholesale switch from Windows anytime soon for one of Microsoft's major demographics - business users.&lt;br /&gt;&lt;br /&gt;Also, gamers and developer are likely to stay with Linux and Windows, at least for the time being. But, having said that, Google's OS is built on Linux, so there probably wouldn't be that big a change from, say Ubunto to Chrome (or whatever they end up calling it)..&lt;br /&gt;&lt;br /&gt;Of course, I'll still have to give it a try when it comes out... just for curiosity's sake! ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-6427030401267985706?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/6427030401267985706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/07/google-chrome-os_09.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/6427030401267985706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/6427030401267985706'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/07/google-chrome-os_09.html' title='Google Chrome: the OS.'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-1048569269193255631</id><published>2009-07-07T06:50:00.002-04:00</published><updated>2011-06-06T21:54:38.602-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips Tricks and Tweaks'/><category scheme='http://www.blogger.com/atom/ns#' term='registry hack'/><category scheme='http://www.blogger.com/atom/ns#' term='folder view'/><title type='text'>Dude, Where's my Folder treeview?!</title><content type='html'>After a wee bit O' overzealous registry cleaning last week, I had a minor panic. Well, a picture being worth a 1000 words, here's what I saw when I opened windows explorer:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-9xcChx8QAe0/Te2DWuLNfXI/AAAAAAAAADk/87qLxUYGUUQ/s1600/Dude%252C+Missing+folder+treeview.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="443" src="http://1.bp.blogspot.com/-9xcChx8QAe0/Te2DWuLNfXI/AAAAAAAAADk/87qLxUYGUUQ/s640/Dude%252C+Missing+folder+treeview.gif" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The good news (I suppose) is that I knew the instant I hit the Delete key that I had selected the wrong key. The bad news was that I had no way of finding out what key that was.&lt;br /&gt;&lt;br /&gt;So, I did some Googling for various permutations of "missing windows explorer folder treeview" and eventually stumble upon the following registry edit:&lt;br /&gt;&lt;strong&gt;&lt;code&gt;&lt;br /&gt;REGEDIT4&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[HKEY_CLASSES_ROOT\CLSID\{EFA24E64-B078-11d0-89E4-00C04FC9E26E}]&lt;br /&gt;@="Explorer Band"&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[HKEY_CLASSES_ROOT\CLSID\{EFA24E64-B078-11d0-89E4-00C04FC9E26E}\InProcServer32]&lt;br /&gt;@="C:\\WINNT\\SYSTEM32\\SHDOCVW.DLL"&lt;br /&gt;"ThreadingModel"="Apartment"&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[HKEY_CLASSES_ROOT\CLSID\{EFA24E64-B078-11d0-89E4-00C04FC9E26E}\Implemented Categories]&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[HKEY_CLASSES_ROOT\CLSID\{EFA24E64-B078-11d0-89E4-00C04FC9E26E}\Implemented Categories\{00021493-0000-0000-C000-000000000046}]&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I saved that to a new notepad document, saved it with an ".reg" extension and double-clicked it. Voila, my missing treeview returned!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-DQusNMSrO1E/Te2Dj8WWlAI/AAAAAAAAADo/ZWz8QIDkNzo/s1600/Dude%252C+Missing+folder+treeview+after.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-DQusNMSrO1E/Te2Dj8WWlAI/AAAAAAAAADo/ZWz8QIDkNzo/s1600/Dude%252C+Missing+folder+treeview+after.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;It sure beats reinstalling the OS for something so simple.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-1048569269193255631?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/1048569269193255631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/07/dude-where-my-folder-treeview_07.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/1048569269193255631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/1048569269193255631'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/07/dude-where-my-folder-treeview_07.html' title='Dude, Where&amp;#39;s my Folder treeview?!'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-9xcChx8QAe0/Te2DWuLNfXI/AAAAAAAAADk/87qLxUYGUUQ/s72-c/Dude%252C+Missing+folder+treeview.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-6440782107899055500</id><published>2009-06-30T15:40:00.001-04:00</published><updated>2011-06-01T22:22:27.033-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>10 Useful, Often Overlooked HTML Tags.</title><content type='html'>&lt;strong&gt;Pop quiz: &lt;/strong&gt;When would you use the &lt;code&gt;&amp;lt;wbr&amp;gt; &lt;/code&gt; tag, and what does it do?&lt;br/&gt;&lt;br/&gt;Yeah, I had no idea either. In fact, I had never even seen this tag before, but it's a list of &lt;a href="http://net.tutsplus.com/articles/web-roundups/10-rare-html-tags-you-really-should-know"&gt;10 Rare HTML Tags You Really Should Know&lt;/a&gt; from Nettuts+&lt;br/&gt;&lt;br/&gt;I have to say that most of these I hadn't heard of, but they are actually quite useful. Granted, I do most of my work in the .NET code behind and middle ware layers, but I do occasionally get to sling a bit of HTML, and I think I may start using some of these...&lt;br/&gt;&lt;br/&gt;Oh, I almost forgot - the &lt;code&gt;&amp;lt;wbr&amp;gt; &lt;/code&gt; tag allows you to specify a place where you think a line break might be useful, if needed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-6440782107899055500?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/6440782107899055500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/06/10-useful-often-overlooked-html-tags_30.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/6440782107899055500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/6440782107899055500'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/06/10-useful-often-overlooked-html-tags_30.html' title='10 Useful, Often Overlooked HTML Tags.'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-4064420324231297628</id><published>2009-06-25T05:26:00.006-04:00</published><updated>2011-06-06T21:39:27.742-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Thunderbird'/><category scheme='http://www.blogger.com/atom/ns#' term='portable apps'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips Tricks and Tweaks'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Annoying "next message" behavior in Thunderbird, and how to stop it!</title><content type='html'>I love the Thunderbird email client. I use &lt;a href="http://portableapps.com/news/2009-06-22_-_thunderbird_portable_2.0.0.22"&gt;the portable version &lt;/a&gt;on my thumb drive, but one thing has always bugged the hell out of me when I use it: whenever I delete an email that I have opened in a popup window, &lt;strong&gt;Thunderbird automatically opens the next message.&lt;/strong&gt; Most of the quasi-official entries on the forums state that this is the default behavior, and how 90% of email users use the app anyway, so there is no simple check box for disabling the "feature".&lt;br /&gt;&lt;br /&gt;I must be an odd duck then, because it is most certainly not how I use my email client. I distinctly remember disabling the annoying feature in older versions of Outlook Express. Well, I am the type who will not be denied. I go through great pains to get around such roadblocks - out of principle alone!&lt;br /&gt;&lt;br /&gt;So I went digging and found many dead ends, and tips &amp;amp; tricks pages that proved to be unrelated. A lot of forums suggest things like adding the delete button to the toolbar, but that only works if you delete it from the main window. I want to read the email first, then delete it. Reading, closing (clicking the "X") then deleting seems more tedious than necessary.&lt;br /&gt;&lt;br /&gt;Then I found &lt;a href="https://addons.mozilla.org/en-US/thunderbird/addon/1397"&gt;this handy add-on&lt;/a&gt;. Only one problem: it was for pre 2.0 versions of Thunderbird. The solution: &lt;a href="http://www.ghacks.net/2008/01/07/dont-jump-to-next-message-in-thunderbird-automatically/"&gt;How to hack the add-on to make it work in 2.0+&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Open the install.rdf file, and locate the MaxVersion key:&lt;/strong&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ZH1gaCp_eKw/Te2AWny0meI/AAAAAAAAADc/dr_Y3QqmYts/s1600/Annoying+next+message+behavior+in+Thunderbird_Unselect+Message+Thunderbird+add-on+install_before.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-ZH1gaCp_eKw/Te2AWny0meI/AAAAAAAAADc/dr_Y3QqmYts/s1600/Annoying+next+message+behavior+in+Thunderbird_Unselect+Message+Thunderbird+add-on+install_before.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Then change the 1.6 to 2.1, like so:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-MC-sdggh8DA/Te2AfSOgsRI/AAAAAAAAADg/n1clWsnuVLE/s1600/Annoying+next+message+behavior+in+Thunderbird_Unselect+Message+Thunderbird+add-on+install_after.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-MC-sdggh8DA/Te2AfSOgsRI/AAAAAAAAADg/n1clWsnuVLE/s1600/Annoying+next+message+behavior+in+Thunderbird_Unselect+Message+Thunderbird+add-on+install_after.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;and voila!&lt;br /&gt;&lt;br /&gt;Sweet!&lt;br /&gt;&lt;br /&gt;It's worked great ever since, and I no longer curse Thunderbird. For automatically advancing to the next message, anyway. ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-4064420324231297628?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/4064420324231297628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/06/annoying-message-behavior-in_25.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/4064420324231297628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/4064420324231297628'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/06/annoying-message-behavior-in_25.html' title='Annoying &amp;quot;next message&amp;quot; behavior in Thunderbird, and how to stop it!'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-ZH1gaCp_eKw/Te2AWny0meI/AAAAAAAAADc/dr_Y3QqmYts/s72-c/Annoying+next+message+behavior+in+Thunderbird_Unselect+Message+Thunderbird+add-on+install_before.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-4499843468096602191</id><published>2009-06-23T06:36:00.013-04:00</published><updated>2011-06-01T22:22:27.034-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='vb.net'/><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Treeview'/><category scheme='http://www.blogger.com/atom/ns#' term='Webcontrol'/><title type='text'>How to fake a TreeNodeCollection subclass in .NET</title><content type='html'>If you've ever had reason to try to extend the standard Microsoft web TreeView control, you will have no doubt noticed that MS was quite unkind to you and sealed (or declared NotInheritable for you VB.NET types) the System.Web.UI.WebControls.TreeNodeCollection class.&lt;br /&gt;&lt;br /&gt;The problem arises when you want to overload the default behavior that is implemented by the TreeNodeCollection class. For example, when a node was added to my TreeView class (via the TreeView.Nodes.add method), I needed to be able to analyze it for the ultimate purpose of my subclass.&lt;br /&gt;&lt;br /&gt;However, this was not possible because the TreeNodeCollection class is sealed, so I wasn't able to inherit from it and overload the add method behavior as I should have been able to do.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;There are always possibilities.&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Anyone who knows me knows I don't give up easily (if ever), and I eventually plowed through many false starts but hit upon a solution.&lt;br /&gt;&lt;br /&gt;I decided to wrap the underlying TreeNodeCollection class with my own, and overload the Nodes property on the TreeView class, and the ChildNodes property on the TreeNode class.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;The Wrapper.&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Here's what the wrapper looks like:&lt;br /&gt;&lt;pre class="brush:vb"&gt;Public Class MyTreeNodeCollection&lt;br /&gt;&lt;br /&gt;  Private mtvwChildNodes As System.Web.UI.WebControls.TreeNodeCollection&lt;br /&gt;  Private mMyTreeViewOwner As IMyNodeContainer&lt;br /&gt;&lt;br /&gt;  Public Sub New(ByVal Owner As IMyNodeContainer, _&lt;br /&gt;       ByVal TreeViewChildren As System.Web.UI.WebControls.TreeNodeCollection)&lt;br /&gt;     mtvwChildNodes = TreeViewChildren&lt;br /&gt;     mMyTreeViewOwner = Owner&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Public Sub Add(ByVal child As MyTreeNode)&lt;br /&gt;     mtvwChildNodes.Add(CType(child, System.Web.UI.WebControls.TreeNode))&lt;br /&gt;     mMyTreeViewOwner.RegisterNodeForLookup(child)&lt;br /&gt;  End Sub&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As you can see, the constructor takes the real, underlying TreeNodeCollection to pass all node to prior to being "registered" (analyzed). It also takes something that implements the IMyNodeContainer interface. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;The IMyNodeContainer interface.&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;I had to implement this because I wanted to be able to use this wrapper class for both TreeView and TreeNode objects, but the signature of their properties is different - TreeView.Nodes and TreeNode.ChildNodes, respectively. So I opted for the interface to keep things clean. &lt;br /&gt;&lt;br /&gt;Here's what the interface looks like:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:vb"&gt;Public Interface IMyNodeContainer&lt;br /&gt;&lt;br /&gt;    Sub RegisterNodeForLookup(ByVal node As MyTreeNode)&lt;br /&gt;    ReadOnly Property Nodes() As MyTreeNodeCollection&lt;br /&gt;&lt;br /&gt;End Interface&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;Wrapping things up.&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;This is where the magic happens.&lt;br /&gt;&lt;br /&gt;To put the wrapper (MyTreeNodeCollection) in place, I overload the collection getting properties in the base class -  TreeView.Nodes and TreeNode.ChildNodes, respectively, like so:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:vb"&gt;Public Overloads ReadOnly Property Nodes() As MyTreeNodeCollection Implements IMyNodeContainer.Nodes&lt;br /&gt;  Get&lt;br /&gt;    Return mNodeCollection&lt;br /&gt;  End Get&lt;br /&gt;End Property&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So, for those of you playing along at home, when the developer calls .Nodes on an instance of MyTreeView class, an instance of MyTreeNodeCollection is returned and the resulting add method in performed on the underlying TreeNodeCollection, thusly:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:vb"&gt;Public Sub Add(ByVal child As MyTreeNode)&lt;br /&gt;    mtvwChildNodes.Add(CType(child, System.Web.UI.WebControls.TreeNode))&lt;br /&gt;    mMyTreeViewOwner.RegisterNodeForLookup(child)&lt;br /&gt;End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You can see why I had to use the IMyNodeContainer interface here. The RegisterNodeForLookup performs the functionality I was originally trying to subclass the TreeNodeCollection for.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-4499843468096602191?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/4499843468096602191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/06/how-to-fake-treenodecollection-subclass_23.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/4499843468096602191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/4499843468096602191'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/06/how-to-fake-treenodecollection-subclass_23.html' title='How to fake a TreeNodeCollection subclass in .NET'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-6500759317116141840</id><published>2009-06-16T05:14:00.008-04:00</published><updated>2011-06-06T20:08:05.924-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Treeview'/><category scheme='http://www.blogger.com/atom/ns#' term='Reflector'/><category scheme='http://www.blogger.com/atom/ns#' term='Important'/><category scheme='http://www.blogger.com/atom/ns#' term='Webcontrol'/><category scheme='http://www.blogger.com/atom/ns#' term='subclass'/><title type='text'>IE7 WebControl TreeView line gap in quirks mode.</title><content type='html'>I've been writing a subclass of the MS Webcontrol.TreeView control for one of our Web Applications at work. I figured this would be a fairly easy task, since I only needed to extended it with a few properties. It turns out that I was caught on a nit-picky annoyance in the TreeView control itself.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;The TreeView control renders verticals lines with gaps.&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Here's a screen cap of the problem.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-H4qf8ZIAYI8/Te1raN3I1EI/AAAAAAAAADM/6luL3kYuPXI/s1600/IE7+WebControl+TreeView+line+gap+in+quirks+mode_Treeview+line+break.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/-H4qf8ZIAYI8/Te1raN3I1EI/AAAAAAAAADM/6luL3kYuPXI/s640/IE7+WebControl+TreeView+line+gap+in+quirks+mode_Treeview+line+break.jpg" width="523" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://www.mylifeincode.com/wp-content/uploads/2009/06/ie7-webcontrol-treeview-line-gap-in-quirks-mode_treeview-line-break.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you can see, the TreeView control renders the vertical line with a gap, or break (looks like a dashed line!). It didn't matter how I loaded the data - dynamic/runtime/design time - I get the same gap no matter what!&lt;br /&gt;&lt;br /&gt;I was able to see that it was not a problem in IE 6 or less, but what good is that? Well, it turns out that it was a bit of a clue because starting with version 5, IE didn't render things correctly per the CSS boxing specification. This was fixed in IE 7, but to provide backwards compatibility, Microsoft carried this busted form of rendering forward in IE 6 as &lt;a href="http://www.satzansatz.de/cssd/quirksmode.html"&gt;QuirksMode&lt;/a&gt;. The line gap problem only occurs in strict mode (default for IE 7 and 8, as well as firefox). I could make the line gap go away by forcing the browser into QuirksMode (by adding a comment, ex:&lt;br /&gt;&lt;br /&gt;&amp;lt; ! - - QUIRK! - - &amp;gt;&lt;br /&gt;&lt;br /&gt;to the very top of the HTML file), but I was writing a web control and would not always have the luxury of controlling my container. &lt;br /&gt;&lt;br /&gt;I needed to find a long term solution to this problem.&lt;br /&gt;&lt;br /&gt;Next, I looked at the HTML source of the rendered page, and saw this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: html"&gt;&amp;lt;table cellpadding="0" cellspacing="0" style="border-width:0;"&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&lt;br /&gt;&amp;lt;div style="width:20px;height:1px"&amp;gt;&lt;br /&gt;&amp;lt;img src="/TreeviewControlTest/WebResource.axd?d=OYmDnVppVECKIpxOWC8o8Y7DO6QwB2J3EY4s4RR8zAU1&amp;amp;amp;t=633765128008804061" alt=""&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&lt;br /&gt;&amp;lt;img src="/TreeviewControlTest/WebResource.axd?d=OYmDnVppVECKIpxOWC8o8UGy0bLoCc8gOB1oQm6Pzj81&amp;amp;amp;t=633765128008804061" alt=""&amp;gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td class="TreeView1_WebTree_1" style="white-space:nowrap;"&amp;gt;&lt;br /&gt;&amp;lt;a class="TreeView1_WebTree_0" href="javascript:__doPostBack('TreeView1$WebTree','Root//Tree')" onclick="TreeView_SelectNode(TreeView1_WebTree_Data, this,'TreeView1_WebTreet6');" id="TreeView1_WebTreet6" name="TreeView1_WebTreet6"&amp;gt;Tree&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Each node is rendered as a table, with the vertical line and expand/collapse icons being in their own table cell and wrapped in a div. The problem was the style applied to the outer div -  style="width:20px;&lt;b&gt;height:1px&lt;/b&gt;".&lt;br /&gt;&lt;br /&gt;That 1px height was causing the vertical line image to be compressed, but where did it come from?&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Reflecting on System.Web.UI.WebControls.TreeNode&lt;/h3&gt;&lt;br /&gt;I spent almost an hour delving into the various (and copious!) style properties for the tree and its nodes, looking for where this height setting was generating from. I couldn't find it! I eventually opened the System.Web.UI.WebControls.dll in Reflector to see what the render code for the node was doing:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-LXoYzpvICS0/Te1rpHWx15I/AAAAAAAAADQ/PmJwqq0boP4/s1600/IE7+WebControl+TreeView+line+gap+in+quirks+mode_Treeview+Reflector.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="155" src="http://1.bp.blogspot.com/-LXoYzpvICS0/Te1rpHWx15I/AAAAAAAAADQ/PmJwqq0boP4/s400/IE7+WebControl+TreeView+line+gap+in+quirks+mode_Treeview+Reflector.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://www.mylifeincode.com/wp-content/uploads/2009/06/ie7-webcontrol-treeview-line-gap-in-quirks-mode_treeview-reflector.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Well, once I saw that the code was hard-wired to render this CSS style, I was done. Or was I?&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;!important&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Well, it wasn't going to be as easy as setting the style in the code behind, but I could override the style in my own class.&lt;br /&gt;&lt;br /&gt;The trick is to define, and apply the following CSS class:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css"&gt;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;.MyTreeView TD Div&lt;br /&gt;{&lt;br /&gt;height: 20px!important; &lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The &lt;a href="http://www.w3.org/TR/CSS2/cascade.html#important-rules"&gt;!important CSS directive&lt;/a&gt; overrides the style applied in the System.Web.UI.WebControls.TreeNode render method.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ZD1TcjU0e4E/Te1rvYLVTMI/AAAAAAAAADU/pprt1u0LyqI/s1600/IE7+WebControl+TreeView+line+gap+in+quirks+mode_Treeview+no+line+break.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/-ZD1TcjU0e4E/Te1rvYLVTMI/AAAAAAAAADU/pprt1u0LyqI/s640/IE7+WebControl+TreeView+line+gap+in+quirks+mode_Treeview+no+line+break.jpg" width="524" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://www.mylifeincode.com/wp-content/uploads/2009/06/ie7-webcontrol-treeview-line-gap-in-quirks-mode_treeview-no-line-break.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Again, just as with the QuirksMode comment above, I was able to add the CSS style to the page and voila - problem solved. But this still wasn't good enough. I needed this to work out of the box for any consumers of my control.&lt;br /&gt;&lt;br /&gt;The ultimate answer was to override the RenderBeginTag of the TreeView control, and render this style before the control itself:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: vb"&gt;Public Overrides Sub RenderBeginTag(ByVal writer As System.Web.UI.HtmlTextWriter)&lt;br /&gt;'/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;'///  This is a total hack to get around some Microsoft BS which hardwires&lt;br /&gt;'///        a style attribute on the node div to set the height = 1px!&lt;br /&gt;'///&lt;br /&gt;'///    This renders a css override to force the div to the proper height&lt;br /&gt;'/////////&lt;br /&gt;Me.CssClass = String.Concat(Me.CssClass, " MyTreeView")&lt;br /&gt;writer.WriteBeginTag(HtmlTextWriterTag.Style.ToString)&lt;br /&gt;writer.WriteAttribute(HtmlTextWriterAttribute.Type.ToString, "text/css")&lt;br /&gt;writer.WriteLine(HtmlTextWriter.TagRightChar)&lt;br /&gt;writer.Write(".MyTreeView TD Div  ")&lt;br /&gt;writer.WriteLine("{ height: 20px!important; }")&lt;br /&gt;writer.WriteEndTag(HtmlTextWriterTag.Style.ToString)&lt;br /&gt;writer.WriteLine()&lt;br /&gt;'//////////////////////////////////////////////////&lt;br /&gt;&lt;br /&gt;'/// Render the Standard Begin Tag&lt;br /&gt;MyBase.RenderBeginTag(writer)&lt;br /&gt;End Sub&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/581740227571888189-6500759317116141840?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/6500759317116141840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/06/ie7-webcontrol-treeview-line-gap-in_16.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/6500759317116141840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/6500759317116141840'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/06/ie7-webcontrol-treeview-line-gap-in_16.html' title='IE7 WebControl TreeView line gap in quirks mode.'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-H4qf8ZIAYI8/Te1raN3I1EI/AAAAAAAAADM/6luL3kYuPXI/s72-c/IE7+WebControl+TreeView+line+gap+in+quirks+mode_Treeview+line+break.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-3174481475584791230</id><published>2009-06-11T12:15:00.004-04:00</published><updated>2011-06-06T20:04:11.410-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SVCHost.exe'/><category scheme='http://www.blogger.com/atom/ns#' term='DOS'/><category scheme='http://www.blogger.com/atom/ns#' term='Command line'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips Tricks and Tweaks'/><category scheme='http://www.blogger.com/atom/ns#' term='Services'/><title type='text'>How to find what's running under SVCHost.exe</title><content type='html'>My PC was behaving sluggishly the other day. I tried to be patient, but had to fire up the task manager when I could bear it no longer. That's when I noticed great gobs of my swap file allocated to "SVCHOST.EXE":&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-bGDj7HK3I4c/Te1qmEnxSDI/AAAAAAAAADI/yLfvDEtgOC8/s1600/What%2527s+running+under+SVCHost_exe_tasklist+ss.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-bGDj7HK3I4c/Te1qmEnxSDI/AAAAAAAAADI/yLfvDEtgOC8/s640/What%2527s+running+under+SVCHost_exe_tasklist+ss.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://www.mylifeincode.com/wp-content/uploads/2009/06/whats-running-under-svchost_exe_tasklist-ss.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The problem is, SVCHOST is a catch all windows service container. Meaning, many windows services run under the same instance of SVCHOST. How was I going to figure out which services might be the culprit?&lt;br /&gt;&lt;br /&gt;Enter the tasklist command.&lt;br /&gt;&lt;br /&gt;Tasklist displays info about running tasks, including SVCHOST.&lt;br /&gt;&lt;br /&gt;Simply running tasklist at the command prompt displays a laundry list of all running processes. This wasn't going to do it, so I ran it with the "/?" switch to try and find how to narrow the info...&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;/SVC &lt;/b&gt; Displays services hosted in each process.&lt;br /&gt;&lt;b&gt;/FI&lt;/b&gt; filter          Displays a set of tasks that match a given criteria specified by the filter.&lt;/blockquote&gt;&lt;br /&gt;Looks good so far, now I need to know what filter to apply:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;Filters:&lt;br /&gt;Filter Name     Valid Operators           Valid Value(s)&lt;br /&gt;-----------     ---------------           --------------------------&lt;br /&gt;IMAGENAME       eq, ne                    Image name&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;OK, this gives us:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"C:\&amp;gt;tasklist /svc /FI "IMAGENAME EQ SCVHOST.EXE"&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But it seems the filter is case sensitive, because when I run that command, I get this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;INFO: No tasks are running which match the specified criteria.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So, switching to lower case gives me what I want:&lt;br /&gt;&lt;blockquote&gt;"C:\&amp;gt;tasklist /svc /FI "IMAGENAME EQ svchost.exe"&lt;br /&gt;&lt;pre&gt;Image Name     PID        Services&lt;br /&gt;=========== =====  =======================&lt;br /&gt;svchost.exe     744        DcomLaunch&lt;br /&gt;svchost.exe     844        RpcSs&lt;br /&gt;svchost.exe     888        AeLookupSvc, AppMgmt, &lt;br /&gt;AudioSrv, BITS, Browser, &lt;br /&gt;CryptSvc, dmserver, &lt;br /&gt;EventSystem,lanmanserver,&lt;br /&gt;lanmanworkstation, Netman,&lt;br /&gt;Nla, RasMan, Schedule,&lt;br /&gt;seclogon, SENS,ShellHWDetection,&lt;br /&gt;Themes, winmgmt, wuauserv&lt;br /&gt;svchost.exe     928         Dhcp, Dnscache&lt;br /&gt;svchost.exe     976         LmHosts, W32Time&lt;br /&gt;svchost.exe     1772       Net Driver HPZ12&lt;br /&gt;svchost.exe     1816       Pml Driver HPZ12&lt;br /&gt;svchost.exe     2424       TermService&lt;br /&gt;svchost.exe     3312       TapiSrv&lt;br /&gt;svchost.exe     2688       W3SVC&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;From there, it's just a matter of shutting down or restarting each of the services listed under the process id 888 ( I got this from taskmanager).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-3174481475584791230?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/3174481475584791230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/06/how-to-find-what-running-under_11.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/3174481475584791230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/3174481475584791230'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/06/how-to-find-what-running-under_11.html' title='How to find what&amp;#39;s running under SVCHost.exe'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-bGDj7HK3I4c/Te1qmEnxSDI/AAAAAAAAADI/yLfvDEtgOC8/s72-c/What%2527s+running+under+SVCHost_exe_tasklist+ss.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-6662051773651320873</id><published>2009-06-09T11:58:00.006-04:00</published><updated>2011-06-06T20:00:51.916-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GetEnumerator'/><category scheme='http://www.blogger.com/atom/ns#' term='IEnumerable'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='arraylist'/><category scheme='http://www.blogger.com/atom/ns#' term='vb.net'/><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='generics'/><title type='text'>Arraylist and generics don't mix with IEnumerable(Of T).GetEnumerator.</title><content type='html'>The other day I was writing an in-house tool to assist in some upgrades we were performing on client installations. This tool was supposed to perform its operations on a batch of items, and display the results upon completion.&lt;br /&gt;&lt;br /&gt;Since processing this batch of items was a lengthy endeavor, I wanted the failure to process one of the items to simply be recorded and allow the processing of the others to continue. Part of the processing of each item was a call to multiple web services, so I would need a way to handle the collection of errors along the way and make them available for their eventual display.&lt;br /&gt;&lt;br /&gt;I had what I thought was a clever idea:&lt;b&gt; a private Arraylist of exceptions that occurred during processing.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: vb"&gt;Public Class BatchExceptions&lt;br /&gt;Implements ICollection(Of System.Exception)&lt;br /&gt;&lt;br /&gt;Private mExceptionlist As ArrayList&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;That way, I could simply iterate over the list and perform the standard exception handling, like so:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: vb"&gt;Dim exc As Exception&lt;br /&gt;For Each exc In BatchExceptions&lt;br /&gt;HandleError(exc)&lt;br /&gt;Next&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Of course, in order to make use of the "For Each" construct, I had to implement the GetEnumerator of the ICollection interface.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: vb"&gt;Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of System.Exception) _&lt;br /&gt;Implements System.Collections.Generic.IEnumerable(Of System.Exception).GetEnumerator&lt;br /&gt;Return (mExceptionlist.GetEnumerator)&lt;br /&gt;End Function&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Cool. Only one problem:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-KcqrigGCB8s/Te1p0Bj-MqI/AAAAAAAAADE/NAT5dq6D9ws/s1600/Arraylist+and+generics+don%2527t+mix+when+enumerating+generics_generics+enumerator.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="80" src="http://2.bp.blogspot.com/-KcqrigGCB8s/Te1p0Bj-MqI/AAAAAAAAADE/NAT5dq6D9ws/s640/Arraylist+and+generics+don%2527t+mix+when+enumerating+generics_generics+enumerator.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://www.mylifeincode.com/wp-content/uploads/2009/06/arraylist-and-generics-dont-mix-when-enumerating-generics_generics-enumerator.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That was OK though, because I was using generics after all. The compiler was being helpful and reminding me that I had to specify 'IEnumerator(Of Exception)':&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-sqSFfmMQ5x4/Te1pq-7fm_I/AAAAAAAAAC8/W8Wih4gPnOM/s1600/Arraylist+and+generics+don%2527t+mix+when+enumerating+generics_generics+enumerator2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="318" src="http://1.bp.blogspot.com/-sqSFfmMQ5x4/Te1pq-7fm_I/AAAAAAAAAC8/W8Wih4gPnOM/s640/Arraylist+and+generics+don%2527t+mix+when+enumerating+generics_generics+enumerator2.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://www.mylifeincode.com/wp-content/uploads/2009/06/arraylist-and-generics-dont-mix-when-enumerating-generics_generics-enumerator2.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: vb"&gt;Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of System.Exception) _&lt;br /&gt;Implements System.Collections.Generic.IEnumerable(Of System.Exception).GetEnumerator&lt;br /&gt;Return (DirectCast(mExceptionlist.GetEnumerator, IEnumerator(Of Exception)))&lt;br /&gt;End Function&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Everything compiled fine, but at run-time I got the following RTE:&lt;br /&gt;&lt;br /&gt;Unable to cast object of type 'ArrayListEnumeratorSimple' to type 'System.Collections.Generic.IEnumerator`1[System.Exception]'.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mylifeincode.com/wp-content/uploads/2009/06/arraylist-and-generics-dont-mix-when-enumerating-generics_generics-enumerator-rte.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-sBPGxgwntbQ/Te1pgCExO6I/AAAAAAAAAC4/SWn30_X8w58/s1600/Arraylist+and+generics+don%2527t+mix+when+enumerating+generics_generics+enumerator-+RTE.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="369" src="http://4.bp.blogspot.com/-sBPGxgwntbQ/Te1pgCExO6I/AAAAAAAAAC4/SWn30_X8w58/s640/Arraylist+and+generics+don%2527t+mix+when+enumerating+generics_generics+enumerator-+RTE.jpg" width="640" /&gt;&lt;/a&gt;This was frustrating. It seemed like the compiler failed to warn me of this incompatibility, and simply kicked the can on down the road to the run-time to deal with.&lt;br /&gt;&lt;h2&gt;Solution:&lt;/h2&gt;&lt;br /&gt;Well, I did a little poking around and finally ended up replacing my Arraylist with a list like so:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: vb"&gt;private mExceptionlist as System.Collections.Generic.list&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Well, that did the trick but I can't say it was as intuitive as it would seem. It makes sense, in hindsight, but why did I have to get some cryptic RTE? Why couldn't the compiler have picked up on my use of an ArrayList and say, &lt;b&gt;"Hey dummy - use a generic list!"?&lt;/b&gt; Still, I have a new trick to toss in my bag for the time I want to implement an enumerator on an Arraylist!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-6662051773651320873?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/6662051773651320873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/06/arraylist-and-generics-don-mix-with_09.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/6662051773651320873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/6662051773651320873'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/06/arraylist-and-generics-don-mix-with_09.html' title='Arraylist and generics don&amp;#39;t mix with IEnumerable(Of T).GetEnumerator.'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-KcqrigGCB8s/Te1p0Bj-MqI/AAAAAAAAADE/NAT5dq6D9ws/s72-c/Arraylist+and+generics+don%2527t+mix+when+enumerating+generics_generics+enumerator.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-4243646531436228977</id><published>2009-06-04T11:06:00.004-04:00</published><updated>2011-06-06T19:56:10.367-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Command line'/><category scheme='http://www.blogger.com/atom/ns#' term='DOS Commands'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips Tricks and Tweaks'/><category scheme='http://www.blogger.com/atom/ns#' term='Free'/><title type='text'>How to Delete Empty Folders - FREE!</title><content type='html'>While performing a disk cleanup recently, I  had cause to locate and delete any empty folders under a root folder. I knew there had to be a batch file command to accomplish this, but I couldn't for the life of me remember what it was!&lt;br /&gt;&lt;br /&gt;Enter Google.&lt;br /&gt;&lt;br /&gt;five minutes of some keyword searching with surgical precision and piecing together commands  yielded my solution.&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;DIR /AD/B/S | SORT  &amp;gt; FOLDERLIST.BAT&lt;/b&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;h2&gt;How It Works.&lt;/h2&gt;&lt;br /&gt;The Dir command is the familiar directory list command that comes standard with all versions of Windows since 95. The magic is in the switches:&lt;br /&gt;&lt;blockquote&gt;/A          Displays files with specified attributes.&lt;br /&gt;When applied to the "D" attribute, it returns directories&lt;br /&gt;/B         Uses bare format (no heading information or summary).&lt;br /&gt;/S          Displays files in specified directory and all subdirectories.&lt;/blockquote&gt;&lt;br /&gt;&lt;b&gt;SORT &lt;/b&gt;is an often overlooked command for, you guessed it, sorting. Here, the results of the Dir command are piped ("|") into the SORT command as input. The result of the SORT command is then redirected from the command prompt to a file called &lt;b&gt;FOLDERLIST.BAT.&lt;/b&gt;&lt;br /&gt;&lt;h2&gt;Kick it up a notch.&lt;/h2&gt;&lt;br /&gt;Now that you've created this list, say you want to automate the deletion of each entry in the list. This is where pumping the output to a ".bat" file comes in. Open the bat file in textpad, or notepad, or your text editor&lt;br /&gt;&lt;br /&gt;&lt;b&gt;For example:&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;Typing:&lt;br /&gt;DIR /AD/B/S | SORT &amp;gt; FOLDERLIST.BAT&lt;/blockquote&gt;&lt;br /&gt;in my C:\Program Files\Microsoft Visual Studio 8\VC folder yields the following results:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Isiev6chKeg/Te1n1wSkjII/AAAAAAAAACs/408P6Q8M1wc/s1600/empty+file+results.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-Isiev6chKeg/Te1n1wSkjII/AAAAAAAAACs/408P6Q8M1wc/s1600/empty+file+results.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Next, open the file in a text editor, word, or open office  and replace the beginning of each line with  the RD command followed by a space and a single quote. Like so:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-uKiVM7pLrCY/Te1oC_P9jSI/AAAAAAAAACw/At2-arAJImQ/s1600/empty+file+replace.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-uKiVM7pLrCY/Te1oC_P9jSI/AAAAAAAAACw/At2-arAJImQ/s1600/empty+file+replace.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This should give you the following:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-y1AwaIFrt48/Te1oJU1m5oI/AAAAAAAAAC0/ZVvdGgBAz6Y/s1600/empty+file+First+replace.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-y1AwaIFrt48/Te1oJU1m5oI/AAAAAAAAAC0/ZVvdGgBAz6Y/s1600/empty+file+First+replace.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Notice how each line now begins with "&lt;b&gt;RD &lt;/b&gt;"" This is the old DOS Remove Directory command. Don't worry, it only removes empty directories. But you still need to add an ending quote to each line. This is where Word or Open Office is handy. You can do another search and replace, but this time search for "&lt;b&gt;^p&lt;/b&gt;" (new paragraph) and replace with "&lt;b&gt;"^p"&lt;/b&gt; (end quote and new paragraph).&lt;br /&gt;&lt;br /&gt;Save the file, and you're all done except the double clicking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-4243646531436228977?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/4243646531436228977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/06/how-to-delete-empty-folders-free_04.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/4243646531436228977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/4243646531436228977'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/06/how-to-delete-empty-folders-free_04.html' title='How to Delete Empty Folders - FREE!'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Isiev6chKeg/Te1n1wSkjII/AAAAAAAAACs/408P6Q8M1wc/s72-c/empty+file+results.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-581740227571888189.post-2911110190634296343</id><published>2009-06-02T09:43:00.006-04:00</published><updated>2011-06-01T22:22:27.039-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FxCop'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Microsoft FxCop doesn't like Microsoft generated code!</title><content type='html'>The other day I thought it might be nice to "do the right thing" and give my code a run against &lt;a title="FxCop" href="http://msdn.microsoft.com/en-us/library/bb429476(VS.80).aspx"&gt;Microsoft's FxCop&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I ran it right out of the box - I didn't bother making my own rules or changing the defaults. I was bored. Anyway, here's one of the results that actually made be chuckle once I read it carefully:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color: #0000ff;"&gt;Warning, Certainty 90, for &lt;strong&gt;DoNotInitializeUnnecessarily&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;&lt;div style="margin-left: 10px;"&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;Target &lt;/span&gt;: #.ctor()  (IntrospectionTargetMember)&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;Location &lt;/span&gt;: &amp;lt;735&amp;gt;&amp;gt;  (String)&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;Resolution &lt;/span&gt;: &lt;strong&gt;"'MyDocument.New()' initializes field 'MyDocument.disposedValue'&lt;br /&gt;of type 'Boolean' to false. Remove this initialization&lt;br /&gt;because it will be done automatically by the runtime."&lt;/strong&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;Help &lt;/span&gt;:   (String)&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;Category &lt;/span&gt;: Microsoft.Performance  (String)&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;CheckId &lt;/span&gt;: CA1805  (String)&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;RuleFile &lt;/span&gt;: Performance Rules  (String)&lt;span style="color: #0000ff;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="color: #000080;"&gt;&lt;span style="color: #0000ff;"&gt;I&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: #0000ff;"&gt;nfo&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;: "Do not make initializations that have already been&lt;br /&gt;done by the runtime."&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;Created &lt;/span&gt;: 3/6/2009 6:58:21 PM  (DateTime)&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;LastSeen &lt;/span&gt;: 3/6/2009 8:36:25 PM  (DateTime)&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;Status &lt;/span&gt;: Active  (MessageStatus)&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;Fix Category&lt;/span&gt; : NonBreaking  (FixCategories)&lt;/div&gt;&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;The reason for the chuckle was that the code which triggered this violation of the rule was written by the Microsoft IDE! My role in this infraction was really quite simple: &lt;strong&gt;I typed "Implements IDisposable" and hit Enter.&lt;/strong&gt; The IDE was "nice" enough to plugin the rest for me:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: vb"&gt;&lt;br /&gt;' To detect redundant calls&lt;br /&gt;Private disposedValue As Boolean = False&lt;br /&gt;&lt;br /&gt;' IDisposable&lt;br /&gt;Protected Overridable Sub Dispose(ByVal disposing As Boolean)&lt;br /&gt;If Not Me.disposedValue Then&lt;br /&gt;If disposing Then&lt;br /&gt;Array.Clear(mDocumentContent, 0, mDocumentContent.Length)&lt;br /&gt;End If&lt;br /&gt;End If&lt;br /&gt;Me.disposedValue = True&lt;br /&gt;End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;It's bad enough that the IDE writes code for me without prompting, but maybe the FxCop team should talk to the IDE team to avoid such embarrassing nuisances (I had dozens of similar warnings to weed through) in the future.&lt;br /&gt;&lt;br /&gt;According to the &lt;a href="http://blogs.msdn.com/fxcop/archive/2008/02/28/faq-how-do-i-prevent-fxcop-1-36-from-firing-warnings-against-generated-code.aspx"&gt;Code Analysis Team&lt;/a&gt;, this is the new default for FxCop 1.36.&lt;br /&gt;&lt;br /&gt;Here's how to avoid it:&lt;br /&gt;&lt;br /&gt;Using an FxCop project:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open your FxCop project in FxCop&lt;/li&gt;&lt;li&gt;Choose Project -&amp;gt; Options -&amp;gt; Spelling &amp;amp; Analysis&lt;/li&gt;&lt;li&gt;Check Suppress analysis results against generated code&lt;/li&gt;&lt;li&gt;Click OK&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;OR, if you prefer the command-line:&lt;br /&gt;&lt;ol&gt;&lt;li&gt; Pass the /ignoregeneratedcode switch, for example:&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;FxCopCmd.exe&lt;/strong&gt; /file:MyAssembly.dll /out:AnalysisResults.xml /ignoregeneratedcode&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/581740227571888189-2911110190634296343?l=www.mylifeincode.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.mylifeincode.com/feeds/2911110190634296343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.mylifeincode.com/2009/06/microsoft-fxcop-doesn-like-microsoft_02.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/2911110190634296343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/581740227571888189/posts/default/2911110190634296343'/><link rel='alternate' type='text/html' href='http://www.mylifeincode.com/2009/06/microsoft-fxcop-doesn-like-microsoft_02.html' title='Microsoft FxCop doesn&amp;#39;t like Microsoft generated code!'/><author><name>Mike</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
