January 2008

Working on section on Org and projects

January 1, 2008 - Categories: life

Just to say that I’m alive and writing. I’m at 1400 words or so for the section on Org and projects, and there’s just a little bit more to write. I’m pretty happy with the quality of my writing today, too.

In other news, I talked to two people I haven’t talked to in a while, and W- and I shoveled some neighbors’ walks. =)

I also spent some time tweaking my accounting. It’s true. Personal finances are BORING once you have a good setup. There’s only so much planning I can do. There’s also only so much analysis I can do, although it was fun figuring out how to get a PivotTable that can help me compare my expenses over the last three years. I’m looking forward to getting more data and reaching a few more milestones, but that’s about it for now… =)

Projects in Emacs Org

January 2, 2008 - Categories: emacs, org, wickedcoolemacs

Introduction

Organizing your tasks into projects can help you plan ahead, track
your progress, and stay motivated. Working from a project list allows
you to plan your day or week instead of just reacting to other
people’s requests. Keeping your projects and tasks in Org makes it
easier for you to review your completed tasks and plan the next step.
If you include some text describing why you want to do the project and
what your intended outcome is, this can help you stay motivated
throughout a long project.

Projects can take a single day or several years. They can be large
projects involving lots of other people and resources, or small
projects that you do on your own. Projects may involve a handful of
separate steps or a hundred things you need to do in order to achieve
your goal. The important thing is that there is more than one step.
If you organize your task list so that related tasks are together,
then you’ll find it easier to get a sense of where you are, where
you’re going, and what you need to do next.

In this section, you will learn how to:

I’ll assume that you’re using Emacs 22, and that you’ve set up Org
using an ~/organizer.org agenda file and the basic configuration
suggested in either “Org and GTD” or “Org as a Day Planner.” I’ll also
assume that you’re familiar with switching between the Org agenda view
and the Org organizer file, and that you’re comfortable navigating
around Emacs.

The examples I’ll use focus on yearly goals. You might also have
short-term projects or long-term plans. Feel free to adapt the
examples as needed.

Open your ~/organizer.org file. If you’ve collected your tasks as
suggested in the previous sections on Using Org as a Day Planner or
Using Org for GTD, your ~/organizer.org file might look something like
this:

 * Inbox
 ** TODO Read Emacs Lisp intro
 ** TODO Write yearly review
 ** TODO Exercise
 ** TODO Browse the Emacs Wiki

Create new top-level headings for this year’s goals or the projects
that you’re working on. You can create a top-level heading by
typing * and the heading, like this:

 * Learn more about Emacs
 * Go on vacation
 ...
 * Inbox
 ** TODO Read Emacs manual
 ...

It’s a good idea to add the projects to the beginning of the file
(before your Inbox) because M-x remember adds new tasks or notes to
the end of the file. If the last major heading as * Inbox, then the
tasks and notes are automatically added to it. If the last major
heading is a project, the tasks and notes may get misfiled.

What are your projects?
Yearly goals? I’ve got twenty-year plans!

If you’re a top-down planner, you’ll find it easy to list your
projects. In fact, you might have a ten- or even twenty-year plan
already written down. You’ll find this section straightforward,
because you’re already used to planning in terms of projects.
Go ahead and adapt the examples to your long-term plans.

Yearly goals? I live day by day!

If you’re a bottom-up planner, you might be giving me a weird look
right now. “Yearly goals? I’m lucky if I can figure out how to get
through the next day!” This section will also show you how to find the
recurring themes in your task list and organize them into projects.
Give project-based planning a try for a month. If this way of thinking
doesn’t work for you, Org will work just fine without projects.

You probably have projects, even if you can’t think of any right
now. Review your ~/organizer.org file. If you haven’t written down
everything you needed to do yet, go through the section on basic
configuration for your planning style (GTD or day planning). Once you
have a list of things to do, you can then review it for big tasks,
related tasks, and other project clues.

Read your tasks and ask yourself the following questions:

Big tasks need to be broken down into smaller tasks anyway, and
organizing them into projects will help you make them more
manageable. You may not want to organize all of your other tasks into
projects. If you can pick some major themes to focus on, though, then
you’ll be able to see how the different things you do are related to
each other, and you’ll be able to think of other ways to work on those
projects. If you’re starting out with project-based thinking, maybe
you can pick three to five projects and try to do a little work on
each of them every day.

If you still don’t identify any projects, that’s okay. You can use Org
as a straightforward task list. Jump ahead to the section on “Tags”,
as you’ll probably find that useful.

On the other hand, if this step turns up plenty of projects, resist
the temptation to over-correct and end up with hundreds of projects. I
find that more than 7 active projects gets hard to manage. Pick a few
main themes that you’d like to work on, and make everthing else
something you plan to do someday.

Project tasks

Creating tasks

Now that you have project headings, think of the next thing you need
to do in order to move those projects forward. If you’ve already
written down those tasks, move them under the appropriate project
heading. If not, type them in.

In order for a task to belong to a project, it needs to be under the
heading and at a lower level. For example, if your project heading has
one star, like this:

 * Learn Emacs

then your TODO headings should have two stars, like this:

 * Learn Emacs
 ** TODO Read the Emacs manual
 ** TODO Read the Emacs Lisp Intro manual (eintr)
 ** TODO Install the Emacs source code

If your tasks are not at the right level, you can add the star
manually by editing the heading. You can also use M-right and M-left
(org-metaright and org-metaleft) while on a heading in order to
promote or demote it, and you can use M-S-right and M-S-left
(org-shift-metaright and org-shift-metaleft) to promote or demote
entire subtrees.

To move tasks up and down within the project, you can copy and paste
the text. You can use M-Up and M-Down (org-metaup and org-metadown) to
move subtrees.

Think of tasks you can do within the next week in order to move each
of your projects forward. Add next actions to all of your active
projects. Creating next actions for each of your projects makes it
easier to remember to keep moving forward.

Organizing tasks

If you have many tasks in a project, you may want to organize them
into sub-projects. For example, you might divide a software project
into components. If you’re starting from scratch, you can create the
project structure by typing in more stars for sub-project
headings. For example:

 * Learn Emacs
 ** Read mail
 *** TODO Choose a mail client
 *** TODO Install and configure the mail client
 *** TODO Send a message
 ...
 ** Browse the Web
 *** Read through the w3m documentation
 ...

You can also demote an existing project into a subproject.
Use M-S-right (org-shift-metaright) on the
current project headline in order to demote it to a sub-project. This
will also demote the tasks within the project. For example, demoting
this:

 * Learn Emacs
 ** TODO Choose a mail client
 ** TODO Install and configure the mail client
 ** TODO Send a message

will result in this:

 ** Learn Emacs
 *** TODO Choose a mail client
 *** TODO Install and configure the mail client
 *** TODO Send a message

Then you can change the heading and add another heading above it, like this:

 * Learn Emacs
 ** Read mail
 *** TODO Choose a mail client
 *** TODO Install and configure the mail client
 *** TODO Send a message

This kind of organization is optional, but it can help you get an idea
of the overall structure of your project. Using different levels
allows you to hide and show groups of headings by pressing TAB on the
heading.

Now that you’ve created your project tasks and organized them the way
you want, it’s time to actually do the work.

Working on tasks

If you use Org as a day planner, you may also want to schedule the
tasks onto specific days with C-c C-s (org-schedule). You can review
your daily or weekly agenda with C-c a a (org-agenda,
org-agenda-list), switching between daily and weekly views with d and
w (org-agenda-day-view and org-agenda-week-view).

You can work with the next actions in the same way you work with other
tasks, rescheduling them or marking them as STARTED, WAITING or DONE
with the keyboar shortcuts introduced in the previous section on Org
and GTD or Org as a Day Planner.

When you finish a project task, think of the next action you can do in
order to move that project forward. If you use Org as a day planner,
schedule the next action onto your calendar as well.

Reviewing projects

You can review your projects by opening your ~/organizer.org and
browsing through the headings. S-tab (org-shifttab) changes the
visibility of headings, so you can see just the top-level headings or
all the details. You can use TAB (org-cycle) on a headline to show or
hide subtrees.

Reviewing a list of projects

If you have many projects, you’ll want a shorter view of just your
active projects. To make it easier to review projects, add a PROJECT
tag to all your active project headlines. You can add a tag by
editing your ~/organizer.org and moving your cursor to the headline
and typing C-c C-c (org-ctrl-c-ctrl-c), followed by the name of the
tag (PROJECT). You can also manually type :TAGNAME: at the end of the
headings, like this:

 * Learn more about Emacs        :PROJECT:
 ** TODO Read the Emacs manual
 ** TODO Read the Emacs Lisp Intro manual (eintr)
 ...
 * Go on vacation                :PROJECT:
 ...
 * Inbox
 ...

You might classify some of your projects as someday/maybe – things
that are nice to think about, but which you aren’t acting on right
now. Tag your inactive or someday/maybe projects with PROJECT and
MAYBE. If you’re editing the ~/organizer.org file, just
add :PROJECT:MAYBE: to the heading. If you’re tagging it with C-c C-c
(org-ctrl-c-ctrl-c), specify PROJECT:MAYBE as the tag.

 * Learn more about Emacs        :PROJECT:
 * Go on vacation                :PROJECT:MAYBE:
 ...
 * Inbox
 ** TODO Read Emacs manual
 ...

Now that you’ve tagged your projects, you can view just your project
headlines with a custom agenda command. Custom agenda views are a
terrific feature in Org, and you can do a lot with them if you know a
little Emacs Lisp. Here’s what you need to add to your ~/.emacs in
order to get a list of your active projects and your someday/maybe
projects:

(setq org-agenda-custom-commands
      '(("p" tags "PROJECT-MAYBE-DONE" nil)  ;; (1)
        ("m" tags "PROJECT&MAYBE" nil)       ;; (2)
        ;; ... put your other custom commands here
       ))

With these two commands, you can quickly review your active and
inactive projects. To jump to a project from the agenda view, move
your cursor to the heading and press RET (org-agenda-switch-to). If
you want to scan through the projects quickly, use f
(org-agenda-follow-mode) in the agenda view to turn on follow mode,
then move to different headlines. Another window will show the
headline at point.

If you review your projects at least once a week, you’ll find it
easier to make regular progress. If you want to combine your
weekly/daily review with your project list, you can do that with
org-agenda-custom-commands as well. Here’s what you’d put in your
~/.emacs:

(setq org-agenda-custom-commands
      '(("p" tags "PROJECT-MAYBE-DONE" nil)
        ("m" tags "PROJECT&MAYBE" nil)
        ("a" "My agenda"                            ;; (1)
         ((org-agenda-list)                         ;; (2)
          (tags "PROJECT-MAYBE-DONE")))             ;; (3)
        ;; ... put your other custom commands here
       ))

This configures C-c a a (org-agenda, “My agenda”) to display your
agenda and a list of your project headings. Again, you can press RET
(org-agenda-switch-to) to jump to a project from its heading in the
agenda view.

Reviewing your stuck projects

You might have forgotten to create next actions for some of your
active projects. Org can help you find projects which don’t have next actions.
You can then decide if the project is complete or if it needs further action.

To list stuck projects, you first need to tell Org what a stuck
project is. The following code defines a stuck project as an active
project (not tagged “maybe” or “done”) that doesn’t have a TODO or
STARTED action, if the body of the project doesn’t contain “*lt;IGNORE>”. Add this to your ~/.emacs and evaluate it:

(setq org-stuck-projects
      '("+PROJECT/-MAYBE-DONE" ("TODO" "STARTED") nil "\\<IGNORE\\>"))

Then you can use M-x org-agenda-list-stuck-projects or C-a a #
(org-agenda, org-agenda-list-stuck-projects) to show only the stuck
projects. Review this list and jump to the headlines.

Want to add that to your custom agenda view? Modify the org-agenda-custom-commands value in your ~/.emacs to be like this:

(setq org-agenda-custom-commands
      '(("p" tags "PROJECT-MAYBE-DONE" nil)
        ("m" tags "PROJECT&MAYBE" nil)
        ("a" "My agenda"
         ((org-agenda-list)
          (org-agenda-list-stuck-projects)          ;; (1)
          (tags "PROJECT-MAYBE-DONE")))
        ;; ... put your other custom commands here
       ))

What about finished projects? You might want to keep them in your Org
file, but they shouldn’t show up in your active and inactive project
lists. Org can keep track of those projects too.

Marking projects as done

If you look at the custom commands above, you’ll notice the “-DONE”
specifier. “DONE” is the tag we’ll use to indicate done projects. To
tag a project as done, move the point to the project heading and type
C-c C-c (org-ctrl-c-ctrl-c). The tag prompt will default to the
current tags. Just add “DONE” and press Enter. With the custom
commands we’ve set up, projects tagged DONE will not show in your
active, inactive, or stuck project lists.

You can also add the tag manually. For example, if the project heading is

 * Learn Emacs    :PROJECT:

and you’re happy with your level of Emacs proficiency, then you can
mark it as done by changing it to

 * Learn Emacs    :PROJECT:DONE:

If you have plenty of completed projects, your Org file might be quite
large. You can mark a subtree for archiving by typing C-c C-x C-a
(org-toggle-archive-tag). This hides it from most Org commands. You
can also archive a tree into a different file with C-c C-x C-s
(org-advertized-archive-subtree).

Wrapping up

Now you can create projects, manage your project tasks, and review
your active, inactive, and stuck projects in Org. You know how to mark
projects as completed and how to archive them. You’ve also started
using tags to dynamically generate reports from your Org file.

Tags can do a lot more. To find out what else you can do with tags,
read the next section on “Tagging in Org”.

On Technorati: , ,

More progress

January 2, 2008 - Categories: writing

Yay, I finished my writing goal for the day!

Tomorrow’s a busy day. I have two conference calls, a client meeting, an eye exam (need new glasses), and if I can squeeze it in, a dentist appointment as well. I’ve finished a lot of work for the client, and I’m looking forward to sharing the first drafts with them. I’m really turning into an intranet social media consultant! =) This is good.

Tomorrow is also an editing day, so I’ll take whatever I have so far and start putting it all together. And then the chapter’s just going to magically fall into place, like it did last time.

The days are just packed. =D

Tagging in Org – plus bonus code for timeclocks and tags!

January 4, 2008 - Categories: emacs, org

The section on projects introduced tags as a way to differentiate
active and inactive projects. In this section, you’ll learn more about
tags and how you can use them to filter your task list.

What’s a tag, anyway? In Org, tags are keywords at the end of
headlines. Each tag can contain letters, numbers, and the symbols ‘_’
and ‘@’. Tags begin and end with colons, and a single colon separates
multiple tags. For example, you could have headlines like this:

 * Personal                                     :PERSONAL:
 ** TODO Buy milk                               :@ERRANDS:
 ** TODO Call Mom                               :@PHONE:
 ** TODO Send letters                           :@ERRANDS:
 * Work                                         :WORK:
 ** TODO Call John about report                 :@PHONE:JOHN:
 ** TODO Prepare for presentation on Monday
 ** TODO Call Mary about the presentation       :@PHONE:URGENT:MARY:

One way to use tags is to filter your task list by priority. For
example, you may want to focus on your urgent tasks first without
getting distracted by other items on your task list. Another way to
use tags is to keep track of the context of your tasks as suggested in
GTD. By doing similar tasks together, you might be able to work more
efficiently. For example, if you’re on the phone at the office, it may
be a good idea to do all of your work-related phone calls. If you’re
going to go to the post office, you might want to drop by the
supermarket on your way back. You can use tags to categorize your
headlines any way you want.

Tags can take advantage of the outline structure. For example,
although the tasks “Buy milk”, “Call Mom”, and “Send letters” have one
tag each, they also inherit the “PERSONAL” tag from the parent
headline. A tag search for “PERSONAL” would display all three
tasks. To customize this behavior, look at the documentation for the
variables org-use-tag-inheritance and org-tags-match-list-sublevels.

Tags can help you organize and filter your task list. In this section,
you’ll learn how to add tags to your headlines, view tagged items in
your Org file and in your agenda, and define custom agenda
views. You’ll also learn about custom tag searches and other
interesting things you can do once you’ve tagged your headlines.

Adding tags

You can edit your ~/organizer.org file and add tags manually by typing
in :tagname: at the end of the headline. You can also add tags by
typing C-c C-c (org-ctrl-c-ctrl-c) when the point is on a
headline. Use M-TAB (complete-symbol) to complete a tag based on all
the tags used in the current file. If Alt-TAB is not processed by
Emacs, you can use ESC-TAB instead.

Separate multiple tags with a single colon, like this:
(:@PHONE:URGENT:). The beginning and ending colons are optional when
using C-c C-c (org-ctrl-c-ctrl-c), because the function will
automatically add them.

If you add certain tags frequently, you can set up single-key
shortcuts. For example, if you frequently tag tasks as “URGENT”, you
may want to define a shortcut (at least until your life gets under
control). You can assign shortcuts globally by adding this code to
your ~/.emacs and evaluating it:

   (setq org-tag-alist '(("URGENT" . ?u)
                         ("@PHONE" . ?p)
                         ("@ERRANDS" . ?e)))

You can also set this on a per-file basis by adding the following line
to the beginning of your file:

 #+TAGS: URGENT(u) @PHONE(p) @ERRANDS(e)

You can then use these C-c C-c (org-ctrl-c-ctrl-c) to enter these
single-key shortcuts, ending it with RET. If you are assigning a
single tag, type C-c C-c C-c (org-ctrl-c-ctrl-c, next change exits) to
make it even faster by skipping the RET.

If you use single-key shortcuts, you’ll need another way to enter tags
that start with the shortcut key. You can type them in manually, or
you can use C-c C-c (org-ctrl-c-ctrl-c) and type TAB to enter in any tag.

To remove a tag, you could use C-c C-c (org-ctrl-c-ctrl-c) again, or
delete it manually. To remove all tags, use C-c C-c
(org-ctrl-c-ctrl-c) and press SPC.

Viewing tagged items

Whether you want to view tagged headlines by themselves or in the
context of your other headlines, tasks, and notes, Org has some nifty
tagging features for you.

Agenda view

To view tagged headlines by themselves, use C-c a m (org-agenda,
org-tags-view) and specify the search tag. For example, you can view
your urgent tasks by specifying “URGENT”. Note that this command
displays the top headlines matching that tag, whether they’re tasks or
not. For example, if you searched for “WORK”, you would just get the
“* Work” headline. To view tagged tasks, use C-c a M (org-agenda,
org-tags-view with a prefix argument). This shows only the tasks that
have that tag.

To search for a combination of tags, you can combine tags like this:

WORK&@PHONE           only your work phone calls
PERSONAL-@ERRANDS     personal tasks, but without errands
JOHN|MARY             Anything tagged with "JOHN" or "MARY"
                      For example, if you're going to have a meeting with both of them

If you check certain lists often, you might want to create a custom
agenda command for them. In the section on Projects, you configured
custom agenda commands for active and inactive projects by adding the
following code in your ~/.emacs:

(setq org-agenda-custom-commands
      '(("p" tags "PROJECT-MAYBE-DONE" nil)
        ("m" tags "PROJECT&MAYBE" nil)
        ("a" "My agenda"
         ((org-agenda-list)
          (tags "PROJECT-MAYBE-DONE")))
        ;; ... put your other custom commands here
       ))

You can use the same idea to create quick custom views for your other
tagged tasks. For example, to create custom views for your urgent work
tasks and your phone calls, modify the org-agenda-custom-commands
setting in your ~/.emacs to be like this:

(setq org-agenda-custom-commands
      '(("u" todo "WORK&URGENT" nil)               ;; (1)
        ("c" todo "WORK&@PHONE" nil)               ;; (2)
        ("h" todo "PERSONAL-@ERRANDS" nil)         ;; (3)
        ("p" tags "PROJECT-MAYBE-DONE" nil)        ;; (4)
        ("m" tags "PROJECT&MAYBE" nil)
        ("a" "My agenda"
         ((org-agenda-list)
          (tags-todo "URGENT")                     ;; (5)
          (tags "PROJECT-MAYBE-DONE")))            ;; (6)
        ;; ... put your other custom commands here
       ))

Sometimes you’ll want to see more context instead of just a list of
headlines. You can jump from your Org agenda to the corresponding
headline by pressing RET (org-agenda-switch-to) on the entry. You can
also quickly browse through the headlines in another window by
pressing f (org-agenda-follow-mode) while in the Org agenda view, then
moving your point to the different lines. These commands work with the
summary in the Org agenda view.

If you want to show only matching headlines in your ~/organizer.org
file, you can use Org’s sparse tree search commands.

In your agenda file

A sparse tree shows only the matching headlines in the context of the
headlines above them. This is useful when you want to see your tasks
within your outline structure. All other headlines are collapsed so
that they’re easy to skip. To do a sparse tree search, type C-c \
(org-tags-sparse-tree). You can then expand and collapse subtrees with
the TAB (org-cycle) command. To limit the search to only task
headlines, type C-u C-c \ (org-tags-sparse-tree with a prefix).

Other cool things you can do with tags

And if you ever want to know how much time you spent on urgent tasks,
you can call the following function from your organizer.org file with:

M-x wicked/org-calculate-tag-time RET URGENT RET

to see something like this:

Time: 98:44 (98 hours and 44 minutes)

You can call it with a prefix in order to be prompted for a start time
(inclusive) and end time (exclusive).

Here’s the code to add to your ~/.emacs:

(defun wicked/org-calculate-tag-time (matcher &optional ts te)
  "Return the total minutes clocked in headlines matching MATCHER.
MATCHER is a string or a Lisp form to be evaluated, testing if a
given set of tags qualifies a headline for inclusion. TS and TE
are time start (inclusive) and time end (exclusive). Call with a
prefix to be prompted for TS and TE.

For example, to see how much time you spent on tasks tagged as
URGENT, call M-x wicked/org-calculate-tag-time RET URGENT RET. To
see how much time you spent on tasks tagged as URGENT today, call
C-u M-x wicked/org-calculate-tag-time RET URGENT RET . RET +1 RET."
  (interactive (list
		(read-string "Tag query: ")
		(if current-prefix-arg (org-read-date))
		(if current-prefix-arg (org-read-date))))
  ;; Convert strings to proper arguments
  (if (stringp matcher) (setq matcher (cdr (org-make-tags-matcher matcher))))
  (if (stringp ts)
      (setq ts (time-to-seconds (apply 'encode-time (org-parse-time-string ts)))))
  (if (stringp te)
      (setq te (time-to-seconds (apply 'encode-time (org-parse-time-string te)))))
  (let* ((re (concat "[\n\r]" outline-regexp " *\\(\\<\\("
		     (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
		     (org-re
		      "\\>\\)\\)? *\\(.*?\\)\\(:[[:alnum:]_@:]+:\\)?[ \t]*$")))
	 (case-fold-search nil)
         lspos
	 tags tags-list tags-alist (llast 0) rtn level category i txt p
	 marker entry priority (total 0))
    (save-excursion
      (org-clock-sum ts te)
      (goto-char (point-min))
      (while (re-search-forward re nil t)
	(catch :skip
	  (setq tags (if (match-end 4) (match-string 4)))
	  (goto-char (setq lspos (1+ (match-beginning 0))))
	  (setq level (org-reduced-level (funcall outline-level))
		category (org-get-category))
	  (setq i llast llast level)
	  ;; remove tag lists from same and sublevels
	  (while (>= i level)
	    (when (setq entry (assoc i tags-alist))
	      (setq tags-alist (delete entry tags-alist)))
	    (setq i (1- i)))
	  ;; add the nex tags
	  (when tags
	    (setq tags (mapcar 'downcase (org-split-string tags ":"))
		  tags-alist
		  (cons (cons level tags) tags-alist)))
	  ;; compile tags for current headline
	  (setq tags-list
		(if org-use-tag-inheritance
		    (apply 'append (mapcar 'cdr tags-alist))
		  tags))
	  (when (and (eval matcher)
		     (or (not org-agenda-skip-archived-trees)
			 (not (member org-archive-tag tags-list))))
	    ;; Get the time for the headline at point
	    (goto-char (line-beginning-position))
	    (setq total (+ total (or (get-text-property (1+ (point)) :org-clock-minutes) 0)))
	    ;; if we are to skip sublevels, jump to end of subtree
	    (org-end-of-subtree t)))))
    (if (interactive-p)
	(let* ((h (/ total 60))
	       (m (- total (* 60 h))))
	  (message "Time: %d:%02d (%d hours and %d minutes)" h m h m)))
    total))

Now you can slice and dice your timeclock records any way you want, thanks to tags!

Random Emacs symbol: cc-imenu-java-generic-expression – Variable: Imenu generic expression for Java mode. See `imenu-generic-expression’.

On Technorati: , ,

Working two jobs

January 4, 2008 - Categories: writing

“Next time I do this, I’m going to have to find a day job that isn’t this similar to my hobby,” I said as I took a three-minute break from writing. Even with the break-reminding program I have on my system, a full day of working at the computer was still tiring–and I had nearly half a section to go.

“This isn’t a hobby,” W pointed out as he massaged my shoulders. “It’s more like a second job.”

He’s got a point there. Because I want to meet some goal dates, I put schedule pressure on myself. It’s work. I do a little bit of it even when I’m not in the mood for it, and I consciously work on getting into the right mood for it. And hey, I’m thrilled about my progress. =) I can almost feel my writing muscles getting stronger.

I’m settling into a good rhythm for writing. For example, this section took me 2 hours and 19 minutes to write. Just enough time between a post-dinner break (take a shower, read a book, chat a little, look at Your Personal Penguin (so cute!)) and bedtime.

Getting speech recognition to the point where I can trust it would be nice, too, so that I can give my hands a rest. =)

Must remember to write about non-Emacs, non-writing topics sometime, or I’ll bore all my friends!

zomg, another chapter up!

January 5, 2008 - Categories: writing

I’ve finished the first draft of Chapter 8: Taming Your Tasks. PDF ODT DOC. Whee!

The feedback I’m looking for right now is:

Fiddly bits like formatting will wait for the second pass.

If you leave your feedback as comments on this post, I’m less likely to lose it in all the mail that’s piling up in my inbox! =)

On Technorati: , , , ,

Random Emacs symbol: widget-specify-secret – Function: Replace text in FIELD with value of `:secret’, if non-nil.

You have received a painting from sacha

January 5, 2008 - Categories: sketches

080106-03.13.09.png

Teaching the attitude

January 6, 2008 - Categories: teaching

J- was getting frustrated by the game of chess she was playing with her dad. She couldn’t see any good moves. Her pieces were all tangled up, and she didn’t know what to do.

It’s interesting watching another human being learn how to think strategically. She’s not quite there yet, as she has a hard time thinking of what her dad’s response would be. I remember being like that, and I remember the chess drills I did in order to learn how to see ahead.

So instead of writing the blog post that I meant to write today, I took some time to teach her. No, I didn’t coach her during the game. Instead, we wiped the board clean and I set out some pieces for one of the simplest drills, King and Rook vs King. I’d shown her this before. She’d successfully completed it with some coaching. It would be good for reinforcing the idea of thinking ahead.

She was moving the pieces somewhat randomly (although legally, of course). So I started counting to 50 moves, the limit on end-game
dilly-dallying in tournament play. When I was getting close to 50, she We reached a draw during the first drill. Then I showed her how she needed to decide which side of the board she would force my king to stay on, and how that rook could keep my king there, then drive it backwards once it had the support of her king.

We did another drill, with plenty of sound effects. “I’m going to get you!” I exclaimed as my solitary king pursued her rook, step by step.
She squealed and moved her rook to the other side. “Uh oh,” I said when my king had nowhere to go but in front of hers. “Noooo!”, I cried
as her rook forced mine against the board. She checkmated my king with a little prompting.

We went back and forth a few times before she caught on that she needed to sometimes “waste” a move. When she could checkmate my king with no prompting, I reinforced the idea (“Pick which side of the board you’re going to squish my king against, and focus on forcing my king back”) and replaced her rook with a queen. I showed her how a queen can checkmate faster than a rook. She checkmated me handily, and finished the session thrilled with what she could do.

Why am I telling this story? I think it hints at why and how I teach. A lot of what I’m doing right now can be considered teaching, even
though it looks different: my social media consulting with IBM, the book that I’m writing on Emacs… But I’m not teaching facts or
procedures. I care about shaping attitude and so that I can unlock potential. I talk to people about blogging and bookmarking because I
want to influence their attitude towards collaboration, and because I want to see what they’ll do (so that I can learn from them too!). I
talk about Emacs, but what’s important to me is the “if I can tweak this, what else can I do with it?” kind of feeling that will unlock
the rest of Emacs for other people.

So part of what I do is think of exercises or examples that will help people feel that intrinsic joy. For J and chess today, it was the feeling of purposeful movement and of knowing what she was doing. That’s what I hoped to teach her. How can I do this better?

On Technorati:

January – Chapter 7: Taking Notes

January 7, 2008 - Categories: emacs

For January 2008, my assignment is to write a chapter on taking notes
with Emacs. Here are the blog posts that I plan to write, each around
1000-2000 words long. This should give me plenty of material to edit,
if I don’t go mad first. ;)

 - [ ] Keeping Notes in Emacs
       Structured vs Unstructured (outline, free-form)
       Flat vs Hyperlinked
       Private vs Public
       File structure (one file, daily, snippets)
 - [ ] Outline Notes with Org, Blorg
 - [ ] Daily Notes with Planner
 - [ ] Hyperlinked Notes and Muse
 - [ ] Publishing Muse
 - [ ] Publishing Planner, RSS
 - [ ] Remember: quick note entry
 - [ ] Snippets with Howm
 - [ ] Blogging from Emacs - WordPress, LJ, Blogger,Muse-Blosxom, EmacsAtomAPI
 - [ ] Encrypted Notes (full file, segments) - MOSTLY WRITTEN

I find that thinking of a book as a collection of articles works out
well for me. Starting with a rough outline like this, I’ll write
2000-word articles of the kind that I’d write for Linux Journal or
LinuxWorld, and then I’d put them into my outline and add transitions.
After I write all the pieces, then I can write the introduction and
the wrap-up sections.

Slowly getting the hang of this writing thing… =)

On Technorati: , ,

Random Emacs symbol: message-narrow-to-headers-or-head – Function: Narrow the buffer to the head of the message.

Book triage

January 7, 2008 - Categories: reading

Okay. 31 books. 15 days. Plus all the writing I still need to do. I
may have made a bit of a miscalculation. No problem, it’s the library,
I can always renew or request books.

The only books I probably won’t be able to renew are

(Yes, I wander all over…)

I can do that. =)

One of these days, I’m going to revise my OPAC reminder script to also
automatically deactivate all of my requests once I go over a certain
number of books… ;)

On Technorati:

Random Emacs symbol: table-narrow-cell – Command: Narrow the current cell by N columns and shrink the cell horizontally.

You have received a painting from Sacha

January 7, 2008 - Categories: sketches

080108-04.21.09.png

Maybe people really are generous with their wisdom

January 8, 2008 - Categories: blogging, story

I racked my brains trying to figure out how to ask one of our clients to lunch. We were in the middle of a project and there wasn’t much time to spare, but I was impressed by the way he’d improved the presentation draft. I wanted to ask him so many questions: How did he get interested in marketing? How did he get started? What were his favorite resources? What were some tips he could share? What was his story? There was so much I wanted to learn from him… but how to get started? We were scheduled for a working lunch today, but maybe after we passed a major milestone, I’d be able to treat him to lunch and pick his brain.

I tried out different opening lines in my head as I unwrapped my sandwich slowly. If only scripts had been included in the new-employee orientation kit! I was so preoccupied, I nearly missed his conversation opener.

Without any preamble or obvious shift to a non-work topic, he just started talking to me about writing, journalism, and storytelling. I’d been reading about journalism just the night before, thanks to “How to Write Fast (While Writing Well)” by David Fryxell (good book, would recommend it), and it was fascinating to hear other examples of what I’d just read. And he saved me the trouble of trying to figure out how to ask him about that, too. Wow!

I felt even more inspired when he told me, “You have a good writing style. It’s personal and personable.” Whenever I hear this from people–particularly people who know a thing or two about writing–part of me squeals with glee and does a little dance. (Thanks to the patient mentorship of people like Stephen Perelgut, I can usually do this without actually squeeing in public.) There’s something here that I want to keep honing, there’s something I want to get better and better at, and little hints from people like him tell me I might be on the right path.

How did he have such a good handle on my personal interests, and how did he know to offer that kind of encouragement? Thanks to blogs, he could read the stories I wouldn’t have thought of e-mailing him. I knew he’d passed by my personal blog before. He’d mentioned it during one of the meetings. He must have dropped by again–wow! And he had taken the time to share some of his thoughts and encourage me to keep exploring writing and storytelling… Wow.

I don’t know why people don’t mind giving me so many tips and helping me learn so many things. Maybe most people really are just that way, and all it takes is one wide-eyed person with curiosity and and the itch to share whatever she’s learning with other people down the road. Maybe people enjoy sharing what they’ve learned with other people. Maybe people enjoy helping others along the way. Maybe people enjoy using more than just the 20% of their talents that are used in their job description. Maybe they enjoy sharing their years of experience instead of just what their current company asks for.

All I know is that I want to help the people in his company discover and develop those kinds of connections. I want to help as many people in as many companies as I can. That’s why I joined IBM to do enterprise social media consulting: because I’m learning so much from so many wonderful, unexpected connections, and I want to help companies help their employees to do even better. =)

Caag yaaa daawaamee

January 8, 2008 - Categories: life

“Caag yaaa daawaamee,” was my muffled answer as the dental hygienist poked around in my mouth. “I mean, check your department to see if they have funding,” I said after he removed the scaler. “They might have some kind of assistantship.”

Graduate school advice isn’t what I usually talk about with dental hygienists, but Phu was different. Born in Vietnam, he’d moved to Canada with his parents when he was young. He’d never quite gotten the hang of winter, though, and now he was thinking of escaping to Australia and going for a master’s in oral health focusing on gerontology. He was concerned about the high cost of foreign student tuition, though. So I told him how University of Toronto’s guaranteed funding not only paid my tuition but also some modest living expenses, and that he should check the schools he was applying to for any kind of funding program or scholarship. The professional programs at U of T don’t have funding (the university probably figured that MBAs will be more than able to pay back their student loans), but other programs at universities might have research and teaching assistantships. Also, Canada put in an off-campus work program this year; maybe Australia has one, too.

So my dentist checkup took a little longer than usual because we were chatting about grad school, Sydney, weather, and other topics while he poked around my teeth, but it felt much better than an anonymous scrape-and-go. There was a bit of a delay while we waited for the dentist to come look at my wisdom teeth, so we chatted some more. First time I’d ever had green tea at a dentist’s office. =) (As it turns out, my two bottom wisdom teeth are growing sideways, and I’ll need to have them removed sometime.)

If you happen to be in the Toronto area and you want to give Phu more advice or encouragement, you can drop by the Manulife Centre on Bay and Bloor. Second floor, near the movie theatres.

The other folks at the office are also friendly, and the place has personality: lots of pictures of a white poodle who must be the dentist’s favorite pet. If you mention the pictures, the dentist will also happily show you an oil portrait of the dog. (An oil portrait! I don’t have one.) Nice place, and very accommodating of panicky people who are worried that they might have a cavity (me last week–as it turns out, one of my wisdom teeth was just breaking through the gum in a funny manner). Recommend.

Quick book notes

January 8, 2008 - Categories: book, entrepreneurship, writing

How to Write Fast (While Writing Well): Books: David Fryxell

Recommended. Good stuff all the way through. Advice you’d read in other writing books, but well-illustrated. I loved the examples of story structure, and the quotes sprinkled throughout the book.

Key takeaways: Writing quickly is possible, even for fiction. It’s all about discipline and organization. Outlines are really helpful. Index cards and research are really helpful, because then you can hang them on the outline and practically write the article/book/whatever from there.

Other notes: Research is good, but not too much research. If you over-write, you waste time. Keep your eyes open for irony, twists, structure–these make a story interesting. During delays or lulls in the interview, write down details. Shorthand (or some kind of it) is worth learning.

Open an Online Business in 10 Days: Books: Melissa Campanelli

Not recommended. Nothing particularly spectacular. The interviews near the end of the book are good if you want to get a quick tour through popular Web businesses, but nothing jumped out at me even though I scanned the book cover to cover. Will probably use scanning technique suggested in How to Read a Book next time I do stuff like this…

You know, I might just stand a chance at finishing all the books…

Writing plans for the chapter on managing notes

January 9, 2008 - Categories: emacs, org, planner, wickedcoolemacs, writing

- [ ] Keeping Notes in Emacs
Structured vs Unstructured (outline, free-form)
Flat vs Hyperlinked
Private vs Public
File structure (one file, daily, snippets)

In this section, you’ll learn about the different kinds of notes you take, and you will be able to choose one or two Emacs modules to start learning.

- [ ] Capture and retrieve – Remember, search

Getting the ideas out of your head and into your note-taking system; searching your notes (basic), searching your notes (specific)

Wicked cool code: Remembering to different note-taking systems, searching different note-taking systems

- [ ] Outline Notes with Org, Blorg

In this section, you’ll learn how to keep outlined notes using Org.  You’ll be able to create headings, sub-headings, and text notes. You’ll also learn how to manage outline items by promoting, demoting, and rearranging them. These basic editing commands are covered in the Emacs Org manual, so I’ll just give a brief summary..

You’ll also get tips on how to capture text quickly (M-x remember, dabbrev), work with large outline files (split windows are useful), and search your notes efficiently (searching headings or text).

Lastly, you’ll learn how to publish your Org file as HTML or LaTeX.

Wicked cool code would be: searching, how to import to and export from Freemind, a graphical mind-mapping program.

- [ ] Daily Notes with Planner

In this section, you’ll learn how to write a day-based journal using Planner. In addition to free-form notes on the page, you’ll also be able to keep semi-structured notes typed in manually or captured using Remember. You’ll also learn how to publish the resulting pages as HTML and RSS, and how to customize the output.

Wicked cool code would be: searching notes and displaying matching headlines, private notes, publishing note headlines, and publishing a note index.

- [ ] Hyperlinked Notes with Muse

In this section, you’ll learn how to create a personal wiki using Muse.  You’ll learn how to create pages, link to pages, and publish your wiki.

Wicked cool code: Capturing notes to specific pages using Remember and keyword matches, private pages, publishing pages when you save them.

- [ ] Snippets with Howm

In this section, you’ll learn how to manage random snippets of information using Howm.

- [ ] Blogging from Emacs – WordPress, LJ, Blogger,Muse-Blosxom, EmacsAtomAPI

In this section, you’ll learn how to use Emacs as a blogging client for many popular platforms. This is mainly for keeping other blogs in sync, although I’ll also talk about the possibility of using planner-rss + something like Feedwordpress.

- [ ] Encrypted Notes (full file, segments) – MOSTLY WRITTEN

In this section, you’ll learn how to encrypt your notes. Actually, this will probably be split up into the different tools…

Note-taking: Random notes, journal entries, outlines, and hyperlinks

January 9, 2008 - Categories: emacs, notetaking, wickedcoolemacs

I take at least three different kinds of notes, and I need to manage them differently. Here are some rough thoughts on the different kinds of notes I work with and how I manage them. I’d love to hear about your note-management strategies in comments or e-mail!

Random notes

When I worked on my thesis, I filed hundreds of lines from my literature review. I needed to quickly pull together just the notes matching a certain keyword or belonging to a particular section. I also needed to be able to properly cite each note. Lastly, I structured my notes so that I could get a random note, which turned out to be really helpful for breaking me out of writing ruts and for helping me see creative connections.

Writers and public speakers keep similar databases of story ideas and great quotations. They need to be able to search their databases for matching records, and they might not think of these categories ahead of time.

Random information management isn’t just for word geeks and researchers. If you’ve got scraps of paper or a text file with notes from meetings, clips from interesting articles, and thoughts to yourself, you’re already managing random information. You just might not have a good system for capturing and searching the information.

Important things for a random information manager:

(An ideal random information manager might even suggest relevant entries.
Come to think of it, I should find out if I can get the Remembrance Agent running again. That was really cool.)

I started using Howm for this before. It was a great random information manager for Emacs. I haven’t been using it lately, though, as I hadn’t set it up on my work laptop. I might do so soon.

Journal entries

Journal entries tend to be short, chronological notes. They can be private or public, or a mix of both. They can be also be retrospective or forward-looking. Journal entries are more structured than random information snippets because they’re associated with a specific date and are generally about activities, experiences, or goals.

My blog is an example of a journal. It has public and private entries. The private entries are removed from the blog before publishing.

Important things for a journal manager or a blog:

I use Planner for this because Planner makes it easy to publish day pages and RSS. I also write some entries directly on a WordPress blog, which also imports my Planner blog entries.

Outlines

Some notes belong to a bigger structure. For example, if you’re drafting a document, you might work on different sections that will ultimately be merged. Random information management and journals are not enough because you need structure. An outline helps you see how things fit together.

The draft for this book is an example of an outline. I sometimes work top-down by starting with the headings and defining more detail. I also work bottom-up by writing blocks of content and then fitting them into my outline.

Important things for an outline:

I use Org for outlined text because Org makes it really easy to manipulate outlines.

Hyperlinked Text

The structure of hyperlinked text can actually be applied to the other three types of notes. Random notes benefit from freely-defined hyperlinks, where you can specify keywords that will automatically be linked without needing to edit each note where the keyword occurs. Journal entries can link to other journal entries or to topic-oriented pages. Outlines and other documents may allow people to jump to related sections through hyperlinks. Hyperlinks allow you to work with more freedom than a strict hierarchy of topics would permit.

An example of a hyperlinked note system would be the way the posts on my blog are often linked with plan pages that focus on specific topics. (These links are only on my hard disk, so don’t worry if you don’t see them!) Topic pages allow me to review my topic-related notes as well as other freeform notes I’ve added.

Important things for hyperlinks:

I tend to use Muse with Planner for hyperlinked pages, but I’ve also tried it with Howm.

Search

A note-taking system good at capturing journal entries may not necessarily be good at capturing and searching random information or managing outlines. It helps to have different note-taking systems, each optimized for different tasks, or a tool that adapts to what you need at that time. A search that spans your different note-taking systems is also a great help.

Currently, I don’t have a unified search system. Well, aside from grep… This is one of the things I plan to work on while writing this chapter. =)

Feedback?

Do you keep other types of notes, and/or do you have tips for managing notes? Please share them here so that I can think about how Emacs can be tweaked to support them!

The grass is not always greener on the other side of the fence

January 9, 2008 - Categories: Uncategorized

The grass is not, in fact, always greener on the other side of the fence. Fences have nothing to do with it. The grass is greenest where it is watered. When crossing over fences, carry water with you and tend the grass wherever you may be.

Robert Fulghum (1937-), It Was on Fire When I Lay Down on It, cited in http://www.quotationspage.com/mqotd/2008-01-04.html

Yes, I write too much

January 9, 2008 - Categories: writing

Post stats for your viewing pleasure. =)

~646,802 total published words from 4,255 posts

Someday I’m going to make pretty graphs. I’d like to visualize my posts according to time/day of week/topic/whatever. Anyway, the data is out there. Enjoy!

Someday like seas

January 12, 2008 - Categories: sketches

colors_slot12.png

How I got hooked

January 12, 2008 - Categories: emacs, planner, wickedcoolemacs

I fell in love with Emacs because of Planner and Remember. I got hooked. By that, I mean that I discovered the joys of modifying the behavior of other people’s code through hooks. Well-written Emacs code has plenty of entry points so that you can change things without rewriting everything, and both Planner and Remember were well-written. The flexibility that John Wiegley had built into Planner and Remember (in his spare time!) convinced me that I absolutely needed to learn Emacs Lisp. I e-mailed John, singing high praises about Planner and volunteering to help track down any bug reports so that I could learn in the process of helping others.

What did he do? He made me the maintainer for Planner, the go-to person, the buck-stops-here person. Was I terrified? My first time being in charge of an open source project, a language that I had just begun to learn, and schoolwork to do on top of all of that… Of course I was scared. I found a way to make working on Planner part of my final-year project (might as well get academic credit for hacking on it!), made the Emacs Lisp Intro and the Emacs Lisp manuals my weekend, bedtime, and mealtime reading. Back then, Planner.el was one file, which made it a little less intimidating.

At first, I found it hard to think of a way to improve Planner, which was already a great way to track my tasks. Remember was also a good way to jot down short notes that were automatically added to my Planner day page. Both Planner and Remember had some support for picking up hyperlinks to whatever I was looking at when I created the task or note. What was missing? Timestamps so that I could tell when I wrote a note; more link support so that I could automatically link to a file or a mail message or a contact record; private, perhaps even encrypted segments; copying a note to another page; publishing a blog as RSS… For the next few years, I worked with incredible people who had thought
long and hard about how they managed their tasks and their notes, and
who taught me how they did things through their feature requests and
their code. I became more comfortable in Emacs Lisp than in any other computer language I knew (eventually maintaining Remember as well), I had formed a thriving community of about 200 people around the world who also contributed ideas and code, and I was hooked.

Because I could change so much about Emacs, I had so much fun
coming up with creative applications. When a friend and I
were studying Japanese, she wanted to know if I could set up Emacs with
flashcards and example sentences so that we could learn words in
context. I knew that Jim Breen had a huge database of example Japanese
sentences with their English translations and that this was freely
available on the Net. I downloaded the database and–one crazy idea
fueled by another in that natural sugar high that can happen when two
geeks start brainstorming–I made our learning fun by
extracting all the cat- and kitten-related sentences. This is how I
learned about such wonderfully onomatopeic words as “fuwafuwashita”,
which means “fluffy”. We both adored cute little kitties, and reading
example sentences about these furballs would make our studies
delightful. Now, where could we put these sentences so that we’d run
into them often? Aha! Remember! Every time we wrote a blog post or
needed a scratch pad to store some information, we would be rewarded by a
short sentence in Japanese about cute little kittens, and we could look
up the meaning and pronunciation with custom keyboard shortcuts. And
hey, it worked for me–I found myself writing because I wanted to see
what sentence would come up, and I found myself learning because I’d
run into all these cool words. For variety, I switched to sentences
about computers and other topics that I wanted to be able to discuss.
Try getting your blog editor or note manager to reward you each time you share a story or write down a tidbit of information. There is incredible power in customizing your note-taking system to just the way you think, and when you combine that with the delight of a surprise, you have something that is difficult to do with any other system–paper-based or electronic, text-based or graphical, commercial or free.

I turned the projects over to other maintainers when I started with graduate school, but as you can see, I still love working with Emacs. My mind does this little somersault of joy when I pull off a particularly nifty tweak or when I run across a beautiful piece of code. And yes, one of the reasons why I’m writing this book about Emacs is because I’d love to have an opportunity to explore all the nooks and crevices of this piece of software–well, not all, because by the time the book hits press, people will have added even more.

In this chapter on notetaking, I hope to be able to show you the mechanics of note-taking in Emacs–but more than that, I hope to show the sheer joy of having a system that you can play with, of not just filing notes in a database but M-x remember-ing in a system that will make you smile or laugh, of shaping and reshaping things until they fit you like clay fits your hand. Come and have fun.

Lego Star Wars

January 13, 2008 - Categories: geek

I was really going to spend some more time writing today. I’d gotten to 1083 words already. Then we discovered the joys of Lego Star Wars.

Now I have to tell you, it’s interesting playing a Star Wars game with someone who had only watched Episode 3 and who referred to R2-D2 as “the guy who goes beep beep beep”. It was Lego, though, and we were laughing out loud at the cut scenes. Then to work, clearing levels and solving puzzles. We moved with military precision–

“Ack! Stop killing me!”

“I want to be the guy with brown hair!” (J- liked playing Obi-Wan Kenobi.)

“If you shake the plants, you get more studs!” (The game encourages you to destroy everything in sight, and a few things that aren’t.)

–or at least with the precision that blindfolded conscripts would have on their first day of service. But we got through the first few levels, and we eventually got the hang of things.

Much to the detriment of my Emacs-related writing. So much for discipline and organization… but that was fun. I tell myself that it’s an investment–yeah, that’s  right, an investment, helping J- learn how to work quickly and calmly in stressful conditions, tactical planning, and coordination… Riiiight.

Okay, it was just fun. =)

Tomorrow: Chat with people (I’ll be on Skype and Yahoo at 9:00 EST, although I’ll probably be busy catching up with my parents), some more writing (I will finish that article), maybe a trip to the Royal Ontario Museum (J- wants to go), and either more writing or some reading…

And then more play!

<R2-D2 whistle>

Capturing Notes with Remember

January 13, 2008 - Categories: emacs, org, planner, wickedcoolemacs

Ideas come from everywhere. While reading this blog, you might come across interesting snippets that you’d like to save. While writing code, you might be hit by an idea for something you want to do with the program. While on a phone call, you might need to write down what you need to prepare for a meeting the next day.

How do you take notes now? Do you jot your notes on a scrap of paper or into a leather notebook? Do you copy and paste what you’re looking at into a plain text file or document? Do you scribble things into a personal digital assistant?

I’ve tried different note-taking strategies: colorful mindmaps, outlined text files, even voice recordings. I felt frustrated every time I had to write down whose e-mail or which webpage prompted the note (shouldn’t the computer do that automatically?), but I was even more frustrated when I’d come across a note and not remember why I wrote it.

Remember changed all that for me. The key ideas behind Remember are that you should be able to write notes with minimal distraction, and that as the context should be automatically picked up so that you don’t have to write it down. If you’re writing a note based on a mail message, Remember will pick up the details of the message and create a hyperlink so that you can view the original message when reviewing your notes. If you’re working on a file, Remember will link to it so that you can jump back to it. If you’re browsing a web page (in Emacs, of course), Remember will remember the title and URL, so that you can go back to the page when you want to clarify something in your notes. After you save the note, you’ll be back in the same environment you were: no need to switch applications and no need to remember different keyboard shortcuts.

You might think that Remember’s only worth it if you do _everything_ in Emacs. For me, it worked the other way around. I started by using Remember to take notes in Planner, a personal information manager available for Emacs. As I got accustomed to the way Remember and Planner just automatically hyperlinked to whatever I was looking at, I thought: Why doesn’t my mail client do this? Why doesn’t my web browser do this? Why doesn’t my chat client do this? So I ended up reading through the manuals, figuring out how to do all these things in Emacs—and I loved it, eventually doing most of my work (and play!) within an Emacs frame. Although I use other applications now, like Lotus Notes for work mail and Mozilla Firefox for browsing, I still switch back to Emacs for my notes.

In this section, you’ll learn how to set up Remember and take quick notes in Emacs. We’ll start by configuring Remember to save your notes to a file, and how to configure Remember to save to different places depending on the content. You’ll also learn how to quickly search your notes file for entries.

You can also integrate Remember into other note-taking systems in Emacs. The sections that cover those systems will also show you how to configure Remember to save your notes there.

Setting Up Remember

Remember is a separate package, which you can download from https://gna.org/projects/remember-el . As of this writing, the latest stable release is Remember 1.9. Download the latest version and unpack it into your ~/elisp directory. You should end up with a new directory, ~/elisp/remember-1.9 .

To configure Remember to save to plain text files, add this code to your ~/.emacs and evaluate it:

(add-to-list 'load-path "~/elisp/remember-1.9") ;; (1)
(require 'remember-autoloads)
(setq remember-data-file "~/notes.txt")  ;; (2)
(global-set-key (kbd "C-c r") 'remember) ;; (3)

(defun wicked/remember-review-file ()
 "Open `remember-data-file'."
 (interactive)
 (find-file-other-window remember-data-file))
(global-set-key (kbd "C-c R") 'wicked/remember-review-file) ;; (4)
;; Not (global-set-key (kbd "C-c r")... as originally written... Thanks for catching that, Seth!

After you’ve configured Remember, try it out by typing C-c r (remember). Your Emacs frame will be split in two, and one of the windows will be a *Remember* buffer. Type your note. The first line will be the headline, and the rest of the buffer will be the body of the note. If you call C-c r (remember) from a file, the filename will automatically be included at the end of the buffer. Type C-c C-c (remember-buffer) to save the note.

Try it now by typing C-c r (remember) to bring up the buffer, typing in a short note, and using C-c c (remember-buffer) to save it. If you open ~/notes.txt to review your note, you’ll find something like this:

 ** Sat Jan 12 14:43:02 2008 (Your headline goes here)

 Your note body goes here

 /home/sacha/.emacs

You can even save yourself some copying and pasting. Mark a region of text and use C-u C-c r (remember). The selected text will be included in the buffer, so all you have to do is comment on it.

Make a habit of typing C-c C-r or C-u C-c C-r (remember) when you need to remember something. Type C-c C-c (remember-buffer) to get back to work, knowing that your notes have been safely saved in your ~/notes.txt file.

Reviewing Your Notes

Use C-c R (wicked/remember-review-file) to check your notes, or open ~/notes.txt yourself.
To search your notes, use C-c R (wicked/remember-review-file) to open the file, then use C-s (isearch-forward) to search for words interactively, or use M-x occur to find all lines containing a word.

You may notice that the default format that Remember uses is an outline format that is compatible with Org and Allout, both of which have powerful outline-editing tools. I prefer Org’s outline-editing commands, and you’ll learn about them in the “Outline Notes with Org” section. Here’s a quick summary.

First, you need to switch the buffer to Org mode by typing M-x org-mode. To automatically open your notes file in Org mode, add

-*- mode: org -*-

to the first line of your ~/notes.txt. Then, when you open your ~/notes.txt file, it will be in Org mode.

You can quickly collapse or expand all the outline entries by pressing S-TAB (org-shifttab). To collapse or expand a single entry, move the point to the headline (the line beginning with *, **, or any number of asterisks), then press TAB (org-cycle). To move an entry up or down, move the point to the headline and press S-UP (org-shiftup) or S-DOWN (org-shiftdown). To demote or promote a heading, press M-RIGHT (org-metaright) or M-LEFT (org-metaleft).

You can treat ~/notes.txt as your inbox, and keep your organized notes in another file or groups of files. Cut and paste the text between the files to clear your inbox, and use M-x grep to search multiple files. Alternatively, you can keep all of your notes in one large text file, and use C-s (isearch-forward) and M-x occur to search for information.

Now you know the basics of remembering information, saving it into a file, and reviewing the file. By default, Remember annotates your notes with a filename, if you were looking at a file when you called C-c r (remember). As you learn more about Emacs, you may want to configure Remember to add more intelligent annotations and other text to the Remember buffer. The more work Remember does for you, the less work you have to do!

Enabling annotation functions

The easiest way to get Remember to automatically understand mail messages, Web pages, info files, BBDB contact records, and other sources of information in Emacs is to use either Org or Planner. To learn how to integrate Remember with either Org or Planner, read the section on “Outline Your Notes with Org” and “Writing Your Journal with Planner”.

You can also define your own annotation functions. When you call C-c r (remember) from a buffer, Remember goes through each of the functions in remember-annotation-functions, and it uses the first non-nil value returned.

For example, you may work with many temporary buffers that don’t have filenames. To create an annotation function that adds buffer names, add the following code to your ~/.emacs after the basic Remember configuration code:

(eval-after-load 'remember
  '(progn
    (add-to-list 'remember-annotation-functions 'buffer-name t)))

This adds buffer-name to the end of the annotation list, making it a last resort.

What if you want line numbers included with the filename or buffer name? You could replace the previous code with this:

(defun wicked/remember-line-numbers-and-file-names ()
 "Return FILENAME line NUMBER."
 (save-restriction
  (widen)
   (format " %s line %d"
    (or (buffer-file-name) (buffer-name))
    (line-number-at-pos))))
(eval-after-load 'remember
  '(progn
     (add-to-list 'remember-annotation-functions
                  'wicked/remember-line-numbers-and-file-names)))

With that code, C-c r (remember) will automatically pick up the line number from your file or buffer.

By default, Remember saves your notes to a plain-text file, so you’ll have to open the files manually. The command M-x ffap or find-find-file-at-point may be convenient. If you want hyperlinks that you can visit easily, consider saving your notes in an Org or Planner file instead.

Now you’ve got context. What else can you do with the Remember buffer?

Adding Other Text to the Remember Buffer

Remember has plenty of hooks that let you modify the behavior. For example, you might want to insert a random tagline or fortune-cookie saying whenever you create a note. This is a fun way to encourage yourself to write more, because then there’s a little surprise every time you open a Remember buffer.

Here is a totally small-scale way to use random lines from a text file. Let’s say that you have a text file made up of movie quotes, taglines, knock-knock jokes, or short fortune-cookie sayings. When I wrote this code, I used Japanese/English sentence pairs about cats, because I was studying Japanese. You can use whatever tickles your fancy, as long as this text file (~/taglines.txt) has one line per saying.

(defun wicked/random-tagline (&optional file)
  "Return a random tagline."
  (with-current-buffer (find-file-noselect (or file "~/taglines.txt"))
    (goto-char (random (point-max)))
    (let ((string
           (buffer-substring (line-beginning-position)
                             (line-end-position))))
      string)))

(eval-after-load 'remember
  '(progn
     (defadvice remember (after wicked activate)
       "Add random tagline."
       (save-excursion
         (goto-char (point-max))
         (insert "\n\n" (wicked/random-tagline) "\n\n")))))

If you want multi-line sayings, look into the Emacs fortune cookie package, and replace wicked/random-tagline with a function that returns a random string.

This code modifies the behavior of C-c r (remember) by inserting a random tagline after the buffer has been prepared. You can use the same idea to insert a timestamp noting the time you started, use a template, or modify the text in other ways.

Saving to Different Places

You can also change how Remember saves its notes. For example, if you want all of the notes that contain the word “:EMACS:” or “:WORK:” to go into separate files, you can add this code to your ~/.emacs:

(defvar wicked/remember-keywords
  '((":EMACS:" . "~/emacs.txt")
    (":WORK:" . "~/work.txt"))
  "*List of (REGEXP . FILENAME).
If an entry matches REGEXP, it will be storied in FILENAME.
The first regular expression that matches is used.")
(eval-after-load 'remember
  '(progn
     (defadvice remember-region (around wicked activate)
       "Save notes matching `wicked/remember-keywords' elsewhere."
       (let* ((b (or beg (min (point) (or (mark) (point-min)))))
	      (e (or end (max (point) (or (mark) (point-max)))))
	      (string (buffer-substring-no-properties b e))
	      (done nil)
	      (keywords wicked/remember-keywords))
	 (while keywords
	   (when (string-match (caar keywords) string)
	     (let ((remember-data-file (cdar keywords)))
	       ad-do-it)
	     (setq keywords nil done t))
	   (setq keywords (cdr keywords)))
	 (unless done
	   ad-do-it)))))

You can even configure Remember to use different handler functions. This chapter covers several note-taking systems for Emacs, and you may want to use Remember to save to more than one note-taking system. For example, you can set up C-c r p to start a Remember buffer that saves to Planner, and C-c r o to start a Remember buffer that saves to Org. Here’s the code for your ~/.emacs:

(defun wicked/remember-to-org ()
  "Remember to Org."
  (let ((remember-annotation-functions   ;; (1)
	 (cons 'org-remember-annotation
	       remember-annotation-functions)))
    (remember)
    (set (make-variable-buffer-local
	  'remember-handler-functions)
	 '(org-remember-handler))))      ;; (2)

(defun wicked/remember-to-planner ()
  "Remember to Planner."
  (let ((remember-annotation-functions   ;; (3)
	 (append planner-annotation-functions
		 remember-annotation-functions)))
    (remember)
    (set (make-variable-buffer-local
	  'remember-handler-functions)
	 '(remember-planner-append))))      ;; (4)

(global-unset-key (kbd "C-c r"))  ;; (5)
(global-set-key (kbd "C-c r o") 'wicked/remember-to-org)
(global-set-key (kbd "C-c r p") 'wicked/remember-to-planner)

To learn more about configuring Remember with the different note-taking systems, read the sections for those systems.

On Technorati: , , ,

Random Emacs symbol: compilation-find-file – Function: Find a buffer for file FILENAME.

Weekly review: Week ending January 13, 2008

January 13, 2008 - Categories: weekly

This week was a week for catching up with coworkers. Aaron Kim got back from his vacation and took off again for another trip spreading the good news about IBM and Web 2.0 in London. Fortunately, I caught him at 120 Bloor on Monday. I also chatted with Bernie Michalik about writing (apparently, I say “Good stuff” just about every post on our team blog, The Orange Chair). And I welcomed Jen Nolan back from mat leave by treating her to lunch and thanking her for the career advice she gave me last year. =) Good times.

I’ve also made a lot of progress on the wiki that I’m building for a financial services company. I’m proud of the way it’s shaping up: a guide for internal consultants, a guide for community core team members, and a guide for other employees using these social media tools (blogs, wikis, forums). I like the way that it’s not just about how to use these tools – click this, type in that – but also how people can use the tools together to do what they want to do.

I joined another IBMer for an interview with a reporter from a major business magazine who was writing an article on these “water-cooler technologies”. I’m thrilled every time I get an opportunity to tell people about some of the cool stuff we’re doingbeing. And last Friday, another person got in touch with me to ask permission to quote me in the annual report of a project I love. Wow! There’s something powerful about being vocal about appreciation.

On the personal side, I went to the dentist and had a lot of fun
chatting with the person who scrubbed my teeth. =) It turns out that
my wisdom teeth will probably need to be removed, as they’re growing
all funny. In other news, the glasses that I ordered from
Zenni Optical have left Hong Kong and
should be on their way to Canada.

More progress on the book. I’ve started on the chapter on taking notes, and I have about 3000 words so far. My target is 12,000 words, or about 35 pages. I plan to finish it by January 31, according to my original schedule. I’m averaging about 1000 words a day, but I should find a way to resist the temptations of Lego Star Wars DS. It’ll be easier to write when J-’s distracted by other things! I have 9 writing days, if I alternate writing with editing and other things I need to do. This is doable. Fun, even. =)

(See, I’m getting the hang of this! Next step: graphs…)

W- and J- are doing fine. W-’s been cooking up a storm, and he’s now baking some egg tarts. (Home-made egg tarts! I’m so spoiled.) I made up for a little of it by exercising earlier, but I really need to keep it up, considering how fun food is around here…

I was glad to have had the opportunity to talk to one of my best friends when she was feeling really really homesick. She’s studying at Purdue right now, and she really misses home. Her advisor is open to her working from the Philippines, and I hope everything works out with her department.

It was fun chatting with my parents, too. W-, J-, and I are planning
to fly to the Philippines for two weeks this March, and we’re starting
to plan what to see. I hope we’re not too late to book flights to
Boracay!

Oh, and I’ve overcontributed to my RRSP, but I haven’t gone over the lifetime limit yet (whew!). Now I have to figure out the best non-registered way to save for my retirement so that I can gradually push my retirement age further and further back. (I should put together some kind of spreadsheet that calculates this for me…) I suppose I _could_ find a financial advisor, but he or she would have to be able to tell me stuff that I haven’t read in the dozens of books I’ve read on personal finance. Good stuff, mind you, not things like “Go into daytrading” or “Pick this high-MER loaded mutual fund that’ll give me plenty of commissions.” Oh, and a financial advisor who’s used
to dealing with people who aren’t panicking about debt, and who are interested in planning long-term.

Or maybe I should just learn to do everything myself, because financial planning is, after all, a lifelong skill. My books are all nicely balanced, although I had to create a slide deck to remind
myself exactly how my budgeting system works. That’s _probably_ a sign that it can be simplified further. It seems to work. I just have to trust it. Actually, the next step would be to use invariants (thank you, Problem Solving and Methods of Proof, and numerous other computer science and math courses!) to _prove_ that it’s correct. I will explain this in another post. =)

So that’s where I am in terms of work, health, book, family and friends, and money. There are lots of other stories to tell, but this is just a quick overview of where I am.

Next week: More wiki work. It would be great if I could find other people to contribute to it, as I get lots of great ideas by bouncing them off others. I also need to start on my US visa paperwork for a
conference I want to attend in April, and I need to do some more work
on my permanent residency application (applying for clearances
everywhere I’ve ever lived, and following up on employment
confirmation with my old department).

Life is good.

Random Emacs symbol: w3m-add-local-hook – Function: Add to the buffer-local value of HOOK the function FUNCTION.

(In the presence of) Mentors

January 14, 2008 - Categories: mentoring

The room lights dimmed around me, and a few solitary lamps signaled others staying late. I didn’t mind at all, because I was having fun. Not everyday do I get a chance to pick a mentor’s brain with no time restraint beyond from the grumbling of a stomach (easily ignored, and besides, I brought snacks). Well worth it

Here are some quick notes about what we talked about:

One of these days, I may try tweeting our conversation on the fly. ;)

Great day for mentoring. Jen Nolan volunteered, too, and I laughed because I’d already been thinking of her as a mentor. She’s awesome.

My head is buzzing

January 15, 2008 - Categories: life

My head is buzzing. Well no, not like a mosquito. Bouncing around, like a sugar-high rabbit in a cage. My brain is itching to be distracted. Writing feels slow.

I hate this feeling. I want to be in flow. Flow is what happens when you’re in the zone, when you’re concentrating, when things just fit together. I love that feeling, and it frustrates me that I can’t slide into it as easily as I did before. In the meantime, I’ll keep writing, because I’ll eventually get back on track. Whatever I write now can then be edited into something better.

Games threw me off balance. A gameplaying binge last weekend led into games taking over my subway ride, and I have had enough. I had never realized how important my commute was for decompression , or how stretched my brain can feel when it’s trying to go all over the place. Video games are particularly evil because part of their business is to get into your head. Pretty pictures. Random reinforcement. A sense of control, agency. Just like Sesame Street was focus-group-tested within an inch of its life, some games have been refined over years to be surprisingly appealing.

But it all comes down to this: who do I want to be, a Pokemon Master or an author? I want the heightened feelings of flow more than I want the short-term stimulation of games, so even if my thoughts are getting pulled every which way, I’m going to keep dragging them back. In the long run, I’m going to get more satisfaction from that kind of focus than from any game.

In the meantime… Boingboingboingbzzz….

Not much writing today…

January 15, 2008 - Categories: writing

… but I’m glad to report that my mind is calming down a bit. At the very least, I’m getting the hang of just getting something out there.

Oh, wait…

Looks like I managed to write a little over a thousand words anyway. They’re not really all stuck together in an article yet, but they’re snippets and they’re going to come together later on. =)

Getting the hang of this writing thing. =D

January 15, 2008 - Categories: geek

… And the MacBook Air, while interesting, doesn’t meet any immediate need (though I look forward to playing with one sometime). I already have a very lightweight laptop, anyway.

says David Singer (Read This Blog).
Yeah, I’m not too impressed either. Then again, I already have an ultraportable. It hasn’t moved much in the last few days, though… Light as it is, bringing it AND a Lenovo T60 would not be fun.
In other news, I’m trying out Newzcrawler as a way to read and blog quickly. I’m not too impressed. You know, if I could just spend some time getting nnrss to work under Emacs…

Planning a talk! =) “”Networking 2.0: Blogging Your Way Out of a Job… and into a Career”

January 15, 2008 - Categories: connecting

So it looks like I might be talking at the next Concordia University alumni event. Wouldn’t that be cool? Thanks to Ian Garmaise and Cheryl Morris for the referrals! Here’s the short description of my talk:

You know that networking is important to success. Now learn how to use blogs to connect with other people for both personal and business benefits, in both extrovert- and introvert-friendly ways. In this highly interactive two-hour workshop, you will learn how blogs can help you keep track of your accomplishments, discover and express your passion, connect with other people, demonstrate your character and competence, build your reputation, grow your network, and advance your career. You’ll learn about the challenges that come with having a public image, but also the rewards that may follow. You’ll develop a plan for getting started and connections that will get richer over time.

and a quick bio (eh, writing in third person):

Sacha Chua is an intranet social computing consultant with IBM Global Business Services. She earned her M.A.Sc. in human-computer interaction at the University of Toronto in November 2007, and her research was about using Web 2.0 to locate expertise in a large organization. She also has a B.S. Computer Science degree from the Ateneo de Manila University in the Philippines. And yes, her blog helped convince her (current) manager to create the perfect position for her. In her spare time, she works on a technical book about Emacs, devours stacks of books from the library, and writes on her personal blog at http://sachachua.com.

I love speaking in public. I get a chance to learn so much in the process. =) I love writing, too. It’s funny how those things feed on each other: writing helps me learn and think, speaking gets the message out there and helps me make it more conversational, and that in turn gives me more to write about…

Anyway: February 27, 6:00 – 8:00, actual talk 6:30-7:30 or so. It’s going to be mainly for alumni (even though I’m not one! =) ), but stay tuned – I’ll post more notes and maybe even a recording. (And I have to eventually get around to posting my Livin’ la Vida Emacs presentation from DemoCamp. That was absurd amounts of fun.)

Looking forward to it! I’ve been collecting notes for a presentation like that for a while now, and I’m looking forward to telling stories and helping people imagine, plan, and act. =)

Mike Moran: Writer, Search Marketing Expert, Distinguished Engineer!

January 16, 2008 - Categories: work

 

Mike is an IBM Distinguished Engineer and Product Manager of IBM’s OmniFind search software, which offers the security, scalability, and extensibility needed for enterprise search solutions. Prior to this position, Mike spent eight years in various positions at IBM’s customer-facing Web site, ibm.com, most recently as the Manager of ibm.com Web Experience, where he led 65 information architects, Web designers, Webmasters, programmers, and technical architects around the world.

About Mike Moran—Writer and Search Marketing Expert

Holy cow. =) Just found another role model. I’d heard about his book on BlogCentral, but I hadn’t realized he’s a Distinguished Engineer. Another role model! =D When I grow up, I’m going to be like him. Or Carol Jones, who is also Really Awesome.

Inching away, 1000 words at a time

January 16, 2008 - Categories: writing

The article on Org still doesn’t quite fit together yet, but I’m writing. 1000 words at a time, 1.5 hours a day, slowly but surely putting it together… =)

Emacs: Searching your notes

January 17, 2008 - Categories: emacs

C-s (isearch-forward) and C-r (isearch-backward) are two of the most useful Emacs keyboard shortcuts you’ll ever learn. To search forward interactively, type C-s (isearch-forward) and the first few characters of your search. Repeat C-s (isearch-forward) as necessary, or type in more characters to jump to the first instance that matches all those characters. Use these shortcuts to not only search your Org file, but also to quickly jump to sections. For example, I often search for headlines by typing C-s (isearch-forward) * start-of-my-headline. Org searches collapsed sections, so you don’t need to open everything before searching.

To search using Org’s outline structure, use C-c / r (org-sparse-tree, regexp), which will show only entries matching a regular expression. For more information about regular expressions, read the Emacs info manual entry on Regexps. Here are a few examples:

To find Search for
All entries containing "cat" cat
All entries that contain "cat" as a word by itself (example: "cat," but not "catch") \<cat\>
All entries that contain 2006, 2007, or 2008 200[678]

social networking

January 17, 2008 - Categories: connecting, social

All that’s needed to turn me from an introvert to a people person is the ability to skip small talk, at least in the beginning. Thank you, Internet!

Take today, for example. I was working on a wiki guide to social media on a client site when I heard a cheery voice introduce himself and say that he found me on a social network. A few minutes later, I was deep in conversation with someone I’d never met or even talked to before. He had noticed that my client contact had added me on LinkedIn, and that I was from IBM. Intrigued, he checked out my profile and read my blog. He was baffled by the Emacs posts, but he noticed my passion for social computing, and that was something that he was very interested in. We talked about knowledge management, technology adoption, influencing behavior, the different initiatives going on at the company. I recommended two books:

Influencer: The Power to Change Anything
by Kerry Patterson, Joseph Grenny, David Maxfield, Ron McMillan, Al SwitzlerRead more about this book…
The Leader’s Guide to Storytelling: Mastering the Art and Discipline of Business Narrative
by Stephen DenningRead more about this book…

… and I’m definitely looking forward to more conversations.

Wouldn’t it be amazing if people in his company—and in other companies—could meet and talk to other people as easily as he found and talked to me? Wouldn’t it be great if people could skip past all the small talk and build rapport by talking about the things people are passionate about?

Glasses, glasses

January 18, 2008 - Categories: decision

"You’re ordering glasses from the Internet? You’re braver than I am!" was the almost-unanimous sentiment I heard when I told people how my previous set of frames had fallen apart and that I wasn’t too keen on spending hundreds of dollars on a new pair. The sole dissenter was ubercool Leigh Honeywell, who told me that she had picked up a couple of pairs from Zenni Optical.

On her recommendation, I picked up two pairs. Both of them are fantastic. =) Prescription is right on. The frames are a little wider than I’m used to, but they’re both memory frames, so they fit securely on my head. And they’re way cheaper than frames bought in-store would be, not to mention the lenses.

Frame#:  3413 Half Rim Hingeless Stainless Steel $12.95 (Black)
Lens Width 49mm, Height 27mm, Bridge 17mm
FrameWidth 136mm,Temple Arm Length 140mm
Frame Weight with 1.57 index lens 11 grams

and

Frame#:  3412 Stainless Steel Half Rim Frame with Flexible (Memory) Plastic Temples $12.95 (Burgundy)
Lens Width 50mm, Height 28mm, Bridge 19mm
FrameWidth 136mm, Temple Arm Length 140mm
Frame Weight with 1.57 index lens 12 grams

Lenses are included in the frame price, although I paid an extra ~$5 for anti-reflective coating. Compare with… what… $200, $300 per frame, plus more for lenses?

I picked fairly conservative designs, but there are tons of styles on Zenni and other online retailers. =) Someday I may experiment with styles a bit more. These are fine. They’re hingeless: interesting.

Recommend, particularly for people who find optical shops way more expensive than they should be. Measure your old glasses to find out what frame dimensions you’re comfy with, then pick out a pair or two. =)

Fast-forwarding through small talk

January 18, 2008 - Categories: sketches

080118-06.33.04.png

Outlining Your Notes with Org

January 18, 2008 - Categories: emacs, notetaking, org, wickedcoolemacs

Large documents are almost impossible to write without outlines.  There’s just too much to fit in your head. Outlines help you work with a structure, so that you can see the big picture and how sections fit together. Outlines are also surprisingly useful when brainstorming. You can work with varying levels of detail, starting with a high-level overview and successively refining it, or starting with the details and then letting the structure emerge as you organize those details into groups.

Emacs has one of the most powerful outline editors I’ve come across. Although word processors like Microsoft Word and OpenOffice.org Writer support outlines too, Emacs has a gazillion keyboard shortcuts, and once you get the hang of them, you’ll want them in other applications as well. In addition, working in Emacs tends to force you to focus on the content instead of spending time fiddling with the formatting. Whether you’re writing personal notes or working on a document that’s due tomorrow, this is a good thing.

In this section, you’ll learn how to outline a document using Org. You’ll be able to create headings, sub-headings, and text notes. You’ll also learn how to manage outline items by promoting, demoting, and rearranging them.

Understanding Org

Org is primarily a personal information manager that keeps track of your tasks and schedule, and you’ll learn more about those features in chapters 8 and 9. However, Org also has powerful outline-management tools, which is why I recommend it to people who want to write and organize outlined notes.

The structure of an Org file is simple: a plain text file with headlines, text, and some additional information such as tags and timestamps. A headline is any line that stars with a series of asterisks. The more asterisks there are, the deeper the headline is. A second-level headline is the child of the first-level headline before it, and so on. For example:

* This is a first-level headline
Some text under that headline
** This is a second-level headline
Some more text here
*** This is a third-level headline
*** This is another third-level headline
** This is a second-level headline

Because Org uses plain text, it’s easy to back up or process using scripts. Org’s sophistication comes from keyboard shortcuts that allow you to quickly manipulate headlines, hide and show outline subtrees, and search for information.

GNU Emacs 22 includes Org. To automatically enable Org mode for all files with the .org extension, add the following to your ~/.emacs:

(require 'org)
(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))

To change to org-mode manually, use M-x org-mode while viewing a file. To enable Org on a per-file basis, add

-*- mode: org -*- 

to the first line of the files that you would like to associate with Org.

Working with Outlines

You can keep your notes in more than one Org file, but let’s start by creating ~/notes.org. Open ~/notes.org, which will automatically be associated with Org Mode. Type in the general structure of your document. You can type in something like this:

 * Introduction
 * ...

You can also use M-RET (org-meta-return) to create a new headline at the same level as the one above it, or a first-level headline if the document doesn’t have headlines yet.

Create different sections for your work. For example, a thesis might be divided into introduction, review of related literature, description of study, methodology, results and analysis, and conclusions and recommendations. You can type in the starting asterisks yourself, or you can use M-RET (org-meta-return) to create headings one after the other.

Now that you have the basic structure, start refining it. Go to the first section and use a command like C-o (open-line) to create blank space. Add another headline, but this time, make it a second-level headline under the first. You can do that by either typing in two asterisks or by using M-RET (org-meta-return, which calls org-insert-heading) and then M-right (org-metaright, which calls org-do-demote). Then use M-RET (org-meta-return; org-insert-heading) for the other items, or type them in yourself. Repeat this for other sections, and go into as much detail as you want.

What if you want to reorganize your outline? For example, what if you realized you’d accidentally put your conclusions before the introduction? You could either cut and paste it using Emacs shortcuts, or you can use Org’s outline management functions. The following keyboard shortcuts are handy:

Action Command Shortcut Alternative
Move a subtree up org-metaup / org-move-subtree-up M-up C-c C-x u
Move a subtree down org-metadown / org-move-subtree-down M-down C-c C-x d
Demote a subtree org-shiftmetaright / org-demote-subtree S-M-right C-c C-x r
Promote a subtree org-shiftmetaleft / org-promote-subtree S-M-left C-c C-x l
Demote a headline org-metaright / org-do-demote M-right C-c C-x <right>
Promote a headline org-metaleft / org-do-promote M-left C-c C-x <left>
Collapse or expand a subtree org-cycle (while on headline) TAB  
Collapse or expand everything org-shifttab (org-cycle) S-TAB C-u TAB

Use these commands to help you reorganize your outline as you create a skeleton for your document. These commands make it easy to change your mind about the content or order of sections. You might find it easier to sketch a rough outline first, then gradually fill in more and more detail. On the other hand, you might find it easier to pick one section and keep drilling it down until you have headlines some seven levels deep. When you reach that point, all you need to do is add punctuation and words like "and" or "but" between every other outline item, and you’re done!

Well, no, not likely. You’ll probably get stuck somewhere, so here are some tips for keeping yourself going when you’re working on a large document in Org: brainstorming and getting a sense of your progress.

Brainstorming

Brainstorming is a great way to break your writer’s block or to generate lots of possibilities. The key idea is to come up with as many ideas as you can, and write them all down before you start evaluating them.

I usually switch to paper for mindmapping and brainstorming because paper helps me think in a more colorful and non-linear way. However, it can be hard to manage large mindmaps on paper, because you can’t reorganize nodes easily. Despite its text-heavy interface, Org is one of the best mindmapping tools I’ve come across. Because it’s built into Emacs, everything can be done through keyboard shortcuts.

When you’re brainstorming, you might like working from two different directions. Sometimes it’s easier to start with an outline and to add more and more detail. Other times, you may want to jot quick ideas and then organize them into groups that make sense. Org provides support for both ways of working.

Brainstorming bottom-up is similar to David Allen’s Getting Things Done method in that separating collection from organization is a good idea. That is, get the ideas out of your head first before you spend time trying to figure out the best way to organize them. To get things out of your head quickly, collect your ideas by using the M-RET (org-meta-return) to create a new heading, typing in your idea, and using M-RET (org-meta-return) to create the next heading. Do this as many times as needed.

One way to encourage yourself to brainstorm lots of ideas is to give yourself a quota. Charles Cave described this technique in an article on org-mode, and it’s a great way to use structure to prompt creativity. Simply start by adding a number of empty headings (say, 20), then work towards filling that quota. For example, you might start with ten blanks for ideas, then gradually fill them in like this:

* Things that make me happy
** Curling up with a good book
** Watching a brilliant sunset
** Giving or getting a big warm hug
** Writing a cool piece of Emacs code
** 
** 
** 
**
** 
**

When all of your ideas are in Org, start organizing them. This is where you move ideas around using M-S-up (org-shiftmetaup) and M-S-down (org-shift-metadown), which call org-move-subtree-up and org-move-subtree-down. This is also a good time to use headings to group things together.

Getting a Sense of Progress

You’ve brainstormed. You’ve started writing your notes. And if you’re working on a large document, you might lose steam at some point along the way. For example, while working on this book, I often find myself intimidated by just how much there is to write about Emacs. It helps to have a sense of progress such as the number of words written or the number of sections completed. To see a word count that updates every second, add this code to your ~/.emacs:

(defvar count-words-buffer
  nil
  "*Number of words in the buffer.")

(defun wicked/update-wc ()
  (interactive)
  (setq count-words-buffer (number-to-string (count-words-buffer)))
  (force-mode-line-update))
  
; only setup timer once
(unless count-words-buffer
  ;; seed count-words-paragraph
  ;; create timer to keep count-words-paragraph updated
  (run-with-idle-timer 1 t 'wicked/update-wc))

;; add count words paragraph the mode line
(unless (memq 'count-words-buffer global-mode-string)
  (add-to-list 'global-mode-string "words: " t)
  (add-to-list 'global-mode-string 'count-words-buffer t)) 

;; count number of words in current paragraph
(defun count-words-buffer ()
  "Count the number of words in the current paragraph."
  (interactive)
  (save-excursion
    (goto-char (point-min))
    (let ((count 0))
      (while (not (eobp))
	(forward-word 1)
        (setq count (1+ count)))
      count)))

The best way I’ve found to track my progress in terms of sections is to use a checklist. For example, the collapsed view for this section looks like this:

** Outline Notes with Org [7/9]    ;; (1)
*** [X] Outlining Your Notes...    ;; (2)
*** [X] Understanding Org...
*** [X] Working with Outlines...
*** [X] Brainstorming...
*** [ ] Getting a Sense of Progress... ;; (3)
*** [X] Searching Your Notes...
*** [X] Hyperlinks...
*** [X] Publishing Your Notes...
*** [ ] Integrating Remember with Org

This is based on the checklist feature in Org. However, the standard feature works only with lists like this:

*** Items [1/3]
- [X] Item 1
- [ ] Item 2
- [ ] Item 3

Add the following code to your ~/.emacs in order to make the function work with headlines:

(defun wicked/org-update-checkbox-count (&optional all)
  "Update the checkbox statistics in the current section.
This will find all statistic cookies like [57%] and [6/12] and update
them with the current numbers.  With optional prefix argument ALL,
do this for the whole buffer."
  (interactive "P")
  (save-excursion
    (let* ((buffer-invisibility-spec (org-inhibit-invisibility)) 
	   (beg (condition-case nil
		    (progn (outline-back-to-heading) (point))
		  (error (point-min))))
	   (end (move-marker
		 (make-marker)
		 (progn (or (outline-get-next-sibling) ;; (1)
			    (goto-char (point-max)))
			(point))))   
	   (re "\\(\\[[0-9]*%\\]\\)\\|\\(\\[[0-9]*/[0-9]*\\]\\)")
	   (re-box
	    "^[ \t]*\\(*+\\|[-+*]\\|[0-9]+[.)]\\) +\\(\\[[- X]\\]\\)")
	   b1 e1 f1 c-on c-off lim (cstat 0))
      (when all
	(goto-char (point-min))
	(or (outline-get-next-sibling) (goto-char (point-max))) ;; (2)
	(setq beg (point) end (point-max)))
      (goto-char beg)
      (while (re-search-forward re end t)
	(setq cstat (1+ cstat)
	      b1 (match-beginning 0)
	      e1 (match-end 0)
	      f1 (match-beginning 1)
	      lim (cond
		   ((org-on-heading-p)
		    (or (outline-get-next-sibling) ;; (3)
			(goto-char (point-max)))
		    (point))
		   ((org-at-item-p) (org-end-of-item) (point))
		   (t nil))
	      c-on 0 c-off 0)
	(goto-char e1)
	(when lim
	  (while (re-search-forward re-box lim t)
	    (if (member (match-string 2) '("[ ]" "[-]"))
		(setq c-off (1+ c-off))
	      (setq c-on (1+ c-on))))
	  (goto-char b1)
	  (insert (if f1
		      (format "[%d%%]" (/ (* 100 c-on)
					  (max 1 (+ c-on c-off))))
		    (format "[%d/%d]" c-on (+ c-on c-off))))
	  (and (looking-at "\\[.*?\\]")
	       (replace-match ""))))
      (when (interactive-p)
	(message "Checkbox statistics updated %s (%d places)"
		 (if all "in entire file" "in current outline entry")
		 cstat)))))
(defadvice org-update-checkbox-count (around wicked activate)
  "Fix the built-in checkbox count to understand headlines."
  (setq ad-return-value
	(wicked/org-update-checkbox-count (ad-get-arg 1))))

Now add [ ] or [X] to the lower-level headlines you want to track. Add [/] to the end of the higher-level headline containing those headlines. Type C-c # (org-update-checkbox-count) to update the count for the current headline, or C-u C-c C-# (org-update-checkbox-count) to update all checkbox counts in the whole buffer.

If you want to see the percentage of completed items, use [%] instead of [/]. I find 7/9 to be easier to understand than 71%, but fractions might work better for other cases.

Okay, you’ve written a lot. How do you find information again?

Searching Your Notes

When you’re writing your notes, you might need to refer to something you’ve written. You may find it helpful to split your screen in two with C-x 3 (split-window-horizontally) or C-x 2 (split-window-vertically). To switch to another window, type C-x o (other-window) or click on the window. To return to just one window, use C-x 1 (delete-other-windows) to focus on just the current window, or C-x 0 (delete-window) to get rid of the current window.

Now that you’ve split your screen, how do you quickly search through your notes? C-s (isearch-forward) and C-r (isearch-backward) are two of the most useful Emacs keyboard shortcuts you’ll ever learn. Use them to not only interactively search your Org file, but also to quickly jump to sections. For example, I often search for headlines by typing * and the first word. Org searches collapsed sections, so you don’t need to open everything before searching.

To search using Org’s outline structure, use C-c / r (org-sparse-tree, regexp), which will show only entries matching a regular expression. For more information about regular expressions, read the Emacs info manual entry on Regexps. Here are a few examples:

To find Search for
All entries containing "cat" cat
All entries that contain "cat" as a word by itself (example: "cat," but not "catch") \<cat\>
All entries that contain 2006, 2007, or 2008 200[678]

Hyperlinks

If you find yourself frequently searching for some sections, you might want to create hyperlinks to them. For example, if you’re using one file for all of your project notes instead of splitting it up into one file per project, then you probably want a list of projects at the beginning of the file so that you can jump to each project quickly.

You can also use hyperlinks to keep track of your current working position. For example, if you’re working on a long document and you want to keep your place, create a link anchor like <<TODO>> at the point where you’re editing, and add a link like [[TODO]] at the beginning of your file.

You can create a hyperlink to a text search by putting the keywords between two pairs of square brackets, like this:

  See [[things that make me happy]] 

You can open the link by moving the point to the link and typing C-c C-o (org-open-at-point). You can also click on the link to open it. Org will then search for text matching the query. If Org doesn’t find an exact match, it tries to match similar text, such as "Things that make me really really happy".

If you find that the link does not go where you want it to go, you can limit the text search. For example, if you want to link to a headline and you know the headline will be unique, you can add an asterisk at the beginning of the link text in order to limit the search to headlines. For example, given the following text:

In this file, I'll write notes on the things that make me happy. (1)
If I ever need a spot of cheering up, I'll know just what to do! 

** Things that make me happy (2) 
*** ...

Example 
Link 1: [[things that make me happy]] 

Link 2: [[*things that make me happy]] 

Link 1 would lead to (1), and Link 2 would lead to (2).

To define a link anchor, put the text in double angled brackets like this:

<<things that make me happy>> 

A link like [[things that make me happy]] would then link to that instead of other occurances of the text.

You can define keywords that will be automatically hyperlinked throughout the file by using radio targets. For example, if you’re writing a jargon-filled document and you frequently need to refer to the definitions, it may help to make a glossary of terms such as "regexp" and "radio target", and then define them in a glossary section at the end of the file, like this:

*** glossary
<<<radio target>>> A word or phrase that is automatically hyperlinked whenever it appears. 
<<<regexp>>> A regular expression. See the Emacs info manual. 

Radio targets are automatically enabled when an Org file is opened in Emacs. If you’ve just added a radio target, enable it by moving the point to the anchor and pressing C-c C-c (org-ctrl-c-ctrl-c). This turns all instances of the text into hyperlinks that point to the radio target.

Publishing Your Notes

You can keep your notes as a plain text file, or you can publish them as HTML or LaTeX. HTML seems to be the easiest way to let non-Emacs users read your notes, as a large text file without pretty colors can be hard to read.

To export a file to any of the formats that Org understands by default, type C-c C-e (org-export). You can then type ‘h’ (org-export-as-html) to export it as HTML for websites. You can also type ‘l’ (org-export-as-latex) to export it to LaTeX, a scientific typesetting language, which can then be published as PDF or PS. Another way to convert it to PDF is to export it as HTML, open it in OpenOffice.org Writer, and use the Export to PDF feature. You can also open HTML documents in other popular word processors to convert them to other supported formats.

By default, Org exports all the content in the current file. To limit it only to the visible content, use C-c C-e v (org-export-visible) followed by either ‘h’ for HTML or ‘l’ for LaTeX.

If you share your notes, you may want to export an HTML version every time you save an Org file. Here is a quick and dirty way to publish all Org files to HTML every time you save them:

(defun wicked/org-publish-files-maybe ()
  "Publish this file."
  (org-export-as-html-batch)
  nil)
(add-hook 'org-mode-hook  ;; (1)
 (lambda () 
  (add-hook (make-local-variable 'after-save-hook) ;; (2)
            'wicked/org-publish-files-maybe)))

(Update: Feb 22 2011: Thanks to Neilen for the fix!)

What if most of your files are private, but you want to publish only a few of them? To control this, let’s add a new special keyword "#+PUBLISH" to the beginning of the files that you want to be automatically published. Replace the previous code in your ~/.emacs with this:

(defun wicked/org-publish-files-maybe ()
  "Publish this file if it contains the #+PUBLISH: keyword"
  (save-excursion
   (save-restriction
    (widen)
    (goto-char (point-min))
    (when (re-search-forward 
           "^#?[ \t]*\\+\\(PUBLISH\\)"
           nil t) 
     (org-export-as-html-batch)   
     nil))))

(add-hook 'org-mode-hook
 (lambda ()
  (add-hook (make-local-variable 'after-save-hook)
            'wicked/org-publish-files-maybe)))

and add #+PUBLISH on a line by itself to your ~/notes.org file, like this:

 #+PUBLISH
 * Things that make me happy

When you save any Org file that contains the keyword, the corresponding HTML page will also be created. You can then use a program like rsync or scp to copy the file to a webserver, or you can copy it to a shared directory.

Integrating Remember with Org

You can use Remember to collect notes that you will later integrate into your outline. Add the following code to your ~/.emacs to set it up:

(global-set-key (kbd "C-c r") 'remember)    ;; (1)
(add-hook 'remember-mode-hook 'org-remember-apply-template) ;; (2)
(setq org-remember-templates  
      '((?n "* %U %?\n\n  %i\n  %a" "~/notes.org")))  ;; (3)
(setq remember-annotation-functions '(org-remember-annotation)) ;; (4)
(setq remember-handler-functions '(org-remember-handler)) ;; (5)

With this code, you can type C-c r n (remember, Notes template) to pop up a buffer (usually containing a link to whatever you were looking at), write your note, and type C-c C-c (remember-buffer) to save the note and close the buffer.

You can use this to store snippets in your notes file, or to quickly capture an idea that comes up when you’re doing something else.

Now you know how to sketch an outline, reorganize it, fill it in, brainstorm, stay motivated, and publish your notes. I look forward to reading what you have to share!

Donated $110 through Kiva, a microcredit site

January 19, 2008 - Categories: Uncategorized

I believe in microcredit. I believe in helping people help themselves and people around them through entrepreneurship. Access to capital is hard if you’re just starting a business, and microcredit loans bridge that step. Besides, it’s great learning a little bit about the people you’re lending to, instead of just donating to a big organization.

I believe in microcredit. I just hadn’t done anything about it until today, when I read Quinn’s blog post about receiving a $25 Kiva gift certificate and lending to a barber in Cambodia. I registered on the site and lent $100 from my charity budget.

my-loans[7]

I lend to women, because statistics show that they have a higher repayment ratio compared to men. I prefer to lend to people who have had experience with microlending and business. In particular, I prefer to lend to women with children and a business, because they’ve got really good reasons to manage the business well and they’re used to handling lots of things going on at the same time. I also prefer to lend to groups, because they have good social support and motivation.

I believe in microcredit, and I’m glad that I can do something about it. In fact, I’m going to follow Quinn’s example here and regularly give away gift certificates, one each month. =) Maybe even two, if I like the system.

Now if Kiva would partner with a microfinance organization in the Philippines, that would be awesome.

Reading Isn’t Dead Yet!

January 19, 2008 - Categories: reading

 

As an internet-addicted millennial, I’m well aware that the printed word is dying. Our generation is going to be the death of printed magazines and newspapers. I haven’t read a newspaper in years, but thanks to Google News, Digg, Reddit, NowPublic and others; I’m still as informed as I was when I used to keep scrapbooks full of newspaper clippings.

But what I didn’t know is that books are already toast. Steve Jobs recently told the New York Times his opinion on Amazon’s Kindle electronic book reader.

“It doesn’t matter how good or bad the product is, the fact is that people don’t read anymore,” he said. “Forty percent of the people in the U.S. read one book or less last year. The whole conception is flawed at the top because people don’t read anymore.”

Ouch.

Will Pate, If People Don’t Read, Why Keep Writing?

As an Internet-addicted millenial, I’m also deeply addicted to the reading. I read. A lot. I read because I love learning about things and books give me the most bang for the buck when it comes to established topics, thanks to the research and thought people have put into their books, and I read because I love having fantastic conversations with fellow bookworms. Granted, I read more than almost everyone I know, but most of my friends read a lot too. And if we’re this weird geeky island in a sea of people who’d rather watch television or video and be constrained to the speed and order at which someone communicates, then that’s the way it is.

I don’t think the picture is as bleak as Steve Jobs paints it, though. People read and write, but they read and write mostly light material: e-mail, blog posts, things like that. A Vision of Students Today (video below) makes that point very well. Jump to 1:58 if you want to see just that bit.

So people read a lot, but it’s like what people would get if they read only magazine or newspaper articles. It’s like snacking instead of eating your vegetables. Vegetables, properly done, can be quite yummy. Books, too. But the good thing about it is that many books are going online, whether it’s because publishers and authors are trying new ways to reach more people, or even people like me are writing online because of the quick feedback of the Internet.

The printed word isn’t dying. It’s going online. It’s moving onward and upward. And if that forces writers and publishers and readers (who might also be writers and publishers in this new world) to figure out new models for the way we do things, great!

Book notes

January 19, 2008 - Categories: reading
Writing To Learn
by William K. Zinsser
I can’t do justice to this book. It’s full of beautiful writing. After I return this to the library, I’m getting my own copy to keep around for inspiration.
Read more about this book…
  • How to Write Fast (While Writing Well)
    by David Fryxell

    Great read. Recommend. Key points: discipline and organization.

  • There’s plenty of time for writing books (examples of people who write books five minutes at a time).
  • Use outlines and other tools to help you organize your material.

    Read more about this book…

Money Can Buy Happiness: How to Spend to Get the Life You Want
by MP Dunleavey

Interesting read, nothing particularly new to me, but good advice.

Asset 1: your valuable time
Asset 2: your personal resources
Asset 3: your health
Asset 4: financial control
Asset 5: mutual fund
Asset 6: get into bonds
Asset 7: giving to feel good

Page 32. Like many economists, he found that some arenas have a greater impact on people’s contentment with life. For example, a rewarding family life was a key ingredient in overall life satisfaction, whereas work tended to not have as big an impact.

Read more about this book…

Book Yourself Solid: The Fastest, Easiest, and Most Reliable System for Getting More Clients Than You Can Handle Even if You Hate Marketing and Selling
by Michael Port

I’d recommend this for independent consultants. Good, practical advice. E-mail me if you want my book notes. =)

Read more about this book…

Open an Online Business in 10 Days
by Melissa Campanelli

Nothing particularly interesting.

Read more about this book…

Business Leaders and Success: 55 Top Business Leaders and How They Achieved Greatness
by Investor’s Business Daily, William O’Neil

Nothing spectacular here either.

Read more about this book…

What gets measured gets managed

January 19, 2008 - Categories: writing

I spent the afternoon working on a progress meter for my writing. I like measuring things, and I think this will help keep me motivated. Besides, I wanted an excuse to hack. ;)

I initially wrote this in PHP, but then I converted it to Emacs Lisp just for kicks. I like my Emacs code better. =)

Here’s where I am right now:

7: Managing Your Notes

 

3655 of 16000 words

Wicked Cool Emacs
9 8 7 6 5 4 3 2 10 1

I still have to tweak the code a bit before I feel comfortable putting it out there, but if this works, then cool!

10 Terrific WordPress Plugins

January 19, 2008 - Categories: blogging, wordpress

Here are ten of my favorite WordPress plugins:

Discover old posts and make random connections.

  1. On this day
  2. Random Posts widget
  3. Similar Posts

Make it easier for people to comment and keep track of the conversation. Make it easier to respond to those comments, too!

  1. Brian’s Threaded Comments
  2. Subscribe To Comments
  3. Better Comments Manager

Check out these other plugins.

  1. Flexo Archives - if you’ve been blogging since 2002, you need one of these.
  2. FeedWordPress – I used this to import all of my old blog posts from my Planner-based blog. Great if you keep more than one blog.
  3. Google XML Sitemaps – Because it doesn’t matter what you write if Google can’t find it.
  4. TD Word Count – Nice to see how many words you’ve written. Tweak this a little to share your stats with the rest of the world.

Weekly review

January 20, 2008 - Categories: weekly

Work: While reviewing the work I’ve done on the social media guide, I found out that I’d written well over 16,000 words in the last few weeks. The guide is shaping up quite nicely, and I’m looking forward to turning it over in the next week or two. This is good, because there’s a whole bucket load of work coming my way. The next two weeks are going to be quite interesting.

Book: The chapter on notetaking in Emacs is starting to take shape. I’m at 6000 words, and my target is 16,000. My editor and I are gradually tweaking the structure. I’m learning!

Life:
Speech recognition is now accurate enough for me to read book notes to my computer, and this is actually quite fun.

I’ve made a list of little things that I could buy or do to make my day-to-day life better. Surprisingly, most of the things in this list aren’t expensive. I look forward to using my play money budget in a planned manner.

W- is doing a fantastic job of keeping me sane. He’s just amazing. He’s also keeping me very well fed, with buttermilk cinnamon rolls and couscous-stuffed chicken.

It’s my dad’s birthday tomorrow!

Goals for next week.

Book: If I write 1500 words every day for the next week, I’ll be done with all the content by Sunday. Then I can spend the last week of January editing this chapter and the previous one. I need to finish the section on Planner, and I’m also thinking of writing about howm and a few other Emacs notetaking techniques.

Life: I look forward to touching base with Flo and maybe Leigh on Saturday. Also, I’ll invest some time in taking care of some of the things that make my life easier. I’ll start with 10 minutes of exercise every day, or maybe 20 if I can get that sorted out. =) It might not be fun immediately, but it will become fun if I stick with it.

Work: Customize the social media wiki with more client-specific information, and turn it over. Prepare for my next engagements. Starting to get the hang of this!

On second thought…

January 21, 2008 - Categories: writing

On second thought, the best way to go about this isn’t just another writing sprint. After all, writing is such a small part of writing. Editing is so much more important. What I really need to do to take advantage of the support that I can get from my editor is to go back and start incorporating suggestions he made into the previous chapter. Then I’ll get a better sense of what a good chapter looks like, feels like. If nothing else, then I’ll have a good chapter to look at and say, hey, I can actually write stuff like that.

You have received a painting from Sacha

January 21, 2008 - Categories: sketches

080121-06.20.58.png

You have received a painting from Sacha

January 21, 2008 - Categories: sketches

080121-06.25.20.png

Editing

January 21, 2008 - Categories: writing

I didn’t write 1500 words today. I spent most of the evening trying to remove words. Instead of writing new material for my chapter on taking notes, I edited the first 10 pages of my previous chapter on task management.

I like editing. I can read what I want to say, and all I have to do is figure out how to say it better. I translate from something that I understand to something that other people might understand. It helps to throw away this abstract idea of "people" and write for specific people I know. I like thinking of a few other geek girls who are also interested in Emacs, like Clair and Quinn. How would I explain Emacs task management in a way that would help my friends go, "Aha! Now I see it!"? When I get the technical stuff nailed, I cut and tweak until it sounds like something I’d actually say to them.

Editing is work, but it’s good work. This is what’s going to make me a good writer: deliberate practice. I can feel the changes in the text. I think there are much better ways to say things in the way I say them right now. I don’t know what those ways are yet, but I’m looking forward to finding out. This is not to say that I’ll spend the next few decades obsessively polishing a single chapter. This book is a starting point, not the end, and I like writing and learning too much to get stuck.

I’d still like to make it to my self-imposed deadline of January 31 for this chapter, but sprinting towards that deadline would be less effective than deliberately practicing writing, deliberately trimming and polishing my previous work until I get a sense of what it means to write.

More books

January 22, 2008 - Categories: reading

"I enjoyed lunch too :) Please email the titles of all of those books! They all sounded wonderful," tweeted Heidi Hansen. E-mail, Heidi? ;) E-mail is so old-school. Here are the books we talked about:

The Leader’s Guide to Storytelling: Mastering the Art and Discipline of Business Narrative
by Stephen Denning

Read the first few chapters to learn about telling springboard stories. This book is more about influencing large groups of people, but you might find the tips on storytelling useful even if you’re working one-on-one. Tell people stories about the ways social software saves you time and helps you do more, and tell those stories in a way that helps people imagine the time they could save and the things they could do. =) (Also, it’s a good read.)

Read more about this book…

Influencer: The Power to Change Anything
by Kerry Patterson, Joseph Grenny, David Maxfield, Ron McMillan, Al Switzler

This one talks about the personal, social, and structural motivations and abilities that you need to think about if you’re influencing adoption. Again written for the large-scale, but worth keeping in mind when you’re trying to influence behavior one-on-one. Also good because it’ll help you understand why you can’t win everyone… =)
Read more about this book…

I also often recommend this:

Crossing the Chasm
by Geoffrey A. Moore

also has some good stuff about technology adoption. Here you’ll see the technology adoption curve, with innovators, early adopters, early majority, late majority, and laggards. (Or something like that…)

Read more about this book…

 

Alex might find these books about writing useful, as they talk about scientific writing as well:

Writing To Learn
by William K. Zinsser

Start with this one; it’s about bridging the gap between science and writing. =)
Read more about this book…

The Periodic Table
by Primo Levi
One of William Zinsser’s favorite examples of chemical writing. A friend lent this to me, and it’s a great read.  
Read more about this book…

 

Jennifer Dodd, I think I mentioned the first three books to you as well, and these ones for independent consultants:

Million Dollar Consulting: The Professional’s Guide to Growing a Practice
by Alan Weiss
A friend strongly recommended this. I haven’t read it yet, but I trust his taste in books.
Read more about this book…
Flawless Consulting: A Guide to Getting Your Expertise Used
by Peter Block

Read more about this book…

Book Yourself Solid: The Fastest, Easiest, and Most Reliable System for Getting More Clients Than You Can Handle Even if You Hate Marketing and Selling
by Michael Port

Just finished this one. Practical advice. Haven’t read enough in this area to tell you if it’s one of the better books, but it seems okay. =)
Read more about this book…

 

WLW really should have a frequently-recommended-books plugin.

You have received a painting from Sacha

January 22, 2008 - Categories: sketches

080123-03.46.52.png

You have received a painting from Sacha

January 23, 2008 - Categories: sketches

080124-03.57.36.png

Sand and snow

January 23, 2008 - Categories: sketches

080124-04.07.06.png

Today

January 24, 2008 - Categories: work

The highlight of the day was finding out that one of my presentations had been accepted to IBM’s Technical Leadership Exchange, one of the most prestigious conferences in IBM. It’s intimidating, considering I have barely 3 months experience and the rest of the people there bring decades of expertise. It’s intimidating because some of my role models submitted abstracts that weren’t accepted. It’s intimidating, because it’s such a terrific opportunity to learn. I don’t feel anything like a technical leader, but I’ll learn as much as I can and share whatever knowledge and connections I gain.

My work is going well too. I really appreciate hearing the feedback from my clients, and I’m glad to see that the guide I wrote is becoming a useful resource for them. I have two new engagements coming up next week. I’m starting to get a sense of the value I can contribute. I’m starting to see how I can fit.

I am making slow but steady progress in my book. I edited another 10 pages, bringing me up to 20 out of 47 in the previous chapter, reorganizing, formatting, fixing the little typos that somehow slipped out. It’s slow going, but essential work. I wonder if I can outsource it.

All in a day’s work.

This weekend: more writing, more editing, more catching up with friends. I’m looking forward to framing the family portraits my mom sent me, and maybe I’ll pick up a couple of picture frames from IKEA. I’ve got a number of talks coming up, which means I need to start writing the material for them.

This morning started out a bit gray, but I’m learning that I can keep working through it.

You have received a painting from Sacha

January 26, 2008 - Categories: sketches

080126-06.53.56.png

You have received a painting from Sacha

January 26, 2008 - Categories: sketches

080126-06.58.37.png

Yak shaving with OpenOffice.org

January 27, 2008 - Categories: Uncategorized

Fiddly little editing tasks are driving me mad. Formatting all the keyboard shortcuts as EmphasisBold and the command names as Literal… I figured that if I could write a program that got 80% of the cases right, that would not only save me time but also stress. So I spent two hours shaving the yak today, learning just enough OpenOffice.org Basic to put together two procedures that attempt to handle most of the cases. FormatCommands looks for anything within parentheses inside a body paragraph, and FormatKeyboardShortcut looks for things like C-c r t (remember, tasks). I don’t expect this to be usable to anyone, but if it can be a useful jumping-off-point for other people, that would be awesome.

Sub FormatCommands
   oDoc = ThisComponent
   Descriptor = oDoc.createSearchDescriptor()
   Descriptor.SearchRegularExpression = true
   Descriptor.SearchString = "\([^)]+\)"
   Found = oDoc.FindFirst(Descriptor)
   do while not isNull(Found)
       oNew = oDoc.Text.createTextCursorByRange(Found.Start)
       if oNew.CharStyleName = "" and (oNew.ParaStyleName = "Body" or oNew.ParaStyleName = "BodyFirst") then
             oNew.goRight(1, False)
             oNew.goRight(Len(Found.String) - 2, True)
             oNew.CharStyleName = "Literal"
       end if 
     Found = oDoc.findNext(Found.End, Descriptor)
   Loop   
End Sub
Sub FormatKeyboardShortcuts
   oDoc = ThisComponent
   Descriptor = oDoc.createSearchDescriptor()
   Descriptor.SearchRegularExpression = true
   Descriptor.SearchCaseSensitive = true
   Descriptor.SearchString = "([CMS]-)+([a-zA-Z0-9]+)*( [a-zA-Z0-9])* "
   Found = oDoc.FindFirst(Descriptor)
   do while not isNull(Found)
           if Found.CharStyleName = "" and (Found.ParaStyleName = "Body" or Found.ParaStyleName = "BodyFirst") then
                 Found.CharStyleName = "EmphasisBold"
           end if 
     Found = oDoc.findNext(Found.End, Descriptor)
   Loop   
End Sub

Library book reminder script – Perl geeking required

January 27, 2008 - Categories: geek, library

W- and I borrow lots of books from the library. This script helps keep order in the house by reminding us when either of us have books that are due. I’ve removed our information from it and have made no efforts to make it user-friendly. Perl geeking required.

opac-reminder.txt

(It’s really a .pl. Can’t be bothered to mess around with forcing content type at 1:10 AM…)

Here’s the one that generates the RSS file that’s pulled into the right sidebar of my blog:

opac2rss.txt

Enjoy!

Taking it Offline

January 27, 2008 - Categories: weekly

This was a week of online encounters becoming offline ones. I had lunch with Heidi Hansen, a librarian from Ann Arbor, Michigan. She was in Toronto for a few days, and Andy Piper suggested that we get together because we’re both interested in social networking. To give you an idea of how small the world is, we had never met our mutual friend face to face. Andy Piper had “met” her randomly through a blog post about Plazes, and I met Andy through IBM. He knew we were both interested in social computing, so he told us about each other. Great call. Over lunch at Green Mango (730 Yonge Street), Heidi and I chatted about wikis, blogs, technology adoption, life, and other wonderful things. I find that people in library and information sciences are just as techie as I am when it comes to social networking and information spaces, even though they’d never admit it. =) I enjoyed our conversation, and I’m thrilled to hear that she and her husband will be moving to Toronto, and that her husband is taking a postdoc at the University of Toronto. (Andy Piper blogged about it too.) I look forward to keeping in touch!

There’s something different about having a conversation with another blogger. Our online lives transform our off-line interactions. I had never met Heidi before, but a quick scan of her blog showed me that I was going to enjoy that conversation with her. And I did. There was no awkwardness, no shyness, not even a twinge of the asymmetry I feel when I talk to people who know a lot more about me than I do about them. In those asymmetric conversations, I feel I need to ask a lot of questions so that I can understand the other person as much as he or she understands me. When I talk to people who have rich online presences, I don’t feel that imbalance. We just slip right into easy conversation.

Another person I’d gotten to know through IBM blogs is Jonathan Feinberg, maker of Dogear (our enterprise social bookmarking system) and other systems that make my day-to-day life so much better. When I heard that he was flying into town for a gig (one night only!), I had to go and see this other side of him. He played drums for the launch of Michael Holt‘s new CD, “Windows,” held at The Music Gallery (197 John St.) Great venue. I knew it was a mistake leaving my camera behind. This mistake was confirmed when he took a break from the drums in order to put on a red clown nose for a hilarious act. Jon in a red clown nose! Worth it. After the show, we chatted about music and finding time to do what you love when you also have other priorities. Something worth thinking about.

Speaking of things to think about, I had brunch with Florina Xhabija at Eggstacy (1255 Bay St). I met Flo at a DemoCamp when she walked up to me and said that she liked my blog. I had a great conversation with her and other U of T students at the DemoCamp afterparty, and we caught up over brunch yesterday. We talked about psychology, gender roles in computer science, life decisions, social networking, and other things. She’s also a big fan of tea, so I might organize a tea party soon. I prefer to spend time at home, and this week’s been an anomaly in terms of going out. Still, that was a fun conversation, and I’m looking forward to the next one.

Work is going well. My second client project will be extended, and I’m thrilled to see that the guide I am making for them is starting to take hold. Next week is packed. I have a workshop on Monday and Friday, and a short term engagement during the other days of the week. I’m starting to see how I provide value, and my three upcoming events (two as speaker, one as organizer) will certainly stretch me.

Our plan for our trip to the Philippines is starting to take shape. We’re thinking of spending four days in Bohol, and if I’m really lucky, maybe I can convince my dad to go on a 4- or 5- day trip up to the Mountain Provinces. That should cover most of the sightseeing, and we can always leave things to do for next time.

My goals for next week are:

Speech recognition – a month of fun

January 27, 2008 - Categories: Uncategorized

I hadn’t expected speech recognition to be this much fun. Something magical happens when I take my fingers off the keyboard. I give myself permission to talk in an unstructured way. Instead of looking down at my laptop monitor, I find myself looking up imagining myself talking to a friend. I’m free to use gestures, turning an idea over and over, trying to grasp what I want to say. And most surprising of all, I can feel the difference when I can hear my own enthusiasm. That clues me into the topics I want to talk about.

I tried this before with a voice recorder. I never found the time to listen to myself again, trying to pick out my words against the background of subway announcements and crowd chatter. Somehow, working with the computer changes things. Dragon NaturallySpeaking skips over my silences, successfully transcribes many of the words even in a rapid-fire brain dump, and breaks apart the phases of seeking out what I want to say, figuring out how to say it, and editing it into something that makes sense.

I don’t use it all the time. I’m a little self-conscious about talking to my computer when there’s somebody else in the room. (At this,  W- smiles at me.) I still carry a portable voice recorder, but because my recorder doesn’t do any noise cancellation, I find the easiest way is to re-dictate the interesting parts. But I appreciate the freedom that dictation gives me. I don’t know if I work any faster or slower with it, but I do know that I work differently. And if it lets me reach different ideas, then it’ll be well worth it.

Time management and work boundaries

January 27, 2008 - Categories: book, career

 

[Never Wrestle With A Pig]:

McCormack addresses time management here, making several astute points. The biggest one – and the one that I see many people not actually doing – is to set a very strict time for leaving work and sticking to it. Doing that ensures two things: one, that you have adequate time for personal growth and rest so that, two, during the time you’re actually there, you can be highly productive. I’ve seen people burn the midnight oil quite often – it works fine for a little while, but they usually wind up exhausted, underproductive, and bitter about things, none of which are helpful for your career.

The Simple Dollar – Review: Never Wrestle With A Pig
I’m in my twenties, and this is supposed to be when I focus almost exclusively on my career, put in the long hours, and do whatever I need to do in order to get on the fast track and stay there. That might work for other people, but I don’t think it would work for me. I need the space for growth and rest, and there are other important things in life. I’ll work hard when it’s time to work, and I’ll invest time in developing other areas of my life as well.

Windows Live Writer and blogging

January 28, 2008 - Categories: blogging

You might have noticed that I haven’t written much about Emacs lately. I confess: I’d been distracted by the dark side of the Force. I’m not referring to Lego Star Wars for the DS, but to using Windows Live Writer to post entries to my WordPress blog. Writing about blogging on Planner was awkward when I wasn’t blogging on Planner.

I have to confess: I like Windows Live Writer. I like easily uploading images to my blog. I like previewing my blog posts. I like integrating with my RSS reader so that it automatically picks up an excerpt and a link back to the original site. (It’s a little like a limited Remember.)

But I miss Emacs. I miss referring to people in the course of my blog post and using a keyboard shortcut to the hyperlink to their blog, website, or whatever else was in their contact record. I miss the freedom to change all the keyboard shortcuts and define my own markup. I miss using Emacs. I got distracted by a shiny new hammer but I can’t stop thinking of a Swiss Army chainsaw.

Now that I’ve tried these "modern blogging clients", I know more of what I want to say when it comes to Emacs and blogging. What I want to show here is that as archaic as the interface looks, it’s still got this amazing power that I just can’t find anywhere else. I want to show people the benefits of integrating blogging with all the rest of your life: your contact list, your todo- list, your e-mail, whatever else you have.

First I need to set up Emacs, Planner, and my blog on the computer downstairs…

I’m still using Windows Live Writer to post this, but soon I’ll be back!

Changed to excerpts on the main page – What do you think?

January 29, 2008 - Categories: blogging, wordpress

Following the advice in Debbie Weil’s “The Corporate Blogging Book”, I’ve changed the main page of my blog to show excerpts instead of full posts. That way, you won’t get intimidated by huge blocks of text. What do you think about it? Good idea? Bad idea? Should I go back to full posts?

The Corporate Blogging Book: Absolutely Everything You Need to Know to Get It Right
by Debbie WeilRead more about this book…

I love open source

January 29, 2008 - Categories: Uncategorized

I run into a bug, I tinker around with it, I drop into IRC, I tell people about the bug, the maintainer works through it with me, the maintainer prepares a new release.

Yay. =)

From Lifehack: How to Make Yourself INSANELY Useful

January 30, 2008 - Categories: tips

Here are some great tips on how to become insanely useful.

  1. Share what you know
  2. Be confident in yourself
  3. Solve the current problem
  4. Give willingly — even when it’s your job
  5. Satisfy your own curiosity
  6. Listen to others
  7. Don’t take over
  8. Know when to stop
  9. Teach, don’t tell
  10. Be sensitive to people’s feelings and shortcomings
  11. Ask for help
  12. Model best practices
  13. Be reliable

Being useful, even insanely useful, doesn’t mean allowing yourself to be used. It means offering what you can, when you can, and doing so gladly. This applies whether you’re doing favors for friends, working with a team at work, writing instructions, or anything else — set limits, but within those limits, be wholly available.

Lots of people are useful — they do the things they need to do, solve the problems they need to solve, and keep things chugging along. People that are insanely useful are in high demand by the companies they work for, the organizations they take part in, the clients they serve, their friends and family, and society in general because they not only solve problems and make things work but they add value to every relationship they take part in.

Lifehack.org, How to Make Yourself INSANELY Useful

Check out the article for concrete tips. =)

Blogging works in mysterious ways

January 30, 2008 - Categories: blogging, connecting, story

When Melissa, an associate partner in Learning Strategy, sent me an instant message, I nearly missed it because I was in the middle of an energetic brainstorming session with Aaron, Jen, and Bernie. I’m glad I saw Melissa’s message when I was packing up. She told me how Jennifer (another Learning consultant) had been demonstrating the way we use blogs and wikis to a group of clients. The clients happened to see my post linking to the Lifehack post on how to become insanely useful, and they wanted to know more. Melissa knew that I had crossposted it to my external blog, so she asked my permission to send them a link to it. Of course, I was happy to help, and I was even more thrilled to hear from other consultants also doing social computing adoption and evangelism. Because of that conversation, Melissa invited me to join their Lessons Learned review. I’m looking forward to that. I’m also looking forward to swapping ideas! =)

I shared the Lifehack article because it described many things I work towards, and because I thought other people might like to read it. Looks like that paid off!

Passed it on!

January 30, 2008 - Categories: blogging, connecting, social, story

I came across an internal blog post about making sense of the intranet social networking tools. Joseph, a communications assistant from the UK, asked us to help him make sense of the overwhelming choices we have in terms of Web 2.0 tools. When I checked out the wiki he created, I found out that Joseph was doing his Ph.D. dissertation on social computing in the enterprise. This just happened to be the area that I got my masters in, so I sent him an instant message and I shared a copy of my thesis with him, in the hope that my bibliography might save him some time. He had read some of my blog entries, but he hadn’t realized I had done my master’s research in the same area. I then proceeded to brain dump a whole bunch of tips, such as:

I tried to squeeze as much as I could in half an hour, but I’m sure I’ll think of other tips! I loved just passing on everything I could think of. It was the best way to give back to all the people who helped me with my research, and I was happy to have stumbled across someone else who could learn from what I did. Besides, it was the Right Thing to Do.

Thank you, blogs, for this opportunity to help!

You have received a painting from Sacha

January 30, 2008 - Categories: sketches

080131-04.35.17.png

Sketch: Editing

January 30, 2008 - Categories: sketches

080131-05.23.31.png

10 tips for new bloggers

January 31, 2008 - Categories: blogging, tips

  1. Write for one person. Don’t get intimidated by the blank screen or the unknown audience. Write for one person. Write for yourself, write for your boss, write for your coworker, write for your friend, write for your mom… but write for one person at a time. I like writing for myself.
  2. Cc: world. Recycle as much knowledge as you can. Answered a question over e-mail that other people might find helpful? Blog it. Had a great conversation that other people might learn from? Blog it. Learned something interesting that other people would like? Blog it. There’s plenty to write about.
  3. Get personal benefits. You won’t stick with blogging unless you see what’s in it for you. Me, I like being able to look back and find out what I was doing and why I was doing it. My blog helps me answer those questions. My blog helps me see how I’ve changed. My blog helps me remember how I solved problems. My blog helps me connect with people. My blog helps me make the most of time because I get lots of value out of the books I read, the conversations I have, the things I do. My blog opens lots of opportunities. As you can see, I blog for selfish reasons.
  4. Create value for others. When you tell your stories or share your ideas or pass along a tip that you found useful, you might end up helping someone months or even years down the line. Searchable blogs keep providing value in unanticipated ways.
  5. Let people discover your blog. Add it to your e-mail signature. Mention it when it’s relevant. Link to it. Make it easier for people to find your blog, and you’ll benefit by having richer conversations with less small talk and more interesting topics.
  6. Read and comment. Read other people’s blogs to learn what they’re interested in and what blogging is like. Comment on their blogs: share your thoughts or even just thank them for posting. Write about their blog posts in your own blog – great way to quickly add content and share the link love.
  7. Keep writing. Don’t expect your first post to get a hundred comments. Keep writing. You’re not writing for other people, you’re writing to discover what you have to say. You will be boring for at least the first few months, or however long it takes to throw off the writing habits you picked up in school. Keep writing anyway. Eventually, you’ll get more used to writing and you won’t have to think about writing so much. Then you’ll be able to concentrate on what you want to say.
  8. Be yourself. Don’t write corporate-speak. Don’t keep it just business. Show a little of your personal side. People will connect with you better for it.
  9. Give yourself permission to get better and better. You had a typo. You gave the wrong link. You were wrong. You changed your mind. That’s okay. It’s a blog, it’s conversational, it’s chronological. It’s okay to make mistakes. You get better every day.
  10. Have fun. Don’t treat it like homework, treat it as a terrific way to discover who you are and who other people are. Keep an eye out for your positive experiences and celebrate them!

What do you think? =)

Microsoft Excel – Alt-Enter

January 31, 2008 - Categories: geek

Jennifer Nolan reminded me tha Alt-Enter lets you put multiline text into a Microsoft Excel spreadsheet. I’d ran across it before, but hadn’t remembered it until she pointed it out. =) Thought I’d pass it on!

When it rains, it pours: query letter on personal finance accepted by Linux Journal

January 31, 2008 - Categories: writing

Tracking Your Finances with Ledger and Gnuplot
Most people generally stress out about their finances at the end of
the year and at tax time. A good personal finance program can help
them plan and control their expenses so that they can make it through
the holidays and taxes without wiping out their bank accounts. That
way, they’ll have room in their budgets for another year’s
subscription to Linux Journal!
My article will give practical tips for managing personal finances
with the Ledger command-line tool, and how to slice and dice the data
with awk and Gnuplot to generate useful graphs. It is compatible with
Gnucash but far friendlier for people who like working with text
files. For example, I have more than two years of categorized
financial data: some imported from bank statements, some exported from
Gnucash, and many added through the Emacs Ledger mode. I can see my average monthly expenses for any category, project my savings into the future, or export the data and graph it in Gnuplot to see how my
income compares with my expenses and to look for patterns. This makes
it easy for me to see where I am, and motivates me to keep moving
forward. I would love to share these tips with your readers in an
article around 2200 words long, accompanied by sidebars that include
tips on managing personal finance.

Part of my query letter to the Linux Journal

Okay. I can do this. What’s on the horizon in terms of extracurricular writing?

Discipline. Discipline and organization.

I need to make better use of my commuting time. The DS is a nice distraction, but I need to convert my commute into thinking or writing time.

What do I need in order to do that?

I need to have:

Tech prop: Typing is not fun on the DS. It’s not bad for keeping data, but typing involves an on-screen keyboard. Maybe I can borrow W-’s old Treo, find an outlining tool, load my outline into that. I’ll give that a shot.

Today: Prep outline, get everything ready for tomorrow – I have a longer commute coming up. I’m reasonably ready for the work I need to do, so I can spend some thinking time on the book.

… tap tap tap…