Tuesday, March 29, 2011

How To Get The Latest Social Media Counts

View Comments

While in Argentina, Marcelo showed this cool dynamic infographic that shows you the latest social media counts in "real-time", in the last day, last week, last month or last year.

Unfortunately, I found out about it after my Social Business presentation. I think it would've been nice to show this to the audience so they get a sense, again in real-time, as to the massive amounts of activities that are going on in the different social networks out there.

There's also an iPad app you can try and download: http://itunes.apple.com/us/app/social-media-counts/id392861163?mt=8%20# . You can read more about it here. It looks like this was made available back in January, but I just stumbled upon it. I think I missed it in all the Lotusphere #ls11 rush.

Monday, March 28, 2011

Improved Quickr Documentation Now Online

View Comments

Recently, I've been working very closely with the development team to improve the documentation available around Quickr. As a practitioner just before taking on this role I had some ideas on how to improve the documentation. To that end, I met with various customers and business partners at Lotusphere '11 #ls11 and asked for feedback on how to improve the documentation. Today, I'm glad to announce that we have several new documents out there that you may want to check out.

First, there's a new step-by-step guide on how to deploy Quickr. The Quickr 8.5.1 server installation and basic configuration document gives you everything you need along with screenshots to start from 0 and get something up and running as quickly as possible. So if you are new to the Domino world or to Quickr, this document is certainly the one for you. Or if you are thinking of doing a Show-N'-Tell session at Lotusphere, then this is a good one to take screenshots from.

Second, I've asked the team to create a document that outlines the Best Practices for File and Page Migration From Quickr 8.2 to Quickr 8.5. This is in response to feedback that I heard not only at Lotusphere but based on the discussions going on in the Quickr Forum. Hopefully, this will help everyone who's planning a migration from Quickr Domino 8.2 to Quickr Domino 8.5.

Next, the Performance Tuning Guide for Quickr Domino 8.5 has also been made available. This guide should have everything you need to ensure that your server responds as fast as possible.

Fourth, it's now easier to see which languages are supported by Quickr Domino. To see the list of all 28 languages into which we have translated the product, check out the Selecting a different language document.

Finally, the API documentation for Quickr Domino has been updated. I've asked the development team to provide more examples and more documentation on how to use these services so we can get even more developers creating cool stuff for Quickr. Right now, phase 1 of this documentation update and there are 3 more phases which you will see rolled out in the coming days.

And there's one more thing... We are also working on creating a document that outlines the Best Practices for Customizing Quickr Domino. This document should be available very soon. It will contain a lot of examples of customizations that you can do and where you should do these customizations so as you upgrade to future releases of Quickr, you don't have to re-do a lot of the work.

Hope these new documents make your lifes easier and if there's anything else you would like to see, let me know in the comments below.

Tuesday, March 22, 2011

How To Customize the CKEditor in Quickr for Domino

View Comments

Last week I was asked how to customize the rich text editor that's embedded in Quickr for Domino. For those of you who don't know, the rich text editor included in Quickr for Domino is CKEditor.

So back to the task at hand. The request that I got was how to add the HTML source view to the rich text editor. The HTML source view allows someone with HTML knowledge to go in and customize the HTML or even used advanced HTML code to add more advanced content to the page.

I remember that I'd seen this tip out somewhere so I reached out to the social web. I eventually found out that the tip was shared in the Skype Quickr chat. This is a group chat of IBMers, business partners and customers who are all interested in Quickr. I believe the chat was initiated by Stuart McIntyre who also runs the Quickr Blog.

In the chat I found my answer and I figured I would share it with you in case you ever need something similar.

To add the Flash toolbar button to insert movies into the rich text editor:

Make the following change to this file:

data\domino\html\qphtml\html\common\qrdconfig.js

in Line 111 change from:

['Image', 'Table','Link','Smiley'],

to

['Image', 'Flash', 'Table','Link','Smiley'],

To add the HTML source view into the rich text editor:

in Line 119 change from:

['HorizontalRule', 'SpecialChar', 'Blockquote','Anchor']

to

['HorizontalRule', 'SpecialChar', 'Blockquote','Anchor', 'Source']

An Alternate Method

The method above has one difficulty... it must be re-applied every time you install a fixpack. Rob Novak has shared with us an alternate approach that won't get overwritten each time you install a fixpack:

-=-=-=-=-=-=-=-

Here's how to do this without being susceptible to fixpack overwrites. Quickr Domino, being based on Dojo 1.3.2 and using widgets to render itself, now has a widget registry that is extensible. You can modify a file called widgetRegistryConfig_ext.js in order to instruct Quickr to use alternate widgets. So instead of changing the qrdconfig.js one directly, you can modify this file and tell it to use your own.

The easiest way to do this is to find the widgetRegistryConfig_ext.js file which is initially empty and located in:

data\domino\html\qphtml\widgets\resources\

Then, make a copy of the above referenced qrdconfig.js in another location relative to the html directory, such as:

data\domino\html\snapps\

Make the modifications to the COPY of the file you just made as indicated in your post - not the original.

Next, we need a controller to tell it to load our copy, so we copy over the file:

data\domino\html\qphtml\widgets\page\field\ckRichText.js

Into our new directory structure:

data\domino\html\snapps\widgets\page\field\chRichText.js

How do we override it? By using Dojo's provide-require-declare methodology (long subject) in our copy of this file. Near the top, just before the renderedit: function() we add the following:


dojo.provide("snapps.widgets.page.field.ckRichText");

dojo.require("quickr.widgets.page.field._ckRichText");

dojo.declare("snapps.widgets.page.field._ckRichText", [quickr.widgets.page.field._ckRichText],

Then the rest of the code remains standard until the end where we add the following:

dojo.declare("snapps.widgets.page.field.ckRichText",
[snapps.widgets.page.field._ckRichText],
{


}
);


So now we've told Quickr to a) use our ckEditor.js file, and b) consume our qrdconfig.js file, all we have left is to tell the widget registry it all exists. So we use the widget registry to force it to load the copy whenever it encounters the instruction to load the original. Add the following code to widgetRegistryConfig_ext.js (remember it was blank before):

{
registerWidgets: [
{
type: 'REGISTERMODULEPATH',
name: "snapps",
path: "/snapps"
},
{
type: 'GLOBALREPLACE',
source: "quickr.widgets.page.field.ckRichText",
use: "snapps.widgets.page.field.ckRichText"
}
]
}

The GLOBALREPLACE type is what does all the magic.

Interestingly, a module path can be an actual path (like the \snapps one we added under html) or it can even be a Domino database to make widgets portable and replicable over clusters

-=-=-=-=-

Enjoy!

Monday, March 21, 2011

How To Build a Status Update application for Facebook, Twitter and Connections using Portlet Factory

View Comments

Because I've shared so many Connections coding tips and how-to's, I'm often asked to help provide some guidance on how to create an application from scratch that integrates Connections with product X.

This video came to my attention last week and it's pretty cool. It starts with a demo of what the application is (a portlet that can simultaneously update your status in Connections, Twitter and Facebook, if enabled by the end user).

There are several things that really stand out in this demo. First, I really liked how the video shows that you can use the standard Java library provided by Twitter. Second, the demo shows how this same application looks like from an iPhone (or any mobile device) with no additional coding. The only thing that had to happen was to add the 'mobile theme' in portlet factory and voilá.

Enjoy!

Friday, March 18, 2011

Evangelizing Social Software in Argentina

View Comments

This has been an amazing week in Argentina. I got in on Tuesday morning after taking the red eye in. On Tuesday, I had several customer meetings that went very well. They asked about where other customers are seeing value in social software and potential ROI.

I also got a chance to meet a bunch of IBMers from Argentina from various places within IBM: Sales, Services, Hardware, Software, etc. They all came in to a BlueIQ session where I presented the value of social software from my perspective as an IBMer and the value they can get from social software. I even talked about how to grow their careers at IBM using social software.

For those of you who don't know, the BlueIQ program at IBM aims to create ambassadors in every area of IBM to help evangelize the value of social software. With their help, the program aims to get as many IBMers as possible using social software to collaborate and make their lives easier (using Connections, of course).

Here's the presentation that I used:

Wednesday I had more customer visits and they also wanted to more about referenceable customers and ROI. I shared some of the success stories that IBM customers have shared with the world. Thursday was a lot of fun because it was the IBM Software Solutions Forum. Think of it as Lotusphere, but with all the brands mixed in. I got tasked to do the collaboration keynote. The session was titled "Smarter Collaboration: Anytime, Anywhere through portals, social, and mobile". I've also shared the presentation and you can find it here (though the demo is not included):

After the event was done, it was time to pack up and head back home. There was some bad planning on my part because Thursday was St. Patrick's Day and it turns out there was going to be a huge street party that I had to miss. In all, it was a great trip. Argentina, let me know when you need me back

Wednesday, March 16, 2011

Quickr Customers: I Need Your Feedback

View Comments

As we continue to finalize plans for the next release of Quickr, we want to make sure that we are listening to all of our customers and deliver the best product that meets the demands of our customers and beats our competition. To that end, I've created a survey to quickly gather feedback from all of our customers.

Between now and March 25th, I would like to request ~8 minutes of your time to go through and answer some quick questions. This survey will help us understand how our customers are using Quickr.

Also, while I have your attention, I also wanted to let you know of a webcast that's available which covers our strategy for integrating ECM and Collaboration. If you haven't seen it yet, here's the replay:


To access the survey, please click here and log in with your IBM ID. I really really appreciate your time and support. And remember, please complete the survey today! (or by March 25th)


Monday, March 14, 2011

How To Add Lotus Connections Search to Portal Navigation

View Comments

I recently stumbled upon a quick interesting tip in one of our internal blogs which I thought would be extremely valuable to share externally. The tip documents how to embed the Lotus Connections search into the navigation for WebSphere Portal. And by looking at the code snippet below, this could also serve as a launching pad to embed Connections search into other pages regardless of the technology behind them.

So here's our goal:


The following code snippet was added into the Portal JSPs:
<%-- Renders the search widget in the banner --%>
<div class="lotusSearchContainer">
<div id="themeSearchBoxContainer" class="wptheme-searchBoxContainer">
<div id="themeSearchBox"></div>
</div>

<script type="text/javascript">
dojo.addOnLoad(function() {
var c = {};
c.connectionsUrl = "${wp.themeConfig['resources.urls.connections_base']}";
c.proxiedConnectionsUrl = "${wp.themeConfig['resources.urls.connections_base.proxied']}";

dojo.registerModulePath("lconn.core.SearchBar", c.proxiedConnectionsUrl
+ "/homepage/script/lconn/core/SearchBar");
dojo.registerModulePath("lconn.core.TextBox", c.proxiedConnectionsUrl + "/homepage/script/lconn/core/TextBox")
dojo.require("lconn.core.TextBox");
dojo.require("lconn.core.SearchBar");

var fileref = document.createElement("link");
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", c.proxiedConnectionsUrl + "/homepage/nav/lconn/styles/sprite-lconn.css");
document.getElementsByTagName("head")[0].appendChild(fileref);

var searchBar = new lconn.core.SearchBar(
{
globalOptions : [ {
label : "Activities",
feature : "activities"
}, {
label : "Blogs",
feature : "blogs"
}, {
label : "Bookmarks",
feature : "dogear"
}, {
label : "Communities",
feature : "communities"
}, {
label : "Files",
feature : "files"
}, {
label : "Forums",
feature : "forums"
}, {
label : "Profiles",
feature : "profiles"
}, {
label : "Wikis",
feature : "wikis"
} ],
searchContextPath : c.connectionsUrl + "/search",
lblSearch : "Search",
lblSelectScope : "",
lblAllConnections : "All Connections",
lblAdvanced : "Advanced",
_blankGif : c.proxiedConnectionsUrl
+ "/homepage/static/20101018.200549/nav/common/styles/images/blank.gif",
onSubmit : function() {
return true;
}
}, dojo.byId("themeSearchBox"));
});
</script></div>


In this case, c.connectionsUrl and c.connectionsUrlProxied point to the absolute URL of the connections server and the same but proxied through the WPS AJAX proxy. We generate the values of these at JSP execution time from a config variable in WAS admin console, but of course you can hard-code these if you wish. In our case the URLs look something like this:

c.connectionsUrl = "http://connections.company.com"
c.connectionsUrlProxied = "/wps/proxy/http/connections.company.com"

Thanks to the guys at ISSL for doing this.

Thursday, March 10, 2011

Controlling Emails Sent by Lotus Connections

View Comments
I’ve heard several times the need to customize or control how emails are sent by Lotus Connections. In one example, there was a need to blacklist certain users so that they wouldn’t receive an email notification.

The general pattern for influencing how emails may be delivered is to override the default SMTP transport with your own version that inspects the message and makes any modifications before it is sent ( you can modify the actual message, the recipients that it's going to be sent to, etc). In this instance, the transport would look at all the recipient email addresses and remove any blacklisted ones. How it determines what is blacklisted could be done in any number of ways (e.g. members of a community, an LDAP group, a CSV file, etc).

Here is a skeleton of the overridden transport class:
package example.smtp.transport;


import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.SendFailedException;
import javax.mail.Session;
import javax.mail.URLName;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import com.sun.mail.smtp.SMTPTransport;


public class ExampleSMTPTransport
extends SMTPTransport {


public EESMTPTransport(Session session, URLName urlName) {


super(session, urlName);
 }


/**
 * Override the default sendMessage so that we can modify the outgoing
 * email message as we need.
 *
 */
 @Override
 public synchronized void sendMessage(Message message, Address[] recipients)
   throws MessagingException, SendFailedException {
   // Modify the message here…
   // This will send it
   super.sendMessage(message, recipients);
 }
}

So how do we get this installed? Here's the general process:
  1. Update the following file with the name of your overriden transport class
  2. Add the file to the /lib directory on all nodes
  3. Create a javamail.providers file in /java/jre/lib . The file should contain a single line: "protocol=smtp; type=transport; class=example.smtp.transport.ExampleSMTPTransport" (without quotes)
  4. In the WAS admin console go to Resources -> Mail -> Mail Providers -> Built-in Mail Provider (Cell scope, first one) -> Protocol providers -> smtp
  5. Change the Class name to the name of your transport class e.g. example.smtp.transport.ExampleSMTPTransport
  6. Click OK, Save changes, sync nodes, restart all servers
Enjoy!

Friday, March 4, 2011

Want to be a Social Business? Empower Your Employees!

View Comments

Yesterday, I was invited to do a quick presentation to an internal group of IBMers on why I blog and the value that I've received from blogging at IBM. I was limited to just 10 minutes, so I had to do something that was sweet, short, and to the point. There are so many stories that I've told before that it was hard to pick something that could be impactful.

I think I first fell "in love" with blogs when an amazing connection happened while at a customer site. You see, I was trying to get some integration going, but couldn't make it work. A colleague that happened to be working at the same customer, saw the blog entry and helped me get it done the next day! You can see the whole story here or check out this video:

Another of my favorite stories about blogs, was when I got to know Alan Lepofsky through one of my blog entries. The story is all about how blogs help me gain knowledge and just share knowledge. You can see that story here. I'm also a big believer that blogs can even help you grow your career. John Pape agrees and he has created a great post on 5 Ways Blogging Can Help Your Career.

So I decided to take an approach where I mention how I started (I started as an anonymous blogger back in '06) and the barrier of entry I faced. I've mentioned this before, so you may know that I **was** a firm believer of knowledge is power (more on this later). From there, I transitioned and told the story of how I was a consultant at the same time doing the very same thing that George Clooney does in Up In The Air. This helped me describe my pain point: disorganized, too many emails, too many things going on, etc... I believe that's a pain point that a lot of people can relate to.

It's no secret that IBM has empowered its employees to blog and use other social media tools. To me, blogs have resulted in tremendous benefits such as reduced email, increased productivity, career growth and more (slide 6). To IBM, there have been even more amazing benefits (slide 7). So far, I've tracked more than $6 million in closed sales opportunities thanks to my blog!

What I've come to realize is that Knowledge is not Power, but rather Knowledge Shared Is Power. In fact, I even found a site which gives the mathematical formula to show you this is true. Using all those data points together, I created this presentation which is perfect for 10 minutes.

Why I Blog At IBM
View more presentations from Luis Benitez.

I think it's clear that empowering your employees is key to becoming a Social Business, which is exactly what I talked about in the previous blog entry.

I would like to know... why do **you** blog?

Tuesday, March 1, 2011

What does Social Business mean?

View Comments

There's been tons of buzz around social business, social media, social marketing, social software, Web2.0 for Business, Enterprise 2.0, and all the other keywords out there. Is it a fad? No. It's here to stay and it's here to transform organizations. Ok. So now you say: "Transform organizations... that sounds nice, but ..." Aha! I know what you are going to ask me: "What's the real business value behind it?" You are probably concerned that "Social Business" just means bringing a Facebook-like tool into your enterprise where your employees are going to do what? Play games? Post photos of that party? Share videos about cats (or other cute animals)? Note: I'm not a cat person, but cats do seem to be popular out there.

IBM's Vice President for Social Business & Lotus Sales and Evangelism, Sandy Carter, sums it up well. A Social Business:

  1. embraces networks of people - It's not about B2B or B2C. It's about P2P (person-to-person) to create business value.
  2. is engaged and has conversations online with its customers, employees, suppliers and embraces
  3. is transparent and is ready to be open to ideas and capitalize on those
  4. removes boundaries both inside and outside so that your people reflect your brand
  5. is nimble because they are engaged and transparent (see #2 and #3 above) and can make quicker business decisions

These characteristics lead to accelerated innovation and stronger business results and are reflective of standout organizations in their respective industries.

By now, you've attended Lotusphere 2011 #ls11 or maybe even watched the live replays of the keynotes. And after watching the video above you are now convinced that you must become a Social Business. But how do you go about doing that? Sandy Carter had a great session at Lotusphere which explained this. Sandy created a framework called the Social Business Agenda: a 6-step process on the steps you need to take to become a Social Business. Of course, the 3 minute video doesn't do justice to her 1 hour presentation at Lotusphere, but it's a great introduction into the concepts.

If you want to learn more, Sandy Carter is going to be hosting a webcast this Thursday March 3rd, 2011 along with Jeremiah Owyang from Altimeter Group. The webcast is titled Why Be Social? If you are not following Jeremiah Owyang, I strongly encourage you to do so. He always has insightful information he's sharing in his blog. To register for this week's webcast, click here.

I would also like to know, do you think there's anything missing in her plan?