<?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>NewInstance &#187; Opinions</title>
	<atom:link href="http://en.newinstance.it/category/opinions/feed/" rel="self" type="application/rss+xml" />
	<link>http://en.newinstance.it</link>
	<description>Welcome to the official blog of Luigi R. Viggiano. Beware of imitations.</description>
	<lastBuildDate>Mon, 09 Jan 2012 20:29:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>I/O Exception handling</title>
		<link>http://en.newinstance.it/2011/11/29/io-exception-handling/</link>
		<comments>http://en.newinstance.it/2011/11/29/io-exception-handling/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 13:53:16 +0000</pubDate>
		<dc:creator>Luigi</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[anti-patterns]]></category>
		<category><![CDATA[exception handling]]></category>
		<category><![CDATA[exceptions]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://en.newinstance.it/?p=1223</guid>
		<description><![CDATA[I very much prefer this approach: OutputStream out = new MyOutputStream(...); //may throw IOException try { //use the stream } finally { out.close(); } than this: OutputStream out = null; try { out = new MyOutputStream(...); //may throw IOException //use the stream } finally { if (out != null) { out.close(); } } I just [...]]]></description>
			<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->I very much prefer this approach:</p>
<pre class="brush:java">
OutputStream out = new MyOutputStream(...); //may throw IOException
try {
    //use the stream
} finally {
    out.close();
}
</pre>
<p>than this:</p>
<pre class="brush:java">
OutputStream out = null;
try {
    out = new MyOutputStream(...); //may throw IOException
    //use the stream
} finally {
    if (out != null) {
        out.close();
    }
}
</pre>
<p>I just find the first example correct and the second incorrect. I see the second &#8216;pattern&#8217; everywhere. </p>
<p>Opinions?
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://en.newinstance.it/2006/11/19/reading-javadocs-from-inside-the-original-zip-file/" rel="bookmark" class="crp_title">Reading Javadocs from inside the original zip file</a></li>
<li><a href="http://en.newinstance.it/2008/06/24/null-is-throwable/" rel="bookmark" class="crp_title">Null is throwable</a></li>
<li><a href="http://en.newinstance.it/2005/11/19/listening-changes-on-a-text-file-unix-tail-implementation-with-java/" rel="bookmark" class="crp_title">Listening changes on a text file (Unix Tail implementation with Java)</a></li>
<li><a href="http://en.newinstance.it/2010/09/10/using-files-in-your-interfaces-is-not-a-good-idea/" rel="bookmark" class="crp_title">Using Files in your interfaces is NOT a good idea</a></li>
<li><a href="http://en.newinstance.it/2006/10/19/automatic-transaction-management-with-pojos/" rel="bookmark" class="crp_title">Automatic transaction management with POJOs</a></li>
</ul>
</div>
<div class="shr-publisher-1223"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F11%2F29%2Fio-exception-handling%2F' data-shr_title='I%2FO+Exception+handling'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F11%2F29%2Fio-exception-handling%2F' data-shr_title='I%2FO+Exception+handling'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F11%2F29%2Fio-exception-handling%2F' data-shr_title='I%2FO+Exception+handling'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --></p>
]]></content:encoded>
			<wfw:commentRss>http://en.newinstance.it/2011/11/29/io-exception-handling/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Checking configuration files inside jars</title>
		<link>http://en.newinstance.it/2011/06/01/checking-configuration-files-inside-jars/</link>
		<comments>http://en.newinstance.it/2011/06/01/checking-configuration-files-inside-jars/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 11:36:36 +0000</pubDate>
		<dc:creator>Luigi</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[hiding]]></category>
		<category><![CDATA[How-To]]></category>
		<category><![CDATA[making things simpler]]></category>
		<category><![CDATA[resources]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[unzip]]></category>
		<category><![CDATA[zip]]></category>

		<guid isPermaLink="false">http://en.newinstance.it/?p=1035</guid>
		<description><![CDATA[Are you habit to have some configuration files packaged inside the jar of your application? If so, you can still have a look at those configuration files in the running environment using the unzip Unix utility. $ unzip -p /opt/myapp/lib/my-app.jar log4j.properties log4j.rootLogger=INFO,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Threshold=INFO log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{dd-MMM hh:mm} [%-5p] %m%n The -p option uncompress and prints [...]]]></description>
			<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->Are you habit to have some configuration files packaged inside the jar of your application? </p>
<p>If so, you can still have a look at those configuration files in the running environment using the unzip Unix utility.</p>
<pre class="brush:bash">
$ unzip -p /opt/myapp/lib/my-app.jar log4j.properties
log4j.rootLogger=INFO,stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=INFO
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{dd-MMM hh:mm} [%-5p] %m%n
</pre>
<p>The -p option uncompress and prints the file content to standard output.</p>
<p>I like to include resource files in the deployable artifact, unless I want those files to be modifiable without repackaging. Hiding most of configuration helps to keep things simpler for the end user, but still those files can be accessed for the technical support.</p>
<p>By the way, the above log4j configuration is the one I used to replace some System.out/System.err in a simple command line based application. I was thinking to remove the date part &#8216;%d{dd-MMM hh:mm}&#8217; and make it look like the output of ant/maven, but then I thought that -after all- the date is quite useful since the application in question is ran by cron redirecting the standard out into a file, so we keep that as a log of the last run, to have some clue in case of errors.</p>
<p><script type="text/javascript">var dzone_url = 'http://java.dzone.com/articles/checking-configuration-files'; var dzone_style = '2';</script><script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script>
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://en.newinstance.it/2010/12/01/android-sdk-2-2_r2-sources/" rel="bookmark" class="crp_title">Android sdk 2.2_r2 sources</a></li>
<li><a href="http://en.newinstance.it/2009/05/07/java-native-compilation/" rel="bookmark" class="crp_title">Java native compilation</a></li>
<li><a href="http://en.newinstance.it/2010/09/10/using-files-in-your-interfaces-is-not-a-good-idea/" rel="bookmark" class="crp_title">Using Files in your interfaces is NOT a good idea</a></li>
<li><a href="http://en.newinstance.it/2011/02/10/eclipse-save-actions/" rel="bookmark" class="crp_title">Eclipse Save Actions</a></li>
<li><a href="http://en.newinstance.it/2011/02/27/how-to-create-a-statically-linked-version-of-git-binaries/" rel="bookmark" class="crp_title">How to create a statically linked version of git binaries</a></li>
</ul>
</div>
<div class="shr-publisher-1035"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F06%2F01%2Fchecking-configuration-files-inside-jars%2F' data-shr_title='Checking+configuration+files+inside+jars'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F06%2F01%2Fchecking-configuration-files-inside-jars%2F' data-shr_title='Checking+configuration+files+inside+jars'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F06%2F01%2Fchecking-configuration-files-inside-jars%2F' data-shr_title='Checking+configuration+files+inside+jars'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --></p>
]]></content:encoded>
			<wfw:commentRss>http://en.newinstance.it/2011/06/01/checking-configuration-files-inside-jars/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fan Control for MacBook</title>
		<link>http://en.newinstance.it/2011/05/25/fan-control-for-macbook/</link>
		<comments>http://en.newinstance.it/2011/05/25/fan-control-for-macbook/#comments</comments>
		<pubDate>Tue, 24 May 2011 23:00:52 +0000</pubDate>
		<dc:creator>Luigi</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://en.newinstance.it/?p=1011</guid>
		<description><![CDATA[If you are an objective MacBook user you may think that those laptops tend to overheat. In case, you may give FanControl a try. If you are an Apple Fan, then it&#8217;s just correct that your keyboard is on fire. Related Posts: Superdrive not working anymore Spam defeated Sharing keyboard and mouse on multiple computers [...]]]></description>
			<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->If you are an objective MacBook user you may think that those laptops tend to overheat. In case, you may give <a href="http://www.lobotomo.com/products/FanControl/">FanControl</a> a try. If you are an Apple Fan, then it&#8217;s just correct that your keyboard is on fire.</p>
<p><a href="http://en.newinstance.it/wp-content/uploads/2011/05/FanControlScreenshot.png"><img src="http://en.newinstance.it/wp-content/uploads/2011/05/FanControlScreenshot.png" alt="FanControl Screenshot" title="FanControlScreenshot" width="748" height="395" class="alignnone size-full wp-image-1012" /></a>
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://en.newinstance.it/2011/08/25/superdrive-not-working-anymore/" rel="bookmark" class="crp_title">Superdrive not working anymore</a></li>
<li><a href="http://en.newinstance.it/2011/07/29/spam-defeated/" rel="bookmark" class="crp_title">Spam defeated</a></li>
<li><a href="http://en.newinstance.it/2010/05/03/sharing-keyboard-and-mouse-on-multiple-computers/" rel="bookmark" class="crp_title">Sharing keyboard and mouse on multiple computers</a></li>
<li><a href="http://en.newinstance.it/2011/02/10/eclipse-save-actions/" rel="bookmark" class="crp_title">Eclipse Save Actions</a></li>
<li><a href="http://en.newinstance.it/2008/10/01/time-to-buy-a-new-laptop/" rel="bookmark" class="crp_title">Time to buy a new laptop</a></li>
</ul>
</div>
<div class="shr-publisher-1011"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F05%2F25%2Ffan-control-for-macbook%2F' data-shr_title='Fan+Control+for+MacBook'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F05%2F25%2Ffan-control-for-macbook%2F' data-shr_title='Fan+Control+for+MacBook'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F05%2F25%2Ffan-control-for-macbook%2F' data-shr_title='Fan+Control+for+MacBook'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --></p>
]]></content:encoded>
			<wfw:commentRss>http://en.newinstance.it/2011/05/25/fan-control-for-macbook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java Hangs When Converting 2.2250738585072012e-308</title>
		<link>http://en.newinstance.it/2011/02/03/java-hangs-when-converting-2-2250738585072012e-308/</link>
		<comments>http://en.newinstance.it/2011/02/03/java-hangs-when-converting-2-2250738585072012e-308/#comments</comments>
		<pubDate>Thu, 03 Feb 2011 14:55:55 +0000</pubDate>
		<dc:creator>Luigi</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[bug]]></category>

		<guid isPermaLink="false">http://en.newinstance.it/?p=966</guid>
		<description><![CDATA[Just discovered an interesting bug in Java interpreter and compiler, that makes them hang when converting the value 2.2250738585072012e-308. Nice to know. The bug has been reported to Oracle, but I supposed they will include this in their collection of bugs and sell it as &#8220;Oracle Database 12g&#8221; product. :-) Related Posts: Lady Java Oracle [...]]]></description>
			<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->Just discovered an interesting <a href="http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/">bug</a> in Java interpreter and compiler, that makes them hang when converting the value 2.2250738585072012e-308.</p>
<p>Nice to know.</p>
<p>The bug has been reported to Oracle, but I supposed they will include this in their collection of bugs and sell it as &#8220;Oracle Database 12g&#8221; product. :-)
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://en.newinstance.it/2010/08/31/lady-java/" rel="bookmark" class="crp_title">Lady Java</a></li>
<li><a href="http://en.newinstance.it/2007/07/05/oracle-workarounds-use-jdk-14/" rel="bookmark" class="crp_title">Oracle workarounds: use JDK 1.4</a></li>
<li><a href="http://en.newinstance.it/2005/06/29/jug-torino-at-javaconference-italy/" rel="bookmark" class="crp_title">Jug Torino at JavaConference (Italy)</a></li>
<li><a href="http://en.newinstance.it/2011/05/26/jaxb-tip-one-line-of-code-to-marshall-and-unmarshall-xml/" rel="bookmark" class="crp_title">JAXB Tip: one line of code to marshall and unmarshall xml.</a></li>
<li><a href="http://en.newinstance.it/2008/07/02/disappointed-by-ganymede/" rel="bookmark" class="crp_title">Disappointed by Ganymede</a></li>
</ul>
</div>
<div class="shr-publisher-966"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F02%2F03%2Fjava-hangs-when-converting-2-2250738585072012e-308%2F' data-shr_title='Java+Hangs+When+Converting+2.2250738585072012e-308'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F02%2F03%2Fjava-hangs-when-converting-2-2250738585072012e-308%2F' data-shr_title='Java+Hangs+When+Converting+2.2250738585072012e-308'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F02%2F03%2Fjava-hangs-when-converting-2-2250738585072012e-308%2F' data-shr_title='Java+Hangs+When+Converting+2.2250738585072012e-308'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --></p>
]]></content:encoded>
			<wfw:commentRss>http://en.newinstance.it/2011/02/03/java-hangs-when-converting-2-2250738585072012e-308/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unit test naming conventions</title>
		<link>http://en.newinstance.it/2011/01/28/unit-test-naming-conventions/</link>
		<comments>http://en.newinstance.it/2011/01/28/unit-test-naming-conventions/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 20:46:13 +0000</pubDate>
		<dc:creator>Luigi</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[naming conventions]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[unit testing]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://en.newinstance.it/?p=943</guid>
		<description><![CDATA[There are a certain number of naming conventions used for unit tests. At beginning, with JUnit 3, to define a test it was mandatory that the class name was named like MyClassTest, be extending from TestCase and all the test method names were starting with &#8216;test&#8217; as in &#8216;testMyMethod()&#8217;. I think that this is a [...]]]></description>
			<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->There are a certain number of naming conventions used for unit tests. At beginning, with JUnit 3, to define a test it was mandatory that the class name was named like MyClassTest, be extending from TestCase and all the test method names were starting with &#8216;test&#8217; as in &#8216;testMyMethod()&#8217;. I think that this is a good example of convetion over configuration.<br />
With JUnit 4 (or TestNG) this is nomore mandatory and it leaves the developer free to define his own naming convention. But then you &#8220;configure&#8221; the metod as a test using the annotation @Test.</p>
<p>There is a naming convention defined by <a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development">BDD</a> which says that the test class and the test methods should describe the behavior you want to verify. </p>
<p>Examples:</p>
<p>having the test methods starting with should</p>
<pre class="brush:java">
public class WhenWindowControlCloseWindow {

    @Test
    public void shouldCloseWindows() {
         //...
    }
}
</pre>
<p>Or as in this example (from <a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development">wikipedia</a>), which also uses comments to describe the test: given/when/then:</p>
<pre class="brush:java">
public class WindowControlBehavior {
    @Test
    public void shouldCloseWindows() {

        // Given
        WindowControl control = new WindowControl("My AFrame");
        AFrame frame = new AFrame();

        // When
        control.closeWindow();

        // Then
        ensureThat(!frame.isShowing());
    }
}
</pre>
<p>or another convention I saw:</p>
<pre class="brush:java">
public class WindowControlShould {
    @Test
    public void closeWindows() {
       //...
    }
}
</pre>
<p>The problem here is that you have 3 elements in a test: the &#8216;entity&#8217; subject of the test (usually a class name), the condition (&#8216;when calling some method with some specific parameters), and the expected result, that as we saw in BDD with the &#8220;<em>should</em>DoSomething&#8221; method name. So the problem is that with the class name and the method name we only have two elements to describe our test.<br />
To express the 3rd &#8216;entity&#8217; of the phrase, I tried to use inner classes to define tests like this:</p>
<pre class="brush:java">
public class WindowControl
    public static class WhenCloseWindow {
        @Test
        public void shouldCloseWindows() {
            //...
        }
    }
}
</pre>
<p>But it isn&#8217;t supported by JUnit4. </p>
<p>I thought that packages might help, like specifying them as </p>
<pre class="brush:java">
package com.mycompany.blah.blah.windowcontrol;
public static class WhenCloseWindow {
    @Test
    public void shouldCloseWindows() {
        //...
    }
}
</pre>
<p>But in this way you lose the possibility to invoke <tt>default</tt> and <tt>package</tt> accessible methods, which is a thing that I quite like in my tests.</p>
<p>My feeling now is that first the test methods were identified by a naming convention. Then with the annotation, the convention has been left to the developer to choose, or even the choice to not have a convention at all. The annotation, for me is more close to a configuration thing, which is replacing a convention; a sort of counter-tendency in the trend of convention over configuration paradigm. So if we start to call our test method <em>should</em>Something() are we not going back to the old convention <em>test</em>Something() ?<br />
Well I liked the conventions used in JUnit 3 and I don&#8217;t really see big improvements in using the annotations, or being free from extending the TestCase class, which was providing the <em>assert</em>* methods: with JUnit4 we have to static import those methods from the class Assert; I don&#8217;t see it as an improvement.<br />
My taste is that, if we can&#8217;t easily find a descriptive naming convention for what we are testing, relying on some comments could be the best thing. The example above &#8211; the one coming from wikipedia &#8211; is in fact using a naming convention <em>plus</em> some comments in the code. I think that using a comment on top of the method would have served better the purpose of describing the test.</p>
<p>Finally, some continuous integration tools are able to format the test names (class + method) to show a sentence describing the test nicely in natural English language.<br />
That is cool, but since we have the @Test annotation already there to configure the test, why not having a descriptive attribute that can be used from reporting tools, like: </p>
<pre class="brush:java">
@Test(description="when WindowController.closeWindow() is invoked the window is closed")
public void testCloseWindow() {
    //...
}
</pre>
<p>Or, since I criticized the @Test annotation, a short java comment would have sorted the same purpose for the tools willing to describe the test with a plain English description.</p>
<p>Since there isn&#8217;t around a really good naming convention for tests, since I don&#8217;t see real improvements using annotations and static imports&#8230; I think that JUnit 3 was doing right.</p>
<p>What do you think?<br />
<script type="text/javascript">var dzone_url = 'http://java.dzone.com/articles/unit-test-naming-conventions'; var dzone_style = '2';</script><script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script>
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://en.newinstance.it/2008/11/04/dynamic-tests-with-junit-3/" rel="bookmark" class="crp_title">Dynamic tests with JUnit 3</a></li>
<li><a href="http://en.newinstance.it/2005/12/07/unit-testing-internal-object-state/" rel="bookmark" class="crp_title">Unit Testing internal object state</a></li>
<li><a href="http://en.newinstance.it/2009/03/27/mocking-jndi/" rel="bookmark" class="crp_title">Mocking JNDI</a></li>
<li><a href="http://en.newinstance.it/2010/09/07/workaround-to-multi-threaded-testing/" rel="bookmark" class="crp_title">Workaround to multi threaded testing</a></li>
<li><a href="http://en.newinstance.it/2005/06/07/stringbuffer-considered-harmuful/" rel="bookmark" class="crp_title">StringBuffer considered harmuful</a></li>
</ul>
</div>
<div class="shr-publisher-943"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F01%2F28%2Funit-test-naming-conventions%2F' data-shr_title='Unit+test+naming+conventions'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F01%2F28%2Funit-test-naming-conventions%2F' data-shr_title='Unit+test+naming+conventions'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F01%2F28%2Funit-test-naming-conventions%2F' data-shr_title='Unit+test+naming+conventions'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --></p>
]]></content:encoded>
			<wfw:commentRss>http://en.newinstance.it/2011/01/28/unit-test-naming-conventions/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>AppStore, Playstation Store and the forced language</title>
		<link>http://en.newinstance.it/2011/01/13/appstore-playstation-store-and-the-forced-language/</link>
		<comments>http://en.newinstance.it/2011/01/13/appstore-playstation-store-and-the-forced-language/#comments</comments>
		<pubDate>Thu, 13 Jan 2011 13:03:34 +0000</pubDate>
		<dc:creator>Luigi</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[appstore]]></category>
		<category><![CDATA[playstation]]></category>
		<category><![CDATA[playstation network]]></category>
		<category><![CDATA[playstation store]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[sony]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://en.newinstance.it/?p=934</guid>
		<description><![CDATA[Dear Apple, dear Sony, dear stupid "international" company willing to sell me stuff through internet... the fact that, in this period of my life, I am living in Germany and I own a German credit card, doesn't mean that I can perfectly understand German. So why there is no way to change the language in [...]]]></description>
			<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->Dear Apple, dear Sony, dear stupid "international" company willing to sell me stuff through internet...</p>
<p>the fact that, in this period of my life, I am living in Germany and I own a German credit card, doesn't mean that I can perfectly understand German. So why there is no way to change the language in your store applications to English or Italian?<br />
It's so difficult to understand?</p>
<p>I bought my Mac in Germany and I requested an international keyboard. And I also use English on my laptop, because even if I am Italian native speaker, I prefer to use English on my computer. And... I was doing the same when I was living in Italy and Switzerland. The same question may be posed to the laptop sellers: why, if I buy a laptop in Germany I have to stick to local Windows language and keyboard layout? What is so difficult to understand in the fact that users may like to choose the language to use for programs and hardware they buy?</p>
<p>How am I supposed to buy anything from a website which doesn't speak my language? Even living in Germany I can use my internet banking in English: does this sounds strange to your company? In which century are you guys living? May I expect that an internet service speaks a second language despite <em>where</em> I live, or from <em>where</em> I pay?</p>
<p>Thanks.
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://en.newinstance.it/2008/10/14/how-to-save-70-euro-booking-your-flight-with-lufthansa/" rel="bookmark" class="crp_title">How to save 70 euro booking your flight with Lufthansa</a></li>
<li><a href="http://en.newinstance.it/2007/08/06/in-needing-of-dictionaries-for-reading-blogs/" rel="bookmark" class="crp_title">In needing of dictionaries for reading blogs</a></li>
<li><a href="http://en.newinstance.it/2008/06/18/a-calculator-at-the-command-line/" rel="bookmark" class="crp_title">A calculator at the command line</a></li>
<li><a href="http://en.newinstance.it/2005/06/16/joel-on-software-book/" rel="bookmark" class="crp_title">Joel on Software Book</a></li>
<li><a href="http://en.newinstance.it/2010/10/03/working-in-zurich/" rel="bookmark" class="crp_title">Working in Zürich</a></li>
</ul>
</div>
<div class="shr-publisher-934"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F01%2F13%2Fappstore-playstation-store-and-the-forced-language%2F' data-shr_title='AppStore%2C+Playstation+Store+and+the+forced+language'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F01%2F13%2Fappstore-playstation-store-and-the-forced-language%2F' data-shr_title='AppStore%2C+Playstation+Store+and+the+forced+language'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2011%2F01%2F13%2Fappstore-playstation-store-and-the-forced-language%2F' data-shr_title='AppStore%2C+Playstation+Store+and+the+forced+language'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --></p>
]]></content:encoded>
			<wfw:commentRss>http://en.newinstance.it/2011/01/13/appstore-playstation-store-and-the-forced-language/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Working in Zürich</title>
		<link>http://en.newinstance.it/2010/10/03/working-in-zurich/</link>
		<comments>http://en.newinstance.it/2010/10/03/working-in-zurich/#comments</comments>
		<pubDate>Sun, 03 Oct 2010 18:20:15 +0000</pubDate>
		<dc:creator>Luigi</dc:creator>
				<category><![CDATA[Life, universe and everything]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[international]]></category>
		<category><![CDATA[job]]></category>
		<category><![CDATA[switzerland]]></category>
		<category><![CDATA[working]]></category>
		<category><![CDATA[zurich]]></category>

		<guid isPermaLink="false">http://en.newinstance.it/?p=881</guid>
		<description><![CDATA[I've spent last 3 months working on Zürich, so here I am going to share my experience as I did previously about Düsseldorf. I moved in Zürich with my girlfriend after having found a job in a bank. Switzerland is famous to have a low unemployment rate, and Zurich is known to be an international [...]]]></description>
			<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><span style="float:right; margin-left: 10px;"><script type="text/javascript">var dzone_url = 'http://en.newinstance.it/2010/10/03/working-in-zurich/'; var dzone_style = '1';</script><script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script></span>I've spent last 3 months working on Zürich, so here I am going to share my experience as I did previously about <a href="http://en.newinstance.it/2010/06/03/working-in-dusseldorf/">Düsseldorf</a>.</p>
<p>I moved in Zürich with my girlfriend after having found a job in a bank. Switzerland is famous to have a low unemployment rate, and Zurich is known to be an international city. <a href="http://www.mercer.com/articles/quality-of-living-survey-report-2010">Mercers Quality of Living surveys</a> indicates Zürich as 2nd best place in the world. So we thought that moving from Düsseldorf to Zürich would be a good choice and we was expecting an internationals friendly living. It was <strong>NOT</strong> so. Definitely.</p>
<p>I have to precise that I was not living in Zürich center, but in a couple of near villages: Opfikon and Kloten. In this area in fact there are many international companies headquarters. </p>
<h4>About Zürich</h4>
<p>Zürich is a very beautiful city. I've visited a couple of time, and it was pleasant.</p>
<p><object width="400" height="300"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157624674205974%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157624674205974%2F&#038;set_id=72157624674205974&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157624674205974%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157624674205974%2F&#038;set_id=72157624674205974&#038;jump_to=" width="400" height="300"></embed></object></p>
<p>To visit the city you have to use public transportation, as finding a park is very difficult and expensive. </p>
<p>After 5:30pm all the shops and grocery shops are closed, and after 10:30pm it may be hard also to find a restaurant. </p>
<h4>Everyday life</h4>
<p><strong>Parking.</strong><br />
Once you cross the border of Switzerland, all the parking are private or for pay, even when you go to the supermarket, prepare to pay for the park.<br />
If you need to use the car to go to work, you need a park place on your office (mine was costing 70 CHF/month) and a park under your home (60 CHF). The flats are usually rent with park place facility for additional money.</p>
<p><strong>Public Transportation, Streets and Places to visit.</strong><br />
Streets in Switzerland are the most crazy I've ever seen: it looks like they have been designed by some psychomaniac that has in hate all the drivers. I've found myself in serious troubles all the times I've been driving from Italy to Germany and back, on the mountains, but also on the streets it's very easy to get lost or to get the wrong direction, even if you are using a navigator.<br />
If you go out on the evening for an English movie (at <a href="http://www.qype.com/place/580899-Abaton-Zuerich/photos/1752243">Abaton</a> for example), you may find yourself lost in some very bad looking streets. Every time I had to take a car to move somewhere I was feeling bad for the crazy roads. Nevertheless, there are nice places to visit near Zurich that worth the pain to take the car and face the crazy streets. I recommend a visit in <a href="http://en.wikipedia.org/wiki/Rhine_Falls">Rhine Falls</a>, <a href="http://en.wikipedia.org/wiki/Rapperswil">Rapperswil</a> and <a href="http://en.wikipedia.org/wiki/K%C3%BCssnacht">Küssnacht</a>.</p>
<p><object width="250" height="150"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157624603629534%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157624603629534%2F&#038;set_id=72157624603629534&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157624603629534%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157624603629534%2F&#038;set_id=72157624603629534&#038;jump_to=" width="250" height="150"></embed></object><object width="250" height="150"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157624934437168%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157624934437168%2F&#038;set_id=72157624934437168&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157624934437168%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157624934437168%2F&#038;set_id=72157624934437168&#038;jump_to=" width="250" height="150"></embed></object></p>
<p>Switzerland is full of nature and beautiful places to visit. But be aware that, especially in winter time, with the snow, you may find yourself in difficult places with your car, or you may get lost while traveling because of the strange roads you'll find. What I was doing, when lost, is to select some nearest touristic place listed in my tomtom point of interest, and proceeding to an alternative adventure.<br />
Regarding the traveling, in the mountain regions, I suggest to avoid the night, as some roads and tunnels get closed and there will be no alternative directions indicated on the signs. Then, you can easily get lost in some mountain streets away from the civilization. In the dark those streets may be dangerous to drive, unless you know your directions very well. Navigators might not be very helpful in those scenarios, as the tend to drive you in some lost and unsafe streets.<br />
Trains and bus are quite good, but not always clean. And expensive. But they are the best way to move to Zürich, and possibly in the near areas.</p>
<p><strong>Accomodation.</strong><br />
If you are thinking to get a flat before moving to Zürich using internet and phone, forget about it. It is impossible.<br />
In Zürich and in the near villages, you have to look for an apartment for months before succeeding. I've been sending about 30 application to agencies in order to obtain a flat. It took <em>only</em> 3 months, for <em>only</em> 1500 CHF. And it was unfurnished and in a little village called Opfikon. Believe me, it was a very good deal compared to the average flats there!<br />
In the meantime I've been living in a hotel, then in a residence, and finally in temporary flat. When I finally managed to get an unfurnished flat, it was time to leave Switzerland (the reason at the end of this article).</p>
<p>In Switzerland I've been always asked to pay hotels and residences in advance. And when I left the places early, they always rejected to refund the unspent days. So, be aware that you will never get the money back if you leave early. </p>
<p>The hotel I've been living in is <a href="http://www.railwaygastro.ch/">Glattbrugg Bahnhof Hotel</a>. It is the cheapest hotel in the area, with internet for free, if you are lucky to receive the signal in your room, and was very close to my workplace. The restaurant is good, but the rooms are quite pathetic. I don't recommend to you, but for short period, if you don't have high expectations, or you like the rustic style, it may be ok for sometime. </p>
<p><a href="http://www.apartments-swiss-star.ch/">Swiss Star Apartments</a> was the residence where I've been living for a month. It is quite expensive, but the rooms are nice and comfortable, there is good internet connection in all the rooms, laundry facility for free, and you can reserve your room with a phone call and get the key when you reach the place. Again, if you leave early, forget about getting the money back... I lost there a lot of money as I left some weeks in advance when I found a another temporary accommodation. </p>
<p>There are a couple of web sites where to search for flat for rent; the most common are <a href="http://www.homegate.ch/">homegate</a> and <a href="http://www.immoscout24.ch/">immoscout24</a>. Here you can find many flats, but don't think it's an easy task!<br />
First: to apply for an unfurnished flat, be prepared to pay minimum 1500 CHF with 3 months caution in advance, and to sign a contract chaining you to leave after long periods and in specific months of the year.<br />
Second: when you visit the apartment it's not uncommon to find a queue of 10-20 or more person in queue. You will obtain an application form where you have to fill your own details, including references from the previous landlords, your pets, the instruments you like to play, and sometimes your income.<br />
Third: be prepared to provide additional documents to prove you are a good guy: crime record, solvency statement, work contract, residence permit, bank balance, etc. For all the documents you will need to pay and they will not be cheap.<br />
Then you just need to pray that somebody is willing to rent the apartment to a foreigner, which is not always the case. Swiss citizens are, of course, preferred over foreigners, as agencies believe that they are willing to stay longer in their apartments.</p>
<p>Oh yes: to obtain a super expensive unfurnished flat for rent, it's quite an adventure. Good luck...</p>
<p><strong>Language.</strong><br />
Grüezi! German is the official language in Zürich, even if it's different from the German spoken in Germany. It sounds different, and the words they use are also different. It's quite easy to find people speaking Italian, and sometimes French. English is also quite widely spoken in Zürich city, but not always welcome in the little villages in the near.<br />
Around the borders and in Zürich the Euro currency is welcome, but be prepared to be charged A LOT for the change.</p>
<p><strong>Food.</strong><br />
Restaurants and breakfasts are <strong>very</strong> expensive. In Opfikon I can recommend you a Mexican restaurant called <a href="http://www.by-khalid.ch/wo_sind_wir.html">Casa Alegria</a> and a Chinese restaurant called <a href="http://www.peking-garden.ch/">Peking Garden</a>. For the pizza, the <a href="http://www.railwaygastro.ch/restaurant.html">Banhof Hotel Restaurant</a> has been the best. </p>
<p><strong>Services</strong><br />
I've been using a Sunrise prepaid SIM. Mobile internet is expensive, and also mobile calls are not cheap. During my stay in a temporary flat, I've used Swisscom Internet connection: quite slow, and they throttle down the speed when you try to download torrents, it becomes totally unusable.</p>
<p><strong>Job</strong><br />
There are many international companies in Zürich, banks, and a technical headquarter by Google. </p>
<p>If you are not an EU citizen, it may be very hard to get a job in Switzerland. Even if there are many IT positions, the immigration policy is very strict for non-EU citizens. I and my girlfriend registered in the Opfikon offices for a residence permit. I got my permit after a week or so as I am Italian. My girlfriend got a rejection from the immigration authorities asking to leave the country at the end of the 3rd month. Even if she was having many companies interested to hire her, they couldn't do anything without a work permit issued by the immigration authority.<br />
I've been talking to the immigration employees and several lawyers specialized in the field, but there was nothing to do.<br />
Companies willing to hire an non-EU citizen are subject to a law that mandates them to demonstrate to the government that they cannot find any person fitting the position in the whole Europe. And this is as difficult as it sounds, as this is seriously applied.</p>
<p>I don't agree very much with the mentioned survey that is placing Zürich on the 2nd place for quality of living. For me, the life in Zürich has been quite hard and difficult.</p>
<p>And this is why we decided to go back to Düsseldorf. And we are happy to be back.<br />
Dear Zürich: so long and thanks for all the fish.
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://en.newinstance.it/2010/06/03/working-in-dusseldorf/" rel="bookmark" class="crp_title">Working in Düsseldorf</a></li>
<li><a href="http://en.newinstance.it/2008/11/10/wassup-yesterday-and-today/" rel="bookmark" class="crp_title">Wassup yesterday and today</a></li>
<li><a href="http://en.newinstance.it/2008/07/17/secure-storage-in-ganymede-is-forced-paranoia/" rel="bookmark" class="crp_title">&#8220;Secure Storage&#8221; in Ganymede is forced paranoia</a></li>
<li><a href="http://en.newinstance.it/2009/01/06/reinventing-the-wheel/" rel="bookmark" class="crp_title">Reinventing the wheel.</a></li>
<li><a href="http://en.newinstance.it/2010/05/03/sharing-keyboard-and-mouse-on-multiple-computers/" rel="bookmark" class="crp_title">Sharing keyboard and mouse on multiple computers</a></li>
</ul>
</div>
<div class="shr-publisher-881"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2010%2F10%2F03%2Fworking-in-zurich%2F' data-shr_title='Working+in+Z%C3%BCrich'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2010%2F10%2F03%2Fworking-in-zurich%2F' data-shr_title='Working+in+Z%C3%BCrich'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2010%2F10%2F03%2Fworking-in-zurich%2F' data-shr_title='Working+in+Z%C3%BCrich'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --></p>
]]></content:encoded>
			<wfw:commentRss>http://en.newinstance.it/2010/10/03/working-in-zurich/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Working in Düsseldorf</title>
		<link>http://en.newinstance.it/2010/06/03/working-in-dusseldorf/</link>
		<comments>http://en.newinstance.it/2010/06/03/working-in-dusseldorf/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 20:40:10 +0000</pubDate>
		<dc:creator>Luigi</dc:creator>
				<category><![CDATA[Life, universe and everything]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[Düsseldorf]]></category>
		<category><![CDATA[job]]></category>
		<category><![CDATA[living abroad]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[working abroad]]></category>

		<guid isPermaLink="false">http://en.newinstance.it/?p=560</guid>
		<description><![CDATA[I've been working in Düsseldorf for some years and now I am leaving because I got job elsewhere. But before I want to share my experience and some tips that could be useful to people working (or planning to work) abroad, and in particular in this geographical area. About Düsseldorf Düsseldorf is a wonderful place, [...]]]></description>
			<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><span style="float:right; margin-left: 10px;"><script type="text/javascript">var dzone_url = 'http://en.newinstance.it/2010/06/03/working-in-dusseldorf/'; var dzone_style = '1';</script><script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script></span>I've been working in Düsseldorf for some years and now I am leaving because I got job elsewhere. But before I want to share my experience and some tips that could be useful to people working (or planning to work) abroad, and in particular in this geographical area. </p>
<h4>About Düsseldorf</h4>
<p>Düsseldorf is a wonderful place, I loved it since the beginning. The city is awesome, tidy and safe. You can survive pretty well without speaking a single word of German: in the center of the city (the "Altstadt" = "the old city" ) almost everyone speaks English. People are warm and hospitable, food is great and there are many options for trying different cooking cultures. </p>
<p>There are many activities during the year: from carnivals, art exhibitions, concerts, fairs, sports, etc. For ordinary evening pubs and music clubs are open till late everyday, and the streets of the center are filled with people normally until 1:00am.</p>
<p>The weather is quite cold but it is OK during Summer, and if you are lucky also on springtime you can enjoy some sunny days. If you have a car there are plenty of cities and parks in the surrounding that deserve to be visited.</p>
<p><object width="250" height="188"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157623673896128%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157623673896128%2F&#038;set_id=72157623673896128&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157623673896128%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157623673896128%2F&#038;set_id=72157623673896128&#038;jump_to=" width="250" height="188"></embed></object><object width="250" height="188"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157623686152638%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157623686152638%2F&#038;set_id=72157623686152638&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157623686152638%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157623686152638%2F&#038;set_id=72157623686152638&#038;jump_to=" width="250" height="188"></embed></object></p>
<p>Mercer HR firm makes a <a href="http://www.mercer.com/qualityoflivingpr#Europe">survey</a> about best city where to live, and they placed Düsseldorf at 6th position for the quality of living. I don't know if Düsseldorf is so great to deserve that placement, but for sure I enjoyed living here in the past years and, given my limited knowledge of the world, this is for sure the best place where I have been living.</p>
<p>Now, let me go in detail and make an analysis on some key points about living and working here.</p>
<h4>Job</h4>
<p>I start from the job topic, because it was the driving reason that lead me here, and for sure it is important to anyone to get a job in the place where he's going to move.<br />
The reason why you may consider to work in Germany are several: from the working culture to the higher salaries, that are competitive with the UK job market (double, if compared to Italy). With Switzerland Holland and UK, Germany can probably offer the highest salaries for workers of the IT industry. </p>
<p><strong>Firms.</strong> There are several international firms that establishing their headquarters in Düsseldorf. Strongest industries that lead the local economy focus in telecommunication, finance, fashion and trade. Some well known names are Vodafone (that was my employer), Nokia, Ericcson, Metro Group, Henkel, Tissen Krupp. </p>
<p>I saw also that Google has offices in Graf Adolf Platz 15 in the "GAP 15" tower, but afaik they are marketing division. In the same building you find other well known companies like <a href="http://www.ey.com/">Ernst &#038; Young</a> and <a href="http://www.harveynash.com/">Harvey Nash</a>. </p>
<p><img src="http://en.newinstance.it/wp-content/uploads/2010/06/gap-150x150.jpg" alt="The &quot;GAP 15&quot; tower in Graf-Adolf-Platz 15" title="The &quot;GAP 15&quot; tower in Graf-Adolf-Platz 15" width="150" height="150" class="size-thumbnail wp-image-563" /></p>
<p><strong>Vodafone.</strong> I've been working for <a href="http://www.vodafone.com">Vodafone Global</a> for some years trough a recruiting company. The "global" Vodafone has not be confused with the German OpCo, which is totally a different company, and of which I don't know much about. My experience with Vodafone Global is pretty positive: the work was interesting, the people I met there was great. Vodafone Global from the internal looks like a UK company: official language is English, result oriented, international teams. Work pressure is sustainable, as consultant you cannot benefit of the facilities offered to employees and the difference of treatment is quite evident, as well as infrastructures offered to consultants sometime give some headache, but everything in the norm considering the size of the organization.<br />
The offices are positioned in the center of the city near a beautiful lake, in Berger Allee at the corner with Horionplatz. In the sunny day, lunch time it's a good chance to visit the Altstadt (old city) and some of the local restaurants where, at reasonable prices, you can get very good meals.</p>
<p><img src="http://en.newinstance.it/wp-content/uploads/2010/06/Vodafone-150x150.png" alt="Vodafone Tower" title="Vodafone Tower" width="150" height="150" class="alignnone size-thumbnail wp-image-657" /></p>
<p>Vodafone hires direct employees through this website: <a href="http://careers.peopleclick.com/careerscp/client_vodafone/extgroup/search.do">Opportunities at Vodafone</a>. For contractors there are many companies doing staffing and recruiting, but the prime contractor is <a href="http://www.alexandermannsolutions.com/">AMS</a>, afaik they publish job offers on <a href="http://www.jobsite.co.uk">http://www.jobsite.co.uk</a> and other job sites.</p>
<p><strong>Job Hunting.</strong> Recently I've been looking for job offers in several sites and recruitment agency. For the ones interested in finding a job in Europe, following links are my bookmarks. I'm not recommending, taking responsibility or providing referees to those agencies: I'm just listing some possibly useful links.</p>
<p>Job sites:<br />
<a href="http://www.jobserve.com">JobServe</a>, <a href="http://www.jobsite.co.uk">JobSite</a>, <a href="http://www.jobsearch.co.uk">JobSearch</a>, <a href="http://www.cwjobs.co.uk">CWJobs</a>, <a href="http://www.jobs.ch">Jobs.ch</a></p>
<p>International IT Recruitment Agencies:<br />
<a href="http://www.hays.com">Hays IT</a>, <a href="http://www.alexandermannsolutions.com">Alexander Mann Solutions</a>, <a href="http://www.huxley.com">Huxley</a>, <a href="http://www.elanit.com">Elan-IT</a>, <a href="http://www.novate-it.co.uk">Novate IT</a>, <a href="http://www.computerpeople.co.uk">Computer People</a>, <a href="http://www.computerfutures.com">Computer Futures</a>, <a href="http://www.kingston-consulting.com">Kingstone Consulting</a>, <a href=" http://www.randstadtechnologies.com">Randstad Technologies</a>, <a href="http://www.hurstuk.com">Hurst UK</a>, <a href="http://www.spring-technology.com">Spring Technology</a>, <a href="http://www.mdaresources.com">MDA Resources</a>, <a href="http://www.venngroup.com">Venn Group</a>, <a href="http://www.capitaresourcing.co.uk">Capita Resourcing</a>, <a href="http://www.access.de">Access DE</a>, <a href="http://www.absolventa.com">Absolventa (Germany)</a></p>
<p>Professional social networks can be also very helpful in finding a job. <a href="http://www.linkedin.com">LinkedIn</a> is a must, I've many friends using <a href="http://www.plaxo.com/">Plaxo</a>, but in Germany <a href="http://www.xing.com/">Xing</a> is for sure one of the most popular.</p>
<h4>Everyday life</h4>
<p><strong>Public transportation.</strong> Public transportation in Düsseldorf is very efficient but quite expensive. If you choose to live far from the city, let's say in the country, you may discover that after 8pm there are no more bus to bring you at home. Taxi are not very expensive.<br />
I've not used public transportation very much. But I strongly suggest you to get a bike, as the city is very bike friendly.</p>
<p><strong>Accommodation.</strong> In the country houses are cheaper, you can have a park in the backyard and live surrounded by the green. Very beautiful and quiet (take in mind that cities like Meerbusch and Lörick are near the Airport) , but not very convenient if you are young and you need flexibility on working hours, or if you simply like to be in the city for the evening.</p>
<p>My preferred option is to find a flat at 5 minute distance from the work place; if it is also near the hearth of the city is even better. So, for Düsseldorf, after some tries, I chosen a little studio in the very center of the city, and was perfect for my needs.<br />
There are many company that can help you in finding an accommodation in Düsseldorf, I've used <a href="http://www.homecompany.de/">Home Company</a> (very good), <a href="http://www.mwz24.de">MWZ 24</a> (they just arranged an appointment with the landlord, never met them in person... just payed for the service), <a href="http://www.duesseldorf.e-rent.de">E-Rent</a>. Those company fees are quite expensive, but they can be very helpful also if you have any complaint about the flat. My experience with very positive with Home Company, so I'd suggest you them: but be aware, they'll try to make you get the flat they are showing and you can never trust 100% the word of any seller. To pay those agencies you need a credit card, be prepared that sometime the credit limit may not cover the fees...<br />
In Düsseldorf, rent costs are quite high, especially for furnished apartments , while the cost for buying a flat may be convenient; depends on how long you plan to stay, and the stability of your work/contracts. For a little furnished studio (25-30sq.m.) in the center of the city you may spend around 550-600 euro/month. Bigger and nicely furnished apartment can cost up to 1000-1500 eu per month. </p>
<p><strong>Parking.</strong> Finding a park for your car could be a pain: in the city you have to pay for parking, almost everywhere, unless you get a park permit for residents (ask the landlord). But there are some special hidden places in the very center of Düsseldorf where you can park without paying.</p>
<p>Here's my map about the free parking places near Vodafone and GAP15.</p>
<p><iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps/ms?ie=UTF8&amp;hl=en&amp;msa=0&amp;msid=110406317991927776327.00043db79d239b6de749b&amp;ll=51.218443,6.770582&amp;spn=0.009408,0.018239&amp;z=15&amp;output=embed"></iframe><br /><small>View <a href="http://maps.google.com/maps/ms?ie=UTF8&amp;hl=en&amp;msa=0&amp;msid=110406317991927776327.00043db79d239b6de749b&amp;ll=51.218443,6.770582&amp;spn=0.009408,0.018239&amp;z=15&amp;source=embed" style="color:#0000FF;text-align:left">Duesseldorf Free Parking</a> in a larger map</small></p>
<p><strong>Language.</strong> In Düsseldorf you don't need to speak German for living... as a foreigner. In the center of the city, and also outside, people can speak a quite good English. But speaking German gives you much more freedom. Understanding the letters you receive without using translation tools or asking friends makes a real difference. If you work in an international firm, it may be not necessary to speak any German, as the official language in the company may be English. But, in times of financial crisis, it is much better to be able to work not just for the international companies, but also for littler firms. And here you find that a good level of German is required. Well, actually job ads ask for fluent English and German.<br />
So I started to learn German. The bad news is that German is very difficult. The pronunciation is much simpler than English, but the grammar and the vocabulary is really hard. Simply, you cannot learn without a pragmatic  training, possibly with a teacher.<br />
To learn German it is possible to subscribe a German class in the <a href="http://www.duesseldorf.de/vhs/">Volkshochschule</a> which is a public school organizing courses in several subjects, included German for the foreigners.<br />
There are many other German school for business people moving to Düsseldorf for job, but they may be very expensive.<br />
I found a great German class in <a href="http://www.germaservice.de/GS-D/index.htm">GermaService</a>, Friedrich-Ebert-Straße 45 D-40210 Düsseldorf. The cost is OK and the people are simply fantastic. WARMLY suggested.</p>
<p><strong>Food.</strong> Düsseldorf offers a lot of restaurants that can satisfy any taste. There are good Italian restarants, as well Chinese, Turkish, Japanese, Korean etc.<br />
Since the canteen in Vodafone is nothing special and quite expensive for the contractors, I got the chance to try many places.<br />
In the Altstadt I suggest the "Enzo's Trattoria" in the market (Carlsplatz) for a good pasta with fish as side dish (ask for the Dorade). Good pasta can be found also at the restaurant "<a href="http://www.qype.com/place/91848-A-Tavola-Duesseldorf">A Tavola</a>". It looks like all my Italian colleagues agree that for the pizza "<a href="http://www.qype.com/place/142362-Pizzeria-Di-Napoli-Duesseldorf">Di Napoli</a>", is the best you can get in Düsseldorf; it is even better than many pizzerie in Italy.  Also pizzeria "Matteo", just next to Di Napoli is good as well.<br />
For steaks and meat, I suggest you to take a visit at <a href="http://www.qype.com/place/228726-Picasso-Inh-Primo-Lopez-Duesseldorf">Casa Picasso</a>.<br />
If you want to try some German food, try <a href="http://www.qype.com/place/26504-Schiffchen-Brauerei-Zum-Schiffchen-Duesseldorf">Zum Schiffchen</a>.<br />
For special occasions, or more classic dinners, some good italian food can be found at <a href="http://www.lalampada.de">La Lampada</a> or <a href="http://www.restaurant-rossini.de/piazzetta.htm">La Piazzetta di Positano</a>.<br />
Back to the altstadt, you can find good sushi for a lunch in <a href="http://www.qype.com/place/216165-Japanisches-Restaurant-Roppongi-Duesseldorf">Roppongi</a>, and fantastic fish in <a href="http://www.qype.com/place/13640-Fischhaus-Duesseldorf">Fischhaus</a>.<br />
For Chinese/Korean food I suggest <a href="http://www.qype.com/place/584577-Chop-Chop-Thai-China-Duesseldorf">Chop Chop</a>, in Bolkerstraße, which is also very cheap; if you like spicy and hot food, I strongly suggest to try the Tom-Ka-Kay soup.<br />
I tried also some Indian restaurants, and the best one is by far the <a href="http://www.chanakya.de/">Chanakya</a> in Oberkassel.<br />
For vegetarian and healthy food, <a href="http://www.qype.com/place/36551-sattgruen-Duesseldorf">Sattgrün</a> is a good choice.<br />
For a coffee, a drink or a snack, <a href="http://www.qype.com/place/103176-Bahara-Coffee-Duesseldorf">Bahara</a> is a nice place where to talk with some friends. But if you need a place where you can also use WIFI for free, Woyton in Bolkerstraße near the tube entrance (in front of the McDonald's) is perfect; for quite a long period I've used this place as my office :)<br />
If you are in Medienhafen, a nice place to visit is <a href="http://www.qype.com/place/221698-Tucans-Rodizio-Restaurant-Duesseldorf">Tucan's</a> Brazilian restaurant, where you can enjoy meat or a delicious buffet "all you can eat" at a reasonable price.<br />
For a brunch in the weekend or delicious German soups during the lunch try <a href="http://www.qype.com/place/5720-Bistro-Zicke-Betriebs-GmbH-Duesseldorf">Zicke Bistro</a>.</p>
<p><strong>Amusement.</strong> The "<a href="http://www.cinestar.de/de/kino/duesseldorf-cinestar/">Düsseldorf CineStar</a>" runs latest movies in original language, and it is great for foreigners. In Bottrop-Kirchhellen, there is the "<a href="http://www.movieparkgermany.de">Movie Park</a>" where you can spend a great day on the amusement rides.<br />
In the surrounding area there are many cities, zoo, castles and natural parks to visit. The one I visited (and that I suggest to you) are the Duisburg Zoo, Düsseldorf AcquaZoo, Maastrict, Schloss Benrath, Schloss Dyck in Mönchengladbach (strongly suggested), Xanten city and its Roman museum.</p>
<p><object width="250" height="188"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157623759107031%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157623759107031%2F&#038;set_id=72157623759107031&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157623759107031%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157623759107031%2F&#038;set_id=72157623759107031&#038;jump_to=" width="250" height="188"></embed></object><object width="250" height="188"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157624197389280%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157624197389280%2F&#038;set_id=72157624197389280&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157624197389280%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fluigiviggiano%2Fsets%2F72157624197389280%2F&#038;set_id=72157624197389280&#038;jump_to=" width="250" height="188"></embed></object></p>
<p>To meet new friends you can attend the meetings at the <a href="http://www.meetup.com/dusseldorf/">Düsseldorf expat meetup</a> (also on <a href="http://www.facebook.com/group.php?gid=29225065722">facebook</a>), and if you can speak italian you can partecipate to <a href="http://www.italiansonline.net/sezioni_eventi.php?sezione=101">italiansonline activities</a>.<br />
For geeks there are many occasions to discuss about technology: the local <a href="http://sites.google.com/site/duesseldorfgtug/">Google Technology User Group</a>, the <a href="http://rheinjug.de/">RheinJUG</a>, and the <a href="http://www.mobile-monday.de/">Mobile Monday</a> will keep you up to date on the cutting edge technologies. In November you cannot miss the <a href="http://www.devoxx.com/">Devoxx</a> in Belgium, not very far from Düsseldorf.</p>
<p><strong>Services.</strong> Requesting internet at home from T-Online requires from 15 days to 1 month. The proverbial German efficiency is revealed to be a Myth when you enter in an T-online shop. Expensive, unreliable, poor service, and you cannot cancel the contract before two years. In a couple of occasion I had internet outage for weeks and I had to go into the shop EVERY day to complain, before to receive the visit of a specialist for fixing the problem (that of course, was on the wires and not in my router). And when I quit the contract they told me that it is impossible to quit it before two years...<br />
Since I moved in Germany I got 3 mobile numbers. The first from Vodafone: expensive (I'm sorry to say that for the company I worked for). The second from <a href="http://www.ortelmobile.com/">Ortel Mobile</a>, cheap for calling abroad but no GPRS mobile internet and no way to disable the voicemail. And it's almost impossible to use the "number portability" when you decide to use another service provider. Last, and best... O2: they have been excellent, reasonable prices, good GPRS mobile internet connection, great support (on the shop in Karlplatz) and very flexible: when I decided to quit the contract because I was leaving, I had absolutely no problem, they made everything and I just had to sign a paper, with no additional cost or penalty. They also sell "multicards" contracts which means you can have a sim in your phone ad another sim to use in your computer with an USB stick; with additional cost of 25 euro. It has been always excellent.</p>
<p>One day I started to receive payment requests from a company called <a href="http://www.unitymedia.de/">Unitymedia</a>, without ever subscribing any contract, I ignored them since I finally received a complain letter from a credit repair firm. I had to answer that I was ready to pursue legal actions against them for the fraud they was attempting to me, for the stress caused and privacy violation... and other legal amenities, just to get them stop it. So, beware of Unitymedia (and don't pay).</p>
<p>There is much more to say, and more topics to cover, for example the bureaucracy you have to deal when moving abroad. Maybe on another post; this is becoming too long.<br />
By the way, if you have questions or you want add something, leave a  comment.
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://en.newinstance.it/2010/10/03/working-in-zurich/" rel="bookmark" class="crp_title">Working in Zürich</a></li>
<li><a href="http://en.newinstance.it/2008/11/10/wassup-yesterday-and-today/" rel="bookmark" class="crp_title">Wassup yesterday and today</a></li>
<li><a href="http://en.newinstance.it/2009/01/06/reinventing-the-wheel/" rel="bookmark" class="crp_title">Reinventing the wheel.</a></li>
<li><a href="http://en.newinstance.it/2008/07/17/secure-storage-in-ganymede-is-forced-paranoia/" rel="bookmark" class="crp_title">&#8220;Secure Storage&#8221; in Ganymede is forced paranoia</a></li>
<li><a href="http://en.newinstance.it/2011/06/01/et-kabu%cc%88ffke/" rel="bookmark" class="crp_title">Et Kabüffke</a></li>
</ul>
</div>
<div class="shr-publisher-560"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2010%2F06%2F03%2Fworking-in-dusseldorf%2F' data-shr_title='Working+in+D%C3%BCsseldorf'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2010%2F06%2F03%2Fworking-in-dusseldorf%2F' data-shr_title='Working+in+D%C3%BCsseldorf'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2010%2F06%2F03%2Fworking-in-dusseldorf%2F' data-shr_title='Working+in+D%C3%BCsseldorf'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --></p>
]]></content:encoded>
			<wfw:commentRss>http://en.newinstance.it/2010/06/03/working-in-dusseldorf/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Uninstalling .pkg files on OSX</title>
		<link>http://en.newinstance.it/2010/04/21/uninstalling-pkg-files-on-osx/</link>
		<comments>http://en.newinstance.it/2010/04/21/uninstalling-pkg-files-on-osx/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 21:22:08 +0000</pubDate>
		<dc:creator>Luigi</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[Pitfalls]]></category>
		<category><![CDATA[Pkg]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Uninstall]]></category>

		<guid isPermaLink="false">http://en.newinstance.it/2010/04/21/uninstalling-pkg-files-on-osx/</guid>
		<description><![CDATA[I feel safe in managing my tasks on computers when I can always undo last operations and restore a working environment. For that reasons tools like cvs, subversion, git, etc. do exist. But the same should be true with an operating system. You do your stuff, install apps, and when unhappy of the changes you [...]]]></description>
			<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->I feel safe in managing my tasks on computers when I can always undo last operations and restore a working environment. For that reasons tools like cvs, subversion, git, etc. do exist. But the same should be true with an operating system. You do your stuff, install apps, and when unhappy of the changes you should easily be able to go back in time and have things back working as before. Simple philosophy: avoid (as much as possible) actions that you don't know how to recover, later.</p>
<p>Today I installed an application that was packaged into a .pkg file.</p>
<p>After the try I realized that I may not want to use it anymore, so I tried to uninstall it. </p>
<h4>Surprise: there is no SAFE way to uninstall a .pkg file! </h4>
<p>Googling around I found those two articles (and more similar ones):</p>
<ol>
<li><a href=" http://ildan.blogspot.com/2008/02/how-to-uninstall-mac-os-x-packages-pkg.html">How to uninstall Mac Os X packages (.pkg)</a></li>
<li><a href="http://geekyninja.com/archives/how-to-uninstall-mac-os-x-pkg-packages/">How to uninstall Mac OS X .pkg packages</a></li>
</ol>
<p>To summarize:</p>
<blockquote><p>
How do you uninstall applications installed using a .pkg installer ?</p>
<p>Well, the truth is other than using third party applications to handle uninstallation <strong>there really is no way</strong>...
</p></blockquote>
<p>...unless finding out all installed files and deleting them manually. To do so you have to check ".bom" files under /Library/Receipts/ or /var/db/receipts/ using a command like:</p>
<pre>
$ lsbom -f -l -s -pf /var/db/receipts/com.foo.bar.myapp.pkg.bom
</pre>
<p>Cool.</p>
<h4>Now... is that SAFE? The answer is: NO!</h4>
<p>Suppose your bom lists a file - let’s say a library - but that file was already present in the system before of the pkg installation. For example it might be previously existing because some other app was installing the same library. Following this method you will delete a shared library and you will break dependent programs relying on the file you have just deleted.</p>
<p>Notice that, in my case the files listed in the bom was with relative path:</p>
<pre>
./share/man/man3/gv.3ruby
./share/man/man3/gv.3tcl
./share/man/man3/gvc.3
</pre>
<p>In my case the files where not installed in the root, but under /usr/local.</p>
<p>At first I decided to go for removal, but after deleting almost everything, I tought that some shared libraries like<br />
./lib/myapp/libxyzplugin.dylib<br />
could be used by other apps, and deleting those files could damage my system causing unpredictable failures in the future.</p>
<p>So I reinstalled the application, and I am gonna keep the zombie files, just to prevent breaking things on my system.</p>
<p>My approach, in installing new programs, is now changed to: if a program is provided with .pkg format, don’t install it unless strictly necessary or it comes with an uninstaller. The eventual uninstaller,  might also be verified, to avoid just stupid bare deletes as I was doing creating my own script to automatically delete files listed in the bom.</p>
<p>Now, I really hate this! Coming from Linux and apt packages, I’ll seriously think to kill the next guy who tells me that installing apps in OSX is cool. Once again, Linux rocks where OSX sucks! (and it does sucks also compared to Windows!)</p>
<h4>Update</h4>
<p>Another way to see the files installed by a package is to execute the command </p>
<pre>
$ pkgutil --files com.myapp.name.pkg
</pre>
<p>It is quite disastrous that Apple doesn't came with an app to manage (and uninstall!) such packages...</p>
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://en.newinstance.it/2005/08/03/debian-package-managing-survival-guide/" rel="bookmark" class="crp_title">Debian Package Managing Survival Guide</a></li>
<li><a href="http://en.newinstance.it/2009/05/13/making-eclipse-javahl-working-recompiling-subversion-from-the-sources/" rel="bookmark" class="crp_title">Making Eclipse JavaHL working, recompiling Subversion from the sources</a></li>
<li><a href="http://en.newinstance.it/2008/06/19/setting-up-javahl-jni-support-in-eclipse-on-linux/" rel="bookmark" class="crp_title">Setting up JavaHL (JNI) support in Eclipse on Linux</a></li>
<li><a href="http://en.newinstance.it/2009/05/07/java-native-compilation/" rel="bookmark" class="crp_title">Java native compilation</a></li>
<li><a href="http://en.newinstance.it/2009/02/03/some-things-i-dont-like-about-my-mac/" rel="bookmark" class="crp_title">Some things I don&#8217;t like about my Mac</a></li>
</ul>
</div>
<div class="shr-publisher-412"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2010%2F04%2F21%2Funinstalling-pkg-files-on-osx%2F' data-shr_title='Uninstalling+.pkg+files+on+OSX'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2010%2F04%2F21%2Funinstalling-pkg-files-on-osx%2F' data-shr_title='Uninstalling+.pkg+files+on+OSX'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2010%2F04%2F21%2Funinstalling-pkg-files-on-osx%2F' data-shr_title='Uninstalling+.pkg+files+on+OSX'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --></p>
]]></content:encoded>
			<wfw:commentRss>http://en.newinstance.it/2010/04/21/uninstalling-pkg-files-on-osx/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Top 3 things to do to make better software</title>
		<link>http://en.newinstance.it/2010/04/16/top-3-things-to-do-to-make-better-software/</link>
		<comments>http://en.newinstance.it/2010/04/16/top-3-things-to-do-to-make-better-software/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 13:25:19 +0000</pubDate>
		<dc:creator>Luigi</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Life, universe and everything]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Error Handling]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Top Down]]></category>

		<guid isPermaLink="false">http://en.newinstance.it/2010/04/16/top-3-things-to-do-to-make-better-software/</guid>
		<description><![CDATA[Some time ago, I've answered to a job interview question which was sounding more or less like: «suppose you have 20 minutes to talk to an audience of junior developers about what have been the lessons you learned from your software development experience, and resume that in three points, about what a good developer shall [...]]]></description>
			<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->Some time ago, I've answered to a job interview question which was sounding more or less like: «suppose you have 20 minutes to talk to an audience of junior developers about what have been the lessons you learned from your software development experience, and resume that in three points, about what a good developer shall do. What would be your advices?»</p>
<h3>Thinking top-down</h3>
<p>First, when you write your code don't start from the implementation, but start from the client code. Today it is popular to speak about Test Driven Development, and how writing test code first (which is client code), drives you to a better design. In the same way you can write your back-end services starting from the front-end, from how the user interacts with the UI, and letting the implementation details to be driven from it. The internal design should emerge from the use cases, not viceversa. So, testing software early not only drives to more reliable applications but, same importantly, also leads to much better code: easier to understand, to extend and maintain. It is not a detail: in the software industry the code is your product! <br/><br />
I appreciate more a developer who writes code which is easy to follow, rather than developers who can easily understand messy code. Messy code comes from the bottom-up approach. The ability to deal with messy code, comes from the habit to write and deal with it. Real good developers are the one who developed a fine sense of the code smell. A good developer do not write code unless it is strictly necessary, and this is much easier if you start from the abstract idea.<br/><br />
Imagining the "model" at first means to predict what you are gonna need. It brings in constraints, and require you to take decisions, which will likely reveal to be wrong later.<br />
I learned this when I started to work in eclipse. In eclipse you use a variable (which doesn't exist yet!) in your method, eclipse underscore it in red to say that there is a compilation error, then you do a "<a href="http://www.vogella.de/articles/Eclipse/article.html#tips_quickfix">quick fix</a>" and let the IDE to declare the variable for you. You call a method which do not yet exist, and let the IDE to implement the stub. This reverses your way to think. You will never write a useless method or variable again (at least this risk will be drastically reduced, and with some discipline you can easier keep things clean).<br/><br />
Instead of thinking before on the the details, you can focus on your business and write code which explain <em>what</em> your method is doing. And only <em>after</em> you will write the code specifying <em>how</em> to perform the functionality.<br />
Starting focusing on a more abstract level helps making better applications <em>for the users</em>, and the code quality will also benefit. </p>
<p>For the notice, Wikipedia says that <a href="http://en.wikipedia.org/wiki/Top-down_and_bottom-up_design">"bottom-up programming approach which is common in object-oriented languages such as C++ or Java"</a>. <a href="http://it.wikipedia.org/wiki/Discussione:Progettazione_top-down_e_bottom-up">I agree</a> with the guy who is defining this a «<a href="http://en.wikipedia.org/wiki/Talk:Top-down_and_bottom-up_design#Complete_Utter_Bull_Dung">complete utter bull dung</a>». </p>
<h3>Writing readable code</h3>
<p>Try to keep your code speaking, let the code be self explanatory, it's not that difficult... if you find yourself writing much <a href="http://www.c2.com/cgi/wiki?ToNeedComments">comments</a> to explain what an algorithm is doing, probably it means that your code is not readable. Comment in source code is documentation for developers; but the code itself, if it is understandable by another developer, is the best documentation. Avoid putting logs everywhere: it makes the code confuse, and difficult to maintain (how many times code changes and logs do not reflect anymore what's happening?). Put log statement in the strategic points: logging is a part of your application and also that should be carefully designed and thought as a feature. Don't put "debugging" everywhere, logging != debugging. Debug with your IDE, and write tests; it's hardly the case when you can understand what went wrong just from trace logs. <br/><br />
Once the code is written, it is going to be read dozen of times, and this is why it is so important that code is easy to read. Personally I prefer code which is understandable and performs well, over code which is messy and (maybe) perform super-fast. Most of the time messy "optimized" code is slower than simpler and more straightforward code.</p>
<h3>Handling properly error/exceptional conditions</h3>
<p>It looks like this is one of the hardest things to learn from software developers. And it's the source of many bugs. It's simple as that: catch the exception you can manage, and let the other pass through. Avoid "catching-and-rethrowing", avoid exception swallowing, and other amenity: there are plenty of articles about things you'd better never do. This one is quite comprehensive: <a href="http://today.java.net/article/2006/04/04/exception-handling-antipatterns">Exception Handling Antipatterns</a>. Make sure your software not only works well when everything goes fine, but also give the proper messages when something bad happens. This will also reduce the need to dig in log files just to discover that "a server is down" (when your application could just nicely tell that to the user, or inform the administrators!), and reduce the habit to have so much code for debug log statements. <br/><br />
Writing code in TDD also helps with this. Finally try to think <strong>"what could go wrong? and how my software will react?"</strong> before saying you've completed your tasks. Remember how do you feel when you get a cryptic blue screen, and how Windows gained the name to be a very buggy OS.<br/><br />
Don't become a bluescreen  author. </p>
<h3>Conclusions</h3>
<p>I don't know if this is a good answer to the question. But it reflects quite well some of the things I feel very important when I write my code, and that's why I decided to write about this topic here.<br />
And no, the interviewer didn't hire me :)
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://en.newinstance.it/2008/10/20/loc-lines-of-code/" rel="bookmark" class="crp_title">LOC (Lines Of Code)</a></li>
<li><a href="http://en.newinstance.it/2008/10/26/shall-configuration-be-bound-to-the-underlying-of-your-application/" rel="bookmark" class="crp_title">Shall configuration be bound to the underlying of your application?</a></li>
<li><a href="http://en.newinstance.it/2006/10/30/the-difference-between-libraries-and-frameworks/" rel="bookmark" class="crp_title">The difference between Libraries and Frameworks</a></li>
<li><a href="http://en.newinstance.it/2010/04/09/how-gwt-is-useful-in-place-of-javascript-and-css/" rel="bookmark" class="crp_title">How GWT is useful in place of  Javascript and CSS?</a></li>
<li><a href="http://en.newinstance.it/2008/10/28/online-free-book-getting-real/" rel="bookmark" class="crp_title">Online Free Book: Getting Real</a></li>
</ul>
</div>
<div class="shr-publisher-411"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2010%2F04%2F16%2Ftop-3-things-to-do-to-make-better-software%2F' data-shr_title='Top+3+things+to+do+to+make+better+software'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2010%2F04%2F16%2Ftop-3-things-to-do-to-make-better-software%2F' data-shr_title='Top+3+things+to+do+to+make+better+software'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fen.newinstance.it%2F2010%2F04%2F16%2Ftop-3-things-to-do-to-make-better-software%2F' data-shr_title='Top+3+things+to+do+to+make+better+software'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --></p>
]]></content:encoded>
			<wfw:commentRss>http://en.newinstance.it/2010/04/16/top-3-things-to-do-to-make-better-software/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

