Headlines for Tuesday:

  1. Programming competitions (119 words)
  2. Personal contact relationship management (716 words)
  3. Found my vertical: HR (710 words)
  4. Inbox meter (45 words)
  5. 50 e-mail messages today (88 words)



1. Programming competitions: 15:30

I always love reading Didith Rodrigo's blog posts about programming competitions and my alma mater, Ateneo de Manila University. Her latest entry about Wilhansen Li and Thomas Dy's performance at Mapua's PaC++klaban made me wish I could be teaching first-year computer science again! I think it's amazing that Thomas plunged right into a C++ programming competition despite not having previous programming background in C++.

Wow, huh? I love the programming competition scene back home. It's a great way to meet amazing people, and I hope Wilhansen and Thomas get as much (or more!) out of it than I did--and I learned a _lot!_

Random Emacs symbol: pcomplete/rlogin - Function: Complete a command that wants a hostname for an argument.

2. Personal contact relationship management: 18:13

It's a good thing that computer geeks appreciate automation. They can sniff out form e-mail in seconds, but they don't mind as long as it comes from a very clever technical hack. Such was the case with the form letter engine I put together just in time to ask people for their postal addresses for my holiday updates. Paul Lussier wanted to know what kind of Emacs Lisp magic I was doing behind the scenes. Simon Ditner got his revenge by obfuscating his reply with 1337sp34|<. People humored me and replied with their addresses and birthdays, knowing that although the e-mail they got may have been mostly automated, my interest in them and my replies to the replies they sent me were very much real.

Good magicians never reveal their tricks, but I like talking about the crazy Emacs wizardry that goes on behind the scenes. Let me lift the curtain:

 "Hello, " (or (bbdb-record-getprop record 'nick) (bbdb-record-name record)) "!

I've actually managed to write my 2006 life update / holiday
letter somewhat in time, and will be mailing them out soon. I'd
love to find out how your year has been and what you're planning
to do next year, and I'd be happy to keep you up to date too!


 ((= (length (bbdb-record-addresses record)) 1)
  (concat "Is this address the best one to reach you at?\n\n"
          (sacha/bbdb-address-string (car (bbdb-record-addresses record)))))
 ((> (length (bbdb-record-addresses record)) 1)
  (concat "Which of these addresses is the best one to reach you at?\n\n"
          (mapconcat 'sacha/bbdb-address-string (bbdb-record-addresses record) "\n")))
 (t "I don't seem to have a mailing address for you, though. I'd
like to be able to snail-mail you postcards or holiday updates.
I promise not to use your address for anything evil! =) What's the best
way to send something to you?"))

(if (bbdb-record-getprop record 'birthdate)
  "\n\nBy the way, when is your birthday?")
"\n\nHope to hear from you soon!

Sacha Chua

p.s. No kittens were harmed in the writing of this message.")

That's the source for my form letter - a Lisp expression, allowing me to use the full power of Emacs. I used that as the input to the following function:

(defun sacha/gnus-send-message-to-all (subject &optional text)
  "Compose message to everyone, with notes.
SUBJECT is a string.
TEXT is a string or an arbitrary Lisp expression starting with (."
   (list (read-string "Subject: ")
         (read-string "Body: ")))
  (let ((records bbdb-records))
    (while records
      (when (bbdb-record-net (caar records))
        (bbdb-send-mail (caar records) subject)
        (goto-char (point-min))
        (re-search-forward "--text " nil t)
        (forward-line 1)
        (let ((record (caar records)))
          (when text
            (insert (if (= (aref text 0) ?\() (eval (read text)) text))))
        (when (bbdb-record-notes (caar records))
            (insert "\n--- NOTES ---\n"
                    (bbdb-record-notes (caar records))
                    "\n--- END NOTES ---\n"))))
      (setq records (cdr records)))))

The function composed a message for each of the records currently displayed. I edited the messages by hand, combining messages where appropriate, and sent them off.

What else can I do with this? Because this function accepts arbitrary Lisp expressions, it would be really easy to include a random holiday-related greeting or poem. If I had a database of significant events, I can include a random factoid about the recipient's birthday. If I had a local database of people's names, I could send one-off messages including the meaning of their names.

Yes, it's pretty crazy, but that's what you get when you have a geek who cares about connecting with people. I've stolen all the cool features from the contact relationship management systems I know about, and I keep trying out more ideas. It's a pity that the base system I'm working on can be quite intimidating. If I found the time to learn enough, say, Microsoft Outlook programming to implement a similar system, I think I'd have quite a market.

Even with my idiosyncratic setup, though, it's fun pushing the envelope. =) There are a lot of other things I'd like to add, and I don't think I'll ever stop coming up with new ideas. In terms of personal contact relationship management, I've got one of the most advanced systems I know--which just means I need to get to know more people, so that I can find other inspirations!

On Technorati: , ,

Random Emacs symbol: previous-buffer - Command: Switch to the previous buffer in cyclic order.

3. Found my vertical: HR: 21:49

I ran into Pete Forde at Andrew Burke's birthday party last night. He explained to a number of Andrew's friends in other industries that it was really the technical strengths and reputations of tech evangelists that made them much more effective than non-technical marketing or sales people. After all, many developers can easily detect marketing hype, and they don't like it one bit.

IBM consultants are always talking about "verticals", or industries on which people focus. Banking, real estate, pharmaceuticals, education - for salespeople to truly excel in any of these areas, they need to invest time into learning the industry inside and out. They need to know the vocabulary people use, the concerns people have, the opportunities for growth, and even the competitive context around their clients. Focusing on an industry allows people to develop deep competence and strong relationships both within and outside the industry.

On the walk to class the next morning, I thought about how that deep knowledge of an area helps me make deeper connections. I love having read most of the Toronto Public Library's holdings on social networking. I can quickly recommend appropriate books and tips. I'd love to have that kind of knowledge on a business area. So I started thinking about what I should focus on...

A friend once told me that he had no idea what he wanted to do at the moment. I told him that if you know who you want to be, then you can figure out what to do. I want my career to help me be the person I want to be. I don't want it to just pay the bills until I accumulate enough money to "retire". I want it to factor into my personal growth.

So the real question is: who do I want to be? What do I want to learn?

At some point in my life, I'd like to know a lot about real estate. I won't be able to make the most of it right now, though. Microfinance? Investing? Education? None of these really hit me as the right next step given my passions, skills, and the needs of people around me.

Then I started thinking of it in terms of who I want to be and what I'd love to do. I want to help people think, and I want to help people connect.

The first explains my interest in personal productivity, notetaking strategies, etc. The second underlies my passion for social computing. One standard business area that covers both would be HR. Human resources - seems to be a fantastic fit for what I'm doing right now and where I'd like to head in the future.

At networking events, I perk up whenever people tell me they're in recruiting--not because I want a job for myself, but because recruiters know how to manage lots of relationships and get a sense of who fits into what positions. What excites me about my research at IBM is the idea that I'll be able to help people find and connect with other people within the company.

I think the second part - helping people connect - is what I'm going to focus on for a while. We'll see if I need to further niche myself. Large tech companies that need social knowledge management tools for internal use, such as IBM's offerings? HR consultant for lots and lots and lots of small companies to help them grow professionally, source people, etc.? We'll see. Whatever space I choose, I want to learn everything that I can learn about it, and I want to own that space. =)

So that's my vertical, and my ideal job description for the next step is getting clearer and clearer. I want a sales + evangelism job (both aspects!) focusing on HR products and services that help people connect. I should find people in the area and ask if they niched themselves even deeper (HR for real estate companies? HR for campus recruitment of technology companies?). Then, just as companies post job ads describing their ideal candidate, I'll get a better idea of what an ad for my ideal company would look like... =)

On Technorati:

Random Emacs symbol: mail-header-set-id - Macro: Set article Id of HEADER to ID.

4. Inbox meter: 22:15

I should have one of those almost-real-time inbox meters that count the number of messages I've promised to respond to. That would be fun to add to my contact heading...

Random Emacs symbol: mm-w3m-safe-url-regexp - Variable: Regexp matching URLs which are considered to be safe.

5. 50 e-mail messages today: 22:41

Okay, my fingers are tired. No more e-mail. =) Someday I'm going to have to learn how to scale, but today is not the day. I suspect that it involves a more ergnomic environment. Maybe a larger keyboard (my Lifebook would do perfectly) and a slightly higher monitor so that I don't get a crick in my neck from looking down.

No more blogging, too.

Shower, then book, then sleep. That's the ticket...

Random Emacs symbol: syntax-after - Function: Return the raw syntax of the char after POS.


  1. Reply to Ann White - sent today
  2. Reply to Jennifer Nolan - sent today
  3. Reply to Raquel Nakayama - sent today
  4. Reply to Simon Rowland - sent today
  5. Reply to Richard Plana - sent today
  6. Reply to Dan Howard - sent today
  7. Reply to Gabriel Mansour - sent today
  8. Reply to Jennifer Schachter - sent today
  9. Reply to Paul Lussier - sent today
  10. Reply to Richard S. Hockett - sent today
  11. Reply to Michael Olson - sent today
  12. Reply to Sander A. Smith - sent today
  13. Reply to Charlotte Kendra G. Castillo - sent today
  14. Reply to John Wiegley - sent today
  15. Reply to Mike C. Fletcher - sent today
  16. Reply to Lawrence E. Hughes - sent today
  17. Reply to Marcelle Fabie - sent today
  18. Reply to Michael McGuffin - sent today
  19. Reply to John Oxley - sent today
  20. Reply to Ranulf Goss - sent today
  21. Reply to Simon Ditner - sent today
  22. Reply to Wendy Koslow - sent today
  23. Reply to Paul Wilson - sent today
  24. Reply to Wayne Young - sent today
  25. Reply to Dean Michael Berris - sent today
  26. Reply to Tom Ott - sent today
  27. Reply to Sean Uy - sent today
  28. Reply to Mia Levine - sent today
  29. Reply to Paolo Vanni M. VeƱegas - sent today
  30. E-mail to Ramon Mejia
  31. Reply to Andrew Burke - sent today
  32. Reply to Michael McGuffin, alice servera - sent today
  33. Reply to Simon Law - sent today
  34. Reply to Peppy Salita - sent today
  35. Reply to Jan Michael Ibanez - sent today
  36. E-mail to Kris Fuehr
  37. Reply to Erin Bucholz
  38. Reply to Charo Nuguid - sent today
  39. Reply to Gino LV. Ledesma - sent today
  40. Reply to Joe Whitney - sent today
  41. E-mail to Pete Forde
  42. E-mail to Andrew Burke
  43. E-mail to Lea Cameron
  44. E-mail to Lisa Koo
  45. E-mail to Elaine L. Leung
  46. Reply to hello - sent yesterday
  47. Reply to "Magee, Kevin Magee - sent yesterday
  48. Reply to "Tony Burns"
  49. Reply to "Tony Burns"
  50. Reply to Brian the Monkey - sent today