<?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'><id>tag:blogger.com,1999:blog-7778893</id><updated>2009-10-19T06:39:21.879-07:00</updated><title type='text'>Computer Cabal</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://computercabal.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default'/><link rel='alternate' type='text/html' href='http://computercabal.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7778893.post-8782629854894859400</id><published>2009-10-12T00:35:00.000-07:00</published><updated>2009-10-13T23:03:33.041-07:00</updated><title type='text'>Backing up and Reformatting Windows XP Computer</title><content type='html'>This is always such a hassle, your computer is at it's life's end, you've had the system for over 3 years and you've installed and uninstalled programs, games, and who-knows-what else over the past long while and it's time to backup and reformat to squeeze the last bits of performance out of that bad-boy comp you bought 4 years ago. You've upgraded the memory and video card so it's not &lt;span style="font-style: italic;"&gt;so&lt;/span&gt; out of date and perhaps  malicious infections, viruses, and/or spyware cause your computer to not live up to it's  it's potential.&lt;br /&gt;&lt;br /&gt;Time to backup your files to an external source and reinitialize XP or go to Windows 7.   Here are some of the directories in XP you'll want to look for important files to backup:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;C:\Documents and Settings\[UserName]\Desktop&lt;/code&gt;&lt;br /&gt;&lt;code&gt;C:\Documents and Settings\[UserName]\My Documents&lt;/code&gt;&lt;br /&gt;&lt;code&gt;C:\Program Files&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;As well as any files you might have saved directly under the C:\ (root) of your hard drive or subfolders in the root.  Note: there are also hidden folders inside "Documents and Settings" such as local settings and application data that might contain saved games or other important files you'll want to backup.&lt;br /&gt;&lt;br /&gt;To make sure I got all my files under C:\Documents and Settings while backing up I used &lt;a href="http://www.microsoft.com/Downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&amp;amp;displaylang=en"&gt;robocopy&lt;/a&gt; to copy files off onto a separate hard disk I connected using this cool SATA/IDE to USB adapter I bought awhile back and my 500 gig Seagate HD.  Here is the command I used to copy the files:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;ROBOCOPY "C:\Documents and Settings" E:\Backup /COPYALL /B /MIR /R:0 /W:0 /NFL /NDL&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This took a really long time, especially because I had some photos on my desktop that I hadn't moved before the backup, but at least I could have the peace of mind knowing all my files were transferred despite the failure of copying through windows explorer giving the file in use error.&lt;br /&gt;&lt;br /&gt;You could also run Robocopy for "C:\Program Files" but I found it was easier just to do a spot-check on those folders since most modern programs save their user profile and customizable data files inside the user's Documents and Settings directory.&lt;br /&gt;&lt;br /&gt;Before you make the plunge of reformatting to avoid the headache and pain of lost data, use disk analysis tools such as &lt;a href="http://windirstat.info/"&gt;WinDirStat&lt;/a&gt; to make sure all the data you need to backup is archived off your main drive.  If you need to make backups within installed programs such as Local Mail Systems (i.e. Thunderbird and Outlook), Databases (such as MSSql, MySql, Oracle, etc...) or Source Control Systems (i.e. CVS, SVN, VSS, etc...), perform those backups with the appropriate programs and make sure you have the files archived somewhere safe.&lt;br /&gt;&lt;br /&gt;Once you're ready, go for it! Make sure you have your XP or Windows 7 disk and hardware driver disks handy as well as files for other programs you use regularly.  If your computer boots up at the BIOS screen but does not prompt you to boot off the CD ROM for the O/S you may have to go into the CMOS screen to change the boot order to include the CD/DVD before the HD.&lt;br /&gt;&lt;br /&gt;It is so nice to run a clean system right after a reformat, of course you'll want to install your Chipset drivers (which includes sound drivers if the motherboard supports it) as well as your video drivers and reinstall an anti-virus solution as soon as possible, I suggest &lt;a href="http://free.avg.com/ww-en/homepage"&gt;AVG Free&lt;/a&gt;, it is a very functional virus scanner for only $0!!!&lt;br /&gt;&lt;br /&gt;If everything goes smoothly you'll have a working system that runs much more efficiently than before, I'm still looking for a good anti-spyware program and had been using &lt;a href="http://www.lavasoft.com/"&gt;AdAware&lt;/a&gt; before but if anyone has found a better free spyware-killer let me know.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update October 13th 2009:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I've decided to try &lt;a href="http://www.microsoft.com/Security_Essentials/"&gt;Microsoft Security Essentials&lt;/a&gt; which serves as both my virus scanner and my anti malware and spyware solution, and it even works in XP!&lt;br /&gt;&lt;br /&gt;To be fair, I hadn't performed a Full Scan within AVG before I uninstalled it on my fresh XP install but Microsoft Security Essentials says "Preliminary scan results show that malicious or potentially unwanted software might exist on your system." during it's full scan, so I patiently wait for it to finish so I can see what it has detected...&lt;br /&gt;&lt;br /&gt;It found one: "Spyware:Win32/Aureate" item and also: "Backdoor:Win32/Trenk!rts" which it was able to clean out.  Overall I'm pretty happy with the Microsoft Security Essentials application, the UI is nice and clean and since it is free and provides antivirus, and spyware/malware protection I know I'm pretty well covered.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-8782629854894859400?l=computercabal.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://computercabal.blogspot.com/feeds/8782629854894859400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7778893&amp;postID=8782629854894859400' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/8782629854894859400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/8782629854894859400'/><link rel='alternate' type='text/html' href='http://computercabal.blogspot.com/2009/10/backing-up-and-reformatting-windows-xp.html' title='Backing up and Reformatting Windows XP Computer'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14440476070333735859'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-1648985961708147166</id><published>2009-09-22T11:29:00.000-07:00</published><updated>2009-10-05T18:28:20.980-07:00</updated><title type='text'>Windows Time Service: W32Time - Synchronising time between servers</title><content type='html'>We have the  need at work to Synchronize the clocks of our application servers with the  database server which should be a relatively simple task and it's not  too difficult given you have a domain controller in your network, however we  don't want to require a domain controller for our software to run properly and  getting the Windows Time Service to sync the clocks between servers without a  Domain controller was a bit of a headache.&lt;br /&gt;&lt;br /&gt;In this article: &lt;a title="blocked::http://support.microsoft.com/kb/816042" href="http://support.microsoft.com/kb/816042"&gt;How to configure an authoritative  time server in Windows Server&lt;/a&gt; Microsoft describes the different registry  entries used in Windows Server 2003 to configure the W32Time service, if you  also read the article: &lt;a title="blocked::http://technet.microsoft.com/en-us/library/cc757721(WS.10).aspx" href="http://technet.microsoft.com/en-us/library/cc757721%28WS.10%29.aspx"&gt;Configure  a manual time source for a selected client computer&lt;/a&gt; you will become more  familiar with the commands for querying and synchronizing against a remote time  server.&lt;br /&gt;&lt;br /&gt;First I tried following the directions under: "Configuring the Windows Time service to use an internal hardware clock" because I didn't need the server to sync to an external time source, I just wanted to sync the clocks of the client machines to my database machine.&lt;br /&gt;&lt;br /&gt;After configuring the server I issue the following command from the client machine:&lt;br /&gt;&lt;code&gt;&lt;strong&gt;w32tm /config /manualpeerlist:&lt;/strong&gt;&lt;em&gt;peers&lt;/em&gt;&lt;strong&gt; /syncfromflags:manual /update&lt;/strong&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Where &lt;code&gt;&lt;em&gt;peers&lt;/em&gt;&lt;/code&gt; is the server's name.&lt;br /&gt;&lt;br /&gt;However as soon as I issued the command:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;strong&gt;w32tm /stripchart /computer:&lt;/strong&gt;&lt;em&gt;target&lt;/em&gt;&lt;strong&gt; /samples:&lt;/strong&gt;&lt;em&gt;n&lt;/em&gt;&lt;strong&gt; /dataonly&lt;/strong&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;from the client machine, the command errored out with: &lt;code&gt;error: 0x800705B4&lt;/code&gt;&lt;br /&gt;Or if I give the resync order to the client machine using the command:&lt;br /&gt;&lt;code&gt;&lt;strong&gt;w32tm /resync&lt;/strong&gt;&lt;/code&gt;&lt;br /&gt;it replies back with:&lt;br /&gt;"The computer did not resync because no time data was available."&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After searching on Google and not turning up anything very helpful I went ahead and followed the instructions under the "Configuring Windows Time service to use an external time source" section.  For the registry entry that dictates which server to use as the external time source (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters), I used the value: &lt;code&gt;time.windows.com,0x1&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Using this setup I was able to get my database server to sync with time.windows.com and my web servers to sync with the database server (however at one point I had my db server synced up with the Domain Controller (DC)  and it was working that way as well so I'm not sure if performing that step made it work even after changing the configuration to externally sync up with time.windows.com).  As I'm writing this blog post I'm retracing my steps on another set of machines and I can't get it to work so maybe there is some sort of problem with having IIS on your time server because I found other posts related to that.&lt;br /&gt;&lt;br /&gt;Concluding, time syncing in windows is a real pain (to say the least) and it seems that getting it to work in an environment without a Domain Controller is even more difficult.  I'll update this post as I find new things or if we need to setup another cluster I may learn more.  Hopefully this helps someone, if you have more experience with this and know what the magical compination of steps and registry entries are to make it work let me know I'd love to hear.  I'm afraid that if I have to figure this out again on another cluster I'm going to be in real trouble.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-1648985961708147166?l=computercabal.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://computercabal.blogspot.com/feeds/1648985961708147166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7778893&amp;postID=1648985961708147166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/1648985961708147166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/1648985961708147166'/><link rel='alternate' type='text/html' href='http://computercabal.blogspot.com/2009/09/windows-time-service-w32time.html' title='Windows Time Service: W32Time - Synchronising time between servers'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14440476070333735859'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-938659747665962989</id><published>2009-04-02T23:09:00.000-07:00</published><updated>2009-04-04T18:21:37.263-07:00</updated><title type='text'>DupeMan - Duplicate File Management Program Updated</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XTRg4FwrPrg/SdgHkm5AkHI/AAAAAAAAAAw/58kCCU01c6g/s1600-h/dupeman_ss_orig.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_XTRg4FwrPrg/SdgHkm5AkHI/AAAAAAAAAAw/58kCCU01c6g/s320/dupeman_ss_orig.png" alt="" id="BLOGGER_PHOTO_ID_5321011285234585714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It's been about 3 years since I've updated and released changes to my original &lt;a href="http://computercabal.blogspot.com/2006/02/dupeman-duplicate-file-management.html"&gt;DupeMan Duplicate file management tool&lt;/a&gt;, but I've been able to make changes to it in my spare time and when I get bored, I upgraded to .NET 2.0 framework and added the ability to save and load the results of a check for duplicates indexing process as well as a new MP3 Playlist dockable control.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mattpalmerlee.com/dupeman/"&gt;Download DupeMan Here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Feel free to pass this program or link on to your friends or anyone you think might be able to use it (those who's collection is more quantity than quality).&lt;br /&gt;&lt;br /&gt;If you do install it and try it out, let me know any feedback you have,&lt;br /&gt;-Matt Palmerlee&lt;br /&gt;&lt;br /&gt;(Note: you need to have at least .NET 2.0 installed on your system to work.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-938659747665962989?l=computercabal.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://computercabal.blogspot.com/feeds/938659747665962989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7778893&amp;postID=938659747665962989' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/938659747665962989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/938659747665962989'/><link rel='alternate' type='text/html' href='http://computercabal.blogspot.com/2009/04/dupeman-duplicate-file-management.html' title='DupeMan - Duplicate File Management Program Updated'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14440476070333735859'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_XTRg4FwrPrg/SdgHkm5AkHI/AAAAAAAAAAw/58kCCU01c6g/s72-c/dupeman_ss_orig.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-2077047173817795677</id><published>2008-06-04T18:10:00.000-07:00</published><updated>2009-10-11T11:51:52.388-07:00</updated><title type='text'>Configuring Google Apps to host your Domain for free</title><content type='html'>I've recently setup a new domain name for a new S/W Development Consulting company I'm creating called Mastered Software (&lt;a href="http://masteredsoftware.com/"&gt;MasteredSoftware.com&lt;/a&gt;). I was planning on creating my new website using C# .NET and Visual Studio .NET 2005, because that is the platform I'm most comfortable with, however, finding affordable Windows hosting that supports the .NET framework is not easy, the cheapest I could find was $10 a month if you bought 2 years at a time, which isn't much compared to other hosting solutions, but for a small business even this adds up quickly.&lt;br /&gt;&lt;br /&gt;I was also recently checking out Google's App Engine and Google Apps for your domain services, and what's cool is that you can host your domain and even email through the google apps for your domain service!  The best part is, for small companies that don't need lots of storage and features it's free!&lt;br /&gt;&lt;br /&gt;Here are the steps I took to have my domain hosted by google:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Start by signing up for Google Apps for your Domain at: http://www.google.com/a/&lt;/li&gt;&lt;li&gt;You will be prompted to verify ownership of your domain during setup, there are a couple of options to do the verification, including adding a special CNAME record in your domain name registrar's system to point to google.com, this is the method I used for verification because it was the most straightforward.  While you are there, you may want to add additional CNAME records for your domain which point to ghs.google.com (i.e. masteredsoftware.com and www.masteredsoftware.com).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Enable the applications you want such as email, calendar, etc... For creating the content for&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_XTRg4FwrPrg/SJEUekKWg6I/AAAAAAAAAAM/t9sGMFpgwoQ/s1600-h/google_pages.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp3.blogger.com/_XTRg4FwrPrg/SJEUekKWg6I/AAAAAAAAAAM/t9sGMFpgwoQ/s320/google_pages.jpg" alt="" id="BLOGGER_PHOTO_ID_5228983157689582498" border="0" /&gt;&lt;/a&gt; my main site I choose to use the Google Pages application because it's very easy, configure the web address for google pages to point to www.&lt;yourdomainhere&gt; for my site it is www.masteredsoftware.com click on the &lt;/yourdomainhere&gt;&lt;yourdomainhere&gt;"Change URL" link from the Web Page settings screen to update the web address.  Create a basic home page for your site through google pages so you have something to look at when you go to your domain, don't forget to publish your changes so they are live on the site.&lt;br /&gt;&lt;/yourdomainhere&gt;&lt;/li&gt;&lt;li&gt;At this point you should be able to browse to the "www" version of your site (if you setup the CNAME records in step2 for www.yourdomain.com to point to ghs.google.com).&lt;/li&gt;&lt;li&gt;Unfortunately there is no way at the moment to have the "naked" domain version of your site point to your google pages site ,unless perhaps you have your domain hosted through google domain hosting, I don't know because I haven't tried that service.  You maybe able to setup a forward or redirection from the naked domain to the www version in your hosting provider's DNS settings, with my hosting provider I was not able to do that and have some more of the advanced features for my domain such as redirecting the MX records to google.  Fortunately you can host your naked domain using the google apps framework.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_XTRg4FwrPrg/SbGmMuFqdfI/AAAAAAAAAAo/0c0q3ZqtOVw/s1600-h/google_app_engine_ss.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 210px;" src="http://4.bp.blogspot.com/_XTRg4FwrPrg/SbGmMuFqdfI/AAAAAAAAAAo/0c0q3ZqtOVw/s320/google_app_engine_ss.png" alt="" id="BLOGGER_PHOTO_ID_5310208173106951666" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Once you have signed up for the google apps framework, add your naked domain (in my case masteredsoftware.com) under the google apps framework options.&lt;/li&gt;&lt;li&gt;Follow the instructions on this page: &lt;a href="http://code.google.com/appengine/docs/python/gettingstarted/uploading.html"&gt;Uploading your application&lt;/a&gt; to upload your files to the google app engine service.&lt;/li&gt;&lt;li&gt;Here is the code for my masteredsoftware.py file: &lt;span style="color: rgb(0, 102, 0);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;print "Status: 302 Moved"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;print "Location: http://www.masteredsoftware.com/"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;print ""&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Also setup your app.yaml file pointing to the main script file: &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;application: masteredsoftware&lt;br /&gt;version: 1&lt;br /&gt;runtime: python&lt;br /&gt;api_version: 1&lt;br /&gt;&lt;br /&gt;handlers:&lt;br /&gt;- url: /.*&lt;br /&gt;script: masteredsoftware.py&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;If everything worked out the code files above should forward your naked domain requests to your www.yourdomain.com version.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;...&lt;span style="color: rgb(0, 102, 0);"&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Finally you might want to add google analytics to your pages site so that you can track visitors.  Just click on the area you want your analytics code, click the edit html link (on the bottom right of the google pages page), surround the analytics code with div tags and save and publish your changes.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Now you can play with some of the other cool features that Google apps for your domain allows (such as gmail hosting, etc...)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Have Fun domain hosting!&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-2077047173817795677?l=computercabal.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://computercabal.blogspot.com/feeds/2077047173817795677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7778893&amp;postID=2077047173817795677' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/2077047173817795677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/2077047173817795677'/><link rel='alternate' type='text/html' href='http://computercabal.blogspot.com/2008/06/configuring-google-apps-to-host-your.html' title='Configuring Google Apps to host your Domain for free'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14440476070333735859'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XTRg4FwrPrg/SbGmMuFqdfI/AAAAAAAAAAo/0c0q3ZqtOVw/s72-c/google_app_engine_ss.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-1859439017094826595</id><published>2007-11-14T13:45:00.000-08:00</published><updated>2007-11-28T10:38:11.364-08:00</updated><title type='text'>VSS to SVN Migration</title><content type='html'>The last couple of weeks at work I've been moving our Source Control tool from Visual Source Safe (VSS) to Subversion (SVN).  There are many reasons to move away from VSS, mainly it just sucks, random corruption, that nice error message about having to run the analyze tool, and just the fact that it is a very poor Microsoft Product. Also VSS doesn't support some of the features we want as we grow such as branching and merging.&lt;br /&gt;&lt;br /&gt;  There were other Source Control options we investigated when looking to migrate off of VSS,  the most logical was to move to Microsoft's Team Foundation Server (TFS), which I've heard is very robust and is an easy switch from VSS, it also apparently has some really nice features for controling Database Schema and Code (Stored Procedure) changes.  The problem with TFS was, to work effectively (in addition to Costly TFS licensing) our Visual Studio Developers would have to upgrade to the Visual Studio Team System which is an additional cost.  Our decision was to go open source, SVN is a very popular technology for Source Control and it supports many of our desired processes for Source Change Management, such as branching and merging releases.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here are some helpful links for SVN and the conversion from VSS:&lt;br /&gt;&lt;a href="http://vidmar.net/weblog/archive/2007/10/27/migrating-from-sourcesafe-to-subversion-again.aspx"&gt;Good Overview of the Upgrade Process&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://subversion.tigris.org/"&gt;Subversion Main Site&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tortoisesvn.tigris.org/"&gt;Tortoise SVN Client&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.poweradmin.com/SOURCECODE/VSSMIGRATE.ASPX"&gt;VSS to SVN Migration Tool&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.daveswebsite.com/software/tamtamsvn/"&gt;TamTam SVN Visual Studio SCC Provider Plugin&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Since we wanted to retain the check-in history from Visual Source Safe, we used the VSS to SVN Migration tool listed above.  I made some modifications to the tool as well, I wanted to keep the user who originally made the change as well as the date the change was made (the 2nd version of the Migration tool just uses one sign-on to SVN and just uses the current computer time for the check-in time). &lt;br /&gt;&lt;br /&gt;  My change parses the user name out of the Version information from VSS and uses this login instead for SVN, it also parses the date and time the checkin was made, switches the computers clock to that date and time, and then finally does the commit to the SVN repository (which is on my local machine anyways because I couldn't get the the program to work on Windows 2003).  I did run into some problems where on some files I couldn't get the versions from VSS for some reason, maybe these files were from a backup/restore in VSS and that is why it had trouble, I'm not sure but I was able to manually import the files that had this problem and the rest of the process completed smoothly.&lt;br /&gt;&lt;br /&gt;Here is the direct link to my Modified Version of PowerAdmin's VSS to SVN Migration tool (I sent it to them, but in case they don't repost my version, here it is):&lt;br /&gt;&lt;a href="http://www.mattpalmerlee.com/VSSMigrate/VSSMigrate3_code.zip"&gt;VSSMigrate3_code.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; The next step was to move my local SVN repository to the final destination server, which can easily be done with the Subversion dump and load commands as described on this page:&lt;br /&gt;&lt;a href="http://www.digitalmediaminute.com/article/2251/how-to-move-a-subversion-repository"&gt;How to move a Subversion Repository&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; Finally, I've setup backup scripts on the Subversion Windows 2003 Server, we had a similar set of backup batch file scripts running to backup our VSS database and FTP the backup file offsite.  These batch files were then setup to be run nightly and weekly via the windows scheduler.  The new Subversion backup batch files perform a svnadmin hotcopy to make a copy of the repository without taking it offline, then it zip compresses the files from the hotcopy using the 7zip program's command line arguments, it finally creates a remote ftp script that is executed to ftp the compressed backupfiles offsite.  Here are the contents of my fancy batch file backup script for Subversion:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;FOR /F "tokens=1 delims= " %%i IN ('date /t') DO SET DATE=%%i&lt;br /&gt;&lt;br /&gt;cd C:\Program Files\Subversion\bin\&lt;br /&gt;&lt;br /&gt;RMDIR /S /Q D:\backup\SVN\current\&lt;br /&gt;MKDIR D:\backup\SVN\current\&lt;br /&gt;&lt;br /&gt;DEL D:\backup\SVN\%DATE%_SVN_backup.zip&lt;br /&gt;&lt;br /&gt;svnadmin hotcopy D:\svn_repo D:\backup\SVN\current --clean-logs&lt;br /&gt;&lt;br /&gt;"C:\Program Files\7-zip\7z" a -tzip -r -y d:\backup\SVN\%DATE%_SVN_backup.zip d:\backup\SVN\current&lt;br /&gt;&lt;br /&gt;cd D:\backup\SVN\&lt;br /&gt;&lt;br /&gt;&gt; script.ftp ECHO username&lt;br /&gt;&gt;&gt;script.ftp ECHO password&lt;br /&gt;&gt;&gt;script.ftp ECHO cd ~/backup/SVN&lt;br /&gt;&gt;&gt;script.ftp ECHO binary&lt;br /&gt;&gt;&gt;script.ftp ECHO prompt n&lt;br /&gt;&gt;&gt;script.ftp ECHO mput %DATE%_SVN_backup.zip&lt;br /&gt;&gt;&gt;script.ftp ECHO quit&lt;br /&gt;:: Use the temporary script for unattended FTP&lt;br /&gt;FTP -v -s:script.ftp ftp.servername.com&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After that developers must rebind their Solutions to SVN, which can be quite a pain, but once it's setup using TamTam, going forward it is smooth opening the solution files.&lt;br /&gt;One tool that helped me out upgrade the solutions (especially VS2003) was &lt;a href="http://www.codinghorror.com/blog/archives/000368.html"&gt;Clean Sources Plus&lt;/a&gt; which removes source control bindings from the windows explorer right click menu.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-1859439017094826595?l=computercabal.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://computercabal.blogspot.com/feeds/1859439017094826595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7778893&amp;postID=1859439017094826595' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/1859439017094826595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/1859439017094826595'/><link rel='alternate' type='text/html' href='http://computercabal.blogspot.com/2007/11/vss-to-svn-migration.html' title='VSS to SVN Migration'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14440476070333735859'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-7224023054200100702</id><published>2007-11-14T12:49:00.000-08:00</published><updated>2007-11-27T12:27:15.611-08:00</updated><title type='text'>ASP.NET Web Application Project Upgrade - Assembly Reference not found</title><content type='html'>We've recently undergone a conversion to Visual Studio 2005 Service Pack 1 (SP1) for the new Web Application Projects (WAP) they have added.&lt;br /&gt;&lt;br /&gt;The Web Application Projects give more control over the files included in a Web Site because now you have a project file similar to the VS 2003 Web Application model.&lt;br /&gt;&lt;br /&gt;There are a couple of nice guides online to upgrading a Web Site to a Web Application Project after installing SP1, here is one I followed for the Upgrade:&lt;br /&gt;&lt;a href="http://webproject.scottgu.com/CSharp/Migration2/Migration2.aspx"&gt;Scott Gu's Migrating a Web Site to Web Application Project&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Basically, you just create a new web application project, copy in all your pages and other files, then on all the ASPX pages, right click and choose "Convert to Web Application", which creates the filename.designer.cs files necessary for the new Web Application Model.&lt;br /&gt;&lt;br /&gt;To simplify the upgrade initially I didn't add namespaces for the separate App_Code files and I just put them in a folder named "Classes".&lt;br /&gt;&lt;br /&gt;After that there weren't many more hoops to jump through for the site to successfully compile.&lt;br /&gt;&lt;br /&gt;One reason for the upgrade is to make it easier to create a Web Setup (Installer) for the Web Application Projects where making a Setup Project for the original "Web Site" project was a pain.&lt;br /&gt;&lt;br /&gt;After creating the Web Setup Project for our Web Application Project, then testing the installer, I kept getting an error: &lt;br /&gt;"The name 'Namespace' does not exist in the current context"&lt;br /&gt;When I viewed the detailed compiler output: "The type or namespace name 'Namespace' could not be found (are you missing a using directive or an assembly reference?)".  This was because the dll files for the website were not in the bin folder underneath the web application root folder.&lt;br /&gt;&lt;br /&gt;Once I fixed this in the installer (I manually added the bin folder available from the "View -&gt; File System" context menu, and added outputs: Primary Output for each web project and library as necessary).&lt;br /&gt;&lt;br /&gt;Overall, I'm much happier with the new (or old) Web Application Projects model in Visual Studio 2005, it gives the developer much more control over the behavior of the website, the included files, simplifies deployment, and is much faster to compile and test.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-7224023054200100702?l=computercabal.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://computercabal.blogspot.com/feeds/7224023054200100702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7778893&amp;postID=7224023054200100702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7224023054200100702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7224023054200100702'/><link rel='alternate' type='text/html' href='http://computercabal.blogspot.com/2007/11/aspnet-web-application-project-upgrade.html' title='ASP.NET Web Application Project Upgrade - Assembly Reference not found'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14440476070333735859'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-2218982425755575966</id><published>2007-11-02T22:34:00.000-07:00</published><updated>2007-11-14T12:48:56.511-08:00</updated><title type='text'>Read Foreign Region DVD</title><content type='html'>I recently got back from a 3 week vacation to Spain and Italy, while I was over there we ran out of space on our camera xD drives so we went to an Internet Cafe in Italy and had them burn a DVD of our pictures that were on our 2 GB xD card.  After that I nervously formatted that card so that we could continue taking pictures of our trip.&lt;br /&gt;&lt;br /&gt;   Once I got back to the States and started compiling all our photos (over 2000 of them!) I insert my DVD with my photos into my computer's DVD drive and I hear it clicking and thrashing and my heart drops into my stomach. &lt;br /&gt;&lt;br /&gt;When my DVD ROM couldn't read the disk I paniked, I tried to keep my calm; telling myself it was alright, the files were there, I just had to get them off it.&lt;br /&gt;&lt;br /&gt;After much searching online for a solution, I realized the problem was my DVD-ROM was the 2nd generation computer DVD Player with this Movie Industry Region protection so the movie industry can control releases of movies within different countries.  What a crock!!!&lt;br /&gt;&lt;br /&gt;Luckily I was able to find a firmware upgrade tool that allows my model of DVD Rom to be essentially Region-Less (or region 0) so the DVD player doesn't care what region the DVD is actually encoded for.&lt;br /&gt;&lt;br /&gt;After I upgraded the Firmware and used this DVD Region Killer s/w to remove the region protection from windows I could finally read my dvd and use windows to get my photos off of it.&lt;br /&gt;&lt;br /&gt;Note: do not leave a foreign region DVD in the drive on bootup or you are bound to get hangs as the O/S looks at the drive to boot from.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-2218982425755575966?l=computercabal.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://computercabal.blogspot.com/feeds/2218982425755575966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7778893&amp;postID=2218982425755575966' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/2218982425755575966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/2218982425755575966'/><link rel='alternate' type='text/html' href='http://computercabal.blogspot.com/2007/11/read-foreign-region-dvd.html' title='Read Foreign Region DVD'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14440476070333735859'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-66817444231663597</id><published>2007-09-04T16:44:00.000-07:00</published><updated>2007-09-08T17:56:48.798-07:00</updated><title type='text'>HttpWebRequest in C# for Web Traffic Simulation, Watch out for Expect 100 Continue and Nagle</title><content type='html'>Over the past few months we've been busy at work creating our scalable Intelligent Chat application using C# .NET 2.0 and AJAX.  To perform load testing against our application we have written a simple Traffic Generating/Load Simulating Windows Forms application which makes Asynchronous HTTP Requests using the HttpWebRequest object, it is pretty straightforward and has been able to surface many problems in our main application.  We did come across a big "Gotcha" in our simulator, after looking at the generated network traffic we noticed that in the header of each request the simulator was sending "Expect: 100 - Continue", after which the server would send the 100 - Continue response to the client.  Since this was not the correct behavior, we added the following line of code:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;System.Net.ServicePointManager.Expect100Continue = false;&lt;/span&gt;&lt;br /&gt;As indicated in the following blog posts:&lt;br /&gt;&lt;a href="http://haacked.com/archive/2004/05/15/http-web-request-expect-100-continue.aspx"&gt;HttpWebRequest and the Expect: 100-continue Header Problem&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/joncole/archive/2005/09/08/462659.aspx"&gt;HttpWebRequest and Expect 100 Continue&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After this change however, the headaches started, everything was fine when we tested in our Development environment, IIS on Windows 2003, when we deployed the simulator into the Test environment (as far as I can tell, exactly the same server configuration, etc...), the simulator was so slow that requests would time out almost immediately.&lt;br /&gt;&lt;br /&gt;After using Wireshark to view the network traffic in the test environment, we were seeing some strange behavior, it looked like the simulator was sending the header of the POST request, and then waiting for the Acknowledge (ACK) message back (which would take more than 200 milliseconds) from the server before sending the body of the post.  Thanks to our brilliant network engineer we were able to determine that the client caused this behavior by using the Nagle Algorithm for it's requests.&lt;br /&gt;&lt;br /&gt;That is when we put in one more line:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;System.Net.ServicePointManager.UseNagleAlgorithm = false;&lt;/span&gt;&lt;br /&gt;In our simulator and it seemed to fix the problem in the test environment, I have no Idea what is different in our development environment, some IIS configuration, maybe the fact that our test environment servers have .NET 3.0 installed?  It is still a mystery to me.  I figured I would share our experiences with the Expect 100 continue and Nagle Algorithm to perhaps save others some of the same pain we dealt with debugging this issue.&lt;br /&gt;&lt;br /&gt;Update September 7th, 2007:&lt;br /&gt;We found the difference in our development environment, the windows 2003 server in our development environment is R2 with Service Pack 1 (sp1) and the windows 2003 server in the test lab is win 2003 R2 with Service Pack 2 (sp2), after viewing further network traces this seems to stem from IIS sending a 100 continue under sp1 (even when we don't send the expect 100 continue message), then what we see is the client waits a long amount of time before sending the ACK message back to the server (I suspect because it has already sent the entire body in the initial POST headers).&lt;br /&gt;&lt;br /&gt;This Blog post points to a hotfix that addresses this issue in sp1:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/david.wang/archive/2006/04/05/HTTP_SYS_IIS_and_the_100_continue.aspx"&gt;HTTP.SYS, IIS, and the 100 continue&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've put together a simple table to show all the combinations related to 100 - Continue and Nagle, and the results of the test (it was just too hard to keep it all straight in my head):&lt;br /&gt;&lt;br clear="all" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;TABLE border="0" cellpadding="1" cellspacing="1"&gt;&lt;TR style="background-color:#EEE"&gt;&lt;TD&gt;Results&lt;/TD&gt;&lt;TD&gt;Server Sends 100 - Continue (Windows 2003 SP1 &amp;&amp; XP IIS 5.1)&lt;/TD&gt;&lt;TD&gt;Client sends Expect: 100 - Continue&lt;/TD&gt;&lt;TD&gt;Use Nagle Algorythm&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="background-color:#DDD"&gt;&lt;TD&gt;Fast (extra traffic sent)&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="background-color:#EEE"&gt; &lt;TD&gt;Fast (extra traffic sent)&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="background-color:#DDD"&gt;&lt;TD&gt;Fast (didn't send POST body, after the 100 - Contine it has something to send?)&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="background-color:#EEE"&gt;&lt;TD&gt;Slow (waits before sending ACK to 100 - Continue)&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="background-color:#DDD"&gt;&lt;TD&gt;Fast Responses&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="background-color:#EEE"&gt;&lt;TD&gt;Fast (extra traffic sent)&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="background-color:#DDD"&gt;&lt;TD&gt;Slow (Nagle causes a ~200ms wait for ACK)&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="background-color:#EEE"&gt;&lt;br /&gt; &lt;TD&gt;Fast Responses&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;(Note: A zero in column one means Windows 2003 SP2)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-66817444231663597?l=computercabal.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://computercabal.blogspot.com/feeds/66817444231663597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7778893&amp;postID=66817444231663597' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/66817444231663597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/66817444231663597'/><link rel='alternate' type='text/html' href='http://computercabal.blogspot.com/2007/09/httpwebrequest-in-c-for-web-traffic.html' title='HttpWebRequest in C# for Web Traffic Simulation, Watch out for Expect 100 Continue and Nagle'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14440476070333735859'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-4872594243578783630</id><published>2007-06-15T14:57:00.000-07:00</published><updated>2007-06-15T15:08:36.624-07:00</updated><title type='text'>SQL Server Outer Join with where clause bug</title><content type='html'>I spent most of the day trying to figure out one simple outer join query in SQLServer 2005, it turns out that the problem stems from the WHERE clause, apparently SQL Server will execute the WHERE clause before the join? Which doesn't make much sense to me, it seems like a bug, but whatever, at least I only wasted about six hours trying to figure out that once you put the criteria within the join clause it works as expected.&lt;br /&gt;&lt;br /&gt;Here are some more articles I found on the subject:&lt;br /&gt;&lt;a href="http://www.revealnet.com/newsletter-v7/0306_B.htm"&gt;Outer Join trouble&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sqlteam.com/article/additional-criteria-in-the-join-clause"&gt;Additional Criteria in the JOIN Clause&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-4872594243578783630?l=computercabal.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://computercabal.blogspot.com/feeds/4872594243578783630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7778893&amp;postID=4872594243578783630' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/4872594243578783630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/4872594243578783630'/><link rel='alternate' type='text/html' href='http://computercabal.blogspot.com/2007/06/sql-server-outer-join-with-where-clause.html' title='SQL Server Outer Join with where clause bug'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14440476070333735859'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-115431058121747185</id><published>2006-07-30T18:33:00.000-07:00</published><updated>2006-07-30T18:50:49.070-07:00</updated><title type='text'>C# DrawImage and overriding the OnPaint method</title><content type='html'>I recently spent hours looking for a solution to a strange problem I had in my custom user-drawn control when using the DrawImage method, and I thought I'd share my misery and hopefully keep you from wasting your time figuring this out as well. What was happening was that using images that were not 96 dpi were scaled wrong using the DrawImage method in C# (I also tried using the DrawImageUnscaled methods to no avail). I figured that the DrawImage method should account for the different screen resolutions and I wouln't have too, but it turns out that there is a SetResolution method on the Image (Bitmap object). So I delved further on how to get the system's resolution (or dots per inch, dpi) from .NET and I ran across this page:&lt;br /&gt;&lt;span id="ctl00_LibFrame_MainContent"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms229649.aspx"&gt;How to: Handle Orientation and Resolution Changes&lt;/a&gt; that talks about the Microsoft .NET &lt;span style="font-weight: bold;"&gt;Compact&lt;/span&gt; framework, but there was a very interesting tidbit near the bottom of the page:&lt;br /&gt;&lt;br /&gt;"&lt;/span&gt;&lt;span style="font-style: italic;" id="ctl00_LibFrame_MainContent"&gt;If your application contains graphics that are drawn in the &lt;span class="linkTerms"&gt;&lt;a onclick="javascript:TrackThisClick('ctl00_LibFrame_ctl02','ctl00_LibFrame_ctl14',this);" href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.form.onpaint.aspx"&gt;OnPaint&lt;/a&gt;&lt;/span&gt; method, they will not scale automatically. You will need to use the &lt;span class="linkTerms"&gt;&lt;a onclick="javascript:TrackThisClick('ctl00_LibFrame_ctl02','ctl00_LibFrame_ctl15',this);" href="http://msdn2.microsoft.com/en-us/library/system.drawing.graphics.dpix.aspx"&gt;DpiX&lt;/a&gt;&lt;/span&gt; and &lt;span class="linkTerms"&gt;&lt;a onclick="javascript:TrackThisClick('ctl00_LibFrame_ctl02','ctl00_LibFrame_ctl16',this);" href="http://msdn2.microsoft.com/en-us/library/system.drawing.graphics.dpiy.aspx"&gt;DpiY&lt;/a&gt;&lt;/span&gt; properties of your &lt;span class="linkTerms"&gt;&lt;a onclick="javascript:TrackThisClick('ctl00_LibFrame_ctl02','ctl00_LibFrame_ctl17',this);" href="http://msdn2.microsoft.com/en-us/library/system.drawing.graphics.aspx"&gt;Graphics&lt;/a&gt;&lt;/span&gt; objects to determine appropriate scaling.&lt;/span&gt;&lt;span id="ctl00_LibFrame_MainContent"&gt;"&lt;br /&gt;&lt;br /&gt;That was all I needed, one line in my OnPaint method and my images are now scaled properly:&lt;br /&gt;(g is my Graphics object)&lt;br /&gt;&lt;br /&gt;this.myBitmap.SetResolution(g.DpiX, g.DpiY);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It's amazing how long it takes to find the answer to questions when you don't know how to ask google for them!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-115431058121747185?l=computercabal.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://computercabal.blogspot.com/feeds/115431058121747185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7778893&amp;postID=115431058121747185' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/115431058121747185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/115431058121747185'/><link rel='alternate' type='text/html' href='http://computercabal.blogspot.com/2006/07/c-drawimage-and-overriding-onpaint.html' title='C# DrawImage and overriding the OnPaint method'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14440476070333735859'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-115376636840289041</id><published>2006-07-24T11:39:00.000-07:00</published><updated>2006-07-24T11:39:29.313-07:00</updated><title type='text'>Moving Local User Profiles to Domain and MSI Install/Uninstall Nightmares</title><content type='html'>We just got through moving most of our Windows XP computers here at work onto a new MS Exchange Server with Active Directory, Domain, etc...&lt;br /&gt;One major headache was actually moving the user profiles over from a local user to a domain user.&lt;br /&gt;Since you can't just change an existing local user to a domain user, you have to go through major hoops and cross your fingers everything will work with your new user (or just do a complete reinstall/reformat of windows which is not all that fun).&lt;br /&gt;The first thing we did was move the computer onto the domain by using the System window available from the control panel or by rightclicking My Computer and clicking properties.&lt;br /&gt;On the computer name tab, click "Change" and change from "Member of" workgroup to your new domain server.&lt;br /&gt;Once you've switched over to the Domain, next comes the tricky part, actually making the new user, ensuring correct permissions are set, and copying the profile from the old local profile to the new domain profile.&lt;br /&gt;To create the new Domain profile on your machine, all you need to do is log off from your local user and login to your Domain account using your username and password that is on the Domain Controller and selecting the domain from the login prompt.&lt;br /&gt;After you've sucessfully logged in as your new domain user, log back out and login as the Administrator account for your system. Right click on My computer and click the Manage button to bring up the Computer Management window, click on Local Users and Groups, then the Groups subfolder, then right click on the Administrators group and you should make sure that both the old local user and the new domain users are in the Administrator group.  Also ensure that the folders under C:\Documents and Settings\&lt;localusername&gt; and C:\Documents and Settings\&lt;domainusername.domainname&gt; have full control for administrators (you may have to disable simple file sharing to modify these security settings in XP by clicking tools -&gt; Folder options -&gt; View Tab, then uncheck the last checkbox in the list labeled Advanced.&lt;br /&gt;Once you've gotten all the security/permissions setup it's time to actually do the copy, I would recommend a full shutdown and reboot because you never know what files are still in use with windows, then sign in again as the Administrator once the system is back up.&lt;br /&gt;Right click My Computer and click Properties to bring up the System window once again, click the Advanced tab, and then click the Settings button in the User Profile section to bring up the User Profile window, select the local profile you wish to copy from, click the Copy To button, and in the popup window select the new Domain user as the "Copy Profile to" profile, and I would also make sure the "Permitted to use" is set to Everyone.&lt;br /&gt;If everything goes ok it will take a few minutes (depending on the size of the local profile) and your domain user will now have all the settings, desktop, registry entries, etc... that your old local profile had.&lt;br /&gt;Sometimes this fails, especially if there are files in long pathnames under the C:\Documents and Settings\ directory, if it fails you have a couple of options, either remove those nasty long path files it errors on, or you can try a manual copy in windows explorer instead of using the "Copy Profile to" tools, but who knows what other registry settings, etc... you'd be missing if you do a manual copy in windows explorer so I'd recommend trying to use the Copy Profile tool if possible.&lt;br /&gt;&lt;br /&gt;Even after this, the struggles with installed programs are not over, if you try to run a program that was installed just for the old local user instead of installed for all users with your new Domain User, you'll find the program will probably not run and windows will complain looking for the originally installed MSI file, which is a complete pain because who keeps the original MSI/Setup files they installed programs with?  You'll also find trying to uninstall these programs will also fail through the Add/Remove Program files tool for the same reason.  After lots of searching in the windows registry and trying to find the registry key that identifies the actual version installed so I could get the appropriate MSI file to correctly uninstall the corrupt program, I found that the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall key holds some interesting values such as UninstallString, however I couldn't figure out how that hash code related to the "Revision Number" in the Advanced Properties for the MSI file, or any other attribute.  Finally, giving up, we found that if you try to uninstall from Add/Remove Programs, to remove it from the list (even if it fails) then reinstalling the program but selecting "All users" instead of "Just me" in the install options made the install go through sucessfully.&lt;br /&gt;&lt;br /&gt;&lt;/domainusername.domainname&gt;&lt;/localusername&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-115376636840289041?l=computercabal.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://computercabal.blogspot.com/feeds/115376636840289041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7778893&amp;postID=115376636840289041' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/115376636840289041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/115376636840289041'/><link rel='alternate' type='text/html' href='http://computercabal.blogspot.com/2006/07/moving-local-user-profiles-to-domain.html' title='Moving Local User Profiles to Domain and MSI Install/Uninstall Nightmares'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14440476070333735859'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-113987674588322643</id><published>2006-02-13T16:21:00.000-08:00</published><updated>2009-04-02T23:08:46.746-07:00</updated><title type='text'>DupeMan - Duplicate File Management Program</title><content type='html'>Over the past year or so I've been working off and on in my spare time on a program to easily find duplicate files on your system. This project was born for the desire to easily find duplicate MP3 files. I have a large collection and so do my friends, but nobody wants duplicate songs of the onces they already have. I've recently been polishing up the system and it's now not completely embarrassing, so I've released a Beta version.   It works really well with MP3 files, it reads ID3 Tags to find similar  files and notifies you of duplicates, it will also find untagged or  "blank" ID3 tags and allows you to quickly and easily update the tags  (based on folder and file name).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mattpalmerlee.com/dupeman/"&gt;Download DupeMan Here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Feel free to pass this program or link on to your friends or anyone you  think might be able to use it (those who's collection is more quantity  than quality).&lt;br /&gt;&lt;br /&gt;If you do install it and try it out, let me know any feedback you have,&lt;br /&gt;-Matt Palmerlee&lt;br /&gt;&lt;br /&gt;(Note: you need to have at least .NET 1.1 installed on your system to work.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-113987674588322643?l=computercabal.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://computercabal.blogspot.com/feeds/113987674588322643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7778893&amp;postID=113987674588322643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/113987674588322643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/113987674588322643'/><link rel='alternate' type='text/html' href='http://computercabal.blogspot.com/2006/02/dupeman-duplicate-file-management.html' title='DupeMan - Duplicate File Management Program'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14440476070333735859'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-111276425819674219</id><published>2005-04-05T22:02:00.000-07:00</published><updated>2005-04-05T22:59:58.346-07:00</updated><title type='text'>Multi-Threaded SqlServer and .NET Database Connections</title><content type='html'>Using MS SqlServer and .NET in a Muti-User or Multi-threaded environment doesn't behave well when using one Database connection object for all your queries. After the last couple days of database nightmares I've found it's always safer to just instantiate a new db connection object each time you want to perform an ExecuteQuery, ExectueScalar or ExecuteNonQuery. The object of only having one database connection is to reduce the overhead of multiple connections and increase performance, and maybe there is a way to keep a persistant connection to the db that manages concurrent inserts/updates/delets/selects, but in the sake of time and easy of programming just open another connection! Also remember to close all your connections after you use them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-111276425819674219?l=computercabal.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://computercabal.blogspot.com/feeds/111276425819674219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7778893&amp;postID=111276425819674219' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/111276425819674219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/111276425819674219'/><link rel='alternate' type='text/html' href='http://computercabal.blogspot.com/2005/04/multi-threaded-sqlserver-and-net.html' title='Multi-Threaded SqlServer and .NET Database Connections'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14440476070333735859'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-109103310229113164</id><published>2004-07-28T09:34:00.000-07:00</published><updated>2004-07-28T09:45:02.290-07:00</updated><title type='text'>.NET Web Services and SOAP</title><content type='html'>A couple of weeks ago, I spent the better part of a day banging my head against the wall when trying to add a web service resource to a project in Visual Studio .NET 2003. In my test project, the web reference worked fine, but as soon as I tried to add it to my production project, it couldn't find the type I was trying to create, even though the web reference was there, as if the namespace was different for the web reference than the rest of the project.  There is no namespace property for the web reference, but it takes the value for the "Default Namespace" property on the project.&lt;br /&gt; The problem for me was I had changed the namespace for all my source files, but never updated the default namespace property on the project, so the web service reference was being added under a different namespace than my source C# file that was referencing it.&lt;br /&gt; &lt;br /&gt; Moral of the story, if you change the namespace for the source files in your project, make sure you right click on the project, then properties, then change the "Default Namespace" property to the new namespace you want.&lt;br /&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-109103310229113164?l=computercabal.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://computercabal.blogspot.com/feeds/109103310229113164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7778893&amp;postID=109103310229113164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/109103310229113164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/109103310229113164'/><link rel='alternate' type='text/html' href='http://computercabal.blogspot.com/2004/07/net-web-services-and-soap.html' title='.NET Web Services and SOAP'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14440476070333735859'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>