April 2009

Ethics and egos in virtual assistance and relationships

April 1, 2009 - Categories: connecting

Leesa Barnes is very firm about this: outsourcing social media content and relationships is not okay.

I mostly agree. oDesk and Elance job posts recruiting people to write reviews and post comments praising products or places give me the heebie-jeebies, and there’s something Really Weird about asking someone to write fan letters to people you don’t even choose. I don’t invite random strangers to connect on LinkedIn or Facebook, and I don’t leave random blog comments in an effort to build links.

On the other hand, I think that a little bit of delegation–yes, even in your personal life–can be surprisingly helpful. I really appreciate the list of upcoming birthdays and contact information that an assistant prepares for me each week, because I’m otherwise horrible at remembering birthdays, and it turns out that acknowledging people’s birthdays makes people smile. I’m glad that I have someone doublechecking the dates and times of meetings, because I’ve been burned by that before. I like being able to respond to Facebook and LinkedIn messages without having to use the Web interface.

So there’s more to this than than just outsourcing, and I wonder how much of it is related to ego. ;) I don’t get frazzled by a lot, but I do know I tend to get mildly peeved when people impolitely make me feel bad because I didn’t make them feel important enough. For example:

Hmm. When I get a half-joking prod about whether or not I had a virtual assistant handle a social gesture, I may send that person a link to this blog post.

What’s important in a social gesture, anyway? Is it that someone holds all of the information about you in his or her head, or that someone cares enough to look it up or have it available? Is it that someone thinks about you all the time, or sets up ways to be reminded of you every so often? Is it that someone reads your blog and follows your tweets almost obssessively, or that someone’s willing to ask you questions about what you’re excited about and to listen to your update, and perhaps even drop by once in a while? (You can tell what I think. )

If I had someone whisper in my ear the likes, dislikes, and conversational topics related to whoever’s walking up to me, I’d love that. I can’t remember everything on my own. Knowing more allows me to be of more help. Also, it makes me less stressed about interacting with people.

If it offends someone that I don’t remember everything about them right away, or that I don’t know about the latest posts on their blog or the latest tweets they’ve shared, well–that’s probably more related to their ego. I’d be happy to let them take the initiative in the conversation. Most people forget, which is an interesting thing.

And if you find yourself having that kind of a reaction… stop and think about it for a sec, mmkay? =) Maybe you don’t need to react that way. There’s a space between stimulus and response, and you can decide how you perceive things. If you find yourself focusing too much on a perceived slight, try to move past it and focus on the good stuff instead.

Of course, other people get the same deal. If you meet me and you have no idea what I’ve recently been writing about or working on, that’s totally okay. If you say you can’t remember my name, I’ll happily reintroduce myself, no hard feelings. (In fact, if you hesitated even a little bit, I’d probably already have reintroduced myself by that point.) If you say, “Nice to meet you!” when we’ve already met, I’m never going to give you a hard time about it.

So yes, I’m fine with delegating relationship-related tasks to virtual assistants (not all, but more than most people do). I think that people can help me both be more thoughtful and learn to be more thoughtful, and I think that there’s more to building relationships than just the mechanics of social gestures.

And yes, W- knows I’m learning more about delegation, and why I’m learning about delegation, and he thinks it’s a good thing. He’s so awesome. =)


This post was inspired by danielpatricio‘s tweet, which led me to leesabarnes’ tweet, which led me to her blog post, which tapped into something else I’d been meaning to write about because people occasionally do that “of course you should be able to remember my name” thing. =)

Lessons learned from this phase of our Drupal project

April 2, 2009 - Categories: drupal, kaizen

Not only has my sleep cycle been thrown out of whack, but I’ve also broken out in pimples.

Clearly, we can get better at managing the crunch time around deployment.

The last time we deployed, there were a few tense moments, but our rigorous test-everything-from-a-production-install process helped us do it smoothly. This time, not so much. Here are a few reasons why, and here’s what I can do to make things better.

During deployment, I also learned to:

So my key things for next time are:

Becoming a better developer, one step at a time…

Remote presentations that rock: Challenges and opportunities of remote presentations

April 2, 2009 - Categories: presentation, speaking

How are remote presentations different from in-person ones, and how can you make the most of those differences?

Plan for different channels and attention levels

Unlike at in-person conferences, you don’t have a lot of control over how people experience your presentation. Some people will be connected to the phone conference, but won’t be able to view your slides. Some people will be part of the phone conference, but not the Web conference, so they’ll need to change slides themselves. Some people will read your slides in order to catch up on parts they missed. Some people will listen to the recording after your session. Some people will just read your slides.

As much as possible, plan your talk so that you can make the most of the different ways people will receive your message.

To accommodate people on the phone, do not rely too much on visual aids, and explain important points out loud. Indicate when you’re moving to the next slide. Include the slide number on all pages of your presentation.

To accommodate people who may drift in and out of your presentation, verbally and visually emphasize important points, repeating as necessary.

To accommodate people who are reviewing the slides or recording, write an article or blog post with a more coherent version of your presentation.

Build interactivity into your presentation

At first glance, remote presentations may seem less interactive than real-life ones. You can’t see body language, and it’s difficult for people to interrupt during a conference call. However, you can still build interactivity into your session, and you should. Here are some reasons why and some tips for doing so.

Don’t be afraid of a little silence on the line. What seems like an uncomfortablely long silence to you gives people time to think about what they want to say, and eventually pushes other people to say something.

When asking people to interact, I find that it’s often helpful to encourage people to use the text chat. That way, more people can share their thoughts without trying to figure out whose turn it is to speak, and this also brings in shyer people. If your phone or web conference allows people to raise their hands, you can use that to queue people for speaking as well.

As you become more comfortable with building interactivity into your remote presentations, you’ll find that you’ll learn as much from the participants as you share with them.

Talk one-on-one

In a session called “Presentation Secrets of Comedians and Stage Performers to Keep Audience Attention” at last year’s IBM Technical Leadership Exchange, Barclay Brown shared a story about watching a presenter make the mistake of wrapping with “Thanks, you’ve
been a great audience.” He explained that although speakers might see themselves speaking to an audience, listeners think of themselves as individuals, not a group. Good speakers make that one-on-one connection even with hundreds or thousands of people in the room.

In a virtual presentation, the perception of being an individual is even stronger. Your audience members don’t see the other participants. Pay attention to the words you use so that you can make the most of that one-on-one connection. Use sentences like “Have you ever experienced this?” instead of “Has anyone here experienced this?” You can still summarize group results, but keep that one-on-one mindset as you go through the rest of your talk.

Provide next actions

Think of things people may want to learn more about or do after your presentation, and take advantage of the fact that most of your participants will already be on a computer. Give them a URL where they can find out more, take the first step, or even fill out a survey about the session.

Hope that helps! Feel free to ask me questions – I’ll come up with more tips that way. =)

Thinking about making ridiculous amounts of money

April 3, 2009 - Categories: finance

You know it’s going to be an unusual meeting when your manager asks you if you can see yourself making ridiculous amounts of money, and how you think you can get there. =)

My manager reads my blog. He knows about my experiments. He knows I like playing around with ideas, and that I’m making good progress on saving up a crazy idea fund. Not that this makes him very nervous about keeping me. I love working with IBMers, I love working with IBM and our clients, and I love the kinds of things that we do.

We talk about this in career planning discussions, too. He asked me before if money was important to me, which is probably manager-speak for “Do I need to keep a close eye on market salaries so that someone doesn’t hire you away?” I told him I’m okay, which is team-member-speak for “That’s not the main reason I accepted this position, but it certainly doesn’t hurt.” I also told him that I’m all for raises and bonuses–not because I need the cash, but because that’s a pretty good way of checking if I’m creating more value for the company and our clients year after year. I want to grow, while staying true to my work-life balance.

So when my manager asked me about making ridiculous amounts of money, I told him that it’s not about making a ridiculous amount of money, it’s about creating a ridiculous amount of value. It would be nice to capture some of that value, of course. That would make it even easier for me to learn, to experiment, and to make a difference. If you create lots of value for other people, getting some of that back makes it easier for you to create even more value. It all works out.

What I’m really interested isn’t making ridiculous amounts of money, but developing and sharing the skills to do so, and creating lots of value along the way. =) It’s the journey, not the destination.

Also, it’s not about making ridiculous amounts of money. A large part is about saving relatively ridiculous amounts of money, and–very important–investing that into making a ridiculously wonderful life for myself and other people.

It helps to have a bit of money and a lot of freedom when experimenting. Not too much money, though. Too much money makes people act weird, and even makes life dangerous. So a little money and a lot of freedom, and I can keep reinvesting or donating money beyond that.

And then, because I’ve thought about this a bit, I told him about some ways I might go about doing it.

Ken Fisher’s book on the Ten Roads to Riches is a good read. There are lots of paths. Knowing about different paths is helpful, because you can recognize them and you can prepare for them. Here are three ways that might fit me:

And of course, there are other paths.

So that’s what I think about making ridiculous amounts of money:

Managing virtual assistants: the surprising benefits of transcription

April 4, 2009 - Categories: speaking

I frequently give speeches. During some months, practically every week involves a presentation or two. I usually post presentation, recording, and notes for these presentations, but it would be handy to have a transcript. Timestamped transcripts also make it easy to search within presentations, synchronize audio with slides, and even remove ums and ahs.

I’m not an auditory learner. I find it difficult to sit still for an audio-only session, even if it’s my own. ;) I’ve transcribed some things–my research interviews, a few of my talks–using the handy Transcriber program, which made it easy for me to associate text with specific audio segments.

And maybe transcripts can help me learn how to be a better speaker, too! I speak at about 200 words per minute when I’m excited. While that’s below the 300 words per minute I often joke about, it’s still well above the recommended 140-160 words per minute for persuasive speeches. Transcripts make my rambling sentence structure and my verbal crutches painfully obvious, too. ;)

If I can get word counts and review what I’m saying without the large initial effort of transcribing things myself, I think it’ll be well worth it. It gives me metrics, and metrics are useful. Like the way that people work on getting into a target heart beat zone when exercising, these numbers can help me get into a target speaking rate zone, providing me feedback about going too quickly or too slowly. And like the way that listening to music and practicing on the piano will eventually give me a feel for how long a quarter note is in different tempos, listening to good speeches and practicing myself (either through actual presentations or through podcasts I make on my own) can help me adjust my speaking rate.

On to the actual process of transcription:

I posted a job notice on oDesk looking for people who can edit and transcribe audio files. While waiting for candidates to respond, I asked one of my virtual assistants to download Express Scribe and give it at try – it might help her develop new skills. I like having plenty of timestamps in the transcribed text because it makes it really easy for me to recheck the transcript, so I also sent her a link to this shortcut for timestamping files.

A few good candidates responded to my oDesk ad. One of them had an excellent sample transcript, so I’ve also added her to my growing team. I sent her the audio recording for the talk I did yesterday, and I’m looking forward to getting it back.

Here are some notes on my preliminary experiences with transcription, and I’ll add more as I explore this:

I wonder how I can take advantage of Dragon NaturallySpeaking here, as I already have it. Even better if I could get someone else to train and correct my user model, but I think Dragon NaturallySpeaking wants me to upgrade to the super-expensive version in order to do that. =|

Hmm… How can I tweak this process…

Do you outsource transcription, or do any of your friends outsource transcription? I’d love to hear about experiences and tips!

Nothing quite like Org for Emacs

April 6, 2009 - Categories: emacs, productivity

I’ve been trying lots of different Web-based GTD task managers like Remember the Milk, Toodledo, and GTDAgenda. I’m slowly coming to the conclusion that there’s nothing quite like Org for Emacs.

Here’s what I like about the other services:

Here’s what I like about Org:

Of all the options I’ve tried, Toodledo is closest to where I am with Org, although it still doesn’t do everything.

Some options are:

Weekly report: Week ending April 5, 2009

April 6, 2009 - Categories: weekly

From last week:

Also:

This week:

My Drupal Makefile

April 10, 2009 - Categories: drupal

As promised, a scrubbed version of my Drupal Makefile.

I customize it for different testing or production environments with .mk files (ex: qa.mk) that contain the variables from the top part of the Makefile. These files are automatically included in this Makefile. Benefits: I don’t have to commit my database password to the source code tree, and I don’t have to think about which environment I’m in.

I use “make cycle” and “make mysql” a lot. “make cycle” depends on Drush being set up properly, and patched to allow you to update all the modules from the command-line.

I think this works for the Drush update command:

function drush_tools_update($command = '') {
  global $user;
  ob_start();
  require_once 'includes/install.inc';
  include_once('update.php');
  $ret = ob_get_contents();
  drupal_load_updates();
  ob_end_clean();
  $user = user_load(array('uid' => 1));
  $list = module_list();
  $update_list = array();
  foreach ($list as $module) {
    $updates = drupal_get_schema_versions($module);
    if ($updates !== FALSE) {
      $latest = 0;
      $base = drupal_get_installed_schema_version($module);
      foreach ($updates as $update) {
        if ($update > $base) {
          if ($update > $latest) { $latest = $update; }
          $update_list[$module][] = $update;
        }
      }
      if ($latest) {
        sort($update_list[$module]);
        printf("%-30s %5d -> %5d (%s)\n", $module, $base, $latest, join(', ', $update_list[$module]));
      } else {
        printf("%-30s %5d\n", $module, $base);
      }
    }     
  }
  if (count($update_list) == 0) return;
  if ($command != 'force' && !drush_confirm(t('Do you really want to continue?'))) {
    drush_die('Aborting.');
  }
  ob_start();
  foreach ($update_list as $module => $versions) {
    foreach ($versions as $v) {
      print "Running " . $module . "_update_" . $v . "\n";
      update_data($module, $v);
    }
  }
  $updates = ob_get_contents();
  cache_clear_all('*', 'cache', TRUE);
  cache_clear_all('*', 'cache_page', TRUE);
  cache_clear_all('*', 'cache_menu', TRUE);
  cache_clear_all('*', 'cache_filter', TRUE);
  drupal_clear_css_cache();
  ob_end_clean();
  print $updates;
  $output = '';

  print $updates;
  if (!empty($_SESSION['update_results'])) {
    $output .= "The following queries were executed:\n";
    foreach ($_SESSION['update_results'] as $module => $updates) {
      $output .= "\n" . $module . "\n--------------------------\n";
      foreach ($updates as $number => $queries) {
        $output .= 'Update #'. $number . ":\n";
        foreach ($queries as $query) {
          if ($query['success']) {
            $output .= "SUCCESS: " . $query['query'] . "\n";
          }
          else {
            $output .= "FAILURE: " . $query['query'] . "\n";
          }
        }
        if (!count($queries)) {
          $output .= "No queries\n";
        }
      }
    }
    $output .= "\n";
    print $output;
    unset($_SESSION['update_results']);
  }
}

(and you’ll need to define it in drush_tools_drush_command also).

Enterprise 2.0: The business value of social networks

April 10, 2009 - Categories: enterprise2.0, happy, research, web2.0

Both our internal Social Networks Analysis community and Colleen Haikes (IBM External Relations) tipped me off to some absolutely fascinating research on the quantitative correlation between social networks and performance based on an analysis of IBM consultants. You can read the research summary and view the presentation, or read the research paper for all the details. Highlights and what I think about them:

  • Betweenness is negatively correlated. Being a bridge between a lot of people is not helpful. The presentation clarified this by saying that the optimal team composition is not a team of connected superstars, but complementary team members with a few well-connected information keepers.
  • Strong ties are positively correlated with performance for pre-sales teams, but negatively correlated with performance for consultants. Pre-sales teams need to build relationships, while consultants often need to solve a wide variety of challenges.
  • Look! Actual dollar values and significant differences! Wow. =)

    Here’s another piece of research the totally awesome IBM researchers put together:

    A separate IBM study, presented at the CHI conference in Boston this week, sheds light on why it’s easier said than done to add new, potentially valuable contacts to one’s social network in the workplace.  The study looked at several types of automated “friend-recommender” engines on social networking sites.  The recommender engines used algorithms that identified potential contacts based on common friends, common interests, and common hyperlinks listed on someone’s profile.

    Although most people using social media for the workplace claimed to be open to finding previously unknown friends, they were most comfortable with the recommender engines that suggested  “friends’ friends” — generally, people whom they already knew of.  The friend-recommenders with the lowest acceptance rates were those that merely look at whether people have similar interests — although they were the most effective at identifying completely new, potentially valuable contacts.  Friend-recommenders that took the greatest factors into account were deemed the most useful.  (IBM’s Facebook-style social networking site, Beehive, uses this type of friend-recommender engine.)

    Personally, I don’t use friend recommenders to connect to completely new people, but they’re great for reminding me about people I already know.

    Check out the research – it’s good stuff. =)

    (cross-posted from our external team blog, The Orange Chair)

    Finding finishers, building a team

    April 10, 2009 - Categories: connecting

    “So, what did you tell Steve to convince him to take time out for lunch with me?” I asked Ian Garmaise as we settled into our chairs at the Village Idiot Pub. “You probably told him that I’m always on the look-out for interesting mentors,” I said. The Steve in question was Steve Mann, whose work on wearable computing had inspired my fledgling experiments with it in fourth year university, and who is unquestionably a remarkable inventor. I mentally reviewed my list of questions to see if they were up to par.

    Ian reassured me that it was because he thought I might be able to help. That is, I think he meant to reassure me. I scrambled to think of what I could’ve learned that Ian would’ve thought useful.
                           
    As it turned out, I did. Both Steve and Ian were particularly interested in my recent experiments with outsourcing work to virtual assistants. I told them how I asked a transcriptionist to process one of my talks, and how happy I was with the results. Steve’s got way more lectures and way more recordings than I have, and he’ll certainly have plenty of material to go through.

    I also told them how I enjoy starting work and turning them over to other people to finish. This can be a liability (I’m a little scatter-brained!), but if I can team up with, hire or partner with people who are good at finishing, it’s something that can be handled. At this, Steve lit up. He was also very much a starter, and if he can get better at assembling and coordinating teams (or work with someone who is), he can get more of his inventions further along. I referred him to the transcriptionist I hired, and I also gave him a few tips on starting working relationships with contractors (small jobs at first!).

    And then I had fun playing music on Steve’s hydraulophone. =D And yes, the brochure is right – it really is play. You can’t play music with water splashing everywhere and not smile. =)

    Some of the things that came out of that experience were:

    Thanks, Ian, for the introduction. Keep me posted – I think it would be cool to learn how to tap other people’s skills!

    Seven tips for making better presentations

    April 11, 2009 - Categories: presentation, speaking

    People often ask me how they can improve their presentation skills. Here are seven quick tips:

    1. Think about why you want to make better presentations. It’s not just about getting rid of your ums and ahs, it’s about making that connection with the audience and helping them act, learn, or understand. When you have a clear purpose, it’s easier for you to find opportunities to improve and to motivate yourself to do better.
    2. Go to lots of presentations, even bad ones. You’ll learn about what people do well and what you can improve. Try imagining how you would give that presentation.
    3. Look for great presentations. TED.com is a good source of inspiration.
    4. Read blogs and books about presentation design and delivery. My favorite blogs are Presentation Zen, Slideology, and Speaking about Presenting.
    5. Give lots of presentations. If you don’t have speaking opportunities coming up, make them. You can practice slide design and information organization by putting slides together for sites like Slideshare. You can practice delivery by organizing meetings or creating a podcast/vidcast. You can help people find out about what you’re interested in talking about, and you can volunteer.
    6. Record your presentations and review them. Having them transcribed helps, too. If possible, record both audience and speaker.
    7. Practice relentless improvement. Every time you give a talk, reflect on what you did well and what you can do better.

    Riding on my bicycle; taking advantage of novelty

    April 11, 2009 - Categories: life

    I spent the afternoon on my bicycle, taking care of errands and getting some exercise along the way. Or was that enjoying exercise, and taking care of errands along the way? It’s hard to tell with bicycles. =)

    W- and I rode to the Mountain Equipment Coop store near Spadina and King. He wanted to look for breathable shoes for the summer, and I wanted to pick up bike lights. On the way there, I quickly became convinced of the necessity of getting gloves and a windbreaker. (I had fleece on, but it was sometimes too warm. On the other hand, there were a number of moments when I was glad I had that layer!)

    After we had lunch at Burrito Banditos (the rebranded Burrito Boys W- has been going to for a long time), W- headed back home, and I took care of a few other errands. I passed by Designer Fabrics to buy buttons, and by theworkroom.ca to see if I could get some quick help on patterns I’d been trying to figure out. (No. Looks like I’ll need a private tutor for things like that.) Then I swung by Zellers on the way home to pick up lots of socks (I’m getting tired of not being able to match socks!), checked the post office (closes at 2 PM on Saturdays, apparently), and went home. =)

    I had fun. I really appreciate being able to tiptoe my way through crowded junctions instead of precariously wobbling from a higher seat. I still don’t like hills, but I’m sure I’ll get the hang of them with more biking. And I really like being able to enjoy the sunshine, go places, and take care of things.

    Maybe it’s the endorphins. Maybe it’s the novelty. Whatever it is, if I can take advantage of that energy and use it to make biking (or exercise in general) part of my habits, that’d make life even better.

    Weekly report: Week ending April 12, 2009

    April 12, 2009 - Categories: weekly

    From last week’s plans:

    I also:

    Next week:

    How to extract just the audio from Sametime Unyte recordings, on Linux

    April 14, 2009 - Categories: linux, presentation

    I use Sametime Unyte for web conferences at work. Unyte allows you to record your teleconferences (slides and audio), and you can download a ZIP containing Flash video after your session.

    I usually extract the audio track and publish that as a separate MP3 so that people can listen to it. I can also have the audio file transcribed. The audio track from Sametime Unyte is of lower quality than my voice recorder, but it’s a good backup and it captures both sides of the phone conversation.

    Here is one way to extract the audio using Linux:

    for FILE in *.swf; do ffmpeg -i $FILE -ab 64k $FILE.wav; done
    

    Then you can concatenate all the WAV files:

    sox *.wav all.wav
    

    Then you can use Audacity to edit the resulting file.

    Young and savvy

    April 14, 2009 - Categories: finance, gen-y

    Over at My Two Dollars, Diane Hamilton wrote a post decrying how Millennials “have been raised to expect immediate gratification” and that “everyone is bending over backward to meet their needs” (which popular media has been harping on for a while). She proposes adding more financial courses to colleges and K12, developing personal finance books geared towards younger kids, and sharing mistakes and lessons learned with kids.

    Heh. Maybe it’s just me, but I can’t help but want to stick my tongue out at popular media when it paints Gen Y with too broad a brush (and yes, that applies even when they’re bringing out the “Gen Y Will Save the World!” stories).

    Especially when it comes to Gen Y and money. It’s true that more and more people are struggling with student debt. In many countries, younger people felt locked out of the real estate market because older people had more assets and could bid up house prices. Now they feel locked out of the real estate market because of less access to capital and lower earning power. And of course, there are many younger people who have moved back with their parents in order to save money, a phenomenon much remarked-on in popular media.

    Two words: sub-prime mortgages. Who got the economy into that mess, anyway? ;) But this is the world we’re growing up in, so we’ll just have to help fix it.

    But you know, it’s not that bad. =) Here’s what I think about money and my generation: Most of us have seen way too many people make way too many mistakes about life, about money, about all sorts of things. It doesn’t mean that we won’t make our own set of mistakes, but it does mean that we’re generally not as clueless as media paint us to be. ;) The Gen Yers I’ve talked to keep tabs on their spending and plan long-term investment, look for ways to be frugal, and are pretty darn good at using all sorts of new tools to manage their money and learn more.

    Then again, I’m weird, and maybe many of my friends are weird too. ;)

    Schools: while I’m all for introducing more real-life education into schools, parents should take responsibility for teaching their children financial savvy. Children can have the best lessons in school, but if they come home to parents neck-deep in credit card debt and still spending on unnecessary things, or who laugh at the idea of saving for the long-term for people in their twenties, something’s wrong with that picture.

    Don’t just share your mistakes. Share the good things you do. Share your decision-making process. Share your goals, too. Lead by example.

    I’m really lucky to have money-savvy parents. My mom and my dad set up their own business, funding all of their growth from a little capital they had saved up and from reinvested profits. My mom taught me how to use the envelope method to manage my money without feeling constrained by a fixed budget. She also taught me never to carry a balance on my credit card, to resist the temptation to spend excessively on consumer goods, and to plan for the long term. Both my parents taught me to spend where it counts.

    It’s not hard to do something like that too. Instead of getting all worried about Gen Y and immediate gratification, practice conscious spending and reflective action yourself, and you’ll teach people of all generations along the way.

    SO:

    As for Gen Y being spoiled kids at work–you have to wonder how many of the things we ask for are common-sense. ;) Work-life balance is something I think a lot about, but it’s good for everyone. Focusing on results rather than on face-time–again, that’s a business best practice. Wanting opportunities to be engaged, to do work that you’re passionate about? That makes sense for everyone, too.

    My team would be the first to tell you that they adapt to me at least as much as I adapt to them, and they’d also be quick to reassure you that this is a Good Thing. ;)

    Managing virtual assistants: My process for managing talk deadlines and information

    April 14, 2009 - Categories: -Uncategorized
    1. Log on to docs.sachachua.com and open my Talk planning spreadsheet.
    2. Click on the last tab near the bottom of the page. (Talk planning)
    3. Select the F and G columns, right-click on the column header, and choose Insert 2 Left.
    4. Select the D and E columns, copy them, and paste them into F and G columns. Delete the TEMPLATE header.
    5. Replace the date and title from the text.
    6. Fill in the other information about the talk.
    7. Log on to Toodledo.com in a separate window, and arrange your windows so that you can see the spreadsheet and create tasks at the same time.
    8. Scroll down to see the tasks on the spreadsheet. The dates should be automatically calculated based on the due date of the talk. Manually set the dates if any were specified.
    9. In Toodledo, click on Folders, and then add a folder with the title of the talk. Then go to the To-Do List and add the tasks (shortcut key: n). Specify the folder, due date, and length based on the spreadsheet and/or talk information. Set the context to “home” (unless I indicate otherwise) and the tag as “presentation”. For the tasks before “Call or e-mail organizer to confirm details”, set the start date to be one week before the due date.
    10. Create a Timesvr reminder for two hours before the presentation with the following text:
      Please call me on my cellphone to remind me about the upcoming talk on (talk title). Remind me of the title, the time, the organizer’s name, and other information.
    11. Create a calendar entry for the presentation on my Sacha – Main calendar, including the talk title and organizer contact information. Add location, transit instructions, and driving instructions if specified. E-mail me when you’re finished.

    For reference, this is what the left side of my spreadsheet looks like:

    DATE OF TALK
    Title of talk
    Organizer contact info
    Duration
    Length Task Days
    30 Send organizer title, abstract, bio, and picture -21
    15 Get talk details -21
    30 Outline talk -18
    120 Do background research -14
    60 Assemble detailed outline -7
    150 Write pre-talk blog post -5
    60 Storyboard presentation -4
    120 Make presentation and send it to organizer -3
    10 Call or e-mail organizer to confirm details -2
    60 Give presentation 0
    60 Post recordings 1
    30 Update ROI spreadsheet 2
    Talk information
    Abstract
    Bio

    Quarterly review: Q1 2009

    April 15, 2009 - Categories: Uncategorized

    In The Periodic Review, Part IV, Stephen P. Smith gives a handy quarterly review checklist that includes:

    1. Review 3-5 year goals
    2. Review career goals
    3. Review purpose
    4. Review lifestyle

    which I will rearrange a bit, because this makes more sense to me:

    1. Review purpose
    2. Review career goals
    3. Review 3-5 year goals
    4. Review lifestyle

    Purpose

    I’m passionate about:

    which is really one passion: helping others and myself be the best we can be through tools, processes, and connections.

    Some key ideas that support that passion:

    No significant change in principles from last quarter. I’m getting better at experimenting and scaling, though! =)

    Career

    There are lots of different paths I can take so that I can eventually fully express those principles. =) No matter which path I choose, I hope to grow into a position where I can create opportunities, help lots of people grow, and continue to have the time and space to experiment with interesting tools and processes. This is basically my current situation, but on a bigger scale.

    From conversations, it doesn’t seem as if I’d like the high-powered corporate executive path, although I’m open to being surprised. ;) I can probably do well as a professional, and I would probably also do well as an entrepreneur. I’d like to keep my technical skills (building tools is a lot of fun!), and I want to learn how to build processes that help others be more productive.

    Personal projects that can help me advance my career goals are:

    3-5 year goals

    Among my 3- to 5-year goals are:

    Lifestyle

    My lifestyle is fairly frugal, although there are some things I spend on that other people might not, because I think it’s worth it. For example, my experiments with delegation have been very interesting! =) My roles and responsibilities are in line with what I want and with the lifestyle I have, although I’m looking forward to finding ways to be more present and more thoughtful, because that’s fun too. Key positive changes I’d like to make to my lifestyle this quarter: use my bike more often, take advantage of the warmer spring/summer weather to play catch, and gradually make more and more clothes for my wardrobe. Ooh, and make time for more dot-connecting!

    =)

    UPDATE: You might also find these links interesting:

    Monthly review: March 2009
    Monthly review: February 2009
    Monthly review: January 2009

    Reflecting on public speaking and my talk management system

    April 15, 2009 - Categories: kaizen, presentation, speaking

    As I was describing my talk management process and goals in an e-mail to a potential mentor, I realized I’d come pretty far from where I started in public speaking. Here’s what I have (and therefore, what I can help people learn about). I have:

    Here’s what I’m working on now:

    Over time, I’ll also learn more about organizing my own speeches and events, and working with other speakers.

    My goal is to be able to help inform and inspire people by consistently preparing and delivering engaging presentations, whether in person, over a teleconference, or as a recorded presentation (that’s tough!). I’ll know I’ve achieved it when I can give a presentation once a week or once every two weeks that makes lots of other people and me smile, learn something useful, and get moved to action. I would like to give 100 talks over the next 3-5 years, and I can also measure my progress based on the number of testimonials I collect.

    I enjoy public speaking. Public speaking (complements the other things I do), and applying the principle of relentless improvement to it is a lot of fun as well. =)

    One stick figure’s day

    April 16, 2009 - Categories: sketches

    It’s been a while since I posted a sketch!

    Sketches: Do these look like cats to you? =)

    April 17, 2009 - Categories: cat, sketches

    This was also fun to make. =)

    Weekly report: Week ending April 18, 2009

    April 18, 2009 - Categories: weekly

    From last week’s plans:

    I also:

    Next week, I plan to:

    Managing virtual assistants: Imagining more possibilities

    April 19, 2009 - Categories: delegation

    When it comes to finding people for my outsourcing team, I’m like a 5-year-old in Willy Wonka’s chocolate factory. There are so many people with so many great talents, and I want to tap all of them.

    I find it amazing that I can trade my money (which really represents my time and energy) for someone else’s time and energy. For example, the image below took one of my illustrators 4 hours to make based on a photo, for a total cost of around USD 45. This is not an amount to sneeze at, for sure, but considering how long it would’ve taken me and how badly I would’ve drawn it myself, it’s not a bad trade-off either.

    That’s so much better than my stick figures. =) Now my personal outsourcing team includes someone who types faster than I do (she’s an excellent transcriptionist) and several illustrators who can beat me in a drawing competition even with their eyes closed.

    I delegate many clerical tasks, taking it as an opportunity to think about and document my processes. But the times I really enjoy delegating something to someone is when I can tap their strengths at things that I find it difficult to do, and they do things that surprise and delight me. My team doesn’t just save me time, they teach me so many things along the way, and they help me imagine even more possibilities.

    There’s something powerful in here, and I’m looking forward to learning how to make the most of it. =)

    My financial network map and virtual envelope system

    April 20, 2009 - Categories: finance

    Taking Bargaineering‘s advice to map out my financial network, I decided to diagram how my accounts relate to each other:

    I have accounts at three banks, represented by the gray boxes at the top. The first bank offers me free chequing, okay-if-not-stellar rewards on my credit card, and a good savings rate. The second bank offers me a good savings rate and GICs that are easy to manage. The third bank offers me low-MER index funds for my registered retirement savings plan (RRSP) and long-term investments. (I’m 25, so my portfolio leans heavily towards equity.)

    UPDATE: I nearly forgot–I also have a Defined Contribution Pension Plan at work, which automatically deducts a portion of my paycheque for my retirement savings. That’s the good thing about automatic deductions–they work for you even if you forget about them… =)

    I use a modified envelope budgeting system to get a unified view of my finances, plan my spending, and save up for major expenses. Every week, I balance my books, entering in transactions and double-checking my envelope balances. All income is automatically put into a virtual “Unallocated” envelope. I copy the envelope allocations from my previous paycheque, and these allocations move virtual money to the different envelopes.

    Priority envelopes:

    Infrequently-accessed envelopes: I keep my emergency fund and my travel fund at a certain level.

    Regular expenses and flexible expenses: Every paycheque, I use a template to allocate money among my regular and flexible expenses. Then I check the balance of my virtual envelopes. If one of the regular expenses envelopes is lower than it should be or I have a negative balance somewhere, I move money from the flexible expense envelopes. This arrangement lets me build up some “play money” that I can spend on little indulgences.

    When I spend money, I track which account it flows out of (Chequing or Mastercard, typically), and I also semi-automatically track which envelope it comes from. Every expense gets taken out of the Play envelope by default, to make sure that all expenses are accounted for. If a transaction matches certain rules or I adjust the envelopes manually, then my system takes virtual money from the corresponding envelope and puts it into the play money envelope. The personal finance system I use (Ledger – it’s a command-line tool for geeks) allows me to prepare reports with or without these virtual transactions, so I can reconcile my finances with bank statements and with my virtual envelopes.

    When I want to save for a short-term goal, I create an envelope for it and adjust my envelope allocations. I wrote a shortcut to calculate the minimum I need to save each paycheque in order to meet my medium- or long-term goals by my target dates. That allows me to reduce my Investment envelope allocation and put the freed-up money in my short-term goal envelope. Once I’ve achieved that goal, I return my Investment envelope allocation to my customary amount. This allows me to enjoy things earlier, while still being on track for my medium- or long-term savings goals.

    Results: Because I control my spending based on the balances in these virtual envelopes, it’s easy to pay my credit card in full each month. I’ve also been able to fully fund my RRSP each year, and I save a decent amount for long-term retirement outside that tax shelter. Creating envelopes for short-term savings goals like a drawing tablet or a bicycle before lets me build both a budget and anticipation, and I get to do some consumer research along the way, too. The crazy idea opportunity fund lets me try interesting things. When an idea or an opportunity gets large enough, I split off another envelope to make sure I set aside enough funds to explore it well (ex: outsourcing). And yes, I end up with enough Play money to enjoy life, although I often move play money into my Investment envelope because it’s so much fun watching those numbers go up too!

    Couple finances: W- is also good with money. We’re both pretty frugal, although we spend where it counts. W- uses GNU Ledger to manage his accounts, too. (The couple that geeks out together…) He uses a similar envelope system, but he allocates money to virtual envelopes on a monthly basis instead of on the bi-weekly basis I use. We keep separate bank accounts, but we reconcile our books every so often so that we can keep track of who needs to be reimbursed for what. =) It’s a lot of fun, or maybe we’re just both weird in the same way.

    Next steps: I’m happy with the way my finances work, and I know that I have a reasonable chance of doing well in the future if I just keep plugging away at it. Most personal finance books are written for people overwhelmed with debt or worried about retirement, so there’s very little advice on what to do once you’ve gotten that sorted out. (I’m not guaranteed a good retirement – life happens! – but I probably won’t do too bad.) With a good foundation in place, I can then look at other things: how to get even more value for what I do spend (yay frugality!), how to explore opportunities, and even how to create opportunities for other people.

    Big picture: Good money management can help me explore opportunities and avoid one of the most common stressors for relationships, and both help keep me very happy. I’d like to figure out how to manage money really well, because someday I want to be in a position where I can create lots of opportunities for others. I also want to be able to build a library. =) Great money management can help me get there. With that big picture in mind, it’s easy (and fun!) to invest time in reading about how I can save more money, earn more money, or make the most of what I have.=)

    Like this? Check out my other posts about personal finance.

    Q1 2009 Newsletter

    April 20, 2009 - Categories: Uncategorized

    This is a quarterly email with my favorite blog posts, books, links, and personal updates. You received this newsletter because we’re connected on LinkedIn or you subscribed to the list. To unsubscribe or change your e-mail address, click here: !INSERTURL!

    THINGS I’M THINKING ABOUT

    1. Personal outsourcing

    No matter how productive you are, you only have 24 hours a day. I haven’t figured out a way around that, but I experimented with delegating some personal projects to virtual assistants.

    It has its own challenges (I’m learning a lot about specifying what I want!), but I enjoy working with different people–many of whom do the work much better than I can! You can read about my experiences and my processes at http://livinganawesomelife.com/wp/category/va .

    If you’re interested in getting started, comment on my blog or e-mail me. I’d love to learn along with you!

    2. Drupal application development

    I really enjoy building content management systems and social networking websites using the Drupal platform, and I’ve been teaching other people tips on how to become better (and lazier!) developers. I gave a sesson on “Totally Rocking Your Development Environment” at DrupalCon 2009 to around 150 people, and many people told me that it was one of their highlights. You can find it and my other Drupal-related posts at http://livinganawesomelife.com/wp/category/drupal .

    3. Web 2.0, Enterprise 2.0, and public speaking

    I gave 13 talks, reaching approximately 730 people with an additional 1825+ views online.

    External presentations:
    - Totally Rocking Your Development Environment, Drupal Peru
    - Totally Rocking Your Drupal Development Environment
    - Totally Rocking Your Development Environment, DrupalCon 2009
    - Enterprise 2.0 and Knowledge Management (Schulich School of Business)
    - How the Web is Changing the Way We Learn – Mesh panel
    - New Employees and a Smarter Planet

    IBM presentations:
    - Get Smart with IBM Web 2.0
    - GBS Tech Talk
    - Networking Outside the Firewall
    - Networking Outside the Traditional Office
    - Making the Most of Sametime Unyte
    - Totally Rocking IBM: FutureBlue and Web 2.0
    - Four Generations in the Workplace: Top 10 Signs of Multi-generational Issues

    I’m looking forward to helping even more people learn more about connecting and collaborating using social networking tools. I also love helping developers learn about ways to get even better at working with Drupal. Speaking and coaching are both are great ways to get even better ROI on what I’ve learned, and to meet and learn from lots of interesting people along the way.

    Want me to speak to your group? E-mail me and we might work something out. Interested in learning more about public speaking, or checking out my talks? See http://livinganawesomelife.com/wp/category/speaking for my thoughts and tips.

    4. Lots of hobbies

    I got my own bike, and that really changed Toronto for me. I’m learning more about sewing my own clothes, and I’ve been teaching myself the piano too. Ooh, and drawing! Check out http://livinganawesomelife.com/wp/category/sketches for my stick figures, and http://twitter.com/sachac to see my new background. =)

    QUICK LINKS

    Quarterly goal review:
    - Q1 2009: http://livinganawesomelife.com/wp/2009/04/15/quarterly-review-q1-2009/
    Monthly reviews:
    - March 2009: http://livinganawesomelife.com/wp/2009/03/31/monthly-review-march-2009/
    - February 2009: http://livinganawesomelife.com/wp/2009/03/17/monthly-review-february-2009/
    - January 2009: http://livinganawesomelife.com/wp/2009/01/30/monthly-review-january-2009/
    Weekly reviews: http://livinganawesomelife.com/wp/category/weekly/

    MY TOP BOOKS THIS QUARTER

    Understanding Comics: The Invisible Art
    Scott Mccloud, 2006
    Well-drawn, well-written, and surprisingly philosophical. Definitely worth a read.

    The Power of Full Engagement
    James E. Loehr, 2003
    Applies principles from athletic training to the corporate world. Great book for self-improvement.

    Fifty Years of Great Writing: Sports Illustrated 1954-2004
    Rob Fleder, 2003
    I don’t know much about sports, but good literature like this is a great way to learn why people love it.

    OTHER PEOPLE YOU SHOULD CHECK OUT

    If you like reading my blog and you’re looking for other people to read, I recommend:

    Sameer Vasta – I Tell Stories, http://itellstories.org/
    Check out his quarterly report: http://itellstories.org/2009/04/14/create-followup/

    Ryan Stephenshttp://ryanstephensmarketing.com/blog/
    Productivity and social media marketing from another Gen Yer

    – and cool blog posts I’ve shared from my Google Reader:
    http://www.google.com/reader/shared/04689935238818494850

    See you next quarter, or earlier! =) If you want more recent updates, check out http://www.livinganawesomelife.com .

    What were the highlights of your quarter, and what are you planning for the next one? Share your thoughts at http://sachachua.com/wp/2009/04/20/q1-2009-newsletter/ or e-mail me at sacha@sachachua.com!

    —-
    You received this e-mail because we’re connected on LinkedIn or you subscribed to the list. If you want to unsubscribe or change your e-mail address, click here:

    !INSERTURL!

    If you’d prefer to get these updates in your feed reader, you can get full or partial feeds at http://livinganawesomelife.com.

    If you received this note from a friend and you would like to subscribe, click here:
    !INSERTURL!

    My contact information:
    Sacha Chua
    +1 416 823 2669
    sacha@sachachua.com

    Software reconstruction

    April 21, 2009 - Categories: drupal

    Our partners really like the Drupal-based content management system I’ve been working on, so we might roll it out to a number of other countries. To minimize headaches, we’ll probably run them as separate Drupal databases using the same code. Over the next quarter, my team needs to clean up and genericize our current US-centric site so that it can be used in lots of other geographies.

    This would be a nightmare to do if we had made all of our changes on the Web. Fortunately, most of our changes are in .install files. The changes had gotten out of sync with the installation profile we created near the beginning of the project, but it was relatively easy to work through the updates and incorporate them in the profile. The regression tests I wrote are proving to be really useful, too.

    There are still a number of variables that we set through the web-based interface (blame moments of weakness!), so after we clean up the profile, we’ll compare some of production tables against the tables produced by our from-scratch installation.

    I applied the lots-of-little-inc-files-that-automatically-get-included-an-run pattern from our last project, so now everything is neatly compartmentalized. I improved that pattern to add weights, so now I can make sure that some inc files are run after others.

    Which brings me to thinking about the proper way to backport changes from update functions back into the install functions or to the installation profile. _install functions should reflect the latest versions of the database schema, but some code (node creation, etc.) logically feels more like a part of the installation profile’s final steps. My current approach is to use the _install function for code that doesn’t require other modules to be correctly configured, and to use my custom _install_final method for the finishing touches. I’ve also broken site-specific code out into separate .inc files so that I can include any of them as needed, and I’m using regression tests to check that things are okay. Command-line drush and my Makefile make it easy to switch between the two virtual hosts.

    Most of my tests are still fail, but some of them pass with from-scratch installs. Hooray! =D

    Learning to play the piano

    April 21, 2009 - Categories: life

    I’ve been teaching myself how to play the piano, and I really enjoy it.

    My parents arranged piano lessons for us when we were kids. I didn’t enjoy that nearly as much. The pieces were unfamiliar, and the rules of piano-playing seemed so strange. Read the notes, play the drills, curve the fingers. One piano teacher kept scolding me because I didn’t read the notes–but that was because I had figured out the pattern of the simple exercises we were doing, and my restless eyes couldn’t keep still.

    Fast forward a decade or two, and now it’s one of the things that makes me smile. I like being able to play simple arrangements of Moonlight Sonata and The Entertainer from memory. I’m currently working on learning Prelude: Op. 28 No. 6 by Chopin (PDF, Mutopia link). It’s one of W-‘s favorites. I’ve been looping over his CD of Vladimir Horowitz (A Reminiscence) playing that and other beautiful pieces, and I’ve been slowly making progress on learning the piece. I can do the left hand with a few pauses, and I’m learning the right hand chords. The timing reminds me of The Entertainer, although the prelude is more complex and it’ll be a while before I can do the proper dynamics.

    What I enjoy the most about learning how to play the piano is being able to chunk more and more complex segments: first notes, then chords, then phrases, and then eventually even the pattern of a piece. I love the instant feedback of knowing how close you are to doing things right, and the gradual improvement of playing a piece very slowly and then speeding up as I become more familiar with the way my hands must move. It is a welcome break after work, or even sometimes during the work day if I need to perk myself up. Playing the pieces that I’ve learned reinforces that feeling of competence, while working on the piece that I’m learning reinforces the joy of experimentation and growth.

    Another reason why I enjoy playing the piano is that I also end up inspiring J- to experiment with it, to play music and to play with music. When I sit down at the piano, she invariably comes to listen. I move to the left so that she can sit on the piano bench, and I help her practice a few pieces she wants to learn. I mostly just point to the notes on the sheet to help her keep track of where she is, and sometimes I’ll play passages for her. This turns it into a bit of a memory game, too.

    She told me I’m a better music teacher than the last one she had. Me, I just want to help her get even deeper into the joy of learning. =) And it pays off. Sometimes, when W- and I are working in the kitchen, we hear the faint strains of someone figuring out a new piece of music–from one of the piano books lying around, or from her memory.

    These experiences would be much more difficult to have if we didn’t have a piano in the house. Now that I’m starting to get the hang of it, I wish I’d opened up and let myself try it sooner, on the piano in my parents’ house. But maybe I needed to listen to a lot more music in order to enjoy playing it, and now that I can play a little bit, I’ll enjoy listening to music even more.

    Mapping what makes me happy

    April 23, 2009 - Categories: life, sketches

    Thinking about what makes you happy is a good way to tweak your life so that you do more of the things that make you happier.

    Here’s an incomplete, not-to-scale map of things that make me happy. I started by brainstorming lots of things, then moving them around in the Inkscape drawing program (it’s like magnetic poetry with an infinite refrigerator door!) until order emerged. Also, reading the book Back of the Napkin helped.

    I’ve divided into things I do with other people and things I do with myself, and I’ll add more as other things occur to me.

    Happiness map - click for full size

    What’s your happiness map? Here’s how you can figure it out:

    1. Take a whole bunch of sticky notes, index cards, or other things you can write ideas on.
    2. List all the things you do that you enjoy.
    3. Move them around until an order makes sense. I sorted mine in order of increasing happiness, and then I grouped them by type.

    Drupal staging and deployment tips: It’s all code

    April 23, 2009 - Categories: drupal

    As I talk to more and more developers about practices for working with Drupal, I get the idea that the staging and deployment process adopted by my team isn’t widespread.

    Many developers make their changes directly through the web-based interface of a testing server, or even on the production site itself. I think that’s both tedious and scary. =)

    Putting all of our behavior-related changes in update function in the install file makes it easier to merge changes and repeatedly test upgrades. Editorial changes (fixing typos, etc.) can happen on the site, but if it’s behavior-related code, it should be in the code repository. In moments of weakness, we’ve made web-based changes to our site, and we almost always regret those–either right away because things broke, or when we try to reconstruct our changes.

    The Module Developer’s Guide documents how to write .install files for Drupal 5 and Drupal 6, but doesn’t go into much detail about what else you can put in the update functions. Maybe that’s why many developers use install files only for database-related changes. But you can do so much more: creating nodes, adding permissions, enabling other modules, and so on. 

    Watch out for these potential pitfalls:

  • If your update works if you apply them one at a time, but not if you apply all of them in one go, look for functions that cache information in static variables. You may need to modify the source code to add an argument that allows you to reset the cache or find another way to deal with the static variables. Static variables are a pain.
  • Another reason why batch updates may fail while incremental updates work has to do with the order that the update functions are called in. Modules are processed according to weight and alphabetical order, and all applicable update functions within one module are run before moving onto the next. If you have a set of related modules, put update functions that affect the related modules into the module with the heaviest weight.
  • .install files may get really long if you create _update_N functions for every change and you frequently deploy to a test server. You can refactor your update functions if other developers know that they should test the updates from a fresh copy of the production database instead of from incremental updates to their current system. Make sure you don’t add code below the update level on the production server.
  • Don’t forget to return an array containing results, or even just array().
  • Here are some general tips on how to find out the programmatic equivalent of a web-based action:

    And here are some examples of programmatically doing things:

    Setting a variable
    variable_set(‘yourvariable’, ‘yourvalue’);

    Enabling modules
    include_once(‘includes/install.inc’);
    module_rebuild_cache();
    drupal_install_modules(array(‘module1′, ‘module2′));

    Disabling modules
    db_query(“UPDATE {system} SET status=0 WHERE type=’module’ AND name=’%s'”, ‘modulename’);

    Creating nodes 
    global $user;
    $old_user = $user;
    $user = user_load(array(‘uid’ => 1));
    $session = session_save_session();
    $session_save_session(FALSE);
    // Do the work
    $node = new stdClass();
    $node->type = ‘page';
    $node->title = ‘Title';
    $node->body = ‘Body';
    node_save($node);
    // Restore the user
    $user = $old_user;
    session_save_session($session);

    Deleting nodes
    global $user;
    $old_user = $user;
    $user = user_load(array(‘uid’ => 1));
    $session = session_save_session();
    session_save_session(FALSE);
    // Do the work
    node_delete($nid);
    // Restore the user
    $user = $old_user;
    session_save_session($session);

    Updating the list of blocks
    global $theme_key;
    $theme_key = ‘yourtheme';
    _block_rehash();

    Convenience functions for working with permissions

    function _add_permissions($roles, $permissions) {
      $ret = array();
      foreach ($roles as $rid) {
        if (is_numeric($rid)) {
          $role = db_fetch_array(db_query("SELECT rid, name FROM {role} WHERE rid=%d",
    				      $rid));
        }
        else {
          $role = db_fetch_array(db_query("SELECT rid, name FROM {role} WHERE name='%s'",
    				      $rid));
        }
        $role_permissions =
          explode(', ',
    	      db_result(db_query('SELECT perm FROM {permission} WHERE rid=%d',
    				 $role['rid'])));
        $role_permissions = array_unique(array_merge($role_permissions, $permissions));
        db_query('DELETE FROM {permission} WHERE rid = %d', $role['rid']);
        db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')",
    	     $role['rid'],
    	     implode(', ', $role_permissions));
        $ret[] = array('success' => true,
    		   'query' => "Added " . implode(', ', $permissions)
    		   . ' permissions for ' . $role['name']);
      }
      return $ret;
    }
    
    function _remove_permissions($roles, $permissions) {
      $ret = array();
      foreach ($roles as $rid) {
        if (is_numeric($rid)) {
          $role = db_fetch_array(db_query("SELECT rid, name FROM {role} WHERE rid=%d",
    				      $rid));
        }
        else {
          $role = db_fetch_array(db_query("SELECT rid, name FROM {role} WHERE name='%s'",
    				      $rid));
        }
        $role_permissions =
          explode(', ',
    	      db_result(db_query('SELECT perm FROM {permission} WHERE rid=%d',
    				 $role['rid'])));
        $role_permissions = array_diff($role_permissions, $permissions);
        db_query('DELETE FROM {permission} WHERE rid = %d', $role['rid']);
        db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')",
    	     $role['rid'],
    	     implode(', ', $role_permissions));
        $ret[] = array('success' => true,
    		   'query' => "Removed " . implode(', ', $permissions)
    		   . ' permissions for ' . $role['name']);
      }
      return $ret;
    }
    

    Use update functions for all of your behavioral changes. Use source code control. Write regression tests. These practices won’t take all the challenges out of Drupal development, but they certainly make it less stressful–and more fun. =)

    On the practice of happy-do

    April 24, 2009 - Categories: life, sketches

    Happy-do If you have a clear picture of what makes you happy, it becomes easier to transform things you don’t particularly enjoy doing into things that you do. I like to think of this as happy-do: the martial art of happiness.

    Like aikido, happy-do is about using your opponent’s energy to “gain control of them or to throw them away from you.” (from the Aikido FAQ). Like judo, it’s about timing and leverage. In both aikido and judo, the first thing a beginner learns is ukemi–how to fall safely. Then they learn different ways to transform other people’s force while developing flexibility, speed, and proficiency. In happy-do, you start with being able to see the silver lining and pick yourself up off the ground, and then you learn how to make things even better.

    Yesterday was a fantastic happy-do day. I turned some of my most frustrating tasks into things I enjoy. For example, I really don’t like working with clunky databases where I can’t find the information I want. I needed to get a better sense of the documents relevant to our project phase, though. Instead of feeling overwhelmed by the jumble of documents, I spent some time learning how to make a database view that showed me only items created this quarter. It made things so much better. I helped my team members learn how to make it for themselves, too. That turned the task of working with clunky databases into the more enjoyable activities of learning something new, building tools, relentlessly improving processes, and helping others grow, too.

    I also don’t enjoy writing design documents, particularly as I get frustrated when the word processor I use messes up my layout when I insert images. Instead of struggling with the word processor and with the tiny eraser-type mouse on my laptop, I imported the wireframes into my favorite drawing program and used my tablet to move things around. That turned it from the frustrating task of working on design documents into drawing, one of the things I enjoy a lot.

    Bicycle My last example–and all of this was just yesterday!–is about exercise. I’m not particularly fond of cardiovascular exercise (yet), and I never liked running (too much impact). I also don’t really enjoy commuting, which is one of the reasons why I try to work from home as much as possible. =) But if I take exercise and commuting, and I throw a bicycle into that mix, it becomes a whole lot more fun! After work yesterday, I biked to Yonge and Bloor (a good 30 minutes with a number of inclines), picked up some lightweight interfacing for a sewing project and some more Vogue patterns to try, and then biked back. That was a lot of fun, and it was good for me. Hooray!

    Map out things you enjoy doing, and think about how you can transform your other tasks into something like them. Not all tasks lend themselves well to happy-do–sometimes you just have to do what you have to do–but you might be surprised at what you can transform. Enjoy!

    Mapping my work happiness

    April 24, 2009 - Categories: career, life, sketches

    Here’s what makes me happy at work. =) For me, writing and passing test cases is a lot more fun than testing websites interactively. Also, Drupal development is a good part of my work, but I also do lots of other things I enjoy that I’m not specifically paid for. =)

    Weekly report: Week ending April 24, 2009

    April 24, 2009 - Categories: weekly

    From last week’s plans:

    I also:

    Next week, I plan to:

    Thinking about those newsletters

    April 24, 2009 - Categories: connecting

    I sent my test newsletter to 30 people randomly selected from my LinkedIn network. Half the people opened it, half the people skipped it. Three people clicked on a link (not bad!), but two people unsubscribed (hmm).

    Based on those numbers, I think I will not send an e-mail campaign out to my network. Yes, it will remind people I exist, but it will also cost people attention when they skip over it or when they unsubscribe.

    So if I don’t feel comfortable using e-mail marketing, what else can I do? I can make weekly, monthly, and quarterly feeds easier to subscribe to. I can make it easy to subscribe to those feeds by e-mail. I can focus on creating lots of value so that people come across me and perhaps even subscribe to what I share. =)

    Different strokes for different folks. That was a good experiment, though!

    Making some wool skirts

    April 25, 2009 - Categories: sewing

    A little too late for winter, I think, but I’ve gotten it into my head to make some pencil skirts from the dark red wool I used for a jacket, and the gray wool that I used for a jumper. I started with the red wool first. It wasn’t as pretty as the gray wool, so I knew I wouldn’t mind it so much if I botched the piece.

    I used the Simplicity 2906 pattern for skirts (the second skirt pictured).

    Instead of sewing darts, I eased the seams, and then used steam to shrink out the fullness. Result: excellent fit around the back, hooray!

    I also sewed in an invisible zipper before doing the rest of the seams, or at least I tried to. Positioning the zipper correctly was an interesting topological exercise! The generic invisible zipper foot didn’t fit my sewing machine, so I sewed the zipper in by hand. It’s relatively inconspicuous, although not as hidden as properly applied zippers on ready-to-wear clothes.

    The wool is a little itchy, but I can wear this with a slip. I may even line the other one. (Everything looks better lined anyway. ;)

    I’m going to hang this skirt up so that I can hem it tomorrow, and I’ll keep an eye out for something I can make into a slip. Given the warmer weather (hooray!), I may postpone sewing the other wool skirt. If so… Hmm… What would be nice to do next? A full skirt in red/white gingham check? Maybe get started on those Vogue shirt patterns I picked up yesterday? Hmm…

    Caturday

    April 25, 2009 - Categories: cat, sketches

    Another wonderful day… =)

    Science Rendevous, May 9 11 AM – 5 PM, Toronto

    April 26, 2009 - Categories: geek

    I love science. Love love love love. And now Toronto has a street festival for it: Science Rendezvous on May 9 from 11 AM to 5 PM at the University of Toronto, St. George campus! Isn’t that just awesome?

    Come and play! =) E-mail me your contact information and we can coordinate a great day out! =D

    Notes from a conversation with Isaac Ezer and Andrew Louis

    April 27, 2009 - Categories: Uncategorized

    Isaac and Andrew dropped by for tea and a wonderful conversation yesterday. =) Here are some rough notes from our conversation.

    … and lots of other good stuff, too.

    Three people, three hours of conversation, and plenty of good things learned and shared. Looking forward to our next conversation!

    The ups and ups of Mondays

    April 27, 2009 - Categories: life

    Clair e-mailed me a note about how wonderful it is to watch me grow (and she’s known me for quite a while!). I told her that it’s almost all W-‘s fault, and that one can do a lot of things when one laughs every day and lives well every day. ;) But it’s so true. Whatever gives you happiness–a great relationship, a great vision, a great environment–makes a huge difference in your productivity.

    Monday! If you can rock Mondays, you can rock any day of the week.

    On a scale of 1 to 10, with 10 being awesome, I typically start the morning at a happiness level of 7 or 8. If it’s warm and sunny, that might even be a 9. =)

    Breakfast and a good morning of creative work–brainstorming, developing software, finishing tasks, learning something new–get me to a 9 or 10. My energy dips a little at 10 or 11, which makes it a good time for a snack (apples, bananas, whatever we have handy). I can usually do that without breaking my concentration. I do my best work in the mornings.

    Lunch interrupts my flow, bringing me down to about a 7 or 8 again. I sometimes delay it a little to stay in flow for as long as I can. I save the afternoon for routine tasks and things I don’t enjoy doing, and work through the rest of the afternoon at a happiness level of about 5 or 6.

    If I’m frustrated or I need to work on things I actively dislike doing, I may go all the way down to a 4. If I’m anxious or stressed out about something (permanent residency paperwork, critical bug), I may get all the way down to a 3. The good thing is that within twenty minutes or so, I usually bounce back to a 6 or 7. If I’m very worried or frustrated or distraught, it may take twenty minutes and a good hug. I don’t really know why that is–maybe my defense mechanisms kick in almost automatically?–but it is.

    Dinner time with W- usually brings me me up to the 7 – 9 range. Riding on my bicycle, playing the piano, helping J- with her homework, playing catch, getting stuff ready for the next day, fiddling around with sewing… lots of little things help me increase my happiness level even further, and I often end the day at a happiness level of 10 (or even 11!).

    So yes, a day when I’m frustrated with word processing can still be an awesome days–and it keeps getting better all the time. =)

    There might be a useful tip in here: Pick a good default happiness level (or gradually grow into it), then get better at tweaking where you are and how you manage your energy. =)

    Getting better at writing design documents

    April 28, 2009 - Categories: geek

    I’m slowly getting better at writing design documents. Now that I’ve gotten rid of my two major annoyances (fields and images in OpenOffice.org), I’ve been able to focus on the design part, and I’ve finally written a document that satisfies the project manager and the IT architect on my team. Yay!

    Building Prototyping the functionality really helped. Once I’d gotten my hands dirty with the code, it was easy to refer to functions that need to called and hooks that need to be defined.

    I also ask way too many questions (all those programming competitions taught me to watch out for inconsistent or insufficiently specified behavior!), but this is apparently a good thing.

    Tomorrow: lots of meetings, but also a bit of time to write some more code, hooray!

    Tips for getting started with virtual assistance

    April 30, 2009 - Categories: delegation

    People often ask me about my experiments with outsourcing to virtual assistants and my reasons for this experiment, and I’m always happy to share what I’ve learned.

    So here are some getting-started tips I’ve figured out over the last two months:

    Good luck and have fun!