<?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>Zorn Software</title>
	<atom:link href="http://zornsoftware.talsit.info/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://zornsoftware.talsit.info</link>
	<description>Simplicity is the Essence of Good Design</description>
	<lastBuildDate>Tue, 27 Jul 2010 11:28:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Starting programs with administrator rights at login</title>
		<link>http://zornsoftware.talsit.info/?p=228</link>
		<comments>http://zornsoftware.talsit.info/?p=228#comments</comments>
		<pubDate>Fri, 25 Jun 2010 06:27:36 +0000</pubDate>
		<dc:creator>Mr. Bungle</dc:creator>
				<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://zornsoftware.talsit.info/?p=228</guid>
		<description><![CDATA[With the introduction of UAC in Vista, launching a program that requires administrative rights on Windows startup (when you first log in) has become more difficult. One solution that has been doing the rounds is to use the Task Scheduler as a workaround. What a mess! Provided you are not running a &#8216;home&#8217; edition of [...]]]></description>
			<content:encoded><![CDATA[<p>With the introduction of UAC in Vista, launching a program that requires administrative rights on Windows startup (when you first log in) has become more difficult.  One solution that has been doing the rounds is to use the <a href="http://blogs.techrepublic.com.com/window-on-windows/?p=616&#038;tag=leftCol;post-635">Task Scheduler as a workaround</a>.  What a mess!</p>
<p>Provided you are <strong>not</strong> running a &#8216;home&#8217; edition of Windows Vista/7, I have found what I believe is the cleanest and easiest way to achieve this:</p>
<p>1.  Start->Run-> &#8220;gpedit.msc&#8221;<br />
2.  User Configuration->Windows Settings->Scripts (Logon/Logoff)<br />
3.  Double-click &#8216;Logon&#8217;, and add entries for each of the applications you want launched.  </p>
<p><img src="http://zornsoftware.talsit.info/wp-content/uploads/2010/06/gpedit-logon.png" alt="Group Policy Logon" /></p>
<p>The applications you define in here will be launched with administrator rights when you logon without any UAC dialogs being displayed.  </p>
]]></content:encoded>
			<wfw:commentRss>http://zornsoftware.talsit.info/?feed=rss2&amp;p=228</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Remote Desktop via VPN</title>
		<link>http://zornsoftware.talsit.info/?p=211</link>
		<comments>http://zornsoftware.talsit.info/?p=211#comments</comments>
		<pubDate>Thu, 17 Jun 2010 13:24:16 +0000</pubDate>
		<dc:creator>Mr. Bungle</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://zornsoftware.talsit.info/?p=211</guid>
		<description><![CDATA[For many programmers and IT professionals, remote access via VPN to machines in their corporate network is a routine activity. This activity usually involves launching a VPN client (e.g. ShrewSoft VPN Client), entering a password, waiting for the VPN to be connected, then launching the remote desktop client. I have written a small executable to [...]]]></description>
			<content:encoded><![CDATA[<p>For many programmers and IT professionals, remote access via VPN to machines in their corporate network is a routine activity.  This activity usually involves launching a VPN client (e.g. <a href="http://www.shrew.net/">ShrewSoft VPN Client</a>), entering a password, waiting for the VPN to be connected, then launching the remote desktop client.  I have written a small executable to help automate that process, called <a href="http://zornsoftware.talsit.info/?page_id=37&#038;did=8">DirectToDesktop</a>.</p>
<p>The program launches your VPN client with the specified arguments and then starts a remote desktop session to a specified computer as soon as that machine can be pinged.</p>
<p><strong>Usage</strong></p>
<p><code>DirectToDesktop.exe &lt;pathToVpnClient&gt; &lt;vpnClientArgs&gt; &lt;hostName&gt; [pathToLookAlive]</code></p>
<p><em>&lt;pathToVpnClient&gt;</em> &#8211; E.g. &#8220;C:\Program Files\ShrewSoft\VPN Client\ipsecc.exe&#8221;<br />
<em>&lt;vpnClientArgs&gt;</em> &#8211; Args to pass to the VPN client.  E.g. &#8220;-r \&#8221;Your Company.pcf\&#8221;"<br />
<em>&lt;hostName&gt;</em> &#8211; The name/IP of the computer inside the VPN to remote desktop to.<br />
<em>[pathToLookAlive]</em> &#8211; (optional) Install <a href="http://zornsoftware.talsit.info/?page_id=37&#038;did=3">Look Alive</a> to view connectivity status of the remote computer in the system tray.  E.g. &#8220;C:\Program Files (x86)\Zorn Software\Look Alive v1.24\LookAlive.exe&#8221;</p>
<p><strong>Note: </strong>I&#8217;ve only tested the program with <a href="http://www.shrew.net/">ShrewSoft VPN Client</a>, but in theory it should work with any VPN client that accepts command line arguments.  </p>
<p><strong>Installation</strong><br />
Just save <a href="http://zornsoftware.talsit.info/?page_id=37&#038;did=8">DirectToDesktop.exe</a> to any location on your hard disk, and add a shortcut to it using the above command line arguments.  Run the executable without passing any arguments to view a <a href="http://zornsoftware.talsit.info/wp-content/uploads/2010/06/DirectToDesktop.png">help/about window</a>.  </p>
]]></content:encoded>
			<wfw:commentRss>http://zornsoftware.talsit.info/?feed=rss2&amp;p=211</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ResX comments and random access</title>
		<link>http://zornsoftware.talsit.info/?p=179</link>
		<comments>http://zornsoftware.talsit.info/?p=179#comments</comments>
		<pubDate>Fri, 30 Apr 2010 11:50:46 +0000</pubDate>
		<dc:creator>Mr. Bungle</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://zornsoftware.talsit.info/?p=179</guid>
		<description><![CDATA[If you are working with .resx files in .net, you will no doubt be familar with the ResXResourceReader, ResXResourceWriter and possibly ResXResourceSet. These three classes allow reading and writing of resx files, but they have some annoying limitations: ResXResourceReader does not provide random access to values (no method taking a string name/key &#8211; you have [...]]]></description>
			<content:encoded><![CDATA[<p>If you are working with .resx files in .net, you will no doubt be familar with the <a href="http://msdn.microsoft.com/en-us/library/system.resources.resxresourcereader.aspx">ResXResourceReader</a>, <a href="http://msdn.microsoft.com/en-us/library/system.resources.resxresourcewriter.aspx">ResXResourceWriter</a> and possibly <a href="http://msdn.microsoft.com/en-us/library/system.resources.resxresourceset.aspx">ResXResourceSet</a>.  These three classes allow reading and writing of resx files, but they have some annoying limitations:</p>
<ol>
<li>ResXResourceReader does not provide random access to values (no method taking a string name/key &#8211; you have to traverse all entries sequentially to find a value).</li>
<li>ResXResourceReader requires use of <a href="http://connect.microsoft.com/VisualStudio/feedback/details/94757/comment-column-of-resource-editor-is-not-available-via-resxresourcereader">resx data nodes</a> to access value comments.</li>
<li>ResXResourceSet provides random access (via the <a href="http://msdn.microsoft.com/en-us/library/05wk49e5.aspx">GetObject()</a> method) but has no support for comments via resx data nodes.</li>
</ol>
<p>These classes have been available since .net 1.0 and it is another example of a software development principle I believe in more each day: <strong>&#8216;Your first attempt at designing [software entity] will be sub-optimal.&#8217;</strong>.  </p>
<p>Unfortunately Microsoft has not done much work in this area other than in .net 2.0 to introduce resx data node support for the ResXResourceReader that enable you to work with entry comments.  </p>
<p>If you want to work with resx comments as well as have random access to values, here is a class that derives from ResXResourceReader and provides that functionality:</p>
<pre class="brush: csharp;">
using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Resources;

namespace ResxUtils
{
	/// &lt;summary&gt;
	/// Extends the ResXResourceReader class with value and comment support.
	/// &lt;/summary&gt;
	public class ResXReader : ResXResourceReader
	{
		/// &lt;summary&gt;
		/// Container for a ResX value and comment.
		/// &lt;/summary&gt;
		private class ResXValue
		{
			public string Value;
			public string Comment;
		}

		Dictionary&lt;string, ResXValue&gt; _resxEntries;

		/// &lt;summary&gt;
		/// Initializes a new instance of the &lt;see cref=&quot;ResXReader&quot;/&gt; class.
		/// &lt;/summary&gt;
		/// &lt;param name=&quot;resXStream&quot;&gt;The resX stream.&lt;/param&gt;
		public ResXReader(System.IO.Stream resXStream)
			: base(resXStream)
		{
			Initialize();
		}

		/// &lt;summary&gt;
		/// Initializes a new instance of the &lt;see cref=&quot;ResXReader&quot;/&gt; class.
		/// &lt;/summary&gt;
		/// &lt;param name=&quot;filePath&quot;&gt;The file path.&lt;/param&gt;
		public ResXReader(string filePath)
			: base(filePath)
		{
			Initialize();
		}

		/// &lt;summary&gt;
		/// Initializes this instance.
		/// &lt;/summary&gt;
		private void Initialize()
		{
			UseResXDataNodes = true; // must turn this on to use access resx comments

			_resxEntries = new Dictionary&lt;string, ResXValue&gt;();

			foreach (DictionaryEntry entry in this)
			{
				var node = (ResXDataNode)entry.Value;
				var value = (string)node.GetValue(null as ITypeResolutionService);
				_resxEntries[node.Name] = new ResXValue { Value = value, Comment = node.Comment };
			}
		}

		/// &lt;summary&gt;
		/// Gets the value.
		/// &lt;/summary&gt;
		/// &lt;param name=&quot;key&quot;&gt;The key.&lt;/param&gt;
		/// &lt;returns&gt;The value, or null if there is no entry matching the supplied key.&lt;/returns&gt;
		public string GetValue(string key)
		{
			if (_resxEntries.ContainsKey(key))
			{
				return _resxEntries[key].Value;
			}

			return null;
		}

		/// &lt;summary&gt;
		/// Gets the comment.
		/// &lt;/summary&gt;
		/// &lt;param name=&quot;key&quot;&gt;The key.&lt;/param&gt;
		/// &lt;returns&gt;The comment, or null if there is no entry matching the supplied key.&lt;/returns&gt;
		public string GetComment(string key)
		{
			if (_resxEntries.ContainsKey(key))
			{
				return _resxEntries[key].Comment;
			}

			return null;
		}
	}
}
</pre>
<p>Note: If you run Code Analysis / FxCop over this in .net 4.0, it will complain about several things, in particular LinkDemands are skipped, the class is not named correctly.  The class naming rule is a side effect of the base ResXResourceReader class implementing the generic interface IEnumerable, (so can just be suppressed) and the security warnings are due to the CAS policy changes in .net 4.0.  I&#8217;m not sure there is any way to code around deriving from a class with link demands in .net 4.0 without suppressing security warnings (even adding the SecurityCritical attribute fails, and should be unnecessary anyway).  </p>
]]></content:encoded>
			<wfw:commentRss>http://zornsoftware.talsit.info/?feed=rss2&amp;p=179</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FreeCommander + SuperCopier2</title>
		<link>http://zornsoftware.talsit.info/?p=152</link>
		<comments>http://zornsoftware.talsit.info/?p=152#comments</comments>
		<pubDate>Mon, 08 Mar 2010 16:16:41 +0000</pubDate>
		<dc:creator>Mr. Bungle</dc:creator>
				<category><![CDATA[Data Management]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://zornsoftware.talsit.info/?p=152</guid>
		<description><![CDATA[As fun as file systems are, you really don&#8217;t want to be spending longer than you have to when it comes to copying / moving / viewing files and navigating folders. I was saved years of grief fumbling about with Windows Explorer thanks to a mate&#8217;s advice to switch to TotalCommander back in 2003 (I [...]]]></description>
			<content:encoded><![CDATA[<p>As fun as file systems are, you really don&#8217;t want to be spending longer than you have to when it comes to copying / moving / viewing files and navigating folders.  I was saved years of grief fumbling about with Windows Explorer thanks to a mate&#8217;s advice to switch to <a href="http://www.ghisler.com/">TotalCommander</a> back in 2003 (I still remember his look of horror when when I said &#8216;Total-what?&#8217;).  When it comes to speed and efficiently, the keyboard is king, and TotalCommander and all the other *commander variants take advantage of that.</p>
<p>Last year I switched to <a href="http://www.freecommander.com/">FreeCommander</a>, and am very happy.  The main benefits for me are:</p>
<ul>
<li>a more modern / nicer UI</li>
<li>&#8216;type to navigate&#8217;</li>
<li>plenty of customisation options</li>
<li>it&#8217;s free <img src='http://zornsoftware.talsit.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>Unfortunately there are some serious drawbacks:</p>
<ul>
<li>The file-copy/move dialog is the Windows built-in one (<strong>which is down-right horrible)</strong></li>
<li>The file-delete dialog is the Windows built-in one, and it&#8217;s modal to the application</li>
<li>The FTP client has a terrible time-out issue and is generally buggy</li>
</ul>
<p>I&#8217;d like to solve all three of these, but I&#8217;m starting with the first.</p>
<p>Luckily, FreeCommander allows you to use an external copy/move program via an INI setting.  I tried the free <a href="http://www.codesector.com/teracopy.php">TeraCopy</a> for a while, but when I discovered <a href="http://supercopier.sfxteam.org/">SuperCopier 2</a>, it was perfect!  It really is lightning quick at what it does, it doesn&#8217;t get in your way, and has all the options you need (pause, error handling etc.).  The only problem is, as of v2.2, the copy interception code was re-written, and it could no longer be fully integrated with FreeCommander.  To solve this problem, I have written a small executable in C++ called SC2Integration.exe that uses the API provided by SuperCopier 2 (available on their <a href="https://sourceforge.net/projects/supercopier/">sourceforge site</a>) to re-unite FreeCommander with this excellent file-copy replacement.</p>
<p>Simply drop SC2Integration.exe into your FreeCommander installation folder (or anywhere else you would like to store it) and add the following two lines under the [Form] section of your FreeCommander.ini file:</p>
<p><code><br />
FileCopyPrg=%FcSrcPath%\SC2Integration.exe Copy "%ActivSelAsFile%" "%InactivDir%"<br />
FileMovePrg=%FcSrcPath%\SC2Integration.exe Move "%ActivSelAsFile%" "%InactivDir%"<br />
</code></p>
<p>If you didn&#8217;t copy SC2Integration.exe into your FreeCommander installation directory, replace %FcSrcPath% with the full correct path (no quotes).  On Windows 7 your FreeCommander.ini file is here by default:</p>
<p><code>C:\Users\username\AppData\Roaming\FreeCommander\FreeCommander.ini</code></p>
<p><a href="http://zornsoftware.talsit.info/?page_id=37&amp;did=6">Download the SC2Integration utility for free here</a>.</p>
<p>UPDATE: If you get an error &#8216;Parsing arguments&#8230;&#8217;, make sure you add double quotes around %ActivSelAsFile% and %InactivDir% in your FreeCommander.ini.  </p>
]]></content:encoded>
			<wfw:commentRss>http://zornsoftware.talsit.info/?feed=rss2&amp;p=152</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Windows 7 disconnected network drives</title>
		<link>http://zornsoftware.talsit.info/?p=129</link>
		<comments>http://zornsoftware.talsit.info/?p=129#comments</comments>
		<pubDate>Sun, 07 Mar 2010 05:21:47 +0000</pubDate>
		<dc:creator>Mr. Bungle</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://zornsoftware.talsit.info/?p=129</guid>
		<description><![CDATA[Mapped network drives have always been a buggy area in Windows, probably at least in part because they are still linked to a DOS namespace. From MSDN: On Windows Server 2003 and Windows XP, the WNet functions create and delete network drive letters in the MS-DOS device namespace associated with a logon session&#8230; Whatever the [...]]]></description>
			<content:encoded><![CDATA[<p>Mapped network drives have always been a buggy area in Windows, probably at least in part because they are still linked to a DOS namespace.  From <a href="http://msdn.microsoft.com/en-us/library/aa385413%28VS.85%29.aspx">MSDN</a>:</p>
<blockquote><p>On Windows Server 2003 and Windows XP, the WNet functions create and delete network drive letters in the MS-DOS device namespace associated with a logon session&#8230;</p></blockquote>
<p>Whatever the reason, it is <a href="http://www.sevenforums.com/network-sharing/51085-mapped-drive-not-connecting-startup.html">commonly reported</a> that mapped network drives appear as &#8216;disconnected&#8217; in Windows Explorer (or &#8216;unavailable&#8217; via net use), and that programs that attempt to use these drive mappings will fail until the user physically clicks on the drive letter in Windows Explorer.  Only this user-initiated action will restore the connection and allow other programs to successfully read from the drive letter.</p>
<p><img src="http://zornsoftware.talsit.info/wp-content/uploads/2010/03/dreaded-disconnected-dialog.png" alt="The dreaded disconnected network drive balloon." /></p>
<p>This is a BIG problem!</p>
<p>I initially thought that the mapping of the network drives was being done before some required services had started (such as the Workstation and Server services), so I wrote a program to run on startup that attempted to map a drive and logged all the currently running services if it failed.  It would keep trying to map a drive until it succeeded.  I hoped it would show me which services needed to be running in order to map a drive, after which I would write a program to wait for those services before attempting to map anything.  But, much to my amazement, I found that when the initial drive mapping failed and a subsequent attempt succeeded, the set of running services had not changed!  So I could only conclude that there was another element in the equation.  After thinking about this for a while, and reading <a href="http://msnotes.ponderworthy.org/2009/12/03/windows-7-libraries-an-drive-letter-mapping/">this post</a>, which indicates that Microsoft is apparently trying to address this, I decided &#8216;stuff it&#8217;, I&#8217;ll just write something that I know will work and is simple.</p>
<p>So I&#8217;ve written a small executable called MapDrive.exe to &#8216;work around&#8217; this problem, described on the following dialog:</p>
<p><img src="http://zornsoftware.talsit.info/wp-content/uploads/2010/03/MapDrive-Help.png" alt="About MapDrive" /></p>
<p>Now as you may know since Vista, there is the concept of a split user token, and mapped network drives apply to only one token, so if you map drives as a standard user and then run an elevated process, those network drives are not available to the elevated process.  This behaviour is <a href="http://support.microsoft.com/kb/937624">documented by Microsoft</a>, however the solution they offer is both unsupported and <a href="http://social.technet.microsoft.com/Forums/en/w7itprosecurity/thread/25cb7824-2a8d-4dbd-b802-1c64bed3a5e0">unsafe</a>.  Other solutions have been proposed <a href="http://superuser.com/questions/105173/how-to-access-network-shares-from-an-elevated-process-in-windows-7">here</a>.  If you don&#8217;t wish to use any of these solutions, you can do this:</p>
<p>1.  Run MapDrive.exe as a shortcut from your Startup folder.  This will map drives for the standard user token.<br />
2.  Run MapDrive.exe as a local group policy logon script using gpedit.msc.  This will map drives for the administrator token.</p>
<p><strong>Note:</strong> After using this program, you may still see the above balloon popup, simply click the spanner icon, and select &#8216;Hide icon and notifications&#8217; for &#8216;Windows Explorer&#8217;.  </p>
<p><a href="http://zornsoftware.talsit.info/?page_id=37&amp;did=5">Download the utility for free here</a>.</p>
<p>UPDATE: A few people have asked how to use this program.  As stated above, there are two ways, depending on whether you need drives mapped for standard users or admins.  If you don&#8217;t know what you need, you probably just need to do this for standard users.  Here are the steps for both:</p>
<p>1.  Copy MapDrive.exe to somewhere on your local hard drive.</p>
<p><strong>Standard Users:</strong><br />
2.  Right-click MapDrive.exe and choose &#8216;Create Shortcut&#8217;.  This will create a file called &#8216;MapDrive.exe &#8211; Shortcut&#8217; next to MapDrive.exe.  Now go Start->All Programs, right-click the &#8216;Startup&#8217; folder and choose &#8216;Open&#8217;.  Now copy the shortcut file you made before to this folder.  Now right-click the shortcut file and choose &#8216;Properties&#8217;.  Add the drive letter and network share as argument to the end of the &#8216;Target&#8217; field e.g. &#8220;C:\Users\joeblogs\Documents\MapDrive.exe s: \\server\share 20&#8243;.  You are done, next time you reboot, your s: should be mapped successfully for standard users.  </p>
<p><strong>Admin Users:</strong><br />
3.  Press Win+R, type gpedit.msc, go User Configuration->Windows Settings->Scripts.  Double-click Logon, click &#8216;Add&#8217; and enter script name (no quotes): &#8220;C:\Users\joeblogs\Documents\MapDrive.exe&#8221; and script parameters (no quotes): &#8220;s: \\server\share 20&#8243;, ok, ok, done.  You are done, next time you reboot, your s: should be mapped successfully for admin users (i.e. elevated programs).  </p>
]]></content:encoded>
			<wfw:commentRss>http://zornsoftware.talsit.info/?feed=rss2&amp;p=129</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Network CHMs = Pain courtesy of IE</title>
		<link>http://zornsoftware.talsit.info/?p=119</link>
		<comments>http://zornsoftware.talsit.info/?p=119#comments</comments>
		<pubDate>Thu, 18 Feb 2010 13:13:44 +0000</pubDate>
		<dc:creator>Mr. Bungle</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://zornsoftware.talsit.info/?p=119</guid>
		<description><![CDATA[Despite being around since 1997, CHM files still remain a popular format for program help / documentation as well as ebooks. But opening them from a network drive was outlawed in 2005 after Microsoft released this security update. There was a registry hack workaround to enable it again, however this no longer works in Windows [...]]]></description>
			<content:encoded><![CDATA[<p>Despite being around <a href="http://en.wikipedia.org/wiki/Microsoft_Compiled_HTML_Help">since 1997</a>, CHM files still remain a popular format for program help / documentation as well as ebooks.  But opening them from a network drive was outlawed in 2005 after Microsoft released <a href="http://support.microsoft.com/kb/896358">this security update</a>.  There was a registry hack workaround to enable it again, however this <a href="http://superuser.com/questions/75571/viewing-chm-files-across-the-network-in-windows-7">no longer works in Windows 7</a>.  The solution accepted on this thread involves two steps:</p>
<p>1.  Add this registry key:</p>
<p><code>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]<br />
"MaxAllowedZone"=dword:00000001</code></p>
<p>2.  In Internet Explorer->Tools->Internet Options and add your network drive into the safe/trusted zones.</p>
<p>Just the thought of firing up IE gives me the security-shivers and I really don&#8217;t want to be messing about with &#8216;trusted zones&#8217; &#8211; I don&#8217;t <em>trust </em>IE to do anything.  I&#8217;m surprised the US government hasn&#8217;t yet advised its citizens against using IE, like <a href="http://www.heraldsun.com.au/news/world/french-government-calls-on-internet-users-to-abandon-internet-explorer/story-e6frf7lf-1225821104953">Australia</a>, <a href="http://www.news.com.au/technology/french-government-calls-on-internet-users-to-abandon-internet-explorer/story-e6frfro0-1225821078692">France</a> and <a href="http://www.sophos.com/blogs/gc/g/2010/01/16/german-government-internet-explorer/">Germany</a> have.  </p>
<p>Of course the whole reason this has anything to do with IE is because the built in HH.exe that is the default Html Help viewer on Windows uses IE as the web browser engine to display and navigate the HTML files inside the CHM.  So we could avoid this whole problem if there was a CHM viewer that doesn&#8217;t use IE at all.  Now to the motivation for this post: </p>
<p>Enter <a href="http://xchm.sourceforge.net">xCHM</a> &#8211; this is an open-source project that predominantly provides support for viewing CHM files on non-windows platforms, however it has been ported to Windows, so you can kiss HH.exe goodbye, and open your CHMs from any network location without having to hack your registry or mess with IE zones!!</p>
<p>Download <a href="http://sourceforge.net/projects/xchm/files/">the Windows port of xCHM</a> (look under xCHM for Win32).  </p>
]]></content:encoded>
			<wfw:commentRss>http://zornsoftware.talsit.info/?feed=rss2&amp;p=119</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usenet vs Bittorrent</title>
		<link>http://zornsoftware.talsit.info/?p=105</link>
		<comments>http://zornsoftware.talsit.info/?p=105#comments</comments>
		<pubDate>Tue, 09 Feb 2010 03:06:16 +0000</pubDate>
		<dc:creator>Mr. Bungle</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Usenet]]></category>

		<guid isPermaLink="false">http://zornsoftware.talsit.info/?p=105</guid>
		<description><![CDATA[I switched from Bittorrent to Usenet about 2 years ago, and honestly it is hands-down the best way to get your movies / music / apps etc. Usenet has essentially all the same stuff as can be found on torrent sites (from what I understand, most content appears first on Usenet before it&#8217;s uploaded as [...]]]></description>
			<content:encoded><![CDATA[<p>I switched from Bittorrent to Usenet about 2 years ago, and honestly it is hands-down <strong>the </strong>best way to get your movies / music / apps etc.  Usenet has essentially all the same stuff as can be found on torrent sites (from what I understand, most content appears first on Usenet before it&#8217;s uploaded as torrents) but instead of downloading from &#8216;peers&#8217;, you download everything off a central server, so you are not relying on:</p>
<p style="padding-left: 30px;">a) Popularity of the file</p>
<p style="padding-left: 30px;">b) Your &#8216;peers&#8217; having their computers switched on with bittorrent  client   running</p>
<p style="padding-left: 30px;">c) Your &#8216;peers&#8217; having good upload bandwidth</p>
<p>All major usenet providers support SSL so your connection to their servers is secure, and you will download at the maximum speed of your connection, so you will know <strong>exactly </strong>when you will have your files.  Furthermore, you don&#8217;t upload anything (on Usenet, you are actually encouraged to leech), so if your ISP counts uploads, that&#8217;s a big saving.  In fact, that was one of the primary reasons I switched.  One night I accidently left my bittorrent client running and by morning my 15Gb quota for the month was blown and I had only downloaded a 700Mb file &gt;:(</p>
<p>So, security, constant download speed, no uploads, and no punching holes in your firewall to allow incoming connections.  Sounds like a winner?  Read on to get started.</p>
<h3>NZB Files</h3>
<p>To download from Usenet, you use NZB files (kind of the equivalent of .torrent files).  These tiny files contain information on &#8216;reports&#8217; that make up a set of files (usually a collection of .rar files) that have been posted to a newsgroup.  There are lots of sites where you can get NZB files, but I pretty much only use <a href="https://www.binsearch.info/">BinSearch</a>, which is fast, free and secure.  Some tips for beginners are:</p>
<ul>
<li>After searching, you need to tick/check the items you want and then click the &#8216;Create NZB&#8217; button.</li>
<li>Focus on collections (the ones with green text) and pay attention to the file size.</li>
<li>Use the Advanced search to search only for collections containing NFO files and that are between a specific file size range (very useful for narrowing down searches that return lots of results).</li>
</ul>
<p>An alternative to searching is just browsing (like <a href="http://thepiratebay.org/">PB&#8217;s</a> Top 100), probably the best site for this is <a href="http://v3.newzbin.com/">NewzBin</a> however you have to be invited to join.  This site categorizes everything on usenet just like you were browsing the shelves of your local Video store.  It&#8217;s free to browse, however you have to pay to download NZB files (or view NFO files), so I just switch back to BinSearch after i find something interesting.</p>
<h3>News Readers</h3>
<p>Once you have your NZB file(s) you need a news reader application (equivalent to a bittorrent client) to actually download the files.  I used to use the free <a href="http://www.shemes.com/">GrabIt</a> but this crashes almost every time on shutdown on Windows 7 (no data is lost, it&#8217;s just friggen annoying), so I&#8217;m currently investigating the other free options out there, in particular, <a href="http://sabnzbd.org/">SABnzbd</a>, which is an open-source browser-based client with a smick (and very powerful) user interface.  There are stax of readers, including many you can pay for (e.g. <a href="http://www.newsleecher.com/">NewsLeecher</a>).  </p>
<h3>News Servers</h3>
<p>Your news reader app must connect to a news server which hosts essentially a mirror of all newsgroups, for which you must pay.  I use and recommend <a href="http://www.news.astraweb.com/">AstraWeb</a> $25 for 180Gb, never expires, SSL, 541 days retention.  <a href="http://www.giganews.com/">Giganews</a> has a 14-day free trial, and <a href="http://www.binverse.com/">Binverse</a> has a 30-day free trial with a whopping 329Gb of downloads if you want to try out Usenet before spending any ca$h.</p>
<h3>Par Files</h3>
<p>Occassionally you may find that one or two of the files in a set of 50 .rar files are missing, and several may be damaged / corrupted.  Luckily, collections come with .par files which enable repair or recovery of damaged or missing files without having to download anything further.  Simply open the .par2 file with <a href="http://www.quickpar.org.uk/">QuickPar</a> and watch it work its magic.</p>
<h3>Summary</h3>
<p>Although it may seem from the above that using Usenet is complicated, it&#8217;s really only the fact that there are a few things you need to do at the start (getting the apps, signing up to a news server).  Once you have those in place, Usenet is a breeze and provides numerous benefits over torrenting.  Go try it!!</p>
]]></content:encoded>
			<wfw:commentRss>http://zornsoftware.talsit.info/?feed=rss2&amp;p=105</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Internet over copper sucks</title>
		<link>http://zornsoftware.talsit.info/?p=58</link>
		<comments>http://zornsoftware.talsit.info/?p=58#comments</comments>
		<pubDate>Fri, 06 Nov 2009 13:42:16 +0000</pubDate>
		<dc:creator>Mr. Bungle</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://zornsoftware.talsit.info/?p=58</guid>
		<description><![CDATA[I am subscribed to the fastest available ADSL 2+ (24Mbps) connection here in Sydney, and my connection at three different houses I&#8217;ve lived in has always been unreliable.  Currently where I&#8217;m living, the connection actually goes down whenever it starts raining!    It also frequently goes down just at random, when it&#8217;s not raining.  P2P [...]]]></description>
			<content:encoded><![CDATA[<p>I am subscribed to the fastest available ADSL 2+ (24Mbps) connection here in Sydney, and my connection at three different houses I&#8217;ve lived in has always been unreliable.  Currently where I&#8217;m living, the connection actually goes down whenever it starts raining!  <img src='http://zornsoftware.talsit.info/wp-includes/images/smilies/icon_confused.gif' alt=':?' class='wp-smiley' />   It also frequently goes down just at random, when it&#8217;s not raining.  P2P seems to worsen the situation (not surprisingly), but <a href="http://zornsoftware.talsit.info/?p=105">usenet is superior anyway</a>, so that&#8217;s not a problem anymore.  Granted, I am pretty far from the exchange (~4km), hopefully copper will be replaced with <a href="http://www.dbcde.gov.au/funding_and_programs/national_broadband_network" target="_blank">optic fibre in the next decade</a>.</p>
<p>So a while back I wrote a small utility that shows an icon in the system tray reflecting whether you can contact (via ping) a remote host (google, or your ISP&#8217;s DNS server, for example).</p>
<p>Online icon: <img class="size-full wp-image-54 alignnone" title="lookalive-up" src="http://zornsoftware.talsit.info/wp-content/uploads/2009/11/lookalive-up.png" alt="lookalive-up" width="20" height="23" /></p>
<p>Offline icon: <img class="size-full wp-image-52 alignnone" title="lookalive-down" src="http://zornsoftware.talsit.info/wp-content/uploads/2009/11/lookalive-down.png" alt="lookalive-down" width="20" height="22" /></p>
<p>Clicking the icon shows your the history of ping times:</p>
<div class="mceTemp">
<dl id="attachment_59" class="wp-caption alignnone" style="width: 333px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-59" title="lookalive" src="http://zornsoftware.talsit.info/wp-content/uploads/2009/11/lookalive.png" alt="Look Alive" width="323" height="182" /></dt>
</dl>
</div>
<p>It can be run on startup, passing the name or IP of the remote host as an argument.  For example:</p>
<p><code>"lookalive.exe <a class="linkification-ext" title="Linkification: http://www.google.com" href="http://www.google.com">www.google.com</a>"</code></p>
<p>You can also specify the period (in seconds) between pings (default is 1 second), so to ping www.google.com every 5 seconds:</p>
<p><code>"lookalive.exe <a class="linkification-ext" title="Linkification: http://www.google.com" href="http://www.google.com">www.google.com</a> 5"</code></p>
<p>If you have multiple hosts you wish to ping, you can run the application multiple times and a spearate icon in the system tray is displayed for each host.  To distinguish between them, you can pass a <a href="http://www.flounder.com/csharp_color_table.htm">colour</a>:</p>
<p><code>"lookalive.exe <a class="linkification-ext" title="Linkification: http://www.google.com" href="http://www.google.com">www.google.com</a> 5 blue"</code></p>
<p>Additional arguments allow calling of an external application and/or showing a balloon notification whenever the state changes and customisation of the system tray icon.  </p>
<p>Download the utility for free as an <a href="http://zornsoftware.talsit.info/?page_id=37&amp;did=3">installer</a> or as a <a href="http://zornsoftware.talsit.info/?page_id=37&#038;did=4">standalone EXE</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://zornsoftware.talsit.info/?feed=rss2&amp;p=58</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cutting your chances of data loss</title>
		<link>http://zornsoftware.talsit.info/?p=46</link>
		<comments>http://zornsoftware.talsit.info/?p=46#comments</comments>
		<pubDate>Thu, 05 Nov 2009 10:01:40 +0000</pubDate>
		<dc:creator>Mr. Bungle</dc:creator>
				<category><![CDATA[Data Management]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://zornsoftware.talsit.info/?p=46</guid>
		<description><![CDATA[Data loss is probably the single most traumatic experience possible for those that store their data electronically. In recent years, I have had the good fortune to be spared of this event, touch wood, but I will be forever mourning the loss of the first computer game I wrote, back in the early 90&#8242;s on [...]]]></description>
			<content:encoded><![CDATA[<p>Data loss is probably the <strong>single most traumatic experience </strong>possible for those that store their data electronically. In recent years, I have had the good fortune to be spared of this event, touch wood, but I will be forever mourning the loss of the first computer game I wrote, back in the early 90&#8242;s on a Mac SE/30.  It was a hypercard stack, 2.1 Mb in size, so I couldn&#8217;t back it up on a single floppy.  Eventually, the 40Mb HDD in that great machine died, and I was crushed.  Years of work, all that creativity, a window on my teenage years.  Gone.</p>
<p>But it was just a game after all.  Recently a friend of mine lost pretty much all the photos of their first born child (3 months worth) due to a botched home server upgrade.  Crushing.</p>
<p>We all know the answer is backup, but many people just don&#8217;t get around to it, thinking, &#8216;yeah I should do that&#8217;.  Like many people, I have a server at home (Gentoo linux) that is my firewall, dhcp server etc. and of course file server.  I have a 4.5Tb RAID5 (7 x 750Gb drives) which is about 80% full of data that I&#8217;ve amassed over the years.  At the moment there are only two clients &#8211; a desktop for everyday use, and a media centre hooked up to the TV.  Even though I do have some level of data redundancy since I am using RAID5, data loss will still occur if more than one HDD fails.</p>
<p>Ok, so finally to the point of this post &#8211; to boost my data integrity (and aid in learning WPF), I have written a &#8216;folder mirror&#8217; utility.</p>
<div id="attachment_45" class="wp-caption alignnone" style="width: 438px"><img class="size-full wp-image-45" title="foldermirror" src="http://zornsoftware.talsit.info/wp-content/uploads/2009/11/foldermirror.png" alt="Folder Mirror Screenshot" width="428" height="156" /><p class="wp-caption-text">Folder Mirror Screenshot</p></div>
<p>As you can see, the folder mirroring process can be paused and resumed at will, log files are maintained in a directory of your choice, and a system tray icon is shown, which dynamically displays the percent complete.  To configure which folders to mirror, the program reads a file called folderMirror.config, in which you can define as many folders to copy as desired.  The utility is designed to be used as part of a scheduled backup, such as a scheduled task.  I have it running every day, creating a mirror of  the data I care most about on the two client computers.  So now my chances of losing data due to HDD failure have been cut down to managable odds, and I can sleep much easier.</p>
<p>You can <a href="http://zornsoftware.talsit.info/?page_id=37&amp;did=1">download the utility for free here</a>.</p>
<p><strong>UPDATE:</strong> This software is no longer maintained, I recommend you look at using <a href="http://www.jumpingbytes.com/en/puresync.html">PureSync</a> as a much more powerful free alternative.  </p>
]]></content:encoded>
			<wfw:commentRss>http://zornsoftware.talsit.info/?feed=rss2&amp;p=46</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Win7 Library Tool</title>
		<link>http://zornsoftware.talsit.info/?p=3</link>
		<comments>http://zornsoftware.talsit.info/?p=3#comments</comments>
		<pubDate>Mon, 02 Nov 2009 14:02:20 +0000</pubDate>
		<dc:creator>Mr. Bungle</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://zornsoftware.talsit.info/?p=3</guid>
		<description><![CDATA[Windows 7 libraries are a really useful feature of Windows 7, however unfortunately they arrive in a slighly cut-down form out of the box.  Microsoft decided against exposing some really useful capabilities to users, like adding network locations, pretty much the first thing I tried to do.  You get this message: Luckily, you can add [...]]]></description>
			<content:encoded><![CDATA[<p>Windows 7 libraries are a really useful feature of Windows 7, however unfortunately they arrive in a slighly cut-down form out of the box.  Microsoft decided against exposing some really useful capabilities to users, like adding network locations, pretty much the first thing I tried to do.  You get this message:</p>
<p><img class="alignnone size-full wp-image-8" title="windows7libraryerror" src="http://zornsoftware.talsit.info/wp-content/uploads/2009/11/windows7libraryerror2.png" alt="windows7libraryerror" width="406" height="247" /></p>
<p>Luckily, you can add network locations (and any other un-indexed locations), but it must be done programatically.  MS supply a command line utility slutil.exe, candidate for the worst named executable in history.  Pretty sure it stands for shell_library_util.  Anyway, I decided to write a tool to make it easy to add network locations, and added a few other features as well:</p>
<ul>
<li>Add network (UNC or mapped drive) and any other un-indexed folders to libraries.</li>
</ul>
<ul>
<li>Backup library configuration, such that a saved set of libraries can be instantly restored at any point (like after a re-install of the OS or for transfer between multiple computers).</li>
</ul>
<ul>
<li>Create a mirror of all libraries (using symbolic links) in [SystemDrive]:\libraries.  This means you can reference all your files using a much shorter path, and also provides another entry-point to your files in many places in the Operating System (e.g. file open/save dialogs).</li>
</ul>
<ul>
<li>Change a library&#8217;s icon.</li>
</ul>
<p><img class="alignnone size-full wp-image-4" title="win7librarytool" src="http://zornsoftware.talsit.info/wp-content/uploads/2009/11/win7librarytool.png" alt="win7librarytool" width="444" height="340" /></p>
<p>Hopefully it&#8217;s easy enough to use, so I don&#8217;t have to explain it <img src='http://zornsoftware.talsit.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>You can download it for free below.  (Note: This will only run on &gt;= Windows 7.)</p>
<p><a href="http://zornsoftware.talsit.info/?page_id=37&amp;did=2">Download Installer</a> | <a href="http://zornsoftware.talsit.info/?page_id=37&#038;did=7">Source Code</a></p>
<p>I must give credit to Josh Smith for his <a href="http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx">TreeView CodeProject article</a>, upon which this solution is modelled.</p>
<p>The application uses the <a href="http://code.msdn.microsoft.com/WindowsAPICodePack" target="_blank">Microsoft API CodePack</a> to manipulate libraries, which I encourage you to check out if you are writing software to integrate / take advantage of new features in Windows 7.</p>
<p>If you want to learn why and how libraries were introduced in Windows 7, including diving into the .library-ms file format, you can <a href="http://msdn.microsoft.com/en-us/magazine/dd861346.aspx">read this MSDN article</a>.</p>
<p>Now featured on <a href="http://revision3.com/tzdaily/2010-03-18win7librarytool">Tekzilla</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://zornsoftware.talsit.info/?feed=rss2&amp;p=3</wfw:commentRss>
		<slash:comments>213</slash:comments>
		</item>
	</channel>
</rss>
