6099 comments
2357 subscribers
6264 on Twitter
Subscribe! Feed reader E-mail

On this page:

Analyzing my Lotus Notes sent mail since January 2011

Today is my penultimate day at IBM! Having successfully turned my projects over to another developer (hooray for the habit of organizing project-related files in Lotus Connections Activities), I’ve been focusing on getting things ready for the traditional goodbye e-mail, which I plan to send tomorrow.

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.

image

Spiky around project starts/ends, I’d guess.

image

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
e-mails sent

Average e-mails sent
per person

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

Short URL: http://sachachua.com/blog/p/23164

Waking up: looking at my data

Whenever I manage to wake up early a few days in a row, I feel great about it. But I don’t do it consistently. I spend a couple of days waking up before 6 AM and enjoying a good spurt of writing, and then I find myself slipping back into later bedtimes and later wake-up times (~ 7 AM) or hitting the snooze. Clearly there are some things I still need to tweak about my system.

Time-tracking means I’ve got a way to see what my current sleep patterns are like:

image

  • Average sleep length when waking up before 6 AM: 7:09
  • Average sleep length when waking up after 6 AM: 8:47
  • Average sleep time for wake-up times before 6 AM: 9:45 PM, which is a bit of a stretch but is doable.

Here are the questions I’m thinking about:

  • Is it a matter of getting to bed earlier?
  • Would it help to disable snooze entirely?
  • Is it a matter of setting my alarm clock even earlier? (Ex: Set it for 4 AM so that I eventually get out of bed at 5 AM.)
  • Would it help to set our programmable thermostat warmer in the morning, or promise myself a hot cup of tea when I get up?
  • Would it help to set my snooze interval to 5 minutes instead of 10?
  • How about if I find a way to turn my Android into a light clock? (Using Tasker to bring up a bright app, maybe…)
  • What if I give up on waking up early and instead shift to more of a night owl schedule? Advantage: can sync up with W-. I’ll need to figure out how to give my personal pursuits the creative energy they need, though.

Hmm. More things to hack…

Short URL: http://sachachua.com/blog/p/22109

Find your wall

The Sewing Hype Cycle
The Sewing Hype Cycle
(Apologies to Gartner ;) )

I like sewing because it frustrates me.

I start optimistically enough. I pick out a pattern. I choose fabric. I tweak the pattern. I cut out pieces. I start sewing them together.

Seams don’t quite line up. Threads break. Pins prick. I hit my lowest point: the facings are flapping about, the clothes don’t quite fit, and I’ve just sewed a seam that I have to rip out. I wonder why I put myself through this agony when I could buy better-made clothes for less than what I would spend on fabric.

I stop and put my work away. The next day, I take the unfinished pieces out and keep going. Somehow, it turns into something that looks okay.

I’ve never had a “flow” moment during sewing. It’s a struggle all the way to the end. That frustration is important. It’s why I do it.

It’s a good kind of frustration. It’s not a “life is unfair” kind of frustration. It’s not a “people suck” kind of frustration. It’s the frustration of knowing that there’s something I don’t know, or something I’ve skipped, or something I haven’t figured out.

It’s the frustration that accompanies learning things that don’t come easy to me, like a wall with hardly any handholds.

I learn, and I learn how to deal with that frustration. I learn when frustration and fatigue push me into making mistakes. I learn the value of sleeping on it. I learn how to keep thinking about how to do things better even when I’d rather do something easier or more fun. I learn how to experiment. I learn that I can find a way over, under, around, or through things that frustrate me.

I learn how great it feels to climb that wall.

I learn that there’s always going to be another wall, and another, and another – and that’s okay, because the walls help me learn.

I learn not to fear walls by trying them, just as I learned not to fear falling by intentionally doing so.

It’s tempting to spend your time on easy escapes. Find your walls. Deal with that frustration, and keep going.

Short URL: http://sachachua.com/blog/p/7135

Living in the sweet spot

The sweet spot is the intersection of what you’re good at, what you love doing, and what the world needs. This idea shows up in lots of career books because it’s so powerful. Find your sweet spot, and you can make great things happen.

I’ve written about changing the world before, and it becomes more real every day. I do more and more of the things that make me happy in life and at work. This is what my current diagram looks like:

intersections

There are more skills I can include in these, though, but these are the most important ones.

I love what I do, I get better and better at it, and I create value by doing what I do. How did I get to be so lucky? =)

If you look at the posts I’ve shared on my blog through the years, you’ll notice that I frequently think about what I love doing and how I can do those things even better. Interests blossom into passions through practice and experience. The more I learn about something, the deeper I appreciate it. I share what I’ve learned at work, too. That almost always results in people finding some way to take advantage of my skills and passions, which is how I end up getting paid for all these things I love to do. If the company ever decided to phase out my group, I can see myself creating a business around these core skills.

How did I get to this point? One idea led to another. It started with coding. I taught myself how to program in grade school. I joined competitions throughout high school and college, and I learned a lot in the process. My interest in programming led to open source software, which got me interested in Emacs and personal information management. That led me to blog, which resulted in a new interest in writing. I’d never enjoyed writing essays for English class, but I loved writing about what I was learning. This turned into public speaking when I found out that the things I was learning also interested other people. The more I learned, the more I could help people brainstorm new ideas. The more I wrote, the more I found myself connecting with others, which also helped me brainstorm. The more I wrote and connected, the more people asked me to coach them on how to do the same. I started playing around with drawing when a friend asked me to explain something, and that kicked off yet another interest. I picked up other hobbies like photography, sewing, and cooking along the way. Then I was asked to facilitate sessions on emerging technologies, and here I am. And paperwork, well, everyone has to do that. =)

Where do I go from here? With a strong foundation like this, I can see opportunities to grow almost everywhere. I’m looking forward to improving my facilitation skills. I’m not bad at facilitation. I’m not consistently good yet, and someday, I might be. I love working on my core skills and adding new ones. I can’t wait to figure out what I’ll learn how to do next, and how I can share that with everyone!

Short URL: http://sachachua.com/blog/p/6866

Digraphs with Graphviz

And for the geeks, here’s the Graphviz dot file that created the graph in How to do a lot. Posting here because I know I’m going to forget, and also because it’s so cool…

digraph {
  label = "Do things that complement each other";
  subgraph {
    rank=same
    experimenting
    programming
  }
  writing
  presenting
  programming -> writing  [label="new experience"]
  experimenting -> writing [label="new experience"]
  programming -> experimenting [label="automation"]
  experimenting -> programming [label="improvements"]
  writing -> presenting [label="content,\nopportunity"]
  presenting -> writing [label="content"]
  writing -> programming [label="reflection,\nideas"]
  writing -> experimenting [label="reflection,\nideas"]
  presenting -> experimenting [label="ideas"]
  experimenting -> presenting [label="improvements"]
}

I created it with the command:

dot -Nfontsize=10 -Efontsize=11 FILENAME -o OUTPUTFILENAME -Tpng

The result:

Directed graph

Short URL: http://sachachua.com/blog/p/5947

ROI for public speaking and Web 2.0; graph and case study

Amy Shuen inspired me to prepare a spreadsheet for estimating the value created by my talks. (You can open the spreadsheet in OpenOffice.org or Lotus Symphony, both free office suites.) She’ll be including some of the numbers in tomorrow’s IBM Web 2.0 for Business community call on ROI of Web 2.0 at Work. I thought I’d make the numbers a little easier to grasp, so I spent an hour and a half making this:

Full-size images at public-speaking-1.png and public-speaking-2.png.

Short URL: http://sachachua.com/blog/p/5637

Get the highlights as a PDF!

Stories from my Twenties: Highlights from a Decade of Blogging

Free sample!