<?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>doing Lots.Of.Geeky.Stuff;</title>
	<atom:link href="http://www.timokosig.de/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.timokosig.de/blog</link>
	<description>me on programming, gadgets &#38; geek stuff in general</description>
	<lastBuildDate>Mon, 07 May 2012 10:44:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Removing &#8220;zombie-locks&#8221; from your SVN repository</title>
		<link>http://www.timokosig.de/blog/?p=39</link>
		<comments>http://www.timokosig.de/blog/?p=39#comments</comments>
		<pubDate>Mon, 10 Jan 2011 21:07:57 +0000</pubDate>
		<dc:creator>Timo</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[workaround]]></category>
		<category><![CDATA[zombie-locks]]></category>

		<guid isPermaLink="false">http://timokosig.wordpress.com/?p=39</guid>
		<description><![CDATA[Today I came across a persistent problem while trying to reintegrate a feature branch into the trunk of one of our software projects. The problem presented itself as an error message while trying to commit the trunk which had the &#8230; <a href="http://www.timokosig.de/blog/?p=39">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Today I came across a persistent problem while trying to reintegrate a feature branch into the trunk of one of our software projects.</p>
<p>The problem presented itself as an error message while trying to commit the trunk which had the branch merged into it. The error message read:</p>
<blockquote><p><em>svn: Cannot verify lock on path &#8216;/some_file_name&#8217;; no matching lock-token available</em></p></blockquote>
<p>This is quite an ordinary error message which basically says that SVN has failed to lock a file (most likely due to the fact that the file is locked somewhere else).</p>
<p>After fumbling around a little bit, locking all the files in trunk, trying again after getting a fresh working copy of the trunk &#8211; I was still stuck with the same error.</p>
<p>I sat back and after reading the error message again I noticed something strange: the file which was mentioned did actually not exist in the HEAD of our trunk anymore! It had been deleted back in last September.</p>
<p>Now, that&#8217;s something curious &#8211; how can my check-in fail because of a non-existent file being locked?</p>
<p>After googling around a bit I came across the solution: it&#8217;s a bug not a feature! <img src='http://www.timokosig.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><a href="http://subversion.tigris.org/ds/viewMessage.do?dsForumId=1065&amp;dsMessageId=2369399" target="_blank">This discussion</a> sums it pretty much up while also pointing us to the solution: a <a href="http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/remove-zombie-locks.py" target="_blank">python script</a> to remove the zombie locks from the repository.</p>
<p>Now, when you&#8217;re running SVN on a Windows OS like we do you&#8217;re in for a bit of a ride. I tried to install Python 2.7.1 and the SVN python bindings to make the script run but I just couldn&#8217;t. I ended up copying the repository to a USB thumb-drive and running the script on the repository back at home where I have a Ubuntu linux PC.</p>
<p>I would recommend you to do the same, it&#8217;s a lot easier than trying to make it work on Windows Server.</p>
<p>Installing Subversion and the python bindings is very easy in Ubuntu linux:</p>
<pre class="brush: bash; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">sudo apt-get install subversion python-subversion</pre>
<p>Now that you&#8217;ve installed Subversion and the bindings it&#8217;s easy as pie to get rid of those nasty &#8220;zombie-locks&#8221;:</p>
<pre class="brush: bash; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">python remove-zombie-locks.py /path/to/your/repository all</pre>
<p>Instead of specifying &#8220;all&#8221; on the command line you may also use the revision number up to which you&#8217;d like to remove &#8220;zombie-locks&#8221;.</p>
<p>That&#8217;s it, you&#8217;re done and the &#8220;zombie-locks&#8221; are gone!</p>
<p>Pay attention to these points and you should be fine:</p>
<ul>
<li>You need to stop your SVN server before performing any operations on your repository.</li>
<li>Make sure your linux computer runs the same major SVN version as your Windows Server, e.g. 1.6.x</li>
<li>If the script returns with an exception quoting a &#8220;FS Error&#8221; you&#8217;re most likely to have a version mismatch, see above</li>
<li>Make sure you&#8217;ve got a backup copy handy, just in case.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.timokosig.de/blog/?feed=rss2&#038;p=39</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scoped regions and navigation in Prism 4</title>
		<link>http://www.timokosig.de/blog/?p=29</link>
		<comments>http://www.timokosig.de/blog/?p=29#comments</comments>
		<pubDate>Thu, 23 Dec 2010 19:45:37 +0000</pubDate>
		<dc:creator>Timo</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Navigation]]></category>
		<category><![CDATA[Prism]]></category>
		<category><![CDATA[RegionManager]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.timokosig.de/blog/?p=29</guid>
		<description><![CDATA[I&#8217;ve recently started working with the Prism framework for building composite WPF applications and I have to say I&#8217;m quite impressed with what Microsoft has done there. Prism has made it very easy for us to partition our large-scale application &#8230; <a href="http://www.timokosig.de/blog/?p=29">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently started working with the <a title="Developer's Guide to Microsoft Prism" href="http://msdn.microsoft.com/en-us/library/gg406140.aspx" target="_blank">Prism framework</a> for building composite WPF applications and I have to say I&#8217;m quite impressed with what Microsoft has done there.</p>
<p>Prism has made it very easy for us to partition our large-scale application into reusable modules which are very self-reliant and still integrate tightly into the whole of the application &#8211; both in the business logic and the GUI layers.</p>
<p>Since the application we&#8217;re working on is quite complex and will offer a wealth of functionality which will be continuously added over time we need our approach to designing the application architecture to reflect these requirements.</p>
<p>When reading about the navigation capabilities of the Prism framework I thought that we would definitely need to implement something similar in our application.  I was quite glad to find that Microsoft had already created something so sophisticated which we could use.</p>
<p>The &#8220;Developer&#8217;s Guide to Prism&#8221; offers a <a href="http://msdn.microsoft.com/en-us/library/gg430861(v=PandP.40).aspx" target="_blank">chapter on navigation</a> and there is a <a href="http://blogs.msdn.com/b/kashiffl/archive/2010/10/04/prism-v4-region-navigation-pipeline.aspx" target="_blank">blog post</a> written by Karl Shifflett which provides a deeper insight into navigation in the Prism 4 framework.</p>
<p>Unfortunately I discovered that the Prism Navigation framework does not support locally scoped regions.</p>
<p>What does that mean?</p>
<p>(If &#8220;region&#8221; doesn&#8217;t mean anything to you, it&#8217;s time to read <a href="http://msdn.microsoft.com/en-us/library/ff921098(v=PandP.40).aspx" target="_blank">Chapter 7: Composing the User Interface</a> of the developer&#8217;s guide.)</p>
<p>Well, when using Prism&#8217;s <a href="http://msdn.microsoft.com/en-us/library/microsoft.practices.composite.presentation.regions.regionmanager.aspx" target="_blank">RegionManager</a> you have to make sure that there are no regions which bear the same name.</p>
<p>Now, if you create a View which has its own regions defined and you instantiate more than one instance of this View you will end up with more than one region with the same name.</p>
<p>Prism allows for this scenario by creating a local <a href="http://msdn.microsoft.com/en-us/library/microsoft.practices.composite.presentation.regions.regionmanager.aspx" target="_blank">RegionManager</a> when adding the View which contains regions to a (global) region.</p>
<p>Unfortunately the Prism Navigation framework does not yet support scoped regions.</p>
<p>I found a <a href="http://compositewpf.codeplex.com/Thread/View.aspx?ThreadId=236849" target="_blank">recent discussion</a> on the Prism forum on Codeplex where someone recommended adapting the source code of Prism&#8217;s <a href="http://msdn.microsoft.com/en-us/library/gg431556(v=PandP.38).aspx" target="_blank">RegionNavigationContentLoader</a> to the scenario of using scoped regions.</p>
<p>I have tried to do that but have failed so far to achieve a successful modification of Prism&#8217;s source.</p>
<p>Did anyone come across the same problem and have you found a solution? I&#8217;d love to hear any thoughts on the topic.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.timokosig.de/blog/?feed=rss2&#038;p=29</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>A StyleCop plugin for the Bamboo CI server</title>
		<link>http://www.timokosig.de/blog/?p=21</link>
		<comments>http://www.timokosig.de/blog/?p=21#comments</comments>
		<pubDate>Fri, 26 Nov 2010 13:25:24 +0000</pubDate>
		<dc:creator>Timo</dc:creator>
				<category><![CDATA[Bamboo CI server]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Bamboo]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[continous integration]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[StyleCop]]></category>

		<guid isPermaLink="false">http://www.timokosig.de/blog/?p=20</guid>
		<description><![CDATA[I&#8217;ve been using Atlassians&#8217; Bamboo CI server for quite a while now. While it integrates tightly into all the other great Atlassian products like JIRA, Confluence or Fisheye &#8211; I have (had) some grief with it after switching from Hudson: &#8230; <a href="http://www.timokosig.de/blog/?p=21">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using <a href="http://www.atlassian.com/software/bamboo/" target="_blank">Atlassians&#8217; Bamboo CI server</a> for quite a while now. While it integrates tightly into all the other great Atlassian products like JIRA, Confluence or Fisheye &#8211; I have (had) some grief with it after switching from <a href="https://hudson.dev.java.net/" target="_blank">Hudson</a>:</p>
<p>Bamboo is first and foremost a CI server for Java based projects. While it has been sporting support to build C# / .NET based projects for a while now, it has a lot less plugins for this platform.</p>
<p>Where I work we were avid fans of the <a href="http://wiki.hudson-ci.org/display/HUDSON/Violations" target="_blank">Violations plugin for Hudson</a>. It looks for data generated by static code analyzers such as <a href="http://pmd.sourceforge.net/" target="_blank">PMD</a> or <a href="http://checkstyle.sourceforge.net/" target="_blank">Checkstyle</a>, parses the files generated by these plugins and provides this information in a nice way on the build server&#8217;s website. The Violations plugin also supports C#/.NET tools such as <a href="http://code.msdn.microsoft.com/sourceanalysis" target="_blank">StyleCop</a> and <a href="http://msdn.microsoft.com/en-us/library/bb429476%28VS.80%29.aspx" target="_blank">FxCop</a>.</p>
<p>Since switching to Bamboo me and my colleagues found it more difficult to keep up our software quality standards which means no StyleCop and no FxCop errors/warnings in our production code! Luckily I could convince the team to make some time for me to develop a Bamboo plugin which parses StyleCop information.</p>
<p>So here it is for you to enjoy: <a href="https://plugins.atlassian.com/plugin/details/33125" target="_blank">download here</a></p>
<p>What the plugin does:</p>
<p>1. Look for all files defined by a search pattern, e.g. &#8220;build-reports***StyleCopViolations.xml&#8221; would find all xml files ending with StylecopViolations in all sub-directories below the &#8220;build-reports&#8221; directory.</p>
<p>2. Parse all found files, noting the total number of StyleCop violations</p>
<p>3. Add up all violations, calulate a delta to the last successful build</p>
<p>4. Present the information on a page in Bamboo&#8217;s web interface on a per-build basis</p>
<p>Throw in some color coding and you can instantly see which VS projects have how many StyleCop violations.</p>
<p>To achieve aforementioned result you will have to configure StyleCop to generate one XML file per VS project. I have added a target file for integrating StyleCop into your build script which does that.</p>
<p>You can call MsBuild from NAnt so that it uses this target file like this:</p>
<pre class="brush: xml; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">
&lt;msbuild project=&quot;${solution.file}&quot; target=&quot;ReBuild&quot; verbosity=&quot;Quiet&quot;&gt;
    &lt;property name=&quot;Configuration&quot; value=&quot;${solution.configuration}&quot; /&gt;
    &lt;property name=&quot;CustomAfterMicrosoftCommonTargets&quot; value=&quot;${path::combine(project.base.dir, global.stylecop.target)}&quot;/&gt;
    &lt;property name=&quot;StyleCopEnabled&quot; value=&quot;true&quot; /&gt;
&lt;/msbuild&gt;
</pre>
<p>For more information please refer to the <a href="https://bitbucket.org/timokosig/bamboo-stylecop-plugin/wiki/Home" target="_blank">wiki page</a> of the StyleCop plugin on BitBucket.org.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.timokosig.de/blog/?feed=rss2&#038;p=21</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A great read for everyone involved with creating software</title>
		<link>http://www.timokosig.de/blog/?p=9</link>
		<comments>http://www.timokosig.de/blog/?p=9#comments</comments>
		<pubDate>Tue, 09 Feb 2010 16:05:43 +0000</pubDate>
		<dc:creator>Timo</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[continous integration]]></category>
		<category><![CDATA[jobs]]></category>

		<guid isPermaLink="false">http://www.timokosig.de/blog/?p=9</guid>
		<description><![CDATA[I just stumbled across this article on the web: The Joel Test: 12 Steps to Better Code. I can&#8217;t believe it that it is almost 10 years old already! Having turned around the complete software development process at my current employer &#8230; <a href="http://www.timokosig.de/blog/?p=9">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I just stumbled across this article on the web: <a title="The Joel Test: 12 Steps to Better Code" href="http://www.joelonsoftware.com/articles/fog0000000043.html" target="_blank">The Joel Test: 12 Steps to Better Code</a>. I can&#8217;t believe it that it is almost 10 years old already!</p>
<p>Having turned around the complete software development process at my current employer during the last year most of these steps came natural to me when I though about what was necessary to create an environment where people can write effective code effectively.</p>
<p>Now that the daily grind has settled in a bit, things look good. Not as stellar as I imagined in the very beginnings but I guess everyone has to accept compromises. Even though I&#8217;m happy with the progress we&#8217;ve made &#8211; reading the 12 steps again brings back the feeling that although things are going well that we&#8217;re not yet at the end of this process of renewal.</p>
<p>I&#8217;m looking forward to the day when I can answer every single question with &#8216;yes&#8217;.</p>
<p>Every person involved in creating software, no matter if programmer, software architect or software development manager should know those 12 steps.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.timokosig.de/blog/?feed=rss2&#038;p=9</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fast User Switching (FUS) and shared AFP network volumes</title>
		<link>http://www.timokosig.de/blog/?p=5</link>
		<comments>http://www.timokosig.de/blog/?p=5#comments</comments>
		<pubDate>Mon, 08 Feb 2010 07:50:50 +0000</pubDate>
		<dc:creator>Timo</dc:creator>
				<category><![CDATA[OS X]]></category>
		<category><![CDATA[AFP]]></category>
		<category><![CDATA[FUS]]></category>
		<category><![CDATA[NAS]]></category>

		<guid isPermaLink="false">http://www.timokosig.de/blog/?p=5</guid>
		<description><![CDATA[I have just recently bought a Synology DiskStation DS209 to serve as a centralized storage for backups, shared files and our music collection. Since I and my girlfriend share using a trusty old PowerMac G5, we make use of Fast &#8230; <a href="http://www.timokosig.de/blog/?p=5">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I have just recently bought a Synology DiskStation <a title="DS209" href="http://www.synology.com/enu/products/DS209/index.php" target="_blank">DS209</a> to serve as a centralized storage for backups, shared files and our music collection.</p>
<p>Since I and my girlfriend share using a trusty old PowerMac G5, we make use of Fast User Switching (FUS) quite a lot. It is a really neat thing &#8211; and hey, it&#8217;s UNIX anyway so why shouldn&#8217;t we have multiple users being logged in to the same computer at the same time.</p>
<p>Here is the clincher: If you want to use a shared AFP network volume it&#8217;s all fine and dandy as long as you don&#8217;t use FUS. Once you use FUS and User1 mounts &#8216;music&#8217;, it is mounted as &#8216;/Volumes/music&#8217;. User2 then logs in &#8211; but can&#8217;t access that mounted volume! User2 can now mount that volume again, this time it gets mounted under /Volumes/music-1.</p>
<p>Now this is a major f*ck-up. The reason is quite simple to see. Just take iTunes for example. You want to have a shared iTunes library with all your actual music files residing on the AFP mount? iTunes saves the path to the music files like this: /Volumes/music/albums/&#8230; . This means as long as your volume &#8216;music&#8217; gets mounted under &#8216;music&#8217; no problem &#8211; but if the second user decides to mount it as well it won&#8217;t work anymore!</p>
<p><a title="Apple Support Forum" href="http://discussions.apple.com/thread.jspa?messageID=10771456" target="_blank">Here&#8217;s</a> a discussion in the official Apple support forum regarding the topic. Unfortunately no one has coughed up a working solution so far. Only a crude AppleScript is floating around but I&#8217;d like the implementation to be a bit more trustworthy.</p>
<p>I&#8217;ll keep you posted how this is getting along. I&#8217;m still all set for sharing files from a network drive AND using FUS.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.timokosig.de/blog/?feed=rss2&#038;p=5</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

