<feed xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US">
    <title>AlanO's Blog</title>
    <link rel="self" type="application/xml" href="http://aocampo.com/Blog/Atom.aspx" />
    <subtitle type="html">"I Heart Code"</subtitle>
    <id>http://aocampo.com/Blog/Default.aspx</id>
    <author>
        <name>Alan Ocampo</name>
        <uri>http://aocampo.com/Blog/Default.aspx</uri>
    </author>
    <generator uri="http://subtextproject.com" version="Subtext Version 1.9.5.176">Subtext</generator>
    <updated>2008-09-18T00:58:02Z</updated>
    <entry>
        <title>First Look: Internet Explorer 8 Beta 2 --- I Could Not Get Very Far</title>
        <link rel="self" type="text/html" href="http://aocampo.com/Blog/archive/2008/09/18/first-look-internet-explorer-8-beta-2-----i-could.aspx" />
        <id>http://aocampo.com/Blog/archive/2008/09/18/first-look-internet-explorer-8-beta-2-----i-could.aspx</id>
        <published>2008-09-18T00:58:02-04:00:00</published>
        <updated>2008-09-18T00:58:02Z</updated>
        <content type="html">&lt;p&gt;I have been following the &lt;a target="_blank" href="http://blogs.msdn.com/ie/"&gt;IE Blog&lt;/a&gt; and paying close attention to developments in IE8. I decided to download it tonight and give it a try. I was curious to see the new and improved features like ‘Search’ and Developer Tools.&lt;/p&gt;  &lt;p&gt;I found quite a few interesting changes like:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Enhancements to the address bar &lt;/li&gt;    &lt;li&gt;Redesigned and more powerful search &lt;/li&gt;    &lt;li&gt;‘Accelerators’ &lt;/li&gt;    &lt;li&gt;‘SmartScreen Filter’ &lt;/li&gt;    &lt;li&gt;‘Web Slices’ &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Unfortunately, my trial will have to be cut short as the application kept crashing on certain occasions as:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Switching to one of my home page tabs. &lt;/li&gt;    &lt;li&gt;Loading a page. &lt;/li&gt;    &lt;li&gt;Clicking a link. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I kept getting the following error:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; margin: 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="IE8 Error" border="0" alt="IE8 Error" src="http://aocampo.com/Blog/images/aocampo_com/Blog/WindowsLiveWriter/FirstLookInternetExplorer8Beta2ICouldNot_D54/image_5.png" width="484" height="390" /&gt;&lt;/p&gt;  &lt;p&gt;I will have to wait for a more stable version that plays well with my machine.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ba965219-714b-40b8-8786-3251445fb069" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Internet+Explorer+8+Beta+2" rel="tag"&gt;Internet Explorer 8 Beta 2&lt;/a&gt;&lt;/div&gt;&lt;img src="http://aocampo.com/Blog/aggbug/164.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://aocampo.com/Blog/comments/164.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://aocampo.com/Blog/comments/commentRss/164.aspx</wfw:commentRss>
        <trackback:ping>http://aocampo.com/Blog/services/trackbacks/164.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Anticipating the Release of Google Chrome</title>
        <link rel="self" type="text/html" href="http://aocampo.com/Blog/archive/2008/09/02/anticipating-the-release-of-google-chrome.aspx" />
        <id>http://aocampo.com/Blog/archive/2008/09/02/anticipating-the-release-of-google-chrome.aspx</id>
        <published>2008-09-02T01:54:27-04:00:00</published>
        <updated>2008-09-02T01:55:05Z</updated>
        <content type="html">&lt;p&gt;I read the news on Monday afternoon about Google's plan to release its web browser called 'Google Chrome'. Apparently, the release is scheduled for Tuesday, September 2. Since I was still up at around 1:30 a.m., I tried to Google for the Google Chrome download page, if it was already released. I used the search terms 'download Google chrome' and got the following Google results (among many):&lt;/p&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 10px; border-left: 0px; border-bottom: 0px" height="142" alt="" src="http://aocampo.com/Blog/images/aocampo_com/Blog/WindowsLiveWriter/AnticipatingtheReleaseofGoogleChrome_1ADC/image_3.png" width="484" border="0" /&gt; &lt;/p&gt; &lt;p&gt;Clicking on the links currently redirects to the Google home page. Searching Google Gears returned more interesting results:&lt;/p&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 10px; border-left: 0px; border-bottom: 0px" height="472" alt="" src="http://aocampo.com/Blog/images/aocampo_com/Blog/WindowsLiveWriter/AnticipatingtheReleaseofGoogleChrome_1ADC/image_6.png" width="484" border="0" /&gt; &lt;/p&gt; &lt;p&gt;Clicking on the links redirects to the Google home page as well. &lt;/p&gt; &lt;p&gt;It looks like Google Chrome is ready for release; another web browser for web developers to support.&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ac09df35-77df-41e8-af3d-0b898cada07e" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Google%20Chrome" rel="tag"&gt;Google Chrome&lt;/a&gt;&lt;/div&gt;&lt;img src="http://aocampo.com/Blog/aggbug/162.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://aocampo.com/Blog/comments/162.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://aocampo.com/Blog/comments/commentRss/162.aspx</wfw:commentRss>
        <trackback:ping>http://aocampo.com/Blog/services/trackbacks/162.aspx</trackback:ping>
    </entry>
    <entry>
        <title>SQL Server Express 2008 Installation Experience: Not Good</title>
        <link rel="self" type="text/html" href="http://aocampo.com/Blog/archive/2008/08/31/sql-server-express-2008-installation-experience-not-good.aspx" />
        <id>http://aocampo.com/Blog/archive/2008/08/31/sql-server-express-2008-installation-experience-not-good.aspx</id>
        <published>2008-08-31T01:47:26-04:00:00</published>
        <updated>2008-08-31T04:01:19Z</updated>
        <content type="html">&lt;p&gt;SQL Server Express 2008 Express was released a few weeks ago and I was excited to try out its new features so I downloaded the 'SQL Server 2008 Express' installation ('SQL Server 2008 Express with Advanced Services' was not yet available then) as soon as I can to give it a try. I had a "different" experience with the installation process of this version of SQL Server Express compared to previous versions and I thought I might share a brief summary.&lt;/p&gt; &lt;p&gt;The installation executable launches the 'SQL Server Installation Center'. This replaces the setup wizard from previous versions. The 'SQL Server Installation Center' includes much more information and resources that go beyond the simple install/uninstall/repair operations commonly built into setup packages. While I would like to say that this provides a richer experience compared to simple setup wizards, I was confused by the new user interface. I was expecting a wizard that would walk me through the setup process but instead had to read through the options and determine which action I needed to take. The installation operation itself for 'New SQL Server stand-alone installation or add features to an existing installation' seems to be composed of separate applications (e.g., one set of tasks performed 'Setup Support Rules', another performed the copy to the file system, registry, etc.) that performed independent tasks in a certain order. I generally understood what these dialogs were doing but at certain times in the process, when one task would hand-off control to the other (where there would be no dialogs displayed), I felt some uncertainty as to the current status of the installation.&lt;/p&gt; &lt;p&gt;&lt;a href="http://aocampo.com/Blog/images/aocampo_com/Blog/WindowsLiveWriter/SQLServerExpress2008InstallationExperien_E10/SnipImage.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 10px; border-right-width: 0px" height="364" alt="SQL Server Installation Center" src="http://aocampo.com/Blog/images/aocampo_com/Blog/WindowsLiveWriter/SQLServerExpress2008InstallationExperien_E10/SnipImage_thumb.jpg" width="484" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;I downloaded 'SQL Server 2008 Express with Advanced Services' earlier this evening to check out Management Studio Basic and had difficulty installing it. I ran the installation executable (which brings up 'SQL Server Installation Center') and went through the same process as before but did not find Management Studio Basic anywhere in my system after the installation completed. I guessed that it may have had to do with the machine configuration --- I had SQL Server Express 2005 and SQL Server Management Studio Express 2005 installed. After uninstalling both applications and re-running the setup for SQL Server Express 2008, Management Studio Basic was installed (I probably could have just uninstalled SQL Server Management Studio Express to accomplish the same result).  I am sure that there are good reasons for the packaging and behavior of the installation but it would have been good if:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;SQL Server Management Basic came as a separate download or  &lt;/li&gt;&lt;li&gt;The installation process informed me of its assumptions about my current configuration and that Management Studio Basic was not going to be installed; although there was a page in the installation wizard that tells me exactly what components were going to be installed, I still had no idea that Management Studio Basic was not going to be installed because it was my first time going through the process.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 10px; border-right-width: 0px" height="484" alt="Sql2k8Setup" src="http://aocampo.com/Blog/images/aocampo_com/Blog/WindowsLiveWriter/SQLServerExpress2008InstallationExperien_E10/Sql2k8Setup_3.jpg" width="644" border="0" /&gt; &lt;/p&gt; &lt;p&gt;UPDATE: Installing on another machine gave me the following error:&lt;/p&gt; &lt;p&gt;&lt;a href="http://aocampo.com/Blog/images/aocampo_com/Blog/WindowsLiveWriter/SQLServerExpress2008InstallationExperien_E10/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 10px; border-right-width: 0px" height="282" alt="image" src="http://aocampo.com/Blog/images/aocampo_com/Blog/WindowsLiveWriter/SQLServerExpress2008InstallationExperien_E10/image_thumb.png" width="570" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I have VS2008 SP1 installed on the machine. I reinstalled SP1 for VS 2008 and VC# Express 2008 to no avail. An article in the Microsoft support site suggests not selecting the following features to install to avoid the behavior:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Management Studio (Basic or Complete)  &lt;/li&gt;&lt;li&gt;Integration Services  &lt;/li&gt;&lt;li&gt;Business Intelligence Development Studio&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;But I need those components! That's not a solution for me. I might have to uninstall VS 2008, install SQL Server Express 2008 Express, then reinstall VS 2008; I'm not happy. &lt;/p&gt; &lt;p&gt;Links:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;SQL Server Express 2008 Download Page: &lt;a title="http://www.microsoft.com/express/sql/download/" href="http://www.microsoft.com/express/sql/download/"&gt;http://www.microsoft.com/express/sql/download/&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;MS Support article "Visual Studio 2008 SP1 may be required for SQL Server 2008 installations": &lt;a title="http://support.microsoft.com/kb/956139" href="http://support.microsoft.com/kb/956139"&gt;http://support.microsoft.com/kb/956139&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e9df50cf-41d2-4543-ba5c-96f0423bd02a" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SQL%20Server%20Express%202008%20Installation" rel="tag"&gt;SQL Server Express 2008 Installation&lt;/a&gt;&lt;/div&gt;&lt;img src="http://aocampo.com/Blog/aggbug/161.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://aocampo.com/Blog/comments/161.aspx</wfw:comment>
        <slash:comments>2</slash:comments>
        <wfw:commentRss>http://aocampo.com/Blog/comments/commentRss/161.aspx</wfw:commentRss>
        <trackback:ping>http://aocampo.com/Blog/services/trackbacks/161.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Picasa Web Album &amp;quot;Gadget&amp;quot;/&amp;quot;Widget&amp;quot; in .Net</title>
        <link rel="self" type="text/html" href="http://aocampo.com/Blog/archive/2008/08/23/picasa-web-album-quotgadgetquotquotwidgetquot-in-.net.aspx" />
        <id>http://aocampo.com/Blog/archive/2008/08/23/picasa-web-album-quotgadgetquotquotwidgetquot-in-.net.aspx</id>
        <published>2008-08-23T16:51:01-04:00:00</published>
        <updated>2008-08-24T01:19:09Z</updated>
        <content type="html">&lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="244" alt="PicasaWebFrame" src="http://aocampo.com/Blog/images/aocampo_com/Blog/WindowsLiveWriter/PicasaWebAlbumGadgetWidgetThingy_9392/image_3.png" width="324" align="right" border="0" /&gt; I recently &lt;a href="http://www.aocampo.com/Blog/archive/2008/07/30/integrating-picasa-web-albums-into-my-website.aspx" target="_blank"&gt;moved my web site's picture gallery to use Picasa Web Albums&lt;/a&gt; and it has been a very convenient way to update my website. Shortly after this, I wanted to view my web album pictures from my desktop to replace the Vista Slide Show Sidebar gadget (which only displays pictures from the file system). I wanted an app that fits the following needs:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Connects to my Picasa Web Albums account and  &lt;/li&gt;&lt;li&gt;Retrieves all public photos that are  &lt;/li&gt;&lt;li&gt;Filtered by 'tags' and  &lt;/li&gt;&lt;li&gt;Displays a slideshow of the photos  &lt;/li&gt;&lt;li&gt;Like a Windows Vista Sidebar gadget. &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;I couldn't find one so I decided to build my own. I looked into building an actual Vista Sidebar gadget but I did not have much time to investigate the technical issues (e.g., referencing the Google Data API, deploying the app) so I built a &lt;a title="Windows Presentation Foundation" href="http://msdn2.microsoft.com/en-us/netframework/aa663326.aspx" target="_blank" rel=""&gt;WPF&lt;/a&gt; app instead.&lt;/p&gt; &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="325" alt="image" src="http://aocampo.com/Blog/images/aocampo_com/Blog/WindowsLiveWriter/PicasaWebAlbumGadgetWidgetThingy_9392/image_thumb_1.png" width="324" align="right" border="0" /&gt;The app can be configured as follows:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Picasa Web Email Address - this is the email address of the Picasa Web Albums account.  &lt;/li&gt;&lt;li&gt;Tags - the tags to use to filter the photos displayed (leave blank to display all photos).  &lt;/li&gt;&lt;li&gt;Window width / height - the dimension, in pixels of the photo frame.  &lt;/li&gt;&lt;li&gt;Window opacity - sets the transparency of the frame; moving the slider to the left makes it more transparent.  &lt;/li&gt;&lt;li&gt;'Keep on Top' - makes the photo frame the topmost window in your desktop.  &lt;/li&gt;&lt;li&gt;Slideshow interval - the amount of time, in seconds, to show a photo before going to the next one.  &lt;/li&gt;&lt;li&gt;Shuffle - randomly orders all photos for display.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Additional notes:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Settings can be configured by right-clicking on the system tray icon and selecting 'Settings...' from the menu.&lt;/li&gt; &lt;li&gt;Hover over the photo to display its album title and description.&lt;/li&gt; &lt;li&gt;Right-click on the photo to access additional features like:&lt;/li&gt; &lt;ul&gt; &lt;li&gt;View Photo&lt;/li&gt; &lt;li&gt;View Photo Page&lt;/li&gt; &lt;li&gt;View Album Page&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt; &lt;p&gt; You can download the install package at: &lt;a href="http://www.aocampo.com/Downloads/PicasaWebFrameSetup.zip"&gt;http://www.aocampo.com/Downloads/PicasaWebFrameSetup.zip&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Note that the installation will install .Net Framework 3.5 SP1 (Client Profile) if it is not installed.&lt;/p&gt; &lt;p&gt;Usage tip: Upon install, you can make the app run on startup. To do this, you can create a shortcut to the app and drop it into your Start menu's 'Startup' folder.&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b44c9399-02a2-42c2-835b-9f35bd9a5abb" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/PIcasa%20Web%20Albums" rel="tag"&gt;PIcasa Web Albums&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Downloads" rel="tag"&gt;Downloads&lt;/a&gt;&lt;/div&gt;&lt;img src="http://aocampo.com/Blog/aggbug/160.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://aocampo.com/Blog/comments/160.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://aocampo.com/Blog/comments/commentRss/160.aspx</wfw:commentRss>
        <trackback:ping>http://aocampo.com/Blog/services/trackbacks/160.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Integrating Picasa Web Albums into my Website</title>
        <link rel="self" type="text/html" href="http://aocampo.com/Blog/archive/2008/07/30/integrating-picasa-web-albums-into-my-website.aspx" />
        <id>http://aocampo.com/Blog/archive/2008/07/30/integrating-picasa-web-albums-into-my-website.aspx</id>
        <published>2008-07-30T21:48:54-04:00:00</published>
        <updated>2008-07-30T21:48:54Z</updated>
        <content type="html">&lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 5px; border-left: 0px; border-bottom: 0px" height="216" alt="image" src="http://aocampo.com/Blog/images/aocampo_com/Blog/WindowsLiveWriter/IntegratingPicasaWebAlbumsintoYourWebsit_12FC4/image_3.png" width="340" align="right" border="0" /&gt; A friend of mine recently moved his website's photo gallery to Picasa Web Albums. I told him that I had considered doing the same except some of the people that visit my site (mostly relatives) already know the URL for my photo gallery. Although I knew that Picasa Web Albums provides a lot of convenient features, I did not want to lose the photo gallery feature in my website. It turned out that I did not know enough of what Picasa has to offer!&lt;/p&gt; &lt;p&gt;I spent some time last weekend looking further into Picasa Web Albums. I started my research with the expectation that I may have to do some hacking (like figuring out URL conventions of the Picasa Web Albums website) but I was pleasantly surprised to find that there is a &lt;em&gt;Picasa Web Albums Data API&lt;/em&gt;. It took a few short hours on Sunday night to hook up my website's existing (ASP .NET) photo gallery logic to point to my Picasa Web Albums. Google has done a great job in designing their API and coming up with reference documentation that got me started very quickly. Simply amazing! &lt;/p&gt; &lt;p&gt;My Picasa Web Albums are now integrated into my website. With Picasa Web Albums integeration, my photo gallery has been upgraded to:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Better conversion of photos for web viewing&lt;/li&gt; &lt;li&gt;Flash Slideshow&lt;/li&gt; &lt;li&gt;Better metadata support (I used to maintain an XML file in each album folder to specify album metadata (e.g., title, description) to my web application)&lt;/li&gt; &lt;li&gt;Enterprise level storage&lt;/li&gt; &lt;li&gt;All the features of Picasa Web Albums (via a link in the slideshow that brings you to the Picasa Website). Features like:&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Captions&lt;/li&gt; &lt;li&gt;Download&lt;/li&gt; &lt;li&gt;Link&lt;/li&gt; &lt;li&gt;Geo-tagging&lt;/li&gt; &lt;li&gt;Order Prints&lt;/li&gt; &lt;li&gt;Share Album&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt; &lt;p&gt;I don't have any code to share as the API, as I mentioned above, is very well documented. Here's some extra information:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Support for .NET, Java, PHP, and Python&lt;/li&gt; &lt;li&gt;My use case was simple --- to query for all albums in my account. The API exposes a lot more features like album maintenance (e.g., Add, update, delete, and tag photos)&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Links:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Overview of the API: &lt;a title="http://code.google.com/apis/picasaweb/overview.html" href="http://code.google.com/apis/picasaweb/overview.html"&gt;http://code.google.com/apis/picasaweb/overview.html&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Picasa Web Albums Data API Developer's Guide: &lt;a title="http://code.google.com/apis/picasaweb/developers_guide_protocol.html" href="http://code.google.com/apis/picasaweb/developers_guide_protocol.html"&gt;http://code.google.com/apis/picasaweb/developers_guide_protocol.html&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:bd3391d5-366d-4fca-9061-73296b9f1b97" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Picasa%20Web%20Albums%20API" rel="tag"&gt;Picasa Web Albums API&lt;/a&gt;&lt;/div&gt;&lt;img src="http://aocampo.com/Blog/aggbug/156.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://aocampo.com/Blog/comments/156.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://aocampo.com/Blog/comments/commentRss/156.aspx</wfw:commentRss>
        <trackback:ping>http://aocampo.com/Blog/services/trackbacks/156.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Set Network Adapter DNS Server Programmatically Using C#</title>
        <link rel="self" type="text/html" href="http://aocampo.com/Blog/archive/2008/07/10/set-network-adapter-dns-server-programmatically-using-c.aspx" />
        <id>http://aocampo.com/Blog/archive/2008/07/10/set-network-adapter-dns-server-programmatically-using-c.aspx</id>
        <published>2008-07-10T05:31:08-04:00:00</published>
        <updated>2008-07-10T03:36:58Z</updated>
        <content type="html">&lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 5px 5px; border-right-width: 0px" height="360" alt="IPv4 Properties" src="http://aocampo.com/Blog/images/aocampo_com/Blog/WindowsLiveWriter/SetNetworkAdapterDNSServerProgrammatical_11CF/image_5.png" width="324" align="right" border="0" /&gt;I needed an application that could set the DNS server properties on a computer's enabled network adapters. This will make our home laptops automatically adapt to the network they are connected to. This is especially useful for my kids when they bring their laptops to a friend's house --- it avoids the extra effort for my oldest child to change the settings manually (yes, she has learned how to do it!). I know there are some applications out there that already provide this feature and more but I had a simple use case, some time, and no budget to pay for third-party software.&lt;/p&gt; &lt;p&gt;This was a relatively quick project for me; took less than an hour. The application is designed to do the following:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Ping a given DNS Server (specified through the application configuration file).  &lt;/li&gt;&lt;li&gt;If the ping is successful, the application will set the preferred DNS server of all enabled network adapters to the specified DNS Server.  &lt;/li&gt;&lt;li&gt;If the ping is not successful, the application will reset the DNS settings on all network adapters; i.e., set the adapters to 'Obtain DNS server address automatically'.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Here's are screenshots of sample runs of the application:&lt;/p&gt; &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="164" alt="Sample Run - DNS Server Found" src="http://aocampo.com/Blog/images/aocampo_com/Blog/WindowsLiveWriter/SetNetworkAdapterDNSServerProgrammatical_11CF/image_8.png" width="484" border="0" /&gt; &lt;/p&gt; &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="236" alt="Sample Run - DNS Server Not Found" src="http://aocampo.com/Blog/images/aocampo_com/Blog/WindowsLiveWriter/SetNetworkAdapterDNSServerProgrammatical_11CF/image_11.png" width="484" border="0" /&gt; &lt;/p&gt; &lt;p&gt;Notes:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;I created a console application with the intention for it to run at system startup through a scheduled task. With this in mind, I included a 'SilentMode' setting in the configuration file that can be set to &lt;em&gt;True&lt;/em&gt; to exit when the operation is complete (useful if it is a scheduled task) or &lt;em&gt;False &lt;/em&gt;to wait for a keypress before exiting (useful for debugging).  &lt;/li&gt;&lt;li&gt;I used the &lt;em&gt;System.Net.NetworkInformation.Ping&lt;/em&gt; class to ping the server. A &lt;em&gt;PingException&lt;/em&gt; is thrown on the &lt;em&gt;Send&lt;/em&gt; method if the operation was not successful, including the case when the host is unknown. I don't know why the &lt;em&gt;PingReply.Status &lt;/em&gt;returned (which is an enumeration) could not include a value for this case. I had to do a &lt;em&gt;try-catch&lt;/em&gt; to work with this design.  &lt;/li&gt;&lt;li&gt;I used Windows Management Instrumentation (WMI) off of the &lt;em&gt;System.Management&lt;/em&gt; namespace to set the DNS server address. I wish I could have used &lt;em&gt;System.Net.NetworkInformation&lt;/em&gt; namespace but the values exposed by the classes of interest are read-only.  &lt;/li&gt;&lt;li&gt;I tested this on Windows Vista 32-bit and Windows XP.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;You can download the Visual Studio 2008 solution including &lt;em&gt;Release&lt;/em&gt; binaries at: &lt;a href="http://aocampo.com/Downloads/SetNetworkProperties.zip"&gt;http://aocampo.com/Downloads/SetNetworkProperties.zip&lt;/a&gt;. &lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:4812b930-6f5c-45f2-b543-778c8655c4e1" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/C#" rel="tag"&gt;C#&lt;/a&gt;, &lt;a href="http://technorati.com/tags/WMI" rel="tag"&gt;WMI&lt;/a&gt;, &lt;a href="http://technorati.com/tags/DNS" rel="tag"&gt;DNS&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Networking" rel="tag"&gt;Networking&lt;/a&gt;&lt;/div&gt;&lt;img src="http://aocampo.com/Blog/aggbug/150.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://aocampo.com/Blog/comments/150.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://aocampo.com/Blog/comments/commentRss/150.aspx</wfw:commentRss>
        <trackback:ping>http://aocampo.com/Blog/services/trackbacks/150.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Workaround for ASP.Net Compilation Error &amp;quot;'...Profile' hides inherited member&amp;quot;</title>
        <link rel="self" type="text/html" href="http://aocampo.com/Blog/archive/2008/07/08/workaround-for-asp.net-compilation-error-quot.profile-hides-inherited-memberquot.aspx" />
        <id>http://aocampo.com/Blog/archive/2008/07/08/workaround-for-asp.net-compilation-error-quot.profile-hides-inherited-memberquot.aspx</id>
        <published>2008-07-08T02:54:46-04:00:00</published>
        <updated>2008-07-08T03:11:41Z</updated>
        <content type="html">&lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="210" alt="Compilation Error" src="http://aocampo.com/Blog/images/aocampo_com/Blog/WindowsLiveWriter/Fix.NetCompilationErrorProfilehidesinher_2396/image_3.png" width="324" align="right" border="0" /&gt;The following ASP.Net error kept me up for two nights:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;&lt;b&gt;Compiler Error Message: &lt;/b&gt;CS0108: Warning as Error: 'ASP.controllibrary_toolbar_ascx.Profile' hides inherited member 'MyTestApp.ControlLibrary.MainToolbar.Profile'. Use the new keyword if hiding was intended.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;This error occurred on an ASP.Net 1.1 website that I upgraded to 2.0. The error does not occur when the target Framework version is 3.5. I am able to run the application without any problems using Visual Studio but the error occurs when deployed to IIS.&lt;/p&gt; &lt;p&gt;Some forum posts suggested a quick workaround to set the &lt;em&gt;profile&lt;/em&gt; element in &lt;em&gt;web.config&lt;/em&gt; to &lt;em&gt;false &lt;/em&gt;but that will only work if you don't need that feature. Furthermore, in my case, it would get me past the error but throw a similar one, this time for the &lt;em&gt;ApplicationInstance&lt;/em&gt; property as in: &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\MyTestApp\5fcdec59\c0c270f4\App_Web_toolbar.ascx.100f8869.uvdkesxa.0.cs(124,35): error CS0108: Warning as Error: 'ASP.controllibrary_toolbar_ascx.ApplicationInstance' hides inherited member 'MyTestApp.ControlLibrary.MainToolbar.ApplicationInstance'. Use the new keyword if hiding was intended. &lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The workaround that I found was to uncheck the 'Allow this precompiled site to be updatable' option in the 'Publish Web Site' dialog when publishing the application; I am fine with unchecking this option.&lt;br /&gt;&lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="324" alt="Publish Web Site" src="http://aocampo.com/Blog/images/aocampo_com/Blog/WindowsLiveWriter/Fix.NetCompilationErrorProfilehidesinher_2396/PublishWebSite_3.png" width="496" border="0" /&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:2f8a51c3-c398-433e-b09d-7689b2b626e7" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;&lt;/div&gt;&lt;img src="http://aocampo.com/Blog/aggbug/143.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://aocampo.com/Blog/comments/143.aspx</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://aocampo.com/Blog/comments/commentRss/143.aspx</wfw:commentRss>
        <trackback:ping>http://aocampo.com/Blog/services/trackbacks/143.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Getting Caller ID Using Visual Basic .Net</title>
        <link rel="self" type="text/html" href="http://aocampo.com/Blog/archive/2008/04/13/getting-caller-id-using-visual-basic-.net.aspx" />
        <id>http://aocampo.com/Blog/archive/2008/04/13/getting-caller-id-using-visual-basic-.net.aspx</id>
        <published>2008-04-13T04:14:44-04:00:00</published>
        <updated>2008-04-16T00:04:56Z</updated>
        <content type="html">&lt;p&gt;We have been putting-up with our home VoIP phone these past few months (the battery only last a few minutes) and we decided to replace it recently. I ordered a phone adapter from our VoIP provider instead of the proprietary phone set (which we had). I found this as an opportunity to write an application to add to our network utilities. I planned to write a "Caller ID Notifier" application consisting of two components: a server that listens to the modem port for incoming calls and broadcasts the information over the network, and a client that listens to the broadcast messages. I know there are quite a few applications out there that can do this but I wanted to build it myself because I have some other features I plan to implement in the future.&lt;/p&gt; &lt;p&gt;Before I go into the details of my solution, let me point out that one of the easiest ways that I have found to work with telephony in .Net is by using the &lt;a href="http://www.codeplex.com/C4FDevKit" target="_blank"&gt;C4F Developer Kit&lt;/a&gt;. The C4F Developer Kit contains a telephony API among many other components that provide useful wrappers to specialized aspects of Windows programming. The telephony API exposes a rich set of interfaces for receiving and making phone calls using the computer. I initially planned to use this as it seemed to be, and may have been, the simplest solution to the problem that I wanted to solve. Unfortunately for me, the functions for outgoing calls worked but I never got incoming calls to get detected on several machines with different modems. &lt;/p&gt; &lt;p&gt;It turns out that getting caller ID is quite simple (note: the phone service, as well as  the modem must have a caller ID feature). Generally, you would need to:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Open the modem serial port.  &lt;/li&gt;&lt;li&gt;Add an event handler to the port's &lt;em&gt;DataReceived&lt;/em&gt; event.  &lt;/li&gt;&lt;li&gt;Initialize the port to activate caller ID.  &lt;/li&gt;&lt;li&gt;Handle the &lt;em&gt;DataReceived&lt;/em&gt; event by parsing the data.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;I had only a few hours to prototype this project and I leaned on VB.Net's &lt;em&gt;My&lt;/em&gt; namespace to save time on working with the &lt;em&gt;SerialPort&lt;/em&gt; class. You can download the sample class library I wrote at: &lt;a href="http://www.aocampo.com/Downloads/CallerIdListener.zip"&gt;http://www.aocampo.com/Downloads/CallerIdListener.zip&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Here's a sample code snippet of using the class library:&lt;/p&gt; &lt;blockquote&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;Imports&lt;/span&gt; CallerIdLib

&lt;span style="color: rgb(0,0,255)"&gt;Module&lt;/span&gt; Main
    &lt;span style="color: rgb(0,0,255)"&gt;Private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;WithEvents&lt;/span&gt; m_callerIdListener &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; CallerIdListener

    &lt;span style="color: rgb(0,0,255)"&gt;Sub&lt;/span&gt; Main()
        &lt;span style="color: rgb(0,128,0)"&gt;'initialize the modem port
&lt;/span&gt;        m_callerIdListener = &lt;span style="color: rgb(0,0,255)"&gt;New&lt;/span&gt; CallerIdListener(&lt;span style="color: rgb(163,21,21)"&gt;"COM3"&lt;/span&gt;, 9600, _
                            IO.Ports.Parity.None, 8, IO.Ports.StopBits.One)
        &lt;span style="color: rgb(0,128,0)"&gt;'enable caller id
&lt;/span&gt;        m_callerIdListener.Write(&lt;span style="color: rgb(163,21,21)"&gt;"AT+VCID=1"&lt;/span&gt; + vbCrLf)
        &lt;span style="color: rgb(0,128,0)"&gt;'loop indefinitely to listen to the port
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;While&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;True
&lt;/span&gt;            System.Threading.Thread.Sleep(50)
        &lt;span style="color: rgb(0,0,255)"&gt;End&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;While
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;End&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Sub

&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;Private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Sub&lt;/span&gt; m_callerIdListener_CallerIdInfoReceived(&lt;span style="color: rgb(0,0,255)"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Object&lt;/span&gt;, _
        &lt;span style="color: rgb(0,0,255)"&gt;ByVal&lt;/span&gt; e &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; CallerIdLib.CallerIdListener.CallerIdInfoReceivedEventArgs) _
        &lt;span style="color: rgb(0,0,255)"&gt;Handles&lt;/span&gt; m_callerIdListener.CallerIdInfoReceived

        Console.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"Caller ID Information"&lt;/span&gt;)
        &lt;span style="color: rgb(0,0,255)"&gt;With&lt;/span&gt; e.CallerIdInfo
            Console.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"Date: "&lt;/span&gt; + .DateTime.ToString(&lt;span style="color: rgb(163,21,21)"&gt;"MMMM dd, yyyy hh:mm tt"&lt;/span&gt;))
            Console.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"Name: "&lt;/span&gt; + .Name)
            Console.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"Number: "&lt;/span&gt; + .Number)
        &lt;span style="color: rgb(0,0,255)"&gt;End&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;With
&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;End&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Sub

&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;Private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Sub&lt;/span&gt; m_callerIdListener_RingReceived(&lt;span style="color: rgb(0,0,255)"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Object&lt;/span&gt;, _
        &lt;span style="color: rgb(0,0,255)"&gt;ByVal&lt;/span&gt; e &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="color: rgb(0,0,255)"&gt;Handles&lt;/span&gt; m_callerIdListener.RingReceived

        Console.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"Ring!"&lt;/span&gt;)
    &lt;span style="color: rgb(0,0,255)"&gt;End&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Sub
End&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Module
&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;Here are some notes on the solution:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It seems that &lt;em&gt;AT#CID=1&lt;/em&gt; is the most common modem command to activate caller ID. However, this does not work for two of my modems. My modems respond to &lt;em&gt;AT+VCID=1&lt;/em&gt; instead. Here are other commands I found that apparently may be recognized by other modems: 
&lt;ul&gt;
&lt;li&gt;AT%CCID=1 
&lt;/li&gt;&lt;li&gt;AT#CC1 
&lt;/li&gt;&lt;li&gt;AT*IC1&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;I wrote a simple function to parse data received from the port. I categorize the data into three types --- a ring, caller id information, and everything else. 
&lt;/li&gt;&lt;li&gt;Here's a sample expected caller ID data received on the modem port:&lt;br /&gt;&lt;em&gt;DATE = 0413 &lt;br /&gt;TIME = 1004 &lt;br /&gt;NMBR = 15555555555 &lt;br /&gt;NAME = JOHN DOE&lt;br /&gt;&lt;/em&gt;
&lt;/li&gt;&lt;li&gt;I used a background worker after opening the port to start listening. This wasn't necessary in my initial tests but when I started to consume the class library in a real application, I got cross-threading exceptions.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;My caller ID application has been running on my home network for a few weeks now but I am still tweaking it. It has been quite useful having caller ID displayed on our computers. I will make it available for download when I am satisfied with its feature set.&lt;/p&gt;
&lt;p&gt;Links:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;C4F Developer Kit: &lt;a title="http://www.codeplex.com/C4FDevKit" href="http://www.codeplex.com/C4FDevKit"&gt;http://www.codeplex.com/C4FDevKit&lt;/a&gt; 
&lt;/li&gt;&lt;li&gt;This link helped me troubleshoot my modem problem (provides free software too): &lt;a title="http://www.yes-tele.com/modem.html" href="http://www.yes-tele.com/modem.html"&gt;http://www.yes-tele.com/modem.html&lt;/a&gt; 
&lt;/li&gt;&lt;li&gt;Here's a nice free caller ID application: &lt;a title="http://www.phonetray.com/ptfree_download.htm" href="http://www.phonetray.com/ptfree_download.htm"&gt;http://www.phonetray.com/ptfree_download.htm&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:76be0bd7-a8a1-4315-93c4-56aa01198b7c" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Caller%20ID" rel="tag"&gt;Caller ID&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Visual%20Basic" rel="tag"&gt;Visual Basic&lt;/a&gt;&lt;/div&gt;&lt;img src="http://aocampo.com/Blog/aggbug/117.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://aocampo.com/Blog/comments/117.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://aocampo.com/Blog/comments/commentRss/117.aspx</wfw:commentRss>
        <trackback:ping>http://aocampo.com/Blog/services/trackbacks/117.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Hard Drive Upgrade Horror</title>
        <link rel="self" type="text/html" href="http://aocampo.com/Blog/archive/2008/03/10/hard-drive-upgrade-horror.aspx" />
        <id>http://aocampo.com/Blog/archive/2008/03/10/hard-drive-upgrade-horror.aspx</id>
        <published>2008-03-10T02:02:30-04:00:00</published>
        <updated>2008-03-10T02:02:30Z</updated>
        <content type="html">&lt;p&gt;There are days when I think I am cursed with some weird kind of luck; yesterday was one of them.&lt;/p&gt; &lt;p&gt;My wife and I decided to purchase a new hard drive last week because our media collection has gotten quite large over the past few months (we have been converting our DVD and CD collection to disc images for easy access and playback on computers in our home network). I decided to get a 1TB (2 x 500 GB) external hard drive since our main file server could no longer take any internally (it already has six of them in there). The order arrived yesterday. &lt;/p&gt; &lt;p&gt;My estimate to finish the task of attaching and configuring the device was a maximum of half an hour. Unfortunately, it took me about 18 hours to do this because I had to work around many other issues that, sadly, were not directly related to the installation itself.&lt;/p&gt; &lt;p&gt;I was able to connect the device to my file server (via eSATA) within about 15 minutes from the time I unboxed it. The computer started booting up when I turned it on but it was unusually slow. It seemed like Windows was trying to reconfigure itself due to the hardware changes. I was finally able to login after about five minutes. I immediately installed the device's software after that. The installation required a reboot so I proceeded to restart the machine. It won't start when I powered it up --- "DISK BOOT FAILURE" or something like that, it said. I got that familiar sinking feeling upon reading the error message. I knew it was going to be a long night.&lt;/p&gt; &lt;p&gt;For some reason, it seemed like the machine did not like the new hardware/software combination. After a few failed reboots I hit a dead end --- "NTDETECT failed" error. The installation somehow caused my system partition (distributed among multiple SATA drives) to get corrupted; and horror of horrors, our critical data was in that partition! Although the partition was configured to be mirrored (but not backed up!), I wanted to avoid the painful process of recovering the data by swapping hard drives (I had not noted which drives were the source and which ones were the mirror). I wanted to solve the problem by refreshing the corrupt system files. Here's what happened:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;I tried to reinstall Windows Sever 2003. When it came time to confirm that I wanted to install on the existing partition, the application warned me that there was no more room in the hard drive and that I needed to reformat it. I couldn't do that. I thought maybe the drive was corrupt; I planned to do a &lt;em&gt;chkdsk&lt;/em&gt;.  &lt;/li&gt;&lt;li&gt;I tried to get into the Recovery Console many times using the Windows Server 2003 installation but it kept telling me that it could not find any partitions. It turns out that my floppy drive was also defective and would intermittently loosen its 'grip' on the floppy inside and so the installation could not load the SATA driver from the floppy. This took me about an hour to figure out.  &lt;/li&gt;&lt;li&gt;When I finally got into the Recovery Console, I did a &lt;em&gt;fixboot&lt;/em&gt; first. That didn't solve it. I tried running &lt;em&gt;chkdsk&lt;/em&gt; next. I got an error saying &lt;em&gt;autochk.exe&lt;/em&gt; could not be found. This file was expected to be in &lt;em&gt;C:\Windows&lt;/em&gt;. Unfortunately for me, the &lt;em&gt;C:&lt;/em&gt; drive was empty. I was able to run &lt;em&gt;chkdsk&lt;/em&gt; by locating &lt;em&gt;autochk.exe&lt;/em&gt; on the Windows Server 2003 install disc. I was relieved to see a directory listing on the &lt;em&gt;C:&lt;/em&gt; drive after running &lt;em&gt;chkdsk&lt;/em&gt;. It found errors on the partition and restored the file system. I rebooted, hopeful that this time Windows will start. This took me about 45 minutes. &lt;/li&gt;&lt;li&gt;On the next reboot, I got a system startup error, notifying me that one of my mirrored disks needs to be duplicated because it was out of sync (I had tried to inspect the disks and disconnected/reconnected cables at some point and this apparently caused them to be out of sync). I ignored the error and proceeded to let Windows start. Windows could not completely start. It reported that some system files were missing. I rebooted again and planned to do a repair installation.  &lt;/li&gt;&lt;li&gt;I proceeded with the repair installation and that took about 45 minutes. When the installation finished and the machine rebooted, Windows could only get as far as the 'Applying settings' dialog and would not get to the 'Press Ctrl-Alt-Del to login' dialog. Instead, it displayed an empty desktop and startup seemed to be stalled. I thought the issue might be related to the 'mirrored disks out of sync' problem that I have been ignoring so I did another reboot to address that issue.  &lt;/li&gt;&lt;li&gt;I let my mirrored disks sync with each other. The process took about two hours. I rebooted again, hopeful that this time, Windows will follow-through to the 'Press Ctrl-Alt-Del to login' dialog. No luck. The weird but fortunate thing was that I could connect to the server's drives over the network even at its current state. Since it was about 2:30 in the morning and I was tired, I decided that I would copy the important files from the drive and let the process finish through the morning as I slept. I left the copy process (which was unusually very slow) and went to bed.  &lt;/li&gt;&lt;li&gt;As I awoke in the morning, I decided that I would 'bite the bullet' and do a clean Windows install. I wanted to avoid this if possible so I would not have to go through the painful process of reconfiguring the server and reinstalling all applications. Unfortunately, it seemed like the only option at this point. I reinstalled Windows.  &lt;/li&gt;&lt;li&gt;Windows booted up normally after the reinstall. I was able to reinstall all the device drivers, surprisingly, relatively quickly and easily. The process took about an hour and a half. After everything was done, I decided to connect the new hard drive, via USB this time, to make some observations and avoid any further hassles (I had tried the device's USB connection on my other machine and it was 'plug-and-play'). All seemed well. I shutdown the machine.  &lt;/li&gt;&lt;li&gt;After connecting the new hard drive, I started to power up the computer. It wouldn't start! I couldn't believe it. It seemed like the power supply was dead. I couldn't believe it because &lt;a href="http://www.aocampo.com/Blog/archive/2008/03/01/replacing-a-power-supply.aspx" target="_blank"&gt;I just replaced this power supply last week&lt;/a&gt;. This could not be happening! I tried to remain calm but at the same time could not help but anticipate my next ordeal if it indeed was a problem with the power supply. Fortunately, I had the sense to test the power supply first before giving it up for dad. The power supply tester indicated that it was good. After reconnecting the power supply to the motherboard, the computer started up! The worst was over. It took me about another four hours to reconfigure the file server. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Lessons learned/relearned:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Although RAID provides much hope in disaster recovery, recovering from disaster is not as simple as I thought. I should still have a data backup procedure. &lt;/li&gt;&lt;li&gt;My disk storage configuration is a mirrored array of disks that form one large partition. After this experience, I will break up the mirrored array into individual partitions, one per hard drive; that will make it straightforward to read the hard drives individually from other machines and simplify my disaster recovery plan. &lt;/li&gt;&lt;li&gt;Speaking of backup, I have started a scheduled backup for Active Directory.  &lt;/li&gt;&lt;/ul&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:4e2709ab-467b-4859-b543-f305d53d9d33" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Hard%20drive" rel="tag"&gt;Hard drive&lt;/a&gt;&lt;/div&gt;&lt;img src="http://aocampo.com/Blog/aggbug/116.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://aocampo.com/Blog/comments/116.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://aocampo.com/Blog/comments/commentRss/116.aspx</wfw:commentRss>
        <trackback:ping>http://aocampo.com/Blog/services/trackbacks/116.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Silverlight 2 Beta 1 Released</title>
        <link rel="self" type="text/html" href="http://aocampo.com/Blog/archive/2008/03/06/silverlight-2-beta-1-released.aspx" />
        <id>http://aocampo.com/Blog/archive/2008/03/06/silverlight-2-beta-1-released.aspx</id>
        <published>2008-03-06T00:56:53-05:00:00</published>
        <updated>2008-03-06T00:56:53Z</updated>
        <content type="html">&lt;p&gt;Microsoft has released Beta 1 of &lt;a title="Silverlight" href="http://www.microsoft.com/silverlight/default.aspx" rel="" target="_blank"&gt;Silverlight&lt;/a&gt; 2. This version is a major upgrade to its features (from version 1.1 Alpha) and I am excited to get some hands-on coding, trying to convert some of my old web and &lt;a title="Windows Presentation Foundation" href="http://msdn2.microsoft.com/en-us/netframework/aa663326.aspx" rel="" target="_blank"&gt;WPF&lt;/a&gt; applications.&lt;/p&gt; &lt;p&gt;Here are some useful links:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/silverlight/resources/installationFiles.aspx?v=2.0" target="_blank"&gt;Installation files&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E0BAE58E-9C0B-4090-A1DB-F134D9F095FD&amp;amp;displaylang=en" target="_blank"&gt;Microsoft Silverlight Tools Beta 1 for Visual Studio 2008 (Download)&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=4E03409A-77F3-413F-B108-1243C243C4FE&amp;amp;displaylang=en" target="_blank"&gt;Microsoft Silverlight 2 SDK Beta 1 (Download)&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://silverlight.net/Samples/2b1/SilverlightControls/run/default.html" target="_blank"&gt;Live Demo of Controls&lt;/a&gt; - interestingly, some of these controls (like DatePicker and DataGrid) do not yet have a native WPF equivalent&lt;/li&gt; &lt;li&gt;&lt;a href="http://silverlight.net/GetStarted/overview.aspx" target="_blank"&gt;Silverlight Runtimes - Feature Matrix&lt;/a&gt; - I am mostly curious about how to use the networking/web services feature&lt;/li&gt;&lt;/ul&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5da7b951-abe0-42cd-8e58-50982e0533bc" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Silverlight" rel="tag"&gt;Silverlight&lt;/a&gt;&lt;/div&gt;&lt;img src="http://aocampo.com/Blog/aggbug/115.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://aocampo.com/Blog/comments/115.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://aocampo.com/Blog/comments/commentRss/115.aspx</wfw:commentRss>
        <trackback:ping>http://aocampo.com/Blog/services/trackbacks/115.aspx</trackback:ping>
    </entry>
</feed>