Pages

Monday, January 12, 2009

Twitter for business ... or how to prevent your partner calling you during a speech

Several times colleagues are asking me, what the use of Twitter is or why they should do it as well. Well, what twitter is, is captured  pretty good in this video: Twitter in plain English. But that possibly does not capture their business case. But maybe this blog entry can give some more uses.

But how can twitter - or microblogging in general - can help employees doing a better job?

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.
And here are several ways I benefit from Twitter.

1. Build up a follower network.
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.

2. Subscribe to search-feeds.
Use the search feature 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 Lotus Connections search feed.

3. Use hashtags.
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 hashtags.org. The effect is similar to the search feed, though the search feed may produce more "false hits".

4. Retweet
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).

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.

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 just read your post, they maybe won't call you in inappropriate situations any longer ;)

Sunday, January 11, 2009

My personal world tour 2009, don't miss a show!

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.

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 Dublin. 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 London where I'll spent the Eastern weekend before returning back to Zurich. 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.

Next trip will be a weekend trip to Prague 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.

Already a week later, I found a really cheap flight to Hamburg (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 Stockholm 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 Riga 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.

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.

For the Pentecost weekend I have no plans so far, but maybe I'll spent the weekend in Amsterdam. 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 Rome or Athens, I'll see.

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 Stanford 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 :)

In the end of July, I will head north again up to a small village north of Hamburg for the Wacken Open Air 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".

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.

And these two I will use to visit again a friend who lives in Vienna, where we also plan to take over to Bratislava, 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.

After all these trips, the cold time of year will begin a again, which I consider totally as best time for working.

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 :)
For contacting you could use several channels, via comments on this blog, email me, send me a message on Twitter or in Facebook.

Friday, January 9, 2009

Integrating Lotus Quickr into Connections

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.

Activities
How Activities need to be configured, is described in the Infocenter, here. 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.
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.
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 HTTPS. 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 here) the proxy was running on. That was all.

Communities
Different from Activities, the integration of Quickr into Communities requires some more steps. Therefor you need to download the Lotus Connections Connector for Lotus Quickr, and follow the installation instructions. That was straightforward, but it did not work with our setup, unfortunately.
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.
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 http://quickr.demolab.com/myqcs/rest/places/feed 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 instructions in the InfoCenter to port 10038, the integration worked perfectly... and btw. is pretty cool :)

Tuesday, January 6, 2009

Creating PNG images of Diagrams in RSA 7.5.1 fails due to "negative width"

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.

Therefor I selected "Select all connectors" and switched to the Appearence-Tab in the Properties view and selected a width in the line-width drop down menu.

After that, I was able again to export my old diagrams to PNG :)

Sunday, January 4, 2009

No good intentions for 2009, but goals!

After the recap of the last year, 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 :)

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 Management by Objectives 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 :)

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 GanttProject, which totally matches my needs.

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.

Ok, how did I structure my goals?
At first, I categorized them into the five main categories: Health, Job&Career, Soul&Wellness, Brain, Money.
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.
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 :)

So here are 6 of my 7 top goals
  • Loose at least 6kg down to 82kg, or better 8kg down to 80kg
  • Drink less alcohol (at most on 2 days/month, with no more than 5 Beers/day, only exception is the Wacken festival :)
  • Accomplish the IT Specialist Certification Level 1
  • Certify for Lotus Connection Admin
  • Improve my French skills by working through the self-learning material I have, or better: perform the B1 telc certification 
  • Save a certain amount of money (I won't tell you how much ;)
Some other goals are
  • Do sports regularly (3 days/week and 4hrs/week)
  • Some travel targets for vacation (USA, some weekend city trips in Europe)
  • Improve my Russian skills (and possibly certify, same as for French, but French is more important)
  • Learn Italian (at least a bit)
  • Read several books (planned 5 until end of September)
Thats quite some stuff to work on, but the year has yet begun!
Lets go!

2008 a recap

Although 2008 already ended, its never to late to look back a little and recapitulate.

For me personally, for my family and for some of my friends, the last year was full of movement, literally inf figuratively.
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.

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.

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.

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.

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.

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.

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 feels right.

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 ;)

2009, here I come!

Saturday, December 20, 2008

Advanced Lotus Connections customization - pt.3 - Portal Awareness

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.

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).







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.

Main Idea

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.
The principle is the same for every feature and depicted in the following diagram.

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.

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.



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.

The following diagram depicts the decision flow for the render process inside the browser.



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.

Realization

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.

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:


<script type="text/javascript">
if(testCookieForFromPortal()) {
document.getElementById("lotusBanner").style.display = "none";
}
</script>


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:


<script type="text/javascript">
if (("<c:out value='${param.FromPortal}'/>" != "true") && !testCookieForFromPortal()) { }
else {
// if we get here, we have come from Portal, set a cookie
document.cookie="FromPortal=true";
}
function testCookieForFromPortal() {
if (getCookieValue("FromPortal") == "true")
{ return true; }
else
{ return false; }
}
function getCookieValue(cookieName) {
var retVal = "";
var i = document.cookie.indexOf(cookieName);
if (i != -1) {
var iVal = i + cookieName.length + 1;
var j = document.cookie.indexOf(";", iVal);
if (j != -1) {
retVal = document.cookie.substring(iVal,j);
}
}
return retVal;
}
</script>


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.

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.

The following sections contain descriptions for every feature how to apply the dynamic Portal aware behaviour.

Activities, Communities and Profiles

Instead of the snippet provided by the WAI portlet, apply the following snippet and replace $$URL$$ with the URL of the generated snippet:

<!-- BEGIN PORTAL NAVIGATION INTEGRATION -->
<c:if test="${param.FromPortal=='true' || sessionScope.FromPortal=='true'}" >
<script type="text/javascript" src="$URL$}"></script>
</c:if>
<c:if test="${sessionScope.FromPortal!='true'}" >
<c:set var="FromPortal" value="${param.FromPortal}" scope="session" />
</c:if>
<!-- END PORTAL NAVIGATION INTEGRATION -->


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.

Modify the URL of the URL page in Portal that links to Connections Activities to:

https://<activities-server>/<activities-context-root>/service/html/mainpage?FromPortal=true


Modify the URL of the URL page in Portal that links to Connections Communities to:

https://<communities-server>/<communities-context-root>/service/html/allcommunities?FromPortal=true


Modify the URL of the URL page in Portal that links to Connections Profiles to:

https://<profiles-server>/<profiles-context-root>/home.do?FromPortal=true


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.

Homepage

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 <body> 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.

These statements are as follows, put them below the snippet for the WAI navigation:

<jsp:include page='pageHeader.jspf' flush="true" />
<jsp:include page='menuBar.jspf' flush="true" />


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:


<!-- BEGIN PORTAL NAVIGATION INTEGRATION -->
<c:if test="${param.FromPortal=='true' || sessionScope.FromPortal=='true'}" >
<script type="text/javascript" src="$URL$}"></script>
</c:if>
<c:if test="${sessionScope.FromPortal!='true'}" >
<c:set var="FromPortal" value="${param.FromPortal}" scope="session" />
</c:if>
<!-- END PORTAL NAVIGATION INTEGRATION -->


Modify the URL of the URL page in Portal that links to Connections Homepage to:
https://<homepage-server>/<homepage-context-root>/web/getuserpref?FromPortal=true


Dogear

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.

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.

<script type="text/javascript">
if(testCookieForFromPortal()) {
document.write('<scr');
document.write('ipt type="text/javascript" ');
document.write('src="$URL$"');
document.write('></scr');
document.write('ipt>');
}
</script>


Modify the URL of the URL page in Portal that links to Connections Dogear to:

https://<dogear-server>/<dogear-context-root>/?FromPortal=true


Blogs

Similar to Dogear, blogs does no support serverside session therefore the WAI inclusion script must be injected using the following code:

<script type="text/javascript">
if(testCookieForFromPortal()) {
document.write('<scr');
document.write('ipt type="text/javascript" ');
document.write('src="$URL$"');
document.write('></scr');
document.write('ipt>');
}
</script>


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.

But instead of the snippet for the Javascript functions described above, use the following snippet for the VTL.


<script type="text/javascript">

#if($model.getRequestParameter('FromPortal') == 'true')
document.cookie="FromPortal=true";
#else
if(testCookieForFromPortal()) {
document.cookie="FromPortal=true";
}
#end

function testCookieForFromPortal() {
if (getCookieValue("FromPortal") == "true") {
return true;
} else {
return false;
}
}
function getCookieValue(cookieName) {
var retVal = "";
var i = document.cookie.indexOf(cookieName);
if (i != -1) {
var iVal = i + cookieName.length + 1;
var j = document.cookie.indexOf(";", iVal);
if (j != -1)
{
retVal = document.cookie.substring(iVal,j);
}
}
return retVal;
}
// the themeTemplateURL variable should be set to the URL defined
// as the src attribute of the <script/> tag generated by the
// WebAppIntegrator portlet.

</script>


Modify the URL of the URL page in Portal that links to Connections Blogs to:
https://<blogs-server>/<blogs-context-root>/?FromPortal=true


Known Limitations

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

If the session cookie is still available but the LTPA token expired or is not available, no navigation shown

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.