I dug around in the Lotus Connections Profiles API to see if I could get a list of my contacts’ e-mail addresses. I fixed a small bug in the feed exporter of the Community Toolkit (w4.ibm.com/community for people in the IBM intranet) and exported my contacts, giving me a list of 530 IBMers who had accepted or sent me an invitation to connect.
Not everyone participates in that Web 2.0 network, though, so I wanted to analyze my sent mail to identify other people to whom I should send a note. I couldn’t find a neat LotusScript to do the job, and I couldn’t get the NSF to EML or mbox converter to work. Because I didn’t need all the information, just the recipients, subjects, and times, I wrote my own script (included at the end of this blog post).
I used the script to summarize the messages in my sent mail folder, and crunched the numbers using PivotTables in Microsoft Excel. I worked with monthly batches so that it was easier to find and fix errors. I decided to analyze all the mail going back to the beginning of last year in order to identify the people I mailed the most frequently, and to come up with some easy statistics as well.
Spiky around project starts/ends, I’d guess.
I wanted to see which roles I tended to e-mail often, so I categorized each recipient with their role. I distinguished between people I’d worked with directly on projects (coworkers) and people who worked with IBM but with whom I didn’t work on a project (colleagues). The numbers below count individual recipients.
Role |
Number of people |
Number of individual |
Average e-mails sent |
colleague | 407 | 827 | 2.0 |
coworker | 50 | 562 | 11.2 |
client | 21 | 387 | 18.4 |
manager | 4 | 109 | 27.3 |
partner | 9 | 51 | 5.7 |
system | 9 | 21 | 2.3 |
other | 8 | 11 | 1.4 |
self | 1 | 5 | 5.0 |
Grand Total | 509 | 1973 | 3.9 |
As it turns out, I sent a lot of mail to a lot of people throughout IBM, mostly in response to questions about Lotus Connections, Idea Labs, or collaboration tools.
Now I can sort my summarized data to see whom I e-mailed the most often, and add more names to my don’t-forget-to-say-goodbye list. If all goes well, I might even be able to use that mail merge script. =)
The following agent processes selected messages and creates a table with one row per recipient, e-mailing the results to the specified mail address. It seems to choke on calendar entries and other weird documents, but if you go through your sent mail box in batches (Search This View by date is handy), then you should be able to find and delete the offending entries.
Option Public Dim TempNitem As NotesItem Dim TempNm As NotesName Dim session As NotesSession Dim db As NotesDatabase Sub Initialize mailAddress = "YOUR_ADDRESS@HERE" Dim ws As New NotesUIWorkspace Dim uidoc As NotesUIDocument Dim partno As String Dim db As NotesDatabase Dim view As NotesView Dim doc As NotesDocument Dim collection As NotesDocumentCollection Dim memo As NotesDocument Dim body As NotesRichTextItem Dim range As NotesRichTextRange Dim count As Integer Set session = New NotesSession Set db = session.CurrentDatabase Set collection = db.UnprocessedDocuments Dim FldTitles(3) As String FldTitles(0) = "E-mail" FldTitles(1) = "Subject" FldTitles(2) = "Date sent" Set maildoc = db.CreateDocument maildoc.Form = "Memo" maildoc.Subject = "Summary" maildoc.SendTo = mailAddress Dim ritem As NotesRichTextItem Set ritem=New NotesRichTextItem(maildoc,"body") ' passing the rich text item & other relevant details Set ritem = CreateTable(FldTitles, collection, ritem, "Sent items", "Summary created on " + Format(Now, "YYYY-MM-DD")) maildoc.send(False) End Sub Function CreateTable(FldTitles As Variant, doccoll As NotesDocumentCollection, rtitem As NotesRichTextItem,msgTitle As String,msgBody As String ) As NotesRichTextItem 'http://searchdomino.techtarget.com/tip/0,289483,sid4_gci1254682_mem1,00.html 'Takes Documentcollection & creates tabular information on to the passed rtitem (rich text item) Set ritem=rtitem Set rtnav = ritem.CreateNavigator Set rstyle=session.CreateRichTextStyle '=================================================== 'heading in the body section of the mail rstyle.Bold=True rstyle.NotesColor=COLOR_RED rstyle.Underline=True rstyle.NotesFont=FONT_COURIER rstyle.FontSize=12 Call ritem.AppendStyle(rstyle) ritem.AppendText(msgTitle) rstyle.Underline=False rstyle.NotesColor=COLOR_BLACK ritem.AddNewline(2) rstyle.FontSize=10 rstyle.Bold=False rstyle.NotesColor=COLOR_BLACK Call ritem.AppendStyle(rstyle) ritem.AppendText(msgBody) ritem.AddNewline(1) '=================================================== rows=doccoll.Count +1 cols=CInt(UBound(FldTitles)) Call ritem.AppendTable(1, cols) Dim rtt As NotesRichTextTable Call rtnav.FindFirstElement(RTELEM_TYPE_TABLE) Set rtt = rtNav.GetElement '================================================= 'heading of the table rstyle.Bold=True rstyle.NotesColor=COLOR_BLUE rstyle.FontSize=10 Call ritem.AppendStyle(rstyle) For i=0 To UBound(FldTitles) - 1 Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL) Call ritem.BeginInsert(rtnav) Call ritem.AppendText(FldTitles(i)) Call ritem.EndInsert Next '================================================= rstyle.FontSize=10 rstyle.Bold=False rstyle.NotesColor=COLOR_BLACK Call ritem.AppendStyle(rstyle) Dim count As Integer count = 0 Set doc=doccoll.GetFirstDocument While Not (doc Is Nothing) subject = doc.GetFirstItem("Subject").values(0) posted = doc.GetFirstItem("PostedDate").values(0) Set sendTo = doc.getFirstItem("SendTo") For i = 0 To UBound(sendTo.values) Call rtt.AddRow(1) Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL) Call ritem.BeginInsert(rtnav) ritem.appendText(sendTo.values(i)) Call ritem.EndInsert Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL) Call ritem.BeginInsert(rtnav) ritem.appendText(subject) Call ritem.EndInsert Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL) Call ritem.BeginInsert(rtnav) ritem.appendText(posted) Call ritem.EndInsert Next count = count + 1 Set doc=doccoll.GetNextDocument(doc) Wend Set CreateTable=ritem MsgBox "E-mails summarized: " & count End Function
I find it helpful to save it as the "Summarize Recipients" agent and assign it to a toolbar button that runs @Command([RunAgent]; "Summarize Recipients").
]]>This was my first Lotusphere, and it was a blast. Lotus has such an active, passionate, experienced community around it. Heading to the conference, my goals were:
Here’s what I took away from the sessions and BoFs I attended:
Clients are interested in collaboration and have lots of adoption insights. We’re starting to see interesting case studies from clients. In addition to reporting excellent returns on their investments, clients shared qualitative feedback, such as stories of pilot groups who couldn’t imagine giving up the tools. Successful clients used executive support, communication plans, mentoring, metrics, incentives, role models, and other techniques to help people make new forms of collaboration part of the way people worked. sketchnotes from the birds-of-a-feather session on adoption
LotusLive is awesome. LotusLive currently includes web conferencing and parts of Lotus Connections. LotusLive Labs includes a technical preview of LotusLive Symphony (collaborative document/spreadsheet editing), Slide Library, and Event Maps. (I wish I’d seen Event Maps when I was planning my Lotusphere attendance!) Granted, Google Docs has been around for longer than LotusLive Symphony, but I’m curious about the ability to assign sections for editing or review.
Activity streams and embedded experiences are going to change the inbox. I don’t know when this is going to go into people’s everyday lives, but the idea of being able to act on items right from the notifications will be pretty cool – whether it’s in an enriched mail client like Lotus Notes or a web-based activity stream that might be filtered by different attention management algorithms. It’ll be interesting to figure out the security implications of this, though. It’s already a bad practice to click on links in e-mail right now, so full embedded transactions might encounter resistance or might open up new phishing holes. Project Vulcan is worth watching.
People are already doing interesting things with the Lotus Connections API. Embedding Lotus Connections content / interactions into other websites, adding more information to Lotus Connections, using different authentication mechanisms… people are rocking the API. The compliance API that’s coming soon will help people do even more with Lotus Connections interactions, too.
The next version of Lotus Connections will be even cooler. I’m particularly excited about the idea blogs and the forum improvements, which seem tailor-made for the kind of collective virtual brainstorming we’ve been doing in Idea Labs. Idea blogs are straightforward – a blog post or question with comments that can be voted up or down – but they’ll go a long way to enabling new use cases. Forums will also have question/answer/best answer support.
Sametime Unified Telephony rocks. I need to find out how to get into that. I like click-to-call ringing everyone’s preferred devices, easy teleconferences, and rules for determining phone forwarding.
Lotus Notes and Domino are getting even more powerful. XPages looks pretty cool. I’ll leave the rest of the commentary on this to other bloggers, as my work doesn’t focus enough on Lotus Notes and Domino for me to be able to give justice to the improvements.
The Lotus ecosystem is doing well. Lots of activity and investment from partners and clients.
Analytics + research = opportunity. Interesting research into attention management, activity streams, social network analysis.
Lotus geeks are a world of their own. It’s amazing to spend time with people who have immersed themselves deeply in a technology platform for almost two decades. There’s a depth and richness here that I don’t often find at technology conferences. There’s also a lot of tough love – people like IBM, and they’re not afraid to call us out if we’re not clear or if we seem to be making mistakes. =)
Notes from conversations
The hallway track (those informal encounters and chance connections) resulted in great conversations. For me, the highlights were:
If I get to attend Lotusphere again, I’d love to be able to stay at the conference hotel. It would be much more convenient and I’d be able to go to more of the evening get-togethers. The chances of my being able to attend again probably depend on how much of the Social Business adoption consulting we’ll get to do over the next year, and I hope we do a lot. I’d also make time to check out the showcase. I missed it this year, thanks to all that chatting.
Next actions for me
For work, I’ll probably focus on external Web 2.0 / social media site development while other groups figure out the structure for social business adoption consulting. I’m looking forward to learning from the case studies, insights, and questions that people have shared, though, and I’d love to do more work in this section.
Here’s what I need to do for post-conference wrap-up:
Other Lotusphere 2011 wrap-ups you might like: Chris Connor, David Greenstein, Luis Benitez (Day 1, Day 2, Day 3, Day 4, Day 5), Andy Donaldson, Marc Champoux (… where are the female bloggers’ writeups?)
See also: Lotusphere social aggregator, Planet Lotus, Twitter search for #ls11, Twitter/blog archive
]]>
What should we add to this? What should we remove? #ls11
]]>I’m a tech evangelist, storyteller, and geek in IBM Global Business Services. In addition to helping organizations learn more about emerging technologies through executive workshops, I build software that makes people’s lives better, like the Lotus Connections tools people have been using to help with community adoption. (Newsletters, metrics, data export, etc.)
More later, but you might be interested in:
Have fun, and leave a comment if you want to learn more or if you want to share any tips!
]]>Transfer[] transferArray = new Transfer[]{ XMLTransfer.getInstance(), }; tableViewer.addDropSupport(DND.DROP_DEFAULT | DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK, transferArray, new DropTargetAdapter() { public void drop(DropTargetEvent event) { TableItem item = (TableItem) event.item; // You can access the object with item.getData() try { NotesThread.sinitThread(); Session session = NotesFactory.createSessionWithFullAccess(); if (event.data instanceof URIDescriptor[]){ URIDescriptor[] droppedURL = (URIDescriptor[]) event.data; for (int i = 0; i < droppedURL.length; i++) { URI uri = ((URIDescriptor) droppedURL[i]).uri; Document d = (Document) session.resolve(uri.toString()); // Do things with the document } } } catch (Exception e) { e.printStackTrace(); } finally { NotesThread.stermThread(); } }});
Use session.resolve instead of db.getDocumentByURL to retrieve a document from a plugin, as both session.getAgentContext() and session.getCurrentDatabase() will return null.
]]>To paraphrase Edison: I wasn't failing, I was just figuring out a thousand ways that didn't work. =)
—-
Summary of troubleshooting lessons learned for Lotus Notes 8.5.2, Expeditor 6.2, and Eclipse 3.4:
org.eclipse.equinox.common problems when installing Expeditor Make sure you have the version of Eclipse that matches your Expeditor's system requirements (not a newer version, not an older version). For Expeditor 6.2, you'll need Eclipse 3.4.
Problem occurred reading your Target. Ensure that your Target Platform's Location is configured correctly. Set it to c:\notes\framework\rcp\eclipse, or wherever your rcp\eclipse directory is. If you still get the error, tinker around a little or wait a while. I don't remember what I did to solve this.
Bundle com.ibm.jxesupport not found. Ignore that. You're supposed to be able to correct that issue by right-clicking on the project, selecting Properties > Client Services
, and clicking OK, but no luck. It doesn't stop the system from moving forward, though.
com.ibm.rcp.platform.personality error or java.lang.SecurityException: Unable to locate a login configuration: *Enable all the features and be patient.
—-
I've been working on getting a Lotus Notes + Eclipse development environment so that I can make a Lotus Notes plugin for my community tools. There's a lot of interest in the community metrics tool, for starters.
The challenge with setting up development environments is getting all the versions to line up with the tutorials on the Net. I came across a page that described how to set up Lotus Notes 8.5.1 with the Eclipse Plugin Development Environment (PDE). I was on a newer version of Eclipse, so I needed to figure out a couple of the steps, and I eventually ran into a security exception with login configurations.
Along the way, I came across Lotus Expeditor and decided I wanted to try that. I saw an old article that said Expeditor only works with Eclipse 3.2.2 and not the newer versions, so I installed that, but it had problems trying to find com.ibm.equinox.common
. Then I found out that I had a newer version of Expeditor which requires Eclipse 4.0. When I installed that, Expeditor installed fine.
Lesson learned: Look up the version of the toolkit you're using. Look up the specific software requirements for that version. Match it instead of using newer versions.
Hmm. New error: Problem occurred reading your Target. Ensure that your Target Platform's Location is configured correctly. I have it set to c:\notes\framework\rcp\eclipse. It won't accept c:\notes\framework\eclipse . Hmm. It works now. I don't know what I did, though.
I'm running into the com.ibm.rcp.platform.personality error again. Let's try reloading those. They show up in the plugin list for the run configuration, though. Ah. Selecting another plugin that depends on that plugin might've done the trick.
There's a note about Bundle com.ibm.jxesupport not found.
com.ibm.jxesupport was removed in Lotus Expeditor 6.2.0. You're supposed to be able to correct that issue by right-clicking on the project, selecting Properties > Client Services
, and clicking OK, but no luck. It doesn't stop the system from moving forward, though.
… and we're back at the java.lang.SecurityException: Unable to locate a login configuration
which I encountered this morning.
Okay. What do I know about this error?
Aha! Found someone with the same error message, but in a different language. The person reported that checking all the boxes in the plugin tab helped. Let's try running it with all the features enabled (oh my). Lots of warnings, but still going… And there's the Lotus Notes login dialog, and the sample QuickNote plugin. I think we have it!
Useful links:
]]>