Headlines for Thursday:

  1. Microsoft evangelism - tempting! (1096 words)
  2. Contact report (290 words)
  3. Hack Night (447 words)
  4. In other news... (370 words)
  5. Tweaked blog design (51 words)
  6. Learning a foreign language (47 words)



1. Microsoft evangelism - tempting!: 13:52

I had hot chocolate and a terrific conversation with John Oxley, director of community evangelism at Microsoft Canada. He told me about Microsoft evangelists. It seems like such a terrific fit! And the phrases he used - finding heroes, telling stories - resonate with what I want to do. I'm looking forward to exploring that opportunity. Perhaps we can co-adapt. I'd love to work on skills that they'd find useful, and they can adapt the job description to take advantage of my background and interests.

I was glad to hear that they're coming around to seeing people as people instead of just as consumers. ;) I love how companies are gaining faces. They may have lost Robert Scoble, but they've learned the importance of having human connections! John said that they're moving more towards thinking of relationships, which is one of the things I've gotten really interested in.

In the course of the chat, John asked me what languages I program in. I rattled off a few - Emacs Lisp leading the list, of course. He had seen my resume online, so he knew that practically all of my experience was with free and open source software. I told him that was because open source was how I could work on things that mattered, even as an undergraduate in a Third World country. I loved learning from other people's code, and I still do. Microsoft won't--can't!--make me spread fear, uncertainty and doubt about open source. =)

What about IBM? If I can do Enterprise 2.0 evangelism, then it would be tremendously exciting to get in on the ground floor and help shape the technology. I've gotten to meet so many amazing IBMers through blogging and social bookmarking, and that kind of a connection isn't just something to walk away from! I also really, really enjoy mashing together all the Enterprise 2.0 services. =) If IBM can help me make *just* the right career for myself, then they've got dibs on my brain for taking that chance on me and giving me all these wonderful things to play with.

IBM doesn't quite have an evangelist track, though. I've been advised to look into technical pre-sales or business analysis. If Microsoft comes up with something that's an even better fit for my interests and goals, I'll consider them. After all, they have "evangelist" as a proper career path! =) I really want to be around lots of other people who do what I do or want to do, and I'd love to go to conferences and summits to meet other developers and evangelists.

John asked me what I wanted in a position. I want products and services that I'm passionate about and people I love working with. I want to get out there, meet people, and help them succeed by connecting them with other people I've met, showing them tools they'll find useful, and supporting them as they figure things out. I want to always be learning something new, always be playing around with something cool. The more I learn, the more I can give to more people. I want to be part of the community, and I want to help start communities elsewhere. I want to bridge worlds. I want to tell stories about the cool stuff other people are doing, and what people can do.

I like the picture John painted of evangelism. I'm going to do something like that. What company I do it with depends on a number of factors: the specifics of the career, how I feel about the company's solutions, the connections I have, the testimonials of other people within the organization... I'm looking forward to sorting that out next year! If I go with Microsoft or another company, that's okay - I think I'm creating enough value for IBM to make my fellowship more than worth it, and I'm going to keep ties with them. =)

Here's a sample job ad for the "enthusiast evangelist" position John mentioned. This isn't for Microsoft Canada, but it gives a good idea of the kind of work involved.

Come join the team that is changing the way Microsoft is connecting with influential end users as an Enthusiast Evangelist for the EMEA (Europe, Middle East and Africa) Headquarters. Our connection with “influential end users” lies at the center of Microsoft’s continued long term success as a platform company.

Candidates will be young graduates coming from a technical, marketing, media or other appropriate background and can prove to have a deep passion for technology. Participants must have excellent English and interpersonal communication skills.

Candidates are strategic thinkers, able to balance individual creativity with working as a team and will have a high degree of customer and partner focus.

We have created for you a program called MACH (Microsoft Academy for University Hires). Of this program, the candidate will participate in the Marketing programme which is a two-year international graduate course that will make the graduate familiar with the marketing culture at Microsoft.

The first year is structured academy training, and the second focuses on career development. The programme is for participants with less than 18 months of work experience. Though challenging, they equip the participants with the skills and know-how required for a rewarding career.

Required Profile

  • Passionate about digital lifestyle and rich consumer experiences across different mediums and technologies.
  • Individuals may come from either a technical, marketing, media or other appropriate background.
  • A deep strong understanding of this end user community proven by participation in online communities and/or user groups.
  • Flexibility in regards to work schedule and travel.
  • Solid understanding of the competitive products (hardware and software) and how to differentiate Microsoft from its competitors.
  • Strong communication and negotiation skills.

Candidates are born communicators with a passion for, and solid knowledge of the influential end users, the blogosphere and online media and most things that are part of the Digital Lifestyle.

The candidate will need to show the potential to develop strong leadership and program management skills as well as cross group collaborations skill and knowledge of the field.

To be successful, this candidate will need to show pragmatism and willingness to roll up the sleeves and get the job done!

I'd love to talk more with people in both companies doing the kind of stuff I want to do so that I can get a better idea of what it's like. But yeah, exciting times...

On Technorati: ,

Random Emacs symbol: gnus-summary-catchup-and-goto-next-group - Command: Mark all articles in this group as read and select the next group.

2. Contact report: 15:07

I started tracking e-mail sent on 2006.09.01 with a nifty piece of Emacs Lisp code I wrote just for the purpose. Now I have two months of interesting data which include not only e-mail but also the occasional in-person contact or phone call that I remember to note. It's not complete - e-mail's the only thing that gets automatically tracked - but it does give me interesting information. Here's the contact report for your amusement:

Contact report

It's sorted by overall frequency and then by regular frequency. Warning! Parentheses follow.

(defun sacha/count-matches (regexp string)
  (let ((count 0)
        (start 0))
    (while (string-match regexp string start)
      (setq start (match-end 0)
            count (1+ count)))

(defun sacha/bbdb-contact-report-as-alist (&rest regexps)
  "Creates a list of (name count-regexp1 count-regexp2 count-regexp3)..."
  (setq regexps (reverse regexps))
  (delq nil
         (lambda (rec)
           (when (bbdb-record-name (car rec))
             (let ((reg regexps)
                   (notes (bbdb-record-notes (car rec)))
               (while reg
                 (setq list (cons (sacha/count-matches (car reg) notes)
                 (setq reg (cdr reg)))
               (cons (sacha/planner-bbdb-annotation-from-bbdb rec)

(defun sacha/bbdb-alist-sort-by-total (alist)
  "Sort ALIST by total contact."
  (sort alist 'sacha/bbdb-contact-sort-predicate))

(defun sacha/bbdb-contact-sort-predicate (a b)
  (and a b
       (let ((count-a (apply '+ (cdr a)))
             (count-b (apply '+ (cdr b))))
          (> count-a count-b)
          (and (= count-a count-b)
               ;; If equal, look at the subtotal of the rest
               (sacha/bbdb-contact-sort-predicate (cdr a) (cdr b)))))))

(defun sacha/bbdb-kill-contact-barchart (alist)
  "Kill a barchart with the contact report for ALIST."
    (lambda (entry)
       (car entry)
       " | "
       (mapconcat (lambda (count)
                    (if (= count 0)
                        " "
                      (make-string count ?-)))
                  (cdr entry)
                  " | ")))

;; Usage: (sacha/bbdb-kill-contact-barchart
;;         (sacha/bbdb-alist-sort-by-total
;;          (sacha/bbdb-contact-report-as-alist "2006.09" "2006.10")))
;; Then yank (paste) this into another buffer

On Technorati: , , , ,

Random Emacs symbol: standard-display-cyrillic-translit - Command: Display a cyrillic buffer using a transliteration.

3. Hack Night: 16:02

A few days ago, I posted a matrix of great ways to spend time. Simon liked the idea, so last night, we held a Hack Night - a concentrated pair-programming sprint to make something cool.

We both wanted to play around with the Google Maps API. What better way to learn how to use it than to prototype a new interface for his voice messaging system that would allow users to select phone numbers by drawing polygons?

I'd told him about the point-in-polygon algorithm some time ago. (Hooray, formal computer science education!) He found a Perl program that implemented the algorithm, and had also put up a simple experiment using Google Maps and draggable markers.

While he wrapped up some other stuff, I brought myself up to speed by quickly flipping through tutorials and mailing list archives. I must've browsed through fifty or a hundred pages - not reading for full comprehension, just indexing it so that I'd know what was out there and where to find things.

Along the way, I found several resources that were just what we needed. Several mailing list posts spoke highly of PostgreSQL's geometric operations, which meant that we could replace the Perl script with a very efficient SQL operation. I also found a user interface that was exactly like the design Simon wanted to make.

Assembling the pieces was really easy. We ripped out the code we didn't need and tweaked the script to do what we wanted. It was a lot of fun pair-programming with him. I still haven't gotten the hang of his keyboard layout, so he did most of the typing. (The keyboard was straightforward QWERTY, but the Powerbook layout means I hit the function keys by mistake all the time.) I kept an eye out for little errors and thought about what to do next. Sometimes I kicked him off the computer in order to try something out. (When I had to hit Ctrl-Option-Shift-S to save the file over FTP, I grinned and suggested that Emacs would be far less RSI-inducing.)

Great results for a two-hour Hack Night. We wrapped up at midnight because I had breakfast plans, so I couldn't stay up too late. We couldn't help talking about ways to optimize it, though - using a synthetic integer primary key to speed up joins, denormalizing the database, etc. It was a lot of fun working on that with him, and I look forward to other Hack Nights.

So yeah, I'm a geek's dream. <laugh> And this Hack Night thing? Well worth repeating. Maybe we can hack on my research prototype next...

On Technorati:

Random Emacs symbol: nobreak-space - Face: Face for displaying nobreak space.

4. In other news...: 16:33

I'm back on the wagon of tracking every expense. There's a certain satisfaction in knowing that every cent is accounted for. This time, I'm using John Wiegley's excellent Ledger command-line accounting tool. It works with plain text, of course.

I've just figured out how to do my fancy earmarked accounting thing. I've partially sorted out my cashflow, but I'm not sure how much I'm supposed to receive over the next few months or what'll happen when I start working. For peace of mind, I've earmarked enough money to cover tuition, rent, and food.

I want the earmarked money to be tracked separately from my real savings so that I know how much money I can actually touch, but I want to leave it in my regular high-interest savings account so that I can earn interest on the whole amount. So I need two reports: one showing what I can consider free and clear, and another that reconciles with the account summary from the bank (includes earmarked accounts).

Here's the transaction setting up earmarked rent:

10.28 Earmarked for rent
   [Savings:Earmarked:Rent]      $4365

and every so often, I'll post transactions that look like this:

11.02 * PCFinancial ; Transfer for rent payment
   Assets:Savings:PCFinancial     $-485
   Assets:Checking:PCFinancial    $485
   [Assets:Savings:PCFinancial]   $485
   [Assets:Checking:PCFinancial]  $-485
   ; Automatically transfer rent money from Savings to Checking ($485)
   ; This is still part of my earmarked savings until it goes out of Checking
   ; So ledger -s -c bal shouldn't show it as part of my real checking account
   ; or my savings account, but as part of Savings:Earmarked
   ; but ledger -R -s -c bal should show an increase in checking and a decrease in savings
11.05 ! University of Toronto
   Assets:Checking:PCFinancial    $-485
   Expenses:Rent                  $485
   [Savings:Earmarked:Rent]      $-485
   [Assets:Checking:PCFinancial]  $485
   ; Now decrement my earmarked savings
   ; And make sure that Checking reflects actual balance
   ; And that savings is unchanged from before with virtual transactions

The ! signifies a pending transaction that has not yet been cleared, while * signifies a cleared transaction. ledger can do partially-cleared transactions too. This is pretty nifty.

Makes me want to have more to track...

On Technorati: ,

Random Emacs symbol: shell-script-mode - Command: Major mode for editing shell scripts.

5. Tweaked blog design: 19:56

I tweaked my blog design slightly, using a real-life photo instead of my icon and taking a few things off my sidebar. I might even add accesskeys one of these days. Who knows...

Random Emacs symbol: mail-extr-disable-voodoo - Variable: *If it is a regexp, names matching it will never be modified.

6. Learning a foreign language: 20:12

Another idea for the activity matrix: learning a foreign language. Japanese? Spanish? Maybe Spanish - I know a few people who can practice with me.

Or maybe I should get more deeply into Ruby...

Random Emacs symbol: mouse-autoselect-window - Variable: *Non-nil means autoselect window with mouse pointer.


  1. E-mail to Mark Chignell
  2. E-mail to John Oxley
  3. Reply to William L. Anderson - sent today
  4. Reply to Gabriel Mansour - sent today
  5. E-mail to jeffsand, John Oxley
  6. E-mail to Andrea
  7. E-mail to Sy Ali
  8. E-mail to Jesse Alama
  9. Met John Oxley
  10. Reply to Gabriel Mansour - sent yesterday
  11. E-mail to Michael McGuffin
  12. E-mail to Christopher Charabaruk, John Oxley
  13. Reply to Jyotika Malhotra - sent yesterday
  14. Reply to Gabriel Mansour - sent yesterday
  15. Reply to Don Marti - sent today