<?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>blog.strug.de</title>
	<atom:link href="http://blog.strug.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.strug.de</link>
	<description>Leif Hanack</description>
	<lastBuildDate>Mon, 24 Oct 2011 19:04:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Homebrew without Xcode &#8211; save 1,5 GB!</title>
		<link>http://blog.strug.de/2011/09/homebrew-without-xcode-save-15-gb/</link>
		<comments>http://blog.strug.de/2011/09/homebrew-without-xcode-save-15-gb/#comments</comments>
		<pubDate>Sat, 10 Sep 2011 11:57:07 +0000</pubDate>
		<dc:creator>leif.hanack</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[mac-osx]]></category>
		<category><![CDATA[bestpractices]]></category>
		<category><![CDATA[brew]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[homebrew]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[package-manager]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://blog.strug.de/?p=808</guid>
		<description><![CDATA[Homebrew is my favorite package manager. If you installed Xcode just for brew than this post might be interesting for you. Kenneth Reitz created a GCC Installer for OSX without Xcode! Thank you. This package is about 500 MB. Compared to Xcode you save at least 1,5 GB on your SSD. So let&#8217;s go to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.strug.de/2010/06/homebrew-a-package-manager-for-mac/">Homebrew</a> is my favorite package manager. If you installed <a href="http://developer.apple.com/xcode/">Xcode</a> just for brew than this post might be interesting for you.</p>
<p>Kenneth Reitz created a <a href="https://github.com/kennethreitz/osx-gcc-installer">GCC Installer for OSX without Xcode</a>! Thank you. This package is about 500 MB. Compared to Xcode <strong>you save at least 1,5 GB</strong> on your SSD.</p>
<p>So let&#8217;s go to work:</p>
<ul>
<li>Remove Xcode</li>
<p>[code]sudo /Developer/Library/uninstall-devtools --mode=all[/code]<br />
This will delete Xcode. For more details see <a href="http://macdevelopertips.com/xcode/how-to-uninstall-xcode.html">John&#8217;s post</a></p>
<li>Download and install GCC for Mac without Xcode</li>
<p>Currently 10.6 and 10.7 packages are available at <a href="https://github.com/kennethreitz/osx-gcc-installer/downloads">https://github.com/kennethreitz/osx-gcc-installer/downloads</a></p>
<li>Install brew</li>
<pre>/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"</pre>
<li>You&#8217;re done</li>
<p>You can verify your success when you receive meaningful version by calling <code>gcc --version</code> and <code>brew --version</code>
</ul>
<p><strong>Caution:</strong><br />
You don&#8217;t need Xcode for formulas like gradle, groovy, maven, tomcat etc. Nevertheless some formulas will require Xcode!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strug.de/2011/09/homebrew-without-xcode-save-15-gb/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress Installation Ends With Empty HTML Body &#8211; Check open_basedir</title>
		<link>http://blog.strug.de/2011/05/wordpress-installation-ends-with-empty-html-body-check-open_basedir/</link>
		<comments>http://blog.strug.de/2011/05/wordpress-installation-ends-with-empty-html-body-check-open_basedir/#comments</comments>
		<pubDate>Thu, 19 May 2011 21:22:58 +0000</pubDate>
		<dc:creator>leif.hanack</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[open_basedir]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.strug.de/?p=800</guid>
		<description><![CDATA[I stumbled while installing a second WordPress blog. Everything seems to be fine: DB, PHP (first blog works), apache.conf, .. Nevertheless I received empty HTML bodies when calling a php page. So I started debugging and finally found the problem inside my php.ini. In the moment I saw that line I remembered that I changed [...]]]></description>
			<content:encoded><![CDATA[<p>I stumbled while installing a second WordPress blog. Everything seems to be fine: DB, PHP (first blog works), apache.conf, .. Nevertheless I received empty HTML bodies when calling a php page. </p>
<p>So I started debugging and finally found the problem inside my php.ini. In the moment I saw that line I remembered that I changed it to secure my server a bit <img src='http://blog.strug.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  </p>
<p><code><br />
open_basedir = /path-to-first-wordpress-dir/:/path-to-second-wordpress-dir/:/tmp/<br />
</code></p>
<p>After adding the path of my second WordPress installation everything was fine. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strug.de/2011/05/wordpress-installation-ends-with-empty-html-body-check-open_basedir/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AppleScript To Test If Application Is Not Running And How That Helps To Switch MarcoPolo Contexts</title>
		<link>http://blog.strug.de/2011/05/applescript-to-test-if-application-is-not-running-and-how-that-helps-to-switch-marcopolo-contexts/</link>
		<comments>http://blog.strug.de/2011/05/applescript-to-test-if-application-is-not-running-and-how-that-helps-to-switch-marcopolo-contexts/#comments</comments>
		<pubDate>Thu, 12 May 2011 20:49:56 +0000</pubDate>
		<dc:creator>leif.hanack</dc:creator>
				<category><![CDATA[mac-osx]]></category>
		<category><![CDATA[applescript]]></category>
		<category><![CDATA[bestpractices]]></category>
		<category><![CDATA[marcopolo]]></category>
		<category><![CDATA[networkconnect]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[vpn]]></category>

		<guid isPermaLink="false">http://blog.strug.de/?p=774</guid>
		<description><![CDATA[I&#8217;m looking for a way to identify if an application on my Mac stopped. I couldn&#8217;t find anything, so it was time to write my first AppleScript: set network_connect_is_running to is_running(&#34;Network Connect&#34;) if network_connect_is_running then repeat until network_connect_is_running is false delay 10 -- wait some seconds set network_connect_is_running to is_running(&#34;Network Connect&#34;) end repeat -- application [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m looking for a way to identify if an application on my Mac stopped. I couldn&#8217;t find anything, so it was time to write my first AppleScript:</p>
<pre class="brush: applescript">
set network_connect_is_running to is_running(&quot;Network Connect&quot;)

if network_connect_is_running then
	repeat until network_connect_is_running is false
		delay 10 -- wait some seconds
		set network_connect_is_running to is_running(&quot;Network Connect&quot;)
	end repeat
	-- application stopped, so run a dummy app so that marcopolo can switch context
	tell application &quot;NetworkConnectStopped&quot; to activate
end if

on is_running(appName)
	tell application &quot;System Events&quot; to (name of processes) contains appName
end is_running
</pre>
<p>The code is quiet simple. Line 12-14 defines a function which checks if application appName is running. Line 01 calls this function and checks if the application &#8220;Network Connect&#8221; is running. The result is stored in the variable network_connect_is_running. Only if &#8220;Network Connect&#8221; is running (line 03) I want to start my listener. The listener (loop line 04-07) checks every 10 seconds if the application is still running. If not, the loop ends and I can start my trigger application &#8220;NetworkConnectStopped&#8221;.</p>
<p><strong>So what is this all for? </strong></p>
<p>I use <a href="http://www.symonds.id.au/marcopolo/">MarcoPolo</a> to switch my network connections. I use three contexts:<br />
- home<br />
- homeOffice (VPN)<br />
- work<br />
The contexts differ in things like proxy, printer, mounts. </p>
<p><strong>The problem: MarcoPolo has no rule &#8220;Not Running Applications&#8221;</strong></p>
<p>When I&#8217;m at home and start my VPN (Network Connect) I use this application to switch automatically to context &#8220;homeOffice&#8221;. When I finished my home office session and quit &#8220;Network Connect&#8221; I want to switch automatically to context &#8220;home&#8221; again. This can not be done with MarcoPolo so far. <strong>Now the above script comes into play</strong>. I stored this script as an application and start this listener when switching to context &#8220;homeOffice&#8221;. When I quit &#8220;Network Connect&#8221;, my listener recognizes this and starts the application &#8220;NetworkConnectStopped&#8221;. This application is created with the Automator and contains nothing but a &#8220;Pause&#8221; of 6 seconds. One more than the default MarcoPolo rule update interval. The last step is to add a rule &#8220;Running Application&#8221; to MarcoPolo which switches to context &#8220;home&#8221; when application &#8220;NetworkConnectStopped&#8221; is running.</p>
<p>Here are my MarcoPolo rules:<br />
<a href="http://blog.strug.de/wp-content/uploads/marcopolo-rules.png"><img src="http://blog.strug.de/wp-content/uploads/marcopolo-rules.png" alt="" title="marcopolo-rules" width="600" height="290" class="alignnone size-full wp-image-788" /></a></p>
<p>And here are my actions:</p>
<p><a href="http://blog.strug.de/wp-content/uploads/marcopolo-actions.png"><img src="http://blog.strug.de/wp-content/uploads/marcopolo-actions.png" alt="" title="marcopolo-actions" width="600" height="417" class="alignnone size-full wp-image-794" /></a></p>
<p>If you have suggestions or need more details feel free to comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strug.de/2011/05/applescript-to-test-if-application-is-not-running-and-how-that-helps-to-switch-marcopolo-contexts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My teammates blog value is 26.061,85 Euro :)</title>
		<link>http://blog.strug.de/2011/05/my-teammates-blog-value-is-26-06185-euro/</link>
		<comments>http://blog.strug.de/2011/05/my-teammates-blog-value-is-26-06185-euro/#comments</comments>
		<pubDate>Sun, 01 May 2011 18:42:42 +0000</pubDate>
		<dc:creator>leif.hanack</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[stats]]></category>

		<guid isPermaLink="false">http://blog.strug.de/?p=761</guid>
		<description><![CDATA[Some of these stats that nobody needs. I got pointed to bizzinformation.de. This site shows you some stats and aggregates it to a money value. Would be interesting if they could provide potential buyers as well:) Here are the blogs of my team: gesellix.de 13.292,07 maxheapsize.com 9.340,58 strug.de 1.944,40 passion.forco.de 820,64 semerusummit.de 664,16 Which value [...]]]></description>
			<content:encoded><![CDATA[<p>Some of these stats that nobody needs. </p>
<p>I got pointed to <a href="http://bizzinformation.de">bizzinformation.de</a>. This site shows you some stats and aggregates it to a money value. Would be interesting if they could provide potential buyers as well:)</p>
<p>Here are the blogs of my team:</p>
<table>
<tr>
<td>gesellix.de</td>
<td>13.292,07</td>
</tr>
<tr>
<td>maxheapsize.com</td>
<td>9.340,58</td>
</tr>
<tr>
<td>strug.de</td>
<td>1.944,40</td>
</tr>
<tr>
<td>passion.forco.de</td>
<td>820,64</td>
</tr>
<tr>
<td>semerusummit.de</td>
<td>664,16</td>
</tr>
</table>
<p>Which value has your team? </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strug.de/2011/05/my-teammates-blog-value-is-26-06185-euro/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Homebrew and Maven</title>
		<link>http://blog.strug.de/2011/03/homebrew-and-maven/</link>
		<comments>http://blog.strug.de/2011/03/homebrew-and-maven/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 20:47:05 +0000</pubDate>
		<dc:creator>leif.hanack</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[mac-osx]]></category>
		<category><![CDATA[brew]]></category>
		<category><![CDATA[homebrew]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[mvn]]></category>

		<guid isPermaLink="false">http://blog.strug.de/?p=752</guid>
		<description><![CDATA[If you are using Homebrew and want to use the maven formular you have to delete the symbolic link /usr/bin/mvn. Thereby you use your homebrew maven installation instead of the shipping version of OSX. The executable is located at /usr/local/bin/ which should be part of your path already. The maven package itself can be found [...]]]></description>
			<content:encoded><![CDATA[<p>If you are using <a href="http://blog.strug.de/2010/06/homebrew-a-package-manager-for-mac">Homebrew</a> and want to use the maven formular you have to delete the symbolic link <code>/usr/bin/mvn</code>.</p>
<p>Thereby you use your homebrew maven installation instead of the shipping version of OSX.</p>
<p>The executable is located at <code>/usr/local/bin/</code> which should be part of your path already.<br />
The maven package itself can be found at <code>/usr/local/Cellar/maven/3.0.3/libexec</code>. This will be interesting for your IDE, which often wants a pointer to your maven home directory. I created a symlink <code>current</code> so that I can change the version to use at the command line without the need to configure my IDE again. </p>
<p><code>[/usr/local/Cellar/maven] master@struggy$ sudo ln -s 3.0.3/libexec/ current</code></p>
<p>That&#8217;s it. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strug.de/2011/03/homebrew-and-maven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pin Tab To Keep Last Run (IntellijIdea)</title>
		<link>http://blog.strug.de/2010/12/pin-tab-to-keep-last-run-intellijidea/</link>
		<comments>http://blog.strug.de/2010/12/pin-tab-to-keep-last-run-intellijidea/#comments</comments>
		<pubDate>Sat, 11 Dec 2010 16:24:55 +0000</pubDate>
		<dc:creator>leif.hanack</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[bestpractices]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[IntelliJ IDEA]]></category>

		<guid isPermaLink="false">http://blog.strug.de/?p=741</guid>
		<description><![CDATA[All of our team were to blind to recognize this feature &#8211; Pin Tab. Here is the scenario. You run your fast test suite locally. You have a couple of failed tests. You pick the first one, fix it, and run this test only to get fastest feedback. Stop. Now the results of your first [...]]]></description>
			<content:encoded><![CDATA[<p>All of our team were to blind to recognize this feature &#8211; Pin Tab. Here is the scenario. You run your fast test suite locally. You have a couple of failed tests. You pick the first one, fix it, and run this test only to get fastest feedback. Stop. Now the results of your first run are gone, overwritten by the second run. Which other tests did fail? I can&#8217;t remember. We were looking for s.th. similar to the find dialog <em>open in new tab</em>. Couldn&#8217;t find it, a workaround was to copy/paste the result. Today I wanted to create a feature request. While I&#8217;m thinking about what I would expect I opened my IntelliJ IDEA and there it was: Pin Tab!</p>
<p><a href="http://blog.strug.de/wp-content/uploads/pinTab.png"><img src="http://blog.strug.de/wp-content/uploads/pinTab.png" alt="" title="pinTab" width="361" height="194" class="aligncenter size-full wp-image-742" /></a></p>
<p>If you want to keep a result just press the pin at the left site. Now this tab is pinned. If you run another set of tests your previous result will remain. Cool. How could I overlooked it for so long? </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strug.de/2010/12/pin-tab-to-keep-last-run-intellijidea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Get Rid Of TestGroups With TestNGs Beanshell Support</title>
		<link>http://blog.strug.de/2010/12/get-rid-of-testgroups-with-testngs-beanshell-support/</link>
		<comments>http://blog.strug.de/2010/12/get-rid-of-testgroups-with-testngs-beanshell-support/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 15:02:30 +0000</pubDate>
		<dc:creator>leif.hanack</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[beanshell]]></category>
		<category><![CDATA[testgroup]]></category>
		<category><![CDATA[testng]]></category>

		<guid isPermaLink="false">http://blog.strug.de/?p=727</guid>
		<description><![CDATA[Do you annotate your TestNG tests with groups? We currently have four groups: FAST_TEST, SLOW_TEST, INTEGRATION_TEST, WEBDRIVER_TEST. @Test(groups = TestGroup.FAST_TEST) public class IncomeCalculatorTest { @Test public void test_negative_income_is_not_allowed() { .. } } Recent, we have had trouble with the execution order of our tests. We are using Spring and one or more tests seem to [...]]]></description>
			<content:encoded><![CDATA[<p>Do you annotate your TestNG tests with groups? We currently have four groups: FAST_TEST, SLOW_TEST, INTEGRATION_TEST, WEBDRIVER_TEST.</p>
<pre class="brush: java; gutter: false">@Test(groups = TestGroup.FAST_TEST)
public class IncomeCalculatorTest {

  @Test public void test_negative_income_is_not_allowed() {
    ..
  }
}</pre>
<p>Recent, we have had trouble with the execution order of our tests. We are using Spring and one or more tests seem to dirty the context without annotating it with @DirtiesContext. We have several hundred tests so identifying the one isn&#8217;t that easy. Same problems? Vote for <a href="https://jira.springframework.org/browse/SPR-7811">SPR-7811</a>. A workaround is to control the execution order of the tests. Now we are back on our topic.</p>
<p>TestNG allows you to use <a href="http://testng.org/doc/documentation-main.html#beanshell">beanshell scripts</a> inside a suite file. <strong>The access is limited to the current method and its groups.</strong> Nevertheless you can do a lot with this information.</p>
<p>You want to run tests only, that require a transactional spring context? Or you want tests from a specific package only? Here we go:</p>
<pre class="brush: xml; gutter: false">&lt;!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"&gt;
&lt;suite name="beanshell-demo-suite"&gt;
  &lt;test name="allTransactionalSpringContextTests"&gt;
    &lt;method-selectors&gt;
      &lt;method-selector&gt;
        &lt;script language="beanshell"&gt;
          &lt;![CDATA[org..AbstractT..Tests.class.isAssignableFrom(method.getDeclaringClass())]]&gt;
        &lt;/script&gt;
      &lt;/method-selector&gt;
    &lt;/method-selectors&gt;
    &lt;packages&gt;
      &lt;package name="mycompany.*"/&gt;
    &lt;/packages&gt;
  &lt;/test&gt;
  ..
  &lt;test name="allTestsInPackageX-Y-Z"&gt;
    &lt;method-selectors&gt;
      &lt;method-selector&gt;
        &lt;script language="beanshell"&gt;
          &lt;![CDATA[method.getDeclaringClass().getPackage().getName().contains("X-Y-Z")]]&gt;
        &lt;/script&gt;
      &lt;/method-selector&gt;
    &lt;/method-selectors&gt;
    &lt;packages&gt;
      &lt;package name="mycompany.*"/&gt;
    &lt;/packages&gt;
  &lt;/test&gt;
&lt;/suite&gt;
</pre>
<p><small><em>(org..AbstractT..Tests should be org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests)</em></small></p>
<p>Got it? <strong>If you can group your tests based on there names, packages, base classes, .. you don&#8217;t need to annotate all your tests with groups.</strong> No more missing or wrong tagged test, hallelujah!</p>
<p>Disclaimer: Sure there will be a lot of situations where you need test groups. E.g. when you use the <em>dependsOn</em> feature heavily. This blog shows what else is possible.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strug.de/2010/12/get-rid-of-testgroups-with-testngs-beanshell-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Caution When You Are Using JBoss Drools Functions</title>
		<link>http://blog.strug.de/2010/11/caution-when-you-are-using-jboss-drools-functions/</link>
		<comments>http://blog.strug.de/2010/11/caution-when-you-are-using-jboss-drools-functions/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 21:34:05 +0000</pubDate>
		<dc:creator>leif.hanack</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[drools]]></category>

		<guid isPermaLink="false">http://blog.strug.de/?p=720</guid>
		<description><![CDATA[In JBoss Drools you can use Functions to simplify rules and to DRY: function int monthlyPayment(Money initialMonthlyPayment) { return initialMonthlyPayment.times(0.75); } We used this technic for some little helpers. We unit test all our rules and everything seems to be fine until our customer did some more monkey testing. He claimed that some rules worked [...]]]></description>
			<content:encoded><![CDATA[<p>In JBoss Drools you can use <a href="http://downloads.jboss.com/drools/docs/5.1.1.34858.FINAL/drools-expert/html_single/index.html#d0e3200">Functions</a> to simplify rules and to DRY: </p>
<pre class="brush:java; gutter:false">
function int monthlyPayment(Money initialMonthlyPayment) {
    return initialMonthlyPayment.times(0.75);
}
</pre>
<p>We used this technic for some little helpers. We unit test all our rules and everything seems to be fine until our customer did some more monkey testing. He claimed that some rules worked once but fail now. After some root cause analysis we found a very strange bug (<a href="https://jira.jboss.org/browse/JBRULES-2749">JBRULES-2749</a>). <strong>Rules won&#8217;t fire!</strong> Luckily we found this bug before our go live.</p>
<p><strong>Don&#8217;t use Drools functions until this issue is solved. Instead use a static method in a helper class.</strong></p>
<p>Drools is really a cool rule engine, please vote for <a href="https://jira.jboss.org/browse/JBRULES-2749">JBRULES-2749</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strug.de/2010/11/caution-when-you-are-using-jboss-drools-functions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stay Focused With TDD Task Lists</title>
		<link>http://blog.strug.de/2010/11/stay-focused-with-tdd-task-lists/</link>
		<comments>http://blog.strug.de/2010/11/stay-focused-with-tdd-task-lists/#comments</comments>
		<pubDate>Thu, 04 Nov 2010 20:27:55 +0000</pubDate>
		<dc:creator>leif.hanack</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[bestpractices]]></category>
		<category><![CDATA[IntelliJ IDEA]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[task-list]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[test-list]]></category>

		<guid isPermaLink="false">http://blog.strug.de/?p=698</guid>
		<description><![CDATA[In one way or another you are using task lists, I&#8217;m sure. A task list &#8211; as the name suggests &#8211; is a list of tasks. How does it normally works? While you are coding your brain (and/or the brain of your pair) try to escape It creates thoughts like: I need to test this [...]]]></description>
			<content:encoded><![CDATA[<p>In one way or another you are using task lists, I&#8217;m sure. </p>
<p><a href="http://blog.strug.de/wp-content/uploads/idea-tasks.png"><img src="http://blog.strug.de/wp-content/uploads/idea-tasks.png" alt="" title="idea-tasks" width="383" height="156" class="aligncenter size-full wp-image-712" /></a></p>
<p>A task list &#8211; as the name suggests &#8211; is a list of tasks. How does it normally works? </p>
<p>While you are coding your brain (and/or the brain of your pair) try to <em>escape</em> <img src='http://blog.strug.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  It creates thoughts like:</p>
<ul>
<li><em>I need to test this and that as well</em></li>
<li><em>Here it might be cool to clean up the campground</em></li>
<li><em>The name of that class did not express the intention any longer, what is more suitable?</em></li>
<li><em>..</em></li>
</ul>
<p>These ideas of other tests and possible refactorings keep you from the current task. To keep focus write them down. Free your mind. If you finished your task, take the next one from the list. New ideas? Add them. Let the task list evolve. Clean up your list frequently. If you have tasks that you won&#8217;t do shortly, create user stories and sell them to your product owner. </p>
<p>This practice allow you to keep focus on the current task without loosing your ideas. You&#8217;ll have less context switches. It makes you more productive. <strong>Try it!</strong> </p>
<p><strong>TDD Task Lists With IntelliJ IDEA</strong></p>
<p>I use this <a href="http://plugins.intellij.net/plugin/?id=1124">Task Plugin</a>. It is simple and easy to use. Every action can be triggered with the keyboard. Changing keyboard mappings can be done classically with IDEA&#8217;s keyboard mapping. Because of the missing <em>Insert</em> key on my MacBookPro I remapped <em>Add Task</em>. To go quickly to the <em>Task</em> Tool Window you can either map it to a key or use the switcher (Ctrl-Tab on OSX):</p>
<p><a href="http://blog.strug.de/wp-content/uploads/idea-switcher.png"><img src="http://blog.strug.de/wp-content/uploads/idea-switcher.png" alt="" title="idea-switcher" width="321" height="205" class="aligncenter size-full wp-image-708" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strug.de/2010/11/stay-focused-with-tdd-task-lists/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Did You Know Fluid?</title>
		<link>http://blog.strug.de/2010/10/did-you-know-fluid/</link>
		<comments>http://blog.strug.de/2010/10/did-you-know-fluid/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 21:04:05 +0000</pubDate>
		<dc:creator>leif.hanack</dc:creator>
				<category><![CDATA[mac-osx]]></category>

		<guid isPermaLink="false">http://blog.strug.de/?p=691</guid>
		<description><![CDATA[I found Fluid, a little helper that converts a URL into an application. E.g. I created an app for Gmail:]]></description>
			<content:encoded><![CDATA[<p>I found <a href="http://fluidapp.com/">Fluid</a>, a little helper that converts a URL into an application. E.g. I created an app for Gmail:</p>
<p><a href="http://blog.strug.de/wp-content/uploads/fluid-sample.png"><img src="http://blog.strug.de/wp-content/uploads/fluid-sample.png" alt="" title="fluid-sample" width="621" height="237" class="aligncenter size-full wp-image-692" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.strug.de/2010/10/did-you-know-fluid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

