Priorities - A: high, B: medium, C: low; Status - _: unfinished, X: finished, C: cancelled, P: pending, o: in progress, >: delegated. Covey quadrants - Q1 & Q3: urgent, Q1 & Q2: important
ACConfigure my Lifebook for the wireless card (LinuxLaptop)
BXGo on an overnight with Diane (social)
BXBuy stuff for cosplay (social)
BXArrange details for overnight (social)
BXChange to BBDB aliases instead of tags (emacs)
BXWrite BBDB/Planner code for tags (emacs)
BXReflect on software support for keeping in touch (writing)
BXCheck out EmacsWiki#RecentChanges from 2005.05.05


1. Keeping in touch

Categories: None — Permalink

How can I keep in touch with other people?

One way is to call people up or write them a friendly note every so often. I find this difficult to do because I'm still not used to small talk. I'm also not used to being interrupted for a purely social call unless it's someone I know well. I'm much more comfortable dealing with information. I want to be useful.

First, I need to keep track of people's interests. When I run across something that might be useful for them, I can send them the information. If I also keep track of other little facts I know about people, then I can make them feel a little more special.

Second, I should regularly refresh my contacts. I should make sure I keep in touch with people. Maybe I should set goals for how often I should get in touch with different kinds of people. There are people I don't expect further contact with, there are people I should write at least once a year, and there are people I'd like to correspond with more frequently.

The next step would be to proactively search for useful information. If I periodically read about other people's interests, I will not only learn many new things and gain more common ground with them, but might also find resources they haven't run across before.


I already keep notes on people in my BBDB (Big Brother Database, Emacs). BBDB makes it easy for me to associate notes with e-mail. Whenever I read a message from someone in my address book, the BBDB record pops up and I can review or add notes easily.

However, I don't regularly review these contacts or make a conscious effort to stay in touch with a wide range of people. I tend to react instead of act, and I'd like to change that.


I would like to be able to see my contacts grouped by relative frequency. This would allow me to flip through, say, all the people I have yet to contact this year, and randomly pick people to get in touch with. I need to also keep track of our last few communications, in terms of both when I got in touch with that person and when I got a reply.

I would like to be able to see my contacts grouped by interest. I can achieve the same effect by searching through the records for a particular keyword. This would allow me to easily look up all the people I should get in touch with regarding a particular topic.

I would like to be able to create tasks based on each contact or group of contacts. I should be able to list all the tasks associated with a particular person as well as see the tasks on my day page, perhaps under the "social" context.


First, I should add two fields to my BBDB records to keep track of the last time I spoke/wrote to the person and the last time I received a reply. I can probably configure Gnus to update this automatically for mail, although I can also do that myself. I can also add an entry for maximum days without contact, or something like that.

I can add another field called "Next action", which keeps track of the next thing I can do for that person.

I can write Emacs Lisp code to extract all the relevant information from BBDB and prioritize the list.

Hmmm. Sounds useful.

最近コンピュータ用の新しい机を買いました。 I just bought a new desk for my computer.

On Technorati: , ,

2. BBDB tags

Right, that tags thing looks like a good idea. It should be easy to hack into BBDB. I'll need to actually tag people, and then write an Emacs Lisp script that scans through all of the records, gathers them into categories, and then creates the list.

HEY. This might actually work. Here's a quick test of tags:

ateneo Charles Yeung,Sean Uy,Ryan Kristoffer Tan,Stephanie Sy,Bit Santos,Jerome Punzalan
pisay Jerome Punzalan,clair ching,mario carreon
linux Eric Pareja,Jared Odulio,Chris G. Haravata,levi guerrero,Zak B. Elep,clair ching,Dean Michael Berris,Jan Alonzo
blog Charles Yeung,Sean Uy,Ryan Kristoffer Tan,Stephanie Sy,Aaditya Sood,Bit Santos,Raven,Jerome Punzalan,Richard Plana,Phillip Pearson,Eric Pareja,Jared Odulio,Celsus Kintanar,Jan Michael Ibanez,Mark A. Hershberger,Chris G. Haravata,levi guerrero,Cha Gascon,Sim Gamboa, III,Marcelle Fabie,Zak B. Elep,David Edmondson,edelgado,Dominique Cimafranca,clair ching,Sean Champ,Dean Michael Berris,Jason Banico,John S. J. Anderson,Jan Alonzo
debian Federico Sevilla III,Paul Lussier,Angus Lees,Frederik Fouvry,Zak B. Elep,Joe Corneli,clair ching,Sean Champ,Miles Bader,Jan Alonzo,Jesse Alama
emacs Manoj Srivastava,Paul Lussier,Lukhas,Angus Lees,Mario Lang,Jan Michael Ibanez,Mark A. Hershberger,Frederik Fouvry,clair ching,Miles Bader,Ethan Aubin,John S. J. Anderson,Jesse Alama
planner Paul Lussier,Mark A. Hershberger,Frederik Fouvry,Zak B. Elep,Joe Corneli,clair ching,Ethan Aubin,John S. J. Anderson,Jesse Alama

Use C-o to add a "tags" field to your BBDB records. This should be a space-delimited list of tags (case-sensitive for now). Call M-x sacha/planner-bbdb-insert-tags-alist to produce a list like the one above.

(defun sacha/bbdb-get-tags (record)
  "Return the tags for RECORD as a list."
  (let ((tags (bbdb-record-getprop record 'tags)))
    (when tags (split-string tags))))

(defun sacha/bbdb-test-tags (query tags)
  "Return non-nil if QUERY is a subset of TAGS."
  (let ((result t))
    (while (and result query)
      (unless (member (car query) tags)
        (setq result nil))
      (setq query (cdr query)))

(defun sacha/bbdb-search-tags-internal (records tags)
  "Return a list of RECORDS matching TAGS."
  (when (stringp tags) (setq tags (split-string tags)))
  (let (result)
    (while records
      (when (sacha/bbdb-test-tags tags
                                  (sacha/bbdb-get-tags (car records)))
        (setq result (cons (car records) result)))
      (setq records (cdr records)))

(defun sacha/bbdb-search-tags (tags)
  "Display all the records that match TAGS."
  (interactive "MTags: ")
  (bbdb-display-records (sacha/bbdb-search-tags-internal (bbdb-records) tags)))

(defun sacha/planner-bbdb-link (record)
  "Return a link to RECORD."
  (or (bbdb-record-getprop record 'plan)
      ;; From a BBDB entry with a plan page; use that. Yay!
      (concat "[[bbdb://"
               " " "."
               (bbdb-record-name record))
              "][" (bbdb-record-name record)

(defun sacha/bbdb-get-tags-index ()
  "Return a list of tags and records."
  (let ((tags-alist '())
        (records (bbdb-records))
    (while records
      (setq tags (sacha/bbdb-get-tags (car records)))
      (while tags
        (setq entry (assoc (car tags) tags-alist))
        (setq list (cdr entry))
        (add-to-list 'list (car records))
        (if entry
            (setcdr entry list)
          (add-to-list 'tags-alist (cons (car tags) list)))
        (setq tags (cdr tags)))
      (setq records (cdr records)))

(defun sacha/planner-bbdb-insert-tags-alist (&optional tag-alist)
  "Insert TAG-ALIST into the current buffer."
  (unless tag-alist (setq tag-alist (sacha/bbdb-get-tags-index)))
  (insert (mapconcat
           (lambda (item)
             (concat (car item) " | "
                      (cdr item)

To think that only took me an hour of leisurely coding (including tagging my contact information)...

昨年度のコンピューターからの利益は、今年度分よりも10%近く多かった。 Profit on computers for the previous year was nearly ten percent higher than the current year.

On Technorati: , ,

3. Big, Hairy, Audacious Goals

"Big, Hairy Audacious Goals" is a catchy and inspiring way to think about things. If you don't have this book yet, you might want to look for it next time you're in a well-stocked bookstore:

Built to Last – Successful Habits of Visionary Companies
Jerry Porras and James C. Collins, 1994.

Here are some links for more information:

Book review / executive summary

Big Hairy and Audacious Goals for Business! (interview)

"We found that visionary companies often set these incredibly challenging goals."

Goal Setting with Big Hairy Audacious Goals (BHAGs)
A workshop outline--great idea for training

My BHAGs are:

  • Revolutionize computer science education by making it highly individualized and experiential.
  • Become a world-famous expert on creating systems for planning one's life. Instead of pushing a particular methodology, I'd like to work with people's current ways of planning, suggesting improvements and software/hardware to support their life.

What are yours?

昨日は、私のコンピューターが故障していたのです。 My computer was down yesterday.

On Technorati: ,


DOS: n., A small annoying boot virus that causes random spontaneous system
     crashes, usually just before saving a massive project.  Easily cured by
     UNIX.  See also MS-DOS, IBM-DOS, DR-DOS.
(from David Vicker's .plan)