October 28, 2007

Clocking work time under Org

October 28, 2007 - Categories: emacs

Whether you submit detailed timesheets to clients or not, it’s a good
idea to estimate and keep track of the time you spend working on
tasks. I find that this helps me focus on the task at hand, and the
schedule feedback allows me to get a better idea of how much time it
will take to do something in the future. It’s also a good way to find
out where your time goes, of course.

It’s easy to clock work time under Org. When on a TODO item, type C-c
C-x C-i (org-clock-in). Work on the task. When you’re done, mark the task
as done with C-c C-t (org-todo), which automatically calls clock-out.
You can also clock out of a task manually by calling C-c C-x Co
(org-clock-out). The elapsed time will be added to the task headline. To
review the time summaries for your project, type C-c C-x C-d
(org-clock-display). If you want to add notes when you mark a task as
done, add “#+STARTUP: lognoteclock-out” to the beginning of your file.

How would you use this to keep track of your day? One way is to
keep track of the difference between your planned schedule and your
actual schedule. Add time estimates to your tasks. For example,

   ** TODO 20min Respond to mail

could represent twenty minutes of handling mail. Clock in and out of
tasks as you do them. To review the day’s accomplishments, type ‘l’
(org-agenda-log-mode) from the agenda view. This shows the completed
tasks and the time it took to accomplish them.

(Now I’m tempted to write an easy way to filter the Org task view by
estimated number of minutes. ;) Another nice little hack before that
would be to have a modeline countdown based on the estimate of the
currently-clocked-in task. Hmm. And then there’s displaying the list
of tasks for today and choosing which one to clock in on… That would
be fun to do, too. And then there’s calculating velocity and doing
evidence-based scheduling… The list goes on!)

On Technorati:

Random Emacs symbol: minibuffer-local-map – Variable: Default keymap to use when reading from the minibuffer.

Clocking work time under Planner

October 28, 2007 - Categories: emacs

Planner uses timeclock.el, which is part of GNU Emacs. To make sure that all
of the relevant libraries are loaded when you start Emacs, add the following
to your ~/.emacs:

   (require 'planner-autoloads)
   (require 'planner-timeclock)

To start the clock on a task, type C-c C-i (planner-task-in-progress).
The task will be marked as “in progress” and the timer will start. To
clock out, mark the task as done (C-c C-x, planner-task-done) or clock
out manually with C-c C-o (timeclock-out).

To see a summary of your time use for any day, call M-x
planner-timeclock-summary. To see a summary of your time use for a
range of days, call M-x planner-timeclock-summary-show-range. The
range function is particularly useful for weekly time reports, which I
find myself now doing.

For even more fun, call M-x
planner-timeclock-summary-show-range-filter, which filters plan pages
and descriptions using the specified regular expression. For example,
to show only the time entries from the last seven days that included
the keyword “@work”, call M-x
planner-timeclock-summary-show-range-filter and specify “@work” as the
filter, “-7″ as the start date, and “.” for the end date. You’ll get a
quick view of all your work-related time-clock entries.

If you use this often, you might want to create a shortcut to show the
timeclock summary for the current file. The following code defines a
function that displays the timeclock summary for the current page (day
or plan), and binds this function to C-c C-s in Planner mode files.

(require 'planner-timeclock-summary)
(require 'planner-timeclock-summary-proj)
(defun sacha/planner-timeclock-summary-show (page)
  "Show the timeclock summary for PAGE (defaults to the current page)."
  (interactive (list (planner-page-name)))
  (if (string-match planner-date-regexp page)
      ;; Day page
      (planner-timeclock-summary-show page)
    ;; Plan page
    (let ((data (planner-timeclock-proj-make-alist page)))
      (switch-to-buffer (get-buffer-create planner-timeclock-summary-buffer))
      (erase-buffer)
      (insert (planner-timeclock-proj-build-report data)))))
(define-key planner-mode-map (kbd "C-c C-s" 'sacha/planner-timeclock-summary-show))

This allows you to see how much time you’ve spent for the current day
or project.

If you like seeing this, you might want the timeclock information
automatically inserted into your Planner pages. To do so, add the following to your ~/.emacs:

(planner-timeclock-summary-proj-insinuate) ; For plan pages
(planner-timeclock-summary-insinuate)  ; For day pages
;; It's easier when both of them overwrite the same report
(setq planner-timeclock-summary-section
      "Timeclock"

      planner-timeclock-summary-proj-section
      "Timeclock"

      ;; Modify this to include your other template sections
      planner-day-page-template
      "* Tasks\n\n\n* Schedule\n\n\n* Timeclock\n\n\n* Notes\n\n\n"

      planner-plan-page-template
      planner-day-page-template)

The sections are updated only if they exist, so you can remove the
sections or add them to your Planner files any time you want.

CAUTION: Because the time information is stored in a separate file,
Planner gets confused if you edit the task details. Make sure you use
the built-in functions for editing the task description
(planner-edit-task-description) or changing the project associated
with a task (planner-replan-task).

On Technorati:

Random Emacs symbol: planner-expand-name – Function: Expand the given NAME to its fullest form.

Org: Changing the task states

October 28, 2007 - Categories: emacs, org

I find it useful to keep track of which tasks I’ve started. Adding the
following line to the start of my Org file adds STARTED to my to-do
status keywords.

#+SEQ_TODO: TODO(t) STARTED(s) WAITING(w) | DONE(d)

Here’s some code to make it easier to clock in and out of tasks:

(defun sacha/org-clock-in-if-starting ()
  "Clock in when the task is marked STARTED."
  (when (and (string= state "STARTED")
             (not (string= last-state state)))
    (org-clock-in)))
(add-hook 'org-after-todo-state-change-hook
	  'sacha/org-clock-in-if-starting)
(defadvice org-clock-in (after sacha activate)
  "Set this task's status to 'STARTED'."
  (org-todo "STARTED"))

On Technorati: ,

Random Emacs symbol: isearch-update-ring – Function: Add STRING to the beginning of the search ring.

Weekly review 2007.10.21 – 2007.10.28

October 28, 2007 - Categories: emacs, weekly

Summary – In terms of my goals from last week:

Organize information Haven’t rearranged our group Activity yet.
Plan external blog Brainstormed names. Now to brainstorm topics…
Plan podcast Done. Several ideas, even.
Library run Done. Picked up more books.
CASCON presentation Survived.
Meeting with Gordon Lee Done. Scheduled another meeting this week.
Emacs blog entries, pages Blog entries done, not yet laid out into pages or merged into text
CAS dinner Skipped
Dogear podcast script, audio Drafted, but not satisfied with quality
Dogear podcast video Waiting for script

Next week’s goals:

UP: My second week of work was dominated by CASCON, the conference
organized by the IBM Toronto Center for Advanced Studies. I presented
a short paper about my thesis, summarizing 72 pages and 1.5 years of
my life into five minutes and what really amounts to this sentence:
“Blogs, bookmarks, and people-tags may be able to help people find
expertise within their company, so let’s make a search engine that
combines all three.” I also enjoyed helping out with Stephen
Perelgut’s Second Life workshop, even though only half of the people
could get on the metaverse. Aaron, Bernie and I met a couple of times
during the conference, and I did manage to squeeze in some “real work”
as well. I also had my two-week check-in with my manager. We’re
thinking of making those weekly, just to keep everyone in the loop. A
couple of market scans here and there, some podcast plans… work is
good, and getting even better.

UP: I got back in touch with Gino Ledesma, a friend of mine from
university. We had a lot of fun catching up. I was thrilled to hear
about what he and my other batchmates have been up to, and
particularly by the way he’s been giving back to the Philippines. His
company is very impressed by him and is looking for more Filipinos to
hire. That’s gotta be something. =) That reminds me: I need to
introduce him to Winston Damarillo, who might be interested in having
Gino give some presentations to his Java folks.

DOWN: Trapeze lessons have been postponed. It was an informal class in
somebody’s loft, and that somebody needs to now focus on med school.
Ah well. Time to look for another form of exercise. I don’t really
feel like spending money on this, and I’m sure I can find plenty of
free, fun ways to exercise around the house. Winter is coming, so
running might not be my cup of tea. I’ll look around for ideas.

DOWN: The paperwork requirements for the permanent residency
application are a little bit intimidating, aren’t they? I felt
overwhelmed earlier. W- gave me a wonderful hug and helped me remember
to divide and conquer.

UP: I’ve found a good way to get more material for my book. =) It’s
easy for me to write if I think of things as blog posts. Even basic
information is fun to share. But I need to protect that time. I
managed to write a little bit during the evenings, and more during the
weekends. Let’s see if that works out next week too.

  1. 2007.10.23#2: Why Emacs
  2. 2007.10.25#1: Emacs: The difference between a task and an appointment
  3. 2007.10.27#1: Emacs: managing schedule
  4. 2007.10.27#2: Tweaking day-specific planner pages
  5. 2007.10.27#3: Choosing a daily schedule in Emacs
  6. 2007.10.28#1: Clocking work time under Org
  7. 2007.10.28#2: Clocking work time under Planner
  8. 2007.10.28#3: Org: Changing the task states

DOWN: The downside to this is that I’m not sure how to make the time
to meet my friends face-to-face. I’m growing a lot more protective of
the rare four-hour chunks I can carve out of my day, so I tend to keep
the weekends for myself. A wonderful home life makes me want to spend
more time at home instead of going to cafes and meeting friends. Blogs
are easy to fit into the spaces in my day, but what about the friends
who don’t blog? I’ll try tweaking my schedule a bit this week.
Tomorrow I’m going to go to DemoCamp, but only the pub night part, and
I’m planning to go after dinner. It doesn’t make that much sense to go
back and forth considering I’m working from downtown, but I can do
productive things on the subway (hmm, rush hour, so that means
listening to a podcast or doing blue-sky thinking), and I do like
being there when J- comes home from school. =)

DOWN: E-mail is also lower on my priority list. It’s becoming easier
to tell myself, “I’m going to do one hour of e-mail, and that’s that.”
Or 30 minutes, or whatever time I can set aside. I’m a little mixed
about this because a number of books I’ve read recommended quick
responses as a way of showing you care, but as long as expectations
are also adjusted, I think things will be fine. If I take a long time
to reply, it’s just that I have other priorities.

UP: And somehow I still found the time to read library books and
encode more notes, too! =) I probably won’t be updating my Booksnake
blog for a while (again, other priorities!), but my workflow is
getting better.

UP: I’m happy with the overall balance of this week. My 50,000-feet
view is becoming clearer: I want to become a practice evangelist,
business practice maven, or whatever the proper term is. On the
ground-view, I manage to complete most of my planned tasks without
feeling as if I’m wasting time. In terms of personal stuff, I’m doing
well, too. =) Happy with this week, can’t wait for the next.

On Technorati:

Random Emacs symbol: make-hippie-expand-function – Macro: Construct a function similar to `hippie-expand’.