<?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>Yesterday I was wrong</title>
	<atom:link href="http://dan.bodar.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://dan.bodar.com</link>
	<description>Dan&#039;s technical ramblings</description>
	<lastBuildDate>Fri, 09 Mar 2012 00:17:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>My QCon talk&#8230;</title>
		<link>http://dan.bodar.com/2012/03/09/my-qcon-talk/</link>
		<comments>http://dan.bodar.com/2012/03/09/my-qcon-talk/#comments</comments>
		<pubDate>Fri, 09 Mar 2012 00:16:40 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dan.bodar.com/?p=169</guid>
		<description><![CDATA[Prezi The original blog post / rant]]></description>
			<content:encoded><![CDATA[<p><a href="http://prezi.com/urkus7bs4gqw/crazy-fast-build-times/">Prezi</a><br />
The <a href="http://dan.bodar.com/2012/02/28/crazy-fast-build-times-or-when-10-seconds-starts-to-make-you-nervous/">original blog post / rant </a></p>
]]></content:encoded>
			<wfw:commentRss>http://dan.bodar.com/2012/03/09/my-qcon-talk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TotallyLazy mentioned in &#8220;Functional Programming for Java Developers&#8221; book</title>
		<link>http://dan.bodar.com/2012/02/28/totallylazy-mentioned-in-functional-programming-for-java-developers-book/</link>
		<comments>http://dan.bodar.com/2012/02/28/totallylazy-mentioned-in-functional-programming-for-java-developers-book/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 14:24:48 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dan.bodar.com/?p=160</guid>
		<description><![CDATA[In Chapter 6 &#8220;Where to go from here&#8221; on page 58 Dean references TotallyLazy for those not wanting to take the scala / clojure route.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.co.uk/gp/product/1449311032/ref=as_li_tf_il?ie=UTF8&#038;tag=danbodarcom-21&#038;linkCode=as2&#038;camp=1634&#038;creative=6738&#038;creativeASIN=1449311032"><img border="0" src="http://ws.assoc-amazon.co.uk/widgets/q?_encoding=UTF8&#038;Format=_SL160_&#038;ASIN=1449311032&#038;MarketPlace=GB&#038;ID=AsinImage&#038;WS=1&#038;tag=danbodarcom-21&#038;ServiceVersion=20070822" ></a><img src="http://www.assoc-amazon.co.uk/e/ir?t=danbodarcom-21&#038;l=as2&#038;o=2&#038;a=1449311032" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>In <a href="http://books.google.co.uk/books?id=b-x0-D7Gvx4C&#038;pg=PA58&#038;dq=%22Functional+Programming+for+Java+Developers%22+totallylazy&#038;hl=en&#038;sa=X&#038;ei=Bt9MT5ONDs2r8QOssODcAg&#038;ved=0CD4Q6AEwAA#v=onepage&#038;q=%22Functional%20Programming%20for%20Java%20Developers%22%20totallylazy&#038;f=false">Chapter 6 &#8220;Where to go from here&#8221; on page 58</a> Dean references <a href="http://code.google.com/p/totallylazy/">TotallyLazy</a> for those not wanting to take the scala / clojure route.</p>
]]></content:encoded>
			<wfw:commentRss>http://dan.bodar.com/2012/02/28/totallylazy-mentioned-in-functional-programming-for-java-developers-book/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>java.lang.ClassNotFoundException: org.apache.log4j.FileAppender</title>
		<link>http://dan.bodar.com/2012/02/28/java-lang-classnotfoundexception-org-apache-log4j-fileappender/</link>
		<comments>http://dan.bodar.com/2012/02/28/java-lang-classnotfoundexception-org-apache-log4j-fileappender/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 11:34:16 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[pain]]></category>

		<guid isPermaLink="false">http://dan.bodar.com/?p=152</guid>
		<description><![CDATA[Hopefully this will stop someone from wasting a day of their life&#8230; If you pass in the following when you start your Java application: java -Dlog4j.configuration=file:///some/path/log4j.properties And that file contains a class that is not on the class path log4j.appender.myAppender=biz.minaret.log4j.DatedFileAppender &#8230;<p class="read-more"><a href="http://dan.bodar.com/2012/02/28/java-lang-classnotfoundexception-org-apache-log4j-fileappender/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Hopefully this will stop someone from wasting a day of their life&#8230;<br/><br />
If you pass in the following when you start your Java application:</p>
<pre>
java -Dlog4j.configuration=file:///some/path/log4j.properties
</pre>
<p>And that file contains a class that is not on the class path</p>
<pre>
log4j.appender.myAppender=biz.minaret.log4j.DatedFileAppender
log4j.rootLogger=error, myAppender
</pre>
<p>Then due to the log4j static initialisers you will not see an error for the class in question but instead:</p>
<pre>
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.FileAppender
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
</pre>
<p>Unfortunately for me this was caused by a transitive dependency changing in Maven. Damn you Maven/Log4J</p>
]]></content:encoded>
			<wfw:commentRss>http://dan.bodar.com/2012/02/28/java-lang-classnotfoundexception-org-apache-log4j-fileappender/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crazy fast build times (Or when 10 seconds starts to make you nervous)</title>
		<link>http://dan.bodar.com/2012/02/28/crazy-fast-build-times-or-when-10-seconds-starts-to-make-you-nervous/</link>
		<comments>http://dan.bodar.com/2012/02/28/crazy-fast-build-times-or-when-10-seconds-starts-to-make-you-nervous/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 11:12:34 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dan.bodar.com/?p=131</guid>
		<description><![CDATA[Firstly this is not just my effort but my team and organisation. Secondly the usual rules apply, this is expert advise and what works for me will very probably cause your whole production stack to blow up and kill people. &#8230;<p class="read-more"><a href="http://dan.bodar.com/2012/02/28/crazy-fast-build-times-or-when-10-seconds-starts-to-make-you-nervous/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Firstly this is not just my effort but my team and organisation.<br />
Secondly the usual rules apply, this is expert advise and what works for me will very probably cause your whole production stack to blow up and kill people.<br />
Lastly this is long so skip to the bit you care about or come along and chat at <a title="QCon London 2012" href="http://qconlondon.com/london-2012/presentation/Crazy%20Talk:%20When%2010%20second%20builds%20start%20to%20make%20you%20nervous">QCon London 2012</a></p>
<p>Well lets answer the obvious questions:<br />
<strong>&#8220;Can this work for real apps or just fun stuff?&#8221;</strong> Yes real apps old and new.<br />
<strong>&#8220;Does it need to be greenfield?&#8221;</strong> No but it takes a long time (months) to get builds down on old codebases.</p>
<p>Lets have some examples then (greenfield means it was built with speed in mind)</p>
<ol>
<li>5+ year legacy app, down from <strong>45 mins to 3+ minutes</strong> (this is the one we are focusing on at the moment &#8211; probably taken a year on and off to get this far) .</li>
<li>3+ year legacy app, down from <strong>20 mins to 3+ minutes</strong> (this took a couple of months)</li>
<li>1+ year greenfield app, creeping <strong>up to 12 seconds</strong></li>
<li>6 month greenfield app/lib (used by number 1), creeping <strong>up to 15 seconds</strong> (warning lights are going off here)</li>
<li>2 year greenfield library (used by 1,2,3,4), <strong>down to 8 seconds</strong> having peeked at 15 seconds</li>
</ol>
<p>Here are my rules of engagement:</p>
<ol>
<li>Nothing is safe: build tool, compiler, testing library, language, web container, messaging library, persistence layer, architecture, OS, code layout, team and process.</li>
<li>Making you app / build fast is just like making your code testable, it will make you and your app better.</li>
<li>Following from 2: Don&#8217;t split up you tests into slow and fast, split up you app into other apps or libs. Splitting the tests is just ignoring the problem plus people will just stop looking at the slow test.</li>
<li>Crazy is good</li>
</ol>
<p><strong>Build tool:</strong></p>
<p>If you are using <strong>Maven</strong> (the binary) then you have no hope of ever being in the sub 10 seconds cool club but even if you are in a maven organisation you can use the maven structure and produce maven artifacts with your build but use a different tool (Make, sbt, buildr, ant etc). Think <em>maven is an output contract not an implementation contract.</em> You would have thought that maven and ivy would actually be fast at downloading libs as they tend to download the internet all the time but in fact they are incredible slow (they download sequentially which just blows my mind &#8211; this is part due to the stupid transitive nature of those tools).</p>
<p><strong>Compiling: </strong></p>
<p>Incremental or Clean? I truly wish incremental actually worked well, <strong>Make</strong> does a great job with production code but it just can&#8217;t have the insight to understand the relationship between production and test code. The second problem with incremental is that I&#8217;m always going to do a clean on CI which tends to mean incremental is only good for incremental non-pushing local builds. As I tend to push on most commits it&#8217;s little value to me. Finally incremental using javac (without Make doing the smarts) is actually slower that doing a clean compile (and jar) (i think mainly due to the the fact it checks each file and class to see if it&#8217;s exists and changed while in clean mode it only checks to see if the file exists &#8211; I hoping to fix this soon)</p>
<p>So I use clean.</p>
<p>This leads me to the actual compiler. If the compiling is slow (hey Scala (see foot note) thats you I&#8217;m talking 2) then you need to change compiler (fast scala compiler, sbt) but again they don&#8217;t work well in CI as I want a clean build always (not incremental). Right now I&#8217;m investigating extending the Java 6 compiler to remove the unneeded file exists checks and possible jaring the class files directly in the compiler (the java compiler supports writing directly to jars but it&#8217;s not used for some reason)</p>
<p>Pro tip: Always compile and jar in one step: This will actually speed up you build on a number of fronts, by putting it in a jar when you compile your tests it will load the jar into memory so no more disk IO: instead of lots of tiny random reads, just one nice big fat read for the zip. Do the same for your test jar and your tests will load and run quicker as well. I have timed this a number of times on projects and clean, compiler + jar and test is faster than incremental (with javac) compile and test loose files. Try it and see. (NB Large projects this might not hold but that&#8217;s another problem)</p>
<p><strong>Testing:</strong></p>
<p>Stop using crappy testing tools that need parse some text and don&#8217;t support refactoring. This will kill your build on two fronts:</p>
<ol>
<li>Parsing say Html and invoking Java/C# etc is going to be slow as hell in the short term.</li>
<li>Because you can&#8217;t refactor the tests they are going to become a big noose around your neck long term. I&#8217;m talking to you<strong> Fit, Fitness, Concordion</strong> &#8230;</li>
</ol>
<p>Stop using slow acceptance testing tools like <strong>Selenium</strong>, not only are they incredible slow but they are incredibly high maintenance for very little return on investment. (To be fair to Selenium I believe you can run WebDriver with HtmlUnit directly off an InputStream)<br />
UPDATE: Selenium has an in process project that looks very promising https://github.com/aharin/inproctester </p>
<p>Instead use an in-memory (no TCP/HTTP) web testing tools. A lot of trendy web frameworks have support and if yours doesn&#8217;t then maybe it&#8217;s time to look for one that does. If you can&#8217;t convert a String to Request and back again then you are probably not using a web framework that is well written or well tested, let alone fast.</p>
<p>If you have some production constraint that is slow (say Oracle) then separate the oracle integration tests out from your acceptance tests. I create fast production quality implementations (in memory, local disk, h2, hsql, lucene etc) that for-fill the same contract. And by this I mean I have either an abstract contract test that all implementations inherit or parametrise the test that takes a list of implementations. For more confidence you can have your CI run with Oracle and local run with H2, I normally see a <strong>factor of 3-4x faster</strong> with this setup. I prefer to just use in memory collection backed version as this can give you a <strong>factor up to 10x</strong> speed up. People always bitch about not using the exact production stack (blah blah blah) but I seem to be one of the few people actually measuring the cost/benifit.</p>
<p>Some fuzzy facts: On e4 (ramped up to 2 teams with maybe 20+ devs in total) we used the hsql local and oracle on CI setup. Build contained maybe 2000 tests (I don&#8217;t separate acceptance, unit etc) Local build was 56 seconds on Ubuntu, 1 minute 30 on windows (same hardware), CI was 3 mins 30 ish. We had one production oracle issue caused by the difference between oracle and hsql (empty string == null in oracle) as most where caught at CI. The bug took us max one day to fix and release but I took some heat for it from the devs but I pulled out the calculator. We had been running for 3 months, we had 12 pairs doing 10+ builds a day each, so that&#8217;s about 5 man hours a day or about 20 man days over the 3 months. So 1 day cost for 20 days saved, OK there was some reputation risk but I think hard to measure stuff like attitude and mean time to repair (when you don&#8217;t have a second team doing the same storry with full stack build) was even better. Graham Brooks did a great presentation for this for one of the Agile conference.</p>
<p><strong>Language / Libraries / Web Containers etc</strong></p>
<p>If it&#8217;s slow ditch it.</p>
<p>Yup I ditched <strong>Scala</strong> because of it&#8217;s terrible compile time. I actually re-wrote a couple of libraries/apps so I have side by side with the exact same code in one language and another. It&#8217;s scary without incremental compile (sbt) or long running processes (fast compiler) the raw scala compiler is 10x slower than <strong>Java</strong>. 10x!!! That&#8217;s just insane. With incremental it&#8217;s the same a full clean Java compile. Not only is scala slow to compile but the byte code is 2x as big as Java for the same functionality, That must translate into a performance hit. </p>
<p>UPDATE: For byte code size please compare <a href="http://code.google.com/p/yadic/downloads/list?can=2&#038;q=scala&#038;colspec=Filename+Summary+Uploaded+ReleaseDate+Size+DownloadCount">yadic-67.jar (last scala version) and yadic-68.jar (exact same functionality in java)</a></p>
<p>It&#8217;s not just scala mind:</p>
<p><strong>Lucene</strong> is going the same way, between version 3.3 and 3.4, if you don&#8217;t create create a singleton for the IndexWriters and Readers it&#8217;s 30x slower to instantiate. 30x!!! FFS. Now I give you that in production you don&#8217;t create a new index 30 times in a second but for testing it&#8217;s a nightmare. At the same time Lucene is so much faster than going across the wire to a remote DB for obvious reasons.</p>
<p><strong>Hibernate Session Factory</strong> can take seconds to start up, WTF you are just readying some XML or annotations. So either ditch hibernate or remove it from your acceptance tests (in-memory FTW).<br />
UPDATE: Hibernate seems to take about 1.3 seconds to instantiate the SessionFactory class even with less than 200 line of HBM file.</p>
<p><strong>Velocity</strong> is the same, if you don&#8217;t use their singleton it can takes seconds to start.<br />
UPDATE: I&#8217;ve done some more testing and Velocity does appear to be a little better these days (100ms to start). Not great but not terrible either</p>
<p><strong>Tomcat / Jetty</strong> take seconds to start, okay you can run Jetty in embedded with helps a lot but nothing, yes nothing is a fast as the the <a href="http://docs.oracle.com/javase/6/docs/jre/api/net/httpserver/spec/com/sun/net/httpserver/package-summary.html" target="_blank">embedded Java 6 HTTP server</a>, 10ms cold JVM, &lt;1ms warm.</p>
<p><strong>GWT</strong> is a big time sync on multiple fronts:</p>
<ol>
<li>The compile step is slow.</li>
<li>Because you now have so much generated Javascript you feel you have to use tools like Selenium to acceptance test it.</li>
<li>You will have so much more Java code than you really need&#8230;</li>
</ol>
<p>Again I have numbers: Application number 2 we ripped out GWT and replaced it with some crappy MVC setup: compile time reduced by 30 seconds, acceptance testing reduced by nearly 20 minutes as we no longer needed to use IE Selenium driver. Java Code reduced by 82%,</p>
<p>Spring lets just leave it at that. UPDATE: 5+ year old project: Using Xml config takes 14 seconds to start (This can be reduced by using the lazy attribute). 1 year old project using annotations takes 1.3 seconds to start.</p>
<p><strong>OS / Hardware</strong></p>
<p>Windows disk IO is just poor, for builds it&#8217;s a killer. As I said before we saw a 50% increase in time using Windows (comapred to Ubuntu) with exactly the same hardware, code.</p>
<p>MacOS is faster than Windows for sure but Linux is fastest. We have dual boot with MacOSX and Ubuntu on my team and we see 15-20% improvement for exactly the same code, hardware. (These are bad boy Mac Pro machines not some Hackintosh).</p>
<p>SSD / RAM DISK: I don&#8217;t have exact numbers but saw around 10% decrease in time on my laptop with a new SSD.</p>
<p><strong>Divide and Conquer  / Architecture</strong></p>
<p>As I said before don&#8217;t split you test code, split your whole project. We have extracted libraries and applications from our legacy applications. What&#8217;s great is we actually need less slow acceptance tests because the library is more focussed and tests at the API level. While the app only needs to test that the default config works. These really helps counter another common anti-pattern I see is that people want to retest every thing at the acceptance level.</p>
<p>If you force logic into a library then an acceptance test is actually an API test as there is no UI.</p>
<p>I think that&#8217;s most of it dumped.</p>
<p><strong>*Notes*</strong></p>
<p>Some compile times for 8.5K loc project rewriten from Scala to Java</p>
<p><strong>Scala</strong></p>
<ul>
<li>ant clean compile test package: 30 seconds</li>
<li>sbt clean compile test package: 56 seconds</li>
<li>sbt incremental compile test package: 6 seconds</li>
<li>buildr (clean compile test package): 37 seconds</li>
<li>maven2 clean verify: 42 seconds</li>
</ul>
<p><strong>Java</strong></p>
<ul>
<li>ant clean compile test package: 6.9~ seconds</li>
<li>make clean compile test package: 6.7~ seconds</li>
<li>make incremental compile test package: 6.4 seconds (changing one prod file and one test file)</li>
<li>make incremental compile test package: 3.8 seconds (changing one test file only)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://dan.bodar.com/2012/02/28/crazy-fast-build-times-or-when-10-seconds-starts-to-make-you-nervous/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>99 Bottles of Beer in Totallylazy</title>
		<link>http://dan.bodar.com/2012/01/13/99-bottles-of-beer-in-totallylazy/</link>
		<comments>http://dan.bodar.com/2012/01/13/99-bottles-of-beer-in-totallylazy/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 16:18:02 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[totallylazy functional java beer]]></category>

		<guid isPermaLink="false">http://dan.bodar.com/?p=124</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<pre class="brush: java; title: ; notranslate">import static com.googlecode.totallylazy.Runnables.printLine;
import static com.googlecode.totallylazy.lambda.Lambdas.n;
import static com.googlecode.totallylazy.lambda.Lambdas.λ;
import static com.googlecode.totallylazy.numbers.Numbers.decrement;
import static com.googlecode.totallylazy.numbers.Numbers.range;

public class BottlesOfBeer {
    // Run with -javaagent:enumerable-java-0.4.0.jar -cp:totallylazy-598.jar:enumerable-java-0.4.0.jar
    public static void main(String[] args) {
        range(99, 0).map(λ(n, verse(n))).each(printLine(&quot;%s of beer on the wall.\n&quot;));
    }

    private static String verse(Number number) {
        if (number.equals(0))
            return &quot;No more bottles of beer on the wall, no more bottles of beer.\n&quot; +
                   &quot;Go to the store and buy some more, 99 bottles&quot;;
        return String.format(&quot;%s of beer on the wall, %1$s of beer.\n&quot; +
            &quot;Take one down and pass it around, %s&quot;, bottles(number), bottles(decrement(number)));
    }

    private static String bottles(Number number) {
        if (number.equals(0)) return &quot;no more bottles&quot;;
        if (number.equals(1)) return &quot;1 bottle&quot;;
        return number + &quot; bottles&quot;;
    }
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://dan.bodar.com/2012/01/13/99-bottles-of-beer-in-totallylazy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Slow TrackPoint on Dell Precision M6500 under Ubuntu 10.10</title>
		<link>http://dan.bodar.com/2011/03/03/slow-trackpoint-on-dell-precision-m6500-under-ubuntu-10-10/</link>
		<comments>http://dan.bodar.com/2011/03/03/slow-trackpoint-on-dell-precision-m6500-under-ubuntu-10-10/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 07:12:32 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dan.bodar.com/?p=122</guid>
		<description><![CDATA[If you have a Dell Precision M6500 with a Synaptic TouchPad + TrackPoint) (rather than an ALPS version) and you are running Ubuntu 10.10 you may find the TrackPoint / TrackStick / Nipple is being detected as a standard PS/2 &#8230;<p class="read-more"><a href="http://dan.bodar.com/2011/03/03/slow-trackpoint-on-dell-precision-m6500-under-ubuntu-10-10/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>If you have a Dell Precision M6500 with a Synaptic TouchPad + TrackPoint) (rather than an ALPS version) and you are running Ubuntu 10.10 you may find the TrackPoint / TrackStick / Nipple is being detected as a standard PS/2 Generic Mouse and this is causing the movement to be very slow.</p>
<p>You can check this by typing:</p>
<pre>xinput list</pre>
<p>If you see something like this:</p>
<pre>
Virtual core pointer                    	id=2	[master pointer  (3)]
↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
↳ SynPS/2 Synaptics TouchPad              	id=11	[slave  pointer  (2)]
↳ PS/2 Generic Mouse                      	id=12	[slave  pointer  (2)]
</pre>
<p>As you can see the TrackPoint is not listed and as such you wont see it in any of the configuration screens.</p>
<p>As I haven&#8217;t worked out how to get it to detect it as an actual TrackPoint the best solution I have is to change the acceleration mode to more closely represent what you would expect:</p>
<pre>xinput set-prop "PS/2 Generic Mouse" "Device Accel Profile" 6</pre>
<p>I then just add this to the startup applications for my profile.</p>
]]></content:encoded>
			<wfw:commentRss>http://dan.bodar.com/2011/03/03/slow-trackpoint-on-dell-precision-m6500-under-ubuntu-10-10/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Off topic &#8211; a very addictive little game for Windows, Mac and Linux&#8230;</title>
		<link>http://dan.bodar.com/2010/06/29/off-topic-a-very-addictive-little-game-for-windows-mac-and-linux/</link>
		<comments>http://dan.bodar.com/2010/06/29/off-topic-a-very-addictive-little-game-for-windows-mac-and-linux/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 07:38:50 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dan.bodar.com/?p=117</guid>
		<description><![CDATA[http://www.hemispheregames.com/osmos/ Very chilled out&#8230;]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.hemispheregames.com/osmos/">http://www.hemispheregames.com/osmos/</a></p>
<p>Very chilled out&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://dan.bodar.com/2010/06/29/off-topic-a-very-addictive-little-game-for-windows-mac-and-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crazy Talk &#8211; Holistic Web Testing &#8211; Some forces&#8230;</title>
		<link>http://dan.bodar.com/2010/06/29/crazy-talk-holistic-web-testing-some-forces/</link>
		<comments>http://dan.bodar.com/2010/06/29/crazy-talk-holistic-web-testing-some-forces/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 07:36:30 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[crazy talk]]></category>

		<guid isPermaLink="false">http://dan.bodar.com/?p=106</guid>
		<description><![CDATA[So given the above, the forces I am trying to balance are Make it easy for people to do the right thing, hard to do the wrong thing. Make it valuable (Finds more bugs than false alarms) Make it resilient &#8230;<p class="read-more"><a href="http://dan.bodar.com/2010/06/29/crazy-talk-holistic-web-testing-some-forces/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>So given the above, the forces I am trying to balance are</p>
<ul>
<li>Make it easy for people to do the right thing, hard to do the wrong thing.</li>
<li>Make it valuable (Finds more bugs than false alarms)</li>
<li>Make it resilient (Allows me to refactor like the true crazy person I am)</li>
<li>Make it fast (Magnify it&#8217;s value rather deminishing it)</li>
<li>Make it good enough (Give me enough confidence to do more crazy stuff but don&#8217;t become dogmatic)</li>
<li>Allow people to do what they are good at</li>
</ul>
<p>Next I&#8217;ll talk about how the default setup I use to do, in-memory, out of container testing.</p>
]]></content:encoded>
			<wfw:commentRss>http://dan.bodar.com/2010/06/29/crazy-talk-holistic-web-testing-some-forces/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crazy Talk &#8211; Holistic Web Testing &#8211; Whys and Values&#8230;</title>
		<link>http://dan.bodar.com/2010/06/22/crazy-talk-holistic-web-testing-whys-and-values/</link>
		<comments>http://dan.bodar.com/2010/06/22/crazy-talk-holistic-web-testing-whys-and-values/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 07:22:35 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dan.bodar.com/?p=108</guid>
		<description><![CDATA[Now for some web specific whys/values I do the in-memory acceptance testing&#8230; Semantic Html is my golden hammer Progressive enhancement is my swiss army knife I love JavaScript but try to never write any but if i must I make &#8230;<p class="read-more"><a href="http://dan.bodar.com/2010/06/22/crazy-talk-holistic-web-testing-whys-and-values/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Now for some web specific whys/values I do the in-memory acceptance testing&#8230;</p>
<ul>
<li>Semantic Html is my golden hammer</li>
<li>Progressive enhancement is my swiss army knife</li>
<li>I love JavaScript but try to never write any but if i must I make sure it&#8217;s generic. I try very hard to make sure no else writes any either and if they do I just refactor it till it deletes itself.</li>
<li>I love AHAH and barely tolerate AJAX / JSON</li>
<li>REST is my natural state not something I read about</li>
</ul>
<p>All of these forces / values / beliefs drive me to solve the problem of web testing in a very different approach from most people. It is about an alternative holistic approach to web architecture, testing and productivity. </p>
<p>So now I have expressed some of the forces / the whys, I will try cover the hows and whats.</p>
]]></content:encoded>
			<wfw:commentRss>http://dan.bodar.com/2010/06/22/crazy-talk-holistic-web-testing-whys-and-values/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crazy Talk &#8211; Holistic Web Testing &#8211; Some values&#8230;</title>
		<link>http://dan.bodar.com/2010/06/01/crazy-talk-holistic-web-testing-some-values/</link>
		<comments>http://dan.bodar.com/2010/06/01/crazy-talk-holistic-web-testing-some-values/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 19:20:59 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[crazy talk]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dan.bodar.com/?p=103</guid>
		<description><![CDATA[(Previously on TWSDEV) As the &#8220;crazy&#8221; guy behind the in-memory / out-of-container acceptance testing on a number of java/.net projects, I think it&#8217;s important I explain to people the &#8220;Why&#8221; and the forces / constraints I am trying to balance. &#8230;<p class="read-more"><a href="http://dan.bodar.com/2010/06/01/crazy-talk-holistic-web-testing-some-values/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>(Previously on TWSDEV)</p>
<p>As the &#8220;crazy&#8221; guy behind the in-memory / out-of-container acceptance testing on a number of java/.net projects, I think it&#8217;s important I explain to people the &#8220;Why&#8221; and the forces / constraints I am trying to balance. But first I want to quickly lay down my beliefs and values:</p>
<ul>
<li>I believe in testing as much as possible (UI included)</li>
<li>I believe tests must add more value than they cost (Measure it!)</li>
<li>I value tests that are fast and are resilient to change more than tests  that take a long time to run and are brittle.</li>
<li>When refactoring a feature I value acceptances tests and integration test over unit tests.</li>
<li>When designing/exploring a new interface / object interaction I value unit tests over acceptance tests to help guide me.</li>
<li>I believe that QA&#8217;s are so much better at finding bugs than DEVs but worse at writing code / abstractions</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://dan.bodar.com/2010/06/01/crazy-talk-holistic-web-testing-some-values/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

