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
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
- 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…
Random Emacs symbol: gnus-summary-catchup-and-goto-next-group – Command: Mark all articles in this group as read and select the next group.
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:
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))) 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 (mapcar (lambda (rec) (when (bbdb-record-name (car rec)) (let ((reg regexps) (notes (bbdb-record-notes (car rec))) list) (while reg (setq list (cons (sacha/count-matches (car reg) notes) list)) (setq reg (cdr reg))) (cons (sacha/planner-bbdb-annotation-from-bbdb rec) list)))) bbdb-records))) (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)))) (or (> 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." (kill-new (mapconcat (lambda (entry) (concat (car entry) " | " (mapconcat (lambda (count) (if (= count 0) " " (make-string count ?-))) (cdr entry) " | "))) alist "\n"))) ;; 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
Random Emacs symbol: standard-display-cyrillic-translit – Command: Display a cyrillic buffer using a transliteration.
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: simon
Random Emacs symbol: nobreak-space – Face: Face for displaying nobreak space.
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 [Assets:Savings:PCFinancial]
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…
Random Emacs symbol: shell-script-mode – Command: Major mode for editing shell scripts.
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.
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.