November 2007

Sharing 101 goals in 1001 days

November 1, 2007 - Categories: plans

When Florina Xhabija mentioned how much
she liked the way I shared my goals on my website and how each goal
was associated with a next action, I was reminded of the
101-goals-in-1001-days project I’d started soon after I revamped my site.

My target date is 2010.07.02, which is in 972 days. =) Here’s the list:
101 goals in 1001 days.

Random Emacs symbol: toggle-uniquify-buffer-names – Command: Toggle whether to uniquify buffer names by adding parent directory names.

Generating a table of projects and their actions

November 1, 2007 - Categories: emacs, org

Here’s how I generated my list of 101 short-term goals.

First, I brainstormed the list of goals in an org-mode file. Each goal
is represented by a level-2 outline heading. Current projects are
tagged :PROJECT:. The goals are grouped under level-1 outline
headings, like this:

 * Reading, Writing, and Sharing
 ** 30. Write and publish a 350-page book about Emacs :PROJECT:

Then I went through all of the goals and added next actions to each of them.

 * Reading, Writing, and Sharing
 ** 30. Write and publish a 350-page book about Emacs :PROJECT:
 *** TODO 30min Write another blog post about Emacs.

This made it easy to keep track of my finished tasks. Whenever I
finished a next action, I’d mark a task as DONE and create another
task in the same project. (Hey, I can automate that bit…)

To generate the list of next actions for projects without including
the finished tasks, I used C-c C-v (org-show-todo-tree). I found that
command by typing M-x org-show- and letting icomplete-mode show me the
possible functions.

Then I exported the visible tree to a temporary buffer with C-c C-e v
SPC (org-export, visible, keep buffer). I used re-builder to test a
regular expression that combined the project headline with the task
headline. I then copied the regular expression into a short Lisp
program that replaced all the matching lines with the table row. I
then exported this with C-c C-e H (org-export, HTML to buffer) and
edited the page a little before saving it to a file.

This ability to quickly parse and massage the data into the form I
want is one of the things that I love about Emacs. =)

On Technorati: ,

Random Emacs symbol: debugger-setup-buffer – Function: Initialize the `*Backtrace*’ buffer for entry to the debugger.


November 3, 2007 - Categories: cooking

W- and J- made homemade pizza today. It was amazing. Just the right
level of crunchiness, with none of the oily or heavy feelings I
sometimes get after eating pizza-chain pizza… Yummy. I’m so lucky
that W- has so much fun cooking. I’m going to take over the kitchen at
least once this week, though! <laugh>

I remembered the pizza buns my mom used to make us for breakfast. I
loved those too: English muffins or toast spread with tomato sauce,
topped with cheese and a dash of paprika, maybe a few pineapple
chunks… Yummy! What is it about this combination of tastes that just
fills you right up and makes you feel at home?

Happy happy happy. =)

Random Emacs symbol: custom-add-dependencies – Function: To the custom option SYMBOL, add dependencies specified by VALUE.


November 3, 2007 - Categories: life

“Okay, I’m going off shopping now. See you later!” I said.

“Five hours, then?” W- laughed, and so did I.

He must’ve come up with that number through lots of experience,
because it did take me roughly five hours to go through all of Eaton
Centre and the Bay. I found one pair of black pants, two cashmere
sweaters, and five blouses that I actually liked (three white, one
red, one black), which was a pretty odd thing because I usually can’t
find anything with clean and simple lines. Anyway, now my wardrobe’s
kitted out with more long-sleeved shirts suitable for the workplace,
and planning a week of clothes should be much easier.

I also picked up a set of fuzzy pink pajamas. Yay!

Random Emacs symbol: nntp-via-telnet-switches – Variable: *Switches given to the telnet command `nntp-via-telnet-command’.

Weekly review

November 4, 2007 - Categories: weekly

From last week:

Dogear podcast due Nov 3 DONE
Client project? WAITING
2000 more words in Emacs-related blog entries WHIFFED =(
Go to DemoCamp, reconnect with people DONE – Fun!
Request papers needed for permanent residency application DONE

Other stuff: submitted two abstracts for the Technical Leadership
Exchange, had two somewhat tense conversations but still very much
loving conversations with parents, and did some shopping.

Little work on Emacs, aside from a few things I did on Org to make it
easier for me to keep track of my work. This was the first week I
spent using Org to organize my work tasks (and timing it, too!), and
that’s been going well. It’s good stuff. Other than that, little
progress on the book.

Most of the weekend was taken up by family stuff. I also spent five
hours shopping, which was much longer than I expected but which did
help me fill out a two-week wardrobe. This might simplify the process
of getting out the door in the morning!

I’m a little anxious because I’m supposed to go to an
infrequently-scheduled orientation course sometime soon, but I haven’t
received the notice or anything. To err on the side of safety, I’ll go
up to Steeles tomorrow and call the HR person as soon as I get there.
I can always work from there.

I’m also planning to take care of some errands like picking up my
convocation tickets, getting passport pictures taken, and sending off
my visa application and RRSP forms. The convocation tickets need to be
picked up during business hours and I should do that sometime this
week to avoid line-ups. I’ll work in the evening to make it up. I need
to find out the proper procedure for sorting out schedule. Maybe

One of the things I did well this week was planning and tracking my work day.
I’m happy with that, and I’ll continue to tweak it.

One of the things I want to do better next week is sorting out these
numerous little gremlins that have crept into my system. The little
quirks are really starting to bother me. If it means doing a reinstall
now that I’ve figured out what little things help me be more
productive, so be it. I don’t think I’ll need to go to that length,
though. I do need to follow up about Dogear, because I’m _really_
missing it. =)

Another thing I want to improve on is keeping track of food and
left-overs. We had an incident with green wontons. =( Fortunately,
none of them were eaten – W- warned me in time.

Goals for next week:

  • Attend newbie orientation at IBM, or find out if it’s been rescheduled.
  • Plan Activities screencast, write script, and make storyboard.
  • Go through one [email protected] class.
  • Set up my RRSP.
  • Apply for Canadian visa.
  • Donate to Ateneo, finally (may end up giving in and doing this through Ayala Foundation if that’s easier; can look for a cheaper way next time).
  • Cook food instead of just letting W- have all the fun.
  • Consume all leftovers before they go bad.

On Technorati:

Random Emacs symbol: w3m-ccl-get-ucs-codepoint-with-emacs-unicode – Variable: CCL program to convert multibyte char to ucs with emacs-unicode.


November 6, 2007 - Categories: cooking

I’m halfway through my fourth week of work, and I’ve packed lunch
practically every day. It’s starting to become a comfortable routine.
Lunch is fun and healthy: a sandwich or wrap, a banana, an apple, and
maybe a few cookies and some chocolate. Grazing throughout the day
helps me stay alert, and I haven’t experienced the mid-morning slump
since I started. The Innovation Centre has a toaster oven, too. I
haven’t taken advantage of that yet, but I’m looking forward to toasty
sandwiches once I finish the tortillas. I’ve used the microwave to
reheat stuff, though. =) Happy!

Today my brown-bag lunch helped me help one of my teammates. He’d
skipped lunch because of several conversations, and he was really
hungry by the time we got to our meeting. I offered him a banana and a
bar of chocolate. He accepted the banana and snacked on it quickly.
Next time this happens, I’ll remember to offer the granola bar I keep
in my purse for emergencies. I’m glad I brought a lot of food. It’s
great having an opportunity to be nice. =)

How can I make this even more wonderful? I’m tempted to try more
make-ahead stuff. That would make it easier to get out the door in the
morning. Toasting would also be fun. I also want to look for more
lunch favorites. Maybe I’ll try making empanada…

Planning my career – first stages

November 7, 2007 - Categories: career

It’s much easier to act than it is to react, and it’s less stressful
too. When you have goals and clear ways to work towards them, other
people tend to go along with the suggestions.

My job is to make my manager and my team members look good. That means
understanding the pressures they’re under and helping them meet those
expectations while making the best use of my talents. It’s a good
thing my goals are flexible

So, where do I want to go?

I want to gather, refine, document and spread good practices around
Web 2.0 and other collaborative technologies. That’s one of my
medium-term goals. Because the market is still emerging, I need to
make my own rain. If I can do that part effectively, then projects
that fit my interest in that will flow into the pipeline over the next

I also need to develop skills in an area that my department
specializes in. This reduces the pressure on my manager and makes him
look good. If I can do it in a way that also helps me advance to my
own goals, all the better. Portal seems to be the best fit, because it
naturally leads into Web 2.0. I need to find out how to get started
with that. I want to look at the jobs that I’m not currently qualified
for, to give me an idea of which skills are in demand. This covers my
short-term career planning.

And I still want to do my book and have a good home life. Tall order,
but it can be done.

So, what can I do to make this easier? Now that I’ve got my goals
straight, it’ll be easier for me to prioritize my day-to-day
activities. Because I’m doing a lot of things, time spent “sharpening
the saw” becomes even more valuable. I need to know and use whatever
tools and practices that can save me time. I need to continue
reflecting on and incrementally improving the way I work. That’s the
best way to keep it manageable.

Let’s see how this goes. =)

Random Emacs symbol: utf-fragmentation-table – Variable: Char-table normally mapping non-Latin mule-unicode-* chars to iso-8859-*.

Setting up appointment reminders in Org

November 7, 2007 - Categories: emacs

Although the agenda view is very handy, it is generally not a good
idea to check the agenda view every three seconds to see if you have
upcoming appointments. You can set up Org to use the Emacs appointment
reminder system, which can pop up a reminder buffer before your
appointment or display a reminder in the modeline.

org-agenda-to-appt scans all your agenda files for appointments for today.
The code for org-agenda-to-appt can be found in org.el. It’s marked
experimental, so future versions may not include it. If you do not
have org-agenda-to-appt, add the following to your ~/.emacs:

;; Make appt aware of appointments from the agenda
(defun org-agenda-to-appt ()
  "Activate appointments found in `org-agenda-files'."
  (require 'org)
  (let* ((today (org-date-to-gregorian
		 (time-to-days (current-time))))
	 (files org-agenda-files) entries file)
    (while (setq file (pop files))
      (setq entries (append entries (org-agenda-get-day-entries
				     file today :timestamp))))
    (setq entries (delq nil entries))
    (mapc (lambda(x)
	    (let* ((event (org-trim (get-text-property 1 'txt x)))
		   (time-of-day (get-text-property 1 'time-of-day x)) tod)
	      (when time-of-day
		(setq tod (number-to-string time-of-day)
		      tod (when (string-match
				  "\\([0-9]\\{1,2\\}\\)\\([0-9]\\{2\\}\\)" tod)
			     (concat (match-string 1 tod) ":"
				     (match-string 2 tod))))
		(if tod (appt-add tod event))))) entries)))

Load today’s appointments every time you start Emacs by adding the
following to your ~/.emacs:


or call it interactively with M-x org-agenda-to-appt.

If you delete an appointment from your Org agenda file, the
corresponding alert is not deleted. To delete the appointment, use M-x
appt-delete and select it from the list.

A better way to keep your appointment list clean would be to remove
all the appointment entries before calling org-agenda-to-appt. Add the
following to your ~/.emacs to do so:

(defadvice org-agenda-to-appt (before wickedcool activate)
  "Clear the appt-time-msg-list."
  (setq appt-time-msg-list nil))

To learn more about configuring the Emacs appointment reminder system,
check out the Emacs manual.

On Technorati:

Random Emacs symbol: ibuffer-mode – Function: A major mode for viewing a list of buffers.

Emacs in the news

November 8, 2007 - Categories: emacs

I am not happy. Well, mock-unhappy. I’m fine, but mock-peeved.

The December 2007 issue of the Linux Journal has an article on turning
Emacs into a PIM using Org, and I didn’t write it.

Okay, I *am* happy that somebody else is getting the message out, but
STILL. <laugh> I had a lot of fun writing the Emacs and Planner
article for Linux Journal before, and I wish I’d made the time to
write another article. It’s a good article, though.

NOTE TO SELF: That’s it, I’m waking up *really* early in the morning
to work on the book.

I may have a non-Emacs article idea or two in my blog. For example, I
now have two years of personal financial data in Ledger, and I’ve done
some cool things with Gnuplot. I can write that one up.

Also, timeclocking. I should be able to make pretty graphs from Org,
too. Hmmm. That sounds like something that would be fun to hack.

Then there are little tips, too.

And there’s analyzing Facebook data and making a Flashcard application, again in Emacs.

<steeples fingers> Hmmmm. How to squeeze more writing time into
my day… <taptaptap>

On Technorati:

Random Emacs symbol: gnus-emphasis-underline-italic – Face: Face used for displaying underlined italic emphasized text (_/word/_).

Kaizen: Tweaking my schedule

November 9, 2007 - Categories: kaizen

What’s the best way to spend your day?

Today I experimented with my schedule again. Instead of waking up at 6
and heading to work early, or waking up at 7 and heading to work on
time, I woke up at 5:30, spent some time working on my book, and then
started work. It helped that I worked from home, too. It was just a
matter of switching to my work context at 9, and I hit the ground
running because my brain was warmed up and already in creative mode.

How can I improve this? I’m going to try waking up even earlier. I’ll
move it gradually, so tomorrow I’ll try 5:15. I hope that this will
translate into more creative time.

On Technorati:

Kaizen: relentless improvement. Making life better one day at a time.

Other stuff

November 9, 2007 - Categories: life

I like working from home. I set up my work laptop together with my
personal laptop as something of a dual monitor setup. I kept a pitcher
of water close by, and I stayed well-hydrated. The programmed breaks
that help me maintain energy throughout the day were suddenly more
productive. Instead of stretching and walking around the office for
three minutes every hour (to prevent RSI and maintain my energy
level), I did jumping jacks and pushups and step-ups. Try doing that
at 120 Bloor!

Another thing that worked out well was working longer hours during the
week in order to end Friday earlier. I needed to pick up my
convocation tickets during office hours, so I worked late during the
first part of the week.

I was thrilled to have a conversation with a potential mentor, too.
More about this soon!

And we baked tonight, too. I made pizza with bacon and green pepper,
W- made a calzone with three cheeses and olives. The calzone was
*gorgeous*. The sprinkled dried oregano contrasted beautifully with
the gradients of the golden crust, while the highlights and shadows
emphasized the fluting along the edges. Unfortunately it… err…
disappeared before we thought of taking pictures of it. ;) We’ll just
have to make it again!

Wonderful, wonderful day.

Random Emacs symbol: c-file-style – Variable: Variable interface for setting style via File Local Variables.

My worrying is useless

November 10, 2007 - Categories: emacs

I came across this beautiful quote from Anne Patchett’s memoir “Truth
and Beauty” on the Happiness Project blog:

“I knew then it was just too enormous for me to manage and that
worrying about her would swamp me. If I was swamped by worry, I would
be useless to her. It was even possible that I would desert her, and
that was the thing that could never happen. I decided that night I
would take all the hourts of my life that could so easily be spent
worrying and instead I would try to help her.”

That’s it. That makes sense. I can’t afford to feel all down about
myself, boohoo, I’m living in two worlds and all of that. Not when I
can take that time and that energy and do something *wonderful.*

Random Emacs symbol: planner-multi-read-name-multiple-prompts – Function: Read multiple pages, completing based on FILE-ALIST.

Kaizen: meetings

November 12, 2007 - Categories: kaizen

I attended my first client meeting today, and I now have a clear idea
of what I need to do over the next few days. Yay! I’m going to try for
a compressed workweek, working all 40 hours before Friday so that I
can spend time with my mom when she comes in for my convocation.

What can I do better next time? Next time I attend a meeting, I’ll
print out copies of the agenda items for myself.
I was lucky today
because the document people printed out had been updated, so new
copies were made during the meeting. Writing on paper is so much
easier than working on the computer, especially in a meeting. I also
enjoyed participating in the meeting. I thought I might feel
intimidated because I’m new to the project, but I found that I still
had useful things to add. =) Yay.

In other news, I cooked mushroom risotto for the very first time
today. I liked it! =) Happy happy happy.

Random Emacs symbol: inferior-lisp-program – Variable: *Program name for invoking an inferior Lisp in Inferior Lisp mode.

Manage from your calendar, not from your task list

November 22, 2007 - Categories: productivity

While reading other blogs, I came across this nugget: Manage your
life from the calendar, not the to-do list
. Sally McGhee, author
of “Take Back Your Life!” (one of the few Microsoft Press books on my
bookshelf), has some pretty good ideas there.

What does managing from the calendar mean? Well, I’ve got a large and
growing task list, just as everyone does. But I have to think about
that task list in terms of _my_ priorities and in terms of _my_ time.
I have just the same amount of time as everyone else does, and I can’t
add to it. So one of my most important tasks is to choose which tasks
I want to spend time on, and that depends on the kind of person I want
to become. What tasks do you spend your time on?

Something to think about while you check out the rest of the great interview post on Matt’s Idea Blog.

First accumulated snowfall

November 22, 2007 - Categories: canada

When I opened the door this morning to freezing rain and accumulated
snowfall on the ground, I nearly turned around and walked back in. W-
gave me a big warm hug, which is good because sometimes I have very
few other reasons to put up with this weather.

The subway was packed packed packed, and I left my lunch bag on the
eastbound train. =(

Time to dust off the parkas and bring out the toques. Winter is here.

Not everything is gloomy. I’m looking forward to toasting my toes near
the fireplace and warming my lap with, well, a computer. ;) It’s time
to bake lasagna and make hearty soups, time to fill the house with the
comforting aroma of chocolate chip cookies when J- is out and peanut
butter cookies when she’s in. I’m looking forward to tobogganing down
the slopes of High Park, too. I guess that’ll be my winter
sport—that, and enjoying hot chocolate!

I still think the Philippines does Christmas better, but at least
winter gets a little bit easier to manage each year…

I really want to work out this working from home bit.

Random Emacs symbol: apropos-mode – Command: Major mode for following hyperlinks in output of apropos commands.

Another day, another blog

November 24, 2007 - Categories: emacs

Starting yet another blog because I want something that I can update and cross-post from anywhere and I haven’t quite set up Planner on my work laptop or web server yet. Will I be able to make WordPress dance, or will I run back to my comfortable Emacs setup? Stay tuned. ;)

Career statement: Helping companies help people connect

November 24, 2007 - Categories: career

Here’s my first attempt at a career statement which captures why I’m at IBM:

Helping companies help people connect

What does that mean?Let’s look at the core idea: to help people connect. I want to help people connect with the people they work with and with the people they would never have gotten to know otherwise. I want to help people expand and deepen their networks. In the process, we will make the world smaller. It takes only a few random links to bring different parts of the world together.

Why are these networks important? Because opportunities flow through networks. Conversations are rooted in networks. Ideas begin in networks. I believe that there’s a lot of untapped potential for great ideas, teamwork, and innovations in the worldwide conversations that we haven’t yet had. I believe that we are going to need that potential to face the accelerating rate of changes and challenges that my generation is going to inherit.

I’m not just talking about connecting people with other people in the same organization. I want to connect people with other people who can help make good things happen, no matter where they are or who they are. I want to connect people with the ideas and tools that can help them make good things happen. I want to help people connect with themselves, too: that rich, unconscious collection of experiences and insights and potential that needs to be shared in order to be understood.

I want to help people connect, but as much as I enjoy building these links one at a time, I don’t have enough lifetimes to do everything. So I want to help companies help people connect. I am part of a very big thing, too big for me to do by myself. I want to learn how to help companies learn how to help their people connect with each other and with people outside the company. By refining and sharing best practices and tools for connecting, I want to help companies help people connect the dots. Maybe the person who would never think of giving a speech in front of a crowd might share a tip or a bookmark to a great resource. Maybe the person who would never think of going to a networking event might make a great connection online thanks to a blog entry or a forum post. And maybe these new connections will help bring us this much closer to the ideas and innovations we need in order to keep moving forward.

That’s what I care about. That’s why I’m here: helping companies help people connect.

(Stay tuned! I just realized that I’ve been thinking about some things all wrong…)

Sent the first chapter of Wicked Cool Emacs

November 25, 2007 - Categories: emacs

Operating on the principle that it’s better to have a terrible first
draft than none at all, I’ve sent 21 pages to my editor at No Starch
Press. =)

The past two weeks were incredibly packed, but I survived them and and
seem to be getting the hang of working on the book. It’s incredibly
fun. Emacs is such a crazy subject to write about. I mean, come on…
Mayan date conversions? Emacs geeks! I’m sure that if I dug a little
deeper, I’d figure out how to help W- keep track of his parents’
Chinese birthdays. Now that would be useful! <laugh> Writing
about Emacs gave me an excuse to explore. There’s a lot in here that I
haven’t tried before, and you know what? It’s pretty darn cool.

I was surprised to find that I had lots of material already. It didn’t
seem like it when I was writing, but the page count just kept growing
and growing as I assembled the chapter. I’m not too happy with the way
I wrote it, because it felt a little drier than I’m used to. I should
probably browse through No Starch Press books and see which books in
that line have been written really well so that I have role models.

I’ll tweak the draft a little bit more and send it out to beta readers
tomorrow. =)

On Technorati: WickedCoolEmacs, ,

Random Emacs symbol: narrow-to-region – Command: Restrict editing in this buffer to the current region.

Weekly review

November 25, 2007 - Categories: weekly

I spent Monday to Wednesday at the new hire orientation at IBM. It was
a terrific orientation that not only showed me some of the resources
available, but also the deep values that run through the company and
the big picture of our unit’s strategy. IBM’s an amazing company and
I’m glad to be part of it. =)

Thanks to that new hire orientation and another self-paced leadership
course I took on Saturday, I’ve learned a little more about my career
passion: helping companies help people connect. More on this
later. =)

I also continued working on the shopping site project I started on
last week. I worked on user stories. I didn’t have a client advocate
around as recommended by the Extreme Programming methodology, so I
based the stories on what I’d learned at the meeting and identified
some areas for which we’d need further clarification. I was pleasantly
surprised to find that I had no problems taking that task and figuring
out what to do. Maybe I have managed to pick up some experience
and confidence along the way.

I’m starting on another project next week. For this, the project lead
specifically requested me. Not only that, she had to talk to my
manager and my team members in order to get me into the project. Wow!
I’m really flattered. I’m a fan of hers, and I’m looking forward to
working with her on this project.

It’s not all work work work, mind you. ;) Today I changed my first
tire! In fact, I changed two tires, and then W- did the other
two. PROPER. =) I had an “I rock!” moment there. And it was fun going
from grungy clothes and grime on my hands to being all dressed up for
an opera fundraiser. W- and I enjoyed some beautiful opera
excerpts from La Boheme, Un ballo in maschera, and
Madama Butterfly at the
Toronto Opera Repertoire community
opera fundraiser this afternoon. I’m looking forward to the opening of
the opera season.

I sent off the first chapter of my book, too. Yay!

Goals for next week:

  • Work on the second project
  • Contribute to the wiki for the practice at IBM
  • Outline the second chapter of my book
  • Make my first RRSP contribution! =) (Hadn’t realized I could’ve started much earlier… Better now than later!)
  • Figure out what to do about my personal blog / mail – it’s still much easier for me to blog in Emacs, even with WordPress and ScribeFire… <laugh>

Random Emacs symbol: eshell-directory-files-and-attributes – Function: Make sure to use the handler for `directory-file-and-attributes’.

Last week

November 25, 2007 - Categories: weekly

And if you’re wondering what happened last week and why I hadn’t
gotten around to writing a weekly review – my mom was in town for my
convocation! =D She flew into Toronto on Thursday with Tita Gay, a
family friend. They attended my convocation on Friday morning, saw the
UToronto lab and IBM at 120 Bloor East, and met about two dozen of my
favorite favorite favorite people in Canada. She flew out on Sunday,
which was far too early according to everyone concerned, but such is
life. I’m looking forward to seeing her and my dad and my sister again

Random Emacs symbol: ring-insert – Function: Insert onto ring RING the item ITEM, as the newest (last) item.

Feedwordpress and Planner blog = awesome

November 25, 2007 - Categories: emacs

I’ve been thinking about adding public comments and other nifty
features to my Planner blog for the longest time. It would be nice if
people could search and navigate through my blog the way they can
with, say, WordPress blogs. I thought about switching to WordPress,
but Emacs is just so much handier for me.

Today I had a thinko – why not find a way to pull entries from my
Emacs Planner blog feed into WordPress? I knew there had to be
a plugin to do this. Sure enough, a quick search found
which took me only a few minutes to install. I don’t know why I hadn’t
made that connection before. ;) I mean, spam blogs use things like
this all the time.

ANYWAY, this neatly solves my problem. I can still blog within Emacs
with all the syntax and support I’ve gotten used to, but I can now
provide a different interface for people who like the whizbang
Wordpress stuff. =)

Watch out for more blog craziness in the future. ;)

On Technorati: , , ,

Yay, I got to talk to my dad today

November 25, 2007 - Categories: family

Kathy helped my dad set up Skype and video, so I got to chat with him
today too. Happy happy happy! He’s really doing well at the office,
having taken on more management responsibilities while my mom’s on
vacation. I’m proud of him. =)

On Technorati: ,

Okay, we’re in business – 5 years of my life in WordPress

November 27, 2007 - Categories: blogging, emacs, planner

After a fair bit of Emacs hacking to export all my blog entries from Planner into RSS and then import that into WordPress using Feedwordpress, I’m happy to present this WordPress view of my blog. It should stay relatively in-sync with my Emacs blog. Emacs still gives me a friendlier and more powerful interface for blogging, but at least this way you get to use all the fancy stuff for reading blog entries. =)

On Technorati: , ,

Random Emacs symbol: internal-set-alternative-font-registry-alist – Function: Define alternative font registries to try in face font selection.

I’m too lazy not to program

November 28, 2007 - Categories: emacs

Yesterday, I imported five years of blog posts into WordPress through
RSS. This would have been _painful_ if I wasn’t comfortable with
programming. With 4587 posts in 2596 files, I wouldn’t have even
thought about copying them over manually. Instead, I would have just
started with a clean slate. I didn’t think anyone’s really going to
want to go back and see everything I’ve written on my blog. ;) Who was
going to notice?

But five years of blog posts—reflections, ideas, notes, interesting
links—might still be worth something, so I decided to give it a shot.
Initially, I wrote a function which visited files, searched for notes,
and added the note to one big RSS feed. However, this slowed down too
much when I hit megabytes, so I changed it to dump each note to a
file in a directory.

;(sacha/planner-dump-rss "~/public_html/blog-dump/" nil nil)
(defun sacha/planner-dump-rss (directory from to)
  (let ((pages (planner-get-day-pages from to))
        (planner-rss-feed-limits nil)
        (planner-rss-initial-contents "")
    (while pages
      (condition-case err2
            (planner-find-file (caar pages))
            (setq buffer (current-buffer))
                  (goto-char (point-min))
                  (while (re-search-forward "^\\.#\\([0-9]+\\)" nil t)
                      (condition-case err
                            (let ((inhibit-read-only t)
                                  (file (concat directory
                                                (caar pages) "-"
                                                (match-string 1))))
                              (planner-rss-add-note file)
                              (find-file file)
                              (save-buffer 0)
                              (kill-buffer (current-buffer))))
                         (message "Problems processing note on %s: %s"
                                  (caar pages)
                                  (error-message-string err)))))))
              (kill-buffer buffer)))
        (error (message "Problems processing %s: %s"
                        (caar pages)
                        (error-message-string err2))))
      (setq pages (cdr pages)))))

I then concatenated all of these files using

cat header 200* footer > dump.rdf

This file was still much too big, so I manually split it by year,
copying and pasting text into different files. I used to check for errors. After Feedvalidator
verified that the files were all valid RSS, I tried to import them
into Feedwordpress. Nope, still too big. I needed to trim them to
around 400k, so I used the following code on the server:

(defun sacha/split-dump ()
 (goto-char (min 400000 (point-max)))
 (let ((counter 0)
 (base-name (file-name-sans-extension buffer-file-name)))
 (while (not (eobp))
 (re-search-backward "<item>") 
 (kill-region (match-beginning 0) (point-max))
 (insert "</channel></rss>")
 (save-buffer 0)
 (find-file (format "%s%d.rdf" base-name counter))
 (goto-char (point-min))
 (insert "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<rss version=\"2.0\">
    <title>M-x plan :: sachachua's blog</title>
    <description>Sacha Chua's blog about Emacs, personal information management, open source, and random stuff</description>")
      (setq counter (1+ counter))
      (goto-char (min 400000 (point-max))))))

This program looks complicated, but it really isn’t. In fact, I could
have probably done something just as powerful with keyboard macros,
not writing a single line of code. But the code was easy to write, and
I figured that I’d keep it around just in case I needed to do
something like this again.

After a little bit of manual tweaking, I got all the entries into .

The ability to write short programs quickly and interactively has not
only saved me so much time, but it’s also made it possible for me to
even _think_ of doing some things. =) I could probably have written
the same snippets in Perl or Ruby, but being able to combine manual
editing and automated operations in the text editor made it just so
much faster. I really like being able to scan back and forth in
buffers easily in Emacs, instead of thinking in terms of
file streams as in other programming languages.

If you work with lots of text, I definitely recommend learning Emacs
Lisp, or whatever language your editor can be programmed in. I started
by reading other people’s source code and the Emacs Lisp Intro and
Emacs Lisp info files. I reread them countless times, picking up a
little more each time I went through. Now Emacs Lisp is one of the
first things I turn to whenever I want to save time doing something
complex and repetitive on the computer, such as adding everyone’s
pictures to a wiki page. (That’s a story for next time!)

Emacs is awesome stuff. More than 20 years old, it’s the most advanced
program I’ve ever used. What makes it special? It’s _definitely_
optimized for the power user, and it provides so many reasons to
become one.

Random Emacs symbol: gnus-summary-goto-last-article – Command: Go to the previously read article.

Lost some comments in the shuffle

November 28, 2007 - Categories: wordpress

One of the downsides of posting code on your blog is that you tend to
confuse your blogging software. In this case, some stray tags that I
used in my RSS dumping code resulted in lots of errors in my blog. In
a tizzy over the bug, I forgot about the first two public comments
ever posted on my WordPress blog, and I accidentally deleted them
while trying to refresh my blog posts. This is a pity, as they were
particularly nice comments too.

Ah, life. That’s okay.

Just wanted to let you know what happened to them. And kids, if you’re
going to do this kind of shuffling around… save your data somewhere!

On Technorati: ,

Random Emacs symbol: Custom-goto-parent – Command: Go to the parent group listed at the top of this buffer.

Learning how to tell stories

November 28, 2007 - Categories: book

Thanks to Michael Nielsen and Jennifer Dodd for highly recommending
Made to Stick, a great book about storytelling. It arrived at the same
time as The Elements of Persuasion, which made a terrific
complementary read. Book notes to follow. =)

On Technorati: ,

Random Emacs symbol: radians-to-degrees – Macro: Convert ARG from radians to degrees. – Variable: Radian to degree conversion constant.

Add joy to your job title

November 28, 2007 - Categories: career

Over at Matt’s Idea Blog, Matthew Cornell has listed some of the
coolest job titles he’s seen. Not only that, he links to the people who’ve given themselves those job titles. Check those out for inspiration, and add joy to your own job description. Passion Catalyst! Continuous Self-Improvement Guru! =) How can you not want to get to know people like that?

What’s my title? I’m somewhat in between titles. I’m moving away from being a tech evangelist because it doesn’t capture my focus on processes and practices. I help companies help people connect. I want to get really good at spotting and telling great stories, refining and sharing best practices, and exploring new tools and new ways of doing things. I want to help companies enable more connection, more conversation, more collaboration… and more innovation. And I want to do all that and make it _fun._ Fun the way discovering how small the world is when you discover that the other person in the elevator with you also reads tons of books and you end up chatting about great reads all the way to the cafeteria and all throughout lunch. Connection is fun. Networking is fun. I want to make it easy.

Connection catalyst?

On Technorati:

Random Emacs symbol: calendar – Command: Choose between the one frame, two frame, or basic calendar displays. – Group: Calendar and time management support.

Optimizing your action loop

November 28, 2007 - Categories: emacs, org, planning

If you want to be radically more effective at doing things, get better
at deciding what to do. Few things are more personal than figuring out
what you’re going to do with your life: at this moment, for this day,
for the next few years. Few decisions are made as frequently. If you
can improve the way you make that decision, you’ll reap the benefits

We’ve all developed some ways of coping. We all have our quirks.
One of mine is that I can’t settle on one way of planning my tasks.
Some days, I’m all strategic and top-down, connecting my life goals
with the tasks I plan to do that day. Other days, I just need to get a
crucial task out of my head so that I don’t forget it while hunting
for my keys. Some days, I block out time to work on my priority
projects. Other days, I have to work around other people’s schedules,
so it’s all about cramming whatever I can into whenever I’ve got.

Now think of all the other geeks out there, and you’ll understand how
to-do list programs might outnumber programmers. Despite the
collective efforts of companies like Microsoft and IBM, despite the
coolness of Web 2.0 services like Remember the Milk, despite the
renaissance of paper-based planners such as the Hipster PDA, I have
never found anything as powerful as a plain text file in terms of
personal productivity: a plain text file with shortcuts that are
form-fitted to the way I work.

Here’s what my workday looks like:

  • I do a _quick_ scan of e-mail to see if any tasks have come in. I copy those into my inbox. I resist the urge to reply right away, as that turns e-mail into a huge timesink.
  • 5-10 minutes are enough to schedule and prioritize my tasks for the day. I see both my calendar and my task list at the same time, and I can estimate my load. I leave plenty of space for things that come up. I feel better when I finish my scheduled tasks and then cross off a few more, than when I don’t finish everything I planned and I have to postpone tasks to the next day.
  • I work on my highest-priority task for the day.
  • _Then_ I respond to e-mail.
  • Then I work through everything else in roughly 45-minute chunks, with some downtime in between to recharge my brain and take care of routine tasks.
  • My computer is set up to encourage me to take 10-second breaks every 5 minutes and 2.5 minute breaks every hour. The numbers are arbitrary, but the result feels good. This works out even better when I work from home: 2.5 minutes is just enough time to clear the sink, or to empty the dishwasher, or to start some tea…

A plain text file keeps me all organized, thanks to the Org module for
the Emacs text editor. The text file shows me what’s on my horizon and
what’s on today’s schedule. The text file helps me deal with
interruptions because it keeps track of what I was working on and what
I need to do.

The text file even helps me learn more about myself and my skills
through detailed time-tracking. Every time I start a task, the clock
starts. Every time I mark a task as waiting or done, the clock stops,
and the elapsed time is stored in the task. This helps me tune my time
estimates and report time at the end of the week.

And it’s just amazing. I don’t feel that I waste a lot of time. I have
a sense of progress. I can see the big picture, and things almost
never fall through the cracks. (When they do, that’s because I hadn’t
gotten around to putting them in my text file yet.) Sure, this still
doesn’t give me enough time to do everything I want to do, but I don’t
feel stressed out about it because I’m working well. From now on, most
of the performance improvement will come from improving my skills and
learning more.

If I can do this much as a new hire with a pretty nifty task
management system, think about what you can do with all your
experience. What _could_ you do if you spent less time fighting with
your memory or with your TODO system, and more time making the
difference you want to make?

On Technorati: , , , , ,

Random Emacs symbol: edebug-stop – Command: Stop execution and do not continue.

Prying eyes privacy

November 29, 2007 - Categories: emacs

Ted Roden uses ROT13 to protect his secrets from prying eyes, which
comes in pretty handy when you’re keeping gift lists on a shared

My boyfriend would probably be stumped by that for all of two seconds.
See, my significant other is a geek, and can spot ROT13 a mile away. I
wouldn’t be surprised if he could decode them in his head, as we used
to do cryptograms over meals. Morse is also easy to recognize and
break. If he were really determined to find out my secrets, that
wouldn’t help at all.

Nothing but strong encryption will do. Fortunately, Emacs makes this
very easy. I keep sensitive account information in a text file called
“numbers.gpg”. Following the instructions on , I’ve set up
automatic GnuPG encryption for files ending in .gpg. When I open the
file, I’m prompted for my passphrase. When I save the file, the data
is encrypted again.

If I want to encrypt just bits of a file, like the way I sometimes do
encrypted sections in blog entries, I select the region and use M-x
pgg-encrypt-region. This replaces the text with something like this:

Version: GnuPG v1.4.6 (GNU/Linux)


Granted, my secret key is on the hard disk, but I use a strong
password for that one.

All of this is overkill for holiday shopping lists, of course, as my
boyfriend would never think of snooping in my files anyway. But hey,
it’s always a good idea to keep some parts of your life hush-hush. If
I were _really_ paranoid, I’d think about something like OrdoEmacs in
Cryptonomicon. (Of _course_ it had to be OrdoEmacs. OrdoVi would just
be an abomination. ;) )

Ah, Emacs. You try doing _that_ in Microsoft Word! ;)

On Technorati:

Random Emacs symbol: eshell-deferrable-commands – Variable: *A list of functions which might return an ansychronous process.

With five years of blog posts, there’s a lot to discover

November 29, 2007 - Categories: blogging, wordpress

Okay, I have a seriously souped-up blog now.
Enjoy the random posts and the retrospectives on the WordPress
interface to this blog. If you click on a post, you’ll see links to
other posts I made on the same day in different years.

Why am I doing this?

Might be a little crazy to think about it, but I know I’ll get a
lot out of seeing where I’ve come from.
If I stumble across
questions I’ve asked or things I’ve reflected on, maybe I’ll stop and
think a little. If I can make more of my blog content available to
Google, maybe I’ll come across my old notes when I’m searching
for something I don’t even know I knew before. And who knows? Maybe
I’ll even figure out how to get this nicely sorted into a printed book
for my mom. ;)

What about other people? What would you get out of this? Maybe
random clicking around will help you get to know me.
Maybe you’ll
like the things you read, maybe you won’t. It’s a chance I take. But
if you’re randomly clicking through slices of my life, you’re probably
friendly. =) And who knows, maybe one of these entries will make
you think,
and that thought will turn into other thoughts, and
then you come up with a wonderful idea. Randomness is like that.

And if, while reading, you should happen to stop on an entry that
catches your eyes, you may notice how different things are year to
year, and how much stays the same.


I wonder what the next five years will be like. Let’s find out!

On Technorati: ,

Random Emacs symbol: gnus-inhibit-mime-unbuttonizing – Variable: If
non-nil, all MIME parts get buttons.

Workrave, or why frequent breaks help you go full speed ahead

November 30, 2007 - Categories: productivity

If you don’t want wrist pain or eye strain to force you off the computer later in life, use a break reminder program to help you remember not to push your limits.

Every three minutes, a little dialog pops up on my laptop and reminds me to stretch and refocus my eyes for ten seconds. Every hour, the same program reminds me to take a two and a half minute break—and even helpfully suggests some exercises I can do. I usually ignore those suggestions in favor of quick chores (a sink of dishes, a stack of clothes) that get me out of my chair and doing something just as productive.

I came across Workrave ( while looking for a time-out software for my work laptop. I had tried a break reminder tool on Mac OS X before, and I remembered liking it even though it always managed to catch me mid-keystroke. Workrave was highly recommended and ran on Microsoft Windows, GNU/Linux, and BSDs (probably including Mac OS X), so I tried it out.

I found that the frequent breaks help me stay focused and active throughout the day. The breaks not only give me a chance to stretch and rest my eyes, but also helped me remember to stay on task by helping me catch myself when I found myself getting distracted. The breaks help me remember to check posture, too. It’s easy to slip into a slouch while working. If you look around an office, I’m sure you’ll see lots of people hunched over their computers. When I don’t take the time to stretch and sit up straight, I find myself tired and sore in the evenings. When I do, I feel more upbeat. Simple decision, eh?

I also use the breaks as an opportunity to remember to drink more water. This is something I tend to forget during particularly intense programming or writing sprints. A few years ago, I collapsed due to dehydration, and I was taken to the emergency room. I had simply forgotten to drink water in addition to what I took in at meals. Since then, I’ve been a lot more careful about water intake. I find that I do better when I have at least a glass and preferably a pitcher of water close at hand. When Workrave reminds me to take a break, I sip some water too. When it’s time to take a longer break, I get some more water and take care of other matters along the way.

It’s strange, but slowing down helps you get further. Break reminding software is Good Stuff, and I strongly recommend that you try out something like Workrave. Time Out for Mac OS X looks pretty good, too. Whatever it is, try it and see if it works for you. Tell me what you think of these breaks, and share your tips!

(Want more ideas for slowing down and working smarter? Grab this book at your library: Cool Down: Getting Further by Going Slower)

On Technorati: ,

Random Emacs symbol: backward-up-list – Command: Move backward out of one level of parentheses.