<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5738398436372576429</id><updated>2011-10-01T17:30:24.125+02:00</updated><category term='linux'/><category term='launchd'/><category term='xml'/><category term='cvs'/><category term='continuous integration'/><category term='ant'/><category term='javascript'/><category term='cloud server'/><category term='stresstest'/><category term='java'/><category term='cobertura'/><category term='apple'/><category term='dvcs'/><category term='jenkins'/><category term='scm'/><category term='mac os x'/><category term='lucid'/><category term='maven'/><category term='hudson'/><category term='yui2'/><category term='http'/><category term='general'/><category term='hardy'/><category term='basex'/><category term='chrome'/><category term='bitbucket'/><category term='firefox'/><category term='android'/><category term='css'/><category term='git'/><category term='python'/><category term='xpath'/><category term='charles'/><category term='jnlp'/><category term='ubuntu'/><category term='iptables'/><category term='mercurial'/><category term='xen'/><category term='svn'/><category term='subversion'/><title type='text'>IllegalStateException</title><subtitle type='html'>Thoughts about developing, testing and software quality in general.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-1563998155830423682</id><published>2011-06-30T00:55:00.000+02:00</published><updated>2011-06-30T00:55:13.272+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><title type='text'>javax.net.ssl.SSLPeerUnverifiedException after installation of a new JDK on MacOSX</title><content type='html'>&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;After installing the new JDK (&lt;b&gt;1.6.0_26&lt;/b&gt;) as normal user having the authentication dialog pop up for my admin account. I had loads of problems with &lt;tt&gt;javax.net.ssl.SSLPeerUnverifiedException&lt;/tt&gt; popping up.&lt;/li&gt;
&lt;li&gt;I even was not able to start the &lt;tt&gt;/Applications/Utilities/Java\ Preferences.app/&lt;/tt&gt; and got a strange error.&lt;/li&gt;
&lt;li&gt;Logging in as admin did not help either, I still was not able to start the preference app.&lt;/li&gt;
&lt;li&gt;I downloaded the JDK as admin again and repeated the installation.&lt;/li&gt;
&lt;li&gt;I rebooted my system and now was able to open the preference app, reset to default options and the &lt;tt&gt;javax.net.ssl.SSLPeerUnverifiedException&lt;/tt&gt; were gone.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-1563998155830423682?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/1563998155830423682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2011/06/javaxnetsslsslpeerunverifiedexception.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/1563998155830423682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/1563998155830423682'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2011/06/javaxnetsslsslpeerunverifiedexception.html' title='javax.net.ssl.SSLPeerUnverifiedException after installation of a new JDK on MacOSX'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-981975075767490093</id><published>2011-01-26T21:06:00.000+01:00</published><updated>2011-01-26T21:06:03.871+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scm'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Using maven-release-plugin and maven-scm-plugin to tag all submodules of a multimodule project</title><content type='html'>&lt;p&gt;I just created a &lt;a href="https://github.com/mfriedenhagen/multi-module-sample"&gt;sample multi module maven project&lt;/a&gt; in which by using the &lt;a href="http://maven.apache.org/plugins/maven-release-plugin/"&gt;maven-release-plugin&lt;/a&gt; and the &lt;a href="http://maven.apache.org/scm/maven-scm-plugin/"&gt;maven-scm-plugin&lt;/a&gt; I achieved my goal to create additional tags for the module artifacts as well. For a rationale see the included &lt;a href="https://github.com/mfriedenhagen/multi-module-sample/blob/master/README.creole"&gt;README&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There are two branches, one working with &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt; and one with &lt;a href="http://subversion.apache.org/"&gt;Subversion (in the master branch)&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-981975075767490093?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/981975075767490093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2011/01/using-maven-release-plugin-and-maven.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/981975075767490093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/981975075767490093'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2011/01/using-maven-release-plugin-and-maven.html' title='Using maven-release-plugin and maven-scm-plugin to tag all submodules of a multimodule project'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-863489480469113564</id><published>2011-01-02T21:30:00.000+01:00</published><updated>2011-02-02T23:48:29.051+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jenkins'/><category scheme='http://www.blogger.com/atom/ns#' term='cobertura'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>cobertura plugin and maven3 in a Hudson Installation</title><content type='html'>&lt;p&gt;Now that &lt;a href="http://hudson-labs.org/changelog"&gt;Hudson 1.392&lt;/a&gt; supports &lt;a href="http://maven.apache.org/docs/3.0.1/release-notes.html"&gt;Maven3&lt;/a&gt; I switched my &lt;a href="http://huschteguzzel.de/hudson/job/sardine/"&gt;first job&lt;/a&gt; to Maven3. One small caveat: you need a new, not released version of the &lt;a href="http://wiki.hudson-ci.org/display/HUDSON/Cobertura+Plugin"&gt;Cobertura Plugin&lt;/a&gt;, more information is found in &lt;a href="http://issues.hudson-ci.org/browse/HUDSON-8362"&gt;HUDSON-8362&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-863489480469113564?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/863489480469113564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2011/01/cobertura-plugin-and-maven3-in-hudson.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/863489480469113564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/863489480469113564'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2011/01/cobertura-plugin-and-maven3-in-hudson.html' title='cobertura plugin and maven3 in a Hudson Installation'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-2894645858911126726</id><published>2010-11-28T22:21:00.001+01:00</published><updated>2011-02-02T23:48:29.053+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jenkins'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='charles'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>Triggering Hudson parameterized builds which include a file parameter using curl</title><content type='html'>&lt;p&gt;My final goal is to run &lt;tt class="command"&gt;mvn release:prepare&lt;/tt&gt; on my local machine to have greater control and trigger the actual &lt;tt class="command"&gt;mvn release:perform&lt;/tt&gt; on Hudson, which will do the deployment in a controlled environment and archive the build log.&lt;/p&gt;
&lt;p&gt;To achieve this, I want to upload the generated &lt;tt&gt;release.properties&lt;/tt&gt; to the Hudson instance. This should be possible using the &lt;a href="http://wiki.hudson-ci.org/display/HUDSON/Parameterized+Trigger+Plugin"&gt;Parameterized Trigger Plugin&lt;/a&gt;. The tricky part is that the proposed solution on the plugin's Wikipage using &lt;tt&gt;buildWithParameters&lt;/tt&gt; seems not to work, I always got HTTP/400 or HTTP/500 responses. After some tries and an analyze of the traffic with &lt;a href="/2010/10/using-basex-to-grep-through-charles.html"&gt;Charles&lt;/a&gt; I came up with two solutions, one using token authentication, the other one basic authentication. The important part seems to be to include the parameters &lt;tt&gt;json&lt;/tt&gt; and &lt;tt&gt;Submit&lt;/tt&gt; as well. Note that the file parameter is numbered, i.e. it is called &lt;tt&gt;file0&lt;/tt&gt;.&lt;/p&gt;
&lt;h4&gt;Token authentication&lt;/h4&gt;
&lt;pre class="command"&gt;
curl -i -Fname=release.properties -Ffile0=@FILE_TO_UPLOAD  -Fjson='{"parameter": {"name": "release.properties", "file": "file0"}}' -FSubmit=Build  'http://HUDSON/hudson/job/JOBNAME/build?token=TOKEN'
&lt;/pre&gt;
&lt;p&gt;The advantage of this is that no further user interaction is required, however you do not know who triggered the build.&lt;/p&gt;

&lt;h4&gt;Basic HTTP authentication&lt;/h4&gt;
&lt;pre class="command"&gt;
curl -i -uUSERNAME -Fname=release.properties -Ffile0=@FILE_TO_UPLOAD -Fjson='{"parameter": {"name": "release.properties", "file": "file0"}}' -FSubmit=Build  'http://HUDSON/hudson/job/JOBNAME/build'
&lt;/pre&gt;
&lt;p&gt;The advantage of this is you know who triggered the build.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-2894645858911126726?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/2894645858911126726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2010/11/triggering-hudson-parameterized-builds.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/2894645858911126726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/2894645858911126726'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2010/11/triggering-hudson-parameterized-builds.html' title='Triggering Hudson parameterized builds which include a file parameter using curl'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-4077169786282823354</id><published>2010-11-12T22:48:00.001+01:00</published><updated>2010-11-12T22:56:28.258+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iptables'/><category scheme='http://www.blogger.com/atom/ns#' term='charles'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Using iptables on Android to redirect HTTP connections to a running Charles proxy instance</title><content type='html'>&lt;p&gt;During development it is often desirable to inspect the HTTP requests from your applications. As reported in &lt;a href="http://code.google.com/p/android/issues/detail?id=1273"&gt;Android Issue 1273&lt;/a&gt; there is no easy way to set a HTTP proxy when using WIFI. In this article I describe how to use Charles as a Webproxy at least for unencrypted connections.&lt;/p&gt;
&lt;p&gt;Unfortunately, you have to &lt;em&gt;root&lt;/em&gt; your telephone, as otherwise you are not allowed to call &lt;tt class="command"&gt;iptables&lt;/tt&gt;.
&lt;em&gt;Rooting&lt;/em&gt; is easy to do, visit &lt;a href="http://unrevoked.com/"&gt;unrevoked&lt;/a&gt; and follow the instructions. If you want to install
a custom rom with Froyo just follow the instructions on &lt;a href="http://forceflow.ulyssis.be/2010/10/13/wildpuzzle-rom-for-htc-wildfire/"&gt;Wildpuzzle (or any other) ROM for HTC Wildfire&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;Then install Charles, see my article on &lt;a href="/2010/10/using-basex-to-grep-through-charles.html"&gt;Using BaseX and Charles&lt;/a&gt;. Start it up and configure Charles to be a transparent HTTP proxy in &lt;tt&gt;Proxy/Proxy Settings...&lt;/tt&gt;.&lt;/p&gt; 
&lt;p&gt;I assume you installed the &lt;a href="http://developer.android.com/sdk/index.html"&gt;Android SDK&lt;/a&gt; (for Mac OS X use Homebrew, see my article on &lt;a href="/2010/09/starting-android-emulator-automatically.html"&gt;starting an Android emulator via LaunchAgent&lt;/a&gt; for specifics).&lt;/p&gt;
&lt;p&gt;On your device allow USB Debugging (&lt;tt&gt;Settings/Applications/Development/USB Debugging&lt;/tt&gt;). Now connect your &lt;em&gt;rooted&lt;/em&gt; device via USB. Enter &lt;tt class="command"&gt;adb shell&lt;/tt&gt;, you should be greeted with a &lt;tt&gt;sh-3.2&lt;/tt&gt; prompt. In this example &lt;tt&gt;192.168.51.9&lt;/tt&gt; is the address of the computer running Charles, &lt;tt&gt;8888&lt;/tt&gt; is the port.&lt;/p&gt;
&lt;pre class="command"&gt;
sh-3.2# iptables -t nat -A OUTPUT -p tcp -o eth0 --dport 80 -j DNAT --to 192.168.51.9:8888
FIX ME! implement getprotobyname() bionic/libc/bionic/stubs.c:378
&lt;/pre&gt;
&lt;p&gt;You may ignore the error.&lt;/p&gt;
&lt;pre class="command"&gt;
sh-3.2# iptables -t nat -L -nvx
Chain PREROUTING (policy ACCEPT 19 packets, 4832 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 1068 packets, 65421 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 1050 packets, 63721 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
       8      472 DNAT       tcp  --  *      eth0    0.0.0.0/0            0.0.0.0/0           tcp dpt:80 to:192.168.51.9:8888 
&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;Hint:&lt;/b&gt; On &lt;em&gt;Mac OS X&lt;/em&gt; you have to allow incoming connections to your computer e.g. by going to
&lt;em&gt;System Settings/Security&lt;/em&gt; and disabling the firewall. Now you should see all your unencrypted HTTP connections going through Charles.&lt;/p&gt;
&lt;p&gt;To disable using Charles as a proxy enter:&lt;/p&gt;
&lt;pre class="command"&gt;
sh-3.2# iptables -t nat -F OUTPUT
&lt;/pre&gt;
&lt;p&gt;This will reset the routing again and all HTTP connections will go directly to the hosts again.&lt;/p&gt;
&lt;p&gt;Unfortunately this approach will not work for encrypted connections right now, I am still investigating this.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-4077169786282823354?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/4077169786282823354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2010/11/using-iptables-on-android-to-redirect.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/4077169786282823354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/4077169786282823354'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2010/11/using-iptables-on-android-to-redirect.html' title='Using &lt;tt&gt;iptables&lt;/tt&gt; on Android to redirect HTTP connections to a running Charles proxy instance'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-661618407749016425</id><published>2010-10-15T21:16:00.003+02:00</published><updated>2010-10-18T11:38:07.879+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='http'/><category scheme='http://www.blogger.com/atom/ns#' term='basex'/><category scheme='http://www.blogger.com/atom/ns#' term='stresstest'/><category scheme='http://www.blogger.com/atom/ns#' term='xpath'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='charles'/><title type='text'>Using BaseX to grep through Charles output</title><content type='html'>&lt;p&gt;&lt;a href="http://www.inf.uni-konstanz.de/dbis/basex/index"&gt;BaseX&lt;/a&gt; is a fantastic tool to grep through large XML files by creating indices for text, attributes and path summaries. I use this to analyze data generated by &lt;a href="http://www.charlesproxy.com/"&gt;Charles&lt;/a&gt;, an HTTP proxy / HTTP monitor / Reverse Proxy. Both tools are written in Java, so you should have no problems running them. While the latter is not OSS, it comes at a reasonable price and may be used in a trial version for 30 days after which you get a nagging dialog.&lt;/p&gt;
&lt;p&gt;Charles may be used as a simple tool to run stress tests. Just choose it as a proxy, run your usual usecases and export the data to xml. Two of the power features Charles offers are &lt;a href="http://en.wikipedia.org/wiki/Man-in-the-middle_attack"&gt;Man in the middle&lt;/a&gt; for SSL connections by importing the Charles Root CA certificate and modifying your requests on the fly to use test systems of new software instead of the live ones. Afterwards you may check the output by grepping your expected results using BaseX using &lt;a href="http://en.wikipedia.org/wiki/XQuery"&gt;XQuery&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/XPath"&gt;XPath&lt;/a&gt;. An example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Start Firefox creating a new profile &lt;tt class="command"&gt;/Applications/Firefox.app/Contents/MacOS/firefox-bin -profileManager&lt;/tt&gt; called Charles.&lt;/li&gt;
&lt;li&gt;Download and install Charles' Firefox extension by visiting &lt;a href="http://www.charlesproxy.com/charles.xpi"&gt;the download site&lt;/a&gt; and restart Firefox after installation.&lt;/li&gt;
&lt;li&gt;In the &lt;tt&gt;Tools&lt;/tt&gt; menu of Firefox Charles offers to install the CA certificate.&lt;/li&gt;
&lt;li&gt;Make sure you have Charles running and choose to proxy Firefox in it's &lt;tt&gt;Proxy&lt;/tt&gt; menu.&lt;/li&gt;
&lt;li&gt;Enable Charles in the &lt;tt&gt;Tools&lt;/tt&gt; menu of Firefox, now you should see requests coming through Charles.&lt;/li&gt;
&lt;li&gt;Search for &lt;b&gt;hgkit&lt;/b&gt; in Google.&lt;/li&gt;
&lt;li&gt;Drill down in Charles tree view and find the &lt;a href="http://www.google.de/search?client=firefox-a&amp;rls=org.mozilla%3Aen-US%3Aofficial&amp;channel=s&amp;hl=de&amp;source=hp&amp;q=hgkit&amp;meta=&amp;btnG=Google-Suche"&gt;http://www.google.de/search?client=firefox-a&amp;rls=org.mozilla%3Aen-US%3Aofficial&amp;channel=s&amp;hl=de&amp;source=hp&amp;q=hgkit&amp;meta=&amp;btnG=Google-Suche&lt;/a&gt; request.&lt;/li&gt;
&lt;li&gt;From the context menu of this request choose &lt;tt&gt;Repeat advanced&lt;/tt&gt; and enter 100 iterations with 5 concurrent requests making sure to use a new session.&lt;/li&gt;
&lt;li&gt;Export the new session in Charles as &lt;tt&gt;google-hgkit.xml&lt;/tt&gt;.&lt;/li&gt;
&lt;li&gt;Now start BaseX and create a new database referencing &lt;tt&gt;google-hgkit.xml&lt;/tt&gt;. If you encounter an error &lt;i&gt;Invalid byte 1 of 1-byte UTF-8 sequence&lt;/i&gt; make sure to use the built in parser in the &lt;tt&gt;Parsing&lt;/tt&gt; tab. Make sure you chose &lt;tt&gt;Options/Realtime execution&lt;/tt&gt;.&lt;/li&gt;
&lt;li&gt;Analyze your data:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;A search for &lt;tt class="command"&gt;/charles-session/transaction&lt;/tt&gt; should result in 100 hits.&lt;/li&gt;
&lt;li&gt;A search for &lt;tt class="command"&gt;/charles-session/transaction/response[@status="200"]&lt;/tt&gt; should result in 100 hits.&lt;/li&gt;
&lt;li&gt;As the html returned by the search is &lt;a href="http://en.wikipedia.org/wiki/XML#Escaping"&gt;escaped&lt;/a&gt; in the body, you need to use XML escaping in your search through the body.&lt;/li&gt;
&lt;li&gt;A search for &lt;tt class="command"&gt;/charles-session/transaction/response[@status="200"]/body[contains(text(), "this_surely_will_not_show_up_will_it_dsddada")]&lt;/tt&gt; should result in 0 hits.&lt;/li&gt;
&lt;li&gt;A search for &lt;tt class="command"&gt;/charles-session/transaction/response[@status="200"]/body[contains(text(), "&amp;amp;lt;a href=&amp;amp;quot;http://hgkit.berlios.de/")]&lt;/tt&gt; should result in 100 hits.&lt;/li&gt;
&lt;li&gt;The Xquery &lt;tt class="command"&gt;for $y in (for $x in /charles-session/transaction where $x/response/@status="200" return (
$x/@endTimeMillis - $x/@startTimeMillis)) order by $y descending return $y&lt;/tt&gt; will return the times for successful requests in milliseconds in descending order.&lt;/li&gt;
&lt;li&gt;Return all requests taking more than 300 milliseconds: &lt;tt class="command"&gt;for $y in (for $x in /charles-session/transaction where $x/response/@status="200" return (
$x/@endTimeMillis - $x/@startTimeMillis)) where $y &gt; 300 order by $y descending return $y&lt;/tt&gt;.
&lt;li&gt;Return the count for the above requests:
&lt;pre class="command"&gt;
let $times := (for $x in /charles-session/transaction 
  where $x/response/@status="200" 
  return ($x/@endTimeMillis - $x/@startTimeMillis))
let $slowQueries := for $y in ($times) where $y &gt; 300 return $y
return count($slowQueries)
&lt;/pre&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;You could try to trigger a second search with a different searchterm and analyze that the search results are not mixed up by querying, e.g.&lt;br/&gt;&lt;tt class="command"&gt;/charles-session/transaction[contains(@query, "q=hgkit")]/response[@status="200"]/body[contains(text(), "&amp;amp;lt;a href=&amp;amp;quot;http://hgkit.berlios.de/")]&lt;/tt&gt;. You may select more than one request in Charles for repetition. For further instructions on XPath I recommend &lt;a href="http://www.w3schools.com/xpath/default.asp"&gt;w3school's tutorial&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-661618407749016425?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/661618407749016425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2010/10/using-basex-to-grep-through-charles.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/661618407749016425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/661618407749016425'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2010/10/using-basex-to-grep-through-charles.html' title='Using BaseX to grep through Charles output'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-69639094631926408</id><published>2010-09-27T20:35:00.001+02:00</published><updated>2010-09-27T20:38:19.192+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><category scheme='http://www.blogger.com/atom/ns#' term='launchd'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>Starting an Android emulator automatically on MacOSX after Login via LaunchAgent</title><content type='html'>&lt;p&gt;&lt;a href="http://mxcl.github.com/homebrew/"&gt;Homebrew&lt;/a&gt; offers a simple means to install additional software packages on your MacOSX computer. After initial installation of &lt;tt class="command"&gt;brew&lt;/tt&gt; as admin user execute:&lt;/p&gt;
&lt;pre class="command"&gt;
brew install android-sdk # will install the newest SDK starter package
android update sdk # this will open the UI, now install all platforms
chgrp -R staff /usr/local/Cellar/android-sdk/r7 # otherwise the ANDROID_HOME will be owned by the wheel group and you may not start anything as non admin user.
&lt;/pre&gt;
&lt;p&gt;To use tools like the &lt;tt class="command"&gt;emulator&lt;/tt&gt; add &lt;tt class="command"&gt;ANDROID_HOME&lt;/tt&gt; and &lt;tt class="command"&gt;ANDROID_SDK_ROOT&lt;/tt&gt; to your &lt;tt class="command"&gt;$HOME/.profile&lt;/tt&gt; or &lt;tt class="command"&gt;$HOME/.bash_profile&lt;/tt&gt; (if the latter exists, use this):&lt;/p&gt;
&lt;pre class="command"&gt;
ANDROID_SDK_ROOT=/usr/local/Cellar/android-sdk/r7
ANDROID_HOME=$ANDROID_SDK_ROOT
export ANDROID_SDK_ROOT ANDROID_HOME
&lt;/pre&gt;
&lt;p&gt;Create an emulator called Wildfire using the &lt;tt class="command"&gt;android&lt;/tt&gt; command. Now if you want the emulator to be started automatically after you login, put the following into &lt;tt class="command"&gt;$HOME/Library/LaunchAgents/emulator-wildfire.plist&lt;/tt&gt;:&lt;/p&gt;
&lt;script src="http://gist.github.com/599148.js?file=emulator-wildfire.plist"&gt;&lt;/script&gt;
&lt;p&gt;After you saved the file, execute &lt;tt class="command"&gt;launchctl load $HOME/Library/LaunchAgents/emulator-wildfire.plist&lt;/tt&gt;. From now on the emulator starts whenever you (or your CI user) logs in.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-69639094631926408?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/69639094631926408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2010/09/starting-android-emulator-automatically.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/69639094631926408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/69639094631926408'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2010/09/starting-android-emulator-automatically.html' title='Starting an Android emulator automatically on MacOSX after Login via LaunchAgent'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-95788348741785132</id><published>2010-09-05T02:59:00.001+02:00</published><updated>2010-09-05T03:07:37.447+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>A simple way to get a git hash as version info into Android applications using Maven</title><content type='html'>&lt;p&gt;I recently decided to do some &lt;a href="http://developer.android.com/index.html"&gt;Android&lt;/a&gt; programming. Enters &lt;a href="http://wiki.github.com/mfriedenhagen/android-mittagstisch-ka/"&gt;Mittagstisch KA&lt;/a&gt;. I really like to know which sources applications are built from. Using Maven and it's &lt;a href="http://maven.apache.org/plugins/maven-antrun-plugin/index.html"&gt;Antrun-Plugin&lt;/a&gt; this is rather simple:&lt;/p&gt;
&lt;script src="http://gist.github.com/565626.js?file=inject_git_hash_into_android_info"&gt;&lt;/script&gt;
&lt;p&gt;This will create a new &lt;a href="http://developer.android.com/guide/topics/resources/string-resource.html"&gt;string resource&lt;/a&gt; file, which is automatically picked up by Android's resource compiler and might be read in your application by an &lt;tt&gt;Activity&lt;/tt&gt; like this:&lt;/p&gt;
&lt;pre class="command"&gt;
&lt;code&gt;
final String gitHash = getResources().getString(R.string.info_githash);
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Do not forget to add &lt;tt&gt;res/values/githash.xml&lt;/tt&gt; to your &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/gitignore.html"&gt;&lt;tt&gt;.gitignore&lt;/tt&gt;&lt;/a&gt; file otherwise you will be committing infinitely :-).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-95788348741785132?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/95788348741785132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2010/09/simple-way-to-get-git-hash-as-version.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/95788348741785132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/95788348741785132'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2010/09/simple-way-to-get-git-hash-as-version.html' title='A simple way to get a git hash as version info into Android applications using Maven'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-4632604858760159656</id><published>2010-07-06T10:57:00.000+02:00</published><updated>2011-02-02T23:48:29.055+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jnlp'/><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><category scheme='http://www.blogger.com/atom/ns#' term='jenkins'/><category scheme='http://www.blogger.com/atom/ns#' term='launchd'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>Really using launchctl to restart a Hudson Mac OS X build slave connected via JNLP automatically</title><content type='html'>In my &lt;a href="http://illegalstateexception.blogspot.com/2010/07/using-launchctl-to-restart-hudson-mac.html"&gt;last posting&lt;/a&gt; I wrote commands put into &lt;tt&gt;$HOME/.launchd.conf&lt;/tt&gt; would be launched automatically after a login as stated by the man page for &lt;tt&gt;launchtctl&lt;/tt&gt;. However this is &lt;strong&gt;false&lt;/strong&gt;! After a reboot or relogin the commands will not be picked up! Stating &lt;a href="http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man5/launchd.conf.5.html"&gt;&lt;tt&gt;man 5 launchd.conf&lt;/tt&gt;&lt;/a&gt;:&lt;br /&gt;
&lt;pre class="command"&gt;$HOME/.launchd.conf  Your launchd configuration file (currently unsupported).
&lt;/pre&gt;
Pulling my ear: always try and test what you write about, sorry :-(. However using the following &lt;tt&gt;.plist&lt;/tt&gt; file put into &lt;br /&gt;&lt;tt&gt;$HOME/Library/LaunchAgents/org.hudson-ci.jnlpslave.plist&lt;/tt&gt; &lt;em&gt;really&lt;/em&gt; starts the slave:&lt;br /&gt;
&lt;pre class="command"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&amp;gt;
&amp;lt;plist version="1.0"&amp;gt;
&amp;lt;dict&amp;gt;
        &amp;lt;key&amp;gt;KeepAlive&amp;lt;/key&amp;gt;
        &amp;lt;true/&amp;gt;
        &amp;lt;key&amp;gt;Label&amp;lt;/key&amp;gt;
        &amp;lt;string&amp;gt;org.hudson-ci.jnlpslave&amp;lt;/string&amp;gt;
        &amp;lt;key&amp;gt;ProgramArguments&amp;lt;/key&amp;gt;
        &amp;lt;array&amp;gt;
                &amp;lt;string&amp;gt;/usr/bin/java&amp;lt;/string&amp;gt;
                &amp;lt;string&amp;gt;-jar&amp;lt;/string&amp;gt;
                &amp;lt;string&amp;gt;/home/hudson/bin/slave.jar&amp;lt;/string&amp;gt;
                &amp;lt;string&amp;gt;-jnlpUrl&amp;lt;/string&amp;gt;
                &amp;lt;string&amp;gt;http://SERVER/hudson/computer/NODE/slave-agent.jnlp&amp;lt;/string&amp;gt;
        &amp;lt;/array&amp;gt;
        &amp;lt;key&amp;gt;RunAtLoad&amp;lt;/key&amp;gt;
        &amp;lt;true/&amp;gt;
&amp;lt;/dict&amp;gt;
&amp;lt;/plist&amp;gt;
&lt;/pre&gt;
Of course you have to adapt the path to your &lt;tt&gt;slave.jar&lt;/tt&gt; as well as the URL to your Hudson-master.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-4632604858760159656?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/4632604858760159656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2010/07/really-using-launchctl-to-restart.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/4632604858760159656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/4632604858760159656'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2010/07/really-using-launchctl-to-restart.html' title='&lt;em&gt;Really&lt;/em&gt; using launchctl to restart a Hudson Mac OS X build slave connected via JNLP automatically'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-6558115083238824917</id><published>2010-07-02T22:33:00.006+02:00</published><updated>2011-02-02T23:48:29.057+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jnlp'/><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><category scheme='http://www.blogger.com/atom/ns#' term='jenkins'/><category scheme='http://www.blogger.com/atom/ns#' term='launchd'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>Using launchctl to restart a Hudson Mac OS X build slave connected via JNLP automatically</title><content type='html'>&lt;p&gt;&lt;strong&gt;&lt;tt&gt;$HOME/launchd.conf&lt;/tt&gt; does not work, see my working &lt;a href="/2010/07/really-using-launchctl-to-restart.html"&gt;followup&lt;/a&gt; on this!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In my company's build infrastructure most of the slaves are located in the same data centre as the master. So we usually just use &lt;tt class="command"&gt;ssh&lt;/tt&gt; to launch the &lt;tt&gt;slave.jar&lt;/tt&gt;. As we did not want to buy &lt;a href="http://www.apple.com/xserve/"&gt;XServe&lt;/a&gt; and our operations team would not like to host such an aberration from the usual (Linux) to build the handful of jobs which are Mac OS X only, we bought a &lt;a href=""&gt;Mac-Mini&lt;/a&gt;, which is part of the workstation LAN, where &lt;tt&gt;hudson&lt;/tt&gt; will login automatically as we need the GUI anyway for Selenium tests.&lt;/p&gt;
&lt;p&gt;As we have very strict firewall rules, access from the server LAN into the workstation LAN is forbidden. That's why we use &lt;a href="http://en.wikipedia.org/wiki/JNLP"&gt;JNLP&lt;/a&gt; to start the &lt;a href="http://wiki.hudson-ci.org/display/HUDSON/Distributed+builds#Distributedbuilds-Launchslaveagentheadlessly"&gt;slave&lt;/a&gt;. So we've usually restarted the slave manually after the connection broke down.&lt;/p&gt;
&lt;p&gt;Enters &lt;a href="http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/launchctl.1.html#//apple_ref/doc/man/1/launchctl"&gt;&lt;tt&gt;launchctl&lt;/tt&gt;&lt;/a&gt;. Instead of fiddling around with a &lt;tt&gt;plist&lt;/tt&gt; file I just used &lt;tt&gt;launchctl submit&lt;/tt&gt; to achieve the same. From the commandline enter the following command:&lt;/p&gt;
&lt;pre class="command"&gt;
launchctl submit -l hudson-slave -- /usr/bin/java -jar /Users/hudson/slave.jar -jnlpUrl http://SERVER:PORT/hudson/computer/NODE/slave-agent.jnlp
&lt;/pre&gt;
&lt;p&gt;This will start the slave and restart it automatically if the connection ever should break down. You may watch the logging statements uttered by the slave by executing &lt;br/&gt;&lt;tt class="command"&gt;open /Applications/Utilities/Console.app&lt;/tt&gt;. &lt;strike&gt;To enable this command every time your Mac OS X machine reboots, create a &lt;tt&gt;.launchd.conf&lt;/tt&gt; in the hudson user's &lt;tt&gt;HOME&lt;/tt&gt; like this:&lt;/strike&gt;&lt;/p&gt;
&lt;pre class="command"&gt;&lt;strike&gt;
cat &amp;gt; /User/hudson/.launchd.conf &amp;lt;&amp;lt; EOF
submit -l hudson-slave -- /usr/bin/java -jar /Users/hudson/slave.jar -jnlpUrl http://SERVER:PORT/hudson/computer/NODE/slave-agent.jnlp
EOF
&lt;/strike&gt;&lt;/pre&gt;
&lt;p&gt;You &lt;strong&gt;must not&lt;/strong&gt; use the &lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/javaws.html"&gt;&lt;tt&gt;javaws&lt;/tt&gt;&lt;/a&gt; way (the &lt;tt&gt;-wait&lt;/tt&gt; option did not work for me), as the parent process will exit after it launched the jnlp connection and &lt;a href="http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man8/launchd.8.html"&gt;&lt;tt&gt;launchd&lt;/tt&gt;&lt;/a&gt; will try to restart it again immediately for some times.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-6558115083238824917?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/6558115083238824917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2010/07/using-launchctl-to-restart-hudson-mac.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/6558115083238824917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/6558115083238824917'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2010/07/using-launchctl-to-restart-hudson-mac.html' title='Using &lt;tt&gt;launchctl&lt;/tt&gt; to restart a Hudson Mac OS X build slave connected via JNLP automatically'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-2746111822641634693</id><published>2010-06-27T20:27:00.002+02:00</published><updated>2011-02-02T23:48:29.058+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='jenkins'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Cross browser CSS and selectors - improving Hudson's viewList</title><content type='html'>&lt;p&gt;After visiting the &lt;a href="http://hudson.jboss.org/hudson/"&gt;JBOSS Hudson&lt;/a&gt; instance with Firefox I really liked the way how the tabs were shown in the viewList. However revisiting the same page with Chrome was a disappointment. Neither was the active view emphasized nor were the inactive views flowing like they did with Firefox.&lt;/p&gt;
&lt;p&gt;After some trials I detected that the &lt;a href="http://www.w3.org/TR/CSS2/selector.html#attribute-selectors"&gt;attribute selectors&lt;/a&gt; in the CSS were not triggered. Digging into element view showed that Chrome did not render a whitespace between the &lt;tt&gt;height attribute&lt;/tt&gt;, so Firefox rendered &lt;tt&gt;tr[style='height: 3px;']&lt;/tt&gt; while Chrome was rendering &lt;tt&gt;tr[style='height:3px;']&lt;/tt&gt;. After duplicating the selectors and changing some attributes for Chrome I got at least the active view rendered in the right way, see &lt;a href="http://s312195779.online.de/hudson/userContent/jboss-style.css/*view*/"&gt;jboss-style.css&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-2746111822641634693?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/2746111822641634693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2010/06/chross-browser-css-and-selectors.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/2746111822641634693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/2746111822641634693'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2010/06/chross-browser-css-and-selectors.html' title='Cross browser CSS and selectors - improving Hudson&apos;s viewList'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-2595123321835195232</id><published>2010-06-18T23:29:00.007+02:00</published><updated>2010-06-21T15:29:42.079+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scm'/><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='dvcs'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='cvs'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Storing your OpenOffice, Xmind, ... zippy documents more efficiently in a SCM</title><content type='html'>I really like having my sourcecode and documents in a &lt;a href="http://en.wikipedia.org/wiki/Source_Code_Management"&gt;SCM&lt;/a&gt; since I first discovered &lt;a href="http://en.wikipedia.org/wiki/Concurrent_Versions_System"&gt;CVS&lt;/a&gt; about 14 years back and introduced it in two companies thereafter, one of which had tried to use &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Visual_SourceSafe"&gt;VSS&lt;/a&gt; (not really usable at the time, you had to lock files for editing which made you call for the VSS admin when your colleague was not available and did not allow to work on the same document at all), while in the other developers only had been using timestamped &lt;a href="http://en.wikipedia.org/wiki/ZIP_(file_format)"&gt;ZIP&lt;/a&gt; files before, which made team work really hard. In my current company I (maybe) made a mistake by pushing the switch from CVS to &lt;a href="http://en.wikipedia.org/wiki/Apache_Subversion"&gt;SVN&lt;/a&gt; about five years ago.&lt;br /&gt;
Back then I took a look at one of the first &lt;a href="http://en.wikipedia.org/wiki/Distributed_Version_Control_System"&gt;DVCS&lt;/a&gt; systems (&lt;a href="http://en.wikipedia.org/wiki/GNU_arch"&gt;arch&lt;/a&gt;) but found it to be to confusing (at least for me, YMMV). About three years ago I discovered &lt;a href="http://en.wikipedia.org/wiki/Mercurial_(software)"&gt;Mercurial&lt;/a&gt; and really have liked it since, especially as I really like &lt;a href="http://en.wikipedia.org/wiki/Python_(programming_language)"&gt;Python&lt;/a&gt;. I tried &lt;a href="http://en.wikipedia.org/wiki/Bazaar_(software)"&gt;Bazaar&lt;/a&gt; as well because it promised better integration with Subversion but it used several different, incompatible repository formats so I had problems even checking out a &lt;em&gt;remote&lt;/em&gt; repository more than once and the speed was not at all convincing as well. Nowadays I use &lt;a href="http://en.wikipedia.org/wiki/Git_(software)"&gt;Git&lt;/a&gt; sometimes which I like as well and I am especially impressed by the simple underlaying &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#the-object-database"&gt;concept of storing things&lt;/a&gt;. However I still feel more comfortable with Mercurial right now and use &lt;a href="http://bitbucket.org/mfriedenhagen"&gt;Bitbucket&lt;/a&gt; a lot.&lt;br /&gt;
After having used DVCS you feel almost crippled by SVNs bad merging support and the idea of having no distinction between branches and tags seems not so clever anymore, we have had some hard times using standard SVN tools after a decision to put release tags in a directory called &lt;tt&gt;releases&lt;/tt&gt; and are sometimes still struggling to find a common point of view on the correct position of &lt;tt&gt;trunk&lt;/tt&gt; and what to store beneath release tags in repositories used by more than one project, so they are unambiguous both for our tooling chain and understandable for humans.&lt;br /&gt;
Well, back to the topic: nowadays a lot of software uses ZIP containers to store their information, which will bloat your SCMs because every new zip is so different from it's ancestor, even if you did only include a single new word, because the compression and a preview picture will make the new version very different from the old one. So I wrote a little &lt;a href="http://bitbucket.org/mfriedenhagen/store_zippies_uncompressed/wiki/Home"&gt;Python script&lt;/a&gt; which will uncompress, delete the included preview and put the remaining files back into an uncompressed ZIP again using the &lt;a href="http://en.wikipedia.org/wiki/ZIP_(file_format)#Compression_methods"&gt;&lt;tt&gt;stored&lt;/tt&gt;&lt;/a&gt; method.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-2595123321835195232?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/2595123321835195232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2010/06/storing-your-openoffice-xmind-zippy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/2595123321835195232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/2595123321835195232'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2010/06/storing-your-openoffice-xmind-zippy.html' title='Storing your OpenOffice, Xmind, ... zippy documents more efficiently in a SCM'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-6609465671994986468</id><published>2010-06-18T22:09:00.006+02:00</published><updated>2011-06-16T14:06:58.956+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scm'/><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='bitbucket'/><category scheme='http://www.blogger.com/atom/ns#' term='jenkins'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='dvcs'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>Triggering Hudson builds with Mercurial hooks - a variation</title><content type='html'>&lt;div&gt;&lt;p&gt;Ashlux writes about &lt;a href="http://www.ashlux.com/wordpress/2010/06/16/triggering-hudson-builds-with-mercurial-hooks/"&gt;triggering Hudson builds with Mercurial hooks&lt;/a&gt; on his blog. The basic hook described is:&lt;/p&gt;
&lt;pre&gt;
[hooks]
changegroup.hudson = curl http://hudson_url/job/project_name/build?delay=0sec
&lt;/pre&gt;
&lt;p&gt;I use this technique as well a lot with two refinements:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I use &lt;tt&gt;polling&lt;/tt&gt; instead of &lt;tt&gt;build&lt;/tt&gt;. So the url is &lt;tt&gt;http://hudson_url/job/project_name/polling&lt;/tt&gt;. This will poll your Mercurial repository and only if something really changed, the build will be triggered.&lt;/li&gt;
&lt;li&gt;Instead of setting up authentication I always use the &lt;tt&gt;TOKEN&lt;/tt&gt; approach described on &lt;a href="http://wiki.hudson-ci.org/display/HUDSON/Remote+access+API"&gt;Remote access API&lt;/a&gt;, so the url gets &lt;tt&gt;http://hudson_url/job/project_name/polling?token=TOKEN&lt;/tt&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Using tokens you do not need to submit any authentication information. &lt;a href="http://bitbucket.org/mfriedenhagen"&gt;Bitbucket&lt;/a&gt; offers a &lt;a href="http://bitbucket.org/help/ServiceIntegration#post"&gt;&lt;tt&gt;POST&lt;/tt&gt;&lt;/a&gt; service which you may use instead of the aforementioned hook. &lt;a href="http://gitbub.com/"&gt;Github&lt;/a&gt; offers a &lt;a href="http://help.github.com/post-receive-hooks/"&gt;similar service&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-6609465671994986468?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/6609465671994986468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2010/06/triggering-hudson-builds-with-mercurial.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/6609465671994986468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/6609465671994986468'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2010/06/triggering-hudson-builds-with-mercurial.html' title='Triggering Hudson builds with Mercurial hooks - a variation'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-4741554206557863109</id><published>2010-05-29T23:38:00.006+02:00</published><updated>2011-06-16T14:06:55.235+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='bitbucket'/><category scheme='http://www.blogger.com/atom/ns#' term='jenkins'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='yui2'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>Fun with Javascript for Hudson</title><content type='html'>&lt;div&gt;&lt;div&gt;Right now, I do not have a lot of experience with Javascript but after having seen some funny stuff done to our internal Bugzilla with a userscript (templates for bugreports patched into the comment field), I decided to give it a try. Sometimes jobs in our internal internal build servers (&lt;a href="http://hudson-ci.org/"&gt;Hudson&lt;/a&gt;) will break over night because of full hard drives e.g. So we created a special view with all failed builds and a Hudson extension to build all jobs in a view.&lt;br /&gt;
&lt;br /&gt;
Now I thought this could be easily accomplished with Javascript as well, so I read a little bit about &lt;a href="http://yuilibrary.com/projects/yui2/"&gt;YUI2&lt;/a&gt;, which is included in Hudson already and came out with my first Javascript extension, which I host on &lt;a href="http://bitbucket.org/mfriedenhagen/hudson_extensions/"&gt;Bitbucket&lt;/a&gt;.&lt;br /&gt;
The &lt;a href="http://bitbucket.org/mfriedenhagen/hudson_extensions/src/666327ec97fb/he-all.js"&gt;source code&lt;/a&gt;:&lt;br /&gt;
&lt;script src="http://bitbucket.org/mfriedenhagen/hudson_extensions/src/d7201d3ca5d6/he-all.js?embed=t"&gt;&lt;/script&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;I just save the script in the &lt;tt&gt;userContent&lt;/tt&gt; folder of Hudson and source it in the description of the view like this:&lt;br/&gt; &lt;tt&gt;&amp;lt;script src="/hudson/userContent/hudson_extensions/he-all.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;/tt&gt;.
&lt;/li&gt;
&lt;li&gt;
First, I attach the initialization with the help of the &lt;a href="http://developer.yahoo.com/yui/docs/YAHOO.util.Event.html"&gt;&lt;tt&gt;YAHOO.util.Event.onDOMReady&lt;/tt&gt;&lt;/a&gt; to the point in time when the whole page is rendered, on my first tries I only collected the links already rendered up to the point where the script was included.&lt;/li&gt;
&lt;li&gt;If any job build links are found (&lt;tt&gt;isBuildHref&lt;/tt&gt;), I render a Build All link.&lt;/li&gt;
&lt;li&gt;When hitting the link, I just iterate over the links (&lt;tt&gt;buildAll&lt;/tt&gt;) and send an &lt;a href="http://developer.yahoo.com/yui/docs/YAHOO.util.Connect.html"&gt;&lt;tt&gt;asyncRequest&lt;/tt&gt;&lt;/a&gt; discarding the result by not specifying a callback function at all to trigger the actual builds.&lt;/li&gt;
&lt;/ul&gt;
Now I already can think of other useful stuff to do with this :-).&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-4741554206557863109?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/4741554206557863109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2010/05/fun-with-javascript-for-hudson.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/4741554206557863109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/4741554206557863109'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2010/05/fun-with-javascript-for-hudson.html' title='Fun with Javascript for Hudson'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-3241362959935003997</id><published>2010-05-22T21:06:00.002+02:00</published><updated>2010-06-18T22:19:12.784+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Command-Tab - Blog Archive - How to Test RAM Under Mac OS X</title><content type='html'>After updating my Macbook from 2GBG to 4GB I ran &lt;a href="http://www.command-tab.com/2008/01/11/how-to-test-ram-under-mac-os-x/"&gt;Command-Tab - Blog Archive - How to Test RAM Under Mac OS X&lt;/a&gt; five times, as the the two blocks I have got first showed artifacts on the screen, now everything is running happily :-),&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-3241362959935003997?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/3241362959935003997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2010/05/command-tab-blog-archive-how-to-test.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/3241362959935003997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/3241362959935003997'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2010/05/command-tab-blog-archive-how-to-test.html' title='Command-Tab - Blog Archive - How to Test RAM Under Mac OS X'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-1159727342992305411</id><published>2010-05-08T10:49:00.004+02:00</published><updated>2010-08-13T19:09:22.761+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cloud server'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='xen'/><category scheme='http://www.blogger.com/atom/ns#' term='lucid'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='hardy'/><title type='text'>Upgrading a 1&amp;1 Dynamic Cloud Server from Ubuntu 8.04 LTS to 10.04 LTS</title><content type='html'>&lt;p&gt;My first try following the instructions &lt;a href="https://help.ubuntu.com/community/LucidUpgrades#Network%20Upgrade%20for%20Ubuntu%20Servers%20(Recommended)"&gt;for Lucid&lt;/a&gt;&amp;nbsp;was not successful, after &lt;tt class="command"&gt;shutdown -r now&lt;/tt&gt; the &lt;a href="http://www.1und1.info/xml/order/CloudDynamicServer"&gt;Dynamic Cloud Server&lt;/a&gt; did not start up again. It is a pity that there is no serial console nor a Rescue or Repair-mode, so I gave it another try...&lt;/p&gt;
&lt;p&gt;After &lt;em&gt;loads&lt;/em&gt; of retries (new initialisation, waiting and another execution of &lt;tt class="command"&gt;do-release-upgrade --devel-release&lt;/tt&gt;) I found the solution in the end:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;While &lt;tt class="command"&gt;do-release-upgrade --devel-release&lt;/tt&gt; updated &lt;em&gt;dhclient&lt;/em&gt; I took the old configuration with &lt;tt class="command"&gt;static-route&lt;/tt&gt;, see &lt;a href="http://www.roysindre.no/a/2009/11/05/dhclient-classless-static-route-bug/"&gt;dhclient: classless static route, bug?&lt;/a&gt; as well.&lt;/li&gt;
&lt;li&gt;As I had no second chance to boot without security, I removed &lt;em&gt;apparmor&lt;/em&gt; (&lt;tt class="command"&gt;apt-get remove apparmor&lt;/tt&gt;), maybe I will install this again after some research.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Most important:&lt;/strong&gt;&amp;nbsp;New Linux-Kernels include a &lt;a href="http://www.debian.org/releases/lenny/i386/release-notes/ch-upgrading.en.html#boot-hangs"&gt;new IDE-driver&lt;/a&gt;, which adresses former &lt;em&gt;hda&lt;/em&gt; devices as &lt;em&gt;sda&lt;/em&gt;, so I changed three things &lt;strong&gt;after the package update but before reboot&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;In &lt;tt class="command"&gt;/boot/grub/menu.lst&lt;/tt&gt; I replaced &lt;tt class="command"&gt;# kopt=root=/dev/hda1 ro console=tty0 console=ttyS0,57600&lt;/tt&gt; with &lt;tt class="command"&gt;# kopt=root=/dev/sda1 ro console=tty0 console=ttyS0,57600&lt;/tt&gt;.&lt;/li&gt;
&lt;li&gt;After that I called &lt;tt class="command"&gt;update-grub&lt;/tt&gt; to update the configuration of grub.&lt;/li&gt;
&lt;li&gt;In &lt;tt class="command"&gt;/etc/fstab&lt;/tt&gt; I replaced all occurrences of &lt;em&gt;hda&lt;/em&gt; with &lt;em&gt;sda&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;Now the server is up and running again :-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-1159727342992305411?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/1159727342992305411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2010/05/upgrading-1-dynamic-cloud-server-from.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/1159727342992305411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/1159727342992305411'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2010/05/upgrading-1-dynamic-cloud-server-from.html' title='Upgrading a 1&amp;1 Dynamic Cloud Server from Ubuntu 8.04 LTS to 10.04 LTS'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5738398436372576429.post-8993362167929072105</id><published>2010-05-08T00:58:00.001+02:00</published><updated>2010-05-08T10:54:14.870+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>What's this all about?</title><content type='html'>After having a &lt;a href="http://unnuetzes.blogspot.com/"&gt;german blog&lt;/a&gt; for some time I now decided to allow myself a second blog, where I will post about technical matters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5738398436372576429-8993362167929072105?l=illegalstateexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://illegalstateexception.blogspot.com/feeds/8993362167929072105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://illegalstateexception.blogspot.com/2010/05/whats-this-all-about.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/8993362167929072105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5738398436372576429/posts/default/8993362167929072105'/><link rel='alternate' type='text/html' href='http://illegalstateexception.blogspot.com/2010/05/whats-this-all-about.html' title='What&apos;s this all about?'/><author><name>Mirko</name><uri>http://www.blogger.com/profile/15357555770760554778</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_cNm7jc-O2rQ/S-SbvQ9ER3I/AAAAAAAAACk/gk5jSjtv_WQ/s1600-R/mirko_avatar.jpeg'/></author><thr:total>0</thr:total></entry></feed>
