<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>subcommanderblog.wordpress.com</title>
	<atom:link href="http://subcommanderblog.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://subcommanderblog.wordpress.com</link>
	<description>Subcommander Development Blog</description>
	<lastBuildDate>Sun, 08 Nov 2009 17:44:01 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='subcommanderblog.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/6ea4f0a465f40b991a82bc88e21a8604?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>subcommanderblog.wordpress.com</title>
		<link>http://subcommanderblog.wordpress.com</link>
	</image>
			<item>
		<title>Extract Implementer</title>
		<link>http://subcommanderblog.wordpress.com/2009/11/08/extract-implementer/</link>
		<comments>http://subcommanderblog.wordpress.com/2009/11/08/extract-implementer/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 17:44:01 +0000</pubDate>
		<dc:creator>hauner</dc:creator>
				<category><![CDATA[subcommander]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://subcommanderblog.wordpress.com/?p=219</guid>
		<description><![CDATA[In my current work of tdd&#8217;ing any new subcommander code (clean code of course :-) I want to create some test code that leads me to a class that compares the old working copy status and new working copy status of a single directory to notify only items to the gui that have changed.
I hope [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=219&subd=subcommanderblog&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">In my current work of tdd&#8217;ing any new subcommander code (clean code of course :-) I want to create some test code that leads me to a class that compares the old working copy status and new working copy status of a single directory to notify only items to the gui that have changed.</p>
<p style="text-align:justify;">I hope to achieve a much smother and faster working copy view this way. The updates will be fed to a new <tt>QAbstractItemModel</tt> implementation that provides the data for the working copy view. Currently I have about 50 tests that exercise the item model implementation and its helper classes.<br />
I guess this is a ridiculous number of tests for a single interface implementation and a couple of helper classes!? It is not even fully implemented yet. I wonder if forcing any code line by test code is a little bit to much…<br />
I also wonder if there are tests I could remove because &#8220;their&#8221; code (that is the production code I wrote because of the test) is now hit by other more interesting tests.</p>
<p style="text-align:justify;">Back to wc (working copy) status. The wc status information of any single item is represented by a <tt>svn::WcStatus</tt> object. When I created the class a few years ago I didn&#8217;t want to have it a lot of setter methods. So I passed an <tt>svn_wc_status2_t*</tt> pointer to its constructor and it extracts all information from it. <tt>svn_wc_status2_t</tt> is struct from subversions api which contains all the status info.</p>
<pre class="brush: cpp;">
WcStatus (const sc::String&amp;, svn_wc_status2_t*);
</pre>
<p style="text-align:justify;">Great or better not great, this is bad for testing. I don&#8217;t want to setup an <tt>svn_wc_status2_t</tt> struct just to create a couple of <tt>WcStatus</tt> objects for testing. I need a <tt>WcStatus</tt> without it. Tdd&#8217;ing the new code has to wait. First I need to break some dependency.</p>
<p style="text-align:justify;">Typically you would do an <em>extract interface</em> here. Or even better, as I want to keep <tt>WcStatus</tt> as the interface name, it is used everywhere in the code, <em>extract implementer</em> (<a href="http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052">Working Effectivly with Legacy Code</a>).</p>
<p>This is easy and straightforward:</p>
<ul>
<li>copy <tt>WcStatus.h</tt> to <tt>WcStatusImpl.h</tt></li>
<li>move <tt>WcStatus.cpp</tt> to <tt>WcStatusImpl.cpp</tt></li>
<li>rename the class to <tt>WcStatusImpl</tt> in <tt>WcStatusImpl.h</tt> and <tt>cpp</tt></li>
<li><tt>#include</tt> and derive <tt>WcStatusImpl</tt> from <tt>WcStatus</tt></li>
<li>Remove the constructors and fields from <tt>WcStatus.h</tt></li>
</ul>
<p style="text-align:justify;">No problem, easily done even without ide support. At this point it compiles again but it does not link. There is one annoying step left. You have to make all methods pure virtual in the interface. It is a bit boring to add the <tt>virtual</tt> and <tt>= 0</tt> to 25 methods…</p>
<p>But with this rather small refactoring I have improved my code:</p>
<ul>
<li>There is now one dependency less in my old legacy code which allows me to implement <tt>WcStatus</tt> test doubles</li>
</ul>
<p>It is only a small improvement, but it is an improvement.. :-)</p>
Posted in subcommander Tagged: test <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/subcommanderblog.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/subcommanderblog.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/subcommanderblog.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/subcommanderblog.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/subcommanderblog.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/subcommanderblog.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/subcommanderblog.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/subcommanderblog.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/subcommanderblog.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/subcommanderblog.wordpress.com/219/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=219&subd=subcommanderblog&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://subcommanderblog.wordpress.com/2009/11/08/extract-implementer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b8275cd51c46ecd441233ec6ddd7b7db?s=96&#38;d=http%3A%2F%2Fa.wordpress.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">hauner</media:title>
		</media:content>
	</item>
		<item>
		<title>Subcommander 2.0.0 b5 (MacOSX)</title>
		<link>http://subcommanderblog.wordpress.com/2009/11/01/subcommander-2-0-0-b5-macosx/</link>
		<comments>http://subcommanderblog.wordpress.com/2009/11/01/subcommander-2-0-0-b5-macosx/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 16:05:22 +0000</pubDate>
		<dc:creator>hauner</dc:creator>
				<category><![CDATA[Releases]]></category>
		<category><![CDATA[subcommander]]></category>

		<guid isPermaLink="false">http://subcommanderblog.wordpress.com/?p=217</guid>
		<description><![CDATA[Hi,
I have uploaded b5 binaries for MacOSX. They are built against subversion 1.6.6.
The binaries are available at http://subcommander.tigris.org.
Posted in Releases, subcommander       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=217&subd=subcommanderblog&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hi,</p>
<p>I have uploaded b5 binaries for MacOSX. They are built against subversion 1.6.6.</p>
<p>The binaries are available at <a href="http://subcommander.tigris.org">http://subcommander.tigris.org</a>.</p>
Posted in Releases, subcommander  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/subcommanderblog.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/subcommanderblog.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/subcommanderblog.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/subcommanderblog.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/subcommanderblog.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/subcommanderblog.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/subcommanderblog.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/subcommanderblog.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/subcommanderblog.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/subcommanderblog.wordpress.com/217/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=217&subd=subcommanderblog&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://subcommanderblog.wordpress.com/2009/11/01/subcommander-2-0-0-b5-macosx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b8275cd51c46ecd441233ec6ddd7b7db?s=96&#38;d=http%3A%2F%2Fa.wordpress.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">hauner</media:title>
		</media:content>
	</item>
		<item>
		<title>Subcommander 2.0.0 b5 (Win32) &#8211; fixed</title>
		<link>http://subcommanderblog.wordpress.com/2009/10/13/subcommander-2-0-0-b5-win32-fixed/</link>
		<comments>http://subcommanderblog.wordpress.com/2009/10/13/subcommander-2-0-0-b5-win32-fixed/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 21:09:37 +0000</pubDate>
		<dc:creator>hauner</dc:creator>
				<category><![CDATA[Releases]]></category>
		<category><![CDATA[subcommander]]></category>

		<guid isPermaLink="false">http://subcommanderblog.wordpress.com/?p=215</guid>
		<description><![CDATA[Hi,
I have updated the  b5 Windows Installer to fix the startup problems with the &#8220;The application failed to initialize properly (0xc0150002)&#8221; error message.
Unfortunately my binaries were linked against the release AND the debug run time. Which is a really bad idea. 
The new installer is online at http://subcommander.tigris.org.
Thanks for reporting the startup issue :-)
Posted [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=215&subd=subcommanderblog&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hi,</p>
<p>I have updated the  b5 Windows Installer to fix the startup problems with the &#8220;The application failed to initialize properly (0xc0150002)&#8221; error message.</p>
<p>Unfortunately my binaries were linked against the release AND the debug run time. Which is a really bad idea. </p>
<p>The new installer is online at <a href="http://subcommander.tigris.org">http://subcommander.tigris.org</a>.</p>
<p>Thanks for reporting the startup issue :-)</p>
Posted in Releases, subcommander  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/subcommanderblog.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/subcommanderblog.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/subcommanderblog.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/subcommanderblog.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/subcommanderblog.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/subcommanderblog.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/subcommanderblog.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/subcommanderblog.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/subcommanderblog.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/subcommanderblog.wordpress.com/215/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=215&subd=subcommanderblog&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://subcommanderblog.wordpress.com/2009/10/13/subcommander-2-0-0-b5-win32-fixed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b8275cd51c46ecd441233ec6ddd7b7db?s=96&#38;d=http%3A%2F%2Fa.wordpress.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">hauner</media:title>
		</media:content>
	</item>
		<item>
		<title>Subcommander 2.0.0 b5 patch 1 (Source)</title>
		<link>http://subcommanderblog.wordpress.com/2009/09/28/subcommander-2-0-0-b5-patch-1-source/</link>
		<comments>http://subcommanderblog.wordpress.com/2009/09/28/subcommander-2-0-0-b5-patch-1-source/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 21:57:48 +0000</pubDate>
		<dc:creator>hauner</dc:creator>
				<category><![CDATA[Releases]]></category>
		<category><![CDATA[subcommander]]></category>

		<guid isPermaLink="false">http://subcommanderblog.wordpress.com/?p=213</guid>
		<description><![CDATA[Hi,
I have updated the the source archive for b5 to b5 patch 1 (version numbering gets crazy now.. :-). It fixes a couple of build issues for gcc newer than 4.0. I added a few additional #includes and fixed an #include case error.
It is online at http://subcommander.tigris.org.
Thanks to everyone for reporting the build issues :-)
Posted [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=213&subd=subcommanderblog&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hi,</p>
<p>I have updated the the source archive for b5 to b5 patch 1 (version numbering gets crazy now.. :-). It fixes a couple of build issues for gcc newer than 4.0. I added a few additional #includes and fixed an #include case error.</p>
<p>It is online at <a href="http://subcommander.tigris.org">http://subcommander.tigris.org</a>.</p>
<p>Thanks to everyone for reporting the build issues :-)</p>
Posted in Releases, subcommander  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/subcommanderblog.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/subcommanderblog.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/subcommanderblog.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/subcommanderblog.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/subcommanderblog.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/subcommanderblog.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/subcommanderblog.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/subcommanderblog.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/subcommanderblog.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/subcommanderblog.wordpress.com/213/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=213&subd=subcommanderblog&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://subcommanderblog.wordpress.com/2009/09/28/subcommander-2-0-0-b5-patch-1-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b8275cd51c46ecd441233ec6ddd7b7db?s=96&#38;d=http%3A%2F%2Fa.wordpress.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">hauner</media:title>
		</media:content>
	</item>
		<item>
		<title>Subcommander 2.0.0 b5 (Source)</title>
		<link>http://subcommanderblog.wordpress.com/2009/09/20/subcommander-2-0-0-b5-source/</link>
		<comments>http://subcommanderblog.wordpress.com/2009/09/20/subcommander-2-0-0-b5-source/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 09:51:50 +0000</pubDate>
		<dc:creator>hauner</dc:creator>
				<category><![CDATA[Releases]]></category>
		<category><![CDATA[subcommander]]></category>

		<guid isPermaLink="false">http://subcommanderblog.wordpress.com/?p=211</guid>
		<description><![CDATA[Hi,
the source archive for b5 is now online at http://subcommander.tigris.org.
Posted in Releases, subcommander       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=211&subd=subcommanderblog&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hi,</p>
<p>the source archive for b5 is now online at <a href="http://subcommander.tigris.org">http://subcommander.tigris.org</a>.</p>
Posted in Releases, subcommander  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/subcommanderblog.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/subcommanderblog.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/subcommanderblog.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/subcommanderblog.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/subcommanderblog.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/subcommanderblog.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/subcommanderblog.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/subcommanderblog.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/subcommanderblog.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/subcommanderblog.wordpress.com/211/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=211&subd=subcommanderblog&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://subcommanderblog.wordpress.com/2009/09/20/subcommander-2-0-0-b5-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b8275cd51c46ecd441233ec6ddd7b7db?s=96&#38;d=http%3A%2F%2Fa.wordpress.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">hauner</media:title>
		</media:content>
	</item>
		<item>
		<title>Subcommander 2.0.0 b5 (Win32)</title>
		<link>http://subcommanderblog.wordpress.com/2009/09/13/subcommander-2-0-0-b5-win32/</link>
		<comments>http://subcommanderblog.wordpress.com/2009/09/13/subcommander-2-0-0-b5-win32/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 11:59:57 +0000</pubDate>
		<dc:creator>hauner</dc:creator>
				<category><![CDATA[Releases]]></category>
		<category><![CDATA[subcommander]]></category>

		<guid isPermaLink="false">http://subcommanderblog.wordpress.com/?p=208</guid>
		<description><![CDATA[Hi,
finally a new Subcommander beta (b5) release is available :-) Currently only for Windows built against subversion 1.6.5. The source archive and MacOSX binaries will follow.
Download it from http://subcommander.tigris.org
Posted in Releases, subcommander       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=208&subd=subcommanderblog&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hi,</p>
<p>finally a new Subcommander beta (b5) release is available :-) Currently only for Windows built against subversion 1.6.5. The source archive and MacOSX binaries will follow.</p>
<p>Download it from <a href="http://subcommander.tigris.org">http://subcommander.tigris.org</a></p>
Posted in Releases, subcommander  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/subcommanderblog.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/subcommanderblog.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/subcommanderblog.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/subcommanderblog.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/subcommanderblog.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/subcommanderblog.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/subcommanderblog.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/subcommanderblog.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/subcommanderblog.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/subcommanderblog.wordpress.com/208/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=208&subd=subcommanderblog&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://subcommanderblog.wordpress.com/2009/09/13/subcommander-2-0-0-b5-win32/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b8275cd51c46ecd441233ec6ddd7b7db?s=96&#38;d=http%3A%2F%2Fa.wordpress.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">hauner</media:title>
		</media:content>
	</item>
		<item>
		<title>Subcommander progress</title>
		<link>http://subcommanderblog.wordpress.com/2009/09/03/subcommander-progress/</link>
		<comments>http://subcommanderblog.wordpress.com/2009/09/03/subcommander-progress/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 21:21:23 +0000</pubDate>
		<dc:creator>hauner</dc:creator>
				<category><![CDATA[subcommander]]></category>

		<guid isPermaLink="false">http://subcommanderblog.wordpress.com/?p=199</guid>
		<description><![CDATA[Surprisingly there is a little bit progress.. :-)
I&#8217;m temporarily switching back to Qt 4.4 until I finish my new custom QAbstractItemModel  code. That allows me to create a new beta (5) based on subversion 1.6.5.
It won&#8217;t include all things planned for b5 but there are still a few improvements. I will play with it a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=199&subd=subcommanderblog&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Surprisingly there is a little bit progress.. :-)</p>
<p>I&#8217;m temporarily switching back to Qt 4.4 until I finish my new custom QAbstractItemModel  code. That allows me to create a new beta (5) based on subversion 1.6.5.</p>
<p>It won&#8217;t include all things planned for b5 but there are still a few improvements. I will play with it a couple of days at work and hope to release it next week.</p>
<p>I also started to play with the latest mingw. It is not as easy as I would like to build all the libraries Subcommander depends on.  So far I can build apr, apr-util and openssl. openssl worked out of the box. apr &amp; apr-util needed a few libtool tweaks. So there is still some work ahead to build Subcommander on Windows with gcc and friends.</p>
<p>But I think it is worth the effort. My goal is to use the configure/make build on all platforms so I have to maintain only a single build environment.</p>
<p>I can then also drop Visual Studio on Windows and move to QtCreator as IDE on  MacOSX and Windows. After playing with it a couple of days on the subversion code I&#8217;m quite satisfied with it.</p>
<p>I like it better than XCode or Visual Studio (with the exception of the debugger) although it is still quite simple. It can switch very reliable between declaration and implementation. Something where Visual Studio is really weak&#8230; ;)</p>
Posted in subcommander  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/subcommanderblog.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/subcommanderblog.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/subcommanderblog.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/subcommanderblog.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/subcommanderblog.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/subcommanderblog.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/subcommanderblog.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/subcommanderblog.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/subcommanderblog.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/subcommanderblog.wordpress.com/199/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=199&subd=subcommanderblog&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://subcommanderblog.wordpress.com/2009/09/03/subcommander-progress/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b8275cd51c46ecd441233ec6ddd7b7db?s=96&#38;d=http%3A%2F%2Fa.wordpress.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">hauner</media:title>
		</media:content>
	</item>
		<item>
		<title>Subcommander Status..</title>
		<link>http://subcommanderblog.wordpress.com/2009/08/02/subcommander-status/</link>
		<comments>http://subcommanderblog.wordpress.com/2009/08/02/subcommander-status/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 13:52:58 +0000</pubDate>
		<dc:creator>hauner</dc:creator>
				<category><![CDATA[subcommander]]></category>
		<category><![CDATA[Qt4]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://subcommanderblog.wordpress.com/?p=197</guid>
		<description><![CDATA[Hi,
It looks like I&#8217;m currently (currently!?) losing a bit track of things in Subcommander development&#8230; :-(
I tried to upgrade from Qt 4.4 to Qt 4.5. Bam, a couple of (my few) tests for the custom QAbstractItemModel (which is the base for the working copy display) don&#8217;t run anymore. The working copy view now crashes randomly. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=197&subd=subcommanderblog&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hi,</p>
<p style="text-align:justify;">It looks like I&#8217;m <span>currently (currently!?) losing a bit track of things in Subcommander development&#8230; :-(</span></p>
<p style="text-align:justify;"><span>I tried to upgrade from Qt 4.4 to Qt 4.5. Bam, a couple of (my few) tests for the custom QAbstractItemModel (which is the base for the working copy display) don&#8217;t run anymore. The working copy view</span> now crashes randomly. Great. Unfortunately I have so few test for the model, that I&#8217;m sure I will break other things trying to fix the broken tests. I&#8217;ve already wasted a lot of time debugging that code in the past with all the QModelIndex objects you can&#8217;t look into. I don&#8217;t want to waste more time on this&#8230;.</p>
<p style="text-align:justify;">So I took another step back (moving the proxy model into the TODO list again) and started another round on the QAbstractItemModel stuff. I&#8217;m now trying to TDD the model into existence. This is going a bit slow because I &#8216;m still a beginner at TDD. But I have about 20 tests around the new custom model implementation now and slowly it begins to do something.. :)</p>
<p style="text-align:justify;">So far I always used cppunit to write tests. I think I&#8217;m going to drop it in favor of gtest/gmock. Allthough gmock does work together with cppunit, it is simpler and faster for me to create new tests with gtest instead of cppunit. With cppunit I always had a header and a implementation file. With gtest I just need an implementation file. This is a <strong>lot</strong> easier. Maybe this would work with cppunit too, but since gmock includes gtest anyway I have one dependency less to care for (just gmock instead of cppunit &amp; gmock).</p>
<p style="text-align:justify;">Another big issue that keeps me from making real progress is the maintainability of 3 build environments. Another time waster. I&#8217;m considering to move to qmake as the build environment and to drop the hand made configure/XCode/Visual Studio builds.</p>
<p style="text-align:justify;">I also wonder if it wouldn&#8217;t be a lot easier to drop Visual Studio completely and use MinGW to build Subcommander on Windows. That way I would more or less use the same build environment (gcc and friends) on all the three platforms (Mac/Linux/Windows). This should improve maintainability as well.</p>
<p style="text-align:justify;">So I&#8217;m still working on Subcommander, but I can&#8217;t tell when there will be a new release&#8230; but maybe I&#8217;m the only Subcommander  user anyway&#8230; ;)</p>
Posted in subcommander Tagged: Qt4, test <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/subcommanderblog.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/subcommanderblog.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/subcommanderblog.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/subcommanderblog.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/subcommanderblog.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/subcommanderblog.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/subcommanderblog.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/subcommanderblog.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/subcommanderblog.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/subcommanderblog.wordpress.com/197/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=197&subd=subcommanderblog&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://subcommanderblog.wordpress.com/2009/08/02/subcommander-status/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b8275cd51c46ecd441233ec6ddd7b7db?s=96&#38;d=http%3A%2F%2Fa.wordpress.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">hauner</media:title>
		</media:content>
	</item>
		<item>
		<title>creating a custom QAbstractProxyModel &#8211; Google Mock</title>
		<link>http://subcommanderblog.wordpress.com/2009/06/03/creating-a-custom-qabstractproxymodel-google-mock/</link>
		<comments>http://subcommanderblog.wordpress.com/2009/06/03/creating-a-custom-qabstractproxymodel-google-mock/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 20:42:45 +0000</pubDate>
		<dc:creator>hauner</dc:creator>
				<category><![CDATA[subcommander]]></category>
		<category><![CDATA[mock]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://subcommanderblog.wordpress.com/?p=185</guid>
		<description><![CDATA[Part I redone, getting started using Google Mock.
A while ago I started to build a custom QAbstractProxyModel for subcommanders working copy view in creating a custom QAbstractProxyModel.
A few weeks ago I red about Google Mock, a mock framework for C++ and I planned to try it. There is a nice, simple and short introduction: Google [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=185&subd=subcommanderblog&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="clear:both;"><strong>Part I redone, getting started using <a href="http://code.google.com/p/googlemock/">Google Mock</a>.</strong></p>
<p style="text-align:justify;">A while ago I started to build a custom <tt>QAbstractProxyModel</tt> for subcommanders working copy view in <a href="2009/02/08/creating-a-custom-qabstractproxymodel/"><em>creating a custom QAbstractProxyModel</em></a>.</p>
<p style="text-align:justify;">A few weeks ago I red about <a href="http://code.google.com/p/googlemock/">Google Mock</a>, a mock framework for C++ and I planned to try it. There is a nice, simple and short introduction: <a href="http://code.google.com/p/googlemock/wiki/ForDummies">Google Mock for Dummies</a>.</p>
<p style="text-align:justify;">In the last <a><em>creating a custom QAbstractProxyModel</em></a> article I created a simple mock from scratch that is simple enough for a first try. So the goal is to simplify that. If it doesn&#8217;t simplify that code, why would I want to use a mock framework? :)</p>
<p style="text-align:justify;">Here is the original hand made mock class and test. Constructor and destructor connect and disconnect the signals from <tt>src</tt> (that is the proxy model) to the slots and verify is used to verify the results.</p>
<pre class="brush: cpp;">
class SignalTarget : public QObject
{
  Q_OBJECT;

public:
  SignalTarget( QObject* src );
  ~SignalTarget();

  virtual void verify();

public slots:
  void modelAboutToBeReset();
  void modelReset();

private:
  QObject* _src;

protected:
  int  _hitModelAboutToBeReset;
  int  _hitModelReset;
};
</pre>
<p style="text-align:justify;">To check that the tested class (the proxy model) properly emits the signals, I subclassed <tt>SignalTarget</tt> to <tt>ASSERTS</tt> that the slots were called as many times as they should. Here is the test code:</p>
<pre class="brush: cpp;">
void WcViewItemProxyModelTest::emitsModelResetSignals()
{
  class Target : public SignalTarget {
  public:
    Target( QObject* src ) : SignalTarget(src) {
    }

    void verify() {
      CPPUNIT_ASSERT_EQUAL( 1, _hitModelAboutToBeReset );
      CPPUNIT_ASSERT_EQUAL( 1, _hitModelReset );
    }
  };

  Target target(_proxy);
  _proxy-&gt;reset();
  target.verify();
}
</pre>
<p style="text-align:justify;">Using <a href="http://code.google.com/p/googlemock/">Google Mock</a> this gets a bit simpler. The basic mock class get a bit shorter because I no longer need the <tt>verify</tt> method and the <tt>int</tt> counters. Google Mock will take care of it:</p>
<pre class="brush: cpp;">
class SignalTarget : public QObject
{
  Q_OBJECT; 

public:
  SignalTarget( QObject* src );
  ~SignalTarget(); 

public slots:
  void modelAboutToBeReset();
  void modelReset(); 

private:
  QObject* _src;
};
</pre>
<p style="text-align:justify;">To a create the actual mock class I derive a new class from <tt>SignalTarget</tt> and tell it to mock the <tt>...Reset()</tt> methods by using the <tt>MOCK_METHODx</tt> macro:</p>
<pre class="brush: cpp;">
class MockSignal : SignalTarget
{
public:
  MockSignal(QObject* target) : SignalTarget(target) {
  }

  MOCK_METHOD0(modelAboutToBeReset, void());
  MOCK_METHOD0(modelReset, void());
};
</pre>
<p style="text-align:justify;">Finally I create the mock object in the test and set the <em>expectations</em> (the methods should be called 1 time) by using the <tt>EXPECT_CALL</tt> macro and calling <tt>Times</tt> with the expected number of calls. This is a lot simpler than creating the mock class in the original code to set up the expectations in the <tt>verify()</tt> method.</p>
<pre class="brush: cpp;">
void WcViewItemProxyModelTest::emitsModelResetSignals()
{
  MockSignal mtarget(_proxy);
  EXPECT_CALL(mtarget, modelAboutToBeReset()).Times(1);
  EXPECT_CALL(mtarget, modelReset()).Times(1);

  _model-&gt;reset();
}
</pre>
<p style="text-align:justify;">All in all it was quite easy to get started with <a href="http://code.google.com/p/googlemock/">Google Mock</a>. Although I used it only on a very simple example I think it is a nice help for writing tests. If it fits the thing you want to test it can reduce the <em>code noise</em> required to set up the test.</p>
<p style="text-align:justify;">If you write tests in c++, check it out.. :-)</p>
Posted in subcommander Tagged: mock, test <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/subcommanderblog.wordpress.com/185/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/subcommanderblog.wordpress.com/185/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/subcommanderblog.wordpress.com/185/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/subcommanderblog.wordpress.com/185/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/subcommanderblog.wordpress.com/185/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/subcommanderblog.wordpress.com/185/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/subcommanderblog.wordpress.com/185/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/subcommanderblog.wordpress.com/185/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/subcommanderblog.wordpress.com/185/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/subcommanderblog.wordpress.com/185/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=185&subd=subcommanderblog&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://subcommanderblog.wordpress.com/2009/06/03/creating-a-custom-qabstractproxymodel-google-mock/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b8275cd51c46ecd441233ec6ddd7b7db?s=96&#38;d=http%3A%2F%2Fa.wordpress.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">hauner</media:title>
		</media:content>
	</item>
		<item>
		<title>Building Qt on Windows&#8230;</title>
		<link>http://subcommanderblog.wordpress.com/2009/05/27/building-qt-on-windows/</link>
		<comments>http://subcommanderblog.wordpress.com/2009/05/27/building-qt-on-windows/#comments</comments>
		<pubDate>Wed, 27 May 2009 19:09:22 +0000</pubDate>
		<dc:creator>hauner</dc:creator>
				<category><![CDATA[subcommander]]></category>
		<category><![CDATA[Qt4]]></category>

		<guid isPermaLink="false">http://subcommanderblog.wordpress.com/?p=183</guid>
		<description><![CDATA[Building Qt (4.5.1) on Windows in a Fusion virtual machine with limited disk space is an adventure&#8230; :)  The build eats endless Gigabytes. Unfortunately the configure.exe is a bit limited and doesn&#8217;t allow to disable building of the demos and the examples.
After getting some hints and ideas by googling I did the following steps:

I did [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=183&subd=subcommanderblog&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Building Qt (4.5.1) on Windows in a Fusion virtual machine with limited disk space is an adventure&#8230; :)  The build eats endless Gigabytes. Unfortunately the <tt>configure.exe</tt> is a bit limited and doesn&#8217;t allow to disable building of the demos and the examples.</p>
<p style="text-align:justify;">After getting some hints and ideas by googling I did the following steps:</p>
<ol>
<li>I did run <tt>configure.exe</tt> with the <tt>-fast</tt> option. According to <tt>configure.exe -help</tt>, <tt>-fast</tt> only creates Makefiles for library and subdirectory targets.</li>
<li>Then I entered the <tt>src</tt> directory (that is the source directory for the libraries) and called <tt>nmake</tt>. That way qt builds only the libraries without the demos or examples.</li>
<li>After  the library build finished, I called <tt>nmake clean</tt> in the <tt>src</tt> directory. <tt>make clean</tt> removes all temporary stuff in the <tt>src</tt> directory (like the obj files) but NOT the finished libraries and binaries from the top level bin and lib directory.</li>
</ol>
<p style="text-align:justify;">If you don&#8217;t plan to rebuild the libraries the third step  frees up about 5 Gigabytes(!) of disk space. I wouldn&#8217;t recommend cleaning the src directory if rebuilding is required though. Building the libraries takes several hours&#8230;</p>
Posted in subcommander Tagged: Qt4 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/subcommanderblog.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/subcommanderblog.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/subcommanderblog.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/subcommanderblog.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/subcommanderblog.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/subcommanderblog.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/subcommanderblog.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/subcommanderblog.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/subcommanderblog.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/subcommanderblog.wordpress.com/183/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=subcommanderblog.wordpress.com&blog=5978721&post=183&subd=subcommanderblog&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://subcommanderblog.wordpress.com/2009/05/27/building-qt-on-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b8275cd51c46ecd441233ec6ddd7b7db?s=96&#38;d=http%3A%2F%2Fa.wordpress.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">hauner</media:title>
		</media:content>
	</item>
	</channel>
</rss>