<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>yesJames.com</title>
	<atom:link href="http://www.yesjames.com/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.yesjames.com</link>
	<description>ahuh... sure... what ever you say...</description>
	<lastBuildDate>Fri, 21 Oct 2011 05:16:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Yubikey SSL certificate verification in PHP for Windows</title>
		<link>http://www.yesjames.com/index.php/2011/10/yubikey-ssl-certificate-verification-in-php-for-windows/</link>
		<comments>http://www.yesjames.com/index.php/2011/10/yubikey-ssl-certificate-verification-in-php-for-windows/#comments</comments>
		<pubDate>Fri, 21 Oct 2011 04:46:45 +0000</pubDate>
		<dc:creator>james</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Certificate Authority]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[Yubikey]]></category>

		<guid isPermaLink="false">http://www.yesjames.com/?p=253</guid>
		<description><![CDATA[If you&#8217;ve ever tried connecting to a remove service or server using SSL from your server side PHP script running on a Windows Server, you may very well have encountered the condition that SSL certificate of the remote server cannot be verified. THe problem occurs when you have the CURLOPT_SSL_VERIFY_PEER curl option set to true. [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve ever tried connecting to a remove service or server using SSL from your server side PHP script running on a Windows Server, you may very well have encountered the condition that SSL certificate of the remote server cannot be verified. THe problem occurs when you have the <strong>CURLOPT_SSL_VERIFY_PEER</strong> curl option set to true.</p>
<p>The error looks like this:</p>
<pre> error:14090086
 SSL routines:SSL3_GET_SERVER_CERTIFICATE
 certificate verify failed</pre>
<p>Well, the problem has a very simple solution. CURL cannot talk directly to the Windows certificate repository, so you have to give it a file to validate the Trusted Root Certificate Authority against.</p>
<p>Follow these steps to export your Trusted Root Certificate Authority CA certs:</p>
<ol>
<li>From the windows start menu, run the command &#8220;<strong>mmc.exe</strong>&#8221; to launch the Microsoft Management Console;</li>
<li>From the MMC, choose &#8220;<em>File</em>&#8221; &gt; &#8220;<em>Add/Remove Snap-in&#8230;</em>&#8221; from the main menu;</li>
<li>Add the &#8220;<strong>Certificates</strong>&#8221; snap-in; When asked which certificates you want to manage, select &#8220;<strong>Computer Account</strong>&#8221; and &#8220;<strong>Local computer</strong>&#8220;;</li>
<li>from the console root, navigate to &#8220;<em>Certificates (Local Computer)</em>&#8221; &gt; &#8220;<em>Trusted Root Certification Authorities</em>&#8221; &gt; &#8220;<em>Certificates</em>&#8220;;<br />
<a href="http://www.yesjames.com/wp-content/uploads/2011/10/rootcas600.jpg"><img class="alignright size-full wp-image-268" title="rootcas600" src="http://www.yesjames.com/wp-content/uploads/2011/10/rootcas600.jpg" alt="Trusted Root Certificates" width="600" height="346" /></a></li>
<li>* Select all of the certificates (CTRL+A) and select &#8220;<em>Action</em>&#8221; &gt; &#8220;<em>All tasks</em>&#8221; &gt; &#8220;<em>Export</em>&#8230;&#8221; from the MMC main menu;</li>
<li>Follow the wizard to export the certificate(s) to the <strong>Cryptographic Message Syntax Standard &#8211; PKCS#7 (,pb7 file)</strong> to a file called &#8220;<em>TrustedRootCAs.pb7</em>&#8220;;</li>
<li>Open a command prompt (&#8220;<strong>cmd.exe</strong>&#8220;) and navigate to the folder containing the PB7 file you just created;</li>
<li>Run openSSL.exe (you may need to add the path to this program to the Windows PATH environment variable) to convert the file to text using the following command:</li>
<ol>
<li><span style="font-family: courier,monospace; color: #009900;"><em><strong>c:\php\extras\openssl\openssl.exe pkcs7 -inform DER -in TrustedRootCAs.pb7 -print_certs -text &gt; TrustedRootCAs.certs</strong></em></span></li>
</ol>
<li>Then, in your PHP application, add the following line BEFORE you call <strong>curl_exec()</strong>:</li>
<ol>
<li><span style="font-family: courier,monospace; color: #009900;"><em><strong>curl_setopt ($ch, CURLOPT_CAINFO, &#8216;C:\PHP\extras\openssl\TrustedRootCAs.certs&#8217;)</strong></em></span></li>
</ol>
</ol>
<p>That&#8217;s about all you should need to get things rolling.</p>
<p>Remember, you don&#8217;t necessarily have to export all of the CA&#8217;s. In the case of Yubikey, the authentication API server uses a certificate issued by GoDaddy, so you only need export that single on if you prefer not to have to keep this file updated every time ROOT CA certificates are updated by the various providers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yesjames.com/index.php/2011/10/yubikey-ssl-certificate-verification-in-php-for-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FTP 7.5 and Windows Server 2008 Firewall</title>
		<link>http://www.yesjames.com/index.php/2010/08/ftp-7-5-and-windows-2008-firewall/</link>
		<comments>http://www.yesjames.com/index.php/2010/08/ftp-7-5-and-windows-2008-firewall/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 03:33:10 +0000</pubDate>
		<dc:creator>james</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Firewall]]></category>
		<category><![CDATA[FTP]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Windows Server]]></category>

		<guid isPermaLink="false">http://www.yesjames.com/?p=205</guid>
		<description><![CDATA[So, you&#8217;ve installed FTP 7.5 and tried to connect to your server remotely and noticed that even though you can connect ok, you can&#8217;t in fact get a file-listing from your new FTP server. Well, I noticed this too. So, you&#8217;re probably wondering how to fix it. You may have even tried adding some new [...]]]></description>
			<content:encoded><![CDATA[<p>So, you&#8217;ve installed FTP 7.5 and tried to connect to your server  remotely and noticed that even though you can connect ok, you can&#8217;t in  fact get a file-listing from your new FTP server. Well, I noticed this  too.</p>
<p>So, you&#8217;re probably wondering how to fix it. You may have even tried  adding some new firewall rules to Windows yourself to open up the data  channel. Well, unfortunately that doesn&#8217;t quite fix the problem.</p>
<p><span id="more-205"></span></p>
<h3>Background</h3>
<p>For those of you who haven&#8217;t noticed, Microsoft have released a new version of the FTP services that have been completely re-written for Windows Server® 2008&#8230; FTP 7.5.<br />
If you don&#8217;t have it already, you can download it from <a href="http://www.iis.net/" target="_blank">http://www.iis.net/</a>.<br />
Note that you must be running Windows Server 2008 with IIS7.<br />
You can download the packages independently from here:</p>
<ul>
<li><a href="http://go.microsoft.com/fwlink/?LinkID=143197" target="_blank">FTP 7.5 for IIS 7 (x64)</a></li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=143196" target="_blank">FTP 7.5 for IIS 7 (x86)</a></li>
</ul>
<p>There&#8217;s a special setting in the Windows Firewall that you can&#8217;t configure (as far as I can determine) via the administration console. You need to get down to command-line options to tweak things a bit.</p>
<p>The following information is an excerpt from: <a href="http://learn.iis.net/page.aspx/309/configuring-ftp-firewall-settings/" target="_blank">http://learn.iis.net/page.aspx/309/configuring-ftp-firewall-settings/</a><br />
It was exactly the information required to fix the access issues I was having with FTP services.</p>
<hr class="visible" />There are a few different configurations to consider when using the  FTP service with the Windows Firewall &#8211; whether you will use active or  passive FTP connections, and whether you will use unencrypted FTP or use  FTP over SSL (FTPS). Each of these configurations are described below.</p>
<p><strong>Note</strong>: You will need to make sure that you follow the steps in  this section walk-through while logged in as an administrator. This can  be accomplished by one of the following methods:</p>
<ul>
<li>Logging in to your server using the actual account named &#8220;Administrator&#8221;.</li>
<li>Logging on using an account with administrator privileges and  opening a command-prompt by right-clicking the Command Prompt menu item  that is located in the Accessories menu for Windows programs and  selecting &#8220;Run as administrator&#8221;.</li>
</ul>
<p>One of the above steps is required because the User Account Control  (UAC) security component in the Windows Vista and Windows Server 2008  operating systems prevents administrator access to your firewall  settings. For more information about UAC, please see the following  documentation:</p>
<ul>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=113664" target="_blank">http://go.microsoft.com/fwlink/?LinkId=113664</a></li>
</ul>
<p><strong>Note</strong>: While Windows Firewall can be configured using the <strong>Windows Firewall</strong> applet in the Windows Control Panel, that utility does not have the  required features to enable all of the features for FTP. The <strong>Windows Firewall with Advanced Security</strong> utility that is located under <strong>Administrative Tools</strong> in the Windows Control Panel has all of the required features to enable  the FTP features, but in the interests of simplicity this walk-through  will describe how to use the command-line <strong>Netsh.exe</strong> utility to configure the Windows Firewall.</p>
<h3>Using Windows Firewall with non-secure FTP traffic</h3>
<p>To configure Windows Firewall to allow non-secure FTP traffic, use the following steps:</p>
<ol>
<li>Open a command prompt: click <strong>Start</strong>, then <strong>All Programs</strong>, then <strong>Accessories</strong>, then <strong>Command Prompt</strong>.</li>
<li>To open port 21 on the firewall, type the following syntax then hit enter:<br />
<blockquote><p><tt>netsh advfirewall firewall add rule name="FTP (non-SSL)" action=allow protocol=TCP dir=in localport=21</tt></p></blockquote>
</li>
<li>To enable stateful FTP filtering that will dynamically open ports  for data connections, type the following syntax then hit enter:<br />
<blockquote><p><tt>netsh advfirewall set global StatefulFtp enable</tt></p></blockquote>
</li>
</ol>
<p><strong>Important Notes</strong>:</p>
<ul>
<li>Active FTP connections would not necessarily covered by the above  rules; an outbound connection from port 20 would also need to be enabled  on server. In addition, the FTP client machine would need to have its  own firewall exceptions setup for inbound traffic.</li>
<li>FTP over SSL (FTPS) will not be covered by these rules; the SSL  negotiation will most likely fail because the Windows Firewall filter  for stateful FTP inspection will not be able to parse encrypted data.  (Some 3rd-party firewall filters recognize the beginning of SSL  negotiation, e.g. AUTH SSL or AUTH TLS commands, and return an error to  prevent SSL negotiation from starting.)</li>
</ul>
<h3>Using Windows Firewall with secure FTP over SSL (FTPS) traffic</h3>
<p>The stateful FTP packet inspection in Windows Firewall will most  likely prevent SSL from working because Windows Firewall filter for  stateful FTP inspection will not be able to parse the encrypted traffic  that would establish the data connection. Because of this behavior, you  will need to configure your Windows Firewall settings for FTP  differently if you intend to use FTP over SSL (FTPS). The easiest way to  configure Windows Firewall to allow FTPS traffic is to list the FTP  service on the inbound exception list. The full service name is the  &#8220;Microsoft FTP Service&#8221;, and the short service name is &#8220;ftpsvc&#8221;. (The  FTP service is hosted in a generic service process host (Svchost.exe) so  it is not possible to put it on the exception list though a program  exception.)</p>
<p>To configure Windows Firewall to allow secure FTP over SSL (FTPS) traffic, use the following steps:</p>
<ol>
<li>Open a command prompt: click <strong>Start</strong>, then <strong>All Programs</strong>, then <strong>Accessories</strong>, then <strong>Command Prompt</strong>.</li>
<li>To configure the firewall to allow the FTP service to listen on all  ports that it opens, type the following syntax then hit enter:<br />
<blockquote><p><tt>netsh advfirewall firewall add rule name="FTP for IIS7" service=ftpsvc action=allow protocol=TCP dir=in</tt></p></blockquote>
</li>
<li>To disable stateful FTP filtering so that Windows Firewall will not  block FTP traffic, type the following syntax then hit enter:<br />
<blockquote><p><tt>netsh advfirewall set global StatefulFtp disable</tt></p></blockquote>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.yesjames.com/index.php/2010/08/ftp-7-5-and-windows-2008-firewall/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Freaky Friday</title>
		<link>http://www.yesjames.com/index.php/2009/11/freaky-friday/</link>
		<comments>http://www.yesjames.com/index.php/2009/11/freaky-friday/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 01:36:04 +0000</pubDate>
		<dc:creator>james</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Photography]]></category>

		<guid isPermaLink="false">http://www.yesjames.com/?p=181</guid>
		<description><![CDATA[I just got promoted. One of my photos (well two actually) has just been used to promote the home page of the Photo Art Gallery (a.k.a. PhArt Gallery) Come see my complete portfolio here: http://www.photoartgallery.com/artist/doublehelix The rest of my work can of course be found here: http://www.redbubble.com/people/doublehelix]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.yesjames.com/index.php/2009/11/freaky-friday/photographic-art-upload-exhibit-sell-photographic-art-work_1258073099205-medium/" rel="attachment wp-att-183"><img src="http://www.yesjames.com/wp-content/uploads/2009/11/Photographic-Art-Upload-Exhibit-Sell-Photographic-Art-Work_1258073099205-Medium-150x150.jpg" alt="Photographic Art- Upload, Exhibit &amp; Sell Photographic Art Work_1258073099205 (Medium)" title="Photographic Art- Upload, Exhibit &amp; Sell Photographic Art Work_1258073099205 (Medium)" width="150" height="150" class="alignright size-thumbnail wp-image-183" align="right"/></a><a href="http://www.yesjames.com/index.php/2009/11/freaky-friday/photographic-art-upload-exhibit-sell-photographic-art-work_1258073080491-medium/" rel="attachment wp-att-182"><img src="http://www.yesjames.com/wp-content/uploads/2009/11/Photographic-Art-Upload-Exhibit-Sell-Photographic-Art-Work_1258073080491-Medium-150x150.jpg" alt="Photographic Art- Upload, Exhibit &amp; Sell Photographic Art Work_1258073080491 (Medium)" title="Photographic Art- Upload, Exhibit &amp; Sell Photographic Art Work_1258073080491 (Medium)" width="150" height="150" class="alignright size-thumbnail wp-image-182" align="right"/></a></p>
<p>I just got promoted.<br />
One of my photos (well two actually) has just been used to promote the home page of the <a href="http://www.photoartgallery.com/" target="_blank">Photo Art Gallery</a> (a.k.a. PhArt Gallery)</p>
<p>Come see my complete portfolio here: <a href="http://www.photoartgallery.com/artist/doublehelix" target="_blank">http://www.photoartgallery.com/artist/doublehelix</a></p>
<p>The rest of my work can of course be found here: <a href="http://www.redbubble.com/people/doublehelix">http://www.redbubble.com/people/doublehelix</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yesjames.com/index.php/2009/11/freaky-friday/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Star Wars</title>
		<link>http://www.yesjames.com/index.php/2009/11/star-wars/</link>
		<comments>http://www.yesjames.com/index.php/2009/11/star-wars/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 04:48:23 +0000</pubDate>
		<dc:creator>james</dc:creator>
				<category><![CDATA[Photography]]></category>
		<category><![CDATA[Science & Technology]]></category>
		<category><![CDATA[Sci-Fi]]></category>
		<category><![CDATA[Science Fiction]]></category>
		<category><![CDATA[Star Wars]]></category>

		<guid isPermaLink="false">http://www.yesjames.com/index.php/2009/11/star-wars/</guid>
		<description><![CDATA[I was lucky enough to attend the Star Wars experience exhibition before it finished here at the ScienceWorks museum in Melbourne last week. Here are some shots from the show:]]></description>
			<content:encoded><![CDATA[<p>I was lucky enough to attend the Star Wars experience exhibition before it finished here at the ScienceWorks museum in Melbourne last week.</p>
<p>Here are some shots from the show:</p>
<p><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com.au/s/c/bin/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com.au&#038;hl=en_GB&#038;feat=flashalbum&#038;RGB=0x000000&#038;feed=http%3A%2F%2Fpicasaweb.google.com.au%2Fdata%2Ffeed%2Fapi%2Fuser%2Fjprice21%2Falbumid%2F5398277362184059937%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yesjames.com/index.php/2009/11/star-wars/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>James &amp; Jo&#8217;s Honeymoon in Italy</title>
		<link>http://www.yesjames.com/index.php/2009/09/james-jos-honeymoon-in-italy/</link>
		<comments>http://www.yesjames.com/index.php/2009/09/james-jos-honeymoon-in-italy/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 09:53:47 +0000</pubDate>
		<dc:creator>james</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Dubai]]></category>
		<category><![CDATA[Honeymoon]]></category>
		<category><![CDATA[Italy]]></category>
		<category><![CDATA[Travel]]></category>

		<guid isPermaLink="false">http://www.yesjames.com/?p=168</guid>
		<description><![CDATA[Well, I&#8217;m married &#8211; and we just spent a whole month travelling Italy with a stopover in Dubai. Here are some shots from the trip&#8230; enjoy.]]></description>
			<content:encoded><![CDATA[<p>Well, I&#8217;m married &#8211; and we just spent a whole month travelling Italy with a stopover in Dubai.</p>
<p>Here are some shots from the trip&#8230; enjoy.</p>
<p><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com&#038;hl=en_GB&#038;feat=flashalbum&#038;RGB=0x000000&#038;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fjprice21%2Falbumid%2F5384957647374789825%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_GB" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.yesjames.com/index.php/2009/09/james-jos-honeymoon-in-italy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vista &amp; Office 2007 Error: &#8220;has not been installed for the current user&#8221;</title>
		<link>http://www.yesjames.com/index.php/2009/05/vista-office-2007-error/</link>
		<comments>http://www.yesjames.com/index.php/2009/05/vista-office-2007-error/#comments</comments>
		<pubDate>Thu, 21 May 2009 10:42:11 +0000</pubDate>
		<dc:creator>james</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Office 2007]]></category>
		<category><![CDATA[Vista]]></category>

		<guid isPermaLink="false">http://www.yesjames.com/?p=153</guid>
		<description><![CDATA[If you&#8217;re running Microsoft Windows Vista, with Office 2007, you&#8217;ll more than likely come across this problem during one of your early automatic Office Updates or Service packs. The error comes as you try to launch your office application for the first time after an office update. It reads something along the lines of &#8220;&#60;application&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re running Microsoft Windows Vista, with Office 2007, you&#8217;ll more than likely come across this problem during one of your early automatic Office Updates or Service packs. The error comes as you try to launch your office application for the first time after an office update. It reads something along the lines of <em>&#8220;&lt;application&gt; has not been installed for the current user&#8221;</em>.</p>
<p>At the core of this issue is a simple malconfiguration of the MSI installer that performs the update and configures the registry. It seems that as the installer creates or modifies executeable files and/or registry keys, it does so as the administrator user. This in turn cases all of the permissions on those files/keys to reset to those of the administrator user, causing the error you see.</p>
<p>Specifically, Update KB951944for Office 2007 seems to be the update causing the issue (according to user who have tested each and every patch for the bug). Skipping this one <em>should</em> avoid the problem all together.</p>
<p>There are several possible resolutions to this problem depending on your specific situation, some simple to solve, some more difficult.</p>
<p>The most obvious, and easiest fo resolve, is permissions on the executable files themselves. Firstly you have to open the Office application folder (normally &#8220;C:Program files (x86) Microsoft OfficeOffice 12&#8243; or similar). You&#8217;ll need to locate each individual application executable (e.g. &#8220;<em>Word</em>&#8221; is &#8220;<em>winword.exe</em>&#8220;.) Right click on the executeable and select the &#8220;<strong>Properties</strong>&#8221; menu. In the properties window that opens, select the &#8220;<strong>Security</strong>&#8221; tab and click &#8220;<strong>Edit</strong>&#8220;. Give &#8220;<strong>Users</strong>&#8221; full control. You&#8217;ll may (in rare cases) need to re-create your shortcuts from these files.</p>
<p>Amongst the registry keys that are affected are the following:</p>
<ul>
<li>HKLMSoftwareMicrosoftWindowsCurrentVersionInstallerUserDataS-1-5-18Components379E92CC2CB71D119A12000A9CE1A22A</li>
<li>HKLMSoftwareMicrosoftWindowsCurrentVersionInstallerUserDataS-1-5-18ComponentsDA42BC89BF25F5BD0AF18C3B9B1A1EE8</li>
<li>HKLMSoftwareMicrosoftWindowsCurrentVersionInstallerUserDataS-1-5-18ComponentsDA42BC89BF25F5BD0BF18C3B9B1A1EE8</li>
<li>HKLMSoftwareMicrosoftWindowsCurrentVersionInstallerUserDataS-1-5-18ComponentsDA42BC89BF25F5BD0CF18C3B9B1A1EE8</li>
<li>HKLMSoftwareMicrosoftWindowsCurrentVersionInstallerUserDataS-1-5-18Components82DE7549CF3F8CCB0DF18C3B9B1A1EE8</li>
<li>HKLMSoftwareMicrosoftWindowsCurrentVersionInstallerUserDataS-1-5-18Components6F949E36CB3004C50AF18C3B9B1A1EE8</li>
<li>HKLMSoftwareMicrosoftWindowsCurrentVersionInstallerUserDataS-1-5-18Components6F949E36CB3004C50CF18C3B9B1A1EE8</li>
<li>HKLMSoftwareMicrosoftWindowsCurrentVersionInstallerUserDataS-1-5-18Components7AA6F3DBF3CE139469FE63D56E7AF446</li>
</ul>
<p>Any (including any that may not be listed above yet simmilarly afflicted) registry affected in this manner keys need to have thier permissions reset to the same permissions as thier parent key. i.e permissions should be inherited.<br />
If you&#8217;re not comfortable doing this by hand, there&#8217;s an open-source utility called <strong>SetACL</strong> (<a title="SetACL at SourceForge" href="http://setacl.sourceforge.net/" target="_blank">http://setacl.sourceforge.net/</a>) that can help.</p>
<p><em><span style="text-decoration: underline;"><strong>WARNING</strong></span>: There are many keys under the &#8220;components&#8221; key that have nothing to do with Office! do not go and arbitrarily go and reset every single sub-key under &#8220;components&#8221; to inherited permissions, as this will effectively remove all UAC protection from all installed components (not just office) so don&#8217;t do that! You&#8217;ll have to inspect individual registry keys.</em></p>
<p>If you&#8217;re in fact going to use SetACL, you can execure the appropriate command-line function like this:</p>
<p><code>setacl -ot reg -on "HKLMSoftwareMicrosoftWindowsCurrentVersionIn  stallerUserDataS-1-5-18Components{GUID}" -actn setprot -op "dacl:np;sacl:nc" -rec yes</code></p>
<p>Where {GUID} is the ID of the component that requires resetting. It may be easier to copy this command into a batch file if you need to execute it numerous times. Typing this over and over 30 times can be painful.</p>
<p>Well, hopefully one of these solutions has solved the problem fo you. If not, I&#8217;ve heard of a later update causing almost the same issue, so you may very well be experiencing a similar problem! Let me know if you do&#8230; especially if you figure out another way to solve it.</p>
<p>Thanks to everyone at VistaHeads for following up the problem.</p>
<p>For more information, and to join in discussions on Microsoft products, see the following Microsoft specific Newsgroups:<br />
microsoft.public.office.misc and microsoft.public.word.newusers</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yesjames.com/index.php/2009/05/vista-office-2007-error/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Delphi: Declaring and initialising constant arrays</title>
		<link>http://www.yesjames.com/index.php/2009/02/delphi-declaring-and-initialising-constant-arrays/</link>
		<comments>http://www.yesjames.com/index.php/2009/02/delphi-declaring-and-initialising-constant-arrays/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 03:54:58 +0000</pubDate>
		<dc:creator>james</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Arrays]]></category>

		<guid isPermaLink="false">http://www.yesjames.com/?p=141</guid>
		<description><![CDATA[In Delphi, arrays are, put simply, a list of values contained within a common variable, that are accessible by their index within that list. But what if you don&#8217;t want your list of values to be able to be altered at run-time? You need them to be contained in a constant rather than a variable. [...]]]></description>
			<content:encoded><![CDATA[<p><script src="/wp-content/sh/shBrushDelphi.js" type="text/javascript"></script>In Delphi, arrays are, put simply, a list of values contained within a common variable, that are accessible by their index within that list.</p>
<p>But what if you don&#8217;t want your list of values to be able to be altered at run-time? You need them to be contained in a constant rather than a variable.</p>
<p><strong>Example:</strong> to declare an array of abbreviated week names:</p>
<pre name="code" class="brush: delphi">
const
  Days: Array[0..6] of String = (
      'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'
  );
</pre>
<p>You could then access each name by the index of the day of the week within the <strong>Days</strong> constant.</p>
<pre name="code" class="brush: delphi">
i := DayOfWeek(Date); //returns an integer 0-6
ShowMessage('Today is  ' + Days[i]);
</pre>
<p>Another common use for constant arrays is to describe the values in an ENUM type:</p>
<pre name="code" class="brush: delphi">
type
  TStatusCodes = [
    scUnknown, scActive, scPending,
    scDisabled, scSuspended
  ];
const
  StatusString = Array[TStatusCodes] of String = (
    'Unknown', 'Active', 'Pending',
    'Disabled', 'Suspended'
  );
</pre>
<p>Then, the description string for each status code becomes available via the ordinal value of the status code itself:</p>
<pre name="code" class="delphi">
ShowMessage('Your account is '+ StatusString[scActive]);
</pre>
<p>Would show a message box with the text &#8220;<em>Your account is Active</em>&#8220;. Of course in the real world, the status code enumeration value would come from a user object or some such similar method (like &#8220;<em>function getAccountStatus(): TStatusCode;</em>&#8221; perhaps).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yesjames.com/index.php/2009/02/delphi-declaring-and-initialising-constant-arrays/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to find Windows uptime</title>
		<link>http://www.yesjames.com/index.php/2009/01/how-to-find-windows-uptime/</link>
		<comments>http://www.yesjames.com/index.php/2009/01/how-to-find-windows-uptime/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 22:19:51 +0000</pubDate>
		<dc:creator>james</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Network Management]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.yesjames.com/?p=130</guid>
		<description><![CDATA[Ok, so you want to know how long it&#8217;s been since your windows workstation or server was last (re)booted. There are two options. The first is built right into windows, the second is an external command-line program provided by Microsoft to help with the problem. Option 1: Go to &#8220;Start&#8221; -&#62; &#8220;Run&#8220;. Write &#8220;cmd&#8221; and [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, so you want to know how long it&#8217;s been since your windows workstation or server was last (re)booted. There are two options. The first is built right into windows, the second is an external command-line program provided by Microsoft to help with the problem.</p>
<p><span style="text-decoration: underline;">Option 1:</span></p>
<ol>
<li>Go to &#8220;<em>Start</em>&#8221; -&gt; &#8220;<em>Run</em>&#8220;.</li>
<li>Write &#8220;<strong>cmd</strong>&#8221; and press on &#8220;<em>Enter</em>&#8221; key.</li>
<li>Write the command &#8220;<strong>net statistics server</strong>&#8221; and press on &#8220;<em>Enter</em>&#8221; key.</li>
<li>The line that start with &#8220;<em>Statistics since …</em>&#8221; provides the time that the server was up from.</li>
</ol>
<p>*   The command &#8220;<strong>net stats srv</strong>&#8221; can be use instead.</p>
<p><span style="text-decoration: underline;">Option 2:</span></p>
<p>The <strong>Uptime.exe</strong> tool allows you to estimate Server Availability with Windows NT 4.0 SP4 or Higher.</p>
<p><strong>Uptime.exe</strong> is a standalone program. To install the tool, simply copy the file into your <em>Windows</em> directory. You may then run the tool at a command prompt.</p>
<p>For extended help on this tool, type the following at a command prompt:</p>
<pre class="indent"><span class="userInput">uptime /help
</span></pre>
<p>This tool is most accurate when run with administrator privileges, however, even without administrator privileges, the tool attempts to make a best estimate based on available information. In all cases, the results should be considered estimates.</p>
<p>The <strong>uptime.exe</strong> program can be downloaded from Microsoft here:<br />
<a href="http://download.microsoft.com/download/winntsrv40/install/uptime_1.01/nt4/en-us/uptime.exe">http://download.microsoft.com/download/winntsrv40/install/uptime_1.01/nt4/en-us/uptime.exe</a></p>
<p><span style="text-decoration: underline;">See also:</span></p>
<p><a href="http://support.microsoft.com/kb/555737" target="_blank">http://support.microsoft.com/kb/555737</a><br />
<a href="http://support.microsoft.com/kb/232243" target="_blank">http://support.microsoft.com/kb/232243</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yesjames.com/index.php/2009/01/how-to-find-windows-uptime/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vista/Macrovision screwup</title>
		<link>http://www.yesjames.com/index.php/2008/12/vistamacrovision-screwup/</link>
		<comments>http://www.yesjames.com/index.php/2008/12/vistamacrovision-screwup/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 10:34:12 +0000</pubDate>
		<dc:creator>james</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Macrovision]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Vuze]]></category>

		<guid isPermaLink="false">http://www.yesjames.com/?p=117</guid>
		<description><![CDATA[If you&#8217;ve been running Vista for any period, you may well have come across the following error if you&#8217;ve installed a software DVD player, or upgraded an existing one, or perhaps have Azureus Vuze or some other Java application with media player capabilities installed: java.io.FileNotFoundException: C:\Documents and Settings\ReleaseEngineer.MACROVISION\Application Data\Azureus\azureus.config.saving (The system cannot find the path [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve been running Vista for any period, you may well have come across the following error if you&#8217;ve installed a software DVD player, or upgraded an existing one, or perhaps have Azureus Vuze or some other Java application with media player capabilities installed:</p>
<p><code>java.io.FileNotFoundException: C:\Documents and Settings\ReleaseEngineer.MACROVISION\Application Data\Azureus\azureus.config.saving (The system cannot find the path specified)</code></p>
<p>or<br />
<code>error:failed to create directory C:\Documents and Settings\ReleaseEngineer.MACROVISION\Application Data\Azureus\azureus.config.saving (The system cannot find the path specified)</code></p>
<p>Well, it seems that some genius programmer, instead of using the WIN32 function to determine the users application data path, has instead hard coded one assuming that the user will be running Windows XP under which creating the above directories might be allowed as all users are super users by default (under normal home-use circumstances).</p>
<p>Well, there is a solution &#8211; however it involves editing the Windows Registry.<br />
<em><span style="text-decoration: underline;"><strong>NOTE:</strong></span> If you&#8217;re unsure about what this means or are uncomfortable with editing the Windows Registry directly, ask for help from someone who has, or do a lot of research before you begin. If you break or corrupt your registry, windows may very easily become unusable.</em></p>
<p>Open your registry editor by running <strong>RegEdit</strong> from the windows &#8220;<em>RUN</em>&#8221; command:</p>
<p><code>Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folder</code></p>
<p>and make sure that <em>AppData</em> is set to &#8220;<strong>C:\Users\<em>&lt;user&gt;</em>\AppData\Roaming</strong>&#8220;. (replacing &lt;user&gt; with your local user account name &#8211; check the path yourself if unsure).</p>
<p><code>Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folder</code></p>
<p><em>AppData</em> should be &#8220;<strong>%USERPROFILE%\AppData\Roaming</strong>&#8221;</p>
<p><code>Computer\HKEY_CURRENT_USER\Volatile Environment</code></p>
<p><em>AppData</em> should be &#8220;<strong>C:\Users\&lt;user&gt;\AppData\Roaming</strong>&#8221; (again, replacing &lt;user&gt; with your local user account name &#8211; check the path yourself if unsure).</p>
<p>This should solve most of your issues.</p>
<p>I&#8217;ve been told that DELETING any registry keys containing the value: &#8220;<strong>C:\Documents and Settings\ReleaseEngineer.MACROVISION</strong>&#8221; will also work as the keys will be re-created automatically using default values (the correct default values) the next time a program saves its settings. However, this seems a drastic and possibly unsafe step, so leave it as a last resort if you&#8217;re still having problems.</p>
<p>Hope this help you all.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yesjames.com/index.php/2008/12/vistamacrovision-screwup/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Firefox compatible xPath functions in JavaScript</title>
		<link>http://www.yesjames.com/index.php/2008/11/firefox-compatible-xpath-functions-in-javascript/</link>
		<comments>http://www.yesjames.com/index.php/2008/11/firefox-compatible-xpath-functions-in-javascript/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 01:41:27 +0000</pubDate>
		<dc:creator>james</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XPath]]></category>

		<guid isPermaLink="false">http://www.yesjames.com/?p=74</guid>
		<description><![CDATA[There are a lot of quirks between different browsers, in particular though are the differences in the way each browser handles the DOM in JavaScript. Internet Explorer, for the most part, implements MSXml 4.0 or higher. However that&#8217;s (obviously) a Microsoft technology, and the standard implementation doesn&#8217;t support XPath in the DOM. In particular the [...]]]></description>
			<content:encoded><![CDATA[<p>There are a lot of quirks between different browsers, in particular though are the differences in the way each browser handles the DOM in JavaScript.</p>
<p>Internet Explorer, for the most part, implements MSXml 4.0 or higher. However that&#8217;s (obviously) a Microsoft technology, and the standard implementation doesn&#8217;t support XPath in the DOM.</p>
<p>In particular the <strong>selectNodes()</strong> and <strong>selectSingleNode()</strong> functions are of particular use when manipulating XML or the DOM. Using these functions you can parse an XPath expression and get a nodelist of elements in your DOM that match the expression.</p>
<p><span id="more-74"></span></p>
<p>The code below adds basic XPath parsing functionality to the DOM in Mozilla. (Thanks to km0ti0n)</p>
<pre name="code" class="brush: javascript">
// mozXPath - http://km0.la/js/mozXPath/
// km0ti0n@gmail.com
// Code licensed under Creative Commons Attribution-ShareAlike License
// http://creativecommons.org/licenses/by-sa/2.5/
if (document.implementation.hasFeature("XPath", "3.0")) {
	if ( typeof XMLDocument == "undefined" ) {
		XMLDocument = Document;
	}
	XMLDocument.prototype.selectNodes = function(cXPathString, xNode) {
		if ( !xNode ) { xNode = this; }
		var oNSResolver = this.createNSResolver(this.documentElement);
		var aItems = this.evaluate(cXPathString, xNode, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
		var aResult = [];
		for ( var i = 0; i < aItems.snapshotLength; i++) {
			aResult[i] =  aItems.snapshotItem(i);
		}
		return aResult;
	}
	XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode) {
		if( !xNode ) { xNode = this; }
		var xItems = this.selectNodes(cXPathString, xNode);
		if ( xItems.length > 0 ) { return xItems[0]; }
		else { return null; }
	}

	Element.prototype.selectNodes = function(cXPathString) {
		if (this.ownerDocument.selectNodes) {
			return this.ownerDocument.selectNodes(cXPathString, this);
		} else { throw "For XML Elements Only"; }
	}

	Element.prototype.selectSingleNode = function(cXPathString) {
		if (this.ownerDocument.selectSingleNode) {
			return this.ownerDocument.selectSingleNode(cXPathString, this);
		} else { throw "For XML Elements Only"; }
	}
}
</pre>
<p>It appears that Opera doesn&#8217;t have the XMLDocument object type, so, when using the XmlHttpRequest object the <em>responseXML</em> is in fact a <em>Document</em> object.</p>
<p>To get around this fact, we can use:</p>
<pre name="code" class="brush: javascript">
if ( typeof XMLDocument == "undefined" ) {
    XMLDocument = Document;
}
</pre>
<p>To use these new features, in either IE or Firefox, you can now simple call the functions as a method of the elements themselves&#8230; e.g.:</p>
<p>On the following XML Document:</p>
<pre name="code" class="brush: xml">
<MainNode>
    <SubNode id="1" enabled="true">
      <ContentNode>Some Content</ContentNode>
    </SubNode>
    <SubNode id="2" enabled="true">
      <ContentNode>Some Content</ContentNode>
    </SubNode>
    <SubNode id="3" enabled="false">
      <ContentNode>Some Content</ContentNode>
    </SubNode>
</MainNode>
</pre>
<p>For the XML sample above, you can use the following XPath to select all <em>ContentNode</em>&#8216;s with their <em>enabled</em> attribute set to <em>&#8220;true&#8221;</em>:<br />
<code>//subnode[@enabled='true']/contentnode</code></p>
<p>So you would retrieve your XML Node List by executing the following JavaScript function:</p>
<pre name="code" class="brush: javascript">
//assume the variable xDOM is an XmlDocument object
//...that has been pre-loaded with the example XML
var nodeList = xDOM.selectNodes('//subnode[@enabled='true']/contentnode');
for each (var xNode in nodeList) {
    //do some operation...
}
</pre>
<p>This would perform some operation on each <em>contentnode</em> which is inside a <em>subnode</em> with it&#8217;s <em>enabled</em> property set to <em>true</em>.</p>
<p><em><strong>NOTE:</strong> Be sure to double check your syntax, spelling and remember XML/XPath is CaseSensitive.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yesjames.com/index.php/2008/11/firefox-compatible-xpath-functions-in-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

