Jan 10 22
A friend of mine started learning and practicing “nuad boran“, traditional Thai massage, a while ago. In order to get the best possible courses and the most authentic teachers she spent a few weeks in Thailand twice.
I had the pleasure of serving as one of her “practice objects” i.e. she needed human dummies on which she could practice her new techniques. I was immediately fascinated and impressed. It can give you so much more and it feels so much more complete than an ordinary massage.
Meanwhile she opened her own massage business. Check her out: http://www.mynuad.ch/
Jan 10 18
This is a follow-up for the Beware of WebSphere admins post just below.
My first immediate conclusion after the described deployment problems was to ban the use of the jsession cookie in future applications. If the application always includes the jsessionid parameter in URLs there’s nothing that can go wrong during deployment in terms of cookie paths.
Contemplating a second longer made it obvious that maybe this wouldn’t be such a wise decision after all. There are number of developers who try to enforce the exact opposite because the jsessionid URL parameter can be considered harmful. I highly recommend reading the following two blog posts that support this thesis:
http://randomcoder.com/articles/jsessionid-considered-harmful
http://boncey.org/2007_1_8_purging_jsessionid
Jan 10 18
A lot can go wrong when you deploy a simple Java EE application in IBM WebSphere – even if the application needs nothing but a Servlet container.
We recently shipped a JEE application to the customer. Although it was packaged in an EAR file, because the customer required it, it needs nothing but what the Servlet specification mandates. The application was tested both at other customer sites and on our internal infrastructure. Some customers use JBoss, others Oracle Weblogic and we use Tomcat internally. This new customer uses IBM WebSphere *sigh* – not our dearest friend, but so what. So we set up a WebSphere test server in-house and successfully deployed the application.
The customer asked us to fill in a several page form to specify all the necessary configuration parameters our application required. For almost all fields we settled for the provided default values because all we basically needed was a JNDI name pointing to a datasource.
Needless to say the application didn’t run out-of-the-box at the customer site.
Given the fact that the application runs fine on all but this customer’s infrastructure neither the customer nor I thought it necessary for us to provide on-site support. The log files we got for analysis indicated that somehow they seemed to have a multi-threading or multi-session problem. For two weeks the customer’s network and WebSphere specialists tried to figure our what was going on. When they were at their wits end, my repeated offer to send one of our engineers over was accepted. When he, too, was stuck a day later I asked him to share his screen remotely and show me request/response headers in HttpFox.
It became apparent immediately why our application constantly created new sessions. The cookie path for the jsessionid cookie was neither ‘/’ nor was it equal to the context root of our application. Hence, with every response our application returned a new jsession cookie, but when the browser sent a new request to the application it didn’t include the session id – because it didn’t find a cookie with a path that matched the application’s context root. Usually you’d notice this immediately because you’d have to authenticate yourself (i.e. log in) constantly with every request. Since the customer uses SSO this was done transparently in the background.
So, what’s this got to do with the WebSphere admin? Well, in the form mentioned above we were asked for the application cookie path. The default value was ‘/’ and therefore we hadn’t changed it. The admin, however, acted on his own authority and changed this to something else.
Dec 09 12
I just invested 30min to find tools/libraries which allow me to use PHP scripts instead of Java on the server when the front end is GWT. There are various potential channels through which GWT and PHP can talk to each other. GWT RPC, ideally native or over JSON/XML would certainly be the most obvious choice.
My Internet search didn’t turn up a whole lot of useful stuff…
http://code.google.com/p/gwtphp/
http://code.google.com/p/gwtamp/
http://code.google.com/p/lacertae/
http://download.boulder.ibm.com/ibmdl/pub/software/dw/xml/x-gwtphp/x-gwtphp-pdf.pdf
http://angel.hurtado.googlepages.com/tutorialgwt2
Nov 09 18
On a new OS X 10.6 Snow Leopard the Huwei E220 USB modem (from Swisscom in my case) didn’t work anymore. The USB dongle mounts and the files on the mounted drive were visible but the Unlimited Connection Manager (UCM) installer contained in the mounted drive crashed always. It’s obviously not compatible with 10.6.
To fix this you need to download the latest version from http://www.swisscom.ch/res/hilfe/downloads/mobile/unlimited/index.htm. It still says on that page that only 10.4 and 10.5 are supported but it works just fine with 10.6, too.
Oct 09 31
By default if a folder in Apple iPhoto contains albums and you delete the folder, the photos in its contained albums will be deleted with it. There’s a warning dialog about this but there’s no option for you to tell iPhoto to get rid off the folder but keep the albums.
To achieve this you need to drag the album from the folder you want to delete to the top level ‘Photos’ folder. iPhoto will move the album from your folder to the top level ‘Albums’ section. Repeat this for each album in the folder. Once it’s empty you can safely get rid of it.
In contrast, if you delete an album that is not inside a custom folder the warning dialog tells you that the album will be removed but not the photos.
Oct 09 19
After upgrading my Mac mini from Leopard to Snow Leopard it did no longer wake from sleep when I sent the magic wake-on-lan package. So, I checked the network and energy settings and noticed that Snow Leopard’s new Wake-On-Demand (WOD ?) feature was disabled. I didn’t change that and started to wonder why WOL didn’t work.
Internet search lead to http://support.apple.com/kb/HT3774 in which Apple explains that “for some earlier Macs this option must be enabled [manually]“. What I didn’t immediately grasp is that WOD is a full replacement for WOL. I was initially reluctant to enable this option because I don’t want WOD (don’t have the necessary AirPort Extreme anyway) but only WOL. However, even after going through the article this didn’t become apparent. One must guess or assume…
What further clarified the situation was an ars technica article about “The sleeping Mac dilemma”.
So, to cut a long story short. Snow Leopard’s WOD falls back to WOL mode if it can’t find the necessary infrastructure (AirPort Extreme or Time Capsule) and therefore you need to enable WOD if you want WOL. Logical, isn’t it?
Sep 09 26
Once a year or so my wife and I take a day off to go shopping in Konstanz. Usually we start this day by having a small breakfast in the train’s restaurant car on the way from Zurich to Germany.
Once in Konstanz one shop we always spend a considerable amout of time in is Jeans-in. In fact, for my wife this shop is the top reason for even going to Konstanz. The jeans expertise of that one sales girl is amazing. She only has to give your body a quick glance to pick several jeans models that fit you.
This time we discovered that they started selling Kuyichi jeans. And they sell it big times. Kuyichi is cool not only because of their style and quality but because they’re organic and the company sets high standards in terms of sustainability. We like “green” stuff…because it’s the only option for our planet’s future.
One shop we only recently discovered is Cha Cha. They’ve got pretty cool stuff, especially for women. It’s there that we learned about the Swiss brand Alprausch. My wife bought one of their cardigan-style vests and I also picked a stylish Skunkfunk top.
Sep 09 24
It’s not that The Five Dysfunctions of a Team by Patrick Lencioni provides any new aspects to team building….wait, there’s more…it’s not that Lencioni provides any new aspects, yet it’s the clarity and simplicity with which the material is presented that makes this book a must-read. And no, I don’t mean a must-read for the manager caste. In fact, I truly believe that any member of a team no matter what role she fulfills will find the material worthwhile.
I read 3/4 of the book in one evening. It’s an easy read because the story revolves around a fictitious yet realistic case of a CEO and her dysfunctional team. I found myself constantly relating the events in the story to my own experiences at work.
The strategies presented in the book appeal to me so strongly because it all seems common sense. It’s not rocket science – at least not on paper. Yet, imperfect as we are, we seem to constantly fall back to behavioral patterns that only bring misery.
I’m a big fan of agile development and Scrum in particular. It’s easy to build a bridge between Scrum and Lencioni’s methods. I guess I love them for the same reason.
Sep 09 22
In most programming languages the regular expression pattern to find the digit ’1′ surrounded by ‘;’ and other digits would be something like
[;\d]*1[;\d]*
So, the pseudo character class “; or digit” is matched zero or more times, then the digit 1 is matched followed by zero or more “; or digit”s. A few examples:
<property id="foo" value=";1;;;"/>
yet another regexp test with 1;;;;3xxyyzz...
well I think you get the picture with this ;;;;1 shizzle even if it's ;1;2;3; or 123
With Oracle SQL, however, it’s a slightly different story. \d is not supported i.e. not properly recognized as being the character class for digits. However, the character class 0-9 which generally is the equivalent to \d seems to be supported. In Oracle you could therefore use
[;0-9]*1[;0-9]*
As far as I can tell this is an undocumented feature. The official Oracle regexp documentation only mentions that it supports the regular POSIX character class [:digit:]. Watch out, the equivalent to \d is the whole expression [:digit:] and not just :digit:. I was first fooled by the extra [] around the character class designator… So, according to the documentation you’d have to use
[;[:digit:]]*1[;[:digit:]]*