February 9, 2009

Bulk view

Planning meetings, get-togethers, and interviews with AgreeADate

One of the reasons why I love thinking of ways to help people rock even more is that I often end up learning a lot in the process.

For example, last week, I needed to coordinate schedules with Katie Bartlett, Jeff Widman’s assistant, for a chat with Jeff about networking. I thought about how much e-mail was sent back-and-forth figuring out times and timezones, and I multiplied that by the number of appointments Katie probably needed to arrange. That sounded like a lot of work. If I could find a tool to make that easier for our appointment, and she used that tool to organize lots of other appointments, then that would be great!

I checked out a couple of tools such as TimeToMeet, ScheduleOnce, and AgreeADate. Of the tools I tried, I liked AgreeADate the most because it made it easy to create different kinds of schedules and it supported timezones. I sent Katie a few potential timeslots for my chat with Jeff. After she replied, I confirmed the time that was mutually convenient. That wasn’t hard at all.

Then I explored the other features. I found out that I could create a schedule where people could pick a slot. AgreeADate allowed me to specify how many people each timeslot was limited to, and how many slots people could choose. This opened up all sorts of possibilities, and has become my favorite feature!

Things that I’d formerly had been worried about scheduling became so much easier to schedule because I could create all the slots in parallel and then let people choose the slots that hadn’t been taken yet. For example, I’d been meaning to try outsourcing some technical and personal tasks, but scheduling interview times sounded like a hassle. With this system, I just had to set all the slots up and invite people to choose the timeslot most convenient for them. Yay!

AgreeADate isn’t perfect, but it makes scheduling things so much easier for me, and it lowers the barrier enough for me to go and make things happen. In the past week that I’ve been trying it out, I’ve:

  • scheduled a capoeira trial
  • scheduled a conference call
  • set up interviews for a system administrator and a virtual assistant, and
  • set up lunch with a poll on where to eat.

You know, stuff that would’ve taken way too much e-mail if I had to do it by hand. =)

I’d like to see it integrated with my Google Calendar, and one of the AgreeADate folks told me that that’s the next thing on their roadmap. I found myself wondering which slots I’d tentatively offered for other events, and being able to see all the tentative slots overlaid on my calendar would be fantastic.

In the meantime, I read the confirmation e-mails in Emacs Gnus, use Remember and Org to create an appointment hyperlinked to that mail, and then use my own code, the twit.el library, and the Twittercal service to create an appointment on my Google Calendar (on google.com), which is then shared with my Google Calendar on sachachua.com thanks to the joys of Google Apps. It’s quite Rube Goldberg-esque (as many of my bubblegum-and-string tricks are), but so far, it works. Maybe this’ll be something I’ll outsource (except perhaps without the Gnus + Remember + Org part) once I’ve gotten that virtual assistance thing sorted out. =)

For the geeks, some Emacs Lisp to mash together with Org, TwitterCal, Google Calendar, and twit.el (some wizardry required):

(defun sacha/org-as-gcal-quick-add ()
  "Convert the current SCHEDULED: timestamp and header into a GCal quick add item."
  (save-excursion
    (org-back-to-heading t)
    (setq end (save-excursion (outline-next-heading) (point)))
    (when (re-search-forward org-scheduled-time-regexp
			     end t)
      (let (ts default-time stamp plain s0 srp s1 s2)
	(setq ts (match-string 1)
	      default-time (apply 'encode-time (org-parse-time-string ts)))
	(when (or (setq stamp (string-match org-stamp-time-of-day-regexp ts))
		  (setq plain (string-match org-plain-time-of-day-regexp ts)))
	  (setq s0 (match-string 0 ts)
		srp (and stamp (match-end 3))
		s1 (match-string (if plain 1 2) ts)
		s2 (match-string (if plain 8 (if srp 4 6)) ts)))
	(cond
	 (s2
	  (concat (org-no-properties (org-get-heading t)) " on "
		  (format-time-string "%x" default-time) " from "
		  (org-get-time-of-day s1 'string t) " to "
		  (org-get-time-of-day s2 'string t)
		  ))
	 (s1

	  (concat (org-no-properties (org-get-heading t)) " on "
		  (format-time-string "%x" default-time) " from "
		  (org-get-time-of-day s1 'string t)
		  ))
	 (t
	  (concat (org-no-properties (org-get-heading t)) " on "
		  (format-time-string "%x" default-time)
		  )
	  ))))))

(defun sacha/org-to-twittercal (string)
  "Post STRING to TwitterCal. See http://www.twittercal.com for details."
  (interactive (list (read-string "Event: " (sacha/org-as-gcal-quick-add))))
  (twit-post-function twit-update-url (concat "d gcal " string)))

I’ll keep you posted on my experiments! =)

DrupalCampToronto organizing notes

We had the second organizers’ meeting for DrupalCampToronto 2009 today. I started a number of Google Documents for keeping track of minutes and tasks, and I also shared the sponsorship letter I’d revised extensively. One of the organizers mentioned that he had already found the letter useful. Hooray!

What worked well:

  • Asking someone else to take minutes made it clear that minutes are a rotating duty, which is good because it gets more people to pay attention and contribute, and it’ll help me see other ways of doing things.
  • Sharing all the documents through Google Docs made it easy to see changes in real-time and track the revision history. The interface was also more fluid than typical wikis.

What can work even better next time:

  • Task management – I’ve set up a Google spreadsheet for quickly capturing tasks, but there should be a better way to do this so that people can easily filter the tasks. BasecampHQ would be interesting, but it’s expensive and probably overkill. Maybe Manymoon?
  • Document management – I’ve shared each of the Google docs with the mailing list, and I’ll share more protected documents with individual people. It would be good to put together a central workplace.
  • Next meeting - We decided on the rhythm of meetings (every other Monday, same time, same place), but that would’ve probably been better to do earlier in the agenda rather than at the end, after another Drupal-related discussion.
  • Food – Gotta get better at nudging David @linuxcaffe to nudge _us_ about ordering the specials… =) He’s a great guy, Linuxcaffe is such a nice venue, and I’d like to make sure it works out well for everyone. It’s easy to forget to order and eat when the conversation’s flowing, but you end up starving when things are done!
  • Tables – a gap between tables is a good thing, so people can get in and out easily. =)

Learning more about organizing events… Cool!