Headlines for Friday:

  1. Taking the Terror out of Talk (146 words)
  2. Emacs BBDB: Filtering tags with the power of lambda expressions (818 words)
  3. Hospitality (130 words)
  4. Networking: Create value with your business cards (646 words)
  5. Stories from New York: Making things happen (458 words)
  6. Stories from the NY trip (345 words)
  7. Notes from KMD2004 meeting (127 words)
  8. Emacs BBDB: Prioritize exact matches (149 words)
  9. Networking story: Being in the right place at the right time (103 words)
  10. Networking is about being memorable; the art of the deep bump (459 words)
  11. The power of sales (64 words)
  12. Geek dinners and networking ideas (185 words)

Work on research



1. Taking the Terror out of Talk: 09:35

Does the thought of speaking in public make you anxious? Want some tips on how to deal with the butterflies in your stomach? Come to the Toast I.T. Toastmasters Open House on Oct 10, 2006 for a fun, informative session!

I'm giving one of the Toastmasters International educational modules called "Taking the Terror out of Talk". It will be part of the 229th meeting of Toast I.T. Toastmasters, so you'll also get to see a little bit of what Toastmasters is like.

This is free, so come on over!

Toast I.T. Toastmasters
Metro Hall
55 John Street, Toronto, Ontario (map)
Oct 10, 2006 (Tuesday)
6:00 PM - 8:00 PM

(And even if you're a polished public speaker, come anyway to show support and share tips! ;) )

Photo credit: Cherie, Creative Commons Attribution License, from Flickr.

On Technorati: , ,

2. Emacs BBDB: Filtering tags with the power of lambda expressions: 11:28

What do you do when you're into both Emacs geeks and social networking? Well, you build a really really weird contact management tool, that's what!

One of the things I often need to do is filter my contacts for a particular set of interests. I would have no idea how to do this in Microsoft Outlook and other proprietary contact management systems. Because Emacs is infinitely programmable, though, I can just hack it in.

You'd expect the intersection of the set "emacs geek" and the set "social networker" to be a null set or a singleton (me!). As it turns out, there's at least one other geek in this space - hooray!

Paul Lussier's been bouncing all sorts of crazy ideas off me, which explains all the weird porridge-and-toe-nails posts of Emacs Lisp code on my blog lately. He's responsible for my puttting together yesterday's LinkedIn importer. Today, he wrote:

Then found your sacha/bbdb-search-tags stuff which totally, completely rocks. I just wish I had the first inkling as to how it worked :) Now, the question I have is: How can I use sacha/bbdb-search-tags to search for entries which are tagged with one label, but NOT with another? For example, I want to search on: (and (taq eq "planner") (not (tag eq "muse")))

I'd completely forgotten about sacha/bbdb-search-tags! Anyway, I'd been meaning to write a fancy alias management thing for a while now, and this code does a reasonable job for me. I can now filter my displayed records by arbitrary Lisp expressions, bringing me closer to insane contact relationship management. I mean, c'mon...

;; M-x sacha/bbdb-filter-by-alias-function RET
;;     (lambda (aliases) (and (member "planner" aliases)
;;                       (not (member "muse" aliases))))) RET

If I do this often enough, I might make up an easier syntax, but lisp expressions work fine for me.


Here's the code:

;;;_+ Mail aliases

;; Code for working with aliases

;; You can use "a" (bbdb-add-or-remove-mail-alias) in BBDB buffers to add
;; a mail alias to the current entry, or "* a" to add a mail alias to
;; all displayed entries.

;; Goal: Be able to specify ALIAS and ALIAS
;; M-x sacha/bbdb-filter-displayed-records-by-alias RET alias alias
;; Goal: Be able to specify ALIAS or ALIAS
;; C-u M-x sacha/bbdb-filter-displayed-records-by-alias RET alias alias
;; Goal: Be able to specify not ...
;; M-x sacha/bbdb-omit-displayed-records-by-alias RET alias alias
;; C-u M-x sacha/bbdb-omit-displayed-records-by-alias RET alias alias

(defun sacha/bbdb-filter-by-alias-match-all (query-aliases record-aliases)
  "Return non-nil if all QUERY-ALIASES are in RECORD-ALIASES."
  (let ((result t))
    (while query-aliases
      (unless (member (car query-aliases) record-aliases)
        (setq query-aliases nil
              result nil))
      (setq query-aliases (cdr query-aliases)))

(defun sacha/bbdb-filter-by-alias-match-any (query-aliases record-aliases)
  "Return non-nil if any in QUERY-ALIASES can be found in RECORD-ALIASES."
  (let (result)
    (while query-aliases
      (when (member (car query-aliases) record-aliases)
        (setq query-aliases nil
              result t))
      (setq query-aliases (cdr query-aliases)))

;; Moved this to a convenience function so that we don't
;; have to deal with invert and property splitting.
(defun sacha/bbdb-filter-by-alias (bbdb-records
                                   &optional invert)
  "Return only the BBDB-RECORDS that match ALIAS-FILTER-FUNCTION.
ALIAS-FILTER-FUNCTION should accept two arguments:
 - QUERY, a list of keywords to search for
 - aliases, a list of keywords from the record
If INVERT is non-nil, return only the records that do
not match."
  (delq nil
         (lambda (rec)
           (if (funcall alias-filter-function
                         (or (bbdb-record-getprop
                              (if (vectorp rec)
                                (car rec))
                              propsym) "")
                         "[ \n\t,]+"))
               (when (null invert) rec)
             (when invert rec)))

;; Splitting this into two functions because of interactive calling.
(defun sacha/bbdb-filter-displayed-records-by-alias (query &optional any)
  "Display only records whose mail-aliases match QUERY.
If ANY is non-nil, match if any of the keywords in QUERY are
See also `sacha/bbdb-omit-displayed-records-by-alias'."
  (interactive (list
                (let ((crm-separator " "))
                   "Mail aliases: "
  (when (stringp query)
    (setq query (split-string query "[ \n\t,]+")))
    (or bbdb-records (bbdb-records))
    (if any

;; Splitting this into two functions because of interactive calling.
(defun sacha/bbdb-omit-displayed-records-by-alias (query &optional any)
  "Display only records whose mail-aliases do not match QUERY.
If ANY is non-nil, match if any of the keywords in QUERY are

See also `sacha/bbdb-filter-displayed-records-by-alias'."
  (interactive (list
                (let ((crm-separator " "))
                   "Mail aliases: "
  (when (stringp query)
    (setq query (split-string query "[ \n\t,]+")))
    (or bbdb-records (bbdb-records))
    (if any

;;;_+ Advanced mail alias queries

;; Goal: Use complicated lambda expressions to filter displayed records
;; M-x sacha/bbdb-filter-by-alias-function RET
;;     (lambda (aliases) (and (member "planner" aliases)
;;                       (not (member "muse" aliases))))) RET
;; Thanks to Paul Lussier for the suggestion!

(defun sacha/bbdb-filter-by-alias-function (bbdb-records
  "Return only the BBDB-RECORDS that match ALIAS-FILTER-FUNCTION.
ALIAS-FILTER-FUNCTION should accept one argument:
 - aliases, a list of keywords from the record."
  (interactive (list (or bbdb-records (bbdb-records))
                     (read t)))
  (let (records)
    (setq records
          (delq nil
                 (lambda (rec)
                   (when (funcall alias-filter-function
                                   (or (bbdb-record-getprop
                                        (if (vectorp rec)
                                          (car rec))
                                        propsym) "")
                                   "[ \n\t,]+"))
    (if (interactive-p) (bbdb-display-records records))

On Technorati: , , , ,

3. Hospitality: 11:43

Someday I want to be able to make people feel as welcome as Luis Suarez felt in Cincinnati:

But on the contrary, it was one of those parties difficult to forget. I know I will not forget it that easily. Not only did Melody open her house to everyone as if they were close family members but everyone else even made you feel that way, too ! An incredible experience ! It felt like I was part of the group and all that from someone who visited Cincy for the first time ever and who didn’t know most of the people back there. If there is a way to define hospitality in the best terms possible that, folks, would be the best I can come up with.

On Technorati:

4. Networking: Create value with your business cards: 12:39

Business cards are not only a good way to leave your contact information with people, but they can be a great way to make a memorable impression by sharing valuable tips. Here's how I made a difference with my business cards.

I had two hours of free time before going to a networking workshop, and I wanted to create as much value as possible for the other attendees. The back of my business card felt like a good place to put a takeaway message, so I pulled up my business card template and a few sheets of perforated business cards.

Would my recent blog post about networking with nametags have been a good fit? Hmm, maybe not. It would be useful if I gave them my card before they made nametags, but I wasn't sure if I could get to everyone in time unless I volunteered to be at the reception. Besides, that kind of information is easy to absorb and remember. What could create lasting value for people?

Aha! Whenever I meet someone who wants to learn more about networking, I run through a list of my favorite books on the topic. Why not put *that* on my business card? That way, I could help people learn even more about networking. So I changed the back of my business card to read:

My favorite networking books:
  • Never Eat Alone, Keith Ferrazzi
  • Work the Pond, Darcy Rezac
  • Love is the Killer App, Tim Sanders
  • How to Talk to Anyone, Leil Lowndes
  • Dig Your Well Before You're Thirsty, Harvey Mackay

Then I thought, hey, what else can I do to create value for other people? Well, I read, think, and blog a *lot* about networking and other topics. What if I e-mail people a free networking newsletter with tips? So I added this to the back of my business card:

Want tips, good networking resources, and upcoming events? E-mail me at networking@sachachua.com to subscribe to my free networking newsletter!

Hey, I'll figure out how to do newsletters if people are interested. I've got plenty of material, I know. I just have to search through my blog and tidy up some of the articles!

I printed out thirty new business cards and headed to the event. I handed one to the organizer, whom I knew from other tech events. Whenever I got people's contact information in order to send them something or to continue a conversation, I gave them a business card. I didn't call attention to the back; it was just there.

The perfect opportunity to mention the business card came up during the networking workshop, though. Alex Sirota mentioned the idea of interdependence and networking, and one of the books on my list has a very good description of how networking can help you reach out to others. I told him (and thus everyone) that on the back of my business card is a list of my favorite networking books, and book 3 - Love is the Killer App - has a great description of networking along those lines. People perked up, and some of the people I hadn't gotten to talk to reached out and asked for a business card. I got several compliments on such a great idea, too!

So, networking tip for the day: Take a look at your business card and figure out how you can create more value for the people you meet. For example, if you're a writer, you might want to list your latest useful articles and offer to send a copy if people are interested. Carry several versions of your business cards targeted for different audiences. (Thanks to Greg A. Fitz for this tip.) It's a great way to make an impression!

I love following these crazy little ideas. Stay tuned for more networking tips. I'd love to hear yours, too!

On Technorati:

5. Stories from New York: Making things happen: 14:28

I was thrilled when the Greater IBM Initiative invited me to be one of the Core Connectors. Thrilled, yes, and more than a little anxious. I didn't know what I could bring, being so new to IBM and knowing hardly anyone, much less being able to convince them to register for a new social networking site or get them excited about networking with IBM alumni I didn't even know. Still, I accepted the invitation with great enthusiasm, and I signed up to help with the blog.

I still haven't contributed anything to the blog despite all the stuff I've been blogging here about networking. I think I should just work up the nerve to get one of these potential articles out there in public. =)

My insecurity about not feeling like a proper Core Connector didn't stop me from being excited about the events the Greater IBM Initiative was organizing. They were kicking it off with parties in New York, San Francisco, and other awesome places.

On 2006.09.16 (Saturday), I woke up and asked myself, "What if we could make this happen?" I knew I really wanted to meet these people in person. I wanted to meet other people serious about social networking and passionate about connecting people. So I said, okay, what can I do to get there?

I was thinking about it during the Queen West Art Crawl, and I just kept seeing encouraging signs wherever I went. Quinn, Ian, Simon and I were hanging out at the Melody Bar for karaoke (kudos to Simon for stepping out of his comfort zone, although we still haven't gotten him to sing!). Someone sang "New York, New York" - imagine that! It made me smile, and for the rest of the evening I felt such an urge to break out into song.

Next thing I knew, a UK IBMer called me up to tell me to check my mail, because the Greater IBM Initiative had heard me muse about things on my blog and people were trying to figure out how to fit me into their budget. My mom hooked me up with a family friend who could lend me couchspace. Suddenly, everything was falling into place.

All I needed to do was find a cheap way to get to New York. I stumbled across Skybus, which offered a round trip for USD 100. What a deal! I signed up for that using my Canadian credit card, scrambled to pack my things and prepare for the networking event, and off I was!

And that's how I found myself in New York last Thursday: a crazy idea that I wanted to make happen, and the generous, generous support of family and friends and everyone around me.


On Technorati:

6. Stories from the NY trip: 15:13

The e-ticket from the bus company said that people should arrive twenty minutes early in order to keep their reservation priority. The pickup point was 1.5 km from my residence. I was taking no chances, though. If I missed the bus, I had no idea how I'd get to New York without spending way too much on a plane ticket! I requested a cab for 5:00 AM (meep!), giving myself _plenty_ of time to get there.

Too much time, apparently.

As it turns out, waiting alone on the sidewalk at 5:10 in the morning is nerve-wracking, even in Toronto. Toronto feels like a generally safe city (compared to Manila, at least!), but I was still pretty nervous. Someone with a thick Irish accent asked me for help getting back to Oakville. I normally don't give people money because, well, I haven't sorted out the best response to panhandlers yet, but I was just so rattled that I gave him the smallest amount I had. Didn't have any coins, so I ended up giving him CAD 10. Fortunately, he headed off after that...

... but then I was sitting on the sidewalk, shivering, scared, and more than a little worried that the bus might not actually show up. After all, I wasn't going with an established company like Greyhound. Knowing that I'd charged it to Visa and could dispute the charge just in case they scammed me was small comfort waiting there at 5:15 in the morning with no bus in sight.


And that was one of the times I felt really, really, really lucky to have friends I can call at 5:17 in the morning. Jedediah Smith lived closest to the intersection. Although I knew he wasn't really a morning person and he'd probably need the sleep, I called him up anyway. I was starting to get really nervous.

And he came, and that was awesome. =) We chatted for a bit before the bus showed up. It turned out to be non-dodgy. Whew! But it was wonderful having company. =)


On Technorati:

7. Notes from KMD2004 meeting: 15:23

Attendance: Dave Kemp, MJ Suhonos, Sacha Chua

Next action Work on individual ANT maps, due Oct 5
Next meeting Oct 5 2:00 PM at Dave Kemp's studio
  • Reviewed the group deliverables: initial memo, individual requirements, group paper, presentation, intervention piece
  • Selected the controversial issues that we would focus on
    • Creative Commons and intellectual property: Dave Kemp
    • Open Access Journal and power concentration: MJ Suhonos
    • Open source development in developing countries and economic development / social inequity: Sacha Chua
  • Actor-technology network map due on Oct 10, so we will prepare individual actor-technology network maps and discuss them next Thursday (Oct 5) at 2:00.
  • Shared some bibliography tips: Dave Kemp's essay has references), Lessig's book, Wealth of Networks
  • Exchanged phone numbers

On Technorati:

8. Emacs BBDB: Prioritize exact matches: 15:54

I often include people's names in my notes on other people, such as when I'm tracking who introduced me to whom. The following code modifies BBDB's behavior to put exact matches for name, company, or network address above matches for notes.

(defun sacha/bbdb (string elidep)
  "Display all entries in the BBDB matching the regexp STRING
in either the name(s), company, network address, or notes.
Prioritize non-note matches."
   (list (bbdb-search-prompt "Search records %m regexp: ")
  (let* ((bbdb-display-layout (bbdb-grovel-elide-arg elidep))
         (notes (cons '* string))
          (bbdb-search (bbdb-records) string string string nil
          (bbdb-search (bbdb-records) string string string notes
    (setq temp records-top)
    (while temp
      (setq records (delete (car temp) records))
      (setq temp (cdr temp)))
    (if (or records-top records)
        (bbdb-display-records (append
      ;; we could use error here, but it's not really an error.
      (message "No records matching '%s'" string))))

(defalias 'bbdb 'sacha/bbdb)

On Technorati: , , , ,

9. Networking story: Being in the right place at the right time: 16:01

At last night's New Path Network workshop, Alex Sirota told us a story about how Fernando Morales networked his way to an opportunity. Fernando turned up at a New Path meeting because he was interested in catering for their events. It so happened that New Path Networks was thinking of having a summer social, so they hooked up with Fernando. New Path Networks sold 25 tickets to its members for a social event that was part of a larger celebration organized by Fernando, and Fernando's event gained more people, visibility, and credibility.

So get out there and ask for opportunities! =)

On Technorati: ,

10. Networking is about being memorable; the art of the deep bump: 16:21

Kevin McIntosh made a couple of great points at last night's Newpath Network workshop. One of my favorite ideas from the evening was:

Networking isn't about getting an immediate business lead. It's about making an impression on someone. Your opportunities are probably not going to come directly from the people you meet, but rather from the people _they_ meet. Make that connection with people so that they'll remember you.

I think that's one of the things that I still find a little bit strange about networking events. I'm getting better at finding an excuse to e-mail people. Knowing a bit about a lot of different topics helps. I love offering to send people more information about something, and my trusty Moleskine notebook means I can promise all those things and (usually) be good at following up. When I'm in a large crowd, then, all I'm really looking for is an idea of what someone's interested in and a reason to get in touch with them in the future.

For example, Quinn and I were talking about the Toronto Public Library system at Wednesday's !CaseCamp. Someone else jumped in with praise for the public library system. I immediately asked him if he'd heard of the library lookup bookmarklet and other cool tools. He hadn't, so I got his e-mail address and promised to e-mail him more information about that.

I get the feeling that most people aren't like that. Many people I talk to at networking events don't immediately give me hooks to get in touch with them about, or spend time finding out what I'm into. I noticed that when I _don't_ actively look for those ways to continue a conversation, don't actively deep-bump people, I come away from these events feeling that I haven't really met anyone. One of the social salons I went to was like that: random people talking about the weather, little self-disclosures that I'll never use, maybe a bit of trivia that I _might_ pick up and remember even though I probably wouldn't remember the person I heard it from.

My awareness of this difference is shaped in part by Keith Ferrazzi's book "Never Eat Alone", from which I got the term "deep bump." I go to networking events not to have full conversations, but to start them. I guess it's because I hate chatting at loud, crowded networking events. ;) I'd rather sit down and have coffee with someone (well, when I can find the time to do so!), or have them over for a barbecue or dinner party, or e-mail them a little tidbit that fits their interests...

Hmm, there's probably a little article in here somewhere. How can I help other people get the hang of the deep bump?

On Technorati:

11. The power of sales: 16:46

Simon just finished a sales call that came in through a referral. He's got a pretty nifty voice messaging system (for non-profits that don't do evil!), and he's starting to realize that he doesn't have to spend a lot of time doing development when he's already got a totally cool product that he should be selling the heck out of. =)


On Technorati: , ,

12. Geek dinners and networking ideas: 16:56

Kevin McIntosh's presentation on networking reminded me of Geek Dinner. I've been meaning to organize one of these for ages.

You know what? These networking/hanging-out events might be fun with a little more structure instead of the hit-or-miss things that usually happen.

I'm curious as to how a networking event would work with the following tweaks, roughly in order of effort/preparation required:

  1. nametags with best practices
  2. introduction segment, maybe a la silent resource auction
  3. wants/haves
  4. introductions, wants, haves posted/distributed at the event for people who RSVPd
  5. introductions, wants, haves e-mailed before the event
  6. post-event automatic followup a la speed dating, with possible automatic sharing of contact info
  7. pre-event networking plan
  8. an active host looking at people's profiles and encouraging connections
  9. self-placement so that you can plan who you'll be physically near, if it's a sit-down thing like a dinner
  10. planned placement, like that done by truly out-of-this-world hosts at elegant parties

You know, that would be _so_ fun to hack. I'd love to have a venue for trying out my crazy networking ideas.

On Technorati:

E-mail sent

  1. E-mail to Shawn Pucknell
  2. E-mail to Alex Sirota
  3. E-mail to Suzy Dickstein
  4. E-mail to Rami
  5. E-mail to Ian Garmaise
  6. E-mail to Ushnish Sengupta, Alex Sirota
  7. E-mail to Alex Sirota
  8. E-mail to Eli Singer
  9. E-mail to Shawn Pucknell
  10. E-mail to Paul Lussier
  11. E-mail to Jonathan Belisle
  12. E-mail to Paul Lussier
  13. E-mail to John Sullivan
  14. E-mail to Stephane Bortzmeyer
  15. E-mail to Tom Purves
  16. E-mail to highfalutin13
  17. E-mail to Simon Rowland
  18. E-mail to Paul Lussier
  19. E-mail to Maria Khomenko
  20. E-mail to Sunir Shah, Michael McDerment, Martin Cleaver
  21. E-mail to Mama
  22. E-mail to Greg A. Fitz
  23. E-mail to Jamie McQuay
  24. E-mail to Michelle Tampoya
  25. E-mail to Jonathan Belisle
  26. E-mail to Paul Lussier