<?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-7778893</id><updated>2012-01-30T08:19:53.214-08:00</updated><category term='joomla 1.6 extensions'/><category term='robocopy backup reformat windows xp'/><category term='ASP.NET exception nagle winsock'/><category term='iPage cheap hosting Joomla'/><category term='SQL Server Transaction Log Maintenance Plan'/><category term='SSIS junction &quot;relative paths&quot;'/><category term='web browser games portal html5 javascript flash silverlight'/><category term='sqlserver index maintenance'/><title type='text'>Computer Cabal</title><subtitle type='html'>Cataloguing my love-hate relationship with Computer Science - Programming and Computing related projects of a Software Engineer.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.computercabal.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.computercabal.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><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7778893.post-1989798759455223341</id><published>2012-01-11T15:02:00.000-08:00</published><updated>2012-01-11T15:02:45.655-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sqlserver index maintenance'/><title type='text'>SqlServer Maintenance: Keeping your indexes from becoming too fragmented</title><content type='html'>A while back I was trying to solve a problem where a database server at work had been showing high CPU usage and over time it was slowly getting worse.  After looking at the sql server profiler and filtering on queries that were taking longer than a second I found one of our queries was taking far longer than it should.  I then went to Sql Server Management Studio to investigate the query with the "Include Actual Execution Plan" option turned on, when the results came back, the execution plan suggested I create some indexes on a few tables.  That's fine, but once I looked into what these indexes were, they were the exact same indexes that I already had on the table!  Turns out the existing indexes were badly fragmented, especially in the tables that have large amounts of inserts.  &lt;br /&gt;&lt;br /&gt;One way to quickly find the fragmentation of a particular index is to right click on the index withing Management Studio, click "Properties" and then click the "Fragmentation" page.&lt;br /&gt;&lt;br /&gt;If you want to get an idea of how fragmented your indexes are for the whole database you can run this query:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;SELECT a.object_id,&lt;br /&gt;      b.name AS IndexName,&lt;br /&gt;  a.avg_fragmentation_in_percent AS PercentFragment,&lt;br /&gt;  a.fragment_count AS TotalFrags,&lt;br /&gt;  a.avg_fragment_size_in_pages AS PagesPerFrag,&lt;br /&gt;  a.page_count AS NumPages&lt;br /&gt;FROM sys.dm_db_index_physical_stats(DB_ID(),&lt;br /&gt;  NULL, NULL, NULL , NULL) AS a&lt;br /&gt;INNER JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id&lt;br /&gt;WHERE a.avg_fragmentation_in_percent &gt; 5&lt;br /&gt;ORDER BY avg_fragmentation_in_percent desc&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;One way to quickly fix this problem if you only have a few indexes with high fragmentation is to simply right click on the index and choose "Rebuild" or "Reorganize".  The rule of thumb is to Reorganize an index when the fragmentation is between 5% and 30%, because it keeps the index available while it is reorganizing it.  Above 30% fragmentation and the index should be rebuilt because the reorganization process for highly fragmented indexes takes too long.&lt;br /&gt;&lt;br /&gt;This Microsoft article on &lt;a href="http://msdn.microsoft.com/en-us/library/ms189858.aspx"&gt;Reorganizing and Rebuilding indexes&lt;/a&gt; has more information on the differences.&lt;br /&gt;&lt;br /&gt;Four our purposes we found that just rebuilding the indexes instead of sometimes reorganizing them works well enough because it doesn't really take that long, even on our live system.&lt;br /&gt;&lt;br /&gt;If you want to rebuild all indexes on a table you can issue the following TSql:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ALTER INDEX ALL ON &amp;lt;tablename&amp;gt;&lt;br /&gt;REBUILD&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;However, we probably want to rebuild all indexes in our database and also schedule it to run periodically (once a week or once a day depending on the system load).  Thankfully, this is very straight forward through the Maintenance Plan wizard:&lt;br /&gt;&lt;br /&gt;From SQL Server Management Studio, open up the "Management" node, then right click on the "Maintenance Plans" node and select "Maintenance Plan Wizard" (if you get an error about enabling Agent XPs, just run the command here: &lt;a href="http://msdn.microsoft.com/en-us/library/ms178127.aspx"&gt;Agent XPs Option&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Give the Maintenance Plan a name like "Rebuild Indexes", and set it to run on a schedule (maybe once a day or once a week).&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/-XNurx4hH8UY/Tw4TfllptSI/AAAAAAAAAD0/-Y-11pUKVYg/s1600/rebuild-indexes-1.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="362" width="400" src="http://4.bp.blogspot.com/-XNurx4hH8UY/Tw4TfllptSI/AAAAAAAAAD0/-Y-11pUKVYg/s400/rebuild-indexes-1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Click Next and choose "Rebuild Index" on the Select Maintenance Tasks page.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-1i0-XOJlguE/Tw4TyNblnAI/AAAAAAAAAEA/9wpK3xyj-u4/s1600/rebuild-indexes-2.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="362" width="400" src="http://2.bp.blogspot.com/-1i0-XOJlguE/Tw4TyNblnAI/AAAAAAAAAEA/9wpK3xyj-u4/s400/rebuild-indexes-2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;On the next page, selecting the order of tasks, since there is only one task, click next.&lt;br /&gt;&lt;br /&gt;Finally, define the options for the Rebuild Index Task, you can select only particular databases, and which objects you want, or as I have done simply "All Databases":&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-tuR_aTAEnCk/Tw4UdSNou9I/AAAAAAAAAEM/ZiFtaBt23eI/s1600/rebuild-indexes-3.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="400" width="371" src="http://2.bp.blogspot.com/-tuR_aTAEnCk/Tw4UdSNou9I/AAAAAAAAAEM/ZiFtaBt23eI/s400/rebuild-indexes-3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Click next and for the report options I don't really care about generating a report file so I uncheck that option and click next.  You are done, click Finish and as long as you are running the process frequently enough you shouldn't have to worry about your indexes getting overly fragmented.&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/-R31vzefWFqU/Tw4VD5f0uHI/AAAAAAAAAEY/EIYqzXcjo1k/s1600/rebuild-indexes-4.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="362" width="400" src="http://4.bp.blogspot.com/-R31vzefWFqU/Tw4VD5f0uHI/AAAAAAAAAEY/EIYqzXcjo1k/s400/rebuild-indexes-4.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-1989798759455223341?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/1989798759455223341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=1989798759455223341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/1989798759455223341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/1989798759455223341'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2012/01/sqlserver-maintenance-keeping-your.html' title='SqlServer Maintenance: Keeping your indexes from becoming too fragmented'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-XNurx4hH8UY/Tw4TfllptSI/AAAAAAAAAD0/-Y-11pUKVYg/s72-c/rebuild-indexes-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-7772897991858569692</id><published>2011-11-28T10:58:00.000-08:00</published><updated>2011-11-28T10:58:23.869-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS junction &quot;relative paths&quot;'/><title type='text'>SSIS cannot use relative path for execute package task</title><content type='html'>We just started using SqlServer Integration Services (SSIS) at work for our upcoming Data Warehousing project.  So far learning my way around SSIS has been relatively painless, I ran into one issue though, there is no way to reference a relative path to dtsx packages (using the execute package task), you must use absolute paths.  This doesn't work well for our team however, because many people have their working directories in different locations on their workstations.  Apparently many people complain about this same issue and there is a request into microsoft to create a variable &lt;a href="https://connect.microsoft.com/SQLServer/feedback/details/341880/ssis-new-system-packagelocation-variable-please"&gt;[System::PackageLocation]&lt;/a&gt; so that a relative path can be used.  There are a couple of solutions offerered in other blog posts to get around this annoying problem: &lt;a href="http://bi-polar23.blogspot.com/2007/05/flexible-file-system-deployment.html"&gt;Flexible File System Deployment&lt;/a&gt; and &lt;a href="http://www.artisconsulting.com/blogs/greggalloway/Lists/Posts/Post.aspx?ID=15"&gt;Relative Paths in SSIS&lt;/a&gt;, however none of these solutions seemed very elegant or friendly so I've come up with my own work around using windows &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896768"&gt;Junctions&lt;/a&gt; which is basically a symbolic link pointing one path to another path, and the tool is available as part of the windows sysinternals utilities package.&lt;br /&gt;&lt;br /&gt;All you have to do is have your developers use the junction tool to agree upon a directory for the junction such as C:\SSIS-Working that points to the developers SSIS package path.&lt;br /&gt;Simply run the command:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;junction C:\SSIS-Working C:\&amp;lt;path to your working ssis package directory &amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then when you reference your package files within the execute package task, all you use is the C:\SSIS-Working\package-name.dtsx&lt;br /&gt;&lt;br /&gt;Now all our developers can develop our SSIS packages and reference the absolute paths even when their working directories are in different locations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-7772897991858569692?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/7772897991858569692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=7772897991858569692' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7772897991858569692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7772897991858569692'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/11/ssis-cannot-use-relative-path-for.html' title='SSIS cannot use relative path for execute package task'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-7185735179975868537</id><published>2011-11-16T11:58:00.000-08:00</published><updated>2011-11-16T12:22:54.093-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET exception nagle winsock'/><title type='text'>ASP.NET Serialization Exception Crash, winsock and Nagle Algorithm</title><content type='html'>Back in 2007 I wrote an &lt;a href="http://www.computercabal.com/2007/09/httpwebrequest-in-c-for-web-traffic.html" target="_blank"&gt;article&lt;/a&gt; about our troubles with expect 100 continue and the nagle algorithm while&amp;nbsp;performance testing our web application on windows 2003.&amp;nbsp; Recently we started doing performance testing of our software on windows 2008 and after about an hour of modest traffic on our server the application would unexpectedly crash, the only error that we could find was in the event log:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Exception: System.Runtime.Serialization.SerializationException Message: Type 'System.Net.InternalException' in Assembly 'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This was a very odd error message because nowhere in our code do we do any binary serialization and it appeared that the InternalException itself was trying to be serialized.  We added code to catch &lt;a href="http://support.microsoft.com/?id=911816"&gt;unhandled exceptions&lt;/a&gt; like we had back in the .NET 1.1 version of the code (we didn't bring our Unhandled Exception Module into the system when we rewrote the system in .NET 2.0), however that didn't seem to prevent the system from crashing when this error occoured and we didn't get much more useful information from the event log.  There was something about the problem occouring at:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;HttpWebRequest.CheckWriteSideResponseProcessing&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Which is in the internal workings withing the .NET framework.&lt;br /&gt;&lt;br /&gt;We engaged Microsoft support on this issue because it was beyond our expertise and with our MSDN subscription apparently we can submit four issues per year for free.  After a few weeks of analyzing the problem and having MS support view dump files, they seem to have narrowed down the problem, apparently there is a race condition in the winsock api (which is what is used internally by our .NET Async Http Requests) where if you have Nagle turned off it can lead to this fatal error situation.&lt;br /&gt;&lt;br /&gt;Since the last time we tested performance in our application we also switched the method our application was making requests from HTTP POST to HTTP GET, and it seems that we don't suffer the performance impacts using GET if we turn on nagle using Nagle and expect 100 continue (which is the default) as we did with POST, so removing the code:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;System.Net.ServicePointManager.Expect100Continue = false;&lt;br /&gt;System.Net.ServicePointManager.UseNagleAlgorithm = false;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;fixes our issue.  There is also another work around that Microsoft support has recommended we try which also appears to resolve the problem, and that is to set the option: alwaysUseCompletionPortsForConnect to true in the web.config file like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;system.net&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;settings&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;socket alwaysUseCompletionPortsForConnect="true"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/settings&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;As described on this page: &lt;a href="http://msdn.microsoft.com/en-us/library/ddck1twc.aspx"&gt;&amp;lt;socket&amp;gt; Element (Network Settings)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So thankfully it seems we can put this issue behind us and move onto other things, we have been really impressed with Microsoft support on this issue and are grateful for their help debugging this issue.&lt;br /&gt;&lt;br /&gt;Finally, I'll mention another point of interest, that there is a setting in the Aspnet.config file for ASP.NET that makes .NET 2.0 behave like 1.1 in the sense that if an unhandled exception occurs it will not bring down the entire app pool. Microsoft warns against using because it can cause other problems - the application may leak resources and abandon locks. It is a nice option to have though so that in production this problem would not bring down the entire system while we tried to debug the issue.  To do this, set the legacyUnhandledExceptionPolicy option to true as described in method 2 on this page: &lt;a href="http://support.microsoft.com/?id=911816"&gt;Unhandled exceptions cause ASP.NET-based applications to unexpectedly quit in the .NET Framework 2.0&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-7185735179975868537?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/7185735179975868537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=7185735179975868537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7185735179975868537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7185735179975868537'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/11/aspnet-serialization-exception-crash.html' title='ASP.NET Serialization Exception Crash, winsock and Nagle Algorithm'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-5991457206155999737</id><published>2011-10-09T18:29:00.000-07:00</published><updated>2011-10-09T18:29:52.680-07:00</updated><title type='text'>Wordpress sharedaddy jetpack plugin share button not working</title><content type='html'>Today I was debugging a problem on my wordpress site: &lt;a href="http://allwebgaming.com/"&gt;AllWebGaming.com&lt;/a&gt;&amp;nbsp;where the sharedaddy share button was not expanding and would throw a javascript error.&amp;nbsp; In Chrome I would get the following error:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Uncaught TypeError: Object #&amp;lt;Object&amp;gt; has no method 'swing'&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In Firefox I was getting this error:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;f.easing[e.animatedProperties[this.prop]] is not a function&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;when hovering over the share button.&lt;br /&gt;&lt;br /&gt;After a little bit of searching, it looked like the culprit was&amp;nbsp;a conflict with&amp;nbsp;the easing&amp;nbsp;jQuery plugin.&amp;nbsp; Apparently the sharedaddy jetpack plugin uses this plugin and as it turns out the theme I'm using (Jarrah) also uses the easing jQuery plugin.&lt;br /&gt;&lt;br /&gt;To resolve this, I simply went to edit the theme's header template file (header.php) to comment out the easing javascript reference (Appearance -&amp;gt; Editor -&amp;gt; Header).&lt;br /&gt;&lt;br /&gt;I found this line in the header.php file:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;script src="&amp;lt;?php echo get_template_directory_uri() ?&amp;gt;/js/jquery.easing.min.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And replaced it with html comments wrapped around the line:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;!--&lt;script type="text/javascript" src="&lt;?php echo get_template_directory_uri() ?&gt;/js/jquery.easing.min.js"&gt;&lt;/script&gt;--&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I'm not sure if there is a better way to do this in Wordpress (like update the easing plugin for the jarrah theme), but this method worked for me to get the share button working again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-5991457206155999737?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/5991457206155999737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=5991457206155999737' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/5991457206155999737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/5991457206155999737'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/10/wordpress-sharedaddy-jetpack-plugin.html' title='Wordpress sharedaddy jetpack plugin share button not working'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-7405883146285463820</id><published>2011-09-23T16:03:00.000-07:00</published><updated>2011-09-23T16:03:05.771-07:00</updated><title type='text'>Volume low on videos played through Flash player</title><content type='html'>I started having this problem on my work PC, every video I played though a browser that used Flash either couldn't be heard at all or was very feint, if I turned the volume up to max I could barely hear the sounds.&amp;nbsp; Windows sounds played fine, everything through an app on my system worked fine, even sounds or videos played through html5 or silverlight work fine.&amp;nbsp; I even uninstalled and reinstalled the flash player and still no volume coming out of my browser.&amp;nbsp; This is one of the strangest issues I've ever seen, obviously my flash settings seem to have gotten corrupted somehow.&amp;nbsp; I've even tried deleting all my saved data and settings within the flash player and upgrading drivers.&amp;nbsp; I still can't solve the problem, if anyone knows of a reason why this would be, feel free to comment and help me out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-7405883146285463820?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/7405883146285463820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=7405883146285463820' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7405883146285463820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7405883146285463820'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/09/volume-low-on-videos-played-through.html' title='Volume low on videos played through Flash player'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-3227325289474713992</id><published>2011-09-08T11:26:00.000-07:00</published><updated>2011-09-08T11:26:20.438-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web browser games portal html5 javascript flash silverlight'/><title type='text'>New Browser-Based Game List Site: All Web Gaming</title><content type='html'>My latest project has been slowly building a Games directory/list site which is exclusively a list of Browser-Based games that use Flash, Silverlight or HTML5/Javascript.  I've been trying to focus on games that might not otherwise get alot of attention and aren't already hosted on Game portal sites.  The new website is called All Web Gaming, you can visit the site here:&lt;br /&gt;&lt;a href="http://www.allwebgaming.com/"&gt;AllWebGaming.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The site is still a work in progress, but it has enough games currently listed to be interesting for some people including great games like: &lt;a href="http://www.allwebgaming.com/2011/08/14/astriarch-ruler-of-the-stars/"&gt;Astriarch&lt;/a&gt;, &lt;a href="http://www.allwebgaming.com/2011/08/25/icycle/"&gt;Icycle&lt;/a&gt;, &lt;a href="http://www.allwebgaming.com/2011/08/20/black-market/"&gt;Black Market&lt;/a&gt;, and &lt;a href="http://www.allwebgaming.com/2011/08/28/flow/"&gt;Flow&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-3227325289474713992?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/3227325289474713992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=3227325289474713992' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/3227325289474713992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/3227325289474713992'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/09/new-browser-based-game-list-site-all.html' title='New Browser-Based Game List Site: All Web Gaming'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-4763370701747674568</id><published>2011-08-15T11:27:00.000-07:00</published><updated>2011-08-15T11:27:41.520-07:00</updated><title type='text'>Testing Text-To-Speech in .NET using C#: SAPI 5.1, 5.3, and 5.4</title><content type='html'>Since 2003 I've been developing against the Microsoft Speech API (SAPI) when SAPI 5.1 was out.  Over the years Microsoft has updated the version of the Speech API, with windows vista they shipped 5.3 and with windows 7 they shipped SAPI version 5.4, you can read more about SAPI and the different versions on the wikipedia page here:&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Microsoft_Speech_API"&gt;Microsoft Speech API&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.verbots.com/"&gt;Verbot&lt;/a&gt; product uses Text-to-Speech, originally SAPI 4 using MS Agents back in the Windows 2000/XP days, and eventually we added our own similar talking head technology that uses SAPI 5.&lt;br /&gt;&lt;br /&gt;Recently we've run into problems where newer voice engines (ones that leverage SAPI 5.3 or SAPI 5.4) don't seem to work with our older SAPI 5.1 version of the SpeechLib (Microsoft Speech Object Library COM component).  On my Windows 7 machine I built this very simple TTS Tester application that gets a list of the TTS Voices and puts them in a combobox and allows the user to send the voice engine some text to speak.  Since I developed this on my Windows 7 machine, it is using SAPI 5.4 in order to test that version against the newer speech engines.  Eventually I'd like to be able to have different versions of the tester which uses separate SAPI libraries in order to be able to better test against the speech engines out there (to see which engines work with different versions of the speech API).  For now at this this simple test app may help other people develop against the Speech API and/or test their speech engines against the newer SAPI 5.4 version.&lt;br /&gt;&lt;br /&gt;Here is the Source Code for the TTSTester Library:&lt;br /&gt;&lt;a href="http://www.masteredsoftware.com/TTSTester.zip"&gt;TTSTester VS 2008 C# Code&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-4763370701747674568?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/4763370701747674568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=4763370701747674568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/4763370701747674568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/4763370701747674568'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/08/testing-text-to-speech-in-net-using-c.html' title='Testing Text-To-Speech in .NET using C#: SAPI 5.1, 5.3, and 5.4'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-6543859558408186607</id><published>2011-06-30T14:23:00.000-07:00</published><updated>2011-06-30T14:23:51.091-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='joomla 1.6 extensions'/><title type='text'>Free Joomla 1.6 extensions for Social media sharing, Disqus, and Posting from RSS</title><content type='html'>Lately I've been searching for good free Joomla 1.6 extensions/plugins that would allow me to post articles from an RSS feed, and add Disqus comments to the articles as well as popular social media bookmark/share/republish buttons such as twitter, facebook, and google +1.&lt;br /&gt;&lt;br /&gt;For my first requirement, creating articles from an RSS feed, I'm using &lt;a href="http://extensions.joomla.org/extensions/news-production/automatic-articles/13573"&gt;Feed Gator&lt;/a&gt;, which is pretty straightforward to setup, after installing you need to add your desired RSS feeds, categorize your feeds based on where you want them to show up in your Joomla site, and create "Category Blog" type menu items linking to your categories to show your articles.  There is a way to setup Feed Gator to automatically import articles from your feeds through a cron job, but I haven't had time to figure out how set that up yet though my hosting provider.&lt;br /&gt;&lt;br /&gt;The second extension I installed was the Disqus Plugin called &lt;a href="http://www.cocut.cn/jstuff/jextension/5113-rokcomments-disqus-integration-with-joomla-16.html"&gt;RokComments&lt;/a&gt;, the main Disqus plugin listed in the Joomla extensions directory doesn't work with joomla version 1.6 so I found RokComments which seems to work fine except that I did get a 404 error after installing which was fixed by simply turning the developer mode on and then off again in the settings for the plugin.&lt;br /&gt;&lt;br /&gt;Finally, I wanted to add a plugin to add social media buttons to allow my visitors to share (or repost/republish) an article on Facebook and twitter and like the pages on facebook, +1 them through Google +1, etc...  It is surprising how long it took me to find a nice plugin for this, most of the social bookmarking plugins only worked for Joomla 1.5 and not 1.6 and many of them are not free.  I finally found &lt;a href="http://extensions.joomla.org/extensions/social-web/social-bookmarking-display/17306"&gt;SocButtons&lt;/a&gt; which was easy to setup and configure, free, and works with Joomla 1.6!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-6543859558408186607?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/6543859558408186607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=6543859558408186607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/6543859558408186607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/6543859558408186607'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/06/free-joomla-16-extensions-for-social.html' title='Free Joomla 1.6 extensions for Social media sharing, Disqus, and Posting from RSS'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-8620953585454320094</id><published>2011-06-27T21:52:00.000-07:00</published><updated>2011-09-20T16:40:11.696-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPage cheap hosting Joomla'/><title type='text'>Hosting multiple sites with iPage, installing Joomla CMS, and the "This site is under development" home.html page</title><content type='html'>&lt;h2&gt;Choosing a Cheap Web Host&lt;/h2&gt;For quite some time I've been playing with different options for Free web hosting of my own domains, with google sites, google app engine, and google apps for your domain you can pretty easily setup a site and have it hosted for free (see my post on &lt;a href="http://computercabal.blogspot.com/2008/06/configuring-google-apps-to-host-your.html"&gt;Configuring Google Apps to host your Domain for free&lt;/a&gt; from back in 2008 for more info).&lt;br /&gt;&lt;br /&gt;Recently though, I bought a few more domains and I wanted a cheap host that could host all my domains under one account and I could use popular content management systems (CMS) such as Joomla, Wordpress, and Drupal.&lt;br /&gt;&lt;br /&gt;There are countless hosts out there and many sites which compare and post reviews of the different hosts (such as &lt;a href="http://webhostinggeeks.com/"&gt;webhostinggeeks.com&lt;/a&gt;).&lt;br /&gt;Incidentally many of these hosts run on Linux/Unix infrastructures and offer PHP, Python, and MySQL (usually Windows based hosts offering .NET support are a bit more expensive, but &lt;a href="http://www.winhost.com/"&gt;winhost&lt;/a&gt; and &lt;a href="http://www.m6.net/"&gt;m6&lt;/a&gt; are a couple of cheap ones I found).&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Installing Joomla on iPage&lt;/h2&gt;A couple of days ago I chose to go with iPage (&lt;a href="http://www.ipage.com/join/index.bml?AffID=665402&amp;amp;LinkName=iPage.com"&gt;iPage.com&lt;/a&gt;), they are currently having a $2.95 per month deal and I think their control panel is easier to use than the cPanel that many other hosts use.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: blue;"&gt;Disclosure: I receive compensation from iPage if you choose to click the above link and sign up for the service. I am not affiliated with iPage and the opinions expressed here are my own.&lt;/div&gt;&lt;br /&gt;Using iPage's custom control panel, installing Joomla is very straightforward using the SimpleScripts item from the control panel home. I selected Joomla from the simple scripts page, then clicked install, then selected my domain, choose advanced options and finally hit complete.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Fixing the home.html problem&lt;/h2&gt;However, after the install completes my home page gave an error saying: This site is under development, and looked like a typical domain host landing page with iframe content loaded by dnsnextgen or dsnextgen or something. After searching for awhile for the cause of this problem and how to resolve it, I found the following page: &lt;a href="http://wordpress.org/support/topic/my-web-site-is-published-but-i-cant-see-it"&gt;My web site is published but I can't see it&lt;/a&gt;, which is related to wordpress, but explained that iPage installs a home.html page by default and in the .htaccess file, home.html is loaded before index.php (which is what joomla uses), so either you can update the .htaccess file as explained in the above page, or simple ftp into your host and delete the home.html file.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Hosting multiple Joomla sites in iPage&lt;/h2&gt;Once I got over that hurdle everything went fine using Joomla on my new site, however I wanted to be able to host multiple sites through iPage, which according to their marketing material you are supposed to be able to do. When using the SimpleScripts installer you can install Joomla into whatever domain you choose, but by default it installs the software into the same (Root) directory. There was also no obvious way to setup the additional sites through the domain manager so that you could tell SimpleScripts you wanted to install Joomla into another folder.&lt;br /&gt;&lt;br /&gt;I couldn't figure out a solution until I came across this post: &lt;a href="http://thebusinessquest.blogspot.com/2010/05/how-to-host-multiple-sites-on-ipage.html"&gt;How to host multiple sites on iPage&lt;/a&gt;. You need to setup a subdirectory pointer for the domain, so basically you just click Domain -&amp;gt; Domain Central from the main control panel in iPage, expand the '+' icon next to the domain you want to modify, select Subdirectory, and in the input box choose a directory name for your site. Once you go to install Joomla again from the SimpleScripts installer you'll notice that it will install into the selected subdirectory instead of the root! (Thanks Charles for the tip!)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-08rE3UbPEtI/TgldfM3sedI/AAAAAAAAADo/DpZkGwLplfo/s1600/ipage-multiple-sites.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="166px" src="http://4.bp.blogspot.com/-08rE3UbPEtI/TgldfM3sedI/AAAAAAAAADo/DpZkGwLplfo/s400/ipage-multiple-sites.png" width="400px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-8620953585454320094?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/8620953585454320094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=8620953585454320094' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/8620953585454320094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/8620953585454320094'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/06/hosting-multiple-sites-with-ipage.html' title='Hosting multiple sites with iPage, installing Joomla CMS, and the &quot;This site is under development&quot; home.html page'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-08rE3UbPEtI/TgldfM3sedI/AAAAAAAAADo/DpZkGwLplfo/s72-c/ipage-multiple-sites.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-5584412540082437131</id><published>2011-06-17T11:09:00.000-07:00</published><updated>2011-06-17T11:09:02.936-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server Transaction Log Maintenance Plan'/><title type='text'>SQL Server: Create a Maintenance Plan to keep the transaction log from growing too large</title><content type='html'>This post is a follow-up to my post in April: &lt;a href="http://computercabal.blogspot.com/2011/04/shrink-sql-server-transaction-log.html"&gt;Shrink Sql Server Transaction Log&lt;/a&gt;. If you database has lots of insert and update activities you might find yourself in the situation where the transaction log grows so fast that you want to schedule a process to run that will backup and shrink the transaction log files periodically.&amp;nbsp; On one of our servers the transaction log had grown so large (~ 60 Gig) that when it needed to acquire more space in the transaction log it was taking a long time to reserve the space on the hard disk and during that time the database was unavailable (causing database connection timeout errors in our application).&lt;br /&gt;&amp;nbsp;&amp;nbsp; One error we saw in the event log that was not very helpful to understand the problem was along the lines of:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;A time-out occurred while waiting for buffer latch&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;There was one error that pointed us in the right direction:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Autogrow of file 'answerbase_log' in database 'answerbase' took 325418 milliseconds.  Consider using ALTER DATABASE to set a smaller FILEGROWTH for this file.&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Even if you are doing a full or differential scheduled backup of your database (which you should be doing to an off-site location in case of disaster), you will find that your transaction logs will eventually grow to an unmanageable size and you will see failures as it tries to claim more space. To resolve this issue, we'll create a new Maintenance Plan task that will periodically backup our transaction log, and clean up the old transaction log backup files.&lt;br /&gt;&lt;br /&gt;First open up SQL Server Management Studio and connect to your desired database.  Next open up the Management -&gt; Maintenance Plans folder nodes.  Right click on Maintence Plans and choose "Maintenance Plan Wizard" and give the new maintenance plan a name like "Transaction Log Backup".&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-cBTmONoF6uc/TfuOsRUjlAI/AAAAAAAAACg/xLzP6w10lAU/s1600/sqlserver-tl-backup-1.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="359" width="400" src="http://2.bp.blogspot.com/-cBTmONoF6uc/TfuOsRUjlAI/AAAAAAAAACg/xLzP6w10lAU/s400/sqlserver-tl-backup-1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Click the "Change..." button under Schedule and choose a periodic schedule such as every day and every 15 minutes.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-isX_FhDN0_w/TfuPReVWdUI/AAAAAAAAACo/i8F9jjkFKXM/s1600/sqlserver-tl-backup-2.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="350" width="400" src="http://1.bp.blogspot.com/-isX_FhDN0_w/TfuPReVWdUI/AAAAAAAAACo/i8F9jjkFKXM/s400/sqlserver-tl-backup-2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Click Ok to close out of the Job Schedule Properties dialog and click Next to continue the wizard.  Then select "Back Up Database (Transaction Log)" on the Select Maintenance Tasks step.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-BpYIIlBSFSw/TfuPxtKZ39I/AAAAAAAAACw/I70oTD8vBcM/s1600/sqlserver-tl-backup-3.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="359" width="400" src="http://1.bp.blogspot.com/-BpYIIlBSFSw/TfuPxtKZ39I/AAAAAAAAACw/I70oTD8vBcM/s400/sqlserver-tl-backup-3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Then click Next to continue, and then Next again to accept the maintenance task order.  On the Define Back Up Database (Transaction Log) Task step, choose "All user Databases" and select the check-box "Create a sub-directory for each database" as well as "Verify backup integrity", all the other options can be left to the defaults.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-9l5yNB_CkjE/TfuRBHyi6iI/AAAAAAAAAC4/6Vrgrh1nHJ4/s1600/sqlserver-tl-backup-4.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="400" width="250" src="http://4.bp.blogspot.com/-9l5yNB_CkjE/TfuRBHyi6iI/AAAAAAAAAC4/6Vrgrh1nHJ4/s400/sqlserver-tl-backup-4.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Click Next and on the Select Report Options step, de-select the checkbox: "Write a report to a text file"&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-FteLVLAqBfk/TfuRgHCFwNI/AAAAAAAAADA/a-m9pJ98wuM/s1600/sqlserver-tl-backup-5.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="359" width="400" src="http://3.bp.blogspot.com/-FteLVLAqBfk/TfuRgHCFwNI/AAAAAAAAADA/a-m9pJ98wuM/s400/sqlserver-tl-backup-5.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Finally, click Next and then Finish to complete the initial setup of the new Maintenance Plan.  Once SQL Server is done creating the new Maintenance plan, click close to close the wizard.  You may have to right click on the maintenance plans node in the object explorer to get your new maintenance plan to show up.  Right click and select "Modify" on our new maintenance plan.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-TIMOOUt4zbI/TfuTKrUEcaI/AAAAAAAAADI/KolIq7ndB0U/s1600/sqlserver-tl-backup-6.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="205" width="400" src="http://4.bp.blogspot.com/-TIMOOUt4zbI/TfuTKrUEcaI/AAAAAAAAADI/KolIq7ndB0U/s400/sqlserver-tl-backup-6.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Next we want to add a new cleanup task to cleanup our old transaction log backup files.  From the toolbox in the bottom left, locate the "Maintenance Cleanup Task" item under the General group and drag it to the edit area of the open Transaction Log Backup task.  Then select the Back Up Database (Transaction Log) task and drag the green arrow from the bottom to the top of new Maintenance Cleanup Task item.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-MUeoi0vvzgk/TfuUqCrjXEI/AAAAAAAAADQ/K5hckBjiEP4/s1600/sqlserver-tl-backup-7.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="276" width="400" src="http://1.bp.blogspot.com/-MUeoi0vvzgk/TfuUqCrjXEI/AAAAAAAAADQ/K5hckBjiEP4/s400/sqlserver-tl-backup-7.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Right click on the new Maintenance cleanup task and choose "Edit...".  In the Maintenance Cleanup Task dialog select the "Backup Files" radio button as well as the "Search folder and delete files based on an extension" radio button.  For the Folder you will choose the location that the transaction log backups will be saved to, for my server in SQL Server 2008 the folder is:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Then type "trn" in the File extension text box (for the transaction log files), select the checkbox: "Include first-level subfolders" and finally I've chosen to delete files that are older than 3 days.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-gywThGTopMg/TfuWLd1pNpI/AAAAAAAAADY/bDb2EUecfAY/s1600/sqlserver-tl-backup-8.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="400" width="343" src="http://4.bp.blogspot.com/-gywThGTopMg/TfuWLd1pNpI/AAAAAAAAADY/bDb2EUecfAY/s400/sqlserver-tl-backup-8.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Select Ok to close the cleanup task window and finally click the save button in the top of the Sql Server Management Studio window to save our Maintenance plan.  Our final plan should look like this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-mp8FUX_MA0A/TfuXcu2pXoI/AAAAAAAAADg/gAmAJVCyx6Q/s1600/sqlserver-tl-backup-9.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="299" width="400" src="http://1.bp.blogspot.com/-mp8FUX_MA0A/TfuXcu2pXoI/AAAAAAAAADg/gAmAJVCyx6Q/s400/sqlserver-tl-backup-9.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;With this Maintenance plan created and scheduled to run periodically, we will ensure that our transaction log doesn't grow significantly and we will still maintain our data integrity because we can keep the data recovery mode to FULL and not have to switch to simple mode which would prevent us from being able to restore to the exact point of the failure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-5584412540082437131?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/5584412540082437131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=5584412540082437131' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/5584412540082437131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/5584412540082437131'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/06/sql-server-create-maintenance-plan-to.html' title='SQL Server: Create a Maintenance Plan to keep the transaction log from growing too large'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-cBTmONoF6uc/TfuOsRUjlAI/AAAAAAAAACg/xLzP6w10lAU/s72-c/sqlserver-tl-backup-1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-6964050807037104144</id><published>2011-05-27T16:33:00.000-07:00</published><updated>2011-05-27T16:33:29.130-07:00</updated><title type='text'>Astriarch 1.0.1 Released</title><content type='html'>Astriarch: Ruler of the Stars version 1.0.1 has just been released. &lt;br /&gt;Version 1.0.1 includes new features to improve playability. There are now planet strength indicators shown above each planet as well as a new feature to keep building the last ship built on each planet. The easy computer AI is now slightly less aggressive and a bug related to the AI build logic has been fixed.&lt;br /&gt;Play Astriarch now at &lt;a href="http://www.astriarch.com/"&gt;http://www.astriarch.com/&lt;/a&gt;&lt;br /&gt;&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/-42YLwEFyckY/TeA0sOxltAI/AAAAAAAAACY/wozbf2Ex31Q/s1600/astriarch-game-ss-1.0.1a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/-42YLwEFyckY/TeA0sOxltAI/AAAAAAAAACY/wozbf2Ex31Q/s400/astriarch-game-ss-1.0.1a.png" t8="true" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Astriarch - Ruler of the Stars is a turn-based single player space strategy game implemented in Silverlight. Build planetary improvements and star ships to capture planets and defeat your enemies. Your ultimate goal is to become the master of the known universe, and earn the title of Astriarch!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-6964050807037104144?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/6964050807037104144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=6964050807037104144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/6964050807037104144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/6964050807037104144'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/05/astriarch-101-released.html' title='Astriarch 1.0.1 Released'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-42YLwEFyckY/TeA0sOxltAI/AAAAAAAAACY/wozbf2Ex31Q/s72-c/astriarch-game-ss-1.0.1a.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-5983361732705719535</id><published>2011-05-09T16:49:00.000-07:00</published><updated>2011-05-09T16:49:40.344-07:00</updated><title type='text'>Developer Perspective: What questions to ask about a Company at a job interview?</title><content type='html'>When interviewing for a new job, it is important to remember that the interview process is a two-way street. It is important to remember that it is as much about answering the questions of your perspective employer as it is about making sure your new job is right for you.&lt;br /&gt;&lt;br /&gt;I've assembled a list of questions you might consider asking either before, during or after an intervew:&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;How long has the company been in business?&amp;nbsp; How many employees are in the company and how many work at this office?&lt;/li&gt;&lt;li&gt;How many departments have developers? How many developers are there total and how many developers are in a team?&lt;/li&gt;&lt;li&gt;What systems are maintained by the development teams now?&lt;/li&gt;&lt;li&gt;What are the primary technologies and programming languages&amp;nbsp;used?&lt;/li&gt;&lt;li&gt;What kinds of projects are underway now?&lt;/li&gt;&lt;li&gt;Where is the technology headed long-term at the company?&lt;/li&gt;&lt;li&gt;What is the revenue and profit of the company? How stable is the position, are you hiring for other positions?&lt;/li&gt;&lt;li&gt;What is the development and release process? Is there a QA department? Do you have tools to facilitate the development and testing process such as source control,&amp;nbsp;automated test, and continuous integration tools?&lt;/li&gt;&lt;li&gt;What IDE do developers use? What 3rd party libraries or platforms does development use?&lt;/li&gt;&lt;li&gt;What development methodologies are used? (i.e. SCRUM/Agile)&lt;/li&gt;&lt;li&gt;What position do you see me filling?&amp;nbsp; What would my day to day responsibilities be?&lt;/li&gt;&lt;/ul&gt;This is a short list, but it should get you thinking about what types of questions you'd like to have answered about a company before accepting an offer.&amp;nbsp; Remember, the interview process is about making sure the company is a good fit for you as much as making sure you are a good fit for the company.&lt;br /&gt;&lt;br /&gt;What other questions are good to ask of a perspective employer?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-5983361732705719535?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/5983361732705719535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=5983361732705719535' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/5983361732705719535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/5983361732705719535'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/05/developer-perspective-what-questions-to.html' title='Developer Perspective: What questions to ask about a Company at a job interview?'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-6138876615545222169</id><published>2011-05-09T12:29:00.000-07:00</published><updated>2011-05-09T12:29:15.441-07:00</updated><title type='text'>Silverlight: Don't use MediaElement and MessageBox</title><content type='html'>When adding music to my game, I came across a severe problem after adding the MediaElement to my silverlight game in order to play the sounds.  The problem is that in some areas of my game I was using MessageBox.Show to show little alerts to the user.  However, once one of the MessageBoxes popped up, all hell broke loose, the computer sized up and I couldn't even bring up the task manager in order to kill my browser process!  Many times during debugging I had to hard-restart my system because of this.  There must be something about how the MessageBox blocks the background thread of the MediaElement which causes this severe crash.  I didn't look into it enough to know what the exact cause is, but let this be a warning, if you are using the MediaElement, make sure you don't have any calls to MessageBox.Show, instead use the ClientWindow for these types of notifications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-6138876615545222169?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/6138876615545222169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=6138876615545222169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/6138876615545222169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/6138876615545222169'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/05/silverlight-dont-use-mediaelement-and.html' title='Silverlight: Don&apos;t use MediaElement and MessageBox'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-3208327597977427993</id><published>2011-05-05T11:30:00.000-07:00</published><updated>2011-05-05T11:30:23.077-07:00</updated><title type='text'>Astriarch Space Strategy game now Gold</title><content type='html'>&lt;a href="http://www.astriarch.com/"&gt;Astriarch - Ruler of the Stars&lt;/a&gt; version 1.0 has just been released.  A stellar ambient soundtrack has been added and other game balance improvements have been made.  Special thanks to Resonant for composing the excellent music.&lt;br /&gt;&lt;br /&gt;Play Astriarch now at &lt;a href="http://www.astriarch.com/"&gt;http://www.astriarch.com/&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Astriarch - Ruler of the Stars is a turn-based single player space strategy game implemented in Silverlight.  Build planetary improvements and star ships to capture planets and defeat your enemies. Your ultimate goal is to become the master of the known universe, and earn the title of Astriarch!&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/-8RWoOhag4HU/TcLskizb8YI/AAAAAAAAACQ/zTWr6ezUHV8/s1600/astriarch-game-ss-1.0.0a.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="300" width="400" src="http://2.bp.blogspot.com/-8RWoOhag4HU/TcLskizb8YI/AAAAAAAAACQ/zTWr6ezUHV8/s400/astriarch-game-ss-1.0.0a.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-3208327597977427993?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/3208327597977427993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=3208327597977427993' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/3208327597977427993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/3208327597977427993'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/05/astriarch-space-strategy-game-now-gold.html' title='Astriarch Space Strategy game now Gold'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-8RWoOhag4HU/TcLskizb8YI/AAAAAAAAACQ/zTWr6ezUHV8/s72-c/astriarch-game-ss-1.0.0a.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-2844212088754710054</id><published>2011-04-20T15:14:00.000-07:00</published><updated>2011-04-20T15:16:23.926-07:00</updated><title type='text'>Shrink Sql Server Transaction Log</title><content type='html'>If you've run out of space on a machine running SqlServer 2000, 2005 or 2008, you may have run into a problem where the database transaction log file has grown too large and you need to reduce the size.&lt;br /&gt;&lt;br /&gt;For Sql Server 2000 and Sql Server 2005, use the folowing command:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;use &amp;lt;dbname&amp;gt;&lt;br /&gt;&lt;br /&gt;backup log &amp;lt;dbname&amp;gt; with truncate_only&lt;br /&gt;&lt;br /&gt;dbcc shrinkfile (&amp;lt;dbname&amp;gt;_log, 1)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Replace &amp;lt;dbname&amp;gt; with the name of your database.&lt;br /&gt;&lt;br /&gt;For Sql Server 2008, the procedure has changed a bit:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Use &amp;lt;dbname&amp;gt; &lt;br /&gt;GO&lt;br /&gt;Alter Database &amp;lt;dbname&amp;gt; Set Recovery Simple&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;Alter Database &amp;lt;dbname&amp;gt; Set Recovery Full&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;DBCC SHRINKFILE (&amp;lt;dbname&amp;gt;_log, 1)&lt;br /&gt;GO&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Again, replace &amp;lt;dbname&amp;gt; with the name of your database.&lt;br /&gt;&lt;br /&gt;Hope this helps, seems there are many articles about reducing or shrinking your database log files, however there seems to be a lack of succinct examples out there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-2844212088754710054?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/2844212088754710054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=2844212088754710054' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/2844212088754710054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/2844212088754710054'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/04/shrink-sql-server-transaction-log.html' title='Shrink Sql Server Transaction Log'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-297689523437062103</id><published>2011-04-17T15:20:00.000-07:00</published><updated>2011-04-17T15:51:00.304-07:00</updated><title type='text'>Google Closure Compiler using ADVANCED_OPTIMIZATIONS to minify and obfuscate JavaScript</title><content type='html'>Lately I've been working with the Google closure compiler in order to minify and obfuscate my javascript code. There are two main routes to go when using the Google closure compiler, SIMPLE_OPTIMIZATIONS or ADVANCED_OPTIMIZATIONS. Simple optimizations will allow you to easily concat and compress your javascript by removing whitespace and comments, but it won't do much else. With the Advanced optimizations option the closure compiler will rename your variables and functions as well as restructure your javascript so that it is more efficient to download (smaller size) and executes faster. All this power doesn't come at a price however, there are quite a few things to consider when using the ADVANCED_OPTIMIZATIONS mode.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;First off, advanced optimizations will remove functions that the compiler thinks aren't called, so if you have javascript code within other files that aren't compiled you'll want to move those calls into the list of compiled files, or use the method described under the section Solution: &lt;b&gt;"Export the Symbols You Want to Keep"&lt;/b&gt; in the document: &lt;a href="http://code.google.com/closure/compiler/docs/api-tutorial3.html#dangers"&gt;What to Watch Out for When Using ADVANCED_OPTIMIZATIONS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Another problem to watch out for when using the google closure compiler ADVANCED_OPTIMIZATIONS mode is calls to 3rd party libraries.  Since my project uses jQuery, I don't want the closure compiler to muck with my jQuery function calls.  To get around this problem, you must specify an '&lt;a href="http://code.google.com/closure/compiler/docs/api-tutorial3.html#externs"&gt;extern&lt;/a&gt;' file for the compiler, this tells the compiler that any function specified within the extern file must be preserved in the compressed application files.  Google provides some common extern files to use such as externs for jQuery versions: &lt;a href="http://code.google.com/p/closure-compiler/source/browse/trunk/contrib/externs/?r=553"&gt;closure compiler externs&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If your javascript objects reference themselves using the 'this' keyword, you will likely see the following warning when compiling your javascript:&lt;br /&gt;&lt;blockquote&gt;WARNING - dangerous use of the global this object&lt;/blockquote&gt;Because the closure compiler will optimize your javascript for performance it will do what is refered to as "namespace flattening" and as a result 'this' will no longer point to your object, but instead the global window object.  To work around this problem, the closure compiler expects you to annotate your javascript using the jsDoc syntax.  Read &lt;a href="http://code.google.com/closure/compiler/docs/js-for-compiler.html"&gt;Annotating JavaScript for the Closure Compiler&lt;/a&gt; for all annotation options and syntax.  Lets take a simple example and describe how it should be annotated to avoid this problem.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Foo = function() {&lt;br /&gt;this.member = {'count':0};&lt;br /&gt;}&lt;br /&gt;Foo.prototype.doSomething = function() {&lt;br /&gt;this.member.count++;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Without annotation the closure compiler will make doSomething a global function (not a prototype function of the Foo object) and the 'this' reference inside doSomething will cause an error because it will now be pointing to the global window object.  To fix this let's now annotate the code above so that the closure compiler won't cause this problem.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;/**&lt;br /&gt;* Foo is my constructor&lt;br /&gt;* @constructor&lt;br /&gt;*/&lt;br /&gt;Foo = function() {&lt;br /&gt;this.member = {};&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* does something&lt;br /&gt;* @this {Foo}&lt;br /&gt;*/&lt;br /&gt;Foo.prototype.doSomething = function() {&lt;br /&gt;this.member.count++;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The key here is the @this {Foo} specification, this tells the compiler that 'this' is an instance of the Foo class and it will not flatten the namespace.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Yet another problem you might come across when using the advanced options in the compiler is: Using string names to refer to object properties, described under the section: Restrictions for ADVANCED_OPTIMIZATIONS in the page: &lt;a href="http://code.google.com/closure/compiler/docs/limitations.html"&gt;Understanding the Restrictions Imposed by the Closure Compiler&lt;br /&gt;&lt;/a&gt;.  Basically, because the closure compiler will not change anything within a string in your javascript, if you've defined an object like this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var Astriarch = {'Version': '0.9.7', 'GameModel':null};&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Note the quotes around the property names, let's say you then reference this property without the quotes, like this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var version = Astriarch.Version;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The closure compiler will change Astriarch.GameModel because it is not quoted but will not modify your original object definition.  To fix this, just make sure you always either use no quotes in your object definitions, or you reference your properties using the quotes. Like this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var Astriarch = {Version: '0.9.7', GameModel:null};&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;or&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var version = Astriarch['Version'];&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To make this process streamlined I've create a batch (.bat) file to run to compile all my scripts using the closure compiler, this is the command line within the batch file:&lt;br /&gt;&lt;blockquote&gt;java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --formatting PRETTY_PRINT --js_output_file astriarch.js ^&lt;br /&gt;--externs jquery-1.4.4.externs.js ^&lt;br /&gt;--js "./astriarch1.js" ^&lt;br /&gt;--js "./astriarch2.js" ^&lt;br /&gt;2&gt; output-debug.txt&lt;br /&gt;&lt;/blockquote&gt;Note that for now I'm using the --formatting PRETTY_PRINT option to make it easier for me to debug problems caused by the closure compiler, once I get all those fixed I'll remove PRETTY_PRINT because it won't add additional newlines and whitespace.  Also, the last line: '2&gt; output-debug.txt' redirects the standard output from the closure compiler to a file, otherwise my thousands of warnings and errors would just be printed to the cmd console window and it would be impossible to see them all.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm continuing working with problems caused in my application by the Advanced compilation mode for the google closure compiler, hopefully I'll be able to fix all the remaining problems and in the end have a nice minified and obfuscated javascript file for the html5 version of &lt;a href="http://astriarch.com"&gt;Astriarch&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-297689523437062103?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/297689523437062103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=297689523437062103' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/297689523437062103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/297689523437062103'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/04/google-closure-compiler-using.html' title='Google Closure Compiler using ADVANCED_OPTIMIZATIONS to minify and obfuscate JavaScript'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-7582406046514391832</id><published>2011-03-10T22:44:00.000-08:00</published><updated>2011-03-10T22:44:10.602-08:00</updated><title type='text'>jQuery UI Listbox widget plugin</title><content type='html'>In one of my previous posts: &lt;a href="http://computercabal.blogspot.com/2011/02/porting-silverlight-app-to-javascript.html"&gt;Porting Silverlight App to javascript using HTML5 Canvas tag&lt;/a&gt;, I mentioned that I needed a widget similar to Silverlight's listbox control and that if I had some time I would release my jQuery UI listbox widget.  Well, I had a little extra time and I was getting impatient waiting for jQuery UI 1.9 to come out so I went ahead and published my current code as well as a simple example to github:&lt;br /&gt;&lt;a href="https://github.com/mpalmerlee/jQuery-UI-Listbox"&gt;jQuery UI Listbox widget plugin&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The simple library uses the jQuery UI Menu component (which is used in the autocomplete widget), and is styled according to your jQuery UI Theme.  Since the menu component will not be officially released by the jQuery UI team until version 1.9, there maybe some changes required in my plugin once jQuery UI 1.9 has been released.  I wanted to make it available to anyone that was interested before that though since I might get some feedback in the meantime.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-7582406046514391832?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/7582406046514391832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=7582406046514391832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7582406046514391832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7582406046514391832'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/03/jquery-ui-listbox-widget-plugin.html' title='jQuery UI Listbox widget plugin'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-7725015131379464932</id><published>2011-02-15T12:01:00.000-08:00</published><updated>2011-02-15T12:01:10.243-08:00</updated><title type='text'>Stratiscape multi layer HTML5 canvas library on GitHub</title><content type='html'>I've just published (pushed) a simple sample using my &lt;a href="https://github.com/mpalmerlee/Stratiscape"&gt;Stratiscape canvas library&lt;/a&gt; to GitHub.  The sample displays an animated pinwheel drawn using the canvas javascript functions: createRadialGradient and drawImage.  I also added a foreground layer of dandelion seeds floating around in front of the rotating pinwheel, a bit of wind and random movement and rotation and you have a captivating screensaver-esq &lt;a href="http://mpalmerlee.github.com/Stratiscape/"&gt;Pinwheel and Dandelion&lt;/a&gt; animated canvas.  I also added buttons to change the wind direction and speed to show how Stratiscape can be used to capture mouse events and allow the user to interact with the canvas.  One thing that I'm not happy with is that in order to get the pinwheel effect I wanted I had to use a rotating image which isn't consistant between firefox, chrome and safari (for some reason my radial gradients on safari are a bit darker, and on chrome the image rotation is off during portions of the pinwheel spin).  I was trying to think of a way to use the globalCompositeOperation function to get the infinite layered effect I wanted on the radial gradients, however I couldn't figure out how it would work in the short time I looked at it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-7725015131379464932?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/7725015131379464932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=7725015131379464932' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7725015131379464932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7725015131379464932'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/02/stratiscape-multi-layer-html5-canvas.html' title='Stratiscape multi layer HTML5 canvas library on GitHub'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-5071547545446842461</id><published>2011-02-08T10:12:00.000-08:00</published><updated>2011-02-08T10:12:46.443-08:00</updated><title type='text'>Porting Silverlight App to javascript using HTML5 Canvas tag</title><content type='html'>I'm well underway in converting my Silverlight game: &lt;a href="http://www.astriarch.com"&gt;Astriarch - Ruler of the Stars&lt;/a&gt; to javascript using jQuery and the HTML5 Canvas tag.  I was playing around with the Windows Phone 7 SDK, thinking that it should be relatively easy to port my Silverlight application to windows phone 7, however it wasn't as straightforward as I would have hoped and since the app was built for 800x600, scalaing it down for the windows phone 7 size was not going to look all that great.&lt;br /&gt;&lt;br /&gt;   Instead I decided to port the application to HTML5 using javascript and the canvas tag, this will allow the game to be played on a much wider range of devices (tablets and phones), and I may create targeted android and iPhone applications using the new HTML5 codebase.&lt;br /&gt;&lt;br /&gt;   I looked at quite a few different javascript canvas libraries, especially ones that allow multiple layers (&lt;a href="http://easeljs.com/"&gt;easelJS&lt;/a&gt;, &lt;a href="http://artisanjs.com/"&gt;Artisan JS&lt;/a&gt;, Priit Kallas' &lt;a href="http://html-canvas-lib.sourceforge.net/"&gt;HTML Canvas Javascript Library&lt;/a&gt;, Michael Camden's &lt;a href="http://code.google.com/p/layered-canvas-library/"&gt;layered-canvas-library&lt;/a&gt;, and &lt;a href="http://forvar.de/js/mcl/"&gt;MooTools Canvas Library&lt;/a&gt;) however many of them were far more complex than I needed so I created my own simple canvas library.  I'm calling the library: &lt;a href="https://github.com/mpalmerlee/Stratiscape"&gt;Stratiscape&lt;/a&gt;, it's still being developed and currently it's very much alpha code, but it is functional.  I'll be creating some simple examples of it's usage in the future and working out any kinks I find. &lt;br /&gt;&lt;br /&gt;I'm using jQuery UI for many of the specialized UI components to replace their counterparts in Silverlight such as Button, Slider, and Dialog.  One control that I needed that jQuery UI doesn't currently have is the listbox, however I found that there is an undocumented/unreleased widget in jQuery UI called menu which the auto-complete leverages.  I've been able to wrap the menu widget in my own javascript listbox control and it works very nice as a replacement for the silverlight listbox control.  When I have some time to clean that up I may decide to release the listbox as well so that other people may benefit from it (I'll probably wait for jQuery UI 1.9 to be released because they plan on officially releasing and supporting the menu widget as a separate component).&lt;br /&gt;&lt;br /&gt;Porting the Astriarch game is currently taking up most of my free time, but when that's done I'll be able to go back and clean up and release some of these other libraries I've created in the process.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-5071547545446842461?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/5071547545446842461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=5071547545446842461' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/5071547545446842461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/5071547545446842461'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/02/porting-silverlight-app-to-javascript.html' title='Porting Silverlight App to javascript using HTML5 Canvas tag'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-6806174315045251216</id><published>2011-01-07T16:00:00.000-08:00</published><updated>2011-01-07T16:00:33.669-08:00</updated><title type='text'>Internet Explorer Developer Tools Dissapear</title><content type='html'>I've been using the IE Developer Tools in Internet Explorer 8 exensively lately because of problems I've been trying to solve, however the other day I went to open the developer tools window (or click F12) and it showed the developer tools window at in the Windows task bar, however hovering over it in windows 7 just shows a blank window and I don't see it anywhere on my screen.  Tons of people report problems with the developer tools, (it does seem like a very fragile extension), and I tried a bunch of the solutions suggested with no luck.  Finally I found one post that suggested that the developer tools are most likely off-screen.  If you select the window and hit windowskey-left arrow or windowskey-right arrow the developer tools reappears!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-6806174315045251216?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/6806174315045251216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=6806174315045251216' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/6806174315045251216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/6806174315045251216'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/01/internet-explorer-developer-tools.html' title='Internet Explorer Developer Tools Dissapear'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-4960696769957613839</id><published>2011-01-06T12:29:00.000-08:00</published><updated>2011-01-06T12:29:36.689-08:00</updated><title type='text'>IE Quirks Mode and Font-Size:small</title><content type='html'>At work we have used IE Quirks mode to get around some of the nightmares of the past trying to layout html elements in Internet Explorer, the latest hassle I had to overcome was an issue where it seemed that IE in Quirks mode would not respect my Font-Size:small css specification.  Finally my co-worker suggested I try a percentage adjustment so I changed it to Font-Size:130% and it worked!  I'm hoping that soon we can switch away from using Quirks mode and we can move forward to standards mode, but since we've developed our application from the ground-up using quirks mode there are countless problems when we switch to standards, so for now we'll just have to keep fighting with these hassles caused by the horrors of using Quirks mode.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-4960696769957613839?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/4960696769957613839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=4960696769957613839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/4960696769957613839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/4960696769957613839'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2011/01/ie-quirks-mode-and-font-sizesmall.html' title='IE Quirks Mode and Font-Size:small'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-5742411673251352658</id><published>2010-12-21T19:42:00.000-08:00</published><updated>2010-12-21T19:42:24.620-08:00</updated><title type='text'>Upgraded to Xcode 3.2.5, project using ios sdk 4.1 throws errors in AvailabilityInternal.h</title><content type='html'>I opened an old Xcode project today and was surprised when there were 37 build errors in my project that used to compile fine, that's when I remembered I had upgraded Xcode somewhat recently so it was probably something going on in the ios framework.  The build errors were inside one of Apple's internal files: AvailabilityInternal.h where it was checking the __IPHONE_OS_VERSION_MIN_REQUIRED macro, the error was something like: .../usr/include/AvailabilityInternal.h:56:42: error: operator '&lt;' has no left operandAfter poking around in the project options (Project -&gt; Edit Project Settings from the menu), I simply had to change the Base SDK option from iphonesimulator4.1 to Latest iOS (4.2).  Once I did that everything was back to normal, an easy solution to a cryptic problem that no one else seemed to report so I figured I'd write a quick entry about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-5742411673251352658?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/5742411673251352658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=5742411673251352658' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/5742411673251352658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/5742411673251352658'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2010/12/upgraded-to-xcode-325-project-using-ios.html' title='Upgraded to Xcode 3.2.5, project using ios sdk 4.1 throws errors in AvailabilityInternal.h'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-8169231190132738810</id><published>2010-12-19T17:48:00.000-08:00</published><updated>2010-12-19T17:48:59.509-08:00</updated><title type='text'>Discovered NSPredicate for easily filtering items in an array in Objective-C</title><content type='html'>I've been learning Objective-C lately and building some iPhone and iPad applications in the process.  Today I needed to filter out items in an array matching a search term from a UISearchBar.  I was about to write a simple for loop to iterate through the items, check if a particular member of the objects of the array matched to my search string and then add them to a new filtered array.  That's when I noticed the filterUsingPredicate method on the NSMutableArray object, with a nice SQLite-like syntax I could filter my array to just the items I was interested in!  It reminds me of the power of the LINQ features provided in more recent versions of Microsoft's .NET framework.  This saved me lots of tedious code, so with just a few lines I can filter out my arrays exactly how I want.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar&lt;br /&gt;{&lt;br /&gt;  NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(memberName LIKE[cd] %@)", [[searchBar text] stringByAppendingString:@"*"]];&lt;br /&gt;  //arrFull is my original unfiltered array&lt;br /&gt;  NSArray *arrFiltered = [arrFull filteredArrayUsingPredicate:predicate];&lt;br /&gt;  //...now any processing for arrFiltered &lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Sometimes it doesn't hurt to check the documentation before doing something brute force, in my case it was an accident because I happened to be looking there anyways, but it saved me lots of lines and now I end up with a much more maintainable and elegant bit of code!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-8169231190132738810?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/8169231190132738810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=8169231190132738810' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/8169231190132738810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/8169231190132738810'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2010/12/discovered-nspredicate-for-easily.html' title='Discovered NSPredicate for easily filtering items in an array in Objective-C'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-1300181302185850890</id><published>2010-11-12T10:44:00.000-08:00</published><updated>2011-01-03T09:11:52.834-08:00</updated><title type='text'>Mute the Microphone from C# on Windows</title><content type='html'>I've recently had the need to Mute the Microphone device in Windows from code.  There are quite a few sources for muting the microphone from c++ code, but I needed to be able to mute the microphone from .Net using C# managed wrappers.&lt;br /&gt;&lt;br /&gt;In Windows XP and older windows operating systems you can use Microsoft's MCI (&lt;a href="http://msdn.microsoft.com/en-us/library/dd757151%28VS.85%29.aspx"&gt;Media Control Interface&lt;/a&gt;) to control Audio hardware such as the microphone and thanks to this post on stackoverflow: &lt;a href="http://stackoverflow.com/questions/2078970/how-to-mute-the-microphone-c"&gt;How to mute the microphone c#&lt;/a&gt; I was able to figure out how to use &lt;a href="http://www.codeguru.com/csharp/csharp/cs_graphics/sound/article.php/c10931"&gt;Gustavo Franco's MixerNative AudioLib source code&lt;/a&gt; to mute the microphone.  Gustavo's source code is a full mixer application and was overkill since I only needed to mute the microphone, so I was able to use pieces of his code and some of the c++ code in the stackoverflow post to get directly to muting the microphone.&lt;br /&gt;&lt;br /&gt;After figuring all this out, I realized that this code didn't work on Windows 7!  Turns out that starting with Windows Vista, Microsoft created a new &lt;a href="http://msdn.microsoft.com/en-us/library/dd370802(VS.85).aspx"&gt;Core Audio API&lt;/a&gt; that is supposed to make interfacing with audio hardware easier for developers.  Since again all these api's are natively accessible from c++, and since there are no nice and easy ways to call them from .NET in C#, developers have to write there own managed wrappers to invoke the functions using the System.Runtime.InteropServices namespace.&lt;br /&gt;&lt;br /&gt;Thankfully Ray Molenkamp wrote a nice &lt;a href="http://www.codeproject.com/KB/vista/CoreAudio.aspx?msg=2489276"&gt;C# managed wrapper for accessing the Vista Core Audio API&lt;/a&gt; which is available over at the Code Project.  I tried taking Ray's library apart as well like I did with Gustavo's, partially so I could better understand the code, and partially because his library does lots more than I needed simply to mute the microphone. However after piecing together the parts of his code I needed to just mute the microphone it wasn't working quite right so I just gave up and my library uses his CoreAudioApi outright.&lt;br /&gt;&lt;br /&gt;Since this was a bit of a pain to get working and piece all together I've decided to make the library I wrote available which allows you to mute the Microphone on Windows XP, Vista and Windows 7 (and possibly older windows operating systems too, I haven't tested it on 2000 or anything else).&lt;br /&gt;&lt;br /&gt;To use the library simply instantiate an object instance of the WindowsMicrophoneMuteLibrary.WindowsMicMute class:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;WindowsMicrophoneMuteLibrary.WindowsMicMute micMute = new WindowsMicrophoneMuteLibrary.WindowsMicMute();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then simply call MuteMic() and UnMuteMic() as desired on the WindowsMicMute object:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;micMute.MuteMic();&lt;br /&gt;micMute.UnMuteMic();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;You can download my WindowsMicrophoneMuteLibrary Source Code from here:&lt;br /&gt;&lt;a href="http://sites.google.com/a/masteredsoftware.com/www/WindowsMicrophoneMute.zip"&gt;WindowsMicrophoneMute.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you just want the dll binary files, you can download those here:&lt;br /&gt;&lt;a href="https://sites.google.com/a/masteredsoftware.com/www/WindowsMicrophoneMuteLibraryBinaries.zip"&gt;WindowsMicrophoneMuteLibraryBinaries.zip&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-1300181302185850890?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/1300181302185850890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=1300181302185850890' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/1300181302185850890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/1300181302185850890'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2010/11/mute-microphone-from-c-on-windows.html' title='Mute the Microphone from C# on Windows'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-5316127237619848537</id><published>2010-11-06T20:43:00.000-07:00</published><updated>2010-11-07T12:57:32.881-08:00</updated><title type='text'>New version released of DupeMan - The Duplicate File Manager</title><content type='html'>I just released a new version of the Duplicate File management program: DupeMan.  It has been quite awhile since I've released any updates, especially since I've been busy working on my first game: &lt;a href="http://www.astriarch.com"&gt;Astriarch - Ruler of the Stars&lt;/a&gt;.  The changes I've made to DupeMan are mostly threading improvements so that there is the application is usable while indices are loaded and being processed.  This includes a status area progress bar so that you can see how long indexing your file, loading index files, and checking for duplicates is going to take. I've also moved the page for the Duplicate file manager from my personal site to my MasteredSoftware.com site, you can download the new version here:&lt;br /&gt;&lt;a href="http://www.masteredsoftware.com/software/dupeman"&gt;http://www.masteredsoftware.com/software/dupeman&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-5316127237619848537?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/5316127237619848537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=5316127237619848537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/5316127237619848537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/5316127237619848537'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2010/11/new-version-released-of-dupeman.html' title='New version released of DupeMan - The Duplicate File Manager'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-2498242745865072593</id><published>2010-10-12T11:12:00.000-07:00</published><updated>2010-10-12T11:22:46.881-07:00</updated><title type='text'>Astriarch - Ruler of the Stars Browser based Space Strategy Game</title><content type='html'>I've finished and posted the tutorial videos for the &lt;a href="http://www.astriarch.com"&gt;Free Space Strategy Game&lt;/a&gt; that runs in your browser (Silverlight plugin required): &lt;a href="http://www.astriarch.com"&gt;Astriarch - Ruler of the Stars&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The tutorial videos show you how to get started playing Astriarch, as well as some tips on how to beat the computer.  Since I couldn't edit the tutorial down to the 15 minute limit of youtube, I had to post it in two parts.&lt;br /&gt;&lt;br /&gt;Also since I posted the tutorial I've made some improvements to the game including adding starship advantages, each starship type gets a bonus when attacking a starship type it has an advantage against.&lt;br /&gt;&lt;br /&gt;I'm still trying to get a soundtrack in the game and some sound effects to make the game a bit more engaging, once I'm done with that I'll try to promote the game on some of the Silverlight game portals.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-2498242745865072593?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/2498242745865072593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=2498242745865072593' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/2498242745865072593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/2498242745865072593'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2010/10/astriarch-ruler-of-stars-browser-based.html' title='Astriarch - Ruler of the Stars Browser based Space Strategy Game'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-8514209416245245447</id><published>2010-10-06T18:05:00.000-07:00</published><updated>2010-10-07T13:50:17.829-07:00</updated><title type='text'>Error Setting up mirroring for Sql Server 2008</title><content type='html'>I've been setting up SQL Server Mirroring for High Availability recently, and thanks to Edwin Sarmiento's blog post on &lt;a href="http://www.mssqltips.com/tip.asp?tip=1705"&gt;Implementing Database Mirroring in SQL Server 2005 across domains&lt;/a&gt;, the process has been relatively easy in the test lab.&lt;br /&gt;&lt;br /&gt;However, upon following the same steps in production I ran into a few problems.&lt;br /&gt;&lt;br /&gt;Since in my environment I do not have a domain controller so the fragile part of this whole process is logins and passwords between the two sytems.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_XTRg4FwrPrg/TK4otpkfvpI/AAAAAAAAABo/vyZ5CSNJe_A/s1600/DBMirroringMonitorNotConnected.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 202px;" src="http://2.bp.blogspot.com/_XTRg4FwrPrg/TK4otpkfvpI/AAAAAAAAABo/vyZ5CSNJe_A/s320/DBMirroringMonitorNotConnected.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5525398557548330642" /&gt;&lt;/a&gt;&lt;br /&gt;The first problem I ran into was after I had setup the endpoints and certificates and logins, etc... the database mirroring monitor would show an error "can't connect" and when I looked in the windows event log I saw this error:&lt;br /&gt;SSPI handshake failed with error code 0x8009030c while establishing a connection with integrated security; the connection has been closed.&lt;br /&gt;&lt;br /&gt;Which was a little bit helpful, but google was not in this regard, this error apparently shows up everywhere and I couldn't find any diffinitive answers.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_XTRg4FwrPrg/TK4f0oeH4JI/AAAAAAAAABA/3uwW2eA5aS4/s1600/SqlServerConfigurationManager.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 179px;" src="http://2.bp.blogspot.com/_XTRg4FwrPrg/TK4f0oeH4JI/AAAAAAAAABA/3uwW2eA5aS4/s320/SqlServerConfigurationManager.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5525388781907599506" /&gt;&lt;/a&gt;So one thing I checked was the client protocols in the Sql Server Configuration Manager, I've had problems before connecting to remote servers that have been resolved by enabling all the protocols (such as TCP/IP and Named Pipes).&lt;br /&gt;&lt;br /&gt;After this, I restarted both the primary and mirror servers to make sure the settings in the configuration manager took.  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_XTRg4FwrPrg/TK4hzMroLGI/AAAAAAAAABI/5nVENZZVGz8/s1600/TasksMirroringSynchronized.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 288px;" src="http://1.bp.blogspot.com/_XTRg4FwrPrg/TK4hzMroLGI/AAAAAAAAABI/5nVENZZVGz8/s320/TasksMirroringSynchronized.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5525390956291435618" /&gt;&lt;/a&gt;&lt;br /&gt;I was still however getting errors in the event logs and every time I opened the database mirroring monitor I would still get the error showing unable to connect to the other server.  The strange thing was that on the principal server when I right-clicked the database and selected "Tasks -&gt; Mirror..." it showed in the status area: "Synchronized: the databases are fully synchronized".&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_XTRg4FwrPrg/TK4jMQ1kZHI/AAAAAAAAABQ/OhbHocVa1aQ/s1600/DBMirroringMonitorManageServerInstanceConnections.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 137px;" src="http://2.bp.blogspot.com/_XTRg4FwrPrg/TK4jMQ1kZHI/AAAAAAAAABQ/OhbHocVa1aQ/s320/DBMirroringMonitorManageServerInstanceConnections.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5525392486415230066" /&gt;&lt;/a&gt;&lt;br /&gt;Finally I figured out that the problem was the credentials the database mirroring monitor was using to connect to the principal and mirror servers which you can configure by right clicking on the root node of the Database Mirroring Monitor and selecting "Manage Server Instance Connections".&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_XTRg4FwrPrg/TK4lfne000I/AAAAAAAAABY/9n18U1pOwCE/s1600/ManageServerInstanceConnections.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 222px;" src="http://3.bp.blogspot.com/_XTRg4FwrPrg/TK4lfne000I/AAAAAAAAABY/9n18U1pOwCE/s320/ManageServerInstanceConnections.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5525395017934623554" /&gt;&lt;/a&gt;&lt;br /&gt;From here you can click the edit button to give the sa (or other sysadmin user) for the remote machine.  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_XTRg4FwrPrg/TK4s6xOJCuI/AAAAAAAAABw/gZ6PDthL6Ss/s1600/ManageServerInstanceConnectionsServerError.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 102px;" src="http://1.bp.blogspot.com/_XTRg4FwrPrg/TK4s6xOJCuI/AAAAAAAAABw/gZ6PDthL6Ss/s320/ManageServerInstanceConnectionsServerError.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5525403180986862306" /&gt;&lt;/a&gt;&lt;br /&gt;Another problem I had at this point was the server names, after sql server was installed the server names were changed which also made sql server very grumpy, because it was thinking the machine name was the old machine name and said this message to the effect of: "SQL Server replication requires the actual server name to make a connection to the server.  Connection through a server alias, IP address, or another other alternate name are not supported..."  I have no idea what the magical combination of things I had to do to get past this error, trying every combination of names and just letting it fail, removing the registration, and re-registering the mirrored database I eventually got it to work, this was probably the most frustrating part...&lt;br /&gt;If you can't get this to work after renaming the machine, you can try this process:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;EXEC sp_dropserver 'oldName'&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;EXEC sp_addserver 'newName', 'local'&lt;br /&gt;GO&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Restart your SQL Server service and then try the following sql:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;SELECT @@SERVERNAME&lt;br /&gt;GO&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_XTRg4FwrPrg/TK4l89L7omI/AAAAAAAAABg/Bmi1-f-2tb0/s1600/DBMirroringMonitorSynchronized.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 202px;" src="http://3.bp.blogspot.com/_XTRg4FwrPrg/TK4l89L7omI/AAAAAAAAABg/Bmi1-f-2tb0/s320/DBMirroringMonitorSynchronized.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5525395521977164386" /&gt;&lt;/a&gt;&lt;br /&gt;After setting this up the Database Mirroring Monitor shows successful on both machines.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-8514209416245245447?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/8514209416245245447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=8514209416245245447' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/8514209416245245447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/8514209416245245447'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2010/10/error-setting-up-mirroring-for-sql.html' title='Error Setting up mirroring for Sql Server 2008'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_XTRg4FwrPrg/TK4otpkfvpI/AAAAAAAAABo/vyZ5CSNJe_A/s72-c/DBMirroringMonitorNotConnected.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-6002813962742266904</id><published>2010-09-23T21:59:00.000-07:00</published><updated>2010-09-23T22:05:27.212-07:00</updated><title type='text'>System Master is now Astriarch - Ruler of the Stars</title><content type='html'>After announcing the space strategy game I've been developing in my last post, I've been wanting to rename System Master to something a little more descriptive and unique.  After playing with many ideas and thanks to &lt;a href="http://www.wiktionary.org/"&gt;wiktionary.org&lt;/a&gt; for helping me with entomology, greek and latin, I finally came up with a name that I was happy with: Astriarch - Ruler of the Stars.&lt;br /&gt;&lt;br /&gt;You can see the website for the renamed game at the domain: &lt;a href="http://www.astriarch.com/"&gt;Astriarch.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm currently working on a tutorial video right now that should help people learn how to play.  I'll post that as soon as I'm done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-6002813962742266904?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/6002813962742266904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=6002813962742266904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/6002813962742266904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/6002813962742266904'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2010/09/system-master-is-now-astriarch-ruler-of.html' title='System Master is now Astriarch - Ruler of the Stars'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-7714934043576066670</id><published>2010-09-07T17:29:00.000-07:00</published><updated>2010-11-04T16:17:48.029-07:00</updated><title type='text'>System Master - Space Strategy Game in Silverlight</title><content type='html'>For quite some time I've wanted to build video games, and my favorite video games to play have always been space themed games that involve strategy and/or civilization building.&lt;br /&gt;&lt;br /&gt;Over the last few months in my spare time I decided to play around with Microsoft's Silverlight development platform and I decided that what better way to play around with Silverlight than to build a space strategy game!  For a long time I had considered building a game using Flash because everyone has flash installed, but since I don't know the Flash development tools very well and I'm very comfortable with C#, I figured Silverlight was a good fit.&lt;br /&gt;&lt;br /&gt;As of today, &lt;a href="http://www.masteredsoftware.com/software/system-master-game"&gt;System Master&lt;/a&gt; is released as a public beta, it is playable yet it desperately needs music and sound effects.  In the future I may decide to port the game to the iPad, but silverlight was a great platform to get started quickly and play with ideas.&lt;br /&gt;&lt;br /&gt;I also intend to publish some tutorial videos to get people started because the in-game help is almost non-existant.&lt;br /&gt;&lt;br /&gt;Here is a list of old-school games that gave me inspiration when developing my space strategy game - System Master:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Master_of_Orion_II:_Battle_at_Antares"&gt;Master of Orion 2&lt;/a&gt;&lt;br /&gt;&lt;a href="http://hol.abime.net/3427"&gt;Stellar Conflict&lt;/a&gt; (space strategy game for the Commodore Amiga)&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Star_Control"&gt;Star Control&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.abandonia.com/en/games/936/Star+Reach.html"&gt;Star Reach&lt;/a&gt; - also known as Space Federation (another great space game for DOS, arcade and strategy)&lt;br /&gt;&lt;br /&gt;Please give System Master a go and let me know any comments you have!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-7714934043576066670?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/7714934043576066670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=7714934043576066670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7714934043576066670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7714934043576066670'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2010/09/system-master-space-strategy-game-in.html' title='System Master - Space Strategy Game in Silverlight'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-1902404058827896528</id><published>2010-08-03T11:01:00.000-07:00</published><updated>2010-08-03T11:58:56.038-07:00</updated><title type='text'>Deployment of Crystal Reports with Sub Reports on Multiple Servers and issues with ApplyLogOnInfo</title><content type='html'>We have been using Jan Schreuder's &lt;a href="http://www.codeproject.com/KB/dotnet/CrystalHelper.aspx"&gt;Crystal Reports helper class&lt;/a&gt; to open and display reports within our .NET web application.  Jan's library makes it easy to set parameters programmatically from C# and takes care of some of the grunt work setting up credentials for the report so that the database connection can be changed at runtime.&lt;br /&gt;&lt;br /&gt;   For quite some time we have used the library without problem, but have never written a report containing a subreport.  Now that we have reports that have sub-reports inside them with different commands than the main report, we started running into problems.  After lots of debugging I narrowed it down to the call to "ApplyLogOnInfo" inside Jan's AssignTableConnection function, as far as I can tell the "ApplyLogOnInfo" is supposed to set the credentials for the table connection passed in, however it seemed to also override the command for the subreport so that the sub-report's command ended up being the same command as for the main report. When deploying the report to different servers we would see duplicated data within the report.&lt;br /&gt;&lt;br /&gt;   I commented out the call to ApplyLogOnInfo and instead just manually update the settings for the table's LogOnInfo's properties.&lt;br /&gt;   Here is a listing of my new AssignTableConnection function:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;private static void AssignTableConnection(CrystalDecisions.CrystalReports.Engine.Table table, ConnectionInfo connection)&lt;br /&gt;  {&lt;br /&gt;   // Cache the logon info block&lt;br /&gt;   TableLogOnInfo logOnInfo = table.LogOnInfo;&lt;br /&gt;&lt;br /&gt;            connection.Type = logOnInfo.ConnectionInfo.Type;&lt;br /&gt;   &lt;br /&gt;            // Set the connection&lt;br /&gt;   logOnInfo.ConnectionInfo = connection;&lt;br /&gt;&lt;br /&gt;   // Apply the connection to the table!&lt;br /&gt;            //table.ApplyLogOnInfo(logOnInfo);//commented out Aug 2nd 2010 MPP for subreports seems that this actually overrides the command so if you have a different command in the subreport it uses the command from the main report&lt;br /&gt;&lt;br /&gt;            table.LogOnInfo.ConnectionInfo.DatabaseName = connection.DatabaseName;&lt;br /&gt;            table.LogOnInfo.ConnectionInfo.ServerName = connection.ServerName;&lt;br /&gt;            table.LogOnInfo.ConnectionInfo.UserID = connection.UserID;&lt;br /&gt;            table.LogOnInfo.ConnectionInfo.Password = connection.Password;&lt;br /&gt;            table.LogOnInfo.ConnectionInfo.Type = connection.Type;&lt;br /&gt;  }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Another change we have made in our library that we've had for quite some time is a call to SetDatabaseLogon on the _reportDocument and subDocument objects within Jan's AssignConnection function.  Here is that full function as well for completeness:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;private void AssignConnection()&lt;br /&gt;  {&lt;br /&gt;   ConnectionInfo connection = new ConnectionInfo();&lt;br /&gt;&lt;br /&gt;   connection.DatabaseName = _datebaseName;&lt;br /&gt;   connection.ServerName = _serverName;&lt;br /&gt;            if (_integratedSecurity)&lt;br /&gt;            {&lt;br /&gt;                connection.IntegratedSecurity = _integratedSecurity;&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                connection.UserID = _userId;&lt;br /&gt;                connection.Password = _password;&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;            &lt;br /&gt;&lt;br /&gt;   // First we assign the connection to all tables in the main report&lt;br /&gt;   //&lt;br /&gt;   foreach (CrystalDecisions.CrystalReports.Engine.Table table in _reportDocument.Database.Tables)&lt;br /&gt;   {&lt;br /&gt;    AssignTableConnection(table, connection);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   // Now loop through all the sections and its objects to do the same for the subreports&lt;br /&gt;   //&lt;br /&gt;   foreach (CrystalDecisions.CrystalReports.Engine.Section section in _reportDocument.ReportDefinition.Sections)&lt;br /&gt;   {&lt;br /&gt;    // In each section we need to loop through all the reporting objects&lt;br /&gt;    foreach (CrystalDecisions.CrystalReports.Engine.ReportObject reportObject in section.ReportObjects)&lt;br /&gt;    {&lt;br /&gt;     if (reportObject.Kind == ReportObjectKind.SubreportObject)&lt;br /&gt;     {&lt;br /&gt;      SubreportObject subReport = (SubreportObject)reportObject;&lt;br /&gt;      ReportDocument  subDocument = subReport.OpenSubreport(subReport.SubreportName);&lt;br /&gt;                        &lt;br /&gt;      foreach (CrystalDecisions.CrystalReports.Engine.Table table in subDocument.Database.Tables)&lt;br /&gt;      {&lt;br /&gt;       AssignTableConnection(table, connection);&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;                        subDocument.SetDatabaseLogon(connection.UserID, connection.Password, connection.ServerName, connection.DatabaseName);&lt;br /&gt;     }&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;            _reportDocument.SetDatabaseLogon(connection.UserID, connection.Password, connection.ServerName, connection.DatabaseName);&lt;br /&gt;  }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;That should help anyone using Jan's library with reports containing sub-reports and trying to set the connection info at runtime.  Overall, I'm very happy with the CrystalHelper library and I really appreciate the time Jan has put into developing it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-1902404058827896528?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/1902404058827896528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=1902404058827896528' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/1902404058827896528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/1902404058827896528'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2010/08/deployment-of-crystal-reports-with-sub.html' title='Deployment of Crystal Reports with Sub Reports on Multiple Servers and issues with ApplyLogOnInfo'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-7117948272154004262</id><published>2010-06-08T09:47:00.000-07:00</published><updated>2010-06-08T11:01:53.886-07:00</updated><title type='text'>Silverlight: Modify BitmapImage and Load Image Synchronously</title><content type='html'>I am currently working on a simple Space Strategy game in Silverlight (I'll post a link when it's closer to being done).  I have some images which I had the need to change the color of which I was able to do without too much trouble with the following function (thanks to the WriteableBitmap object):&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;private static void ChangeImageColor(Image img, Color colorNew)&lt;br /&gt;        {&lt;br /&gt;           &lt;br /&gt;            WriteableBitmap bitmap = new WriteableBitmap(img, null);&lt;br /&gt;            for (int y = 0; y &lt; bitmap.PixelHeight; y++)&lt;br /&gt;            {&lt;br /&gt;                for (int x = 0; x &lt; bitmap.PixelWidth; x++)&lt;br /&gt;                {&lt;br /&gt;                    int pixelLocation = bitmap.PixelWidth * y + x;&lt;br /&gt;                    int pixel = bitmap.Pixels[pixelLocation];&lt;br /&gt;&lt;br /&gt;                    byte[] pixelBytes = BitConverter.GetBytes(pixel);&lt;br /&gt;&lt;br /&gt;                    if (pixelBytes[3] != 0)//if the pixel is non-transparent?&lt;br /&gt;                    {&lt;br /&gt;                        pixelBytes[0] = colorNew.B;//b&lt;br /&gt;                        pixelBytes[1] = colorNew.G;//g&lt;br /&gt;                        pixelBytes[2] = colorNew.R;//r&lt;br /&gt;&lt;br /&gt;                        bitmap.Pixels[pixelLocation] = BitConverter.ToInt32(pixelBytes, 0);&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            img.Source = bitmap;&lt;br /&gt;        }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Basically I have images with transparent backgrounds and a single other color I wanted to change, so the above code just changes any non-transparet pixels to the desired color.  Which seems to work fine, the part that I fought with for awhile was that I couldn't get the BitmapImage to load synchronously so that the pixels were immediately available, because when I just used the BitmapImage constructor which takes a Uri object:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;BitmapImage bi = new BitmapImage(new Uri(relativePath, UriKind.Relative));&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;the bitmap pixels were all zero.&lt;br /&gt;&lt;br /&gt;Then I just tried to use a FileStream to open the file but I kept getting access denied errors, so I found the following page:&lt;br /&gt;&lt;a href="http://www.learn-silverlight-tutorial.com/ImprovingSilverlightApplicationPerformance.cfm"&gt;Improving Silverlight Application Performance&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Which pointed to the following lines of code:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;StreamResourceInfo photoStream = Application.GetResourceStream(photosDownloaded, new Uri(photoToGrab, UriKind.Relative));&lt;br /&gt;&lt;br /&gt;BitmapImage bitmap = new BitmapImage();&lt;br /&gt; &lt;br /&gt;bitmap.SetSource(photoStream.Stream);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Which seemed to do the trick to get the image to load synchronously and not give me the access denied errors.&lt;br /&gt;&lt;br /&gt;So here is my second function to give a new image brush with the updated (new colorized) image:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;private static ImageBrush GetColorChangedImageBrush(string uriRelativePath, Color colorNew)&lt;br /&gt;        {&lt;br /&gt;            BitmapImage bi = new BitmapImage();&lt;br /&gt;            bi.CreateOptions = BitmapCreateOptions.None;&lt;br /&gt;&lt;br /&gt;            System.Windows.Resources.StreamResourceInfo bmpStream = Application.GetResourceStream(new Uri(@"SystemMaster;component/" + uriRelativePath, UriKind.Relative));&lt;br /&gt;            bi.SetSource(bmpStream.Stream);&lt;br /&gt;&lt;br /&gt;            Image i = new Image();&lt;br /&gt;            i.Stretch = Stretch.None;&lt;br /&gt;            i.Source = bi;&lt;br /&gt;           &lt;br /&gt;&lt;br /&gt;            WriteableBitmap wb = new WriteableBitmap(i, null);&lt;br /&gt;    &lt;br /&gt;            //change the non-transparent pixels to the owner color&lt;br /&gt;            DrawnPlanet.ChangeImageColor(i, colorNew);&lt;br /&gt;&lt;br /&gt;            ImageBrush ib = new ImageBrush();&lt;br /&gt;            ib.Stretch = Stretch.None;&lt;br /&gt;            ib.ImageSource = i.Source;&lt;br /&gt;&lt;br /&gt;            return ib;&lt;br /&gt;        }&lt;br /&gt;&lt;/code&gt; &lt;br /&gt;&lt;br /&gt;Note that in the uri path I need to give the path to the qualified resource name with the "ApplicationName;component/" prefix ("SystemMaster;component/").&lt;br /&gt;&lt;br /&gt;Hope this helps someone else trying to do a similar with Silverlight.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-7117948272154004262?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/7117948272154004262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=7117948272154004262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7117948272154004262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7117948272154004262'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2010/06/silverlight-modify-bitmapimage-and-load.html' title='Silverlight: Modify BitmapImage and Load Image Synchronously'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-6290379251810493021</id><published>2010-03-12T16:07:00.000-08:00</published><updated>2010-03-12T17:10:04.692-08:00</updated><title type='text'>Crystal Reports Chart and Graph Images don't show on Windows Server 2008</title><content type='html'>At work we use the Crystal Reports basic for Visual Studio 2008 (version 10.5) to allow our users to view reports, everything was working fine while we developed in XP and were using Windows Server 2003, except when we tried to move to Windows Server 2008 and the images served by the CrystalImageHandler.aspx http handler wasn't working for whatever reason and the dynamically generated images for the charts and graps in Crystal Reports were showing a red X (or just the alt text of "Image").&lt;br /&gt;&lt;br /&gt;After much searching for the resolution of this problem, and lots of tweaks to the web.config and the temp folder security (which didn't help), I found one page which pointed me in the right direction:&lt;br /&gt;http://forums.sdn.sap.com/thread.jspa?threadID=1338110&lt;br /&gt;&lt;br /&gt;Basically I created a new dummy page and dragged the CrystalReportViewer control onto it, which auto-updated my web.config with a couple of items I was missing apparently.  I already had the section under the httpHandlers node for the CrystalImageHandler.aspx:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;httpHandlers&amp;gt;&lt;br /&gt; &amp;lt;add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" /&amp;gt;&lt;br /&gt;&amp;lt;/httpHandlers&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Here are the missing elements that dragging the viewer onto a new page added for me:&lt;br /&gt;Under the assemblies node it added these references:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;assemblies&amp;gt;&lt;br /&gt; &amp;lt;add assembly="CrystalDecisions.CrystalReports.Engine, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/&amp;gt;&lt;br /&gt; &amp;lt;add assembly="CrystalDecisions.ReportSource, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/&amp;gt;&lt;br /&gt;  &amp;lt;add assembly="CrystalDecisions.Shared, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/&amp;gt;&lt;br /&gt;  &amp;lt;add assembly="CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/&amp;gt;&lt;br /&gt;  &amp;lt;add assembly="CrystalDecisions.ReportAppServer.ClientDoc, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/&amp;gt;&lt;br /&gt;  &amp;lt;add assembly="CrystalDecisions.Enterprise.Framework, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/&amp;gt;&lt;br /&gt;  &amp;lt;add assembly="CrystalDecisions.Enterprise.InfoStore, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/&amp;gt;&lt;br /&gt;&amp;lt;/assemblies&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Finally it added an item under the handlers node (which I think was the key missing component in my case:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;handlers&amp;gt;&lt;br /&gt; &amp;lt;add name="CrystalImageHandler.aspx_GET" verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" preCondition="integratedMode"/&amp;gt;&lt;br /&gt;&amp;lt;/handlers&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;After updating all that the charts began to show up again!&lt;br /&gt;Hope this helps someone else with this problem, I found there were lots of people reporting the problem and just as many different ways to solve it.  This PDF might help you too, it descrbes troubleshooting tips based on the version of Crystal Reports you have, but it didn't end up helping me at all:&lt;br /&gt;&lt;a href="http://www.sdn.sap.com/irj/boc/crystalreports-dotnet?rid=/library/uuid/a0437ea8-97d2-2b10-2795-c202a76a5e80"&gt;Crystal Report Viewers in Visual Studio .NET – Dynamic Images&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-6290379251810493021?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/6290379251810493021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=6290379251810493021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/6290379251810493021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/6290379251810493021'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2010/03/crystal-reports-chart-and-graph-images.html' title='Crystal Reports Chart and Graph Images don&apos;t show on Windows Server 2008'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-9031662698410798431</id><published>2009-11-27T17:50:00.000-08:00</published><updated>2009-11-30T16:39:59.542-08:00</updated><title type='text'>Installing Ubuntu Linux on HP Pavilion laptop - how to fix screen resolution</title><content type='html'>I decided that I would try installing a linux distro on my old HP Pavilion XH485 laptop, since I really wasn't using the system for anything for the last couple of years (it's pretty heavy and windows XP was just running unbearably slow).  I also wanted to be able to play with linux again, since the last time I had installed and used linux was years ago when I played with Caldera.  I've heard lots lately about Ubuntu linux and it seemed like a logical choice to try on my old hp pavilion laptop, reading a little about the different derivatives (&lt;a href="http://ubuntuindex.com/website/ubuntu-flavors/"&gt;flavors&lt;/a&gt;) of ubuntu I looked into kubuntu and xubuntu, ubuntu uses GNOME as the desktop environment while kubuntu uses the KDE desktop environment (which I remember liking quite a bit back in the Caldera days), xubuntu uses a desktop environment called Xfce and uses many GTK+ apps.  After reading about the different distros I decided to go with xubuntu 9.10 because many people said that xubuntu runs better on lower performing hardware (even if it is a bit less user friendly than ubuntu or kubuntu), since my hp laptop has only a 1 GHz AMD processor with only 256 MB ram, xubuntu made lots of sense.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xubuntu.org/"&gt;Go here for more information about Xubuntu.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The entire installation process was very simple, (first I backed up everything I needed on my existing XP install,&lt;a href="http://computercabal.blogspot.com/2009/10/backing-up-and-reformatting-windows-xp.html"&gt; see this blog post for some nice hints on how to make that go smoothly&lt;/a&gt;) I downloaded the CD image, burned it, went into my laptop's BIOS and made sure the CD-Rom was set in the boot order before the HD and followed the steps in the Xubuntu install.  After going through all the wizards I was up and running with my new linux laptop!&lt;br /&gt;&lt;br /&gt;The biggest problem after the install was done was that the screen resolution was only 800x600 and I couldn't increase the resolution to 1024x768 and there was about two inches of the screen that wasn't being used in the O/S.&lt;br /&gt;&lt;br /&gt;After lots of searching I was able to determine that the system seemed to need a file called xorg.conf in the /etc/X11 directory.&lt;br /&gt;&lt;br /&gt;Here is my xorg.conf file:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Section "Device"&lt;br /&gt;&lt;br /&gt;  Identifier "Trident Microsystems CyberBlade XP"&lt;br /&gt;&lt;br /&gt;  Driver "trident"&lt;br /&gt;&lt;br /&gt;  BusID "PCI:1:0:0"&lt;br /&gt;&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Section "Monitor"&lt;br /&gt;&lt;br /&gt;  Identifier "Generic Monitor"&lt;br /&gt;&lt;br /&gt;  Option "DPMS"&lt;br /&gt;&lt;br /&gt;  HorizSync 28-51&lt;br /&gt;&lt;br /&gt;  VertRefresh 43-60&lt;br /&gt;&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Section "Screen"&lt;br /&gt;&lt;br /&gt; Identifier "Default Screen"&lt;br /&gt;&lt;br /&gt; Monitor  "Generic Monitor"&lt;br /&gt;&lt;br /&gt; Device  "Trident Microsystems CyberBlade XP"&lt;br /&gt;&lt;br /&gt; SubSection "Display"&lt;br /&gt;&lt;br /&gt;     Depth 8&lt;br /&gt;&lt;br /&gt;     Modes "1024x768"&lt;br /&gt;&lt;br /&gt; EndSubSection&lt;br /&gt;&lt;br /&gt; SubSection "Display"&lt;br /&gt;&lt;br /&gt;     Depth 16&lt;br /&gt;&lt;br /&gt;     Modes "1024x768"&lt;br /&gt;&lt;br /&gt; EndSubSection&lt;br /&gt;&lt;br /&gt; SubSection "Display"&lt;br /&gt;&lt;br /&gt;     Depth 24&lt;br /&gt;&lt;br /&gt;     Modes "1024x768"&lt;br /&gt;&lt;br /&gt; EndSubSection&lt;br /&gt;&lt;br /&gt; SubSection "Display"&lt;br /&gt;&lt;br /&gt;     Depth 32&lt;br /&gt;&lt;br /&gt;     Modes "1024x768"&lt;br /&gt;&lt;br /&gt; EndSubSection&lt;br /&gt;&lt;br /&gt;EndSection&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;To find out your model of video card as ubuntu detects it, issue the following command:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;lspci | grep VGA&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Which you should use in the device and identifier lines in the xorg.conf file above where I have "Trident Microsystems CyberBlade XP"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;NOTE: If you cannot save the xorg.conf file to the /etc/X11 directory, you may have to issue a sudo chown command to take ownership of the path.&lt;br /&gt;&lt;br /&gt;Here are a couple of posts that helped me get this working:&lt;br /&gt; &lt;br /&gt;&lt;a href="http://ubuntuforums.org/showthread.php?p=5039883#post5039883"&gt;Display problem with Trident Cyberblade Ai1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ubuntuforums.org/showthread.php?t=984137"&gt;8.10 Nvidia unable to save xorg.conf.backup&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I am now really enjoying my newly reborn old laptop running Xubuntu, after getting this problem of not being able to change the screen resolution figured out I did have some problems finding the right plugings and libraries to be able to play MP3s and DVDs, but using the Synaptic package manager and google it wasn't too difficult to find out what patches I needed to apply.  Now I have a pretty sweet media player machine that would have gone to the electronic recycling otherwise!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-9031662698410798431?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/9031662698410798431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=9031662698410798431' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/9031662698410798431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/9031662698410798431'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2009/11/installing-ubuntu-linux-on-hp-pavilion.html' title='Installing Ubuntu Linux on HP Pavilion laptop - how to fix screen resolution'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-7828122348015236087</id><published>2009-11-19T15:53:00.000-08:00</published><updated>2009-11-30T16:22:42.242-08:00</updated><title type='text'>Associate SqlServer user with login after backup restore</title><content type='html'>After backing up a SqlServer instance and restoring it to a new database or machine, you will find that the security is all messed up (logins are no longer associated with the users).  If you go in through the Management Studio, there is no way to fix the association either, but luckily you can run the following command to update the user with the correct login and fix the credentials:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;alter user [user_name] with login=[login_name]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;NOTE: if you can't get this command to work on your SqlServer 2005 instance, make sure you have the latest service packs installed, I think they added the with login portion of the alter user command SP2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-7828122348015236087?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/7828122348015236087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=7828122348015236087' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7828122348015236087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7778893/posts/default/7828122348015236087'/><link rel='alternate' type='text/html' href='http://www.computercabal.com/2009/11/associate-sqlserver-user-with-login.html' title='Associate SqlServer user with login after backup restore'/><author><name>Matt</name><uri>http://www.blogger.com/profile/11683229211470957368</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7778893.post-8782629854894859400</id><published>2009-10-12T00:35:00.000-07:00</published><updated>2011-11-23T20:57:34.027-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='robocopy backup reformat windows xp'/><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/download/en/details.aspx?id=17657"&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=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/8782629854894859400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://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://www.computercabal.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:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>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>2011-02-23T12:24:05.645-08: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 combination 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;br /&gt;&lt;br /&gt;Update: Feb. 23rd 2011 -&lt;br /&gt;It looks like the problem I hit when trying to set this up before was a conflict with the automatic sync setup with the windows time server time.microsoft.com, if you right click on the date in the task bar and click the Internet Time tab, make sure you uncheck the checkbox: "Automatically synchronize with an Internet time server"&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-nqpAwL_B6Ag/TWVrLrIs97I/AAAAAAAAACE/gGE4bW4EOBg/s1600/date_and_time_properties.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="270" width="320" src="http://2.bp.blogspot.com/-nqpAwL_B6Ag/TWVrLrIs97I/AAAAAAAAACE/gGE4bW4EOBg/s320/date_and_time_properties.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Then once this has been unchecked on your client machines, follow the instructions under: the "Configuring Windows Time service to use an external time source" section of the following 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; in order to setup the server machine.&lt;br /&gt;&lt;br /&gt;Next issue this command on 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;And then to make sure your client's clock is close to the servers, issue this command:&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;Finally you'll want to setup a scheduled task to run your resync command on the client every hour or so (depending on how accurate your servers need to be with each-other):&lt;br /&gt;&lt;code&gt;&lt;strong&gt;w32tm /resync&lt;/strong&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7778893-1648985961708147166?l=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/1648985961708147166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=1648985961708147166' title='2 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://www.computercabal.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:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-nqpAwL_B6Ag/TWVrLrIs97I/AAAAAAAAACE/gGE4bW4EOBg/s72-c/date_and_time_properties.png' height='72' width='72'/><thr:total>2</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=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/938659747665962989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://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://www.computercabal.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:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></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>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=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/2077047173817795677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://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://www.computercabal.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:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_XTRg4FwrPrg/SJEUekKWg6I/AAAAAAAAAAM/t9sGMFpgwoQ/s72-c/google_pages.jpg' height='72' width='72'/><thr:total>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=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/1859439017094826595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7778893&amp;postID=1859439017094826595' title='13 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://www.computercabal.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:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>13</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=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/7224023054200100702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://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://www.computercabal.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:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>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=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/2218982425755575966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://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://www.computercabal.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:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>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=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/66817444231663597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://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://www.computercabal.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:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>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=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/4872594243578783630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://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://www.computercabal.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:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>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=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/115431058121747185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://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://www.computercabal.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:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>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=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/115376636840289041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://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://www.computercabal.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:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>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=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/113987674588322643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://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://www.computercabal.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:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>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=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/111276425819674219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://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://www.computercabal.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:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>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=www.computercabal.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.computercabal.com/feeds/109103310229113164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://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://www.computercabal.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:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.mattpalmerlee.com/portfolio/matt_palmerlee.jpg'/></author><thr:total>0</thr:total></entry></feed>
