<?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:blogger='http://schemas.google.com/blogger/2008' 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-2740704466690807446</id><updated>2026-07-13T11:31:25.289+02:00</updated><category term="Java"/><category term="Unix"/><category term="Jetty"/><category term="Desktop"/><category term="SSL"/><category term="x64"/><title type='text'>Max Berger&#39;s Technical Goodies</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.max.berger.name/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-1227275751112050389</id><published>2013-02-01T23:09:00.001+01:00</published><updated>2013-02-15T10:58:28.550+01:00</updated><title type='text'>Android vs iOS: I made the switch</title><content type='html'>&lt;div dir=&quot;ltr&quot;&gt;I have been an Apple fanboy for quite a while. I had an iPod even before they where cool and I have used iOS since version 3.&lt;br /&gt;&lt;br /&gt;
I have watched the addition of multitasking &quot;done right&quot; with iOS 4 which somehow still drained my battery faster. I have also updated to iOS 6, the update that has zero benefits to the user. I have waited for the iPhone 5 to buy a new phone... and was disappointed by it&#39;s lack of innovation. So I looked at &lt;a class=&quot;g-profile&quot; href=&quot;http://plus.google.com/104629412415657030658&quot; target=&quot;_blank&quot;&gt;+Android&lt;/a&gt;&amp;nbsp;again - and Google has just released the &lt;a class=&quot;g-profile&quot; href=&quot;http://plus.google.com/112773496741623034196&quot; target=&quot;_blank&quot;&gt;+Nexus&lt;/a&gt;&amp;nbsp;4 in time. So I switched.&lt;/div&gt;&lt;div dir=&quot;ltr&quot;&gt;The first real surprise is that the Nexus actually looks cooler and feels much more modern than the iPhone. Gorilla glass, dual cameras and &quot;Retina&quot; display are on board. But Apple no longer sets these standards: I also have a notification light, Qi charging, and no physical home button. This gives an overall feel of a modern high-tech device. And it comes at 2/3 of the cost.&lt;/div&gt;&lt;div dir=&quot;ltr&quot;&gt;Then there are these widgets on the home screen. Apple only let&#39;s me see the number of unread mails. Android let&#39;s me actually see if the mail is important or if it&#39;s just another newsletter. It let&#39;s me control my my media player right from there and shows me my daily agenda. Compared to that the static icons on iOS look ancient.&lt;/div&gt;&lt;div dir=&quot;ltr&quot;&gt;The next cool feature is the customizability. Don&#39;t like the built in keyboard? Download the &lt;a href=&quot;https://play.google.com/store/apps/details?id=org.pocketworkstation.pckeyboard&quot;&gt;Hacker&#39;s&lt;/a&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=org.pocketworkstation.pckeyboard&quot;&gt; keyboard&lt;/a&gt; and now you can actually make use of that &lt;a href=&quot;https://play.google.com/store/apps/details?id=org.connectbot&quot;&gt;ssh client&lt;/a&gt;! In addition you can decide what email client or what maps program you like.&lt;/div&gt;&lt;div dir=&quot;ltr&quot;&gt;Then there is the integration between apps and the system. Just install the &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.linkedin.android&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt; app, and all your contacts which have published their phone number are in your address book. This means you can call them if you need to - and it is up to them to keep their number up to data. No more asking: Is this number still current?&lt;br /&gt;&lt;br /&gt;
But not everything is great. There are some things&amp;nbsp;iOS does a much better job on.&lt;br /&gt;&lt;br /&gt;
The fist thing I was missing was a music player. My main use case for the phone is to listen to music, and the Apple and iTune universe handle this so great that I was amazed on how bad the situation is on Android. First I had to find a music player. Then I had to pay extra to make it actually useful. And it was not just 1 EUR, &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.doubleTwist.androidPlayer&quot; target=&quot;_blank&quot;&gt;double twist&lt;/a&gt; actually costs 10 EUR to make full use out of it. That&#39;s an extra premium that you have to factor in if you want to listen to music and podcasts.&lt;br /&gt;&lt;br /&gt;
The next thing I was really surprised about was the lack of headphone control. On iOS, all you do is buy one of the many headphones out there, plug it in, and it worked: Play/Pause, Prev/Next, and volume control are accessible. All buttons react immediately. On Android? Apparently there is no standard for headphone control. Apple has their own, and enough marketshare to make it work. For Android, you have to buy special headphones (if they say Apple somewhere in the documentation they they will probably not work). I finally settled on the &lt;a href=&quot;http://www.amazon.de/gp/product/B007IPKB9K/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1638&amp;amp;creative=19454&amp;amp;creativeASIN=B007IPKB9K&amp;amp;linkCode=as2&amp;amp;tag=httpmaxberger-21&quot;&gt;Philips SHE7005A&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://www.assoc-amazon.de/e/ir?t=httpmaxberger-21&amp;amp;l=as2&amp;amp;o=3&amp;amp;a=B007IPKB9K&quot; style=&quot;border: none !important; margin: 0px !important;&quot; width=&quot;1&quot; /&gt;. They work nicely, but have only a single button. No problem as play/pause is one click, and next is two clicks, right? Theoretically, yes. But unfortunately there is a 1-2 second delay between pressing the controls and the action actually happening. This means I never know if i just paused and resumed the song or if I selected the next song. Not a very nice user experience.&lt;br /&gt;&lt;br /&gt;
And this is the final problem with Android: There is no consistent user experience. And if you need extra functionality, there is not just one app for that, but there are many apps. And many of these apps are garbage. It is really difficult to sort the good from the bad. In that respect, the &quot;safe&quot; appstore of the Apple world is actually more useful for the user.&lt;br /&gt;&lt;br /&gt;
To sum up: In the Apple world, things still just work. If you limit yourself to the Apple universe, everything will be smooth. But unfortunately that universe has not expanded in the last two years. I you want something new and cool, but are ready to experiment a little bit, then Android is better. I don&#39;t regret that I switched and Apple will have to do a lot of innovation to get me back.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/1227275751112050389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2013/02/android-vs-ios-i-made-switch.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/1227275751112050389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/1227275751112050389'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2013/02/android-vs-ios-i-made-switch.html' title='Android vs iOS: I made the switch'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-6821429166559986615</id><published>2012-02-23T20:33:00.001+01:00</published><updated>2012-02-23T20:35:19.714+01:00</updated><title type='text'>LuxFibre / LuxFiber - The Real FAQ</title><content type='html'>Based on my experience with LuxFibre, here are some of the question you wish would be answered in &lt;a href=&quot;http://www.pt.lu/portal/op/www.pt.lu/lang/en/telecom/pid/4062&quot;&gt;the LuxFibre FAQ&lt;/a&gt;.&lt;br /&gt;
&lt;dl&gt;&lt;dt&gt;How long does it take for me to be connected?&lt;/dt&gt;
&lt;dd&gt;In my case it took 4 month. Be prepared to wait, they claim the demand is high.&lt;/dd&gt;
&lt;dt&gt;Do I get Fiber-Optics to my home?&lt;br /&gt;
&lt;/dt&gt;
&lt;dd&gt;Not necessarily. At least &lt;a href=&quot;http://blog.max.berger.name/2012/02/luxfibre-30-fraudulent-labeling.html&quot;&gt;LuxFibre-30 is actually VDSL&lt;/a&gt; (&lt;a href=&quot;http://en.wikipedia.org/wiki/FTTN&quot;&gt;FTTN&lt;/a&gt;). According to other sources, the LuxFibre-50 and LuxFibre-100 options could actually be &lt;a href=&quot;http://en.wikipedia.org/wiki/FTTH&quot;&gt;FTTH&lt;/a&gt;.&lt;/dd&gt;
&lt;dt&gt;What about the Fibre-Optics FAQ on the homepage?&lt;/dt&gt;
&lt;dd&gt;All that applies only if you actually get fiber. This includes the speed promises.&lt;/dd&gt; &lt;dd&gt;The Internet-FAQ does apply.&lt;/dd&gt;
&lt;dt&gt;So what speed do I get?&lt;/dt&gt;
&lt;dd&gt;If you do get fiber-optics, you should get the full speed.&lt;/dd&gt; &lt;dd&gt;If you end up with VDSL, you get the maximum your line will give you. In this respect P&amp;amp;T is great - other carriers only give you whatever they think the line will do. In my case, I get 15/5 (promise: up to 30/10)&lt;/dd&gt;
&lt;dt&gt;What about my phone line?&lt;/dt&gt;
&lt;dd&gt;You will have a VOIP phone line. In practice this means that your analog phone needs to be plugged into your router. If you had multiple phone jacks in your house before, you are now limited to just this one.&lt;/dd&gt;
&lt;dt&gt;Extra features on the phone line?&lt;/dt&gt;
&lt;dd&gt;It seems like I now have number transmitted on both incoming and outgoing calls. This has changed from before.&lt;/dd&gt;
&lt;dt&gt;And my IP address?&lt;/dt&gt;
&lt;dd&gt;You will get a real IPv6 address (you may need to &lt;a href=&quot;http://www.pt.lu/portal/site/portailEPT/lang/en/ipv6&quot;&gt;Enable IPv6 on the P&amp;amp;T site&lt;/a&gt; and on your router.) &lt;dd&gt;You will get a private (NATed) IPv4 address.&lt;/dd&gt;
&lt;dt&gt;What if I want a real IPv4 address?&lt;/dt&gt;
&lt;dd&gt;You can book this separately as an option. It costs a little extra. Unfortunately you cannot request it on the phone, you have do to so in writing. I requested mine about 8 business days ago and it still have not got it.&lt;/dd&gt;
&lt;dt&gt;What about my Integral package with unlimited download volume?&lt;/dt&gt;
&lt;dd&gt;Beware! Some people I&#39;ve spoken with said that their Integral was disabled, and that they raked up quite a high bill in the first month! Therefore I immediately checked with their support, and apparently my Integral package was kept.&lt;/dd&gt;     &lt;/dl&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/6821429166559986615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2012/02/luxfibre-luxfiber-real-faq.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/6821429166559986615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/6821429166559986615'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2012/02/luxfibre-luxfiber-real-faq.html' title='LuxFibre / LuxFiber - The Real FAQ'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-1679306644991652049</id><published>2012-02-01T21:15:00.003+01:00</published><updated>2012-02-01T21:22:52.159+01:00</updated><title type='text'>LuxFibre 30 - Fraudulent labeling</title><content type='html'>I was really excited: &lt;i&gt;&quot;P&amp;amp;TLuxembourg is very pleased to announce that Ultra High Speed internet access will be available in the Grand Duchy in September 2011!&lt;/i&gt;&amp;nbsp;&lt;i&gt;[...]&amp;nbsp;For some years now, P&amp;amp;TLuxembourg has been actively preparing to install fibre optics throughout the country. Many districts are thus already connected and prepared for the commercial launch. The commercial name for the Ultra High Speed connection will be &quot;LuxFibre&quot;. It will give Luxembourg households internet access at record speeds of up to 100 Mbit/s for both downloading and sending information, which is much faster than current residential connections.&lt;br /&gt;
&lt;br /&gt;
When the offer is launched in September 2011, around 85% of households will be able to connect at speeds of up to 30 Mbit/s and around 25% for speeds of up to 100 Mbit/s.&lt;/i&gt;&lt;br /&gt;
See the full &lt;a href=&quot;http://www.pt.lu/portal/lang/en/Entreprise/pid/4037&quot; target=&quot;_blank&quot;&gt;article LuxFibre at P&amp;amp;T&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, in September when LuxFibre started, my address was not eligible.&lt;br /&gt;
&lt;br /&gt;
However in October I checked again, and LuxFibre-30 is available. The promised speed: 30 MBit downstream, 10 MBit upstream. Check out the&amp;nbsp;&lt;a href=&quot;http://luxfibre.lu/&quot; target=&quot;_blank&quot;&gt;LixFibre Homepage&lt;/a&gt;. Note that the only claim on that page is &quot;&lt;i&gt;Ultra high-speed internet access&lt;/i&gt;&quot;. Indeed, except for the name &quot;LuxFibre&quot; there is no promise of Fibre anywhere.&lt;br /&gt;
&lt;br /&gt;
Of course, when you click on &quot;FAQ&quot;, there is a special FAQ for &quot;La Fibre Optique&quot;, explaining how the optical fiber works, and what appliances are needed. Read again: There is no connection between LuxFibre-30 and the FAQ about fiber optics. There is none. Would there be any obvious connection, then P&amp;amp;T would be falsely advertising. They are not. They are advertising &quot;ultra high speed&quot;.&lt;br /&gt;
&lt;br /&gt;
Today ( Feb 1st, about 3 month after I ordered ) I finally got LuxFibre-30. I was excited. Finally, a next-generation fiber-optical Internet? Then why did the technicians not put in a new optical cable? Why is all they added yet another vDSL Splitter? The answer is simple:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;LuxFibre-30 is vDSL!&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Now, as you can see from the links above, it is clearly my fault that I assumed just because it has &quot;Fibre&quot; in the name, that it would have anything to do with Fibre-Optics. It is also my fault, that I assumed, since there is an FAQ on fiber-optics, which claims fiber is soo much better than ADSL, that I would not get just another DSL.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
It is even my fault that I did not see the fine print, where it states that 30/10 is the maximum speed, and since I&#39;m too far away from the next &amp;nbsp;station, I only get 15/5 [at the full price of 30/10!]. By the way: the FAQ states, that with fiber-optics, distance to the next station would not be an issue anymore, unlike with ADSL.....&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/1679306644991652049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2012/02/luxfibre-30-fraudulent-labeling.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/1679306644991652049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/1679306644991652049'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2012/02/luxfibre-30-fraudulent-labeling.html' title='LuxFibre 30 - Fraudulent labeling'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total><georss:featurename>Luxemburg</georss:featurename><georss:point>49.815273 6.129583</georss:point><georss:box>49.487429 5.4978690000000006 50.143117 6.761297</georss:box></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-2670371486068836911</id><published>2011-09-18T11:13:00.000+02:00</published><updated>2011-09-18T11:13:01.856+02:00</updated><title type='text'>Melbourne IT killed my email for five days</title><content type='html'>&lt;br /&gt;
My main email address ( max AT berger DOT name ) was broken for the&amp;nbsp;last five days. In this entry I will describe how it came to be, why this&amp;nbsp;is the fault of &lt;a href=&quot;https://www.melbourneit.com.au/&quot;&gt;Melbourne IT&lt;/a&gt;, and why I would not&amp;nbsp;recommend&amp;nbsp;them as domain name registrar.&lt;br /&gt;
&lt;br /&gt;
If you are a representative of &lt;a href=&quot;https://www.melbourneit.com.au/&quot;&gt;Melbourne IT&lt;/a&gt; reading this,&amp;nbsp;please take a look at cases listing below before posting a comment. You&amp;nbsp;had your chance to fix this several times.&lt;br /&gt;
&lt;br /&gt;
If this sounds like I&#39;m changing domain registrars more often then some&amp;nbsp;people change underwear, please note that I&#39;ve registered my first Dot&amp;nbsp;Name over ten years ago.&lt;br /&gt;
&lt;h3&gt;
Dot Name&lt;/h3&gt;
A long time ago I registered my name with the provider &quot;NetIdentity&quot;.&amp;nbsp;They offered a really cool package: You personal name as 3rd-level domain&amp;nbsp;in the form of first.last.name (e.g. max.berger.name), and also a&amp;nbsp;2nd-level email forward in the form of first@last.name (e.g. max AT berger&amp;nbsp;DOT name). This was sold as a single package.&lt;br /&gt;
&lt;h3&gt;
Hover&lt;/h3&gt;
Unfortunately netidentiy went under, and my domain was transferred to&amp;nbsp;&lt;a href=&quot;https://www.hover.com/&quot;&gt;Hover&lt;/a&gt;. Although Hover had low domain&amp;nbsp;prices, the charged their full email package for the .name email forward.&amp;nbsp;Since the registrar has zero effort in setting up the forwarding address&amp;nbsp;(it was already set up anyways), I decided change providers. The Hover&amp;nbsp;support was&amp;nbsp;helpful, and they even offered me a discount.&lt;br /&gt;
&lt;dl&gt;
&lt;dt&gt;Hover&lt;/dt&gt;
&lt;dd&gt;-1 for their pricing policy&lt;br /&gt;
+1 for their support&lt;/dd&gt;&lt;/dl&gt;
&lt;h3&gt;
Dyn.com&lt;/h3&gt;
I transferred my domain to &lt;a href=&quot;http://dyn.com/&quot;&gt;dyn.com&lt;/a&gt;. They&amp;nbsp;offer a really great service, providing domain names for people with&amp;nbsp;changing IP addresses. Unfortunately they do not support 2nd-level .name&amp;nbsp;email forwards, but they told me something like this &quot;You can keep your&amp;nbsp;email forward, it will work as before, you just cannot change it&quot;. Indeed,&amp;nbsp;there was no interruption in serving both my domain name and my email.&lt;br /&gt;
&lt;dl&gt;
&lt;dt&gt;Dyn.com&lt;/dt&gt;
&lt;dd&gt;+1 for their custom DNS package. It is awesome!&lt;br /&gt;
+1 for their       technical support&lt;br /&gt;
-0 for not supporting 2nd-level .name email       forwards&lt;/dd&gt;&lt;/dl&gt;
&lt;h4&gt;
United Domains&lt;/h4&gt;
My main website runs on an real server now, and I no longer have the&amp;nbsp;need for the full-blown dynamic DNS services which dyn.com offers. I have&amp;nbsp;been using &lt;a href=&quot;http://www.united-domains.de/&quot;&gt;United Domains&lt;/a&gt; for&amp;nbsp;another domain. They have a nice interface, and I haven&#39;t had any problems&amp;nbsp;with them in the past. So I asked them, if they provide support for&amp;nbsp;2nd-level name forwards, since I wanted to move all my domains to one&amp;nbsp;provider. They do not, but here is the real great thing: I received an&amp;nbsp;answer from United Domains support pointing me to &lt;a href=&quot;http://daniel.gnoutcheff.name/dotname/reglist/&quot;&gt;a list of registrars which properly support dot name&lt;/a&gt;! This means they essentially pointed&amp;nbsp;me to their direct competitors! This is superb! Thank you guys! This means&amp;nbsp;I&#39;ll keep my account with you, even if it costs a little more than at the&amp;nbsp;other registrar, because that&#39;s exactly the kind of support which is&amp;nbsp;extremely helpful! To bad you don&#39;t support the dot Name email&amp;nbsp;forwards...&lt;br /&gt;
&lt;dl&gt;
&lt;dt&gt;United Domains&lt;/dt&gt;
&lt;dd&gt;+1 for their domain settings / Web interface&lt;br /&gt;
+100 for their       technical support!&lt;br /&gt;
-0 for not supporting 2nd-level .name email       forwards&lt;/dd&gt;&lt;/dl&gt;
&lt;h3&gt;
INWX&lt;/h3&gt;
&lt;a href=&quot;http://www.inwx.com/&quot;&gt;INWX&lt;/a&gt; is one of the registrars which&amp;nbsp;fully support Dot Name Domains and email forwards. They also have a nice&amp;nbsp;web interface, and domain transfers in and out are pretty easy. It was a&amp;nbsp;breeze to transfer my domain there, and its easy to administrate online.&amp;nbsp;They are comparatively inexpensive, and answered to all my support&amp;nbsp;questions within 24 hours.&lt;br /&gt;
&lt;br /&gt;
However, transferring my Dot Name Email forward initially failed. It turned out&amp;nbsp;that it was never moved from NetIdentity to Dyn.Com, and therefore the&amp;nbsp;auth code was invalid. This was surprising to me, as I&amp;nbsp;suddenly&amp;nbsp;I did not&amp;nbsp;know where my emai forward is registered at. The INWX support did not want&lt;br /&gt;
to answer me that question.&lt;br /&gt;
&lt;dl&gt;
&lt;dt&gt;INWX&lt;/dt&gt;
&lt;dd&gt;+1 for their domain settings / web interface&lt;br /&gt;
+0 for their       support&lt;br /&gt;
+1 for supporting dot name&#39;s correctly!&lt;/dd&gt;&lt;/dl&gt;
&lt;h3&gt;
Verisign&lt;/h3&gt;
&lt;a href=&quot;http://www.verisigninc.com/en_US/products-and-services/domain-name-services/registry-services/name-domain-names/index.xhtml&quot;&gt;Verisign&lt;/a&gt;&amp;nbsp;is currently the official &quot;owner&quot; of dot name. I emailed their support,&amp;nbsp;and within one hour (!) I had an answer telling me who my registrar is.&amp;nbsp;Perfect!&lt;br /&gt;
&lt;dl&gt;
&lt;dt&gt;Verisign&lt;/dt&gt;
&lt;dd&gt;+2 for their support&lt;/dd&gt;&lt;/dl&gt;
&lt;h3&gt;
Melbourne IT&lt;/h3&gt;
For whatever reason, my dot name email forward was registered with&amp;nbsp;Melbourne IT. First, this seems great: They provide a form I can download,&amp;nbsp;sign, email back, and within a few hours I had an account there and the&amp;nbsp;auth code. For some reason my email forward shows up as &quot;cancelled&quot; and&amp;nbsp;cannot be managed or renewed, but that didn&#39;t stop me. I emailed their&amp;nbsp;support about it, and never got a reply. So I made the biggest mistake: I&amp;nbsp;initiated the transfer to another provider!&lt;br /&gt;
&lt;br /&gt;
A day later got suspicious because I did not get email anymore. Even&amp;nbsp;spam stopped coming in, so I knew something must be wrong. I emailed&amp;nbsp;myself, and got an error message back, saying that there is no such&lt;br /&gt;
account as abc@def.com. abc@def.com ????&lt;br /&gt;
&lt;br /&gt;
When I did initiate the transfer, for whatever reason that my email&amp;nbsp;forward was modified to forward to abc@def.com. Dear Melboure IT, if you&amp;nbsp;read this (you did not read most of my other contacts): I AM NOT REACHABLE&amp;nbsp;AT abc@def.com! What gave you that idea??? Is that the payback for&amp;nbsp;realizing that I was not paying (which would have if I would have known&amp;nbsp;about it)?&lt;br /&gt;
&lt;br /&gt;
So, of course, I contacted Melbourne IT&#39;s support. No answer If someone&amp;nbsp;answered, then they answered to abc@def.com. I sent another email, this&amp;nbsp;time providing an alternate address. No answer either. Wrote another&amp;nbsp;email. And another. And another. All in all, I got one answer, saying &quot;Your transfer will be auto-authorized after 5 days&quot;. What does that mean?&amp;nbsp;It means that for 5 days, everyone trying to send me an email, will get an&amp;nbsp;error message, saying that my email is not working. Of course, I asked&amp;nbsp;them if there is anything I can do to accelerate the process, but again,&amp;nbsp;no reply.&lt;br /&gt;
&lt;br /&gt;
If someone from Melbourne IT is reading this, here are my &quot;case&amp;nbsp;numbers&quot;. This list is not complete, there are 1 or 2 missing. You only&amp;nbsp;get the case number via email, which is great if your primary email is not&lt;br /&gt;
working!&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;CAS-2782347-VDGT unanswered&lt;/li&gt;
&lt;li&gt;CAS-2781147-2WIS (this is the one where I got the answer about the&amp;nbsp;five days). A follow up by me was not answerd.&lt;/li&gt;
&lt;li&gt;CAS-2780858-DKSH unanswered&lt;/li&gt;
&lt;li&gt;CAS-2778169-X94B (case for recovering my domain key, this one was&lt;br /&gt;
actually answered). A follow up by me was not answered.&lt;/li&gt;
&lt;/ul&gt;
After five days, my transfer was auto-approved, and my new registrar&amp;nbsp;immediately fixed my email forward. My address is now working properly&amp;nbsp;again, and I am able to receive emails.&lt;br /&gt;
&lt;br /&gt;
Dear Registrars:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;If someone has an email forward, and wants to transfer that to&amp;nbsp;another registrar, DO NOT CHANGE THE EMAIL FORWARD! People are paying&amp;nbsp;for this service, and the chances are pretty high that they are actually&amp;nbsp;using it!&lt;/li&gt;
&lt;li&gt;If you only provide a contact form on your webpage, and you&#39;re&amp;nbsp;assigning case numbers, give customers a chance to actually enter those&amp;nbsp;case numbers in your form.&lt;/li&gt;
&lt;li&gt;The five days for approval of transfers is a MAXIMUM! You CAN&amp;nbsp;authorize the transfers earlier - especially if customers are asking you&amp;nbsp;about it!&lt;/li&gt;
&lt;li&gt;Not answering to support contacts is really bad. You don&#39;t have to&amp;nbsp;answer within 1 hour, people normally expect an answer within 24 hours,&amp;nbsp;but not answering within five (business!) days is unacceptable.&lt;/li&gt;
&lt;/ol&gt;
What can I say about Melbourne IT?&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;If you have any services with Melbourne IT, I suggest transferring&amp;nbsp;them to another provider. Do so at a time, where an outage of five days&amp;nbsp;won&#39;t hurt you. If you can&#39;t afford a five day outage, good luck!&lt;/li&gt;
&lt;li&gt;If you are considering a registar or provider, do not chose&amp;nbsp;Melbourne IT, unless you can debug and fix your problems without&amp;nbsp;contacting their customer support.&lt;/li&gt;
&lt;/ul&gt;
&lt;dl&gt;
&lt;dt&gt;Melbourne IT&lt;/dt&gt;
&lt;dd&gt;+1 for providing me with the authcode so quickly&lt;br /&gt;
-100 for       changing my email forward to abc@def.com&lt;br /&gt;
-9001 for not answering to       support contacts&lt;/dd&gt;     &lt;/dl&gt;
&lt;h4&gt;
Conclusion&lt;/h4&gt;
&lt;dl&gt;
&lt;dt&gt;United Domains&lt;/dt&gt;
&lt;dd&gt;is my provider of choice. Their support is awesome, the prices are reasonable.&lt;/dd&gt;
&lt;dt&gt;INWX&lt;/dt&gt;
&lt;dd&gt;is my provider of choice for dot name. They are&amp;nbsp;technically&amp;nbsp;fit and their prices are reasonable.&lt;/dd&gt;
&lt;dt&gt;Melbourne IT&lt;/dt&gt;
&lt;dd&gt;should be avoided. Their support is terrible, and they break your services.&lt;/dd&gt; &lt;/dl&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/2670371486068836911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2011/09/melbourne-it-killed-my-email-for-five.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/2670371486068836911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/2670371486068836911'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2011/09/melbourne-it-killed-my-email-for-five.html' title='Melbourne IT killed my email for five days'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-7973517214285722590</id><published>2010-10-28T23:28:00.000+02:00</published><updated>2010-10-28T23:28:02.722+02:00</updated><title type='text'>Ubuntu 10.10 Maverick Meerkat Netbook - fails to impress</title><content type='html'>&lt;p&gt;I&#39;ve recently bought a new netbook, and with the new &lt;a href=&quot;http://www.ubuntu.com/netbook&quot;&gt;Ubuntu Netbook edition&lt;/a&gt; coming out, I thought I&#39;d take it for a test. Unfortunately it completely failed to impress me within the first 30 minutes.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;Disclaimer:&lt;/i&gt; I&#39;ve been a big fan of Debian, and now Ubuntu (stability of Debian, but with ease of use) for a while. I believe Ubuntu is a great system, and it is still my Nr.1 Linux distribution of choice. All the problems listed below are no challenge for a technical person, but Ubuntu aims to support the casual user as well.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Disclaimer 2:&lt;/i&gt; The following is my personal definition of a netbook: It is a laptop&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;with a small screen&lt;/li&gt;
&lt;li&gt;and little processing power&lt;/li&gt;
&lt;li&gt;focussing on quick time-to-Internet&lt;/li&gt;
&lt;li&gt;and long battery life&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As my netbook currently runs a proprietary system, I used WUBI to install.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Blocker #1:&lt;/b&gt; WUBI downloaded from the &lt;a href=&quot;http://www.wubi-installer.org&quot;&gt;WUBI page&lt;/a&gt; still had only Ubuntu 10.4 (that was on oct.11, where 10.10 was one day old). Only when accessing the &lt;a href=&quot;http://www.ubuntu.com/desktop/get-ubuntu/windows-installer&quot;&gt;Ubuntu download page&lt;/a&gt; i got the newest version. The main page now redirects there.&lt;/p&gt;
&lt;p&gt;Ubuntu installed fine, at some time it rebooted and&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Blocker #2:&lt;/b&gt; Windows boots up! The installer can create a boot menu entry, but it cannot set it to Linux to finish the installation?&lt;/p&gt;
&lt;p&gt;Finally Ubuntu booted, I selected the &quot;netbook&quot; session and&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Blocker #3:&lt;/b&gt; failed to start because my card did not support the necessary 3D features! Why does Ubuntu need a 3D graphics card on a Netbook? This collides with long battery life and low processing power. BTW: My Nvidia card is supported just fine, once i could log in the desktop session, install the proprietary driver, etc.... Why wasn&#39;t this done at install time?&lt;/p&gt;
&lt;p&gt;As said, I had to log into the desktop session and&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Blocker #4: &lt;/b&gt; got a cryptic error message about missing language packs. It gave me two choices: Either I install them now, or I have to do this later (hidden in some menu you instantly forget). This brings me to two questions: 1) Why wheren&#39;t those installed before? I did select my language. 2) Until this point I was never asked for my WiFi credentials, which would have enabled me to do the immediate install. After all, this is my portable, and I expect it to work without wires.&lt;/p&gt;
&lt;p&gt;After setting all these up, I finally rebooted and&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Blocker #5: &lt;/b&gt; was asked for a username and password! While this is fine for laptops and desktops, its a most-people-don&#39;t-want-this-on-a-netbook feature. I want to turn it on and surf the web, not wait, enter my password, and then have to wait again for the window manager to load.&lt;/p&gt;
&lt;p&gt;Try finding the setting in the netbook remix window manager, guess what:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Blocker #6: &lt;/b&gt; Settings are only available in the Gnome (desktop) session.&lt;/p&gt;

&lt;p&gt;Conclusion: Ubuntu still has ways to go before they can close &lt;a href=&quot;https://launchpad.net/ubuntu/+bug/1&quot;&gt;Ubuntu Bug #1&lt;/a&gt;.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/7973517214285722590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/10/ubuntu-1010-maverick-meerkat-netbook.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/7973517214285722590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/7973517214285722590'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/10/ubuntu-1010-maverick-meerkat-netbook.html' title='Ubuntu 10.10 Maverick Meerkat Netbook - fails to impress'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-4910271374280731592</id><published>2010-07-18T00:21:00.000+02:00</published><updated>2010-07-18T00:21:23.325+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>Eclipse Helios - New Apply Patch Features</title><content type='html'>&lt;p&gt;Eclipse Helios has a few nice new features for applying patches. In this post I would like to point some of the out&lt;/p&gt;
&lt;h4&gt;Apply Patch using URL&lt;/h4&gt;
&lt;p&gt;The Apply Patch wizard now accepts URLs. This is great when you a working with open source projects where patches are frequently added as attachment to bug reports. Previousely, I had to download the patch, find it again (which is difficult when all patches are named patch, and therefore end up being downloaded as patch, patch (1), patch (2), ... ), an then apply. Now I just click on &quot;copy link&quot; and it is automagically pasted into the apply-patch box. Nice one!&lt;/p&gt;
&lt;h4&gt;Apply Patch in Synchronize View&lt;/h4&gt;
&lt;p&gt;Even nicer is applying patches in synchronize view - the option is, however, hidden:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Switch to the synchronized perspective&lt;/li&gt;
&lt;li&gt;In the synchronize view, click on the arrow next to the synchronize icon (the first one from the left&lt;/li&gt;
&lt;li&gt;Select synchronize...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now you can finally partially apply patches! What makes this feature even better is that it also accepts URLs, so it can be directly used with patches attached to bug reports!&lt;/p&gt;
&lt;p&gt;And to bring this all together, there is now the&lt;/p&gt;
&lt;h4&gt;Apply patch in Synchronize view preference&lt;/h4&gt;
&lt;p&gt;Hidden in the preferences under &quot;Team&quot;, you can check &quot;Apply patch in Synchronize view&quot; to always get this behavior. Now this is one of the most useful settings - unfortunately it is off by default.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/4910271374280731592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/07/eclipse-helios-new-apply-patch-features.html#comment-form' title='27 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/4910271374280731592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/4910271374280731592'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/07/eclipse-helios-new-apply-patch-features.html' title='Eclipse Helios - New Apply Patch Features'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>27</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-4855636816159365937</id><published>2010-07-17T23:54:00.001+02:00</published><updated>2010-07-29T09:52:21.176+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="x64"/><title type='text'>Eclipse Helios and Java 1.6u21 deadlocks</title><content type='html'>&lt;p&gt;I wanted to write a post about the new &lt;a href=&quot;http://eclipse.org/helios/&quot;&gt;Eclipse Helios&lt;/a&gt;, which was just released to participate in the &lt;a href=&quot;http://www.eclipse.org/helios/blogathon/guidelines.php&quot;&gt;Helios Blogathon&lt;/a&gt;. So, on my personal machine, I installed the newest JDK (1.6u21), the new eclipse, started it up, tried to work with it and after a few seconds.... It just hangs!&lt;/p&gt;
&lt;p&gt;But whait - it worked nicely on my work machine, so what&#39;s the deal? Did I install the wrong plug-ins? Tried to open up the wrong editor? I had the same problem on my work machine (Windows 7 x64 with the newest Java 64 bit (1.6u21)). On this machine I fixed it using the 32 bit Java version instead (which just happend to be 1.6u20).&lt;/p&gt;
&lt;p&gt;After spending several hours with several 32 and 64 bit versions of Eclipse and Java, I found the deadly combination. It is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows 7 x64 (may be unrelated to the problem)&lt;/li&gt;
&lt;li&gt;Java 1.6 u 21&lt;/li&gt;
&lt;li&gt;Eclipse Helios&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The fix? Get an older Java Version - which is not simple - if you try to get an older version of Java, Oracle asks you to register and wants your email address. They don&#39;t tell you that there is a public &lt;a href=&quot;http://java.sun.com/products/archive/&quot;&gt;archive of older Java versions&lt;/a&gt;. Why should they? You always want the latest version, right? Even if this means your Eclipse Helios session is limited to 5 seconds.&lt;/p&gt;
&lt;p&gt;
Helios now runs fine on an Jdk 1.5, with a separate JDK 1.6 installed to actually run my apps.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;Update: 11 days after my post Slashdot has some more information: &lt;a href=&quot;http://it.slashdot.org/story/10/07/28/2121259/Oracles-Java-Company-Change-Breaks-Eclipse&quot;&gt;Oracles Java Company Change Breaks Eclipse&lt;/a&gt;. Also, there is &lt;a href=&quot;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6969236&quot;&gt;Bug 6969236&lt;/a&gt;.&lt;/p&gt;
&lt;hr/&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/4855636816159365937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/07/eclipse-helios-and-java-16u21-deadlocks.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/4855636816159365937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/4855636816159365937'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/07/eclipse-helios-and-java-16u21-deadlocks.html' title='Eclipse Helios and Java 1.6u21 deadlocks'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-5219676473411384007</id><published>2010-04-01T15:57:00.001+02:00</published><updated>2010-04-07T16:17:56.642+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Jetty"/><title type='text'>DataSource in Jetty through JNDI</title><content type='html'>&lt;p&gt;Prerequesite: Please ensure JNDI is configured properly and you can &lt;a href=&quot;http://blog.max.berger.name/2010/04/passing-parameters-to-jetty-7-via-jndi.html&quot;&gt;pass parameters to Jetty via JNDI&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;First, you need to add the used libraries to Jettys classpath. In my case, I wanted &lt;a href=&quot;http://commons.apache.org/dbcp/&quot;&gt;commons-dbcp&lt;/a&gt; (alternative: &lt;a href=&quot;http://sourceforge.net/projects/c3p0/&quot;&gt;c3p0&lt;/a&gt;) over an &lt;a href=&quot;http://www.h2database.com/&quot;&gt;H2 database&lt;/a&gt;, so I added the following to my &lt;tt&gt;pom.xml&lt;/tt&gt;
&lt;hr /&gt;
&lt;pre&gt;      &amp;lt;plugin&amp;gt;
        &amp;lt;groupId&amp;gt;org.mortbay.jetty&amp;lt;/groupId&amp;gt;
        &amp;lt;artifactId&amp;gt;jetty-maven-plugin&amp;lt;/artifactId&amp;gt;
        &amp;lt;version&amp;gt;7.0.1.v20091125&amp;lt;/version&amp;gt;
        &amp;lt;dependencies&amp;gt;
          &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;commons-dbcp&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;commons-dbcp&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;1.4&amp;lt;/version&amp;gt;
          &amp;lt;/dependency&amp;gt;
          &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;com.h2database&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;h2&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;1.2.131&amp;lt;/version&amp;gt;
          &amp;lt;/dependency&amp;gt;
        &amp;lt;/dependencies&amp;gt;
      &amp;lt;/plugin&amp;gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;On Jetty standalone, I copied the libraries to the &lt;tt&gt;lib/ext&lt;/tt&gt; directory and added &lt;tt&gt;ext&lt;/tt&gt; to the options in &lt;tt&gt;start.ini&lt;/tt&gt;. Please note that commons-dbcp also requires &lt;a href=&quot;http://commons.apache.org/pool/&quot;&gt;commons-pool&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Next, add the configuration of your DataSource to &lt;tt&gt;jetty-env.xml&lt;/tt&gt;:
&lt;hr /&gt;
&lt;pre&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;!DOCTYPE Configure PUBLIC &quot;-//Mort Bay Consulting//DTD Configure//EN&quot; &quot;http://jetty.mortbay.org/configure.dtd&quot;&amp;gt;
&amp;lt;Configure id=&quot;thisfile&quot; class=&quot;org.eclipse.jetty.webapp.WebAppContext&quot;&amp;gt;
  &amp;lt;New class=&quot;org.eclipse.jetty.plus.jndi.Resource&quot;&amp;gt;
    &amp;lt;Arg&amp;gt;&amp;lt;Ref id=&quot;thisfile&quot;/&amp;gt;&amp;lt;/Arg&amp;gt;
    &amp;lt;Arg&amp;gt;jdbc/nameOfMyDatabase&amp;lt;/Arg&amp;gt;
    &amp;lt;Arg&amp;gt;
      &amp;lt;New class=&quot;org.apache.commons.dbcp.BasicDataSource&quot;&amp;gt;
        &amp;lt;Set name=&quot;url&quot;&amp;gt;jdbc:h2:/path/to/your/DataBase&amp;lt;/Set&amp;gt;
      &amp;lt;/New&amp;gt;
    &amp;lt;/Arg&amp;gt;
  &amp;lt;/New&amp;gt;
&amp;lt;/Configure&amp;gt;
&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;To actually have access to the datasource, you also need modify &lt;tt&gt;web.xml&lt;/tt&gt; to declare that you want a resource unter this name:
&lt;hr /&gt;
&lt;pre&gt;  &amp;lt;resource-ref&amp;gt;
    &amp;lt;res-ref-name&amp;gt;jdbc/nameOfMyDatabase&amp;lt;/res-ref-name&amp;gt;
    &amp;lt;res-type&amp;gt;javax.sql.DataSource&amp;lt;/res-type&amp;gt;
    &amp;lt;res-auth&amp;gt;Container&amp;lt;/res-auth&amp;gt;
  &amp;lt;/resource-ref&amp;gt;
&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;The database is now available as &lt;tt&gt;DataSource&lt;/tt&gt; at &lt;tt&gt;java:/comp/env/jdbc/nameOfMyDatabase&lt;/tt&gt; and can be used directly in tools such as hibernate by setting &lt;tt&gt;hibernate.connection.datasource&lt;/tt&gt; to this value.&lt;/p&gt;
&lt;p&gt;Background: Hibernate did not properly release the database connection when the WebApp shut down. This resulted in Exceptions when trying to undeploy and deploy the webapp without killing Jetty, as the embedded database existed both in the old and the new context. By moving the connection out of the WebApp, and into Jetty&#39;s responsibility, the embedded database driver now only exists in Jetty&#39;s context. Adding the connection pool is just decoration.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/5219676473411384007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/04/datasource-in-jetty-through-jndi.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/5219676473411384007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/5219676473411384007'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/04/datasource-in-jetty-through-jndi.html' title='DataSource in Jetty through JNDI'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-2070187507455492150</id><published>2010-04-01T15:03:00.001+02:00</published><updated>2010-04-01T15:04:36.949+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Jetty"/><title type='text'>Passing parameters to Jetty 7 via JNDI</title><content type='html'>&lt;p&gt;If you have the jetty-maven-plugin properly configured in the &lt;tt&gt;pom.xml&lt;/tt&gt;, then everything is already set up.&lt;/p&gt;
&lt;p&gt;For Jetty Standalone, please see my other post about &lt;a href=&quot;http://blog.max.berger.name/2010/04/configuring-jetty-7-standalone-for-jndi.html&quot;&gt;configuring JNDI in jetty standalone&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Passing parameters through JNDI proved to be very simple. In &lt;tt&gt;src/main/webapp/WEB-INF&lt;/tt&gt; create a file &lt;tt&gt;jetty-env.xml&lt;/tt&gt;, with the following contents:&lt;/p&gt;
&lt;hr /&gt;
&lt;pre&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;!DOCTYPE Configure PUBLIC &quot;-//Mort Bay Consulting//DTD Configure//EN&quot; &quot;http://jetty.mortbay.org/configure.dtd&quot;&amp;gt;
&amp;lt;Configure id=&quot;thisfile&quot; class=&quot;&lt;a href=&quot;http://download.eclipse.org/jetty/stable-7/apidocs/index.html?org/eclipse/jetty/webapp/WebAppContext.html&quot;&gt;org.eclipse.jetty.webapp.WebAppContext&lt;/a&gt;&quot;&amp;gt;
  &amp;lt;New class=&quot;&lt;a href=&quot;http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/plus/jndi/EnvEntry.html&quot;&gt;org.eclipse.jetty.plus.jndi.EnvEntry&lt;/a&gt;&quot;&amp;gt;
    &amp;lt;Arg&amp;gt;&amp;lt;Ref id=&quot;thisfile&quot;/&amp;gt;&amp;lt;/Arg&amp;gt;
    &amp;lt;Arg&amp;gt;paramname&amp;lt;/Arg&amp;gt;
    &amp;lt;Arg type=&quot;java.lang.String&quot;&amp;gt;A sample parameter value&amp;lt;/Arg&amp;gt;
    &amp;lt;Arg type=&quot;boolean&quot;&amp;gt;false&amp;lt;/Arg&amp;gt;
  &amp;lt;/New&amp;gt;
&amp;lt;/Configure&amp;gt;
&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;You can then load your parameter through the standard naming context:&lt;/p&gt;
&lt;hr /&gt;
&lt;pre&gt;import javax.naming.Context;
import javax.naming.InitialContext;
...
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup(&quot;java:comp/env&quot;);
String param = (String) envCtx.lookup(&quot;paramname&quot;);
&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;Of course, you can add other parameters, rename &lt;em&gt;paramname&lt;/em&gt; to something that makes more sense, or use other data types. Please note: Jetty supports more datatypes than required by the J2EE standard.&lt;p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/2070187507455492150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/04/passing-parameters-to-jetty-7-via-jndi.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/2070187507455492150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/2070187507455492150'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/04/passing-parameters-to-jetty-7-via-jndi.html' title='Passing parameters to Jetty 7 via JNDI'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-6946301747412280983</id><published>2010-04-01T14:59:00.000+02:00</published><updated>2010-04-01T14:59:52.620+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Jetty"/><title type='text'>Configuring Jetty 7 standalone for JNDI</title><content type='html'>&lt;p&gt;Configuring Jetty 7 for JNDI can be a bit tricky. If you miss any of these points, you may end up passing JNDI parameters, but they will not be available in your webapp.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ensure the plus libraries are loaded. You can to this by adding the option &lt;tt&gt;plus&lt;/tt&gt; in Jetty&#39;s &lt;tt&gt;start.ini&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Ensure jetty is configured to use the plus configuration classes. You can do this by adding the following inside the context, or the &lt;tt&gt;jetty-env.xml&lt;/tt&gt;:
&lt;hr /&gt;
&lt;pre&gt;  &amp;lt;Set name=&quot;ConfigurationClasses&quot;&amp;gt;
    &amp;lt;Array id=&quot;plusConfig&quot; type=&quot;java.lang.String&quot;&amp;gt;
      &amp;lt;Item&amp;gt;org.eclipse.jetty.webapp.WebInfConfiguration&amp;lt;/Item&amp;gt;
      &amp;lt;Item&amp;gt;org.eclipse.jetty.webapp.WebXmlConfiguration&amp;lt;/Item&amp;gt;
      &amp;lt;Item&amp;gt;org.eclipse.jetty.webapp.MetaInfConfiguration&amp;lt;/Item&amp;gt;
      &amp;lt;Item&amp;gt;org.eclipse.jetty.webapp.FragmentConfiguration&amp;lt;/Item&amp;gt;
      &amp;lt;Item&amp;gt;org.eclipse.jetty.plus.webapp.EnvConfiguration&amp;lt;/Item&amp;gt;
      &amp;lt;Item&amp;gt;org.eclipse.jetty.plus.webapp.Configuration&amp;lt;/Item&amp;gt;
      &amp;lt;Item&amp;gt;org.eclipse.jetty.webapp.JettyWebXmlConfiguration&amp;lt;/Item&amp;gt;
      &amp;lt;Item&amp;gt;org.eclipse.jetty.webapp.TagLibConfiguration&amp;lt;/Item&amp;gt;
    &amp;lt;/Array&amp;gt;
  &amp;lt;/Set&amp;gt;
&lt;/pre&gt;
&lt;hr /&gt;
The documentation suggests adding &lt;tt&gt;etc/jetty-plus.xml&lt;/tt&gt; to the startup, which would make this configuration available as &lt;tt&gt;plusConfig&lt;/tt&gt; to refer to. This did not work on my machine.
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can now continue with &lt;a href=&quot;&quot;&gt;Passing parameters to Jetty 7 via JNDI&lt;/a&gt;.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/6946301747412280983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/04/configuring-jetty-7-standalone-for-jndi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/6946301747412280983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/6946301747412280983'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/04/configuring-jetty-7-standalone-for-jndi.html' title='Configuring Jetty 7 standalone for JNDI'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-1926995447312088860</id><published>2010-02-10T13:14:00.001+01:00</published><updated>2010-02-16T12:36:10.566+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Jetty"/><category scheme="http://www.blogger.com/atom/ns#" term="Unix"/><title type='text'>Jetty 7 maven plugin authentication realms</title><content type='html'>&lt;p&gt;The configuration directive &lt;tt&gt;UserRealm&lt;/tt&gt; seems to no longer work with the jetty 7 maven plugin (&lt;tt&gt;jetty-maven-plugin&lt;/tt&gt;). I received the following error:&lt;/p&gt;
&lt;p style=&#39;text-align: left;&#39;&gt;&lt;tt&gt;java.lang.IllegalStateException: No LoginService for org.eclipse.jetty.security.authentication.BasicAuthenticator@4095c5ec in ConstraintSecurityHandler@28f52a14@&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;Fixing this involved:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Creating a jetty configuration file, such as the following:&lt;/p&gt;
&lt;hr /&gt;
&lt;pre&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&amp;gt;
&amp;lt;!DOCTYPE Configure PUBLIC &quot;-//Jetty//Configure//EN&quot; &quot;http://www.eclipse.org/jetty/configure.dtd&quot;&amp;gt;
&amp;lt;Configure class=&quot;org.eclipse.jetty.webapp.WebAppContext&quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;Get name=&quot;securityHandler&quot;&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;Set name=&quot;loginService&quot;&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;New class=&quot;org.eclipse.jetty.security.HashLoginService&quot;&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;Set name=&quot;name&quot;&amp;gt;YourSecurityRealmHere&amp;lt;/Set&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;Set name=&quot;config&quot;&amp;gt;src/test/resources/jetty-realm.properties&amp;lt;/Set&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;Call name=&quot;start&quot;/&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/New&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/Set&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;Set name=&quot;checkWelcomeFiles&quot;&amp;gt;true&amp;lt;/Set&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/Get&amp;gt;
&amp;lt;/Configure&amp;gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;To be saved as &lt;tt&gt;src/test/resources/jetty-test.xml&lt;/tt&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a &lt;tt&gt;src/test/resources/jetty-realm.properties&lt;/tt&gt; with your &lt;a href=&quot;http://blog.max.berger.name/2010/01/jettys-missing-passwdsh.html&quot;&gt;Jetty 7 password&lt;/a&gt; file.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updating the jetty configuration in my &lt;tt&gt;pom.xml&lt;/tt&gt;:&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;      &amp;lt;plugin&amp;gt;
        &amp;lt;groupId&amp;gt;org.mortbay.jetty&amp;lt;/groupId&amp;gt;
        &amp;lt;artifactId&amp;gt;jetty-maven-plugin&amp;lt;/artifactId&amp;gt;
        &amp;lt;version&amp;gt;7.0.1.v20091125&amp;lt;/version&amp;gt;
        &amp;lt;configuration&amp;gt;
          &amp;lt;webAppXml&amp;gt;src/test/resources/jetty-test.xml&amp;lt;/webAppXml&amp;gt;
        &amp;lt;/configuration&amp;gt;
        &amp;lt;dependencies&amp;gt;
          &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;org.eclipse.jetty&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;jetty-servlets&amp;lt;/artifactId&amp;gt;
            &amp;lt;version&amp;gt;7.0.1.v20091125&amp;lt;/version&amp;gt;
          &amp;lt;/dependency&amp;gt;
        &amp;lt;/dependencies&amp;gt;
      &amp;lt;/plugin&amp;gt;
&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;The important entry is &lt;tt&gt;webAppXML&lt;/tt&gt;. The extra dependency to &lt;tt&gt;jetty-servlets&lt;/tt&gt; was added to support &lt;a href=&quot;http://blog.max.berger.name/2010/01/jetty-7-gzip-filter.html&quot;&gt;GZip in Jetty 7&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/1926995447312088860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/02/jetty-7-maven-plugin-authentication.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/1926995447312088860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/1926995447312088860'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/02/jetty-7-maven-plugin-authentication.html' title='Jetty 7 maven plugin authentication realms'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-335846727677125106</id><published>2010-02-10T11:13:00.000+01:00</published><updated>2010-02-10T13:14:47.338+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Jetty"/><category scheme="http://www.blogger.com/atom/ns#" term="Unix"/><title type='text'>Jetty seems to ignore webdefault.xml</title><content type='html'>&lt;p&gt;If just tried to edit &lt;tt&gt;webdefaults.xml&lt;/tt&gt; to disable directory views, and the change was not reflected in my webapp. The reason: &lt;tt&gt;webdefaults.xml&lt;/tt&gt; is &lt;em&gt;not&lt;/em&gt; read by default, but must be explicitly added to the context of the webapp:&lt;/p&gt;
&lt;hr/&gt;
&lt;pre&gt;
&amp;nbsp;&amp;lt;Set name=&quot;defaultsDescriptor&quot;&amp;gt;&amp;lt;SystemProperty name=&quot;jetty.home&quot; default=&quot;.&quot;/&amp;gt;/etc/webdefault.xml&amp;lt;/Set&amp;gt;&lt;/pre&gt;
&lt;hr/&gt;
&lt;p&gt;And suddenly all changes in &lt;tt&gt;webdefaults.xml&lt;/tt&gt; are applied.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/335846727677125106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/02/jetty-seems-to-ignore-webdefaultxml.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/335846727677125106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/335846727677125106'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/02/jetty-seems-to-ignore-webdefaultxml.html' title='Jetty seems to ignore webdefault.xml'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-3780579689277255664</id><published>2010-01-27T16:30:00.000+01:00</published><updated>2010-01-27T16:32:14.436+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Jetty"/><category scheme="http://www.blogger.com/atom/ns#" term="Unix"/><title type='text'>Enabling JSP support in Jetty 7</title><content type='html'>&lt;p&gt;As Jetty 6 failed to use the port inherited from xinetd, I have to use Jetty 7. Unfortunately Jetty is missing the JSP support by default. Here is how to enable it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download the Jetty 6 distribution.&lt;/li&gt;
&lt;li&gt;Copy the &lt;tt&gt;jsp-2.1&lt;/tt&gt; folder to the Jetty 7 &lt;tt&gt;lib/&lt;/tt&gt; folder.&lt;/li&gt;
&lt;li&gt;You can check if it works by running &lt;tt&gt;java -jar start.jar --list-options&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Edit &lt;tt&gt;start.ini&lt;/tt&gt; to include &lt;tt&gt;jsp-2.1&lt;/tt&gt; in the &lt;tt&gt;OPTIONS&lt;/tt&gt; line.&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/3780579689277255664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/01/enabling-jsp-support-in-jetty-7.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/3780579689277255664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/3780579689277255664'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/01/enabling-jsp-support-in-jetty-7.html' title='Enabling JSP support in Jetty 7'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-463980840304384981</id><published>2010-01-27T16:25:00.001+01:00</published><updated>2010-02-10T11:20:27.282+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Jetty"/><category scheme="http://www.blogger.com/atom/ns#" term="Unix"/><title type='text'>Jetty 6 vs. Jetty 7</title><content type='html'>&lt;p&gt;There are several differences between Jetty 6 and Jetty 7:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Most classes have been renamed from &lt;tt&gt;org.mortbay&lt;/tt&gt; to &lt;tt&gt;org.eclipse&lt;/tt&gt; and sometimes moved to a different path. Find the new class names in the &lt;a href=&quot;http://download.eclipse.org/jetty/stable-7/apidocs/&quot;&gt;Jetty 7 JavaDoc&lt;/a&gt;. This applies to most settings in &lt;tt&gt;jetty.xml&lt;/tt&gt; and &lt;tt&gt;web.xml&lt;/tt&gt;.&lt;/li&gt;
&lt;li&gt;Jetty 7 comes with fewer plugins. Important extras such as JSP support are missing from the standard distribution.&lt;/li&gt;
&lt;li&gt;Jetty 7 includes several bugfixes. Example: Taking a port from xinetd did not work with Jetty 6 on my machine.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;More information is at the &lt;a href=&quot;http://wiki.eclipse.org/Jetty/Starting/Porting_to_Jetty_7&quot;&gt;Porting to Jetty 7&lt;/a&gt; page.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/463980840304384981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/01/jetty-6-vs-jetty-7.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/463980840304384981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/463980840304384981'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/01/jetty-6-vs-jetty-7.html' title='Jetty 6 vs. Jetty 7'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-7285543998849204702</id><published>2010-01-27T15:34:00.000+01:00</published><updated>2010-01-27T15:34:19.842+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Jetty"/><category scheme="http://www.blogger.com/atom/ns#" term="Unix"/><title type='text'>Jetty 7 gzip Filter</title><content type='html'>&lt;p&gt;Jetty includes a gzip-filter for dynamic compression of contents, thus saving bandwidth and enabling your site to load faster (especially important if you have a lot of javascript).&lt;/p&gt;
&lt;p&gt;To configure it, add the follwing filter definition to your &lt;tt&gt;web.xml&lt;/tt&gt;:&lt;/p&gt;
&lt;hr /&gt;
&lt;pre&gt;  &amp;lt;filter&amp;gt;
    &amp;lt;filter-name&amp;gt;GzipFilter&amp;lt;/filter-name&amp;gt;
    &amp;lt;filter-class&amp;gt;org.eclipse.jetty.servlets.GzipFilter&amp;lt;/filter-class&amp;gt;
    &amp;lt;init-param&amp;gt;
      &amp;lt;param-name&amp;gt;mimeTypes&amp;lt;/param-name&amp;gt;
      &amp;lt;param-value&amp;gt;text/html,text/plain,text/xml,application/xhtml+xml,text/css,application/javascript,image/svg+xml&amp;lt;/param-value&amp;gt;
    &amp;lt;/init-param&amp;gt;
  &amp;lt;/filter&amp;gt;
  &amp;lt;filter-mapping&amp;gt;
    &amp;lt;filter-name&amp;gt;GzipFilter&amp;lt;/filter-name&amp;gt;
    &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;
  &amp;lt;/filter-mapping&amp;gt; 
&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;Please note: This configuration is for Jetty 7. For Jetty 6 change the filter to &lt;tt&gt;org.mortbay.servlet.GzipFilter&lt;/tt&gt;.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/7285543998849204702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/01/jetty-7-gzip-filter.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/7285543998849204702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/7285543998849204702'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/01/jetty-7-gzip-filter.html' title='Jetty 7 gzip Filter'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-7856895171665867911</id><published>2010-01-27T14:40:00.001+01:00</published><updated>2010-01-27T15:34:19.843+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Jetty"/><category scheme="http://www.blogger.com/atom/ns#" term="Unix"/><title type='text'>Jettys missing passwd.sh</title><content type='html'>&lt;p&gt;Jetty comes with a very nice Password encrypting command. Unfortunately, there is no &lt;tt&gt;passwd.sh&lt;/tt&gt; to call it, and you have to manually find out where it is defined. Also, the documentation is for Jetty 6 only, and the names of the classes and libraries have changed in Jetty 7.&lt;/p&gt;
&lt;p&gt;Here is the missing &lt;tt&gt;passwd.sh&lt;/tt&gt; for Jetty 7:&lt;/p&gt;
&lt;hr /&gt;
&lt;pre&gt;#!/bin/bash

# look for JETTY_HOME
if [ -z &quot;$JETTY_HOME&quot; ] 
then
  cd $(dirname &quot;$0&quot;)
  JETTY_HOME_1=$(pwd)
  cd - &gt; /dev/null
  JETTY_HOME_1=$(dirname &quot;$JETTY_HOME_1&quot;)
  JETTY_HOME=${JETTY_HOME_1} 
fi

java -cp $JETTY_HOME/lib/jetty-http-7.0.1.v20091125.jar:\
$JETTY_HOME/lib/jetty-util-7.0.1.v20091125.jar \
org.eclipse.jetty.http.security.Password $*
&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;Please note that the &lt;tt&gt;JETTY_HOME&lt;/tt&gt; detection is also changed from the original jetty shell scripts to be more sane.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/7856895171665867911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/01/jettys-missing-passwdsh.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/7856895171665867911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/7856895171665867911'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/01/jettys-missing-passwdsh.html' title='Jettys missing passwd.sh'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-698217692889637183</id><published>2010-01-26T10:16:00.000+01:00</published><updated>2010-01-27T15:34:19.843+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Jetty"/><category scheme="http://www.blogger.com/atom/ns#" term="Unix"/><title type='text'>Jetty vs. Tomcat</title><content type='html'>When setting up a new webserver, I decided to evaluate Jetty as an alternative to Tomcat. I have previousely used Tomcat, and was content with it. Here is what I&#39;ve found:&lt;br /&gt;
Both:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Implement recent JSP and Servlet standards&lt;/li&gt;
&lt;li&gt;Can easily run .WAR files&lt;/li&gt;
&lt;li&gt;Are pretty fast when serving content (speed comparisons on the web show only minor differences)&lt;/li&gt;
&lt;/ul&gt;
Pro Jetty:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Jetty uses less memory&lt;/li&gt;
&lt;li&gt;Jetty seams more &quot;lightweight&quot;&lt;/li&gt;
&lt;/ul&gt;
Pro Tomcat:&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Tomcat is very well documented - Jetty Documentation is sparse and targeted towards Java developers. The Jetty config file is (intentionally) like coding&lt;/li&gt;
&lt;li&gt;I know Tomcat by now&lt;/li&gt;
&lt;/ul&gt;
As the machine I am using now is low on memory, I decided to give Jetty a try. However, installing it was not easy. But that&#39;s a topic for the next post.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/698217692889637183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/01/jetty-vs-tomcat.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/698217692889637183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/698217692889637183'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/01/jetty-vs-tomcat.html' title='Jetty vs. Tomcat'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-1481072960993520556</id><published>2010-01-25T11:39:00.000+01:00</published><updated>2010-01-25T11:39:34.891+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Unix"/><title type='text'>Useful PNG commands</title><content type='html'>&lt;p&gt;Useful command for handling PNG files.&lt;/p&gt;&lt;p&gt;Prerequisites: ImageMagick, Pngcrush&lt;/p&gt;&lt;h3&gt; Resizing &lt;/h3&gt;&lt;p&gt;Resize to a given maximum size&lt;/p&gt;&lt;pre&gt;for i in *png ; do convert $i -geometry 16x16 x/$i; done
&lt;/pre&gt;&lt;p&gt;Resize exactly to given size, adding transparent borders&lt;/p&gt;&lt;pre&gt;for f in $(for i in x/* ; do file $i | grep -v &#39;16 x 16&#39; | cut -d: -f1; done) ; 
  do convert $f -type TrueColorMatte -compose Src -gravity center -extent 16x16 y/$f ; 
done
&lt;/pre&gt;&lt;h3&gt; Optimizing &lt;/h3&gt;&lt;p&gt;Trying different PNG compression settings, removing extra PNG contents (such as comments)&lt;/p&gt;&lt;pre&gt;for i in y/*png ; do pngcrush  -rem alla -reduce -brute &quot;$i&quot; z/&quot;$i&quot;; done
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/1481072960993520556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/01/useful-png-commands.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/1481072960993520556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/1481072960993520556'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/01/useful-png-commands.html' title='Useful PNG commands'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-7727713997644030321</id><published>2010-01-25T11:38:00.000+01:00</published><updated>2010-01-25T11:38:38.198+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="x64"/><title type='text'>Why (not) 64 bit</title><content type='html'>&lt;h3&gt; Why 64 Bit Windows &lt;/h3&gt;&lt;p&gt;Most chosen actual reason:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Because you payed a lot of money for that new 64 bit processor and feel cheated if you don&#39;t use it&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Technical Reasons&lt;/p&gt;&lt;ul&gt;&lt;li&gt;You really have an Applications which needs more than 4 GB of memory. (In most cases: You don&#39;t, unless you run a large database or huge self-written scientific applications). Use the system profiler to find out how much memory you &lt;i&gt;actually&lt;/i&gt; need.)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Your System has &lt;i&gt;more&lt;/i&gt; than 3,5 GB of memory (3 GB for Windows XP) &lt;i&gt;and&lt;/i&gt; you actually need it.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt; Why not 64 Bit Windows &lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Because you don&#39;t need it (see above)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Drivers support is incomplete&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Some applications don&#39;t work&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Many programs are installed twice: in the 32bit and 64bit versions, and some plugins work in one, but not the other. Notable Examples: Internet Explorer, Firefox, Explorer&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt; Biggest Myth &lt;/h3&gt;&lt;ul&gt;&lt;li&gt;a 64 bit OS is &lt;i&gt;not&lt;/i&gt; faster than a 32 bit OS!&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Please note: Most of this is also true for 64 bit Linux.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/7727713997644030321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/01/why-not-64-bit.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/7727713997644030321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/7727713997644030321'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/01/why-not-64-bit.html' title='Why (not) 64 bit'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-1187926955922199731</id><published>2010-01-25T11:36:00.002+01:00</published><updated>2010-01-25T11:36:41.558+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Desktop"/><category scheme="http://www.blogger.com/atom/ns#" term="Unix"/><title type='text'>Desktop file format</title><content type='html'>Confused about all the &lt;tt&gt;.desktop&lt;/tt&gt; files in Gnome / KDE?
 
There is an official spec at: &lt;a href=&quot;http://www.freedesktop.org/wiki/Specifications/desktop-entry-spec/&quot;&gt;www.freedesktop.org/wiki/Specifications/desktop-entry-spec&lt;/a&gt;.
 
&lt;h3&gt;Where are they?&lt;/h3&gt; 
 
All User files are in &lt;tt&gt;/usr/share/applications&lt;/tt&gt; 
&lt;br /&gt; 
Personal files are in &lt;tt&gt;$HOME/.local/share/applications&lt;/tt&gt; 
 
&lt;h3&gt;Gnome additions: / Autostart&lt;/h3&gt; 
 
&lt;pre&gt; 
X-GNOME-Autostart-enabled=true
&lt;/pre&gt; &lt;br /&gt; 
should be set for files in &lt;tt&gt;$HOME/.config/autostart&lt;/tt&gt;. This describes autostart applications.
 
More info on autostart: &lt;a href=&quot;http://bugs.kde.org/show_bug.cgi?id=170817#c6&quot;&gt;KDE Bug #170817&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/1187926955922199731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/01/desktop-file-format.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/1187926955922199731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/1187926955922199731'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/01/desktop-file-format.html' title='Desktop file format'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-758179031404107040</id><published>2010-01-25T11:34:00.001+01:00</published><updated>2010-01-25T11:34:40.200+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SSL"/><category scheme="http://www.blogger.com/atom/ns#" term="Unix"/><title type='text'>PEM from/to P12</title><content type='html'>&lt;p&gt;I commonly need to convert between PEM and p12&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;dl&gt; 
&lt;dt&gt;PEM&lt;/dt&gt; 
&lt;dd&gt;Is an ASCII format and can be opened with a text editor. It is used by most SSL-based tools. Key and certificate are two separate files.&lt;/dd&gt; 
&lt;dt&gt;p12&lt;/dt&gt; 
&lt;dd&gt;Acutally: Pkcs12 is used by most browsers. Key and certificate are in one file.&lt;/dd&gt; 
&lt;/dl&gt;&lt;/p&gt;&lt;p&gt;&lt;h3&gt;PEM to P12&lt;/h3&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;You need both the key and the certificate:&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;pre&gt; 
openssl pkcs12 -export -in usercert.pem -inkey userkey.pem -out bundle.p12
&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;&lt;h3&gt;P12 to PEM&lt;/h3&gt;&lt;/p&gt;&lt;p&gt;&lt;pre&gt; 
openssl pkcs12 -in bundle.p12 -out userkey.pem -nodes -clcerts
&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;&lt;p&gt;The resulting file contains both the key and certificate. Use a text editor to split into two files again.&lt;/p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/758179031404107040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/01/pem-fromto-p12.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/758179031404107040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/758179031404107040'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/01/pem-fromto-p12.html' title='PEM from/to P12'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-1519091108950484062</id><published>2010-01-25T11:32:00.002+01:00</published><updated>2010-01-25T11:32:40.972+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>Singleton Pattern in Java</title><content type='html'>&lt;p&gt;The &lt;strong&gt;singleton&lt;/strong&gt; pattern ensures that there is exactly one instance of a class.&lt;/p&gt; 
&lt;p&gt;There are multiple ways to implement the Singleton Pattern in Java, here is my personal favorite:&lt;/p&gt; 
&lt;hr /&gt;&lt;pre&gt; 
public final class SomeClass {
 
  private static final class SingletonHolder {
    private static final SomeClass INSTANCE = new SomeClass();
    private SingletonHolder() {}
  }
 
  private SomeClass() {
    // Add code if needed
  }
 
  /**
    * @return the Singleton Instance.
    */
  public static SomeClass getInstance() {
    return SomeClass.SingletonHolder.INSTANCE;
  }
 
  // add other methods
 
}&lt;/pre&gt;&lt;hr /&gt; 
&lt;p&gt;Notes:
&lt;ul&gt; 
&lt;li&gt;Replace &lt;em&gt;SomeClass&lt;/em&gt; with the class name, keep all other names exactly as given.&lt;/li&gt; 
&lt;li&gt;Class is &lt;strong&gt;final&lt;/strong&gt; to ensure its constructor cannot be made public by subclassing.&lt;/li&gt; 
&lt;li&gt;The SingletonHolder nested class enables lazy loading and ensures synchronization without performance loss.&lt;/li&gt; 
&lt;li&gt;Constructor must be made private.&lt;/li&gt; 
&lt;li&gt;getInstance returns the singleton instance of this class.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/1519091108950484062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/01/singleton-pattern-in-java.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/1519091108950484062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/1519091108950484062'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/01/singleton-pattern-in-java.html' title='Singleton Pattern in Java'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-5877544146824210032</id><published>2010-01-25T11:31:00.004+01:00</published><updated>2010-01-25T11:35:14.326+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Desktop"/><category scheme="http://www.blogger.com/atom/ns#" term="Unix"/><title type='text'>Find mime-type for a file</title><content type='html'>&lt;p&gt;Here is how to determine the mime-type for a given file on the command line.&lt;/p&gt;&lt;h3&gt; OS X &lt;/h3&gt;&lt;pre&gt;file --mime &#39;&#39;&#39;filename&#39;&#39;
&lt;/pre&gt;&lt;h3&gt; Linux &lt;/h3&gt;&lt;pre&gt;xdg-mime query filetype &#39;&#39;&#39;filename&#39;&#39;&#39;
gvfs-info -a standard::content-type &#39;&#39;&#39;filename&#39;&#39;&#39; | grep content | cut -d: -f4 | cut -d\  -f2-
gnomevfs-info &#39;&#39;&#39;filename&#39;&#39;&#39; | grep MIME | cut -d\: -f2- | cut -d\  -f2-
file --mime &#39;&#39;&#39;filename&#39;&#39;&#39; | cut -d\: -f2- | cut -d\  -f2
&lt;/pre&gt;&lt;h3&gt; Everywhere &lt;/h3&gt;&lt;p&gt;Update: We can modify the conditional alias to support mime types as well:&lt;/p&gt;&lt;pre&gt;conditional_alias2 () {
  UNSET=false
  alias $1 &gt; /dev/null 2&gt;&amp;amp;1 || UNSET=true
  [ $UNSET = true ] &amp;amp;&amp;amp; which $2 &gt; /dev/null 2&gt;&amp;amp;1 &amp;amp;&amp;amp; alias $1=$3
}
&lt;/pre&gt;&lt;pre&gt;mime_gvfs() {
  gvfs-info -a standard::content-type $1 | grep content | cut -d: -f4 | cut -d\  -f2-
}
mime_xdg() {
 xdg-mime query filetype $1
}
mime_gnomevfs() {
 gnomevfs-info file://$PWD/$1 | grep MIME | cut -d\: -f2- | cut -d\  -f2-
}
conditional_alias2 mime gvfs-info mime_gvfs
conditional_alias2 mime xdg-mime mime_xdg
conditional_alias2 mime gnomevfs-info mime_gnomevfs
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/5877544146824210032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/01/find-mime-type-for-file.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/5877544146824210032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/5877544146824210032'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/01/find-mime-type-for-file.html' title='Find mime-type for a file'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-7383876980971988654</id><published>2010-01-25T11:31:00.003+01:00</published><updated>2010-01-25T11:34:40.200+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SSL"/><category scheme="http://www.blogger.com/atom/ns#" term="Unix"/><title type='text'>Command Line SSL</title><content type='html'>&lt;p&gt;Finally found out how to connect to an SSL server over the command line:
&lt;/p&gt; 
&lt;p&gt; 
&lt;tt&gt;openssl s_client -connect www.example.com:443&lt;/tt&gt; 
&lt;/p&gt; 
&lt;p&gt;What a great &lt;tt&gt;netcat&lt;/tt&gt; replacement!&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/7383876980971988654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/01/command-line-ssl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/7383876980971988654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/7383876980971988654'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/01/command-line-ssl.html' title='Command Line SSL'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2740704466690807446.post-6134040864437510487</id><published>2010-01-25T11:29:00.001+01:00</published><updated>2010-01-25T11:35:14.326+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Desktop"/><category scheme="http://www.blogger.com/atom/ns#" term="Unix"/><title type='text'>Command Line Open in UNIX</title><content type='html'>&lt;p&gt;On OS X I can just &amp;quot;open&amp;quot; any file. On Windows, I can use &amp;quot;start&amp;quot;. And on Linux? On modern installations, the &amp;quot;xdg-open&amp;quot; command works just fine. Unfortunately - this is not always the case. And I don&#39;t want to remember different commands for different machines. So here is the ultimate open alias setting for bash, for all systems that I use (it can be easily extended for other environments).&lt;/p&gt;&lt;hr /&gt; 
&lt;pre&gt; 
conditional_alias() {
  UNSET=false
  alias $1 &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 || UNSET=true
  [ x$UNSET = xtrue ] &amp;amp;&amp;amp; which $2 &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;amp; alias $1=$2
}
 
conditional_alias open gvfs-open
conditional_alias open xdg-open
conditional_alias open gnome-open
conditional_alias open exo-open
uname | grep MINGW &gt; /dev/null 2&gt;&amp;1 &amp;&amp; alias open=start
&lt;/pre&gt;&lt;hr /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.max.berger.name/feeds/6134040864437510487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.max.berger.name/2010/01/command-line-open-in-unix.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/6134040864437510487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2740704466690807446/posts/default/6134040864437510487'/><link rel='alternate' type='text/html' href='http://blog.max.berger.name/2010/01/command-line-open-in-unix.html' title='Command Line Open in UNIX'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07574300047047721099</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>