<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkcGSXo9eCp7ImA9WhdVEEw.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320</id><updated>2011-09-14T16:20:28.460+02:00</updated><category term="show" /><category term="connector" /><category term="libstdc++5" /><category term="2.5" /><category term="2009" /><category term="installation" /><category term="live" /><category term="barriers" /><category term="Dublin" /><category term="stylesheet" /><category term="gpx" /><category term="privacy" /><category term="subscribe" /><category term="quickr81" /><category term="jawr" /><category term="RSA" /><category term="db2" /><category term="stupidity" /><category term="chrome" /><category term="library" /><category term="troubleshooting" /><category term="firefox" /><category term="twitterbar" /><category term="Lotus Connections" /><category term="css" /><category term="websphere" /><category term="bratislava" /><category term="get2gether" /><category term="travelling" /><category term="protection" /><category term="2008" /><category term="mp3 encode wav script" /><category term="tab" /><category term="facebook" /><category term="terror" /><category term="rock" /><category term="creation" /><category term="eclipse java code template pattern best-practices singleton" /><category term="Portal" /><category term="security" /><category term="tracking" /><category term="cheese" /><category term="kml" /><category term="WebAppIntegrator" /><category term="holiday" /><category term="best practices" /><category term="cloud" /><category term="links" /><category term="flying" /><category term="ui" /><category term="integration" /><category term="twhirl" /><category term="sweden" /><category term="instconffailed" /><category term="was" /><category term="switzerland" /><category term="fix" /><category term="ubuntu" /><category term="error" /><category term="lc25" /><category term="label" /><category term="technote" /><category term="activity" /><category term="Amsterdam" /><category term="javascript" /><category term="social software" /><category term="seamless" /><category term="latvia" /><category term="9.10" /><category term="converter" /><category term="Stockholm" /><category term="quickr" /><category term="London" /><category term="export" /><category term="sidebar" /><category term="nls" /><category term="application" /><category term="ch" /><category term="keyconfig" /><category term="notifications" /><category term="value-add" /><category term="internet" /><category term="script" /><category term="hotkey" /><category term="modelling" /><category term="access" /><category term="spnego" /><category term="bomber" /><category term="failed" /><category term="web20" /><category term="customization" /><category term="gathering" /><category term="lotus" /><category term="linux" /><category term="meet-greet" /><category term="hack" /><category term="navigation" /><category term="gothic" /><category term="personal" /><category term="login" /><category term="connections" /><category term="vacation" /><category term="sso" /><category term="goals" /><category term="issl" /><category term="music" /><category term="communities" /><category term="Portal Awareness" /><category term="blog" /><category term="fondue" /><category term="gps" /><category term="appserver" /><category term="business use" /><category term="diagram" /><category term="pervasive" /><category term="multilingual" /><category term="Riga" /><category term="ireland" /><category term="bookmark" /><category term="twitter" /><category term="missing" /><category term="server" /><category term="satire" /><category term="Prague" /><category term="profile" /><title>whoopdicity</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://whoopdicity.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Whoopdicity" /><feedburner:info uri="whoopdicity" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CUMBSHc7fip7ImA9WxBVE0Q.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-1730004661944629354</id><published>2010-02-17T08:56:00.001+01:00</published><updated>2010-02-17T08:57:39.906+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-17T08:57:39.906+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="switzerland" /><category scheme="http://www.blogger.com/atom/ns#" term="show" /><category scheme="http://www.blogger.com/atom/ns#" term="gothic" /><category scheme="http://www.blogger.com/atom/ns#" term="rock" /><category scheme="http://www.blogger.com/atom/ns#" term="music" /><category scheme="http://www.blogger.com/atom/ns#" term="live" /><category scheme="http://www.blogger.com/atom/ns#" term="gathering" /><category scheme="http://www.blogger.com/atom/ns#" term="ch" /><title>The Gathering in Pratteln, 02/10/10</title><content type="html">Last week I was in Pratteln (CH) watching &lt;a href="http://www.gathering.nl/"&gt;The Gathering&lt;/a&gt; touring with their latest album &lt;span style="font-style: italic;"&gt;The West Pole&lt;/span&gt;. I've been following this band since I was 16. Back then they made sort of Gothic Metal (starting with Death Metal on their earlier releases) and in the following years they developed their style to something they call &amp;quot;Trip Rock&amp;quot;, a mix of Trip Hop and Rock, quite melancholic and gloomy, but still rock. After their last album their former singer Anneke van Giersbergen left the band in 2007 starting a solo career with &lt;a href="http://www.aguadeannique.com/"&gt;Agua de Annique&lt;/a&gt;, leaving the band without a charismatic singer. And I must admit, they found a real good successor for Anneke in Silje Wergeland from Norway. I was positively surprised, she did a pretty good performance even on the old songs. All in all I think she fits perfectly into this likable, natural, down-to-earth group of great musicians. And of course I got another band item for my garderobe - a new hoodie - and a signed poster for home office :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;See this video from the show, playing the very first song from my first The Gathing album &amp;quot;Nighttime Birds&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/x3CWL0LJy2w&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/x3CWL0LJy2w&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-1730004661944629354?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/XjyZoVERs90" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/1730004661944629354/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=1730004661944629354" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/1730004661944629354?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/1730004661944629354?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/XjyZoVERs90/gathering-in-pratteln-021010.html" title="The Gathering in Pratteln, 02/10/10" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2010/02/gathering-in-pratteln-021010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QMSHs_fyp7ImA9WxBXEUk.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-3573894579389248755</id><published>2010-01-21T16:26:00.001+01:00</published><updated>2010-01-22T08:29:49.547+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-22T08:29:49.547+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="server" /><category scheme="http://www.blogger.com/atom/ns#" term="websphere" /><category scheme="http://www.blogger.com/atom/ns#" term="application" /><category scheme="http://www.blogger.com/atom/ns#" term="missing" /><category scheme="http://www.blogger.com/atom/ns#" term="profile" /><category scheme="http://www.blogger.com/atom/ns#" term="installation" /><category scheme="http://www.blogger.com/atom/ns#" term="library" /><category scheme="http://www.blogger.com/atom/ns#" term="libstdc++5" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><category scheme="http://www.blogger.com/atom/ns#" term="9.10" /><category scheme="http://www.blogger.com/atom/ns#" term="failed" /><category scheme="http://www.blogger.com/atom/ns#" term="quickr" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="appserver" /><category scheme="http://www.blogger.com/atom/ns#" term="was" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="db2" /><category scheme="http://www.blogger.com/atom/ns#" term="instconffailed" /><category scheme="http://www.blogger.com/atom/ns#" term="creation" /><title>Installing Lotus Quickr on Ubuntu Linux Server 9.10</title><content type="html">The installation of Lotus Quickr Services for WebSphere Portal includes an installation of DB2. Installing Quickr on an out-of-the-box installation of Ubuntu will fail due to a missing C++ library. The DB2 service requires a standard C++ library in version 5. Ubuntu Linux 9.10 includes version 6 of that library. In order to install Quickr 8.1.1 on a Ubuntu 9.10 system, you have to manually install the required library from an older release. You can find the package in the &lt;a href="http://packages.debian.org/lenny/i386/libstdc++5/download"&gt;&lt;wbr&gt;Debian package repository&lt;/a&gt;&lt;div class="entryContentContainer"&gt;&lt;wbr&gt;. Download the .deb file from the repository and install it by issuing the following command as superuser&lt;br /&gt;&lt;wbr&gt;&lt;pre style=""&gt;&lt;wbr&gt;dpkg -i libs&lt;wbr&gt;tdc+&lt;wbr&gt;+5_3&lt;wbr&gt;.3.6&lt;wbr&gt;-18_&lt;wbr&gt;i386&lt;wbr&gt;.deb&lt;wbr&gt;&lt;/pre&gt;&lt;wbr&gt; The next issue I stumbled upon was during the creation of the was profile. The default shell of Ubuntu Linux is /bin/sh which does not support arrays and therefore a call to wsadmin.sh during the profile creation fails. I found &lt;a href="http://blog.oogly.co.uk/sysadmin/websphere-install-on-ubuntu-hardy-heron"&gt;&lt;wbr&gt;this blog entry&lt;/a&gt;&lt;wbr&gt; that describes how to solve this. You have to unlink /bin/sh, link it to bash and do a reconfigure. Enter the following commands as superuser:&lt;br /&gt;&lt;pre style=""&gt;unlink /bin/sh&lt;br /&gt;ln -s /bin/bash /bin/sh&lt;/pre&gt;or&lt;br /&gt;&lt;pre style=""&gt;dpkg-reconfigure dash&lt;/pre&gt;Finally, after the installation is complete, you have to change the default shell for the created DB2 instance user for Quickr (i.e. quickradm), which is set to /bin/sh. Using this shell won't properly initialize the db2 environment when running the db2profile script. You should change the shell to bash, otherwise commands like db2stop and db2start won't be accessible. To change the default shell, edit as superuser the file /etc/passwd, look for the quickr users (usually in the end), and change the /bin/sh to /bin/bash.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-3573894579389248755?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/lK2vPXquWOg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/3573894579389248755/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=3573894579389248755" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/3573894579389248755?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/3573894579389248755?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/lK2vPXquWOg/installing-lotus-quickr-on-ubuntu-linux.html" title="Installing Lotus Quickr on Ubuntu Linux Server 9.10" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>4</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2010/01/installing-lotus-quickr-on-ubuntu-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcAQXszfCp7ImA9WxNaEk4.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-7346867375752609259</id><published>2009-11-26T12:46:00.000+01:00</published><updated>2009-11-26T12:47:20.584+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-26T12:47:20.584+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cheese" /><category scheme="http://www.blogger.com/atom/ns#" term="terror" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><category scheme="http://www.blogger.com/atom/ns#" term="satire" /><category scheme="http://www.blogger.com/atom/ns#" term="flying" /><category scheme="http://www.blogger.com/atom/ns#" term="stupidity" /><category scheme="http://www.blogger.com/atom/ns#" term="bomber" /><category scheme="http://www.blogger.com/atom/ns#" term="fondue" /><title>"Plane attack prevented by disarming Swiss Cheese Bomber"</title><content type="html">It's a ridiculous story that happend to me yesterday. I intended to visit my mother who lives near Hamburg for the 1st advent, I bought a gift for her, as I live now in Switzerland, what is more obvious than bringing some Swiss presents so I bought a complete Swiss Fondue Set, including forks, heater, a big cheese-pot and some dishes and - of course - 1.5kg of Swiss Fondue Cheese (and also some flour for making fresh bread). All our suitcases where full (mine and that of my girlfriend) so we decided to carry the present in our hand luggage. Of course we had to pass security and we where already quite late at the airport. But at the security x-ray scanner we had two findings. One was the flour in my bag pack (scary, huh?) and the other was - you might already guess - the 1.5kg Swiss fondue cheese. Ok, you might think, it was found, considered harmless and that's all about it. But no way! The security officer told me, that this &lt;b&gt;chunk of cheese is considered as liquid&lt;/b&gt; (!) and we where not allowed to take it on board. I thought they were kidding, but they weren't, they argued, that it contains wine - which is alcohol - and inflammable. Yes, of course, how could I forget, most of all fire accidents happen due to exploding wine bottles. They said, if I would have some time I could check it in as normal luggae (how normal is it to check in a separate chunk of cheese?). But anyway, we could not take it with us and had to leave it. My girlfriend wished them a nice fondue party and they told us they had to destroy it anyway. The fresh, new, sealed and unused chunk of cheese.&lt;br /&gt;I mean, how stupid is this liquid policy? What's more obvious than carry some cheese when carrying a complete fondue set? Everyone saw it - even the security officers saw it, they looked pretty helpless explaining to us, why a chunk of cheese is a threat. Around 8mio swiss people knew that such a chunk of cheese causes if ever then most likely a bilious attack - but not a plane attack. This has nothing to do with common sense. This has even nothing to do with security or terror prevention. How could liquids in general  and a chunk of cheese in special help hijacking a plane? I mean, if it's really a bomb, then the plane just explodes and that's it, you could not fly an exploding plane into a skyscraper, and it's way more easier to get a bomb into a train and blow an entire main station out of this world then getting a chunk of cheese on board of a plane. This is pure stupid, made by people that are not affected. This reminds me of former times, when the soviet central government dictated, what famers had to plant - regardless if farmers complained that the plants are not growing in that region (as I've read in the Occupation museum in Riga).&lt;br /&gt;Stop stupidity and start thinking again!&lt;br /&gt;&lt;br /&gt;Well, in the end, we arrived safe and sound in Hamburg thanks to the security authorities who disarmed the dangerous swiss-cheese bomber (me). Happy X-mas!&lt;br /&gt;&lt;br /&gt;(and the weird end of the story is the fact, that I could easily take 80g of &lt;b&gt;burning paste&lt;/b&gt; which was included in the heater-set onboard without noticing and which is much more inflammable than a chunk of cheese...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-7346867375752609259?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/TC4UGacmMtE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/7346867375752609259/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=7346867375752609259" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/7346867375752609259?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/7346867375752609259?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/TC4UGacmMtE/plane-attack-prevented-by-disarming.html" title="&quot;Plane attack prevented by disarming Swiss Cheese Bomber&quot;" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/11/plane-attack-prevented-by-disarming.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQDQXw4fSp7ImA9WxNbF08.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-2823564205191508057</id><published>2009-11-20T14:26:00.003+01:00</published><updated>2009-11-20T14:39:30.235+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-20T14:39:30.235+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pervasive" /><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="barriers" /><category scheme="http://www.blogger.com/atom/ns#" term="access" /><category scheme="http://www.blogger.com/atom/ns#" term="protection" /><category scheme="http://www.blogger.com/atom/ns#" term="seamless" /><category scheme="http://www.blogger.com/atom/ns#" term="internet" /><category scheme="http://www.blogger.com/atom/ns#" term="chrome" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><category scheme="http://www.blogger.com/atom/ns#" term="privacy" /><title>Where is the cloud on a sunny day? or Who controls the weathermaker?</title><content type="html">Google announced they &lt;a href="http://googleblog.blogspot.com/2009/11/releasing-chromium-os-open-source.html" _djrealurl="http://googleblog.blogspot.com/2009/11/releasing-chromium-os-open-source.html"&gt;Releasing the Chromium OS open source project&lt;/a&gt;. They focussed on speed, security and easy handling. The entire concept is, that application do not run on the local machine at all but on the cloud, all the data are on the cloud. So much for the theory. Actually I like the idea of access to all my data everywhere and independent from the device with which I access them, but when it comes to the reality I think we are yet pretty far away from "Everything-in-the-cloud". In my oppinion there are two major obstacles to overcome:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Seamless and Pervasive access to the Internet&lt;/b&gt;. Considering the technical and financial side, this is not yet reality for most of the people. The prices are yet still to high for mobile services - especially when it comes to travelling abroad - unlike the US, Europe consists of lots of more or less small countries where you pay roaming fees - which are quite high when it comes to 24h-web-access. As example (from ordinary mobile telephony): I paid 8€ for a-15mins phone call abroad, and I was called! Looking at the technical side, UMTS has become widely available, though there are situation where you simply have no signal - in mountain regions or in the deep cellars of a customer's computing center. There you still rely on plain old network cables. When it comes to &lt;i&gt;seamless&lt;/i&gt;, it's still a pain to switch different network providers or media. Switching from UMTS to WLAN to Cable is still a pain, having to reconnect to different services because of a new IP, lost sessions (MS RDP is my favorite...). And how do you access your data or applications when there are blue skies? When you rely on the accessibility of the Internet you could end up lost in the wilderness  - and this is not an artifical problem, when I was in the Sequoia National Park this summer, we had no phone or internet access there but had to find a gas station. We were lucky in the end but consider you navigation system runs on Google! But I think, the technology will evolve and this obstacle evaporate over time. But the other obstacle require more than this.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Privacy data protection and data security&lt;/b&gt;. When I would put all my data and applications that have been running on my local machine into the cloud I would expand my trust domain from my client device to the cloud (or the internet or provider). And this requires a lot of trust! I have control over my local machine, I can pull the plug and preventing access to it. Of course it is in my responsibility to protect and secure my system, but thats ok. But when it comes to the cloud, I have to trust the cloud provider. And when I look at the recent sensitive data infringements that happen in Spain where probably over 100k credit card data sets have been lost I don't want to think about what would happen if the rest of my data would be stolen from the cloud provider! At the moment we trust on the pure goodwill of a company like Google. Sure, their services are yet for free but what's the worth of my private data I put into their hands? I don't even have a formal contract between them! And even if there would be contract and I would pay for using the cloud - how could I be sure to trust the provider? Providers fail, like power, water or internet providers may fail from time to time, those things happen - but it's not just the lost of internet access, light or fresh water for a moment - it may be the loss of your privacy for a longer period than just a moment! A solution for this would be kind of a certification the cloud providers could get from a governmental agency like those for data privacy protection, something similar to those of a Certification Authority. There have to be regulations for systems that deal with private data such as for banks. Before there isn't such thing I can rely on I won't put my private stuff into the cloud (although I have to admit, that I already use gmail - but to be honest that's already more than I feel comfortable with).&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-2823564205191508057?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/vsGf3eMzCyY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/2823564205191508057/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=2823564205191508057" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/2823564205191508057?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/2823564205191508057?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/vsGf3eMzCyY/where-is-cloud-on-sunny-day-or-who.html" title="Where is the cloud on a sunny day? or Who controls the weathermaker?" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/11/where-is-cloud-on-sunny-day-or-who.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQMSHsyfip7ImA9WxNWGU4.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-1437331122932895109</id><published>2009-10-19T09:45:00.000+02:00</published><updated>2009-10-19T09:46:29.596+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-19T09:46:29.596+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="connections" /><category scheme="http://www.blogger.com/atom/ns#" term="communities" /><category scheme="http://www.blogger.com/atom/ns#" term="customization" /><category scheme="http://www.blogger.com/atom/ns#" term="subscribe" /><category scheme="http://www.blogger.com/atom/ns#" term="notifications" /><category scheme="http://www.blogger.com/atom/ns#" term="hack" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>Lotus Connections Communities: Enable "Suscribe to ..." as default and hide it</title><content type="html">&lt;p&gt;The customer I work for, wants that for all Forum entries a notification is sent as default and the user should not have the possibility to disable this. Though I don't think, this is a good idea but anyway, here is the description how to do this.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The following changes have then been applied to tick the notifications checkboxed by default and hide them in the Web UI:&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Edit &lt;pre&gt;Communities.ear/comm.web.war/WEB-INF/forum/views/topicThread.jsp&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Locate:&lt;pre&gt;&amp;lt;div id=&amp;quot;contentArea&amp;quot; class=&amp;quot;lotusLimit&amp;quot;&amp;gt;&lt;br /&gt; &amp;lt;c:if test=&amp;quot;${not topic.deleted}&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;div id=&amp;quot;forum&amp;quot; class=&amp;quot;lotusForum&amp;quot;&amp;gt;&lt;br /&gt;   &amp;lt;div class=&amp;quot;lotusMessage lotusHidden&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;    &amp;lt;c:if test='${canSubscribe}'&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;set the body content of the innermost tag (c:if) to&lt;pre&gt;&amp;lt;div class=&amp;quot;lotusRight&amp;quot; &lt;span style="color: red;"&gt;style=&amp;quot;display:none;&amp;quot;&lt;/span&gt;&amp;gt; &lt;br /&gt;&amp;lt;input id=&amp;quot;${subscribeCheckId}&amp;quot; type=&amp;quot;checkbox&amp;quot; &lt;span style="color: red;"&gt;checked=&amp;quot;checked&amp;quot;&lt;/span&gt;/&amp;gt; &lt;br /&gt;&amp;lt;label for=&amp;quot;${subscribeCheckId}&amp;quot;&amp;gt;&amp;lt;fmt:message key=&amp;quot;label.forum.notify&amp;quot; /&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Edit &lt;pre&gt;Communities.ear/comm.web.war/javascript/build/dojo/communities.js&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Locate&lt;pre&gt;&amp;lt;td&amp;gt;&amp;lt;input name=\&amp;quot;subscribe\&amp;quot; dojoAttachPoint=\&amp;quot;subscribeNode\&amp;quot; type=\&amp;quot;checkbox\&amp;quot; id=\&amp;quot;${id}_subscribe\&amp;quot; value=\&amp;quot;true\&amp;quot; ${checkedAttr} /&amp;gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Change to&lt;pre&gt;&amp;lt;td &lt;span style="color: red;"&gt;style=&amp;quot;display:none&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;input name=\&amp;quot;subscribe\&amp;quot; dojoAttachPoint=\&amp;quot;subscribeNode\&amp;quot; type=\&amp;quot;checkbox\&amp;quot; id=\&amp;quot;${id}_subscribe\&amp;quot; value=\&amp;quot;true\&amp;quot; &lt;span style="color: red;"&gt;checked=\&amp;quot;checked\&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Important:&lt;/b&gt; the changes applied to both files are not recommended as they are no official and supported customization option for Lotus Connections!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;At first the customer did this by themselves, but they did not hide (display:none) the elements, but removed the first one (in jsp) entirely from the file, without documenting which files have been changed and what was changed.  DONT TRY THIS AT HOME!&lt;/p&gt;&lt;br /&gt;&lt;p&gt; Always:&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create a backup of the files you change&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Document which file you change&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Document what you change&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Avoid modifying the HTML structure by REMOVING elements. Try to hide them instead, either by CSS-Stylesheet (best), style-element (ok) or javascript (last option)&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-1437331122932895109?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/nj2ilysL4zA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/1437331122932895109/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=1437331122932895109" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/1437331122932895109?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/1437331122932895109?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/nj2ilysL4zA/lotus-connections-communities-enable.html" title="Lotus Connections Communities: Enable &quot;Suscribe to ...&quot; as default and hide it" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/10/lotus-connections-communities-enable.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cEQ3w_cCp7ImA9WxNQEks.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-3198473838239351606</id><published>2009-09-18T11:03:00.003+02:00</published><updated>2009-09-18T11:10:02.248+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-18T11:10:02.248+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lotus Connections" /><category scheme="http://www.blogger.com/atom/ns#" term="connections" /><category scheme="http://www.blogger.com/atom/ns#" term="login" /><category scheme="http://www.blogger.com/atom/ns#" term="2.5" /><category scheme="http://www.blogger.com/atom/ns#" term="tab" /><category scheme="http://www.blogger.com/atom/ns#" term="lc25" /><category scheme="http://www.blogger.com/atom/ns#" term="customization" /><category scheme="http://www.blogger.com/atom/ns#" term="navigation" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>Changing the Landing page after Login in Lotus Connections 2.5</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;As I described in an &lt;a href="http://whoopdicity.blogspot.com/2009/09/changing-landing-tab-for-lotus.html"&gt;earlier post&lt;/a&gt;, how to modify the Homepage link of the navigation bar in order to display the "My page" instead of the update page, I describe in this post how to modify the Homepage redirection after logging in to Connections. We make use of the &lt;code&gt;WASReqURL&lt;/code&gt; cookie that is set to remember the URL to a protected resource when there is no User session active. WAS redirects to the Login page and remembers the previously called URL in the &lt;code&gt;WASReqURL&lt;/code&gt;. Via a small JavaScript on the login page, we modify this cookie to point to the My Page url. The login page is defined in &lt;code&gt;dboard.war/auth/login.jsp&lt;/code&gt;. Add the following snippet to the head scripts of the file.&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: monospace; background-color: lightgray; white-space: pre;"&gt;&lt;br /&gt;function setRedirectCookie(){&lt;br /&gt;  var cookieName = "WASReqURL";&lt;br /&gt;  var requestURL = getCookie(cookieName);&lt;br /&gt;  if(requestURL.substr(requestURL.length - 9) == "homepage/") {&lt;br /&gt;    requestURL += "web/widgets";&lt;br /&gt;  }&lt;br /&gt;  setCookie(cookieName, requestURL, null, "/");&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;The &lt;code&gt;getCookie()&lt;/code&gt; and &lt;code&gt;setCookie()&lt;/code&gt; methods are copied from the example on &lt;a href='http://www.w3schools.com/JS/js_cookies.asp'&gt;w3schools&lt;/a&gt;. Note, that the &lt;code&gt;setCookie()&lt;/code&gt; method uses a fourth parameter, which is the path that is simply appended after the expires parameter. The &lt;code&gt;setRedirectCookie()&lt;/code&gt; method retrieves the &lt;code&gt;WASReqURL&lt;/code&gt; and checks if it ends with "homepage/" - which is the Updates page. If thats the case, the "web/widgets" is appended, pointing to the My Page. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-3198473838239351606?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/habE13LJsOE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/3198473838239351606/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=3198473838239351606" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/3198473838239351606?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/3198473838239351606?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/habE13LJsOE/changing-landing-page-after-login-in.html" title="Changing the Landing page after Login in Lotus Connections 2.5" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>9</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/09/changing-landing-page-after-login-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYAQH4ycCp7ImA9WxNQEUQ.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-3717767302379894596</id><published>2009-09-17T16:34:00.000+02:00</published><updated>2009-09-17T16:35:41.098+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-17T16:35:41.098+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lotus Connections" /><category scheme="http://www.blogger.com/atom/ns#" term="connections" /><category scheme="http://www.blogger.com/atom/ns#" term="multilingual" /><category scheme="http://www.blogger.com/atom/ns#" term="2.5" /><category scheme="http://www.blogger.com/atom/ns#" term="lc25" /><category scheme="http://www.blogger.com/atom/ns#" term="customization" /><category scheme="http://www.blogger.com/atom/ns#" term="label" /><category scheme="http://www.blogger.com/atom/ns#" term="links" /><category scheme="http://www.blogger.com/atom/ns#" term="nls" /><title>Adding a multi-lingual link to Header or Footer in Lotus Connections 2.5</title><content type="html">&lt;p&gt;According to the InfoCenter, it is quite simple to add additional content such as links to the &lt;a href="https://infocenters.lotus.com/lc25beta/index.jsp?topic=/com.ibm.connections.25.help/t_admin_navbar_create_files.html"&gt;header &lt;/a&gt;of the &lt;a href="https://infocenters.lotus.com/lc25beta/index.jsp?topic=/com.ibm.connections.25.help/t_admin_common_add_footer_link.html"&gt;footer&lt;/a&gt;. What the InfoCenter doesn't mention, how you could have the labels of these links multilangual. But fortunately, that's not very complicated. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;For editing the header or footer itself, follow the instructions in the InfoCenter. But instead of writing the label of a link directly to the file, use a placeholder similar to the existing ones, like {{ label.header.mylink }}.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;To add the label: for each component, locate the &lt;code&gt;lc.util.web-2.5.jar&lt;/code&gt; file - should be in the &lt;code&gt;WEB-INF/lib&lt;/code&gt; of the the web modules. This jar file contains the resource files. Open the file for edit (use a proper archive tool*) and search for the package/path &lt;code&gt;com.ibm.lconn.core.web.ui.resources&lt;/code&gt;. That path contains the resource files. Edit the resource files for your language and add the label (i.e. &lt;code&gt;label.header.mylink&lt;/code&gt;) and a value in the proper language. &lt;b&gt;Important:&lt;/b&gt; add the label you are using at least to the &lt;code&gt;resources.properties&lt;/code&gt; file, that is used as fallback if a label is not defined in the localized properties file.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;*: If you have no tool to edit the files directly in the jar file, you could also rename the .jar file to a .zip file, extract it, edit the files, compress it again as .zip and rename it back to .jar&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-3717767302379894596?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/XHiyloTL3FE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/3717767302379894596/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=3717767302379894596" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/3717767302379894596?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/3717767302379894596?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/XHiyloTL3FE/adding-multi-lingual-link-to-header-or.html" title="Adding a multi-lingual link to Header or Footer in Lotus Connections 2.5" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/09/adding-multi-lingual-link-to-header-or.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUNSHo5fCp7ImA9WxNQEUU.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-4753649191121290457</id><published>2009-09-17T12:34:00.006+02:00</published><updated>2009-09-17T12:44:59.424+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-17T12:44:59.424+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lotus Connections" /><category scheme="http://www.blogger.com/atom/ns#" term="connections" /><category scheme="http://www.blogger.com/atom/ns#" term="tab" /><category scheme="http://www.blogger.com/atom/ns#" term="lc25" /><category scheme="http://www.blogger.com/atom/ns#" term="customization" /><category scheme="http://www.blogger.com/atom/ns#" term="navigation" /><title>Changing the landing tab for a Lotus Connections 2.5 feature</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br /&gt;&lt;p&gt;We had a customer, that wanted that the Homepage feature's default tab should be the "My Page" tab not the Update tab as it is per default. The InfoCenter mentions, that you could &lt;a href="http://publib.boulder.ibm.com/infocenter/ltscnnct/v2r0/topic/com.ibm.connections.25.help/t_admin_navbar_create_files.html"&gt;add additional links to the navigation bar&lt;/a&gt; by editing the header.html. Another &lt;a href="http://publib.boulder.ibm.com/infocenter/ltscnnct/v2r0/topic/com.ibm.connections.25.help/r_admin_common_props.html"&gt;entry&lt;/a&gt; mentions, if you want to edit the application links themselves, you have to set the href attributes in the LotusConnections-config.xml. However, the latter SHOULD NOT be used, to modify the landing page because the href attribute refers to the application ROOT entry. For instance, if you change this for the homepage feature, the static widget resources which are searched relative to this root are not found. So use this setting only for pointing to a different server or a different context root.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So the first link was of more use, to edit the header.html directly. But, it only mentions to add additional links not to modify existing one. However, by using a simple JavaScript snippet, it is possible to alter the generated links after display. Simpy insert the following snippet into the header.html right after &lt;code&gt;{{application links: li }}&lt;/code&gt;.&lt;br /&gt;&lt;/p&gt;&lt;div style="font-family: monospace; background-color: lightgray; white-space: pre;"&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;function changeHomepageLink() {&lt;br /&gt;&lt;br /&gt; var homePageLink = null;&lt;br /&gt; var homePageLink = document.getElementById('lotusBannerHomepage');&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; if(homePageLink != null) {&lt;br /&gt;   var link = homePageLink.firstChild;&lt;br /&gt;   var hrefAttr = link .getAttribute('href');&lt;br /&gt;   var newHrefAttr = hrefAttr + '/web/widgets';&lt;br /&gt;   link .setAttribute('href', newHrefAttr);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;changeHomepageLink();&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Actually, we don't know if that is the official or correct way to do so, but it works. The "welcome" page is defined in the web.xml of the web application. Another way to change this would be to change the web.xml of the war file and redeploy it, though, this seemed a little too risky to us.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-4753649191121290457?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/KwsLNW5-bNU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/4753649191121290457/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=4753649191121290457" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/4753649191121290457?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/4753649191121290457?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/KwsLNW5-bNU/changing-landing-tab-for-lotus.html" title="Changing the landing tab for a Lotus Connections 2.5 feature" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/09/changing-landing-tab-for-lotus.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUASXw6fSp7ImA9WxNQEUU.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-7624515869771789078</id><published>2009-09-15T17:31:00.004+02:00</published><updated>2009-09-17T12:44:08.215+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-17T12:44:08.215+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lotus Connections" /><category scheme="http://www.blogger.com/atom/ns#" term="connections" /><category scheme="http://www.blogger.com/atom/ns#" term="stylesheet" /><category scheme="http://www.blogger.com/atom/ns#" term="lc25" /><category scheme="http://www.blogger.com/atom/ns#" term="jawr" /><category scheme="http://www.blogger.com/atom/ns#" term="customization" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>CSS stylesheets in Lotus Connections 2.5</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;From Lotus Connections 2.0 to 2.5 the handling of theme and styles has been changed. While LC20 used static stylesheets, LC25 uses a specialized servlet for that purpose. This servlet called &lt;a href="https://jawr.dev.java.net/"&gt;JAWR&lt;/a&gt; bundles multiple files and sends them compressed to the client. The HTML that is styled by this JAWR servlet refer to a normal URL, in LC25 this URL points to something like "/bundle/css/gzip_something/coreBundle.css". The context of the URL - /bundle/css - is mapped to the JAWR servlet, and the id of the bundle - /coreBundle.css - may look like file and is resolved by the servlet.. That makes it difficult, to find the proper stylesheet in the filesystem - simply, because it does not exist.&lt;br /&gt;&lt;br /&gt;Looking at a sinlge LC25 component (i.e. Communities), the configuration file for the JAWR servlet can be found in /WEB-INF/properties.&lt;br /&gt;In the configuration file, a bundle with the name "core" and the id "/coreBundle.css" is defined. The /coreBundle.css is mapped to the files&lt;br /&gt;&lt;ul&gt;&lt;li&gt;/stylesheet/update_styles.css, &lt;/li&gt;&lt;li&gt;    /stylesheet/update_community.css, &lt;/li&gt;&lt;li&gt;    /nav/common/styles/base/core.css, &lt;/li&gt;&lt;li&gt;    /nav/common/styles/defaultTheme/defaultTheme.css, &lt;/li&gt;&lt;li&gt;    /javascript/build/dijit/themes/dijit.css, &lt;/li&gt;&lt;li&gt;    /nav/common/styles/base/dojo.css, &lt;/li&gt;&lt;li&gt;    /nav/common/styles/defaultTheme/dojoTheme.css, &lt;/li&gt;&lt;li&gt;    /javascript/source/lconn/comm/typeahead/themes/lconn.typeahead.css, &lt;/li&gt;&lt;li&gt;    /javascript/source/lconn/comm/typeahead/themes/lotusBlue/LotusBlue.css, &lt;/li&gt;&lt;li&gt;    /nav/common/styles/base/connectionsCore.css, &lt;/li&gt;&lt;li&gt;    /nav/common/styles/base/semanticTagStyles.css, &lt;/li&gt;&lt;li&gt;    /nav/lconn/styles/sprite-lconn.css &lt;/li&gt;&lt;/ul&gt;These files are located relative to the root of the web archive comm.web.war.&lt;br /&gt;&lt;br /&gt;For faster development, the JAWR servlet offers a debug mode. According to the &lt;a href="https://jawr.dev.java.net/docs/modes.html"&gt;JAWR documentation&lt;/a&gt; the debug mode is enable by setting the &lt;span style="font-family: courier new;"&gt;jawr.debug.on=true &lt;span style="font-family: arial;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: georgia;"&gt;in the jawr.properties file. The setting is applied after restarting the application.&lt;br /&gt;The debug mode has two advantages:&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;changes to the css stylesheets in the filesystem are effective immediately&lt;/li&gt;&lt;li&gt;stylesheets are not included as a single, one-lined compressed file but as a set of files pointing to every single stylesheet. In the html, each mapped stylesheet is included via a separate link-tag.  That way, it is transparent, which css definition is set in which stylesheet. Second, the stylesheets are not reformatted meaning that the line-numbers of tools such as firebug point to the correct line of the included stylesheet.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-7624515869771789078?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/TKrOYyaXqd8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/7624515869771789078/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=7624515869771789078" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/7624515869771789078?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/7624515869771789078?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/TKrOYyaXqd8/css-stylesheets-in-lotus-connections-25.html" title="CSS stylesheets in Lotus Connections 2.5" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/09/css-stylesheets-in-lotus-connections-25.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQFQ3k_fyp7ImA9WxNRFks.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-4131651180678952376</id><published>2009-09-11T11:06:00.003+02:00</published><updated>2009-09-11T11:11:52.747+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-11T11:11:52.747+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="eclipse java code template pattern best-practices singleton" /><title>Creating a singleton using Eclipse Code Templates</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;In this post I'd like to demonstrate the Eclipse Code Template feature for implementing a singleton pattern.&lt;br/&gt;&lt;br /&gt;The Singelton is a creational pattern of the set of Gang-of-Four Java Design patterns. It uses a single static variable (the singleton), a private constructor to prevent public instantiation and a public static getter method to retrieve the instance. For lazy instantiation, the singleton instance is not preinitialized, instead, the static getter method checks if the instance is null and instantiates a new instance on its first call. Lazy instantiation (as used in the following example) is not uncommon, though it may cause race conditions in multithreaded environments.&lt;br/&gt;The Code Template feature is an extension to the code-completion functionality that is accessible by pressing Ctrl+Space. When the user types in code, he may hit Ctrl+Space to auto-complete, what he was typing. Eclipse proposes a set of options for completion, i.e. a Type, method of that type etc. &lt;br/&gt;&lt;br /&gt;The Code Template feature might be known from typing in &lt;i&gt;"sysout"&lt;/i&gt;, pressing Ctrl+Space and Eclipse completes this to "&lt;i&gt;System.out.println("");&lt;/i&gt;". &lt;br/&gt;&lt;br /&gt;&lt;br/&gt;To add a new code template, &lt;br/&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;open to &lt;i&gt;Window -&amp;gt; Preferences&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;navigate to &lt;i&gt;Java -&amp;gt; Editor -&amp;gt; Templates&lt;/i&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;click on "New..."&lt;/li&gt;&lt;br /&gt;&lt;li&gt;set the name of the new template to "singleton" (this is what you type into the editor)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;as pattern enter&lt;br /&gt;&lt;div style="font-family: monospace; background-color: lightgray; white-space:pre;"&gt;&lt;br /&gt;/**&lt;br /&gt; * static Singleton instance &lt;br /&gt; */&lt;br /&gt;private static ${enclosing_type} instance;&lt;br /&gt;    &lt;br /&gt;/**&lt;br /&gt; * Private constructor for singleton&lt;br /&gt; */&lt;br /&gt;private ${enclosing_type}(){&lt;br /&gt;        &lt;br /&gt;}&lt;br /&gt;    &lt;br /&gt;/**&lt;br /&gt; * Static getter method for retrieving the singleton instance&lt;br /&gt; */&lt;br /&gt;public static ${enclosing_type} getInstance(){&lt;br /&gt;  if(instance == null) {&lt;br /&gt;     instance = new ${enclosing_type}();&lt;br /&gt;  }&lt;br /&gt;        &lt;br /&gt;  return instance;&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;The variable ${enclosing_type} resolves to the Class you are editing. From now on, it is possible to create the entire singleton pattern by just typing "singleton" and hitting Ctrl+Space - saving lots of keystrokes!&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-4131651180678952376?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/qNBna9rRc4k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/4131651180678952376/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=4131651180678952376" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/4131651180678952376?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/4131651180678952376?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/qNBna9rRc4k/creating-singleton-using-eclipse-code.html" title="Creating a singleton using Eclipse Code Templates" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/09/creating-singleton-using-eclipse-code.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AFQnw6eyp7ImA9WxNTFks.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-5734143232620707539</id><published>2009-08-19T10:08:00.004+02:00</published><updated>2009-08-19T10:15:13.213+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-19T10:15:13.213+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="converter" /><category scheme="http://www.blogger.com/atom/ns#" term="tracking" /><category scheme="http://www.blogger.com/atom/ns#" term="gps" /><category scheme="http://www.blogger.com/atom/ns#" term="gpx" /><category scheme="http://www.blogger.com/atom/ns#" term="kml" /><category scheme="http://www.blogger.com/atom/ns#" term="script" /><title>Converting GPX tracks to Google's kml format</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Earlier this year I bought a &lt;a href="http://www.i-gotu.com/"&gt;neat GPS tracker &lt;/a&gt;for recording hiking trips and geotag my photos. With the software provided I can export these tracks to the &lt;a href="http://en.wikipedia.org/wiki/Gpx"&gt;GPX format&lt;/a&gt; which is an XML format for describing waypoint, tracks and routes. But for displaying my tracks in Google Earth, I need the &lt;a href="http://en.wikipedia.org/wiki/Kml"&gt;kml format&lt;/a&gt;, which is also an XML format. For the transformation I use the free tool &lt;a href="http://www.gpsbabel.org/"&gt;GPSBabel&lt;/a&gt; and a small batch script for convenient conversion.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: monospace; background-color: lightgray;"&gt;&lt;br /&gt;@echo off&lt;br /&gt;setlocal&lt;br /&gt;if "%2"=="" (set out="%~n1.kml") else (set out=%2)&lt;br /&gt;echo gpsbabel -i gpx -f %1 -o kml -F %out%&lt;br /&gt;gpsbabel -i gpx -f %1 -o kml -F %out%&lt;br /&gt;endlocal&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The script could easily modified for the backward conversion (kml to gpx)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-5734143232620707539?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/HtBZurpQClA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/5734143232620707539/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=5734143232620707539" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/5734143232620707539?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/5734143232620707539?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/HtBZurpQClA/converting-gpx-tracks-to-google-kml.html" title="Converting GPX tracks to Google&amp;#39;s kml format" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>5</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/08/converting-gpx-tracks-to-google-kml.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIFR3w7cCp7ImA9WxJbEks.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-1122098093371472940</id><published>2009-07-22T14:01:00.004+02:00</published><updated>2009-07-22T14:08:36.208+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-22T14:08:36.208+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mp3 encode wav script" /><title>Batch MP3 encoding with lame</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I recently bought the new album from Chimaira and liked listen ot it on my iPod. Since I like the mp3 format, I did not want to import it with iTunes using the AAC format I used the open and free mp3 encoder &lt;a href="http://lame.sourceforge.net/"&gt;Lame&lt;/a&gt;. I ripped the CD tracks using Winamp and configured it to export the tracks to the format "Artist - Album - TrackNumber - SongTitle".wav. After that, I can encode the wav's to mp3's. But encoding each wav file manually is quite time consuming, especially, when all id3 tag information had to be entered manually. So I wrote a little Windows batch file that encodes all the wav's in a batch and automatically sets the ID3 tags.&lt;br /&gt;&lt;br /&gt;The source for the script is:&lt;br /&gt;&lt;div style="font-family: monospace; background-color: lightgray;"&gt;&lt;br /&gt;@echo off&lt;br /&gt;&lt;br /&gt;if "%1"=="" (&lt;br /&gt;echo Usage: %0 [files] {genre} {year}&lt;br /&gt;goto :eof&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;rem %2=genre&lt;br /&gt;rem %3=year&lt;br /&gt;if "%2"=="" (set GENRE=) else (set GENRE=--tg "%2")&lt;br /&gt;if "%3"=="" (set YEAR=) else (set YEAR=--ty "%3")&lt;br /&gt;&lt;br /&gt;for /R %%f in (%1) do (&lt;br /&gt;echo Converting "%%~nxf"&lt;br /&gt;&lt;br /&gt;rem extract from format "Artist - Album - trackNo - Title"&lt;br /&gt;for /F "tokens=1,2,3,4 delims=-" %%A in ("%%~nf") DO (&lt;br /&gt;call :encode "%%~nxf" "%%A" "%%B" "%%C" "%%D" "%GENRE%" "%YEAR%"&lt;br /&gt;)&lt;br /&gt;echo.&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;goto :eof&lt;br /&gt;&lt;br /&gt;:encode&lt;br /&gt;SETLOCAL&lt;br /&gt;&lt;br /&gt;rem strip quotes&lt;br /&gt;set _artist=%~2&lt;br /&gt;set _album=%~3&lt;br /&gt;set _trackNo=%~4&lt;br /&gt;set _title=%~5&lt;br /&gt;&lt;br /&gt;rem trim spaces&lt;br /&gt;set artist=%_artist:~0,-1%&lt;br /&gt;set album=%_album:~1,-1%&lt;br /&gt;set trackNo=%_trackNo:~1,-1%&lt;br /&gt;set title=%_title:~1%&lt;br /&gt;&lt;br /&gt;echo Artist: "%artist%"&lt;br /&gt;echo Album: "%album%"&lt;br /&gt;echo TrackNO: "%trackNo%"&lt;br /&gt;echo Title: "%title%"&lt;br /&gt;if NOT "%genre%"=="" echo Genre: "%genre:~6,-1%"&lt;br /&gt;if NOT "%year%"=="" echo Year: "%year:~6,-1%"&lt;br /&gt;&lt;br /&gt;lame.exe -h -V 6 "%~1" "%~n1.mp3" --add-id3v2 --tt "%title%" --ta "%artist%" --tl "%album%" --tn "%trackNo%" %genre% %year%&lt;br /&gt;ENDLOCAL&lt;br /&gt;&lt;br /&gt;goto :eof&lt;br /&gt;&lt;br /&gt;:eof&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;With the help of the scripts I could easily encode the files of an entire directory using:&lt;br /&gt;&lt;div style="font-family: monospace; background-color: lightgray;"&gt;&lt;br /&gt;myScipt *.wav 137 2009&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Note, that 137 refers to the Genre list of the lame encoder. Use "lame --genre-list" to print an alphabetically sorted ID3 genre list. &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-1122098093371472940?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/B66MpxRo1bA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/1122098093371472940/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=1122098093371472940" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/1122098093371472940?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/1122098093371472940?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/B66MpxRo1bA/batch-mp3-encoding-with-lame.html" title="Batch MP3 encoding with lame" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/07/batch-mp3-encoding-with-lame.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMFRXo_eip7ImA9WxJSF0Q.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-872441089472547390</id><published>2009-05-08T16:32:00.002+02:00</published><updated>2009-05-08T16:36:54.442+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-08T16:36:54.442+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="quickr81" /><category scheme="http://www.blogger.com/atom/ns#" term="troubleshooting" /><category scheme="http://www.blogger.com/atom/ns#" term="technote" /><category scheme="http://www.blogger.com/atom/ns#" term="quickr" /><category scheme="http://www.blogger.com/atom/ns#" term="issl" /><category scheme="http://www.blogger.com/atom/ns#" term="sso" /><category scheme="http://www.blogger.com/atom/ns#" term="connector" /><category scheme="http://www.blogger.com/atom/ns#" term="spnego" /><category scheme="http://www.blogger.com/atom/ns#" term="fix" /><category scheme="http://www.blogger.com/atom/ns#" term="lotus" /><title>Single Sign On with Quickr 8.1 and SPNEGO</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Yesterday I was at a customer that is using Lotus Quickr 8.1  (J2EE) and als uses an ISSW asset - the SPNEGO TAI for WebSphere Application Server 6.0 - for WebSphere Portal 6.0. This customer wanted to use the TAI for Quickr too, respectively the underlying Application Server version 6.0.2.17.&lt;br /&gt;&lt;br /&gt;And after some troubleshooting and a fix for WAS we finally managed to achieve SPNEGO/Windows Single Sign On for Quickr 8.1!&lt;br /&gt;&lt;br /&gt;The only real issue with the product (Quickr) itself was a bug in the redirection after the request had not been intercepted by any TAI where the user was redirected to an error page instead of the login page. This was no specific SPNEGO TAI issue but an issue with the Trust Association Interception in general in the Quickr 8.1 and 8.1.1 underlying App Server, version 6.0.2.17.&lt;br /&gt;&lt;br /&gt;However there is a &lt;a href="http://www-01.ibm.com/support/docview.wss?uid=swg21256660"&gt;technote&lt;/a&gt; and a &lt;a href="http://www-01.ibm.com/support/docview.wss?uid=swg24015036"&gt;fix&lt;/a&gt; for that known issue if you ever stumble upon this error.&lt;br /&gt;&lt;br /&gt;After that fix had been installed - which went pretty smooth - Single Sign On with SPNEGO worked properly. At least in the WebUI but unfortunately not with the connectors.&lt;br /&gt;&lt;br /&gt;One of the issues was that with SPNEGO enabled it didn't matter which values we specified for the main UI as user/pwd in the first dialog that comes up when we added a place to the connectors. These values were sent to the server and failed. However, the SPNEGO credentials were also sent along as we were authenticated successfully. But there were other user/pwd dialog boxes that appeared in the usage of the connectors as well. These did not work correctly with SPNEGO enabled.&lt;br /&gt;Currently the Java based connectors (ie ST, Notes 8 Standard, etc) do not work at all when SPNEGO is enabled.&lt;br /&gt;&lt;br /&gt;As a workaround to disable SPNEGO for the Connectors we considered two options:&lt;br /&gt;The first (that was tested and finally implemented) was simply to create an additional DNS entry for the same Quickr server and specified this entry in the Connector (ie. &lt;i&gt;web.quickr.intranet.com&lt;/i&gt; for the browser and &lt;i&gt;connector.quickr.intranet.com&lt;/i&gt; for the connector). The TAI is configured to intercept only requests to a particular URL respectively a host (ie. &lt;i&gt;web.quickr.intranet.com&lt;/i&gt;). If a request is sent to a different hostname (ie  &lt;i&gt;connector.quickr.intranet.com&lt;/i&gt;), the request is not intercepted and thus no Single Sign On happens.&lt;br /&gt;&lt;br /&gt;The second option we thought of but did not test yet was to configure the TAI that way, that it uses a filter to exclude the URL used by the Connector respectively only intercept requests for the protected URLs of the web ui, which are URLs that contain &lt;i&gt;/lotus/myquickr&lt;/i&gt;. Using the HTTPFilter for the configured server and a filter string &lt;i&gt;"request-url==/lotus/myquickr"&lt;/i&gt; should do the job, but as mentioned - we did not test this.&lt;br /&gt;&lt;br /&gt;Luckily, Quickr 8.2 is coming soon with official SSO support for the Connectors and it will be backward compatible to Quickr 8.1.1.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-872441089472547390?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/ZGPM3lUNjJU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/872441089472547390/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=872441089472547390" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/872441089472547390?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/872441089472547390?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/ZGPM3lUNjJU/single-sign-on-with-quickr-81-and.html" title="Single Sign On with Quickr 8.1 and SPNEGO" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>5</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/05/single-sign-on-with-quickr-81-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQFRn46eCp7ImA9WxVWFUo.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-7972138034309455315</id><published>2009-02-25T14:56:00.002+01:00</published><updated>2009-02-25T14:58:37.010+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-25T14:58:37.010+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="quickr" /><category scheme="http://www.blogger.com/atom/ns#" term="customization" /><category scheme="http://www.blogger.com/atom/ns#" term="ui" /><title>Quickr UI hacking</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;This week I was in a workshop at a customer where we discussed among others how to customize Quickr for Portal. They had some special requirements regarding the UI about which I'd like to write here.&lt;br /&gt;&lt;br /&gt;One of their requirements was, to have a sidebar menu on the left-hand side containing the place navigation in the upper part of the sidebar and the functional elements below the navigation. They took the current Quickr for Domino look&amp;amp;feel as an example. I don't exactly know how the Quickr for Domino works, but I know that the Quickr for Portal works differently. The main problem is, that the PDM portlet (Library) in Quickr J2EE contains the entire toolbox as a right-side menu (with the "Create" button on top of if). So I needed to find a way to rip it off the portlet and place it in the right side navigation. I did this using JavaScript and it was actually only a couple lines of code.&lt;br /&gt;&lt;br /&gt;First of all, create a place that uses a theme policy that displays the sidebar. Create a page that contains the library portlet (the one with the right sidebar). Then open the &lt;i&gt;Default.jsp&lt;/i&gt; of the theme and search for the expression that includes the sidebar.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;%@ include file="./sideNav.jspf" %&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Place the following html snippet below this sidebar include.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;div id="injection-point"&amp;gt; &amp;lt;/div&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Its important, that it is not a standalone html tag.&lt;br /&gt;Now go to the end of the file and add the following script before the closing body tag:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;document.getElementById("injection-point").appendChild(document.getElementById("sidebar").parentNode);&lt;br /&gt;document.getElementById("sidebar").style.visibility = "visible";&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You could see, that the visibility attribute of the sidebar is set to visible, this comes a long with a change in the &lt;i&gt;styles.jsp&lt;/i&gt; where you'll have to add the following snippet&lt;br /&gt;&lt;b&gt;#sidebar {&lt;br /&gt; visibility: hidden;&lt;br /&gt;}&lt;/b&gt;&lt;br /&gt;This prevents from showing the sidebar on the right side during page load and then jumping to the left side, when the rendering process is complete. The sidebar is simply not shown from the beginning. Now save the files and see what happens :)&lt;br /&gt;&lt;br /&gt;The final result looks like this:&lt;br /&gt;&lt;img src="https://w3.tap.ibm.com/weblogs/whoopdicity/resource/QuickrUI_1.JPG" style="max-width: 800px;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Using this technique of adding injection points to the theme and some javascript code that moves elements around, you could easily modify the entire look and feel. For a customization I did this week for a customer, I moved the &lt;i&gt;Create&lt;/i&gt; button and the &lt;i&gt;Action&lt;/i&gt; menu to the left bar, and the other sections to the right side (outside of the portlet area). I also modified the &lt;i&gt;search &lt;/i&gt;box, which is completely generated by a JSP tag.&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie"&gt;&lt;img src="http://img.zemanta.com/pixy.gif?x-id=c9bcf952-461a-4ce4-821d-1beb97dd6a31" class="zemanta-pixie-img" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-7972138034309455315?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/hslNHpi69ss" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/7972138034309455315/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=7972138034309455315" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/7972138034309455315?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/7972138034309455315?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/hslNHpi69ss/quickr-ui-hacking.html" title="Quickr UI hacking" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/02/quickr-ui-hacking.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8MQ309fSp7ImA9WxVXFU8.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-4919196819498878578</id><published>2009-02-13T11:02:00.003+01:00</published><updated>2009-02-13T11:28:02.365+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-13T11:28:02.365+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lotus Connections" /><category scheme="http://www.blogger.com/atom/ns#" term="connections" /><category scheme="http://www.blogger.com/atom/ns#" term="troubleshooting" /><category scheme="http://www.blogger.com/atom/ns#" term="bookmark" /><category scheme="http://www.blogger.com/atom/ns#" term="Portal" /><category scheme="http://www.blogger.com/atom/ns#" term="activity" /><title>Pointing to a specific Activity using the Portal Bookmark portlet</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Today we tried to create a landing page for a Portal with integrated Connections. The landing page should contain a link to give feedback. Since it is a PoC we'd like to use an Activity for collecting feedback to demonstrate the various usage possibilites for Lotus Connections. The link to the feedback activity should have been provided in the Bookmark portlet of WebSphere Portal. However, we encountered a minor issue for which we found a solution.&lt;br /&gt;&lt;br /&gt;The problem was, that the URL to the Activity contained a comma character respectively the octet encoding of it (%2C). Although this format is conforming with URL &lt;a href="http://www.faqs.org/rfcs/rfc1738.html"&gt;RFC 1738&lt;/a&gt; (paragraph 2.2.) the Bookmark portlet refused to accept this URL stating the URL was not valid.&lt;br /&gt;&lt;br /&gt;However, we found a workaround for that. We created a Portal URL page pointing to the feedback activity and put this URL page underneath the Activities URL page in the portal page structure so that it remains invisble. We assigned a uniquename to this URL page pointing to the Feedback Activity and created a bookmark in the bookmark portlet that pointed to the Portal URL page for the Feedback Activity. Thats it. The uniquename is required, otherwise this URL page would not be selectable as portal internal page in the Bookmark portlet.&lt;br /&gt;&lt;br /&gt;By the way, I like the approach of collecting feedback using an Activity. The users can comment on existing feedback, agree, disagree. The feedback can be given in a structured way, like technical feedback, opinions, enhancement requests, and the users could even post files. The receivers of the feedback can give answers directly to the posts and users could easily subscribe to updates to stay informed about what's going on. And the best of all: it's usable out-of-the-box, we did not need to create a custom feedback form :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-4919196819498878578?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/gEr6MKUolSk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/4919196819498878578/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=4919196819498878578" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/4919196819498878578?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/4919196819498878578?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/gEr6MKUolSk/pointing-to-specific-activity-using.html" title="Pointing to a specific Activity using the Portal Bookmark portlet" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/02/pointing-to-specific-activity-using.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIBQ307fyp7ImA9WxVSF0Q.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-8894958767625819493</id><published>2009-01-12T23:13:00.002+01:00</published><updated>2009-01-12T23:15:52.307+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-12T23:15:52.307+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lotus Connections" /><category scheme="http://www.blogger.com/atom/ns#" term="business use" /><category scheme="http://www.blogger.com/atom/ns#" term="best practices" /><category scheme="http://www.blogger.com/atom/ns#" term="social software" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><title>Twitter for business ... or how to prevent your partner calling you during a speech</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Several times colleagues are asking me, what the use of &lt;a href='http://www.twitter.com'&gt;Twitter&lt;/a&gt; is or why they should do it as well. Well, what twitter is, is captured  pretty good in this video: &lt;a href='http://www.youtube.com/watch?v=ddO9idmax0o'&gt;Twitter in plain English&lt;/a&gt;. But that possibly does not capture their business case. But maybe &lt;a href='http://www.doshdosh.com/ways-you-can-use-twitter/'&gt;this blog entry&lt;/a&gt; can give some more uses.&lt;br/&gt;&lt;br/&gt;But how can twitter - or microblogging in general - can help employees doing a better job? &lt;br/&gt;&lt;br/&gt;In my opinion the most practical use is: get quick and easy access to knowledge! Of course not all jobs require a broad use of knowledge, but for me, working in the Services and Consulting business, it does.&lt;br/&gt;And here are several ways I benefit from Twitter.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;1. Build up a follower network. &lt;/b&gt;&lt;br/&gt;Build up a network of colleagues, all around the world, that work in the same or related topics that you are. Follow them, and ask them to follow you, too. That way, a broadcast is received by a wide number of peers who may be able to help you and who know you, too. Secondly, this colleague-net builds up a stronger community for itself.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;2. Subscribe to search-feeds.&lt;/b&gt;&lt;br/&gt;Use the &lt;a href='http://search.twitter.com/'&gt;search feature&lt;/a&gt; of Twitter and the ability to subscribe to the search filters. That way you get notified of people that tweet about a topic of your interest that you are not following. Maybe you are able to help them. In the other direction, you can post to the public community as well, if they subscribed to such a search feed you might get help from people you does not know, yet. A good example for such feed is the &lt;a href='http://search.twitter.com/search.atom?lang=en&amp;amp;q=+connections+dogear%2C+OR+lotus%2C+OR+activities%2C+OR+communities++-secretbear'&gt;Lotus Connections search feed&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;3. Use hashtags. &lt;/b&gt;&lt;br/&gt;By the use of hashtags - keywords with a leading # - you could mark your post or keywords in it to indicate, the post contains some information of a certain category. More information about hashtags can be found on &lt;a href='http://hashtags.org/'&gt;hashtags.org&lt;/a&gt;. The effect is similar to the search feed, though the search feed may produce more "false hits".&lt;br/&gt;&lt;br/&gt;&lt;b&gt;4. Retweet&lt;/b&gt;&lt;br/&gt;ReTweet (RT) is a resend of your post by another user to his followers. By this, information - if its valuable enough - reaches even the farthest wrinkle of the community. If you have something important to say about a certain topic and you share your knowledge in a blog, you could announce a new post via Twitter. Not only that you do some advertising for you and your blog and by this build up your reputation in a certain topic, but also that the information - if its really valuable - spreads around the community via retweet (RT).&lt;br/&gt;&lt;br/&gt;But there is one final thing you take into consideration: give your personal Twitter network time to evolve, to grow, to strengthen the valuable connections. You also have to put some initial energy into it, build up your network, convince your reluctant colleagues to use it, too. Show them how to use the tools. In the beginning, they don't even have to contribute, in the beginning it might be sufficent, to just build the connections and it is sufficient when only a minority contributes, the rest will follow soon.&lt;br/&gt;&lt;br/&gt;Twitter is really easy, even non-technical-adept people can use it, on their phone, on their desktop, via browser, via instant messaging. So even your wife or husband can use it! And you can let them know, what you are doing, that you hold a speech or a presentation, and if they &lt;i&gt;just read &lt;/i&gt;your post, they maybe won't call you in inappropriate situations any longer ;)&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-8894958767625819493?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/Ruw1VAJPV4A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/8894958767625819493/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=8894958767625819493" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/8894958767625819493?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/8894958767625819493?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/Ruw1VAJPV4A/twitter-for-business-or-how-to-prevent.html" title="Twitter for business ... or how to prevent your partner calling you during a speech" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/01/twitter-for-business-or-how-to-prevent.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYHSH46cCp7ImA9WxVSFko.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-8582985211787470757</id><published>2009-01-11T13:24:00.003+01:00</published><updated>2009-01-11T13:32:19.018+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-11T13:32:19.018+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="2009" /><category scheme="http://www.blogger.com/atom/ns#" term="meet-greet" /><category scheme="http://www.blogger.com/atom/ns#" term="personal" /><category scheme="http://www.blogger.com/atom/ns#" term="latvia" /><category scheme="http://www.blogger.com/atom/ns#" term="web20" /><category scheme="http://www.blogger.com/atom/ns#" term="Amsterdam" /><category scheme="http://www.blogger.com/atom/ns#" term="travelling" /><category scheme="http://www.blogger.com/atom/ns#" term="Riga" /><category scheme="http://www.blogger.com/atom/ns#" term="holiday" /><category scheme="http://www.blogger.com/atom/ns#" term="Stockholm" /><category scheme="http://www.blogger.com/atom/ns#" term="London" /><category scheme="http://www.blogger.com/atom/ns#" term="bratislava" /><category scheme="http://www.blogger.com/atom/ns#" term="sweden" /><category scheme="http://www.blogger.com/atom/ns#" term="vacation" /><category scheme="http://www.blogger.com/atom/ns#" term="Prague" /><category scheme="http://www.blogger.com/atom/ns#" term="Dublin" /><category scheme="http://www.blogger.com/atom/ns#" term="get2gether" /><category scheme="http://www.blogger.com/atom/ns#" term="ireland" /><title>My personal world tour 2009, don't miss a show!</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Last week I've made up mind about my vacation days this year. It required some planning to get the most out of the weekends with public holidays and the vacation days I have this year, but I think I made the best out of it. So here are my plans.&lt;br/&gt;&lt;br/&gt;The whole "travel season" starts in April when the winter - hopefully - has found its end and its getting warmer again. Right in the beginning of April, I'll fly to &lt;a href='http://maps.google.ch/maps?f=q&amp;amp;hl=de&amp;amp;geocode=&amp;amp;q=dublin&amp;amp;sll=57.103436,24.104004&amp;amp;sspn=0.383369,3.35083&amp;amp;g=dublin&amp;amp;ie=UTF8&amp;amp;ll=53.429992,-6.2677&amp;amp;spn=0.210279,1.675415&amp;amp;t=h&amp;amp;z=10&amp;amp;iwloc=addr'&gt;Dublin&lt;/a&gt;. I've never been to Ireland before and this city is on my list of places I'd like to visit. I think I'll hang a little around there in the first weekend of April before I'll have a roadtrip over the isle over the week that follows. In the end of the week I'll return back to Dublin from where I take another flight right over to &lt;a href='http://maps.google.ch/maps?f=q&amp;amp;hl=de&amp;amp;geocode=&amp;amp;q=london&amp;amp;sll=53.429992,-6.2677&amp;amp;sspn=0.210279,1.675415&amp;amp;g=london&amp;amp;ie=UTF8&amp;amp;ll=51.679368,-0.126343&amp;amp;spn=0.437676,3.35083&amp;amp;t=h&amp;amp;z=9&amp;amp;iwloc=addr'&gt;London&lt;/a&gt; where I'll spent the Eastern weekend before returning back to &lt;a href='http://maps.google.ch/maps?f=q&amp;amp;hl=de&amp;amp;geocode=&amp;amp;q=Z%C3%BCrich&amp;amp;sll=51.679368,-0.126343&amp;amp;sspn=0.437676,3.35083&amp;amp;g=Z%C3%BCrich&amp;amp;ie=UTF8&amp;amp;ll=47.463379,8.53775&amp;amp;spn=0.238604,1.675415&amp;amp;t=h&amp;amp;z=10&amp;amp;iwloc=addr'&gt;Zurich&lt;/a&gt;. Last year I already planned to travel to Irland for a week so I combine the trip with two city trips I planned anyway for the year.&lt;br/&gt;&lt;br/&gt;Next trip will be a weekend trip to &lt;a href='http://maps.google.ch/maps?f=q&amp;amp;hl=de&amp;amp;geocode=&amp;amp;q=Prague&amp;amp;sll=47.463379,8.53775&amp;amp;sspn=0.238604,1.675415&amp;amp;g=Prague&amp;amp;ie=UTF8&amp;amp;ll=50.271788,14.419556&amp;amp;spn=0.451148,3.35083&amp;amp;t=h&amp;amp;z=9&amp;amp;iwloc=addr'&gt;Prague&lt;/a&gt; on the first weekend of May. It will be a three-days-visit, where I'll fly to Prague on thursday evening and return back to Zurich on Monday in early morning. The good thing about this trip is, it doesn't cost my one of my precious vacation days since Friday, 1st May is a public holiday.&lt;br/&gt;&lt;br/&gt;Already a week later, I found a really cheap flight to &lt;a href='http://maps.google.ch/maps?f=q&amp;amp;hl=de&amp;amp;geocode=&amp;amp;q=Hamburg&amp;amp;sll=50.271788,14.419556&amp;amp;sspn=0.451148,3.35083&amp;amp;g=Hamburg&amp;amp;ie=UTF8&amp;amp;ll=53.724342,9.992065&amp;amp;spn=0.417636,3.35083&amp;amp;t=h&amp;amp;z=9&amp;amp;iwloc=addr'&gt;Hamburg&lt;/a&gt; (only 28€ !!!) where my mother lives. This week I'll work remotely the whole week and also I am able to attend her birthday celebration the weekend after that. I also planned to spent a couple of days in &lt;a href='http://maps.google.ch/maps?f=q&amp;amp;hl=de&amp;amp;geocode=&amp;amp;q=stockholm&amp;amp;sll=57.103436,24.104004&amp;amp;sspn=0.383369,3.35083&amp;amp;g=stockholm&amp;amp;ie=UTF8&amp;amp;ll=59.479964,18.06427&amp;amp;spn=0.358463,3.35083&amp;amp;t=h&amp;amp;z=9&amp;amp;iwloc=addr'&gt;Stockholm&lt;/a&gt; this year. I've never been to Scandinavia before and I chose to start with Sweden and Stockholm. Originally I planned to fly directly from Hamburg to Stockholm, but I found a cheap flight over &lt;a href='http://maps.google.ch/maps?f=q&amp;amp;hl=de&amp;amp;geocode=&amp;amp;q=Riga&amp;amp;sll=53.724342,9.992065&amp;amp;sspn=0.417636,3.35083&amp;amp;g=Riga&amp;amp;ie=UTF8&amp;amp;ll=57.103436,24.104004&amp;amp;spn=0.383369,3.35083&amp;amp;t=h&amp;amp;z=9&amp;amp;iwloc=addr'&gt;Riga&lt;/a&gt; with a 7h-stop right there. So I decided to make 2 flights instead and spent whole two days in Riga before jumping over to Stockholm for another two days. This will be on the Ascenion Day and the successing weekend, and I just need to use a single vacation day for the friday which is a bridging day. On the next monday I'll return back to Zurich in early moring for work as usual.&lt;br/&gt;&lt;br/&gt;Up to this point I've booked most of the flights (7 of 9) and spent "only" 800 Swiss Francs for this, which is quite cheap considering the distances I cover - around 7000km! ... But that is also the reason for planning such a long time in advance - the flights on the public holidays-days are in high demand and get expepensive pretty early.&lt;br/&gt;&lt;br/&gt;For the Pentecost weekend I have no plans so far, but maybe I'll spent the weekend in &lt;a href='http://maps.google.ch/maps?f=q&amp;amp;hl=de&amp;amp;geocode=&amp;amp;q=amsterdam&amp;amp;sll=59.479964,18.06427&amp;amp;sspn=0.358463,3.35083&amp;amp;g=amsterdam&amp;amp;ie=UTF8&amp;amp;ll=52.461867,4.890289&amp;amp;spn=0.215038,1.675415&amp;amp;t=h&amp;amp;z=10&amp;amp;iwloc=addr'&gt;Amsterdam&lt;/a&gt;. I've been there once before but I liked it quite a bit there and would really like to go there once again, but thats not a fixed plan so far. Other options for this weekend would be &lt;a href='http://maps.google.ch/maps?f=q&amp;amp;hl=de&amp;amp;geocode=&amp;amp;q=Rome&amp;amp;sll=52.461867,4.890289&amp;amp;sspn=0.215038,1.675415&amp;amp;g=Rome&amp;amp;ie=UTF8&amp;amp;ll=42.110449,12.483215&amp;amp;spn=0.523645,3.35083&amp;amp;t=h&amp;amp;z=9&amp;amp;iwloc=addr'&gt;Rome&lt;/a&gt; or &lt;a href='http://maps.google.ch/maps?f=q&amp;amp;hl=de&amp;amp;geocode=&amp;amp;q=Athens&amp;amp;sll=42.110449,12.483215&amp;amp;sspn=0.523645,3.35083&amp;amp;g=Athens&amp;amp;ie=UTF8&amp;amp;ll=38.036194,23.716736&amp;amp;spn=0.138989,0.837708&amp;amp;t=h&amp;amp;z=11&amp;amp;iwloc=addr'&gt;Athens&lt;/a&gt;, I'll see.&lt;br/&gt;&lt;br/&gt;Quite a big trip is planned for the end of June which is the longest vacation planned for the year. I'll visit a former colleage of mine from the Boeblingen lab who moved to &lt;a href='http://maps.google.ch/maps?f=q&amp;amp;hl=de&amp;amp;q=Stanford,+Santa+Clara,+Kalifornien,+USA&amp;amp;sll=38.036194,23.716736&amp;amp;sspn=0.138989,0.837708&amp;amp;g=Stanford,+Santa+Clara,+Kalifornien,+USA&amp;amp;ie=UTF8&amp;amp;cd=5&amp;amp;geocode=Fd1KOwIdne-3-A&amp;amp;ll=37.472406,-122.163162&amp;amp;spn=0.070026,0.418854&amp;amp;t=h&amp;amp;z=12&amp;amp;iwloc=addr'&gt;Stanford&lt;/a&gt; in late 2007. Another colleague from the lab will most likely accompany me on this trip. Its planned to stay 2 whole weeks over there. This will be my very first time being far away from Europe (though I've been to Turkey, which belongs to Asia, but it was quite close to Europe) and I'm quite excited to see America respectively the USA :)&lt;br/&gt;&lt;br/&gt;In the end of July, I will head north again up to a &lt;a href='http://maps.google.ch/maps?f=q&amp;amp;hl=de&amp;amp;geocode=&amp;amp;q=wacken&amp;amp;sll=37.472406,-122.163162&amp;amp;sspn=0.070026,0.418854&amp;amp;g=wacken&amp;amp;ie=UTF8&amp;amp;ll=54.041248,9.375801&amp;amp;spn=0.051811,0.418854&amp;amp;t=h&amp;amp;z=12&amp;amp;iwloc=addr'&gt;small village north of Hamburg&lt;/a&gt; for the &lt;a href='http://www.wacken.com'&gt;Wacken Open Air&lt;/a&gt; which is the world's largest Heavy Metal Open Air festival, and its it's 20th anniversary, and I can tell, I am rather excited to go there, its my second "Wacken".&lt;br/&gt;&lt;br/&gt;Up to this point, I'll have been to five cities I've never been to before: Dublin, London, Prague, Riga and Stockholm. Visited another continent (North-America), and by this I will have increased my personal number of countries I've visited by 6 (Ireland, England, Czech Republic, Latvia, Sweden and USA and will have spent most of my vacation days, leaving only more days.&lt;br/&gt;&lt;br/&gt;And these two I will use to visit again a friend who lives in &lt;a href='http://maps.google.ch/maps?f=q&amp;amp;hl=de&amp;amp;geocode=&amp;amp;q=Vienna&amp;amp;sll=54.041248,9.375801&amp;amp;sspn=0.051811,0.418854&amp;amp;g=Vienna&amp;amp;ie=UTF8&amp;amp;ll=48.305121,16.372375&amp;amp;spn=0.234758,1.675415&amp;amp;t=h&amp;amp;z=10&amp;amp;iwloc=addr'&gt;Vienna&lt;/a&gt;, where we also plan to take over to &lt;a href='http://maps.google.ch/maps?f=q&amp;amp;hl=de&amp;amp;geocode=&amp;amp;q=Bratislava&amp;amp;sll=48.305121,16.372375&amp;amp;sspn=0.234758,1.675415&amp;amp;g=Bratislava&amp;amp;ie=UTF8&amp;amp;ll=48.339821,17.108459&amp;amp;spn=0.469193,3.35083&amp;amp;t=h&amp;amp;z=9&amp;amp;iwloc=addr'&gt;Bratislava&lt;/a&gt;, which is just around 50km away from Vienna, which will increase my cities-and-countries-Ive-been again by one. This trip is panned for late August or early September. &lt;br/&gt;&lt;br/&gt;After all these trips, the cold time of year will begin a again, which I consider totally as best time for working.&lt;br/&gt;&lt;br/&gt;And to close this post, I'd like to experiment a little bit, how "real" the Web 2.0 community can get. All the city trips mentioned above, I planned to do alone - so far. But I'd like to invite you, to acompany my along the way. If you live in or near one of those cities and like to meet me in person, drinking a beer or a glas of wine with me, guide me through the city, give me recommendations for places I shouldn't miss, offer me accomodation - feel free to contact me! Don't be reluctant, I'm keen to meet new and interessting people, IBMr or no IBMr that doesn't matter, and I'm quite open mindend and uncomplicated :)&lt;br/&gt;For contacting you could use several channels, via comments on this blog, email me, send me a message on &lt;a href='http://www.twitter.com/zlorfik'&gt;Twitter&lt;/a&gt; or in &lt;a href='http://www.facebook.com/profile.php?id=698217496'&gt;Facebook&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-8582985211787470757?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/CqDjFhL3LGk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/8582985211787470757/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=8582985211787470757" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/8582985211787470757?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/8582985211787470757?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/CqDjFhL3LGk/my-personal-world-tour-2009-don-miss.html" title="My personal world tour 2009, don&amp;#39;t miss a show!" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/01/my-personal-world-tour-2009-don-miss.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEANQnc9eyp7ImA9WxVSFko.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-5236434880608572183</id><published>2009-01-09T13:05:00.004+01:00</published><updated>2009-01-11T13:26:33.963+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-11T13:26:33.963+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lotus Connections" /><category scheme="http://www.blogger.com/atom/ns#" term="connections" /><category scheme="http://www.blogger.com/atom/ns#" term="troubleshooting" /><category scheme="http://www.blogger.com/atom/ns#" term="integration" /><category scheme="http://www.blogger.com/atom/ns#" term="quickr" /><title>Integrating Lotus Quickr into Connections</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;This week we configured the integration of Lotus Quickr into Lotus Connections Activities and Communities. We experienced some minor problems of which I like to write here, so you don't step into them, too. First of all, the configuration is quite straight forward and looks more complicated on first glance, than it actually is, so don't be afraid of it.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Activities&lt;/b&gt;&lt;br/&gt;How Activities need to be configured, is described in the Infocenter, &lt;a href='http://publib.boulder.ibm.com/infocenter/ltscnnct/v2r0/index.jsp?topic=/com.ibm.lotus.connections.help/t_admin_act_integrate_with_quickr_over.html'&gt;here&lt;/a&gt;. However, we had the problem, that we were not able to connect to the Quickr server that we configured. The reason of that was, that we used a self-signed certificate for the HTTP server, since it was only a proof of concept installation. But first, some words, how the Activities integration works. &lt;br/&gt;For querying the Quickr server for places, Activities uses a REST service of Quickr and since Activities is mainly based on AJAX, the REST request is sent via JavaScript. For security reasons, the JavaScript script can't access the quickr sever directly, since it runs on a different server that the connections server. So the request is delegated to a proxy running on the connections server and the proxy forwards the request to the Quickr server. &lt;br/&gt;However, to send the REST request from the proxy to the Quickr server, the proxy servlet needs to establish an HTTP connection, and since we used SSL for that, the connections was established over HTTP&lt;b&gt;S&lt;/b&gt;. The trouble we had was, that the proxy did not trust the self-signed certificate of the Quickr HTTP server, so we needed to import that self signed certificate into the trust store of the WebSphere Application server (described &lt;a href='http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.express.doc/info/exp/ae/tsec_ssladdsignercert.html'&gt;here&lt;/a&gt;) the proxy was running on. That was all. &lt;br/&gt;&lt;br/&gt;&lt;b&gt;Communities&lt;/b&gt;&lt;br/&gt;Different from Activities, the integration of Quickr into Communities requires some more steps. Therefor you need to download the &lt;i&gt;Lotus Connections Connector for Lotus Quickr&lt;/i&gt;, and follow the &lt;a href='http://publib.boulder.ibm.com/infocenter/ltscnnct/v2r0/index.jsp?topic=/com.ibm.lotus.connections.help/t_admin_communities_install_quickr.html'&gt;installation instructions&lt;/a&gt;. That was straightforward, but it did not work with our setup, unfortunately.&lt;br/&gt;To explain a little bit the setup we used, Connections and Quickr were both running on seperate servers, both with a collocated HTTP Server that performs the forwarding from the standard http ports 80 and 443 to the ports  Quickr is running on in the AppServer, which are for instance 10038 for http. So we configured during the installation of the Connector to use the default ports, 80 and 443 for ssl. What worked in Activities, did not work in Communities. &lt;br/&gt;When we created a new community and checked the both new Quickr integration checkboxes, we experienced an exception, telling us (in the logs) that an URL like this one &lt;i&gt;http://quickr.demolab.com/myqcs/rest/places/feed&lt;/i&gt; was not found. The reason for this was, that the Connector searched at the wrong port. For this particular URL the HTTP did no port forwarding, we still need to find out, why not. But anyway, after changing the http port following the &lt;a href='http://publib.boulder.ibm.com/infocenter/ltscnnct/v2r0/index.jsp?topic=/com.ibm.lotus.connections.help/t_admin_communities_configure_quickr_enablement.html'&gt;instructions in the InfoCenter&lt;/a&gt; to port 10038, the integration worked perfectly... and btw. is pretty cool :)&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-5236434880608572183?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/UMM7O4DMoF4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/5236434880608572183/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=5236434880608572183" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/5236434880608572183?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/5236434880608572183?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/UMM7O4DMoF4/integrating-lotus-quickr-into.html" title="Integrating Lotus Quickr into Connections" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/01/integrating-lotus-quickr-into.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQCSHY5eCp7ImA9WxVSEk4.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-4235682296523799378</id><published>2009-01-06T10:15:00.002+01:00</published><updated>2009-01-06T10:16:09.820+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-06T10:16:09.820+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="RSA" /><category scheme="http://www.blogger.com/atom/ns#" term="modelling" /><category scheme="http://www.blogger.com/atom/ns#" term="export" /><category scheme="http://www.blogger.com/atom/ns#" term="error" /><category scheme="http://www.blogger.com/atom/ns#" term="diagram" /><title>Creating PNG images of Diagrams in RSA 7.5.1 fails due to "negative width"</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I just upgraded from Rational Software Architect 7.5 to 7.5.1 and now tried to export my old digrams from 7.5 to PNG which failed with an error message saying "negative width". Looking into the log file revealed, that the tool was unable to instantiate a Line (actually a BasicStroke) object. So I simply assigned a new line width to all lines in the diagram.&lt;br/&gt;&lt;br/&gt;Therefor I selected "Select all connectors" and switched to the &lt;i&gt;Appearence&lt;/i&gt;-Tab in the &lt;i&gt;Properties&lt;/i&gt; view and selected a width in the line-width drop down menu.&lt;br/&gt;&lt;br/&gt;After that, I was able again to export my old diagrams to PNG :)&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-4235682296523799378?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/96V2DUlBPIc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/4235682296523799378/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=4235682296523799378" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/4235682296523799378?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/4235682296523799378?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/96V2DUlBPIc/creating-png-images-of-diagrams-in-rsa.html" title="Creating PNG images of Diagrams in RSA 7.5.1 fails due to &amp;quot;negative width&amp;quot;" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/01/creating-png-images-of-diagrams-in-rsa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUBQXk_eip7ImA9WxVSEUk.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-3246959609438942757</id><published>2009-01-04T20:20:00.002+01:00</published><updated>2009-01-05T09:14:10.742+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-05T09:14:10.742+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="personal" /><category scheme="http://www.blogger.com/atom/ns#" term="goals" /><title>No good intentions for 2009, but goals!</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;After the &lt;a href='http://whoopdicity.blogspot.com/2009/01/2008-recap.html'&gt;recap of the last year&lt;/a&gt;, its time to look forward into 2009. As written in the last post, the Plan A is settle down more or less as soon as I found the right place, the right people (especially one ;), its the right time ... well, if everything feels right. But this Plan A is not only hard to "specify" but also hard to influence. And until Plan A takes places, I need a Plan B to spent my time and possibly positively influence the outcome of Plan A. So Plan B will be my guidance through the time, something I can specify, follow on and measure progress ... well, this sounds like a project :)&lt;br/&gt;&lt;br/&gt;This was more or less the thoughts I had yesterday when I wanted to put down my good intentions for 2009. Well, good intentions like "stop smoking" (which I don't do anyway) or "do more sports" are not only fuzzy but also hard to remember in the end of the year - or pretty much sooner. So I tried a differnt approach: inspired by the &lt;i&gt;Management by Objectives&lt;/i&gt; style of our company, I defined a couple of goals I'd like to achieve in 2009. I also tried to define milestones and measurement scales for most of goals. And in order to track the progress of these goals, I set up timeframes for every individual goal.... well, this sounds even more like a project :)&lt;br/&gt;&lt;br/&gt;So I put down all my goals, with timeframes, notes on measurements, priority etc in a structured form and created a project plan for this - how nerdy! (as I've already mentioned yesterday on twitter/facebook). Btw. for project planning I use the free and open &lt;a href='http://www.ganttproject.biz/'&gt;GanttProject&lt;/a&gt;, which totally matches my needs.&lt;br/&gt;&lt;br/&gt;Did I inspire you, to do it the same way? Well I can give you some examples of how I define my goals. Of course I don't want to put down every goal here, because some are very private, things I either want to achieve just for me or I like to surprise others with.&lt;br/&gt;&lt;br/&gt;Ok, how did I structure my goals?&lt;br/&gt;At first, I categorized them into the five main categories: &lt;i&gt;Health, Job&amp;amp;Career, Soul&amp;amp;Wellness, Brain, Money.&lt;/i&gt;&lt;br/&gt;In those categories I put down everything I'd like to achieve, like "loose weight: 8kg", Thats the overall target, I defined 3 milestones for this, 3kg until end of February, 3kg until end of May and 2 more until end of year. I prioritized these steps, putting the top priority onto the first two milestones, the last is more or less optional. Another goal that is easily measurable is the "start the day with 100 pushups", at the moment I do 70-80 every day. &lt;br/&gt;Spread accross the five categories I defined 7 high-priority goals. These are the goals I put most of my energy in. And several normal-priority goals, followed by some low-priority goals which are nice-to-haves. Over the year, I put down notes on each goal and keep track of the progress. I don't expect to achieve 100% of all of my goals, but I'll do what I can to achieve the 7 top goals and most of the normal goals, so lets see how this will work out :)&lt;br/&gt;&lt;br/&gt;So here are 6 of my 7 top goals&lt;br/&gt;&lt;ul&gt;&lt;li&gt;Loose at least 6kg down to 82kg, or better 8kg down to 80kg&lt;/li&gt;&lt;li&gt;Drink less alcohol (at most on 2 days/month, with no more than 5 Beers/day, only exception is the Wacken festival :)&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Accomplish the IT Specialist Certification Level 1&lt;/li&gt;&lt;li&gt;Certify for Lotus Connection Admin&lt;/li&gt;&lt;li&gt;Improve my French skills by working through the self-learning material I have, or better: perform the &lt;a href='http://www.telc.net/telc-Francais-B1.441+M5c50842c46a.0.html'&gt;B1 telc&lt;/a&gt; certification &lt;/li&gt;&lt;li&gt;Save a certain amount of money (I won't tell you how much ;)&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;Some other goals are&lt;br/&gt;&lt;ul&gt;&lt;li&gt;Do sports regularly (3 days/week and 4hrs/week)&lt;/li&gt;&lt;li&gt;Some travel targets for vacation (USA, some weekend city trips in Europe)&lt;/li&gt;&lt;li&gt;Improve my Russian skills (and possibly certify, same as for French, but French is more important)&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Learn Italian (at least a bit)&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Read several books (planned 5 until end of September)&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;Thats quite some stuff to work on, but the year has yet begun! &lt;br/&gt;Lets go!&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-3246959609438942757?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/XmpW9nNSQBM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/3246959609438942757/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=3246959609438942757" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/3246959609438942757?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/3246959609438942757?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/XmpW9nNSQBM/no-good-intentions-for-2009-but-goals.html" title="No good intentions for 2009, but goals!" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/01/no-good-intentions-for-2009-but-goals.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcNSX07fyp7ImA9WxVSEEQ.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-5613247528672015845</id><published>2009-01-04T17:29:00.005+01:00</published><updated>2009-01-04T19:18:18.307+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-04T19:18:18.307+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="personal" /><category scheme="http://www.blogger.com/atom/ns#" term="2008" /><title>2008 a recap</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Although 2008 already ended, its never to late to look back a little and recapitulate.&lt;br /&gt;&lt;br /&gt;For me personally, for my family and for some of my friends, the last year was full of movement, literally inf figuratively.&lt;br /&gt;Starting with my person, I moved twice the year. First time end of Feb from the outskirts of Stuttgart into Stuttgart, second time end of June from Stuttgart to Zurich, the first move was planned, the second wasn't. &lt;br /&gt;&lt;br /&gt;The year 2007 ended not that good for me, especially because I was not very satisfied with developer job in the Boeblingen lab I worked in. I was close to quitting (actually I had already a written contract from another company) but I gave the company another chance, talked with several colleages and managers and decided to join a services team in the lab. I wanted out to the "front", to the customers, travel a little around etc.&lt;br /&gt;&lt;br /&gt;When 2008 started, it seemed, that the job change would have been only be a matter of time then and I therefor planned to moved to a smaller flat to be prepared for more travelling in the service job, reduce my monthly costs an my houshold. So far, everything went on as planned. &lt;br /&gt;&lt;br /&gt;Not two weeks after the move - it was Tuesday 3/11 - my former manager in the lab told me, I can't join the Lab Services Team for up to a year. The reasons have been purely political. He didn't told me that directly, but it was obvious. That was the straw that broke the camel's back. I saw no other option but leaving the lab, I searched in our internal job market and - as luck would have it - found a couple of interessting Service jobs, one at IBM Germany in Stuttgart and two at IBM Switzerland - that was the same day at evening. These job offerings helped to made my mind leaving the lab. Next day I prepared the application documents and slept a night over the decision. On Thursday 3/13 (the birthday of my father who died 7 years ago) I sent out the applications. On friday I received the first respones from the Swiss managers. Wow! That was quick! To this point, I've waited half a year for anything to happen in my old job and now my whole perspectives and options changed in only 4 days! I was totally surprised that anything could also happen quickly in this company. In the end, I had 4 positive answers from 5 applications and decided to go to Zurich and join the ISSL team in July. This was the best decision I made last year and one that had a tremendous impact on my life so far and also improved the image I had of IBM enormously. Well the rest of the year I spent in getting warm in the new job, visited lots of friend around Germany, visited lots of concerts, traveled a lot and gained ground in Zurich.&lt;br /&gt;&lt;br /&gt;But beside of me, there was also movements in my family. My brother finally decided to leave the University and gave up his ungrateful fight to do a doctor's degree and joined another company, but stayed in Leipzig. And also my mother (56) did a great and brave step. She finally also quit her job and moved away from the town I was born to a city north of Hamburg to her partner and also started a new job. Considering her age and her situation she totally earned my deepest respect for this step. And same as for me - she didn't regret it so far.&lt;br /&gt;&lt;br /&gt;So all these movements left me somewhat rooted out. I have no parent's home anymore, I have no family as it used to be, only individuals like my brother, my mother or my aunt, no grandparents anymore - the last grandmas also died last year. And no "own" family so far. &lt;br /&gt;&lt;br /&gt;I admit, this all feels strange somehow and makes me sometimes feel like I am a floating particle drifting through space and time hoping to bounce somewhere and sometime and just stick, without knowing where and when that would be. At the moment, I feel no boundaries, no limits, I am full of energy and its just like pushing forward in any direction, its like running blind in a direction to find the next wall :) hoping to find a new orientation landmark, some ground I am willing to put new roots in. Well, the new roots stuff, this is my Plan A. But unfortunately, this is something I can't influence directly, it is something I will know when time comes, when it just &lt;i&gt;feels right&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;For the time until that point, I need a plan B, something I can influence and something that will increase the probability of fulfulling Plan A earlier :) So that's the major direction for 2009: follow Plan B ;)&lt;br /&gt;&lt;br /&gt;2009, here I come!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-5613247528672015845?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/Mj5sbsrdAeU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/5613247528672015845/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=5613247528672015845" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/5613247528672015845?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/5613247528672015845?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/Mj5sbsrdAeU/2008-recap.html" title="2008 a recap" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/01/2008-recap.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcBQX49fSp7ImA9WxVSEEU.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-766297836722224087</id><published>2008-12-20T17:32:00.000+01:00</published><updated>2009-01-04T17:54:10.065+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-04T17:54:10.065+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lotus Connections" /><category scheme="http://www.blogger.com/atom/ns#" term="customization" /><category scheme="http://www.blogger.com/atom/ns#" term="WebAppIntegrator" /><category scheme="http://www.blogger.com/atom/ns#" term="sidebar" /><category scheme="http://www.blogger.com/atom/ns#" term="Portal Awareness" /><category scheme="http://www.blogger.com/atom/ns#" term="navigation" /><title>Advanced Lotus Connections customization - pt.3 - Portal Awareness</title><content type="html">This post describes, how a Portal-integrated Lotus Connections installation can be customized to be aware of the Portal it runs in. The awareness is used to hide and show details depending from where the user navigated to Lotus Connections.&lt;br /&gt;&lt;br /&gt;One use case for which the Portal awareness can be used is in combination with the WAI. When being accessed from Portal, the application shows the Portal navigation using the WAI (left image). When accessed from outside of Portal, i.e. from a bookmark, it shows the default standalone navigation. In case of Lotus Connections the default navigation bar shows all the five features and the homepage in a single top navigation bar (right image).&lt;br /&gt;&lt;br /&gt;&lt;table border="0" width="90%"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_g4uPeL8w4fM/SWDnfBNCt_I/AAAAAAAAAHw/6yV2ze4K1X8/s1600-h/portal_standard_wai_doublenav.png"&gt;&lt;img style="display:inline; margin:0px auto 10px; text-align:left;cursor:pointer; cursor:hand;width: 320px; height: 233px;" src="http://1.bp.blogspot.com/_g4uPeL8w4fM/SWDnfBNCt_I/AAAAAAAAAHw/6yV2ze4K1X8/s320/portal_standard_wai_doublenav.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5287480482618062834" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_g4uPeL8w4fM/SWDnr-v68sI/AAAAAAAAAH4/ZWLBgCw18rk/s1600-h/lotus_connections_standalone.png"&gt;&lt;img style="display:inline; margin:0px auto 10px; text-align:right;cursor:pointer; cursor:hand;width: 320px; height: 246px;" src="http://4.bp.blogspot.com/_g4uPeL8w4fM/SWDnr-v68sI/AAAAAAAAAH4/ZWLBgCw18rk/s320/lotus_connections_standalone.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5287480705297347266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;The application awareness is described in the WAI documentation in general for any web application that is integrated in Portal using the WAI. Unfortunately this general approach does not work for all the different features of Lotus Connections, actually it does only work for Activities and even for this not without errors. But though its not impossible, and how it is realized is shown in the following sections.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:160%"&gt;Main Idea&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The main idea to achieve Portal awareness as described in the WAI documentation is to initially pass a parameter to the application when navigating from Portal and remember this parameter using a session cookie for all consecutive clicks. When the application is accessed from a link outside of Portal, no parameter is passed to the application. When the Browser window is closed, the session cookie expires.&lt;br /&gt;The principle is the same for every feature and depicted in the following diagram.&lt;br /&gt;&lt;br /&gt;The diagram shows the states the overall system consisting of the Portal Server, the Connections Server(s) and the client’s browser could be in. Each state represents an internal state consisting of user authentication (LTPA token), request parameter containing the information whether a user navigates from Portal server to Connections or not, and a session cookie representing if the user visited a certain Connections feature before. Note that the session cookie is maintained for each feature. Each composite state also represents the view of the user’s browser respectively which application the user accesses at the moment.&lt;br /&gt;&lt;br /&gt;After an initialization phase where the user initially navigates to Portal and Connections the user afterwards switches between the three states in the lower section of the diagram.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_g4uPeL8w4fM/SWDn2GQ2lPI/AAAAAAAAAIA/1Eq5E7SuqZY/s1600-h/lc_awareness_statemachine.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 182px;" src="http://1.bp.blogspot.com/_g4uPeL8w4fM/SWDn2GQ2lPI/AAAAAAAAAIA/1Eq5E7SuqZY/s320/lc_awareness_statemachine.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5287480879113213170" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Besides this, when the user navigates directly to Lotus Connections, he can reach the Portal only manually be navigating to the explicit Portal URL or by using a bookmark to Portal. Furthermore, the transitions from the left path (the Portal path) to the right path (Connections standalone) via the widgets on the homepage are considered as known limitations of the current solution and occur due to the titles of the widgets in the homepage do not contain the request parameter required. Anyway, the confusion in the user experience is limited because the feature on whose widget the user clicked is opened in a new window respectively browser tab.&lt;br /&gt;&lt;br /&gt;The following diagram depicts the decision flow for the render process inside the browser.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_g4uPeL8w4fM/SWDn_R3YfLI/AAAAAAAAAII/ZlLq2v-Bam4/s1600-h/navigation_render_flow.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 299px;" src="http://4.bp.blogspot.com/_g4uPeL8w4fM/SWDn_R3YfLI/AAAAAAAAAII/ZlLq2v-Bam4/s320/navigation_render_flow.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5287481036846431410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As shown, the browser script first checks, if a request parameter is set, if the parameter is set, it is stored as session cookie. If the parameter is not set, the script checks, if the cookie is set – in other words, if the user visited Connections from Portal before - the Portal navigation is displayed, otherwise, the standalone navigation is displayed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:160%"&gt;Realization&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The easiest part is to hide and include the WebAppIntegrator navigation when navigating from Portal, the difficult part was to hide the standalone navigation bar when inside Portal. The dynamic removal of the code, for instance via JSP or JavaScript produces JavaScript errors when the page is rendered because some of the JavaScript scripts access or modify elements in the navigation bar such as the Login/Logout button. So the solution that worked fine in the end without big modifications was to simply hide the bar using CSS. This applies to all features of Lotus Connections.&lt;br /&gt;&lt;br /&gt;The hide/show mechanism has to be applied in the header.html files in the sn-core.ui.war/templates directory of each Connections feature. Simply add to the file the following code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt; if(testCookieForFromPortal()) { &lt;br /&gt;  document.getElementById("lotusBanner").style.display = "none";&lt;br /&gt; }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For applying the WAI script, follow the guideline described in the Lotus Connections wiki (see Resources chapter). Add to every file described in the wiki, at the position where the WAI script has to be placed (as first element after the opening body-tag) the following code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;if (("&amp;lt;c:out value='${param.FromPortal}'/&amp;gt;" != "true") &amp;&amp; !testCookieForFromPortal()) {  }&lt;br /&gt;else {&lt;br /&gt;  // if we get here, we have come from Portal, set a cookie&lt;br /&gt;  document.cookie="FromPortal=true";&lt;br /&gt;}&lt;br /&gt;function testCookieForFromPortal() {&lt;br /&gt;  if (getCookieValue("FromPortal") == "true")&lt;br /&gt;  { return true; } &lt;br /&gt;  else &lt;br /&gt;  { return false; }&lt;br /&gt;}&lt;br /&gt;function getCookieValue(cookieName) {&lt;br /&gt;  var retVal = "";&lt;br /&gt;  var i = document.cookie.indexOf(cookieName);&lt;br /&gt;  if (i != -1) {&lt;br /&gt;    var iVal = i + cookieName.length + 1;&lt;br /&gt;    var j = document.cookie.indexOf(";", iVal);&lt;br /&gt;    if (j != -1) {&lt;br /&gt;      retVal = document.cookie.substring(iVal,j);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  return retVal;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This applies to all features except for Blogs. The Blog solution is described below. This solution also uses JSP tags only and no JSP scriptlets, since scriptlets are disabled in some of the Connections JSPs.&lt;br /&gt;&lt;br /&gt;The actual code to integrate Portal navigation is special to almost every single feature of Lotus Connections because every component follows a different approach to assembling the UI. This is not unexpected when you look at the history of Lotus Connections and that every feature was a standalone application before.&lt;br /&gt;&lt;br /&gt;The following sections contain descriptions for every feature how to apply the dynamic Portal aware behaviour.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:160%"&gt;Activities, Communities and Profiles&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Instead of the snippet provided by the WAI portlet, apply the following snippet and replace $$URL$$ with the URL of the generated snippet:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;!-- BEGIN PORTAL NAVIGATION INTEGRATION --&amp;gt;&lt;br /&gt;&amp;lt;c:if test="${param.FromPortal=='true' || sessionScope.FromPortal=='true'}" &amp;gt;&lt;br /&gt;    &amp;lt;script type="text/javascript" src="$URL$}"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/c:if&amp;gt;&lt;br /&gt;&amp;lt;c:if test="${sessionScope.FromPortal!='true'}" &amp;gt;&lt;br /&gt; &amp;lt;c:set var="FromPortal" value="${param.FromPortal}" scope="session" /&amp;gt;&lt;br /&gt;&amp;lt;/c:if&amp;gt;&lt;br /&gt;&amp;lt;!-- END PORTAL NAVIGATION INTEGRATION --&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The snippet checks, if the request parameter or the session contains the FromPortal parameter. If no session parameter is set, the session parameter is set to the value of the request parameter. Ensure that this snippet is inserted on all positions in the file described in the documentation.&lt;br /&gt;&lt;br /&gt;Modify the URL of the URL page in Portal that links to Connections Activities to:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;https://&amp;lt;activities-server&amp;gt;/&amp;lt;activities-context-root&amp;gt;/service/html/mainpage?FromPortal=true&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Modify the URL of the URL page in Portal that links to Connections Communities to:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;https://&amp;lt;communities-server&amp;gt;/&amp;lt;communities-context-root&amp;gt;/service/html/allcommunities?FromPortal=true&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Modify the URL of the URL page in Portal that links to Connections Profiles to:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;https://&amp;lt;profiles-server&amp;gt;/&amp;lt;profiles-context-root&amp;gt;/home.do?FromPortal=true&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In Activities a rendering problem occurred, where the error message box appeared during load of the page. This was not due to an error but a simple timing condition. The error box is part of the mainpage and is rendered per default. Its visibility is set to hidden via Javascript. However, with the changes for the WAI applied, the box was not hidden during load but after the load process. The easiest way to solve this problem is to set the style attribute of this box to “visibility:hidden” which hides the error box during load. Nevertheless, the error box is shown in case of error because its visibility is set to visible in case of errors by Javascript.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:160%"&gt;Homepage&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the homepages feature the advanced search page jsp file contained an invalid HTML structure, where the static navigation header is included in the  section of the file, which is syntactically wrong. When the Javascript functions as described above are put below the &amp;lt;body&amp;gt; element, the navigation could not be hidden, because the functions defined in the body element are not visible in the head element. The only reasonable solution for this is to move the jsp include statement that includes the header and other HTML content to the body section.&lt;br /&gt;&lt;br /&gt;These statements are as follows, put them below the snippet for the WAI navigation:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;jsp:include page='pageHeader.jspf' flush="true" /&amp;gt; &lt;br /&gt;&amp;lt;jsp:include page='menuBar.jspf' flush="true" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Similar to Activities etc put the following code at first element in the body tag and replace $$URL$$ with the URL of the generated snippet:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;!-- BEGIN PORTAL NAVIGATION INTEGRATION --&amp;gt;&lt;br /&gt;&amp;lt;c:if test="${param.FromPortal=='true' || sessionScope.FromPortal=='true'}" &amp;gt;&lt;br /&gt;    &amp;lt;script type="text/javascript" src="$URL$}"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/c:if&amp;gt;&lt;br /&gt;&amp;lt;c:if test="${sessionScope.FromPortal!='true'}" &amp;gt;&lt;br /&gt; &amp;lt;c:set var="FromPortal" value="${param.FromPortal}" scope="session" /&amp;gt;&lt;br /&gt;&amp;lt;/c:if&amp;gt;&lt;br /&gt;&amp;lt;!-- END PORTAL NAVIGATION INTEGRATION --&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Modify the URL of the URL page in Portal that links to Connections Homepage to:&lt;br /&gt;&lt;pre&gt;https://&amp;lt;homepage-server&amp;gt;/&amp;lt;homepage-context-root&amp;gt;/web/getuserpref?FromPortal=true&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:160%"&gt;Dogear&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dogear does not allow serverside session handling, so the solution of Activities and Communities does not work. Second, the UI does not allow to include a script such as the WAI script directly and on condition. If the full snippet of the WAI portlet would be written to the document using a single write statement, the inclusion of the Portal navigation will not work.&lt;br /&gt;&lt;br /&gt;So kind of Javascript hack needs to be applied, that prevents the conditionally included script from being executed during page loading and executes the script at first, when the whole page has been processed. This is done by splitting the Javascript inclusion into several substring which each of them contain unexecutable code like in the following code snippet. Again, replace $$URL$$ with the URL of the generated snippet of the WAI portlet.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;if(testCookieForFromPortal()) {&lt;br /&gt; document.write('&amp;lt;scr');&lt;br /&gt; document.write('ipt type="text/javascript" ');&lt;br /&gt; document.write('src="$URL$"');&lt;br /&gt; document.write('&amp;gt;&amp;lt;/scr');&lt;br /&gt; document.write('ipt&amp;gt;');&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Modify the URL of the URL page in Portal that links to Connections Dogear to:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;https://&amp;lt;dogear-server&amp;gt;/&amp;lt;dogear-context-root&amp;gt;/?FromPortal=true&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:160%"&gt;Blogs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Similar to Dogear, blogs does no support serverside session therefore the WAI inclusion script must be injected using the following code:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;if(testCookieForFromPortal()) {&lt;br /&gt; document.write('&amp;lt;scr');&lt;br /&gt; document.write('ipt type="text/javascript" ');&lt;br /&gt; document.write('src="$URL$"');&lt;br /&gt; document.write('&amp;gt;&amp;lt;/scr');&lt;br /&gt; document.write('ipt&amp;gt;');&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Additionally, Blogs uses the Velocity templating engine, and the layout of the whole Blogs feature depends on the theme that is used, including the homepage of Blogs. Each theme is a set of Velocity templates which have to be modified according the documentation in the Lotus Connections wiki.&lt;br /&gt;&lt;br /&gt;But instead of the snippet for the Javascript functions described above, use the following snippet for the VTL.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&lt;br /&gt;    #if($model.getRequestParameter('FromPortal') == 'true')&lt;br /&gt;  document.cookie="FromPortal=true";&lt;br /&gt;    #else &lt;br /&gt; if(testCookieForFromPortal()) {&lt;br /&gt;  document.cookie="FromPortal=true";&lt;br /&gt; } &lt;br /&gt;    #end&lt;br /&gt;&lt;br /&gt;    function testCookieForFromPortal()    {&lt;br /&gt;        if (getCookieValue("FromPortal") == "true") {&lt;br /&gt;                return true;&lt;br /&gt;            } else {&lt;br /&gt;                return false;&lt;br /&gt;            }&lt;br /&gt;    }&lt;br /&gt;    function getCookieValue(cookieName)    {&lt;br /&gt;        var retVal = "";&lt;br /&gt;        var i = document.cookie.indexOf(cookieName);&lt;br /&gt;        if (i != -1) {&lt;br /&gt;            var iVal = i + cookieName.length + 1;&lt;br /&gt;            var j = document.cookie.indexOf(";", iVal);&lt;br /&gt;            if (j != -1)&lt;br /&gt;           {&lt;br /&gt;                retVal = document.cookie.substring(iVal,j);&lt;br /&gt;           }&lt;br /&gt;        }&lt;br /&gt;        return retVal;&lt;br /&gt;    }&lt;br /&gt;    // the themeTemplateURL variable should be set to the URL defined&lt;br /&gt;    // as the src attribute of the &amp;lt;script/&amp;gt; tag generated by the&lt;br /&gt;    // WebAppIntegrator portlet.&lt;br /&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Modify the URL of the URL page in Portal that links to Connections Blogs to:&lt;br /&gt;&lt;pre&gt;https://&amp;lt;blogs-server&amp;gt;/&amp;lt;blogs-context-root&amp;gt;/?FromPortal=true&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:160%"&gt;Known Limitations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Navigating from the Homepage/Widget to a feature without previously navigating from the Portal Navigation to the feature (and thereby setting the FromPortal cookie) will bring up the standalone look and feel of the feature&lt;br /&gt;&lt;br /&gt;If the session cookie is still available but the LTPA token expired or is not available, no navigation shown&lt;br /&gt;&lt;br /&gt;The customization of blogs as described here is a hack to show that its possible, its not a best practice. Blogs provides a way to change the configuration in order to apply a custom theme/footer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-766297836722224087?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/m_7mw-Dz-ao" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/766297836722224087/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=766297836722224087" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/766297836722224087?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/766297836722224087?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/m_7mw-Dz-ao/advanced-lotus-connections.html" title="Advanced Lotus Connections customization - pt.3 - Portal Awareness" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_g4uPeL8w4fM/SWDnfBNCt_I/AAAAAAAAAHw/6yV2ze4K1X8/s72-c/portal_standard_wai_doublenav.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2009/01/advanced-lotus-connections.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08CQno_fyp7ImA9WxVSEEU.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-737481287942389</id><published>2008-12-15T16:30:00.007+01:00</published><updated>2009-01-04T16:11:03.447+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-04T16:11:03.447+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lotus Connections" /><category scheme="http://www.blogger.com/atom/ns#" term="customization" /><category scheme="http://www.blogger.com/atom/ns#" term="WebAppIntegrator" /><category scheme="http://www.blogger.com/atom/ns#" term="sidebar" /><category scheme="http://www.blogger.com/atom/ns#" term="navigation" /><title>Advanced Lotus Connections customization - pt.2 - Sidebar Navigation with the WebAppIntegrator</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br /&gt;In this post I'd like to describe how to customize and extend the WebApplicationIntegrator for WebSphere Portal in order to deliver a double-top-bar navigation and a sidebar navigation using the portal content model. The extension was developed for Lotus Connections but could be used for integrating other web applications, too.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold; font-size:160%"&gt;Main Idea&lt;/span&gt;&lt;br /&gt;As described in the &lt;a href="http://whoopdicity.blogspot.com/2008/12/advanced-lotus-connections.html"&gt;first part&lt;/a&gt;, the structure of the generated HTML code needs to be modified in order to deliver a sidebar navigation, respectively a table layout. This is the easy part of the modification and require some HTML skills and basic knowledge of JSP.&lt;br /&gt;The slightly more complicated part is to generate the navigation menu for the upper navigation levels, this requires Java, JSP and Portal API skills. But its not that difficult.&lt;br /&gt;&lt;br /&gt;To do understand what has to be done, we first must understand how the WAI generates the navigation menu. The link that is generated by the WAI portlet contains the unique ID or the custom unique name of the page that marks the current navigational position. The WAI theme extension searches the Portal for that page using the Portal API. To generate the standard single top navigation bar, the parent page is determined as well.&lt;br /&gt;&lt;br /&gt;So the basic idea for generating more than the single top navigation is to determine the parent’s parent and its parent as well. With knowledge of each parent page it is easy to iterate over each child page and create the navigation html code. The page structure that needs to be created in order to have a double-top-bar navigation and a sidebar navigation may look like depicted in the following diagram.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_g4uPeL8w4fM/SUaBqInPLoI/AAAAAAAAAHA/lk2sch6WzBo/s1600-h/PageModelGeneral.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 262px;" src="http://4.bp.blogspot.com/_g4uPeL8w4fM/SUaBqInPLoI/AAAAAAAAAHA/lk2sch6WzBo/s320/PageModelGeneral.png" alt="" id="BLOGGER_PHOTO_ID_5280050174005030530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Using a page structure as shown, the WAI would per default only generate a navigation structure that lists all children of a common parent. This means the navigation shown on top of the &lt;span style="font-style:italic"&gt;Profiles&lt;/span&gt; page would only list the other URL pages because each of them is a child page of the common parent page &lt;span style="font-style:italic"&gt;portal.DemoLab.LotusConnections&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The extended WAI simply iterates over all children of the &lt;span style="font-style:italic"&gt;LotusConnections&lt;/span&gt; page’s parent (the siblings of the &lt;span style="font-style:italic"&gt;LotusConnections &lt;/span&gt;page) and the same for the parent of the next levels.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold; font-size:160%"&gt;Realization&lt;/span&gt;&lt;br /&gt;In the WAI extension of a theme – the &lt;span style="font-style:italic"&gt;webappintegrator&lt;/span&gt; directory – the &lt;span style="font-style:italic"&gt;Display.jsp&lt;/span&gt; is the main entry point. It includes the JSP fragments (jspf) to aggregate the WAI page respectively the homepage.&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;span style="font-weight:bold"&gt;Code changes&lt;/span&gt;&lt;/small&gt;&lt;br /&gt;To iterate over every parent page a handle for each page must be created, therefore we have to add to the variable declaration part in the beginning of the file.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&lt;span style="font-style:italic"&gt;ObjectID pageOid = null;&lt;br /&gt;ObjectID parentOid = null;&lt;/span&gt;&lt;br /&gt;ObjectID parent2Oid = null;&lt;br /&gt;ObjectID parent3Oid = null;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic"&gt;String parentUniqueName = null;&lt;/span&gt;&lt;br /&gt;String parent2UniqueName = null;&lt;br /&gt;String parent3UniqueName = null;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The three lines in &lt;span style="font-style:italic"&gt;italics&lt;/span&gt; already exist in the file and are used for the selected page (pageOid), its parent (parentOid) and the parent page’s uniquename (parentUniqueName), the handles with the 2 and the 3 in the name correspond to the 2nd level and 3rd level parent of the page. These handles are used later on for iterating.&lt;br /&gt;&lt;br /&gt;After that the initialization of the WAI needs to be changed as well. This is done in the &lt;span style="font-style:italic"&gt;webAppIntegratorInitialize.jspf&lt;/span&gt; file. Open the file and search for the section &lt;span style="font-style:italic"&gt;“Get the selected page object id”&lt;/span&gt; and add the following String declarations:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;span style="font-style:italic"&gt;String theSelectedPageid = identification.serialize( pageOid );&lt;/span&gt;&lt;br /&gt;String theSelectedParentid = null;&lt;br /&gt;String theSelectedGrandParentid = null;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Again, the line in &lt;span style="font-style:italic"&gt;italics&lt;/span&gt; already exist.&lt;br /&gt;In order to find the correct parent pages, search for the section &lt;span style="font-style:italic"&gt;“Get the parent page id”&lt;/span&gt; (should be right below the one we just changed), and replace it with the following code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;NavigationNode pageNode = (NavigationNode)navModel.getLocator().findByID(pageOid);&lt;br /&gt;NavigationNode parentNode = null;&lt;br /&gt;if (pageNode != null) &lt;br /&gt;{&lt;br /&gt;  parentNode = (NavigationNode)navModel.getParent(pageNode);&lt;br /&gt;  parentOid = parentNode.getObjectID();&lt;br /&gt;  theSelectedParentid = identification.serialize( parentOid);&lt;br /&gt;  parentUniqueName = parentOid.getUniqueName();&lt;br /&gt;  if (parentUniqueName == null) &lt;br /&gt;  {&lt;br /&gt;    parentUniqueName = identification.serialize(parentOid);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;//get the grand parent (parent2)&lt;/span&gt;&lt;br /&gt;parentNode = (NavigationNode)navModel.getParent(parentNode);&lt;br /&gt;if(parentNode != null) &lt;br /&gt;{&lt;br /&gt;  parent2Oid = parentNode.getObjectID();&lt;br /&gt;  theSelectedGrandParentid = identification.serialize( parent2Oid);&lt;br /&gt;  parent2UniqueName = parent2Oid.getUniqueName();&lt;br /&gt;  if (parent2UniqueName == null) &lt;br /&gt;  {&lt;br /&gt;    parent2UniqueName = identification.serialize(parent2Oid );&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;  //get the grand grand grand parent (parent3)&lt;/span&gt;&lt;br /&gt;  parentNode = (NavigationNode)navModel.getParent(parentNode);&lt;br /&gt;  if(parentNode != null) &lt;br /&gt;  {&lt;br /&gt;    parent3Oid = parentNode.getObjectID();&lt;br /&gt;    parent3UniqueName = parent3Oid.getUniqueName();&lt;br /&gt;    if (parent3UniqueName == null) &lt;br /&gt;    {&lt;br /&gt;      parent3UniqueName = identification.serialize(parent2Oid );&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold; font-size:130%"&gt;Page Structure&lt;/span&gt;&lt;br /&gt;Now we need to modify the page structure to create a table layout. As shown in the &lt;a href="http://whoopdicity.blogspot.com/2008/12/advanced-lotus-connections.html"&gt;Introduction&lt;/a&gt; post, the table layout is no black magic and simply done in HTML. Only slight changes are made to the file structure. An additional file is created that contains the page area and another one for the sidebar navigation. The structure created is shown in the following picture.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_g4uPeL8w4fM/SUaB3hSfesI/AAAAAAAAAHI/5Zxydw0bMZw/s1600-h/wai_ext_jsp_struct.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 274px;" src="http://2.bp.blogspot.com/_g4uPeL8w4fM/SUaB3hSfesI/AAAAAAAAAHI/5Zxydw0bMZw/s320/wai_ext_jsp_struct.png" alt="" id="BLOGGER_PHOTO_ID_5280050403967204034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold; font-size:130%"&gt;Generating Navigation Bars&lt;/span&gt;&lt;br /&gt;With the code changes applied to the WAI theme extension, we are now able to iterate over each navigation level in order to generate the navigation HTML code. First, we want to generate the double top bar navigation. Therefore we open the &lt;span style="font-style:italic"&gt;webAppIntegratorTopNav.jsp&lt;/span&gt; that contains per default the single top navigation.&lt;br /&gt;&lt;br /&gt;To iterate over topmost level - 2 levels above the current page’s level – the upper bar of the double-bar navigation - use a code similar to the following. Note, that the style classes that are applied refer to a customer theme, not the default IBM Portal theme! (This might be changed in this documentation in the near future)&lt;br /&gt;&lt;br /&gt;The second navigation level – the lower bar of the double bar navigation – is generated using a similar code. Again, this code uses custom  CSS style classes, not the default IBM Portal ones.&lt;br /&gt;&lt;br /&gt;For creating the sidebar, open the &lt;span style="font-style:italic"&gt;webAppIntegratorSideNav.jsp&lt;/span&gt; file. This is a new file that has to be created as described above. The sidebar code is similar to the other navigation bars.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold"&gt;First Menu Bar&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;&lt;br /&gt;//--------------------------------------------------&lt;br /&gt;// Create the Menu1 Tab Bar Markup&lt;br /&gt;//--------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;&amp;lt;c:if test = "${renderTopNavigation}"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;  &amp;lt;portal-logic:if navigationAvailable="yes" screen="Home,LoggedIn,LoggedOut"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;    &amp;lt;portal-navigation:navigation startLevel="1" stopLevel = "1" scopeUniqueName="&lt;/span&gt;&lt;span style="color: rgb(102, 0, 204);"&gt;&amp;lt;%=parent3UniqueName%&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;      document.write("&amp;lt;ul id='mainMenuOne'&amp;gt;");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;    &amp;lt;portal-navigation:navigationLoop&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;      &amp;lt;c:set var="topNavItemTitle"&amp;gt;&amp;lt;portal-fmt:title/&amp;gt;&amp;lt;/c:set&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;      &amp;lt;% String currentPageID = identification.serialize((( com.ibm.portal.Identifiable) wpsNavNode).getObjectID());&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;      //---------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;      // generate the markup to render selected page&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;      //---------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;      if ( currentPageID.equals(theSelectedGrandParentid ) ) { %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write('&amp;lt;li class="pos1 selected"&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;      &amp;lt;% if (com.ibm.portal.content.ContentNodeType.EXTERNALURL.equals( wpsNavNode.getContentNode().getContentNodeType())) { %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;          document.write('&amp;lt;a target="_top" href="&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;&amp;lt;portal-navigation:navigationUrl type="link" /&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;" &amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;      &amp;lt;% } else { %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;          &amp;lt;portal-navigation:urlGeneration contentNode="&lt;/span&gt;&lt;span style="color: rgb(102, 0, 204);"&gt;&amp;lt;%=currentPageID%&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;" forceAbsolute="true" themeTemplate=""&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;            document.write('&amp;lt;a target="_top" href="&lt;/span&gt;&lt;span style="color: rgb(102, 0, 204);"&gt;&amp;lt;% wpsURL.write(out); %&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;          &amp;lt;/portal-navigation:urlGeneration&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;      &amp;lt;% } %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write("&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;&amp;lt;c:out value='${topNavItemTitle}' escapeXml='true' /&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;");&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write("&amp;lt;/a&amp;gt;");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write("&amp;lt;/li&amp;gt;");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;      &amp;lt;% } else {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;      //---------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;      // generate the markup to render unselected pages&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;      //---------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;      %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write('&amp;lt;li class="pos1"&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;        &amp;lt;portal-navigation:urlGeneration contentNode="&lt;/span&gt;&lt;span style="color: rgb(102, 0, 204);"&gt;&amp;lt;%=currentPageID%&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;" forceAbsolute="true" themeTemplate=""&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;          document.write('&amp;lt;a target="_top" href="&lt;/span&gt;&lt;span style="color: rgb(102, 0, 204);"&gt;&amp;lt;% wpsURL.write(out); %&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;        &amp;lt;/portal-navigation:urlGeneration&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;        &amp;lt;c:set var="pageTitle" &amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;          &amp;lt;portal-fmt:title /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;        &amp;lt;/c:set&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;          document.write('&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;&amp;lt;c:out value='${topNavItemTitle}' escapeXml='true' /&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;');&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;          document.write('&amp;lt;/a&amp;gt;');&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;          document.write('&amp;lt;/li&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;    &amp;lt;% } %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;      &amp;lt;/portal-navigation:navigationLoop&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;      document.write("&amp;lt;/ul&amp;gt;");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;      &amp;lt;c:if test="${!topNavFirstParam}"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write('&amp;lt;/div&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;      &amp;lt;/c:if&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;    &amp;lt;/portal-navigation:navigation&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;  &amp;lt;/portal-logic:if&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;&amp;lt;/c:if&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold"&gt;Second Menu Bar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;&lt;br /&gt;//--------------------------------------------------&lt;br /&gt;// Create the Menu2 Tab Bar Markup&lt;br /&gt;//--------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;&amp;lt;c:if test = "${renderTopNavigation}"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;  &amp;lt;portal-logic:if navigationAvailable="yes" screen="Home,LoggedIn,LoggedOut"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;    &amp;lt;portal-navigation:navigation startLevel="1" stopLevel = "1" scopeUniqueName="&lt;/span&gt;&lt;span style="color: rgb(102, 0, 204);"&gt;&amp;lt;%=parent2UniqueName%&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;      document.write("&amp;lt;ul id='mainMenuTwo'&amp;gt;");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;    &amp;lt;portal-navigation:navigationLoop&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;      &amp;lt;c:set var="topNavItemTitle"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;        &amp;lt;portal-fmt:title/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;      &amp;lt;/c:set&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;      &amp;lt;% String currentPageID = identification.serialize(((com.ibm.portal.Identifiable ) wpsNavNode ).getObjectID());&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;      if ( currentPageID.equals(theSelectedParentid) ) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;      //---------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;      // generate the markup to render selected page&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;      //---------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;      %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write('&amp;lt;li class="pos1 selected"&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;        &amp;lt;% if (com.ibm.portal.content.ContentNodeType.EXTERNALURL.equals( wpsNavNode.getContentNode().getContentNodeType())) { %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;          document.write('&amp;lt;a target="_top" href="&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;&amp;lt;portal-navigation:navigationUrl type="link" /&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;" &amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;        &amp;lt;% } else { %&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;          &amp;lt;portal-navigation:urlGeneration contentNode="&lt;/span&gt;&lt;span style="color: rgb(102, 0, 204);"&gt;&amp;lt;%=currentPageID%&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;" forceAbsolute="true" themeTemplate=""&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;            document.write('&amp;lt;a target="_top" href="&lt;/span&gt;&lt;span style="color: rgb(102, 0, 204);"&gt;&amp;lt;% wpsURL.write(out); %&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;          &amp;lt;/portal-navigation:urlGeneration&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;        &amp;lt;% } %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write("&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;&amp;lt;c:out value='${topNavItemTitle}' escapeXml='true' /&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write("&amp;lt;/a&amp;gt;");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write("&amp;lt;/li&amp;gt;");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;      &amp;lt;% } else {  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;      //---------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;      // generate the markup to render unselected  pages&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;      //---------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;      %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write('&amp;lt;li class="pos1"&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;        &amp;lt;portal-navigation:urlGeneration contentNode="&lt;/span&gt;&lt;span style="color: rgb(102, 0, 204);"&gt;&amp;lt;%=currentPageID%&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;" forceAbsolute="true" themeTemplate=""&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;          document.write('&amp;lt;a target="_top" href="&lt;/span&gt;&lt;span style="color: rgb(102, 0, 204);"&gt;&amp;lt;% wpsURL.write(out); %&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;        &amp;lt;/portal-navigation:urlGeneration&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;        &amp;lt;c:set var="pageTitle" &amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;          &amp;lt;portal-fmt:title /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;        &amp;lt;/c:set&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write('&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;&amp;lt;c:out value='${topNavItemTitle}' escapeXml='true' /&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write('&amp;lt;/a&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write('&amp;lt;/li&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;      &amp;lt;% }  %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;      &amp;lt;/portal-navigation:navigationLoop&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;      document.write("&amp;lt;/ul&amp;gt;");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;      &amp;lt;c:if test="${!topNavFirstParam}"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write('&amp;lt;/div&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;      &amp;lt;/c:if&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;    &amp;lt;/portal-navigation:navigation&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;  &amp;lt;/portal-logic:if&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;&amp;lt;/c:if&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold"&gt;Sidemenu Bar&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;//--------------------------------------------------&lt;br /&gt;// Create the Side Bar Markup&lt;br /&gt;//--------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;&amp;lt;c:if test = "${renderTopNavigation}"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;  &amp;lt;portal-logic:if navigationAvailable="yes" screen="Home,LoggedIn,LoggedOut"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;    &amp;lt;portal-navigation:navigation startLevel="1" stopLevel = "1" scopeUniqueName="&lt;span style="color: rgb(102, 0, 204);"&gt;&amp;lt;%=parentUniqueName%&amp;gt;&lt;/span&gt;"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;      document.write('&amp;lt;ul&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;      &amp;lt;portal-navigation:navigationLoop&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;        &amp;lt;c:set var="topNavItemTitle"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;          &amp;lt;portal-fmt:title/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;        &amp;lt;/c:set&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;        &amp;lt;% String currentPageID = identification.serialize(((com.ibm.portal.Identifiable ) wpsNavNode ).getObjectID());&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;        if ( currentPageID.equals(theSelectedPageid) ) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;        //---------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;        // generate the markup to render selected page&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;        //---------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;        %&amp;gt;  &lt;/span&gt;   &lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write('&amp;lt;li id="portalSelectedNode" class="selected"&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;        &amp;lt;% if (com.ibm.portal.content.ContentNodeType.EXTERNALURL.equals(wpsNavNode.getContentNode().getContentNodeType())) { %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;          document.write('&amp;lt;a target="_top" href="&lt;span style="color: rgb(51, 153, 153);"&gt;&amp;lt;portal-navigation:navigationUrl type="link" /&amp;gt;&lt;/span&gt;" &amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;        &amp;lt;% } else { %&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;          &amp;lt;portal-navigation:urlGeneration contentNode="&lt;span style="color: rgb(102, 0, 204);"&gt;&amp;lt;%=currentPageID%&amp;gt;&lt;/span&gt;" forceAbsolute="true" themeTemplate=""&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;            document.write('&amp;lt;a target="_top" href="&lt;span style="color: rgb(102, 0, 204);"&gt;&amp;lt;% wpsURL.write(out); %&amp;gt;&lt;/span&gt;"&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;          &amp;lt;/portal-navigation:urlGeneration&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;        &amp;lt;% } %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;          document.write("&amp;lt;c:out value='${topNavItemTitle}' escapeXml='true' /&amp;gt;");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;          document.write("&amp;lt;/a&amp;gt;");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;          document.write("&amp;lt;/li&amp;gt;");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;      &amp;lt;% } else {  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;      //---------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;      // generate the markup to render unselected pages&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;      //---------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;      %&amp;gt;  &lt;/span&gt;   &lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write('&amp;lt;li&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;        &amp;lt;portal-navigation:urlGeneration contentNode="&lt;/span&gt;&lt;span style="color: rgb(102, 0, 204);"&gt;&amp;lt;%=currentPageID%&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;" forceAbsolute="true" themeTemplate=""&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;          document.write('&amp;lt;a target="_top" href="&lt;span style="color: rgb(102, 0, 204);"&gt;&amp;lt;% wpsURL.write(out); %&amp;gt;&lt;/span&gt;"&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;        &amp;lt;/portal-navigation:urlGeneration&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;        &amp;lt;c:set var="pageTitle" &amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;          &amp;lt;portal-fmt:title /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;        &amp;lt;/c:set&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write('&lt;span style="color: rgb(51, 153, 153);"&gt;&amp;lt;c:out value='${topNavItemTitle}' escapeXml='true' /&amp;gt;&lt;/span&gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write('&amp;lt;/a&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;        document.write('&amp;lt;/li&amp;gt;');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 204);"  &gt;      &amp;lt;% } %&amp;gt;  &lt;/span&gt;   &lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;      &amp;lt;/portal-navigation:navigationLoop&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"    &gt;      document.write("&amp;lt;/ul&amp;gt;");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;    &amp;lt;/portal-navigation:navigation&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;  &amp;lt;/portal-logic:if&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);" &gt;&amp;lt;/c:if&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold; font-size:160%"&gt;Known limitations&lt;/span&gt;&lt;br /&gt;The code samples posted here always generate a double-top and sidebar navigation. It does not check if enough navigational levels exist. Furthermore this WAI theme ignores any theme policies. So its not capable anymore to only generate a double navigation without sidebar or a single-top navigation.&lt;br /&gt;&lt;br /&gt;Second, as described before, this code sample are based on a customized theme. In order to make it work with another theme, the CSS style classes and the structure of the HTML code need to be revised.&lt;br /&gt;&lt;br /&gt;The code samples are from a PoC, its no production code, but maybe a good starting point.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-737481287942389?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/Advmy_GqPS0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/737481287942389/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=737481287942389" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/737481287942389?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/737481287942389?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/Advmy_GqPS0/advanced-lotus-connections_15.html" title="Advanced Lotus Connections customization - pt.2 - Sidebar Navigation with the WebAppIntegrator" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_g4uPeL8w4fM/SUaBqInPLoI/AAAAAAAAAHA/lk2sch6WzBo/s72-c/PageModelGeneral.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2008/12/advanced-lotus-connections_15.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4GR347fyp7ImA9WxRaEEw.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-2794710371992887213</id><published>2008-12-11T19:08:00.001+01:00</published><updated>2008-12-11T19:08:46.007+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-11T19:08:46.007+01:00</app:edited><title>I don't like travelling by train</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;For this weekend's roundtrip I started in Zurich with a train (InterCity Express - ICE, german "high-speed" train) to Stuttgart. And it really pissed me off. Ok, the advantages of train is, you can do something during travelling. This is true if you don't get sick. Unfortunately I belong the the group that gets, especially in high-speed trains that tilt in the curves. So no effective working during the travel. Then the air conditioning in the train. It starts with a summer-like t-shirt temperature and dropped during the 3h trip to temperatures where I almost had to put my jacket on - over the pullover. And on top of all: this train stops on every single tiny city on the road. In this 3hr trip over 200km the train stopped 7times in between. 7 times! for a handfull of people to get in. That makes an average distance of less than 30km between a stop. A plane from Zurich to Hamburg doesn't land on each airport on the way, does it? This is no high-speed train, this is an annoyance! &lt;br/&gt;When I travel by car, it takes a bit more that 2hr for the same distance and costs the same - all supplemental costs included&lt;br/&gt;&lt;br/&gt;Don't get me wrong, I think public transport is important and make ecological and economical sense. But very often I don't have the feeling the German public transportation follows the right approach. From my (and I think for a lot of other clients) perspective its slower, more expensive and less comfortable than a car. So car or plane are in most cases the most reasonable choice - from a customer perspective, although both are the worst choices considering the environement.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-2794710371992887213?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/DUNFsgcVPPA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/2794710371992887213/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=2794710371992887213" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/2794710371992887213?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/2794710371992887213?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/DUNFsgcVPPA/i-don-like-travelling-by-train.html" title="I don&amp;#39;t like travelling by train" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2008/12/i-don-like-travelling-by-train.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMMQH0ycCp7ImA9WxRbGEk.&quot;"><id>tag:blogger.com,1999:blog-457071854377599320.post-4345795445928366551</id><published>2008-12-09T19:23:00.005+01:00</published><updated>2008-12-09T19:31:21.398+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-09T19:31:21.398+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lotus Connections" /><category scheme="http://www.blogger.com/atom/ns#" term="customization" /><category scheme="http://www.blogger.com/atom/ns#" term="WebAppIntegrator" /><category scheme="http://www.blogger.com/atom/ns#" term="sidebar" /><category scheme="http://www.blogger.com/atom/ns#" term="navigation" /><title>Advanced Lotus Connections customization - pt.1</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span style="font-family:sans-serif;"&gt;In this blog-post-series I'd like to describe, how we achieved to integrate Lotus Connections into WebSphere Portal using the Web Application Integrator.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:sans-serif;"&gt;It will consist of three parts.&lt;br /&gt;&lt;br /&gt;The first - this one - will provide a general overview of the solution and a little background information about the WAI and the Portal awareness.&lt;br /&gt;The second one will the describe the modifications we had to apply on the WAI to achieve the double-top and sidebar-navigation.&lt;br /&gt;The third part will describe how we integrated the WAI into Lotus Connections and how we made Lotus Connections Portal-aware.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:sans-serif;"&gt;After completion, all three parts will also be made available on Cattail or Quickr.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;br /&gt;The intension was, to integrate Lotus Connections seamlessly into an existing Portal look&amp;amp;feel using the Web Application Integrator. The requirements were:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:sans-serif;"&gt;One Portal URL page for each Connections feature&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:sans-serif;"&gt;All feature URL pages underneath a single Lotus Connections page&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:sans-serif;"&gt;The Lotus Connections page underneath a Collaboration page&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:sans-serif;"&gt;The Collaboration page as top-level page under Portal Home page&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:sans-serif;"&gt;The double-top navigation and the sidebar navigation should always be visible&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:sans-serif;"&gt;When accessing Lotus Connections outside of Portal, no Portal navigation should be shown but the default Lotus Connections top-bar navigation.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:sans-serif;"&gt;The starting point was, that the WebAppIntegrator officially only supports single-bar top navigation and that the Portal awareness is described as advanced topic in the WebAppIntegrator in General.&lt;br /&gt;The customization consists of two steps&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:sans-serif;"&gt;Extending the WebAppIntegrator to support multiple navigation hierarchies&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:sans-serif;"&gt;Integrate the WebAppIntegrator into Lotus Connections and make the navigation Portal Aware&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family:sans-serif;"&gt;The article describes, how the solution was implemented, what has to be modified and which problems came up during the customization. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:sans-serif;"&gt;&lt;br /&gt;&lt;b&gt;Web Application Integrator&lt;br /&gt;&lt;/b&gt;The Web Application Integrator (WAI) is a solution for WebSphere Portal that allows the integration of external web applications into a Portal Look&amp;amp;Feel.&lt;br /&gt;Basically, the WAI does not help to integrate applications physically into the Portal, instead it exports the Portal Look&amp;amp;Feel and Navigation to the web application and thus achieves a visual integration of the web application.&lt;br /&gt;&lt;br /&gt;The Portal Look&amp;amp;Feel is injected into the web applications UI using javascript, which means the integration is done at runtime, on client side, during the render process in the browser.&lt;br /&gt;&lt;br /&gt;In order to deliver the correct navigational state of the portal, the web application refers to a page in the Portal content model for which the navigation is rendered. In order to address this page, a URL is generated using the Web Application Integrator Portlet.&lt;br /&gt;&lt;br /&gt;To have access to the theme content that should be displayed, the theme that should be used have to be enabled for the WAI. This is described in the WAI documentation. The standard IBM Portal theme is already enabled for being used with the WAI. However, this enablement only supports a single top-bar navigation.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:sans-serif;"&gt;&lt;b&gt;How the Web Application Integrator works&lt;br /&gt;&lt;/b&gt;A detailed description how the WAI works can be found in its documentation. But this section focuses on how it works inside the browser, especially how the HTML code looks like that is generated.&lt;br /&gt;&lt;br /&gt;Regarding the visual display of the WAI, the WAI seems only to integrate at the WebUI’s top position as shown in the picture. With a little HTML background, such things are easy to implement by simply injecting the entire code surrounded by a div block as very first element inside the body element.&lt;br /&gt;But the WAI works slightly different, since it wraps around the content respectively the application, providing closing html elements below the applications content area.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_g4uPeL8w4fM/ST64jelZCmI/AAAAAAAAAGw/7DLpwyXA0DU/s1600-h/wai_basics.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 137px;" src="http://3.bp.blogspot.com/_g4uPeL8w4fM/ST64jelZCmI/AAAAAAAAAGw/7DLpwyXA0DU/s320/wai_basics.png" alt="" id="BLOGGER_PHOTO_ID_5277858732969626210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Taking this into account makes it easy to put the content into a table cell instead of a div block, which is a prerequisite for applying a sidebar navigation. The top navigation is placed inside a table row. This is depicted in the next image.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_g4uPeL8w4fM/ST64vHjuRbI/AAAAAAAAAG4/u4l_TGMkmHw/s1600-h/wai_table_layout.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 189px;" src="http://3.bp.blogspot.com/_g4uPeL8w4fM/ST64vHjuRbI/AAAAAAAAAG4/u4l_TGMkmHw/s320/wai_table_layout.png" alt="" id="BLOGGER_PHOTO_ID_5277858932947043762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;An alternative to this layout would also be to place the top navigation in a div block and the table with a single row and two cells containing the sidebar and the content area.&lt;br /&gt;Deploying a different page structure is done in the webappintegrator/ files of the theme and consists basically of defining the opening tags.&lt;br /&gt;How the navigation page structure is generated is described in the chapter Extending the WebAppIntegrator.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Portal Awareness&lt;/b&gt;&lt;br /&gt;Portal aware means that the application is aware if it runs visually inside the Portal or outside of this. In other words, elements of the application are hidden or shown depending from the user has navigated to the application.&lt;br /&gt;&lt;br /&gt;The basic principle how this is achieved is described in the Advanced Topics section of the WAI and is simply realized by appending a parameter to the URLs of the URL pages that are created in Portal. The customized application checks if the parameter is existent and shows or hides content accordingly. In order to keep this information while clicking through the application without modifying each link, a simple session cookie is set and the application just checks if the parameter exists in the request or as a cookie.&lt;br /&gt;&lt;br /&gt;Unfortunately each module of Lotus Connection works differently and the sample code of the WAI documentation can’t be used. Furthermore, since each module is structured differently, a unique solution for almost every single module needs to be applied. How this is done is decribed in chapter Portal Awareness in Lotus Connections.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/457071854377599320-4345795445928366551?l=whoopdicity.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Whoopdicity/~4/JNRgy2tGbXk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://whoopdicity.blogspot.com/feeds/4345795445928366551/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=457071854377599320&amp;postID=4345795445928366551" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/4345795445928366551?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/457071854377599320/posts/default/4345795445928366551?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Whoopdicity/~3/JNRgy2tGbXk/advanced-lotus-connections.html" title="Advanced Lotus Connections customization - pt.1" /><author><name>G.Muecke</name><uri>http://www.blogger.com/profile/09897975984597806156</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_g4uPeL8w4fM/ST64jelZCmI/AAAAAAAAAGw/7DLpwyXA0DU/s72-c/wai_basics.png" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://whoopdicity.blogspot.com/2008/12/advanced-lotus-connections.html</feedburner:origLink></entry></feed>

