<?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>Dave Page &#187; Software</title>
	<atom:link href="http://chwalisz.org/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://chwalisz.org</link>
	<description>Stuff</description>
	<lastBuildDate>Fri, 21 May 2010 00:21:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ESET vs Kaspersky</title>
		<link>http://chwalisz.org/2010/02/14/eset-vs-kaspersky/</link>
		<comments>http://chwalisz.org/2010/02/14/eset-vs-kaspersky/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 22:58:26 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://chwalisz.org/?p=514</guid>
		<description><![CDATA[<p>Our AVG subscription was expiring and I was having 2nd thoughts about renewing  &#8211; it was periodically crashing Bette&#8217;s underpowered computer. Ralph at work recommended Kaspersky Internet Security, and I got a trial of that and ESET Nod32 Security to try out. Both were well reviewed. ESET has a more techie interface, and a [...]]]></description>
			<content:encoded><![CDATA[<p>Our AVG subscription was expiring and I was having 2nd thoughts about renewing  &#8211; it was periodically crashing Bette&#8217;s underpowered computer. Ralph at work recommended Kaspersky Internet Security, and I got a trial of that and ESET Nod32 Security to try out. Both were well reviewed. ESET has a more techie interface, and a smaller memory footprint (important for little machines) and I wanted to like it more, but both machines started crashing randomly on startup and when the computer went into screen save or hibernate after installation.  So we went back to Kaspersky and so far it is running great. Plus I have the option to not install the email or IM filters at installation since PocoMail does not use PST files or such &#8211; as soon as the infected file hits the disk it is detected.</p>
<p>I did find a good <a href="http://www.forbes.com/2008/12/11/virus-filter-avira-tech-security-cx_ag_1211virus.html">Forbes article on Anti-Virus</a>, and from that found a <a href="http://www.av-comparatives.org/">nonprofit</a> <a href="http://www.av-comparatives.org/images/stories/test/ondret/avc_report24.pdf">review of AV software</a> where ESET and Kaspersky both do well but behind two others I never heard of. Ralph plus it works sez I think we will do Kaspersky.</p>
]]></content:encoded>
			<wfw:commentRss>http://chwalisz.org/2010/02/14/eset-vs-kaspersky/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Photo Mechanic</title>
		<link>http://chwalisz.org/2010/02/14/photo-mechanic/</link>
		<comments>http://chwalisz.org/2010/02/14/photo-mechanic/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 22:42:44 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://chwalisz.org/?p=500</guid>
		<description><![CDATA[<p>So I am trying to archive the check scans. TIF files named &#8220;donation-2010-DEP01-01.TIF&#8221; to identify the year, deposit batch number (01) and the scan number within the batch. </p>
<p>I first just entered the keywords using Thumbs Plus 7. Pain. TP8 is not much better &#8211; cannot keep the image open while I add the keywords. [...]]]></description>
			<content:encoded><![CDATA[<p>So I am trying to archive the check scans. TIF files named &#8220;donation-2010-DEP01-01.TIF&#8221; to identify the year, deposit batch number (01) and the scan number within the batch. </p>
<p>I first just entered the keywords using Thumbs Plus 7. Pain. TP8 is not much better &#8211; cannot keep the image open while I add the keywords. Small monitor.</p>
<p>Then I tried the user variables in Photo Mechanic. This was better, but I would need to change the settings for the user variables for each deposit.</p>
<p>Then I considered the filename. I can read the data right out of the filename using the variables. For the file <code>donation-2010-DEP01-01.TIF</code>, I use a caption definition:</p>
<p><code>{filenamebase:-13,4} Clinic Donations Deposit {filenamebase:-5,2} Page {filenamebase:-2,2} </code></p>
<p>which results in the caption of </p>
<p><code>Clinic Donations Deposit 01 Page 01</code></p>
<p>I can do the same thing with keywords. I entered the keyword phrase into the IPTC Stationery Pad:</p>
<p><code>Clinic, {filenamebase:-13, 2}, deposit_{filenamebase:-5,2}, DEPOSIT{filenamebase:-5,2}, donation, Page_{filenamebase:-2}, SMCORG</code> </p>
<p>to end up with the kewords:</p>
<p><code>Clinic, 2010, deposit_01, DEPOSIT01, donation, Page_01</code>, SMCORG</p>
<p>But when I reopen the pad, I see:</p>
<p><code>Clinic, {filenamebase | -13, 2}, deposit_{filenamebase |-5, DEPOSIT{filenamebase | -5, donation, Page_{filenamebase |-2}, SMCORG</code></p>
<p>which keywords as </p>
<p><code>Clinic, 20, deposit_01-03, SMCORG</code></p>
<p>Note the lost 2nd arguments and closing braces on some of the keyword terms. </p>
<p>I researched a bit in their forums and found a similar problem in this article, <a href="http://forums.camerabits.com/index.php?topic=4999.0">Colon in Keywords</a>. It was mentioned there that PM 4.6.2.1 had a problem with leaving colons alone in keywords, and 4.6.3 (recently released) fixed these problems. So I downloaded and installed 4.6.3 and the vertical pipes now work, but the problems with the closing braces are still there. Boo. I might have to go back to user variables.</p>
<p>Saturday night I <a href="http://forums.camerabits.com/index.php?topic=5169">posted a question</a> on the Camera Bits forum. Sunday morning Kirk the developer posts a &#8220;I&#8217;m on it&#8221; message. Then he posts that yes, it&#8217;s a bug, it will be fixed, here is the workaround. Nice. I post a followup. He posts one an hour later.</p>
<p>A good reason to support little companies with specialized software. Now I just scan, rename the file, and apply the Stationery Pad. Bam! Fill in the donors &#8211; done.</p>
<p>Photo Mechanic 4.6.3 from <a href="http://www.camerabits.com/">Camera Bits</a><br />
<a href="http://forums.camerabits.com">Camera Bits Forum</a><br />
Thumbs Plus from <a href="http://www.cerious.com/">Cerious Software</a></p>
]]></content:encoded>
			<wfw:commentRss>http://chwalisz.org/2010/02/14/photo-mechanic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing Windows XP into a Virtual Box VM</title>
		<link>http://chwalisz.org/2010/01/17/installing-windows-xp-into-a-virtual-box-vm/</link>
		<comments>http://chwalisz.org/2010/01/17/installing-windows-xp-into-a-virtual-box-vm/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 19:19:22 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://chwalisz.org/?p=479</guid>
		<description><![CDATA[<p>I need to do some testing, so let&#8217;s try installing Windows XP Pro into a Virtual Box VM to avoid trashing my production system. Which is pretty trashed anyway, and has a big frosty pre-ordered (cheap) Windows 7 waiting when I finally get around to researching a driver for my now non-supported HP LaserJet 3150 [...]]]></description>
			<content:encoded><![CDATA[<p>I need to do some testing, so let&#8217;s try installing Windows XP Pro into a Virtual Box VM to avoid trashing my production system. Which is pretty trashed anyway, and has a big frosty pre-ordered (cheap) Windows 7 waiting when I finally get around to researching a driver for my now non-supported HP LaserJet 3150 MFP &#8211; but that is another time&#8230;</p>
<p>Fire up VirtualBox and create a new VM. I picked the defaults except for 512M of RAM &#8211; gotta be careful to not run anything else &#8211; set the CDROM to physical drive E, and a growable HD 8Gb. The usual. </p>
<p>Now boot the new VM with the XP Pro SP3 CD (slipstreamed from the SP2 CD). It does its thing, and hit a certain point while it is loading drivers and locks. Hard. Click the close (X) button, VBox asks do I want to reset the VM? Sure. It locks. Hard. I try to kill all the processes and then restart VBox. There is a conflict with an open semaphore file, so I check again and sure enough there is still a VBox process, which cannot be killed. I shut down, Explorer disappears. Luckily a Task Manager box is still up. Finally the &#8220;Shutting down Windows&#8221; message comes up. Off to Candlelight Ski in Rush Creek. Three hours later, it is still shutting down. I figure most of the stuff has been saved at this point &#8211; reset button it is. Now boots ok. Whew.</p>
<p>The message implied some driver was not cooperating, and I questioned the USB stuff. So I run through the options and turn off any non-vital hardware. Audio, USB, no 3D acceleration. Restart the VM and the install. Now (the upgrade) asks for a previous version CD. Find my copy of Windows NT 4.0 Workstation. Yes.</p>
<p>Set networking to Bridged and run the install. Works great.</p>
<p>Moral: turn off all the extra hardware. You can add it later. Or not. I sure don&#8217;t need to.</p>
]]></content:encoded>
			<wfw:commentRss>http://chwalisz.org/2010/01/17/installing-windows-xp-into-a-virtual-box-vm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mockito and void methods on mock objects</title>
		<link>http://chwalisz.org/2010/01/05/mockito-and-void-methods-on-mock-objects/</link>
		<comments>http://chwalisz.org/2010/01/05/mockito-and-void-methods-on-mock-objects/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 21:45:10 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mockito]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://chwalisz.org/?p=462</guid>
		<description><![CDATA[<p>SO I have
 class TestFoo {</p>
<p>}
   TestFoo s1 = Mockito.mock(TestFoo.class);
   TestFoo s2 = Mockito.mock(TestFoo.class);</p>
<p>The Mockito doc &#8220;Real Partial Mocks&#8221; says to do this:</p>
<p>
when(mock.someMethod()).thenCallRealMethod();</p>
<p>we get the error </p>
<p>&#8220;The method when(T) in the type Mockito is not applicable for the arguments (void)&#8221;</p>
<p>After 1/2 hour of hunting I found a hint, and refactored:</p>
<p>
Mockito.doCallRealMethod().when(s1).assertEquals(s2);</p>

]]></description>
			<content:encoded><![CDATA[<p>SO I have<br />
 class TestFoo {</p>
<p>}<br />
   TestFoo s1 = Mockito.mock(TestFoo.class);<br />
   TestFoo s2 = Mockito.mock(TestFoo.class);</p>
<p>The Mockito doc <a href="http://mockito.googlecode.com/svn/tags/latest/javadoc/org/mockito/Mockito.html#16">&#8220;Real Partial Mocks&#8221;</a> says to do this:</p>
<blockquote><p>
<code>when(mock.someMethod()).thenCallRealMethod();</code></p></blockquote>
<p>we get the error </p>
<blockquote><p>&#8220;The method when(T) in the type Mockito is not applicable for the arguments (void)&#8221;</p></blockquote>
<p>After 1/2 hour of hunting I found a hint, and refactored:</p>
<blockquote><p>
<code>Mockito.doCallRealMethod().when(s1).assertEquals(s2);</code></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://chwalisz.org/2010/01/05/mockito-and-void-methods-on-mock-objects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DeDuping MusikCube playlists</title>
		<link>http://chwalisz.org/2009/12/14/dedupe-musikcube-playlists/</link>
		<comments>http://chwalisz.org/2009/12/14/dedupe-musikcube-playlists/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 18:10:53 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://chwalisz.org/?p=401</guid>
		<description><![CDATA[<p>Or, Use SQL Squirrel and JDBC to dedupe MusikCube playlists</p>
<p>I use MusikCube a lot. That said, I sometimes share files from various machines that have duplicate files, and rather than hand-edit the playlists after each synchronization to eliminate the duplicate albums, I want an automated way. Since MusikCube runs on SQLite, why not do it [...]]]></description>
			<content:encoded><![CDATA[<p>Or, Use SQL Squirrel and JDBC to dedupe MusikCube playlists</p>
<p>I use MusikCube a lot. That said, I sometimes share files from various machines that have duplicate files, and rather than hand-edit the playlists after each synchronization to eliminate the duplicate albums, I want an automated way. Since MusikCube runs on SQLite, why not do it in SQL?</p>
<p>First download the <a href="http://www.zentus.com/sqlitejdbc/">SQLiteJDBC</a> JDBC driver and install to the SQL Squirrel lib folder. Restart the client and add a new Driver to the list using name=SQLite, example URL = <code>jdbc:sqlite:test.db</code>, classname= <code>org.sqlite.JDBC</code> and Website URL = <code>http://www.zentus.com/sqlitejdbc/</code></p>
<p>First problem &#8211; how to access the database. Doc is sketchy, but based on some investigation of the <a href="http://github.com/crawshaw/sqlitejdbc/raw/master/src/org/sqlite/JDBC.java">org.sqlite.JDBC.java</a> code I found that it uses everything following the &#8220;jdbc:sqlite:&#8221; prefix as a new File() argument (unless nothing is found, than an in-memory DB is assumed). So I can access the db using the JDBC URL: <code>jdbc:sqlite:C:/Documents and Settings/username/.musikproject/musik_u.db</code>. I love source code.</p>
<p>Note: I do not put any work into playlists. I am a big fan of letting the metadata do the work. I am comfortable with nuking the DB a starting over, if necessary. If you have lots of valuable annotations, you are editing in the wrong place. So if my tests blow up the DB, so what.</p>
<p>Then from a SQL Server site article, <a href="http://support.microsoft.com/kb/139444">How to remove duplicate rows&#8230;</a>, I can compile this query:</p>
<blockquote><p>SELECT title, album, count(*)<br />
FROM songs<br />
GROUP BY title, album<br />
HAVING count(*) > 1</p></blockquote>
<p>I easily get 100 rows with 2 hits each.</p>
<p>Alternate form of query (from <a href="http://www.delphifaq.com/faq/delphi/database/f6.shtml">here</a>)</p>
<blockquote><p>select s1.filename, s1.songid, s2.songid, s1.title, CASE WHEN substr(s1.filename,1)=&#8217;f&#8217; OR substr(s2.filename,1)=&#8217;f&#8217; THEN 1 ELSE 2 END as fred<br />
from songs s1, songs s2<br />
where s1.songid < s2.songid and s1.title = s2.title AND s1.artist = s2.artist AND s1.album = s2.album<br />
AND s1.artist = 'Aerosmith'</p></blockquote>
<p>and also</p>
<blockquote><p>select s1.filename,<br />
( CASE<br />
&#8211; my box has top priority<br />
    WHEN (substr(s1.filename, 4, length(&#8216;mp3&#8242;)) = &#8216;mp3&#8242; ) THEN 1<br />
&#8211;  handle \\m51098 machine names<br />
    WHEN (substr(s1.filename, 3, length(&#8216;m51098&#8242;)) = &#8216;m51098&#8242; )THEN 2<br />
    WHEN (substr(s1.filename, 3, length(&#8216;m51165&#8242;)) = &#8216;m51165&#8242; )THEN 3<br />
    WHEN (substr(s1.filename, 3, length(&#8216;m51134&#8242;)) = &#8216;m51134&#8242; )THEN 4<br />
    ELSE 10 END ) AS priority<br />
from songs s1<br />
where 1 < (select count(*)<br />
from songs s2<br />
where s1.title = s2.title AND s1.artist = s2.artist AND s1.album = s2.album<br />
AND s1.artist = 'Aerosmith')<br />
-- limit to Aerosmith for speed<br />
AND s1.artist = 'Aerosmith'</p></blockquote>
<p>More to come&#8230;</p>
<p>Tools:<br />
<a href="http://squirrel-sql.sourceforge.net/">SQurrel SQL </a>JDBC client<br />
<a href="http://sqlitebrowser.sourceforge.net">SQLite browser</a><br />
<a href="http://www.sqlite.org/lang_corefunc.html">SQLite core function reference</a><br />
<a href="http://www.sqlite.org/">SQLite page</a><br />
<a href="http://www.zentus.com/sqlitejdbc/">SQLiteJDBC</a> driver</p>
]]></content:encoded>
			<wfw:commentRss>http://chwalisz.org/2009/12/14/dedupe-musikcube-playlists/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress Upload error 500</title>
		<link>http://chwalisz.org/2009/09/02/wordpress-upload-error-500/</link>
		<comments>http://chwalisz.org/2009/09/02/wordpress-upload-error-500/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 02:36:19 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://chwalisz.org/?p=364</guid>
		<description><![CDATA[<p>I was working on the trideltamc.org wordpress installation and tested uploading pictures. Error 500. Huh.</p>
<p>A little googling. Found this article on Error 500 Wordpress 1&#038;1 Web Hosting. I already had a .htaccess file, but added the two lines &#8211; the first time I forgot the space and it blew up everything.</p>
<p>Thanks dude!</p>
]]></description>
			<content:encoded><![CDATA[<p>I was working on the trideltamc.org wordpress installation and tested uploading pictures. Error 500. Huh.</p>
<p>A little googling. Found this article on <a href="http://lolyfe.com/?p=1558&#038;cpage=1">Error 500 Wordpress 1&#038;1 Web Hosting</a>. I already had a .htaccess file, but added the two lines &#8211; the first time I forgot the space and it blew up everything.</p>
<p>Thanks dude!</p>
]]></content:encoded>
			<wfw:commentRss>http://chwalisz.org/2009/09/02/wordpress-upload-error-500/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Renaming photos based on filename</title>
		<link>http://chwalisz.org/2009/08/30/354/</link>
		<comments>http://chwalisz.org/2009/08/30/354/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 17:19:12 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[archiving]]></category>
		<category><![CDATA[caption]]></category>
		<category><![CDATA[exifutils]]></category>
		<category><![CDATA[iptc]]></category>
		<category><![CDATA[photo]]></category>

		<guid isPermaLink="false">http://chwalisz.org/?p=354</guid>
		<description><![CDATA[<p>I found some photos of a rock climbing group from work. They were named &#8220;Cora At Top.JPG&#8221;, which is great to look at the once, but they don&#8217;t really fit into the archival scheme. Plus I didn&#8217;t want to have to reenter the caption, since it was encoded into the filename already.</p>
<p>I reached into the [...]]]></description>
			<content:encoded><![CDATA[<p>I found some photos of a rock climbing group from work. They were named &#8220;Cora At Top.JPG&#8221;, which is great to look at the once, but they don&#8217;t really fit into the archival scheme. Plus I didn&#8217;t want to have to reenter the caption, since it was encoded into the filename already.</p>
<p>I reached into the new release (2.7.4) of the ever useful <a href="http://www.hugsan.com/EXIFutils/">EXIFUtils</a> and checked the field name list. I found [file-name] and [file-base], which represent as a source the file name e.g. &#8220;Cora At Top.JPG&#8221; and the base file name &#8220;Cora At Top&#8221;. So by entering:</p>
<p><code> &gt; exifedit /a  ip-caption=[file-base] .</code></p>
<p>I add a IPTC-Caption tag to each file using the file base name as the caption. The brackets make it a &#8220;macro&#8221;, otherwise the literal text &#8220;file-base&#8221; is inserted, which is not what I wanted. The dot is *.*.</p>
<p>The program creates a bunch of backup files, which I deleted. The<code> /b</code> option does not create backups. Next time.</p>
<p>Then I use my imgnum script to reformat the name to the FSC_YYYYMMDD_HHMMSS std format.</p>
<p><code>"%EXIFUTILS_HOME%\exiffile.exe" /t /n VVKG[date-taken].jpg .<br />
rem fix VVKGYYYY-MM-DD HH-MM-SS.JPG to  VVKGYYYYMMDD_HHMMSS.JPG<br />
rem change space to _<br />
%CYGWIN_HOME%\bin\rename.exe " " "_"  *.jpg<br />
rem change dash to null<br />
%CYGWIN_HOME%\bin\rename.exe - ""  *.jpg<br />
%CYGWIN_HOME%\bin\rename.exe - ""  *.jpg<br />
%CYGWIN_HOME%\bin\rename.exe - ""  *.jpg<br />
%CYGWIN_HOME%\bin\rename.exe - ""  *.jpg<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://chwalisz.org/2009/08/30/354/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>KeePass Merge</title>
		<link>http://chwalisz.org/2008/07/20/keepass-merge/</link>
		<comments>http://chwalisz.org/2008/07/20/keepass-merge/#comments</comments>
		<pubDate>Sun, 20 Jul 2008 19:16:46 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[diff]]></category>
		<category><![CDATA[export]]></category>
		<category><![CDATA[keepass]]></category>
		<category><![CDATA[merge]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xsl]]></category>

		<guid isPermaLink="false">http://chwalisz.org/?p=103</guid>
		<description><![CDATA[<p>I use KeePass to track hundreds of passwords, securely. </p>
<p>I also use Replicator to synchronize the files between my USB flash drive, home and work PCs. Sometimes it gets confused, mostly when I make changes at both ends. Replicator realizes this and stops. It creates a copy of the file, renames it password~1.kdb and replicates [...]]]></description>
			<content:encoded><![CDATA[<p>I use KeePass to track hundreds of passwords, securely. </p>
<p>I also use <a href="http://www.michna.com/software.htm#Replicator">Replicator</a> to synchronize the files between my USB flash drive, home and work PCs. Sometimes it gets confused, mostly when I make changes at both ends. Replicator realizes this and stops. It creates a copy of the file, renames it password~1.kdb and replicates the two copies.</p>
<p>How to tell what changed? Cool tools like <a href="http://winmerge.org/">WinMerge</a> only detect differences of binary files, not what changed. Especially for an encrypted file.</p>
<p>I export each file to an xml file, say password.kdb.xml and password~1.kdb.xml. I uncheck the top two &#8211; encode \n and eliminate backup items. Who cares? I include all fields below.</p>
<p>WARNING: these files now have ALL your passwords in cleartext. DELETE them when done &#8212; preferably a <a href="http://en.wikipedia.org/wiki/Data_remanence">DOD delete</a>.</p>
<p>Each record has a <a href="http://en.wikipedia.org/wiki/Guid">GUID</a> &#8212; so no matter what change you make to the record, the GUID remains the same. So the way to check is to sort the XML by GUID and then compare the two with a diff tool.</p>
<p>I wrote an XSL stylesheet to sort them:</p>
<blockquote><p><code><br />
------keepass-exp-sortbyguid.xsl----------<br />&lt;xsl:stylesheet&nbsp;xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&nbsp;version="1.0"&gt;<br />
&nbsp;&nbsp;&lt;xsl:template&nbsp;match="pwlist"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:apply-templates&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:sort&nbsp;select="uuid"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:apply-templates&gt;<br />
&nbsp;&nbsp;&lt;/xsl:template&gt;<br />
&nbsp;&nbsp;&lt;xsl:template&nbsp;match="*"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:copy&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:apply-templates/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:copy&gt;<br />
&nbsp;&nbsp;&lt;/xsl:template&gt;<br />
&lt;/xsl:stylesheet&gt;<br />
</code>
</p></blockquote>
<p>I use the msxsl transformer cuz its easy on windows. Use your own, or send me a script for cygwin tools.</p>
<p>iconv is required to convert the output of the XSL transform from UTF-8 into ISO-8859-1 or else bad things happen down the chain.</p>
<p>Here is the batch file to drive them:</p>
<blockquote><p><code>------keepass-export-xml-sorter-converter.bat----------<br />setlocal<br />
rem take the xml output of keepass export, sort them by UUID, <br />
rem      export to new file for comparison. CLEARTEXT!!!</p>
<p><code>set ICONV_HOME=c:\Program Files\GnuWin32\bin<br />
msxsl password~1.kdb.xml keepass-exp-sortbyguid.xsl | "%ICONV_HOME%\iconv"<br />
&nbsp;&nbsp;-f UTF-16 -t ISO-8859-1 | tidy -xml -i -wrap 99999 &gt; password~1.kdb.sort.xml<br />
msxsl password.kdb.xml keepass-exp-sortbyguid.xsl | "%ICONV_HOME%\iconv" -f UTF-16 <br />
&nbsp;&#038;nbsp-t ISO-8859-1 | tidy -xml -i -wrap 99999 &gt; password.kdb.sort.xml</p>
<p><code>endlocal<br />
</code></p></blockquote>
<p>Now it is trivial to compare the two with WinMerge and identify the differences -- everything lines up!</p>
<p>I had a problem this last time with characters that do not convert -- typographic quotes and em dashes (ala Word Auto-Correcting). If you see <br /><code>09063   Flaming Moeiconv: x: cannot convert</code><br /> check the line for the goofy chars.</p>
<table>
<tr>
<td>
This <span xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://purl.org/dc/dcmitype/InteractiveResource" rel="dc:type">work</span> is licensed under a<br />
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 License</a>.</td>
<td>
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><br />
<img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /><br />
</a>
</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://chwalisz.org/2008/07/20/keepass-merge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Course: Edward Tufte, Presenting Data and Information</title>
		<link>http://chwalisz.org/2008/06/26/course-edward-tufte-presenting-data-and-information/</link>
		<comments>http://chwalisz.org/2008/06/26/course-edward-tufte-presenting-data-and-information/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 13:00:20 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Postcards]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[graphics]]></category>
		<category><![CDATA[powerpoint]]></category>
		<category><![CDATA[seminar]]></category>
		<category><![CDATA[tufte]]></category>

		<guid isPermaLink="false">http://chwalisz.org/?p=133</guid>
		<description><![CDATA[<p>Karin from work and I attended a one-day course, Presenting Data and Information, by Edward Tufte at the Hyatt Regency Chicago.</p>
<p>I had read some of his stuff a year or two earlier, tried to go to the Chicago course, and our crack clerical staff missed the deadline and it was full. So here we go! [...]]]></description>
			<content:encoded><![CDATA[<p>Karin from work and I attended a one-day course, <a href="http://www.edwardtufte.com/tufte/courses">Presenting Data and Information</a>, by Edward Tufte at the Hyatt Regency Chicago.</p>
<p>I had read some of his stuff a year or two earlier, tried to go to the Chicago course, and our crack clerical staff missed the deadline and it was full. So here we go! Long walk from Metra station to E Wacker Drive. But nice. Good weather. Nice walk.</p>
<p>Showed up, found our way thru the rabbit warren, and registered. We were issued a heavy cardboard box of 4 of ET&#8217;s books, and a homework assignment for reading before the class started. I grabbed a Starbucks from the lobby, and off we went.</p>
<p>Big room, lots of people, and not a lot of personal space &#8212; typical seminar. We plopped down and read. ET held &#8220;office hours&#8221; for autograph seekers and questions before, at lunchtime, and afterwards. When does the guy go potty?</p>
<p>The course itself was interesting. The guy is a great speaker, engaging and interesting. The time flew by. He showed 16th century books as examples of books and graphics as timeless art. Neat.</p>
<p>We did the fast 15-minute lunch at Houlihan&#8217;s next door. In and out quick, I had a nice chicken wrap, but by the time you walk there, eat, and return it was time to get going again. And the Starbuck&#8217;s went away in the PM.</p>
<p>Most of the items listed on the list of items to be covered were indeed covered. The final items were  <strong>design of information displays in public spaces</strong> and <strong>design of computer interfaces and manuals.</strong> These were the items we were interested in. We got some of the kiosk discussion, but I don&#8217;t think we got much of the design of interfaces and manuals. NOTE: I found a <a href="http://www.amazon.com/review/R1T8X27FZUCTKI/ref=cm_cr_rdp_perm">review</a> of Visual Explanations with references to Web development, but upon review, it is good stuff, but not a cookbook, more a philosophy.</p>
<blockquote><p>Tufte manages to get everything important about Web design onto pages 146 through 149 of this book: let the information become the interface, use text rather than icons, don&#8217;t let the Web site mimic the bureaucratic structure of the publisher. The most remarkable thing is that he wasn&#8217;t even writing about the Web!</p></blockquote>
<p>On the  way home, got some combo cheese-and-caramel corn from the <a href="http://www.garrettpopcorn.com/">Garrett&#8217;s</a> popcorn kiosk in the Metra station. Made a nice snack for us later.</p>
<p>Summary: Good course. Neat to see the 16th century books. If you read and have the books, probably a waste of time and money. If you don&#8217;t do technical presentations with lots of tables trying to prove things, (like us) perhaps limited use. But hearing &#8220;KISS&#8221; once more can be a good thing. And bashing PowerPoint is always fun.</p>
<ul>
<li>One-day course, 380 USD per person. </li>
<li>Includes: </li>
<ul>
<li><a href="http://www.amazon.com/Visual-Explanations-Quantities-Evidence-Narrative/dp/0961392126/ref=pd_bbs_sr_1?tag=saramccullaghme">Visual Explanations</a></li>
<li><a href="http://www.amazon.com/Envisioning-Information-Edward-R-Tufte/dp/0961392118?tag=sarahmccullaghme">Envisioning Information</a></li>
<li><a href="http://www.amazon.com/Visual-Display-Quantitative-Information-2nd/dp/0961392142?tag=sarahmmcullaghme">The Visual Display of Quantitative Information</a></li>
<li><a href="http://www.amazon.com/Beautiful-Evidence-Edward-R-Tufte/dp/0961392177?tag=saramccullaghme">Beautiful Evidence</a></li>
</ul>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://chwalisz.org/2008/06/26/course-edward-tufte-presenting-data-and-information/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gallery Remote</title>
		<link>http://chwalisz.org/2008/05/10/gallery-remote/</link>
		<comments>http://chwalisz.org/2008/05/10/gallery-remote/#comments</comments>
		<pubDate>Sat, 10 May 2008 22:12:35 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[gallery]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://chwalisz.org/?p=129</guid>
		<description><![CDATA[<p>So when I try to use the latest Gallery Remote 1.5 I get an error message:</p>
<p>Error: http post failed (http 404 not found)</p>
<p>Using Wireshark to sniff the request from GR: </p>
<p>POST /gallery_remote2.php HTTP/1.1
User-Agent: Gallery Remote 1.5
Accept-Encoding: deflate, gzip, x-gzip, compress, x-compress
Content-type: application/x-www-form-urlencoded
Content-length: 59</p>
<p>cmd=login&#38;protocol_version=2.3&#38;uname=XXX&#38;password=XX
</p>
<p>The response:
HTTP/1.1 404 Not Found</p>
<p>So it seems to be looking for a file [...]]]></description>
			<content:encoded><![CDATA[<p>So when I try to use the latest Gallery Remote 1.5 I get an error message:</p>
<p><code>Error: http post failed (http 404 not found)</code></p>
<p>Using Wireshark to sniff the request from GR: </p>
<p><code>POST /gallery_remote2.php HTTP/1.1<br />
User-Agent: Gallery Remote 1.5<br />
Accept-Encoding: deflate, gzip, x-gzip, compress, x-compress<br />
Content-type: application/x-www-form-urlencoded<br />
Content-length: 59</p>
<p>cmd=login&amp;protocol_version=2.3&amp;uname=XXX&amp;password=XX<br />
</code></p>
<p>The response:<br />
<code>HTTP/1.1 404 Not Found</code></p>
<p>So it seems to be looking for a file called gallery_remote2.php. I don&#8217;t have it.</p>
]]></content:encoded>
			<wfw:commentRss>http://chwalisz.org/2008/05/10/gallery-remote/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
