February 2015

Weekly review: Week ending January 30, 2015

February 1, 2015 - Categories: review, weekly

This week was the week of focusing on vegetables. I made Japanese curry with a pickled salad on the side (daikon, cucumber, carrot), shepherd’s pie, and pad thai. It was great to have so many vegetable-focused dishes in the fridge. Looking forward to exploring more recipes and building up this habit!

Blog posts

  1. Weekly review: Week ending January 23, 2015
  2. Filling in the occupational blanks
  3. Sketchnote Hangout: Playing with colour
  4. Emacs kaizen: helm-swoop and editing
  5. Writing: Open loops, closed loops, and working with forgetfulness
  6. Emacs microhabit: Switching windows with windmove, ace-window, and ace-jump
  7. Read business books more effectively through application, visualization, or reviews
  8. Learning to work on my own things
  9. Getting data from Org Mode tables
  10. Finding a model for my sharing

Sketches

Link round-up

Focus areas and time review

  • Business (33.3h – 19%)
    • Deposit cheque
    • Earn: E1: 1-2 days of consulting
    • Earn: E1: 1-2 days of consulting
    • Earn (7.1h – 21% of Business)
    • Build (15.2h – 45% of Business)
      • Drawing (13.7h)
      • Delegation (0.0h)
      • Packaging (0.0h)
      • Paperwork (0.7h)
      • Look into recently uploaded images
    • Connect (10.9h – 32% of Business)
      • Talk to Srid
  • Relationships (5.9h – 3%)
  • Discretionary – Productive (15.3h – 9%)
    • Emacs (5.7h – 3% of all)
      • Improve my mail handling
      • Make graphviz easier with Emacs Lisp
      • Try out Tern
      • Help Sean
      • Make a montage of selected sketches based on their filenames
      • Change my set-descriptions.js to be able to use any blog URLs (archive page, future post, etc.)
    • Pick up cultural access pass from Front and Parliament
    • Reflect on asking questions
    • Apply for passport
    • Invest in bonds in TFSA
    • Process a 10lb bag of potatoes
    • Type in goals
    • Read Intermediate Japanese – chapter 1
    • Read chapter 2
    • Write about open loops
    • Collect words and examples from tweets about Emacs
    • Read chapter 3
    • Writing (5.3h)
  • Discretionary – Play (3.0h – 1%)
  • Personal routines (31.6h – 18%)
  • Unpaid work (20.3h – 12%)
  • Sleep (58.6h – 34% – average of 8.4 per day)

Learning from artists: making studies of ideas

February 2, 2015 - Categories: drawing, learning, writing

When people are starting out with sketchnoting, it’s helpful to remember that sketchnoting’s about “ideas, not art” (as Mike Rohde says in The Sketchnote Handbook). It’s easy to get intimidated by the visually-impressive sketchnotes people post, so the reminder is useful.

I’ve been using sketchnotes to explore my own thoughts instead of recording other people’s content. I like flipping things around, so that got me thinking: What can I learn from the way artists work, and how can I apply that to learning and drawing?

Here are a few ideas:

2015-01-05 What can I learn from artists about learning -- index card
2015.01.05 What can I learn from artists about learning – index card

  • Collect: Artists collect inspiration. They fill sketchbooks, make moodboards, clip reference photos, and so on.
  • Emulate: Artists develop their skills by emulating masters.
  • Observe: Artists draw what’s there, not what they think is there. They also analyze the techniques other artists use and the effect of these techniques on the piece.
  • Imagine: Artists aren’t limited to what they see. They can draw what isn’t there. They can draw the essence of a thing.
  • Transform: Great art transforms the way people see.
  • Experiment: Artists try different techniques and styles to figure out what works for them.
  • Craft: Artists refine their work and improve their tools.
  • Sketch: Artists do quick studies to try several views or focus on different aspects before making the commitment of paint on canvas.

I was particularly curious about this idea of making studies or sketching things in order to experiment with different views or to focus on small parts before composing the whole, so I dug into that further.

2015-01-05 Why studies for drawing or writing thoughts -- index card
2015.01.05 Why studies for drawing or writing thoughts – index card

The limits I want to address are:

  • When I start with a large sheet, I sometimes peter out halfway through because I’ve dug to the bottom of that idea (at least for now, with the tools and time I have).
  • If I work with large sheets, it’s not as easy to keep all the relevant ones in view at the same time. I need to summarize more frequently.
  • I often zig-zag between topics, leaving sheets unfinished. Half-sheets are awkward to post.

2015-01-05 Quick idea studies -- index card
2015.01.05 Quick idea studies – index card

Using index cards for “studies” of an idea might be a useful technique. Each card is a small chunk, quick to capture, complete in itself, and yet linkable with others. The cards are easier to rearrange. If each card represents one idea or summary, I can keep more ideas in view.

There are trade-offs, naturally. Sometimes the desire to fill a large sheet makes me to sit with a question longer, letting me discover more. Large sheets gives me the ability to draw and describe relationships between ideas. If I have many small chunks, I need to invest more time in summarizing and filing in order to make the most of them.

2015-01-05 Managing my idea pipeline -- index card
2015.01.05 Managing my idea pipeline – index card

Artists might make studies in preparation for a specific work, or they might make studies just because. If I have a specific question in mind, it’s easy to sketch my way around the topic and then organize those thoughts into a whole. I’m not as good at managing fragments over an extended period of time, although I’m getting better at linking to and building on previous blog posts.

What can I learn from the way artists keep working on something? Artists might work on a piece for weeks or more, keeping it visible on an easel, taking a step back from time to time, looking at it in different light. They might have several such pieces on the go. I still prefer publishing early instead of waiting until something is a masterpiece. Feedback is great, and even small chunks can be surprisingly useful.

If I improve the way I manage my studies, though, I might get better at refining ideas. I think it’s like the way an artists might clip photos or sketch things that have caught their eyes, and then return to that inspiration years later when they think of something that needs it.

Speaking of archives: I’ve written about index cards before as a way to develop thoughts (2014; much like this post), plan my life (2007), and prevent boredom by writing (2005!). I haven’t quite mastered this yet, but I’m getting somewhere. What can I add to this based on this reflection on artists?

I don’t do enough zoomed-in focus or variations on a theme yet, I think. Studies aren’t just about capturing the gist of a thing so that you can reproduce it later in your studio. They let you minutely observe a specific aspect, and they let you experiment with different ways to portray something.

What would that look like, if I could do it really well? For observation, I might have index cards that focus on sub-topics, like the way I’ve built up this post from the sub-questions in the illustrations. For variety, I might experiment with visual vocabulary and metaphors, improving my creative expression.

There’s also something to be said about sheer practice in exploring thoughts, like the way artists might sketch for sketching’s sake. James Altucher recommends coming up with ten ideas a day (also related: his post from 2012). I’ve been experimenting with setting myself a minimum of five index cards a day. I write the dates for all of them before I start on the first one so that the desire to fill in the blanks pushes me to complete all of them. This usually leads to even more cards as the first set of ideas sparks more questions.

Actually, the challenge isn’t generating ideas. Artists never run out of things to sketch – they can look around and find more! I have an archive of ideas I haven’t exhausted and a cornucopia that generates more every day.

2015-01-05 Thinking about my archive -- index card
2015.01.05 Thinking about my archive – index card

This leads me back to skills that I think might be good to borrow from the art world and adapt to what I want:

  • Observing what’s in front of me – really seeing it, capturing it better, evoking its essence
  • Looking at something from different angles, and developing opinions about the alternatives I can pick – like the way artists learn about composition and light
  • Retrieving subsets of my archive – like the way artists might pull out the relevant studies or reference photos when they’re working on a piece
  • Comprehending the whole – the way people can step back and talk about impressionism, Picasso’s Blue Period, and other things that require zooming out

What would masters of this be like, and how can I emulate them? I think of Leonardo da Vinci’s studies, asking and observing. I think of writers who name and describe things, and in so doing, they help me see better – the way the light behind an object separates it from the background. I may never draw or write a thousandth as well as they do, but I can grow through emulating the way they slow down and pay attention, the way they turn things over and over instead of rushing on.

Monthly review: January 2015

February 2, 2015 - Categories: monthly, review

2015-02-01 January 2015 -- index card #monthly #review
2015-02-01 January 2015 – index card #monthly #review

Last month, I wrote that in January, I planned to:

  • Set up a rhythm of monthly Emacs hangouts and Emacs chats: Scheduled a few more
  • Shift my finances around a bit so that I’m more relaxed: Refilled, yay!
  • Sort out some small snags with consulting: Smoothed out
  • Get the exercise ladder habit going again: Associating microwaving with exercising is a small start.
  • Make little improvements around the house, so it doesn’t end up waiting for vacations: W- has been doing most of this, so I’ve been focusing on cooking instead.

It was a good month for thinking about questions and goals. Eric’s update on his Quest of Awesome at the Quantified Self Toronto meetup inspired me to list accomplishments, goals, and questions, and I’m gradually making sense of those things.

I’ve been relaxing my self-imposed one-post-a-day limit, since there’s so much I want to write about and I’ve built up quite a backlog. I need to think about how to keep this manageable. Sometimes I really like having posts scheduled but not posted, since that allows me to update them when I find little bugs in the code or opportunities to improve. On the other hand, there’s something to be said about faster feedback cycles. Hmm.

At work, I’ve learned a lot about using Tableau for recursive queries, dashboard actions, and filters. Level up! Speaking of data and analytics, my self-tracking got mentioned in the Toronto Star.

Focusing on Emacs microhabits has been paying off nicely. I’m still not as fluent as I’d like to be in terms of abbreviations and window-switching, but I’m better at them than before. I’ll continue working on those habits in February, and maybe I’ll delve into Helm too. I’ve also been writing little Node and Emacs Lisp scripts to automate parts of my workflow, which makes me happy.

In February, I’m looking forward to:

  • Preparing for some projects
  • Hosting another Emacs Hangout
  • Learning more about Helm (in Emacs)

I’m experimenting with a combined outline that includes my blog posts and sketches so that things are logically grouped. Since I have lots of sketches, I’ve skipped the ones that have already been included in blog posts. Sketches are the ones that start with the date, and blog posts have regular titles. Might be useful, might be noisy, but I won’t know until I try. =) Here’s what I wrote and drew this month:

Meta-post: Revising my post on emptying one’s cup

February 3, 2015 - Categories: writing

I’d been thinking about my blog post on “Getting started with Emacs? Empty your cup. There was something that didn’t quite feel right about the original draft.
flickr
2015-01-16 Tempering advice to Emacs beginners -- index card #emacs #beginner #teaching

2015-01-16 Tempering advice to Emacs beginners – index card #emacs #beginner #teaching

Since I’m also getting used to asking for help, I asked folks on Twitter to help me figure this out. @wobher suggested splitting it up into two approaches: diving in at the deep end, and wading in gradually. In an e-mail, Mike Hall suggested simplifying the post, sketching out what the post was trying to do and how that might be spread over several chunks.

Reflecting on the post some more, I realized that not only was Mike right that the post trying to do too much, but I also felt weird about the tone of the post. It didn’t feel… sympathetic enough. I’d written it in response to someone’s frustrated e-mail. But if I imagined myself in the same situation – annoyed with Emacs, tempted to switch back to a tool that I was more used to – I didn’t feel like that post would help me either learn Emacs or feel better. In fact, it would probably feel worse. “You need to empty your cup” almost feels like “You’re learning this the wrong way,” and attacks put people on the defensive.

Part of this challenge, I think, is that I’m more used to encouraging people who respond like I do. When I’m faced with something I have a hard time figuring out, I tend to blame myself, and so I look for ways to get better. When I meet people who struggle with learning Emacs and who might be tempted to translate that into an “I’m just not good enough to learn this,” I share what works for me: breaking it down into small chunks and learning those, building both skill and confidence at the same time. My cup is not full at the beginning, but I sometimes worry about it being too small.

2015-01-18 Digging into my thoughts about emptying one's cup -- #emacs #writing

2015-01-18 Digging into my thoughts about emptying one’s cup – #emacs #writing

I haven’t quite figured out how to deal with people’s frustration. I think there are times when Emacs is just not a good fit for someone, and that if they understand that, they might still be open to revisiting Emacs instead of writing it off entirely.

2015-01-12 When is Emacs a good fit -- index card #emacs #beginner

2015-01-12 When is Emacs a good fit – index card #emacs #beginner

But I know a little bit of that frustration with one’s slowness, so maybe that’s how I can connect. After all, I have the same flaws.

So I revised the post, cutting out the distracting parts and adding a little identification. The current draft feels a little better now: less like a distracted hamster trying to cram ideas into its pouches, less like a white-bearded sensei handing down wisdom from a remote mountain. I have a slightly better grasp on the weird feeling when a post is trying to do too much, and that other weird feeling when a post creates too much distance.

If you have more suggestions for improving that post (or any of these other posts), please share them. Your perspective can point out something in my blind spot or help me clarify what I really mean. There’s so much I have yet to learn about writing and sharing, and I hope you’ll help me with your feedback!

(By the way, can anyone recommend a service for sharing drafts and revisions publicly so that people can see previous revisions and word-level differences with arbitrary commits? Sometimes I use Github’s diff or git diff --color-words, but the matching isn’t always correct. I can’t figure out how to get Draftin.com to do this nicely. Maybe I’ll just have to get used to writing one sentence per line, like I’ve seen some Org Mode users do. Or maybe it’s time to use the one-Org-file-for-post pattern that other people do, so that’s easier to preview and diff…)

De-dupe and link: Using the Flickr API to neaten up my archive and link sketches to blog posts

February 4, 2015 - Categories: development, geek

I’ve been thinking about how to manage the relationships between my blog posts and my Flickr sketches. Here’s the flow of information:

2015-01-06 Figuring out information flow -- index card

2015.01.06 Figuring out information flow – index card

I scan my sketches or draw them on the computer, and then I upload these sketches to Flickr using photoSync, which synchronizes folders with albums. I include these sketches in my outlines and blog posts, and I update my index of blog posts every month. I recently added a tweak to make it possible for people to go from a blog post to its index entry, so it should be easier to see a post in context. I’ve been thinking about keeping an additional info index to manage blog posts and sketches, including unpublished ones. We’ll see how well that works. Lastly, I want to link my Flickr posts to my blog posts so that people can see the context of the sketch.

My higher goal is to be able to easily see the open ideas that I haven’t summarized or linked to yet. There’s no shortage of new ideas, but it might be interesting to revisit old ones that had a chance to simmer a bit. I wrote a little about this in Learning from artists: Making studies of ideas. Let me flesh out what I want this archive to be like.

2015-01-05 Thinking about my archive -- index card
2015.01.05 Thinking about my archive

When I pull on an idea, I’d like to be able to see other open topics attached to it. I also want to be able to see open topics that might jog my memory.

How about the technical details? How can I organize my data so that I can get what I want from it?

2015-01-05 Figuring out the technical details of this idea or visual archive I want -- index card
2015.01.05 Figuring out the technical details of this idea or visual archive I want – index card

Because blog posts link to sketches and other blog posts, I can model this as a directed graph. When I initially drew this, I thought I might be able to get away with an acyclic graph (no loops). However, since I habitually link to future posts (the time traveller’s problem!), I can’t make that simplifying assumption. In addition, a single item might be linked from multiple things, so it’s not a simple tree (and therefore I can’t use an outline). I’ll probably start by extracting all the link information from my blog posts and then figuring out some kind of Org Mode-based way to update the graph.

2015-01-07 Mapping the connections in my blog -- index card
2015.01.07 Mapping the connections in my blog – index card

To get one step closer to being able to see open thoughts and relationships, I decided that my sketches on Flickr:

  • should not have duplicates despite my past mess-ups, so that:
    • I can have an accurate count
    • it’s easier for me to categorize
    • people get less confused
  • should have hi-res versions if possible, despite the IFTTT recipe I tried that imported blog posts but unfortunately picked up the low-res thumbnails instead of the hi-res links
  • should link to the blog posts they’re mentioned in, so that:
    • people can read more details if they come across a sketch in a search
    • I can keep track of which sketches haven’t been blogged yet

I couldn’t escape doing a bit of manual cleaning up, but I knew I could automate most of the fiddly bits. I installed node-flickrapi and cheerio (for HTML parsing), and started playing.

Removing duplicates

Most of the duplicates had resulted from the Great Renaming, when I added tags in the form of #tag1 #tag2 etc. to selected filenames. It turns out that adding these tags en-masse using Emacs’ writable Dired mode broke photoSync’s ability to recognize the renamed files. As a result, I had files like this:

  • 2013-05-17 How I set up Autodesk Sketchbook Pro for sketchnoting.png
  • 2013-05-17 How I set up Autodesk Sketchbook Pro for sketchnoting #tech #autodesk-sketchbook-pro #drawing.png

This is neatly resolved by the following Javascript:

exports.trimTitle = function(str) {
    return str.replace(/ --.*$/g, '').replace(/#[^ ]+/g, '').replace(/[- _]/g, '');
};

and a comparison function that compared the titles and IDs of two photos:

exports.keepNewPhoto = function(oldPhoto, newPhoto) {
    if (newPhoto.title.length > oldPhoto.title.length)
        return true;
    if (newPhoto.title.length < oldPhoto.title.length)
        return false;
    if (newPhoto.id < oldPhoto.id) 
        return true;
    return false;
};

So then this code can process the photos:

exports.processPhoto = function(p, flickr) {
    var trimmed = exports.trimTitle(p.title);
    if (trimmed && hash[trimmed] && p.id != hash[trimmed].id) {
        // We keep the one with the longer title or the newer date
        if (exports.keepNewPhoto(hash[trimmed], p)) {
            exports.possiblyDeletePhoto(hash[trimmed], flickr);
            hash[trimmed] = p;
        }
        else if (p.id != hash[trimmed].id) {
            exports.possiblyDeletePhoto(p, flickr);
        }
    } else {
        hash[trimmed] = p;
    }
};

You can see the code on Gist: duplicate_checker.js.

High-resolution versions

I couldn’t easily automate this, but fortunately, the IFTTT script had only imported twenty images or so, clearly marked by a description that said: “via sacha chua :: living an awesome life…”. I searched for each image, deleting the low-res entry if a high-resolution image was already in the system and replacing the low-res entry if that was the only one there.

Linking to blog posts

This was the trickiest part, but also the most fun. I took advantage of the fact that WordPress transforms uploaded filenames in a mostly consistent way. I’d previously added a bulk view that displayed any number of blog posts with very little additional markup, and I modified the relevant code in my theme to make parsing easier.

See this on Gist:

/**
 * Adds "Blogged" links to Flickr for images that don't yet have "Blogged" in their description.
 * Command-line argument: URL to retrieve and parse
 */

var secret = require('./secret');
var flickrOptions = secret.flickrOptions;
var Flickr = require("flickrapi");
var fs = require('fs');
var request = require('request');
var cheerio = require('cheerio');
var imageData = {};
var $;

function setDescriptionsFromURL(url) {
  request(url, function(error, response, body) {
    // Parse the images
    $ = cheerio.load(body);
    $('article').each(function() {
      var prettyLink = $(this).find("h2 a").attr("href");
      if (!prettyLink.match(/weekly/i) && !prettyLink.match(/monthly/i)) {
        collectLinks($(this), prettyLink, imageData);
      }
    });
    updateFlickrPhotos();
  });
}

function updateFlickrPhotos() {
    Flickr.authenticate(flickrOptions, function(error, flickr) {
      flickr.photos.search(
        {user_id: flickrOptions.user_id,
         per_page: 500,
         extras: 'description',
         text: ' -blogged'}, function(err, result) {
           processPage(result, flickr);
           for (var i = 2 ; i < result.photos.pages; i++) {
             flickr.photos.search(
               {user_id: flickrOptions.user_id, per_page: 500, page: i,
                extras: 'description', text: ' -blogged'},
               function(err, result) {
                 processPage(err, result, flickr);
               });
           }
         });
    });
}

function collectLinks(article, prettyLink, imageData) {
  var results = [];
  article.find(".body a").each(function() {
    var link = $(this);
    if (link.attr('href')) {
      if (link.attr('href').match(/sachachua/)
          || !link.attr('href').match(/^http/)) {
        imageData[exports.trimTitle(link.attr('href'))] = prettyLink;
      } else if (link.attr('href').match(/flickr.com/)) {
        imageData[exports.trimTitle(link.text())] = prettyLink;
      }
    }
  });
  return results;
}

exports.trimTitle = function(str) {
  return str.replace(/^.*\//, '').replace(/^wpid-/g, '').replace(/[^A-Za-z0-9]/g, '').replace(/png$/, '').replace(/[0-9]$/, '');
};

function processPage(result, flickr) {
  if (!result) return;
  for (var i = 0; i < result.photos.photo.length; i++) {
    var p = result.photos.photo[i];
    var trimmed = exports.trimTitle(p.title);
    var noTags = trimmed.replace(/#.*/g, '');
    var withTags = trimmed.replace(/#/g, '');
    var found = imageData[noTags] || imageData[withTags];
    if (found) {
      var description = p.description._content;
      if (description.match(found)) continue;
      if (description) {
        description += " - ";
      }
      description += '<a href="' + found + '">Blogged</a>';
      console.log("Updating " + p.title + " with " + description);
      flickr.photos.setMeta(
        {photo_id: p.id,
         description: description},
        function(err, res) {
          if (err) { console.log(err, res); }
        } );
    }
  }
}

setDescriptionsFromURL(process.argv[2]);

And now sketches like 2013-11-11 How to think about a book while reading it are now properly linked to their blog posts. Yay! Again, this script won’t get everything, but it gets a decent number automatically sorted out.

Next steps:

  • Run the image extraction and set description scripts monthly as part of my indexing process
  • Check my list of blogged images to see if they’re matched up with Flickr sketches, so that I can identify images mysteriously missing from my sketchbook archive or not correctly linked

Yay code!

Clear out your drafts by scheduling Minimum Viable Posts

February 5, 2015 - Categories: blogging, writing

Do you have dozens of drafts languishing on your blog or on your computer?

I sometimes hear from other bloggers who say they just don’t think their posts are good enough. Maybe they’ve written a few paragraphs before fizzling out. Maybe they’ve already written a full post, but it’s missing… something.

Are you holding off because you’re a perfectionist? Although research shows that perfectionists actually procrastinate less than other people do, since blogs don’t have deadlines, it’s easy to dilly-dally. You can always make something better.

Me, I am definitely not a perfectionist. I’m generally happy if I get 80% of the way to where I want to go. But I know what it’s like to hold a post back because I’m not sure if I’m expressing myself clearly enough. As I write this, there are nineteen drafts in my WordPress interface and countless more on my computer. The oldest draft I have in WordPress is from February 2014. Come to think of it, the time for that topic has passed. Eighteen drafts now.

Do you want to know something that works better than drafting posts?

Scheduling them.

In Lean Startup, there’s this idea of a “Minimum Viable Product” – the smallest thing you can build so that you can test your business assumptions and get feedback from real customers. You can use this in writing, too.

Instead of finely crafting and endlessly polishing each blog post, I write a blog post that I’m reasonably–not completely, just reasonably–happy with. I schedule it a few weeks out. You can do that from the WordPress edit screen – click on Edit near Publish immediately and change it to the date you want. It’s even easier with the Editorial Calendar plugin, which lets you spread posts over weeks.

So then I have this imperfect post that will be published even if I forget about it. My mind keeps working on it in the meantime. (Now that I’ve learned about the Zeigarnik effect, I see it everywhere.) Sometimes I come up with a thought I’d like to add. I might share a scheduled post using the Share a Draft plugin. Maybe I’ll re-read the post and find a typo to fix or a gap to fill.

And hey, even if it isn’t the height of perfection when it finally gets published, at least it’s out there. Then people can tell me what they found interesting or ask questions about what they didn’t understand.

2015-01-10 Writing into the future -- index card #writing #blogging

2015-01-10 The idea of the Minimum Viable Post -- index card #writing #blogging

You don’t get that feedback if your thoughts are stuck in your drafts.

But what if you make a mistake? Edit your post. Even if you’ve already published it, you can still edit it. (Many people add the date and a description of what they changed.)

What if you turned out to be completely wrong about something? At least you learned you were wrong.

What if you skipped over some things that you could have explained? Let someone ask questions and pull that information from you.

Write (and schedule!) minimum viable posts: the simplest, roughest cut of your ideas that will move you towards learning. You can treat the schedule as your new deadline for improving the post.

Resist the temptation to reschedule posts again and again. If the deadline is here and you still can’t quite settle on your post, publish it as is. Then listen to your dissatisfaction for clues to how you can improve the next post.

Get stuff out there. Good luck!

p.s. Right after I scheduled this post with the title “Clear out your drafts by writing Minimum Viable Posts,” I realized it made more sense to title it “Clear out your drafts by scheduling Minimum Viable Posts.” So I changed it. See? We can harness the power of that inner “Wait just a minute here!” =)

The 5-year experiment: A conversation with my anxious side, and how sharing time might be better than giving money

February 6, 2015 - Categories: delegation, experiment

(If you want, you can skip past the reflection on anxiety and safety and jump straight to the part on how you can help. =) )

Having resolved to learn how to work on my own things, I’m experimenting with reducing my consulting to one day a week (from last year’s routine of two days a week). I spend most of the week reading, drawing, writing, experimenting, and coding.

2015-01-09 What do I do on my non-consulting days -- index card

2015.01.09 What do I do on my non-consulting days – index card

It’s not a big change in terms of hours. I already have plenty of time for personal projects. But I feel the shift in the balance. I can hear that inner self-doubt saying, “Is this real work? Is it worthwhile? Is it sustainable? Are you undermining your safety by goofing off?”

2015-01-07 Real Work -- index card

2015.01.07 Real Work – index card

It’s okay. I expected this resistance, this anxiety. It’s just one of those mental barriers I have to break. Fortunately, all those Stoic philosophers are there to remind me that it’s just a negative impression, not reality, and the truth is that I have nothing to fear.

I’m getting better at telling that anxious part of my mind: “Look. Even though I offer all those resources for free, people willingly pay for it. And other people write wonderful comments and send me e-mail telling me that I’ve inspired them to learn more and that they want to help, so that counts too. Yeah, there’s a chance I might need to go back to Regular Work if the stock market crashes or a catastrophe happens, but in the meantime, just give this a chance. And really, that scenario isn’t the end of the world. Other people do okay. I can too. Besides, that’s why we have safety nets, right?”

2015-01-06 Planning my safety nets -- index card

2015.01.06 Planning my safety nets – index card

2015-01-06 Safe, a little better, comfortable -- index card

2015.01.06 Safe, a little better, comfortable – index card

And then my anxious side goes, “Okay, you’ve probably got the basics covered. But what if your expenses grow, or W- gets tired of living frugally and wants to upgrade lifestyles a little bit? Is this really enough?”

2015-01-06 Is this enough for me -- index card

2015.01.06 Is this enough for me – index card

And then I say, “We’ll probably have some time to adjust our plans for that, and I can always go back to doing Real Work that satisfies you. Besides, if we want to upgrade our life experiences, learning the skills to make stuff for ourselves often works out better than buying things. Like cooking!”

(It’s true! It’s even called the IKEA effect.)

Then my anxious side goes, “Fine. Maybe you have enough space to experiment right now. You want to learn things and help people. But look at your blog! It’s so self-centred. You talk about your questions and reflections, and you rarely give people tips they can directly apply to their lives.”

Then I say, “I’ll get better at writing for other people. In the meantime, this seems to be working okay so far. People translate my reflections into stuff that they can use.”

Here’s how I think my blog helps other people at the moment. Maybe you come across my blog because of a search. You find something that saves you a little time. You browse around a little and learn about things you didn’t even think about searching for. Maybe you come back once in a while for more of those ideas. You bump into other topics you’re curious about, and you explore. You might subscribe, even though you know I post practically every day. You skim the headlines for things that interest you, and you dive into stuff you like. Sometimes you might even feel moved to comment, e-mail, invest time, or even send some money.

2015-01-04 What kind of difference do I want to make, and for whom - index card

2015.01.04 What kind of difference do I want to make, and for whom – index card

How people can help

My anxious side grumbles, “Okay. I’m not sure your blog counts as Real Work, but I’ll grant that people seem to find some value in it. I’d feel better if you were more serious about building a business around it – if you could cover more of your expenses with this instead of consulting income or dividends.”

To which I say, “You know, I’m not sure any amount of money would get you to the point of not worrying. Besides, it’s good that you worry, because that helps keep us safe. This stream will grow as I figure out how to make things that are truly valuable to people. I bet you I can pull it off while still keeping the free/pay-what-you-want aspect, because that’s important to me. Given that you tend to squirrel away additional money to build up safety instead of getting better at investing it to build up capabilities, what we really should be thinking about is if we can make better exchanges of time instead of money. That will probably make a bigger difference anyway.”

My anxious side is sufficiently boggled by that idea and can’t come up with a good rejoinder. This is promising. Let me dig into it further, then.

One of the concepts I picked up from Your Money or Your Life (Dominguez and Robin, 1999) is that you can think of money in terms of the time it took you to earn it, a sobering thought when you apply it to your expenses.

I can apply that idea to other people, too; if other people pay money for something I made, it represents the chunk of their life that they spent earning it (and the opportunity cost of anything else they could’ve bought or invested in, including saving up for their own freedom).

I’m frugal (bordering on being a cheapskate), having gotten very good at making the most of inexpensive resources. Because of the typical mind fallacy, I tend to think that other people should be frugal as well so that they can save up for their own freedom. I suspect that people might get marginally more value from saving that money than I would get from them giving it to me, since their stress reduction or freedom expansion will likely outweigh my slightly increased feeling of safety. On the other hand, people do get value from feeling generous and from patronizing something that they would like to see flourish, so I can agree with that.

If we translate it back to time, though, I’m more comfortable with the exchange.

I already have enough time for the priorities in my life, while many people feel that they don’t have enough time for the priorities in theirs. Adding more money to my life doesn’t easily translate into additional or more effective time (aside from transcripts and tools, which I already budget for), while translating that money back into time might make more of a difference in other people’s lives. So a direct swap doesn’t make sense.

However, if we can exchange time in an apples-and-oranges sort of way, that might make sense. That is, if someone gives me 15 minutes of their time that translates to much more than 15 minutes of my time or might even be something I could not do on my own, that would be fantastic. This could be something that takes advantage of someone’s:

  • experience or particular mix of interests
  • ideas, knowledge
  • perspective (writing, coding, and all sorts of things can be improved with the perspective of someone who is not me)
  • questions
  • connections

Technically, delegation is supposed to help me translate money into time that is qualitatively different from my time, but my anxious side has not been very good at evaluating, trusting, or making the most of learning from people who know different things than I do.

Figuring out a way to effectively receive other people’s gifts of time might be what I need to break through this barrier.

2015-01-04 Thinking in terms of an exchange of time - index card

2015.01.04 Thinking in terms of an exchange of time – index card

In fact, receiving time might be more effective than receiving money. Not only could that get around my difficulty with finding and paying other people for the qualitatively different time that I want, but if we structure it right, people will gain from the time that they give. If someone asks me a good question that prompts me to learn, reflect on, or share something, we both gain. If they invest more time into experimenting with the ideas, we gain even more. I can’t actually buy that on any of the freelancing or outsourcing marketplaces. There’s no way for me to convert money into that kind of experience.

So, how can people can give me 15 minutes of time in a way that helps them and helps me? Let me think about different things I’m learning about:

2015-01-09 Time is greater than money -- index card

2015.01.09 Time is greater than money – index card

2015-01-09 What am I learning more about, and how can people help -- index card

2015.01.09 What am I learning more about, and how can people help – index card

It makes sense to organize this by interest instead of by action.

  • Emacs: Ask a question, pass along a tip, share a workflow. Also, I really appreciate people showing up at Emacs Hangouts or being on Emacs Chats, because my anxious side is always firmly convinced that this will be the day when no one else shows up to a party or that conversation will be super-awkward.
  • Coding in general: There are so many ways I want to improve in order to become a better programmer. I should set up continuous integration, write more tests, refactor my code, learn more frameworks and learn them more deeply, write more idiomatic code, improve performance and security, get better at designing… I find it difficult to pay someone to give me feedback and coach me through setting things up well (hard to evaluate people, anxious side balks at the price and argues we can figure things out on our own, good programmers have high rates), but this might be something we can swap. Or I could work on overriding my anxious side and just Go For It, because good habits and infrastructure pay off.
  • Writing: Comments, questions, and links help a lot. A few of my posts have really benefited from people’s feedback on the content and the structure of ideas, and I’d love to learn from more conversations like that. I don’t worry a lot about typos or minor tweaks, so the kind of editing feedback I can easily get from freelancers doesn’t satisfy me. I want to get better at writing for other people and organizing more complex thoughts into resources, so I could benefit a lot from feedback, questions, as well as advice on what to learn and in what order.
  • Drawing: I’m not focused on drawing better (I can probably get away with stick figures for what I want to do!), but rather on being able to think more interesting thoughts. What would help with this? Hearing from people about which thoughts spark ideas in them, which ones I should flesh out further. Book recommendations and shared experiences would help too.

So: Paying for free/pay-what-you-want-resources is great at helping me tell my anxious side, “Look, people find this valuable,” and that’s much appreciated. But giving me time works too. If we can figure out how to do this well, that might be able to help me grow more (at least until I sort out a way to talk my anxious side into letting me invest more in capabilities). Shifting the balance towards time is probably going to make my anxious side more anxious, but I might be able to tell it to give me a year or two to experiment, which is coincidentally the rest of this 5-year span.

Wild success might look like:

  • Thanks to people’s gifts of time and attention, I’m learning and doing stuff that I couldn’t do on my own or with the resources I could get in marketplaces
  • Thanks to people’s gifts of money (and maybe teaching), I’ve addressed more of my anxious side’s concerns and am getting better at experimenting with the resources I can get in marketplaces
  • I can incorporate people’s feedback and revealed preferences in my prioritization so that I work on things that other people find valuable

I could use your help with this. =) Shall we figure it out together?

Digital index piles with Emacs: Rapid categorization of Org Mode items

February 6, 2015 - Categories: emacs, org

Somewhat daunted by the prospect of categorizing more than a hundred sketches and blog posts for my monthly review, I spent some time figuring out how to create the digital equivalent of sorting index cards into various piles.

2015-02-01 Digital piles of index card -- index card #indexing #organization #pkm

2015-02-01 Digital piles of index cards – index card #indexing #organization #pkm

In fact, wouldn’t it be super-cool if the items could automatically guess which category they should probably go in, prompting me only if it wasn’t clear?

I wanted to write a function that could take a list structured like this:

  • Keyword A
    • Previous links
  • Keyword B
    • Previous links
  • Link 1 with Keyword A
  • Link 2 with Keyword B
  • Link 3 with Keyword A
  • Link 4

It should file Link 1 and 3 under Keyword A, Link 2 under Keyword B, and prompt me for the category for Link 4. At that prompt, I should be able to select Keyword A or Keyword B, or specify a new category.

Inspired by John Kitchin’s recent post on defining a Helm source, I wanted to get it to work with Helm.

First step: I needed to figure out the structure of the list, maybe including a sample from the category to make it clearer what’s included. org-list.el seemed to have useful functions for this. org-list-struct gave me the structure of the current list. Let’s say that a category is anything whose text does not match org-bracket-link-regexp.

(defun sacha/org-get-list-categories ()
  "Return a list of (category indent matching-regexp sample).
List categories are items that don't contain links."
  (let ((list (org-list-struct)) last-category results)
    (save-excursion
      (mapc
       (lambda (x)
         (goto-char (car x))
         (let ((current-item
                (buffer-substring-no-properties
                 (+ (point)
                    (elt x 1)
                    (length (elt x 2)))
                 (line-end-position))))
           (if (string-match
                org-bracket-link-regexp
                (buffer-substring-no-properties
                 (point)
                 (line-end-position)))
               ;; Link - update the last category
               (when last-category
                 (if (< (elt x 1) (elt last-category 1))
                     (setq results
                           (cons (append last-category
                                         (list
                                          (match-string-no-properties
                                           3
                                           (buffer-substring-no-properties
                                            (point)
                                            (line-end-position)))))
                                 (cdr results))))
                 (setq last-category nil))
             ;; Category
             (setq results
                     (cons
                      (setq last-category
                            (list
                             current-item
                             (elt x 1)
                             (concat "^"
                                     (make-string (elt x 1) ?\ )
                                     (regexp-quote
                                      (concat (elt x 2)
                                              current-item))
                                     "$")))
                      results)))))
       list))
    results))

The next step was to write a function that guessed the list category based on the item text, and moved the item there.

(defvar sacha/helm-org-list-candidates nil)
(defun sacha/helm-org-list-categories-init-candidates ()
  "Return a list of categories from this list in a form ready for Helm."
  (setq sacha/helm-org-list-candidates
        (mapcar (lambda (x)
                  (cons (if (elt x 3)
                            (format "%s - %s" (car x) (elt x 3))
                          (car x))
                        x))
                (sacha/org-get-list-categories))))

(defun sacha/org-move-current-item-to-category (category)
  (when category
    (let* ((beg (line-beginning-position))
           (end (line-end-position))
           (string (buffer-substring-no-properties beg end)))
      (save-excursion
        (when (re-search-backward (elt category 2) nil t)
          (delete-region beg (min (1+ end) (point-max)))
          (forward-line 1)
          (insert (make-string (+ 2 (elt category 1)) ?\ )
                  string "\n")))) t))

(defun sacha/org-guess-list-category (&optional categories)
  (interactive)
  (require 'cl-lib)
  (unless categories
    (setq categories
          (sacha/helm-org-list-categories-init-candidates)))
  (let* ((beg (line-beginning-position))
         (end (line-end-position))
         (string (buffer-substring-no-properties beg end))
         (found
          (cl-member string
                     categories
                     :test
                     (lambda (string cat-entry)
                       (string-match (regexp-quote (downcase (car cat-entry)))
                                     string)))))
    (when (car found)
      (sacha/org-move-current-item-to-category
       (cdr (car found)))
      t)))

After that, I wrote a function that used Helm to prompt me for a category in case it couldn’t guess the category. It took me a while to figure out that I needed to use :init instead of :candidates because I wanted to read information from the buffer before Helm kicked in.

(setq sacha/helm-org-list-category-source
      (helm-build-sync-source
          "Non-link categories in the current list"
        :init 'sacha/helm-org-list-categories-init-candidates
        :candidates 'sacha/helm-org-list-candidates
        :action 'sacha/org-move-current-item-to-category
        :fuzzy-match t))

(defun sacha/org-guess-uncategorized ()
  (interactive)
  (sacha/helm-org-list-categories-init-candidates)
  (let (done)
    (while (not done)
      (save-excursion
        (unless (sacha/org-guess-list-category sacha/helm-org-list-candidates)
          (unless
              (helm :sources
                    '(sacha/helm-org-list-category-source
                      sacha/helm-org-list-category-create-source))
            (setq done t))))
      (unless done
        (setq done (not (looking-at "^[-+] \\[")))))))

The :action above refers to this function, which creates a category if it doesn’t exist yet.

(setq sacha/helm-org-list-category-create-source
      (helm-build-dummy-source
          "Create category"
        :action (helm-make-actions
                 "Create category"
                 (lambda (candidate)
                   (save-excursion
                     (let* ((beg (line-beginning-position))
                            (end (line-end-position))
                            (string (buffer-substring beg end)))
                       (delete-region beg (min (1+ end) (point-max)))
                       (org-beginning-of-item-list)
                       (insert "- " candidate "\n  " string "\n")))
                   (sacha/helm-org-list-categories-init-candidates)))))

I’m new to fiddling with Helm, so this implementation is not the best it could be. But it’s nifty and it works the way I want it to, hooray! Now I can generate a list of blog posts and unblogged sketches, categorize them quickly, and then tweak the categorizations afterwards.

2015-02-01 Index card sketches and monthly reviews -- index card #organization #pkm #indexing

2015-02-01 Index card sketches and monthly reviews – index card #organization #pkm #indexing

You can see the results in my January 2015 review, or check my config to see if the code has changed.

My next step for learning more about Helm sources is probably to write a Helm command that creates a montage of selected images. John Kitchin has a post about handling multiple selection in Helm, so I just need to combine that with my code for using Imagemagick to create a montage of images. Whee!

Japanese curry at Hacklab, curry udon at home

February 7, 2015 - Categories: cooking

We were planning to make roasted cauliflower for the Hacklab open house dinner, but the cauliflowers were CAD 4.50+ each. Instead, we made vegan Japanese curry (roux recipe), which has become one of my favourite recipes. It’s a great way to cook carrots, potatoes, green beans, daikon, bell peppers, broccoli, mushrooms, peas, and other vegetables you might have.

At home, I made another huge pot of Japanese curry, but with chicken instead of tofu, and with a non-vegan roux recipe. We tried it with udon instead of rice. Udon gives it a chewier texture and it works well too. I also made quickly-pickled cucumber-daikon-carrot salad, which balanced the taste nicely. Not counting the rice, I think the cost per portion worked out to be around $1. (Wow!)

2015-01-24 Curry udon -- index card #cooking

2015-01-24 Curry udon – index card #cooking

J- loves Japanese food, so it’s great to be able to make things at home. Next time, I think I’ll try making udon from flour, water, and salt. It doesn’t require a pasta roller, just patience. On the other hand, frozen udon is around CAD 4 for a pack of five and it takes one minute to cook, so there’s something to be said for that.

2015-01-25 Planning how to level up in cooking -- index card #cooking #learning #plans

2015-01-25 Planning how to level up in cooking – index card #cooking #learning #plans

While I occasionally play with the idea of going on a cooking vacation so that I can try local markets and learn from cooking classes, there’s so much that I haven’t yet explored here. There are all these ingredients I haven’t yet looked up and tried. (Thank goodness for such a diverse city!) Maybe someday I might even try out cooking lessons or private instruction.

For now, I’m focusing on cooking with more vegetables. I liked the balance of meat to vegetables in that curry we made – about three chicken thighs of meat in one of our biggest pots. It would be great to increase vegetable volume and variety. Looking forward to exploring the rest of the produce section.

I also want to remember to cook different things. I have an Org Mode file with recipes, but I haven’t set up scheduled reminders or Org habits for them yet. In the meantime, I’ve put these index cards on our fridge door to remind me when I’m planning groceries:

2015-01-10 Favourite meals -- index card #cooking

2015.01.10 Favourite meals – index card #cooking

2015-01-11 Snacks we can make -- index card #cooking

2015.01.11 Snacks we can make – index card #cooking

Weekly review: Week ending February 6, 2015

February 8, 2015 - Categories: review, weekly

This week, I experimented with treating consulting as a dessert to encourage me to make decent progress on my personal projects. Mixed results. I learned a lot about continuous integration and code coverage reporting in Emacs (yay!), created my own Helm sources, and improved my index card workflow, but the setup made it easy to give in to the temptation of working on other people’s stuff instead of sitting with my own resistance. Still, I did a good job with those consulting hours, building a couple of interesting prototypes and reports.

My digital workflow for drawing and filing index cards is getting better and better, though. =) I used the Emacs widget library for the first time, and I can’t wait to build more of these little interfaces to make my life easier. Whee!

Didn’t cook last weekend because the fridge had lots of leftovers, so pickings were a little slim this week (what with the snowstorm, too). Looking forward to getting back to a regular routine of cooking this week, maybe even doing bulgogi with a bunch of side dishes. =)

2015-02-07 Week ending 2015-02-06 -- index card #weekly

2015-02-07 Week ending 2015-02-06 – index card #weekly

Blog posts

Sketches

  1. 2015.01.31 Clearing my fabric stash – index card #tidying #decluttering
  2. 2015.01.31 Digital index card trade-offs – index card #drawing
  3. 2015.01.31 Most of my questions are ‘How can I…’ – index card #learning #question
  4. 2015.01.31 What’s worth remembering – index card #memory
  5. 2015.01.31 When I don’t really like talking, and what I might be able to do about it – index card #connecting #introvert
  6. 2015.02.01 Accelerating my learning – index card #learning #accelerating
  7. 2015.02.01 Accelerating the Emacs community – index card #accelerating #emacs
  8. 2015.02.01 Digital piles of index cards – index card #indexing #organization #pkm
  9. 2015.02.01 Index card sketches and monthly reviews – index card #organization #pkm #indexing
  10. 2015.02.01 January 2015 – index card #monthly #review
  11. 2015.02.02 Core areas – index card #life #priorities #values #goals
  12. 2015.02.02 Imagining an Emacs conference – index card #emacs #conference #plans #organizing-people
  13. 2015.02.02 Making a virtual Emacs conference happen – index card #emacs #organizing-people #conference #planning #questions
  14. 2015.02.02 Plain text – index card #data #organization #pkm #org
  15. 2015.02.02 What if I use the lure of work to help me grow – index card #consulting #experiment
  16. 2015.02.03 Benefits of sharing my index cards – index card #sharing #drawing
  17. 2015.02.03 Better Emacs Testing – index card #testing #emacs
  18. 2015.02.03 Delegation and dreaming small dreams – index card #delegation
  19. 2015.02.03 Getting better at imagining – index card #planning
  20. 2015.02.03 Scooped – index card #writing #sharing
  21. 2015.02.03 Tree view, forest view – index card #org #pkm #tasks
  22. 2015.02.03 What kinds of personal knowledge do I want to manage – index card #pkm
  23. 2015.02.03 Why map what you’re learning – index card #mapping #learning
  24. 2015.02.04 Digital index cards are working well – index card #drawing #digital
  25. 2015.02.04 Improving my Org clocking workflow – index card #org
  26. 2015.02.04 Shrinking my Learn-Do-Share cycle – index card #sharing #learning
  27. 2015.02.04 Yay, passport – index card #canada #travel #paperwork
  28. 2015.02.04 Yay, testing in Emacs – index card #testing #emacs
  29. 2015.02.05 Biscotti – index card #cooking #baking
  30. 2015.02.05 How can I make Thursdays more like other days – index card #experiment
  31. 2015.02.05 How can I organize my questions – and why – index card #questions #organization #pkm
  32. 2015.02.05 How can non-profits regularly reach out to people over social media – index card #social #social-media #connecting
  33. 2015.02.05 If consulting is dessert, what are my vegetables – index card #consulting #experiment #balance
  34. 2015.02.06 How can I brainstorm and organize questions in order to speed up my writing and drawing – index card #thinking #questions #pkm #acceleration
  35. 2015.02.06 How can I more regularly add entries to my private journal – index card #drawing #habit #journal
  36. 2015.02.06 What activities would I like to share with friends – index card #connecting #friends
  37. 2015.02.06 What if I made myself take someone out to lunch or coffee every month – index card #connecting #friends
  38. 2015.02.06 What kind of coaching do I like to give – index card #coaching #teaching
  39. 2015.02.06 What would my ideal question-thinking workflow be like – index card #learning #questions #thinking

Link round-up

Focus areas and time review

  • Business (42.1h – 25%)
    • Earn (20.3h – 48% of Business)
      • Prepare invoice
      • Work on reports
      • Earn: E1: 1-2 days of consulting
    • Build (20.6h – 48% of Business)
      • Drawing (11.1h)
      • Delegation (0.0h)
      • Packaging (2.4h)
      • Paperwork (0.3h)
        • File payroll return
      • Flesh out plan
      • Change my set-descriptions.js to be able to use any blog URLs (archive page, future post, etc.)
      • Pass theme check required changes
      • Set up coveralls for Quantified Awesome
    • Connect (1.1h – 2% of Business)
  • Relationships (5.9h – 3%)
  • Discretionary – Productive (23.8h – 14%)
    • Emacs (14.6h – 8% of all)
      • Get travis going
      • Learn about Emacs testing
      • Fix my config after some weird error
      • Get Cask working
      • Set up Coveralls
      • Add a test to f.el
      • Get Travis emacs23 back on
      • Write tests for one of Steve Purcell’s packages
      • Write tests for one of abo-abo’s packages
      • Set up shortcuts for jumping with refile
      • Think about unconference infrastructure for Emacs
      • Help Sean
      • Measure performance of init
      • Finish Avdi’s transcript
      • Check on @mattl’s upcoming visit to Toronto
    • Organize questions
    • Identify index-card-sized questions
    • Consider skill tree
    • Read chapter 3
    • Writing (8.3h)
      • Start git directory for big drafts
  • Discretionary – Play (1.9h – 1%)
  • Personal routines (23.8h – 14%)
  • Unpaid work (9.2h – 5%)
  • Sleep (61.4h – 37% – average of 8.8 per day)

Let’s have a virtual Emacs conference in August – help me make it happen!

February 9, 2015 - Categories: conference, connecting, emacs

Why August? It’s an arbitrary target, although it tickles my brain to think about celebrating my 32nd birthday with awesome people sharing awesome ideas. (Incidentally, I’ll also reach the point of having been using Emacs for about half my life – doubly neat!)

Anyway. I think it would be great to have some kind of knowledge-swapping thing. Since I’m not particularly keen on travelling, not everyone can make it out to Canada, and it’s hard to make awesome in-person conference recordings anyway, maybe a virtual conference would be a great bet. I’m willing to spend what I would have paid for airfare on things like organization, speaker honoraria, and other good things.

I enjoyed the Emacs Conference in 2013, and I think we should figure out how to have these kinds of get-togethers more often. Emacs Chats and Emacs Hangouts are tiny steps in that direction, and I’d appreciate help in making this and many other community-ish things even better. =)

2015-02-02 Imagining an Emacs conference -- index card #emacs #conference #plans #organizing-people

2015-02-02 Imagining an Emacs conference – index card #emacs #conference #plans #organizing-people

So here’s what I imagine a virtual Emacs conference might be like. People volunteer, and somehow we organize a schedule of fascinating talks. This could be a full day, or maybe we’d spread it out over a couple of half-days (maybe even scheduled for different timezones so that everyone has something they can interact with life). We use Google Hangout on Air or a similar platform that can stream and automatically record. There’s the speaker with slides and screensharing, and there’s a moderator who can pick up questions from IRC and Google Hangout in order to ask them out loud. We might even be able to pull off panel discussions. Afterwards, there’s a playlist and a webpage with all the videos/MP3s/OGGs, and people can share their notes/discussions/follow-ups.

All this is immensely doable with the technology we have today. For free, even. Anyway, the technology should be okay.

What about topics? Here’s what I’m particularly curious about:

  • New features in Emacs 25 (and beyond)
  • Demos, workflows, and setup tips for popular toolsets/needs (ex: awesome setups for Clojure/CL, Rails, Javascript, C++, Java, writing, research)
  • Fascinating uses of Emacs
  • Good practices for Emacs Lisp: automated testing, performance, reliability, coding style/idioms (maybe even workshops along these lines)
  • Demystifying cool stuff: how core modules work, how to contribute to Emacs
  • A hackathon: get package.el headers on everything! fix bugs! make improvements! document!
  • Emacs microhabits, learning
  • Workshops: intermediate/advanced use of Org Mode, Calc, ESS, and other powerful packages
  • Emacs community-building and sharing

And people can suggest other topics, too. =) Maybe we can even figure out some kind of unconference setup: people suggesting topics they can share, quickly voting on what they’re interested in, and breaking up into separate “rooms” to share/discuss.

2015-02-02 Making a virtual Emacs conference happen -- index card #emacs #organizing-people #conference #planning #questions

2015-02-02 Making a virtual Emacs conference happen – index card #emacs #organizing-people #conference #planning #questions

An Emacs conference would be awesome. Here are my (pitiful) excuses for why I haven’t figured out how to organize one yet, and things I want to figure out (especially with people’s help):

  • Who might be interested in speaking? How does one go about organizing speakers, schedules, topics, tech, etc? I’m still slowly getting the hang of reaching out to people and inviting them to Emacs Chats.
  • Will people show up and ask questions? Part of me is worried that I’ll pick entirely the wrong date/time/topics and there’ll be awkward silence.
  • How can we handle questions? IRC, probably, so that people can chat about stuff too. I think I’m pretty comfortable at keeping an eye on stuff and repeating people’s questions. Or maybe people can join the Emacs Hangout if we can get the flow to be smooth?
  • Will the experience be pleasant and worthwhile? Maybe not as goosebump-inducingly awesome as being in a room with 80+ other Emacs geeks, but I think it will be worthwhile.
  • How can we harvest and share resources? Hangouts on Air will put videos on Youtube automatically, so that’ll be taken care of.
  • What would we need to do leading up to it? Something about a mailing list, and a webpage, and lots and lots of coordination.
  • Do I need to gain experience/confidence with smaller steps? Or maybe find some accomplices?

Of course, if someone wants to organize an in-person one, that’s cool too. Especially in Toronto. That would be awesome. =) (Although I might be able to get to New York or similar places too…)

My evil plans for a conference like this include:

  • Getting cool stuff out of people’s heads/fingers/configs and into a form that other people can look at, learn from, and link to
  • Ditto for good practices that can help us develop better code (performance)
  • Discovering resources and tips we might not have found out about otherwise
  • Sparking more conversations and follow-ups
  • Spurring people to create and share more resources

What could help the Emacs community learn even faster?

2015-02-01 Accelerating the Emacs community -- index card #accelerating #emacs

2015-02-01 Accelerating the Emacs community – index card #accelerating #emacs

How can we get more people sharing their configs, or learning from other people’s configs? How can we make it easier for people to share through blog posts, videos, animated GIFs, and presentations? How can we create spaces for people to connect, either with virtual meetups or in person? How can we swap interesting ideas, workflows, and mental habits? How can we improve our skills? How can we keep the conversation going?

Mm. Figuring out how to do virtual conferences might be a good start. Also, I’ve got this idea noodling around in my head on having some kind of an intermediate/advanced Org Mode workshop: something that covers clocking workflows, table calculations, literate programming, data analysis, publishing. Figuring out how to do virtual workshops would be awesome too.

Okay. First things first. Some kind of date and some kind of time, and some kind of help sorting out a schedule. August 8 and/or August 15, maybe? If librarians can hold an online conference through Google Hangouts, we should be able to figure this out too. (Librarians are super-cool!) If you have lots of experience in organizing virtual conferences or you have ideas for how to make this less intimidating for a non-organizer-y introvert, I’d love to hear from you in the comments or at [email protected]. Let’s make this happen!

Colour update

February 9, 2015 - Categories: drawing

I think I’m getting the hang of playing with colour.

I started by digging out the coloured pens that W- gave me a long time ago. They still worked, yay! I started mixing green (and sometimes red) into my index cards. Sometimes I remembered to draw with them from the beginning, and other times I drew over black ink.

2015-01-28 11_38_42-Flickr_ Your Photostream

While going through my drawer, I came across a ten-pack of Sharpie accent highlighters and started using them too. I highlighted the cards before scanning them, which gave me an opportunity to review the card and think about what was important. I liked the highlighters more than the pens because the colours were more vivid. It was fun putting together blog posts that had index cards with different colours on them.

2015-01-26 12_03_12-Flickr_ Your Photostream

Now I’ve been experimenting with digital colour. I like this even more than the highlighters, as I get to pick any colour I want and I can erase or layer things as needed. To colour these, I added a layer on top of my image and set the layer’s mode to Multiply. The last image in this set was done with a Sharpie marker, since there were a bunch of coloured markers at the lab.

2015-01-28 11_33_49-Flickr_ Your Photostream

It’s surprisingly relaxing to colour things on my computer. I think about what colours different concepts feel like, pick a colour from the Copic colour swatches built into Autodesk Sketchbook Pro, and paint it onto the scanned index card. While I’m doing that, follow-up questions sometimes occur to me.

I’ve also been thinking about how I can draw more of these index cards on my computer. I’m going through quite a lot of index cards and I’m just about due for a pen refill, so maybe there’s a way I can draw more on my computer while reducing the mental friction. Hmm.

2015-01-30 Imagining digital index cards -- index card #drawing

There are trade-offs, of course. It’s not as easy to see other cards or organize them into piles, and my computer isn’t as handy or as portable as a deck of index cards. But still, it’s fun.

2015-01-31 Digital index card trade-offs -- index card #drawing

2015-01-31 Digital index card trade-offs – index card #drawing

Some other ideas:

2015-01-17 Playing with the index card format -- index card #drawing

2015-01-17 Playing with the index card format – index card #drawing

Drawing on my computer gives me more flexibility, since I can move things around or use whatever colours I want. The main thing I need to do, I think, is to calibrate the aspect ratio and the grid size so that the digital sketches feel like my paper ones, since an index card seems to be a good size for thoughts. I think that drawing digitally also nudges me towards more colourful sketches. Here’s an example “index card” that I drew on my computer:

2015-01-30 Sunlight in a cafe -- index card #cafe #light

Hmm. Actually, digital index cards are working out wonderfully. I’ve been tweaking my workflow and I’m quite happy with the reduced friction.

2015-02-04 Digital index cards are working well -- index card #drawing #digital

2015-02-04 Digital index cards are working well – index card #drawing #digital

I’m still not as comfortable with vibrant colours as I used to be, but I’ll get there. And yeah, it feels a little indulgent to spend the extra couple of minutes colouring each card (not that the thoughts on those cards are particularly insightful or worthy of attention), but it’s fun and it helps me learn.

Whee!

Envy and other people’s writing

February 10, 2015 - Categories: writing

Have you felt envy as a writer?

I often come across blog posts or books that I wish I’d written. They explain, clearly and in depth, ideas that I’ve been noodling about writing.

I want to have written Aaron’s “What’s better than reading? Re-reading”. Jon Snader (Irreal)’s summaries of Emacs chats, like this one with Karl Voit. Kate Stull’s guide to taking notes at work.

And that’s just from three days of blog posts.

My inner critic goes, “What have I been doing with my life?” and “How do I get there from here?” Then I remember: I’m learning. It’s okay. It’s not a waste of time.

And I haven’t been scooped, haven’t lost an opportunity to explore that thought for myself and create something possibly useful for people. One look at the library shelves or my blog reader, and I remember that there is room in the world for many people writing about the same things.

When the frustration fades, only delight is left.

Reading other people’s words means I can benefit from other people’s perspectives, research, experiences, and styles. I get to write the next step, linking to what’s already been written instead of explaining it myself. I get to recognize what I like without the hard work of writing and revising it myself.

Here’s what I’ve learned from other people’s writing:

I like short paragraphs and short words. I can think of blogs that are more verbose, and those have a different flavour in my mind.

I like practical application. Kate Stull’s guide is packed with tips.

I like specifics and personal experiences. Aaron’s post draws from his life in a way that I’d like to do. When I try it, I feel like I use the word “I” too much, but rewriting sentences can feel awkward.

I like flows. Jon Snader’s summaries go to just the right level of detail to draw interest, I think; much better than my terse list of links and topics.

There will always be a gap between what I can do and what I want to do, and that’s a good thing. It gives me a way to see what I want to practise and learn.

Who makes you envious? Why? What are you doing about it?

Update 2015-02-11: I noticed that one of my recent sketches takes this topic one step further:

2015-02-03 Scooped -- index card #writing #sharing

Getting started with Emacs? Empty your cup

February 11, 2015 - Categories: emacs

Frustrated with Emacs because you’re just not as productive as you are with your old editor? Copying configuration snippets from the Web in order to force it to work like what you’re used to, but running into problems with conflicting code or obscure error messages?

Here’s something I’ve realized. To learn Emacs well, try emptying your cup. This is the story as told on the C2 wiki:

A master was trying to explain something to a student. Now this student was not a brand new student, but a senior student who had learned many things. He had knowledge and experience aplenty to draw upon. But each time the master tried to explain something new to the student, the student kept trying to hold it up against his own notions of the way the world is and how it ought be, and he was unable to see the lessons in what the master was trying to teach him.

Finally, the master poured a full serving of tea into his own cup, and into the cup of the student. Then he told the student he wanted to give to him some of the tea from his own cup. He began pouring tea from his cup into the student’s cup, but the student’s cup was already full, and all the tea from the master’s cup spilled out over the cup onto the surface below.

The student said, “Master, you can’t pour anything into my cup until I empty it to make room for what you are trying to give me.”, and the master replied “Yes I know.” “And I can’t give you any new thoughts or ideas or perspectives on life’s lessons until you clear out some thoughts that are already teeming in your mind to make room for what I have to teach you.” Then the master paused for a brief moment, meeting the student’s eyes with his own knowing look and calmly but sternly said: ” If you truly seek understanding, then first, empty your cup!”

The student pondered for a moment with a look of absolute bewilderment. Then a look of enlightenment came over him, followed by a smile, and a look of receptiveness. The master started to explain again, and this time the student saw what the master was trying to say.

2015-01-13 Emacs and the beginner's mind -- index card #emacs #beginner

2015-01-13 Emacs and the beginner’s mind – index card #emacs #beginner

It’s natural to get frustrated when you expect something should work a particular way and it doesn’t, or you’re used to working quickly and you have to slow down. “Why can’t I use Ctrl-X to cut? Why is it called ‘killing text’? Why doesn’t it work like __?” I know what that’s like; even after years of using Emacs, I sometimes still struggle to configure things that people who use other editors take for granted.

Some differences seem easy to address with code you can get on the Net. But if you do that – if you give in to your initial discomfort – you may find yourself fighting more and more of Emacs as you go along, without the skills to properly understand or integrate your changes.

It’s better, I think, to approach Emacs as a beginner. Empty your cup and let go of your expectations. Pretend this is your first editor. Go through the tutorial. Start with the basics. Try doing things the Emacs way.

In the beginning, you might feel agonizingly slow. You may need to do this after hours instead of when everyone is counting on you to deliver a time-sensitive project. It’s okay to open up Vim or your previous editor so that you can get something done, while you keep learning Emacs in the background. It’s okay to use the menu and the toolbar while you get the hang of the most common keyboard shortcuts.

As you become familiar with the system, you learn how to work within it. Slowly configure things. Get used to the changes before you introduce more. Eventually, you’ll understand the configuration snippets that other people post. Reading Emacs Lisp is the first step to being able to modify Emacs Lisp, and from there you can learn how to write Emacs Lisp. But you don’t have to start knowing that right away. Many people use Emacs for years before writing Emacs Lisp, and many people use it without customizing it.

But if you start learning Emacs by getting frustrated with it and trying to force it to be what you want, you might never get to the point where you can enjoy it and work with it. Be a beginner. Give yourself time and space to learn, even if you feel you’re learning slowly. Then, as you improve your understanding and skills, you’ll learn how to coax Emacs to fit you even better.

Help your readers discover more posts by organizing your content with a reverse outline

February 12, 2015 - Categories: blogging, writing

You’ve written lots of blog posts, and maybe you’ve even organized them using categories and tags. But your readers are still getting lost. They like the posts they’ve found using search engines, but they don’t know where to go next. If they click on your categories or tags, they see your newest posts, but they might not find your most useful ones or figure out a good order to read posts in. Sure, if you wrote all your posts according to a well-planned editorial calendar, people can follow that sequence. (If only we could all be so organized!)

I know what that’s like. I’ve got thousands of posts in my archive, and even I find it hard to navigate through them. I’ve tried all sorts of plugins for suggesting related posts, but I didn’t find any that could suggest good relevant content quickly.

How can we help people find the posts they need? Adding a “Popular Posts” widget to the sidebar is one way to help people discover your posts, but it only shows a handful of entries. A better way to help lost readers is to put together a page with links to your recommended posts. You can call it Resources, Start Here, or a similar title, and add a prominent link to your menu or sidebar. Off the top of your mind, you can probably think of a few blog posts to include on a resources page. Add those to the page and start helping your readers.

When you have a little more time, gradually incorporate more links into that page. You’ll still want to highlight the key posts people should begin with, but after that (short) list, you can add more lists of recommended posts by topic. Choose your most important category and review the posts within it. Copy the titles and links from your blog posts and arrange them in a logical order, using either a list or an outline. For example, you might go from a list like:

  • Post 1
  • Post 2
  • Post 3
  • Post 4
  • Post 5

to an outline like:

  • Subtopic 1
    • Post 1
    • Post 3
  • Subtopic 2
    • Post 2
    • Post 4
    • Post 5

As you get an overview of your posting history, you might find opportunities to summarize several posts into a longer guide, update and improve previous posts, and fill in the gaps with additional posts. Add these ideas to your editorial calendar or idea notebook, and use those ideas the next time you sit down to write.

2015-01-12 Reverse outlining -- index card #writing #organization #outlining

2015.01.12 Reverse outlining – index card #writing #organization #outlining

For example, when I looked at what I’d written in my blogging category, I realized that I could organize these posts by the excuses they addressed. Then it was easy to turn those excuses into a short guide, which became something I could offer on my resources page. In fact, I’ve been working on organizing all of my recent posts into a massive reverse outline or blog index.

Building this kind of a “reverse outline” from your existing posts helps you reuse what you’ve already published instead of starting from scratch. Good luck!

Experimenting my way to an awesome life

February 13, 2015 - Categories: life, purpose, quantified

“The question I really want to answer is: How can I live a fuller life, a happier life, a more productive life?” said someone in a recent e-mail about Quantified Self.

This made me think: The ideal life differs from person to person. What kind of awesome life am I moving towards? What motivates my choices and experiments, and how can I explore and learn more effectively?

I have role models for this, so I can imagine what it looks like. I can look at the differences between our lives to get a better understanding of the gaps and divergences.

My parents have full, happy, productive, and significant lives (although I think my mom thinks that what she’s doing isn’t as awesome or as significant as what my dad does). They make things happen. In particular, my dad touches lots of people’s lives. He has this really big scope.

W- lives a full, happy, productive life. I think he focuses on doing a good job at work, doing the right thing, knowing (and applying!) all sorts of good knowledge, and being a great husband and dad. We’re probably not going to get added to any tribal epics or history books, but that’s okay. I tend to think of his scope as smaller, more local, and he’s totally awesome within it. He sometimes reaches beyond that scope to support interesting things, like Kickstarters for well-designed products.

I think I live a decently full, happy, and productive life as well. Definitely yes to the happy bit; yay for high genetic set-points for happiness, good coping mechanisms, and a tremendous amount of luck. I keep some slack in my life, so I don’t feel like it’s super-full or super-productive. But people tell me that I do a lot, so maybe this is like the way my mom’s not as sure about her own contributions. I could probably do more, but this is as good a start as any.

My scope tends to be similar to W-‘s, focusing on our little world. But I also have these odd outgrowths for things like Emacs, visual thinking, social business, Hacklab… These aren’t as driven as my dad’s initiatives or my friends’ startups. They’re more… curiosity-based, maybe? I enjoy exploring those playgrounds and sharing what I’m learning. I think W- is like this too – he follows his curiosity into new areas.

So, if that helps me understand a little of who I am now, what does that tell me about the future Sacha I’m gradually inching towards, and what experiments can help me learn more?

I imagine Awesome Sacha to be this capable, curious person with lots of skills, including practical DIY stuff. Her equanimity and optimism lets her handle whatever life throws at her (and learn from it!). Maybe she’s more involved in the community now, helping her favourite causes, but probably more from a position of lifting people up rather than going on crusades. She takes plenty of notes and shares them, helping other people learn faster and see the connections among different ideas.

If that’s a potentially interesting Future Sacha I could become, what can I track to measure my progress along the way, and what kinds of experiments could stretch me a little bit more towards that?

  • I can pick up and practise more skills: Cooking, sewing, electronics, DIY repair, etc. I can track this through journal entries, blog posts, comfort level, and decisions to do things myself versus asking or paying someone else to do things. For example, I now feel comfortable cooking, and I remember feeling a lot more uncertain about it before. I feel moderately okay about repairing small appliances and doing simple woodworking, but could use more practice. I have hardly any experience with plumbing or tiling.
  • I can observe more, and write about more of what I’m learning: The little hiccups and challenges in my life feel so much smaller than the ones that other people go through, and I usually don’t write about them. Keeping a journal (even for the small stuff) might result in interesting reading later on, though. I already bounce back pretty quickly. It might be interesting to see how I respond to larger and larger changes, though, so deliberately taking on more commitments and more risks can help me develop this part of my life.
  • I can help out more. I think it’s okay even if I don’t try to maximize utility on this for now. I’ll start with the things that resonate with me. It’s easy enough to track hours and money for this; maybe later I can add stories too.
  • I can get better at taking, organizing, and sharing my notes. I can see the gap in my note-taking by noticing when I’m annoyed that I can’t find my old notes (either because I hadn’t written them up properly or I didn’t make them findable enough). As for organizing and sharing my notes, perhaps I can track the number of longer guides I put together, and whether I can get the hang of working with outlines and pipelines…

Most of my little experiments come from looking at ideas that are close by and saying, “Hmm, that’s interesting. Maybe I can explore that.” Sometimes it helps to look a little further ahead–to sketch out an ideal life, or even just a slightly-better-than-this life–and to plan little steps forward, going roughly in the right direction. Some ideals fit you better than others do, and some ideals just won’t resonate with you. For example, I currently don’t wish to be a highly-paid jetsetting public speaker. Thinking about this helps you figure out what kind of future you might want, and maybe figure out a few ways to try it on for size and track your progress as you grow into it.

What kind of person would Awesome You be like, and how can you inch a little closer?

Continuous integration and code coverage for Emacs packages with Travis and Coveralls

February 13, 2015 - Categories: emacs

Do you maintain an Emacs package hosted on Github? Would you like to get those confidence-building, bragging-rights-granting, other-developers-inspiring build: passing and coverage: 100% badges into your README file?

It turns out that this is pretty easy with ERT, Cask, Travis CI, undercover.el, and Coveralls.io.

  1. Log on to Travis and enable continuous integration for your repository.
  2. Log on to Coveralls.io and enable coverage testing for your repository.
  3. Set up a git branch, since you’ll probably be making lots of small commits while you smooth out the testing workflow.
  4. Define your tests with ERT. See https://github.com/abo-abo/tiny/blob/master/tiny-test.el for an example. For undercover support, you’ll want to include something like:
    (when (require 'undercover nil t)
      (undercover "tiny.el"))
    
  5. Define your dependencies with Cask. Include undercover. For example, here’s a simple Cask file:
    (source gnu)
    (source melpa)
    
    (development
      (depends-on "undercover"))
    
  6. Add a .travis.yml that specifies how to test your package on Travis. For example, see this .travis.yml and Makefile.
  7. Commit and push.
  8. Check your repository status in Travis to see if it ran properly.
  9. Check your coverage status in Coveralls.io to see if it displayed properly.
  10. Get the badge code from Travis and Coveralls, and add them to your README (probably using Markdown). You can get the badge code from Travis by clicking on your build status badge next to your repository name. Coveralls has prominent instructions for getting your badge. Yay!

Incidentally, if you want to see your test coverage locally, you can (require 'testcover) and then use testcover-this-defun or testcover-start to instrument the macros and functions for coverage. Run your tests, then use testcover-mark-all to look at the results. See the documentation in testcover.el to find out what the coloured overlays mean. Edebug has a test coverage tool too, so you can explore that one if you prefer it.

Additional notes on testing:

2015-02-03 Better Emacs Testing -- index card #testing #emacs

2015-02-03 Better Emacs Testing – index card #testing #emacs

2015-02-04 Yay, testing in Emacs -- index card #testing #emacs

2015-02-04 Yay, testing in Emacs – index card #testing #emacs

Resources:

Weekly review: Week ending February 13, 2015

February 14, 2015 - Categories: review, weekly

This week was about trying to get the hang of shopping. I find shopping to be a frustrating process, but I think that’s something I can tweak about myself. We were scrambling to get everything in order for a formal-ish dinner at a banquet hall with extended family. My office attire (slacks, a blazer, and a dress shirt) worked fine, but the exercise prompted me to think about my wardrobe and choosing clothes more deliberately.

My work laptop crashed, so that took a bite out of my productivity. I’ll check next week to see if they’ve gotten it sorted out. I used a loaner laptop to get a few more things done, but it would be good to set everything up properly again.

This coming week: hosting an Emacs Hangout, baking for the Repair Cafe to be held at Hacklab, attending a Sketchnote Hangout, and going to a networking event. Lots of talking to people, so I’ll try to have lots of quiet time as well.

output

Blog posts

Sketches

Link round-up

Focus areas and time review

  • Business (33.2h – 19%)
    • Earn (10.7h – 32% of Business)
      • Earn: E1: 1-2 days of consulting
    • Build (18.7h – 56% of Business)
      • Drawing (12.9h)
      • Delegation (0.1h)
      • Packaging (0.2h)
      • Paperwork (0.8h)
    • Connect (3.8h – 11% of Business)
    • Revisit Google login thing
    • Quantified Awesome: Fix Google login again
  • Relationships (6.6h – 3%)
    • Have lunch with Gabriel
    • Call my mom and wish her happy birthday
    • Check on @mattl’s upcoming visit to Toronto
    • Book haircut
    • Try online shopping
    • Help W- with ntp
  • Discretionary – Productive (23.7h – 14%)
    • Emacs (15.0h – 8% of all)
      • Figure out a neat way to backdate Org clock entries consistently
      • Fix Emacs init errors
      • Refine Emacs code for working with questions
      • Explore Hydra
      • Make something that automatically cross-references sketches with blog posts
      • Make dired action for processing marked files
      • Create Emacs conference thing
      • Help Sean with Emacs
      • Chat with Yi about Emacs
      • Set up my Vagrant to send mail through Gmail
      • Try to get Gnus to send mail again on Windows
      • Try out org-gcal
    • Review Zettelkasten research
    • Scan my sewing pattern catalog
    • Consider pants
    • Upload to Gumroad
    • Read chapter 3 of Intermediate Japanese
    • Make cover for Createspace
    • Upload to Createspace
    • Start git directory for drafts
    • Writing (5.9h)
  • Discretionary – Play (7.1h – 4%)
  • Personal routines (21.0h – 12%)
  • Unpaid work (20.6h – 12%)
  • Sleep (55.8h – 33% – average of 8.0 per day)

Miscellaneous memories

February 15, 2015 - Categories: life

Because these don’t quite fit in their own blog posts, but I want to stash them in my blog anyway.

2015-02-04 Yay, passport -- index card #canada #travel #paperwork

2015-02-04 Yay, passport – index card #canada #travel #paperwork

I got my Canadian passport, yay! I’m still not particularly keen on travel, but this will make it loads easier when I do. Fewer visas to apply for, fewer paperwork hassles… Hooray!

2015-01-30 Sunlight in a cafe -- index card #cafe #light

2015-01-30 Sunlight in a cafe – index card #cafe #light

Our kitchen is the room with the most sunlight in our house, so I spend most of my time in it. But it faces west, so it doesn’t get as much sun as a south-facing room would. (Life in the northern hemisphere: I’m still getting the hang of all the little details!)

The other week, I went to a cafe to help someone with Emacs. So much sunlight! Wonderful. I felt like a cat.

2015-01-27 Field's metal -- index card #hacklab

2015-01-27 Field’s metal – index card #hacklab

Eric brought some Field’s metal to Hacklab. It’s a metal that melts at a temperature below that of hot water. We cast tiny robots in a chocolate mold. =)

2015-01-31 Clearing my fabric stash -- index card #tidying #decluttering

2015-01-31 Clearing my fabric stash – index card #tidying #decluttering

Decluttering the basement, letting go of just-in-case fabric and planned projects I hadn’t touched in years. I might take up sewing again, but I’ll be more careful about fabric and pattern purchases.

Hmm, maybe I should include little memories in my weekly review. That makes sense. I’ll do that going forward!

Sketched Book: Take Charge of Your Talent: Three Keys to Thriving in Your Career, Organization, and Life – Don Maruska, Jay Perry (2013)

February 16, 2015 - Categories: career, visual-book-notes

Don Maruska and Jay Perry’s Take Charge of Your Talent: Three Keys to Thriving in Your Career, Organization, and Life (2013) has plenty of tips for developing your skills and taking charge of your career. I’ve sketched the key points of the book below to make it easier to remember and share. Click on the image for a larger version that you can print if you want.

2014-12-25 Sketched Book - Take Charge of Your Talent - Three Keys to Thriving in Your Career, Organization, and Life - Don Maruska and Jay Perry

I liked the chapter on reflecting on your talents through a structured conversation with someone who can reflect back not only your words but also your feelings and hopes. Sometimes we don’t see the patterns in our thoughts until someone points it out to us. The questions are also good for personal reflection, and I’m looking forward to using them in my planning.

Sometimes people ask me to help them figure out what they want to do. Other books I’ve read about coaching tend to be pretty high-level, but this one gives concrete advice, including some notes anticipating potential responses or difficulties.

I also liked the chapters on creating tangible assets and sharing them with other people. That’s been a great learning- and career-booster for me, and I hope other people will try it out as well.

Among other things, the book also suggests listing at least one hundred resources (people, places, things, skills, …). Forced-length lists are great for creativity because you dig deeper than your surface answers, often coming across surprises. When you review your list, think about ways that you could make even better use of those resources. The book also suggests taking a look at your top 10 resources and working towards 100% use of them, which will be an interesting challenge. The third related exercise is to combine different resources so that you can break through obstacles or come up with interesting mash-ups – forced association, another great creativity technique. I like this reminder to apply creativity so that you can recognize and make the most of your resources, which allows you to MacGyver your way to growth.

Want the book? You can buy it from Amazon (affiliate link) or check out their website at .

Like this sketch? Check out sketchedbooks.com for more. Feel free to share – it’s under the Creative Commons Attribution License, like the rest of my blog.

Enjoy!

Org Mode: Reusing the date from file-datetree-prompt

February 16, 2015 - Categories: emacs, org
Update 2015-02-17: Or you can just use %t in your org-capture-templates, as Seth Mason points out in the comments… =)

How can you get Org Mode to create and schedule entries within a year-month-day outline structure? You can define an org-capture-templates with the keyword file+datetree+prompt. This lets you specify a date for your entry, and Org will create the entry in a hierarchy organized by year, month, and day.

If you’d like to display the entry in your agenda, you’ll also need an active timestamp of the form <yyyy-mm-dd>. Fortunately, you can reuse the date you specified at the initial prompt to create the datetree entry. Looking at org-capture.el will show you that the org-capture function refers to the org-read-date-final-answer, which is set to whatever string you entered at the date prompt. For example, if you entered 18, then org-read-date-final-answer will be set to 18. You can use org-read-date to convert this back to a yyyy-mm-dd-style date.

How do you use this in org-capture-templates? You can use the %(...) syntax for calling an Emacs Lisp expression, like so:

(setq org-capture-templates '(
  ;; other entries go here
  ("s" "Journal entry with date, scheduled" entry
   (file+datetree+prompt "~/personal/journal.org")
    "* %^{Title}\n<%(org-read-date nil nil org-read-date-final-answer)>\n%i\n%?\n")))

Here’s sample output from that capture template:

* 2015
** 2015-12 December
*** 2015-12-31 Thursday
**** End of the year party!
<2015-12-31>

Thanks to Sean Miller for the nudge to think about this!

Learning from people

February 17, 2015 - Categories: connecting, learning

I have a friend who’s focusing on learning how to ask better questions. Actually, he realized his goal is probably to ask more questions in the first place, since even simple questions (“Where did you come from?”) can lead to interesting stories.

It got me curious about getting better at learning from people. I think this will help me learn about the stuff that I can’t find in books because:

  • New things often aren’t in books
  • There’s a lot of tacit knowledge that’s difficult to capture
  • Sometimes I don’t understand something well enough to research it
  • Talking to people can help me come across things I didn’t know to ask about

2015-01-20 Asking better questions -- index card #asking

2015-01-20 Asking better questions – index card #asking

I think getting better at asking questions and learning from people involves figuring out:

  • what to ask about (spotting opportunities or following curiosities)
  • who to ask
  • how to build rapport
  • how to pick the right time/place/sequence
  • how to frame the question (level of detail, phrasing, etc.)
  • how to follow up

So that gives me specific things to focus on in terms of learning from others and trying things out myself.

I’ve been thinking about two aspects of learning from people: working with mentors/coaches/trainers, and having casual conversations with other people.

2015-01-24 Imagining awesomeness at learning from people -- index card #learning #people

2015-01-24 Imagining awesomeness at learning from people – index card #learning #people

Mentors/coaches/trainers

I’ve been lucky to have many mentors (both formal and informal) who helped me learn how to navigate organizations, find opportunities, build skills, and so on. But I haven’t been as deliberate about learning as I could have been. I periodically consider finding a coach for my writing or coding, but haven’t taken the leap.

I’ve heard from people who weren’t sure if therapy was working out for them; they couldn’t evaluate their progress. I think I’m hesitant for similar reasons. I’m uncertain about choosing candidates, asking useful questions, evaluating the results, and balancing the value and the opportunity cost.

This is precisely the sort of situation for which an opportunity fund is useful, because it pushes me to Just Try Things Out. I’m slowly warming up to that idea, hence all the blog posts thinking out loud.

Here are some areas I’m considering:

2015-01-19 Imagining an editing experiment -- index card #delegation #writing #editing

2015-01-19 Imagining an editing experiment – index card #delegation #writing #editing

For example, an editing experiment might help me develop a better mental model of an editor, forcing me to search for more specific vocubulary (down with “stuff”!), testing to see if something I’ve written makes sense, and checking for gaps.

2015-01-24 How can I learn from observation feedback -- index card #learning #people

2015-01-24 How can I learn from observation feedback – index card #learning #people

In addition to directly asking for specific help, I might learn a lot from general observation. A friend suggested Atul Gawande’s Better for its approach to learning: a surgeon inviting other surgeons to observe him and give feedback, even though this technique was mostly used by people with less experience. It makes sense to do that even when you’re more experienced, and it’s probably even more useful because people can swap tips or explain things they unconsciously do.

Other people

2015-01-24 Mixed feelings about learning from people -- index card #learning #people

2015-01-24 Mixed feelings about learning from people – index card #learning #people

I noticed that I have a strong bias towards online conversations instead of offline ones. Sure, online conversations might be lower-bandwidth or not as nuanced. But blog posts and comments expand the conversations to include other people, and it’s easier to follow up on threads of ideas. I think this preference is among the reasons why, compared to several years ago, I now spend much less time going to parties or meetups. Instead, I focus on writing and connecting online.

But I get plenty of writing time already, so maybe I should mix more offline conversations into my life. This would follow the principle that I shouldn’t always do what’s fun and easy. It makes sense to develop skills and routines in other areas as well. For example, I can imagine getting better at cultivating acquaintances through shared activities like cooking at Hacklab and hosting board game afternoons. I can test and refine several quick stories for small talk, which frees me up to focus on learning more about the other person through questions. It’s like the way foreign language learners can boost their feeling of fluency by anticipating common questions (“Where are you from?” “What do you do?”) and practising answers to those.

I think that getting better at asking questions and learning from people starts mostly from getting to know people as individuals. What makes them different? What’s interesting about their lives? There’s always something to find. The next step after that is to gradually build the acquaintance or the friendship through things like lunches or get-togethers. It makes sense to open my world so that I can come across good people. I enjoy their company, I grow in helping out, and I learn from the conversations with them and the mental models of them.

More thoughts

2015-01-25 Learning from people -- index card #learning #people

Thinking about this, I realized that I’m not bad at learning from people. I’m pretty good at learning from books, blogs, and online conversations, which is why I rely on those so much. But there are some aspects of learning from people that I can improve, and I can play around with those without cutting too much into the time I spend learning in other ways.

Windows: Pipe output to your clipboard, or how I’ve been using NodeJS and Org Mode together

February 18, 2015 - Categories: emacs, geek

It’s not easy being on Windows instead of one of the more scriptable operating systems out there, but I stay on it because I like the drawing programs. Cygwin and Vagrant fill enough gaps to keep me mostly sane. (Although maybe I should work up the courage to dual-boot Windows 8.1 and a Linux distribution, and then get my ScanSnap working.)

Anyway, I’m making do. Thanks to Node and the abundance of libraries available through NPM, Javascript is shaping up to be a surprisingly useful scripting language.

After I used the Flickr API library for Javascript to cross-reference my Flickr archive with my blog posts, I looked around for other things I could do with it. photoSync occasionally didn’t upload new pictures I added to its folders (or at least, not as quickly as I wanted). I wanted to replace photoSync with my own script that would:

  • upload the picture only if it doesn’t already exist,
  • add tags based on the filename,
  • add the photo to my Sketchbook photoset,
  • move the photo to the “To blog” folder, and
  • make it easy for me to refer to the Flickr image in my blog post or index.

The flickr-with-uploads library made it easy to upload images and retrieve information, although the format was slightly different from the Flickr API library I used previously. (In retrospect, I should’ve checked the Flickr API documentation first – there’s an example upload request right on the main page. Oh well! Maybe I’ll change it if I feel like rewriting it.)

I searched my existing photos to see if a photo with that title already existed. If it did, I displayed an Org-style list item with a link. If it didn’t exist, I uploaded it, set the tags, added the item to the photo set, and moved it to the folder. Then I displayed an Org-style link, but using a plus character instead of a minus character, taking advantage of the fact that both + and – can be used for lists in Org.

While using console.log(...) to display these links in the terminal allowed me to mark and copy the link, I wanted to go one step further. Could I send the links directly to Emacs? I looked into getting org-protocol to work, but I was having problems figuring this out. (I solved those problems; details later in this post.)

What were some other ways I could get the information into Emacs aside from copying and pasting from the terminal window? Maybe I could put text directly into the clipboard. The node-clipboard package didn’t build for me and I couldn’t get node-copy-paste to work either,about the node-copy-paste README told me about the existence of the clip command-line utility, which worked for me.

On Windows, clip allows you to pipe the output of commands into your clipboard. (There are similar programs for Linux or Mac OS X.) In Node, you can start a child process and communicate with it through pipes.

I got a little lost trying to figure out how to turn a string into a streamable object that I could set as the new standard input for the clip process I was going to spawn, but the solution turned out to be much simpler than that. Just write(...) to the appropriate stream, and call end() when you’re done.

Here’s the relevant bit of code that takes my result array and puts it into my clipboard:

var child = cp.spawn(‘clip’); child.stdin.write(result.join(“\n”)); child.stdin.end();

Of course, to get to that point, I had to revise my script. Instead of letting all the callbacks finish whenever they wanted, I needed to be able to run some code after everything was done. I was a little familiar with the async library, so I used that. I copied the output to the clipboard instead of displaying it so that I could call it easily using ! (dired-do-shell-command) and get the output in my clipboard for easy yanking elsewhere, although I could probably change my batch file to pipe the result to clip and just separate the stderr stuff. Hmm. Anyway, here it is!

See this on Github

/**
 * Upload the file to my Flickr sketchbook and then move it to
 * Dropbox/Inbox/To blog. Save the Org Mode links in the clipboard. -
 * means the photo already existed, + means it was uploaded.
 */

var async = require('async');
var cp = require('child_process');
var fs = require('fs');
var glob = require('glob');
var path = require('path');
var flickr = require('flickr-with-uploads');
var secret = require("./secret");
var SKETCHBOOK_PHOTOSET_ID = '72157641017632565';
var BLOG_INBOX_DIRECTORY = 'c:\\sacha\\dropbox\\inbox\\to blog\\';
var api = flickr(secret.flickrOptions.api_key,
                 secret.flickrOptions.secret,
                 secret.flickrOptions.access_token,
                 secret.flickrOptions.access_token_secret);
var result = [];

function getTags(filename) {
  var tags = [];
  var match;
  var re = new RegExp('#([^ ]+)', 'g');
  while ((match = re.exec(filename)) !== null) {
    tags.push(match[1]);
  }
  return tags.join(' ');
}
// assert(getTags("foo #bar #baz qux") == "bar baz");

function checkIfPhotoExists(filename, doesNotExist, existsFunction, done) {
  var base = path.basename(filename).replace(/.png$/, '');
  api({method: 'flickr.photos.search',
       user_id: secret.flickrOptions.user_id,
       text: base},
      function(err, response) {
        var found = undefined;
        if (response && response.photos[0].photo) {
          for (var i = 0; i < response.photos[0].photo.length; i++) {
            if (response.photos[0].photo && response.photos[0].photo[i]['$'].title == base) {
              found = i; break;
            }            
          }
        }
        if (found !== undefined) {
          existsFunction(response.photos[0].photo[found], done);
        } else {
          doesNotExist(filename, done);
        }
      });
}

function formatExistingPhotoAsOrg(photo, done) {
  var title = photo['$'].title;
  var url = 'https://www.flickr.com/photos/'
        + photo['$'].owner
        + '/' + photo['$'].id;
  result.push('- [[' + url + '][' + title + ']]');
  done();
}

function formatAsOrg(response) {
  var title = response.photo[0].title[0];
  var url = response.photo[0].urls[0].url[0]['_'];
  result.push('+ [[' + url + '][' + title + ']]');
}

function uploadImage(filename, done) {
  api({
    method: 'upload',
    title: path.basename(filename.replace(/.png$/, '')),
    is_public: 1,
    hidden: 1,
    safety_level: 1,
    photo: fs.createReadStream(filename),
    tags: getTags(filename.replace(/.png$/, ''))
  }, function(err, response) {
    if (err) {
      console.log('Could not upload photo: ', err);
      done();
    } else {
      var newPhoto = response.photoid[0];
      async.parallel(
        [
          function(done) {
            api({method: 'flickr.photos.getInfo',
                 photo_id: newPhoto}, function(err, response) {
                   if (response) { formatAsOrg(response); }
                   done();
                 });
          },
          function(done) {
            api({method: 'flickr.photosets.addPhoto',
                 photoset_id: SKETCHBOOK_PHOTOSET_ID,
                 photo_id: newPhoto}, function(err, response) {
                   if (!err) {
                     moveFileToBlogInbox(filename, done);
                   } else {
                     console.log('Could not add ' + filename + ' to Sketchbook');
                     done();
                   }
                 });
          }],
        function() {
          done();
        });
    }
  });
}

function moveFileToBlogInbox(filename, done) {
  fs.rename(filename, BLOG_INBOX_DIRECTORY + path.basename(filename),
            function(err) {
              if (err) { console.log(err); }
              done();
            });
}

var arguments = process.argv.slice(2);
async.each(arguments, function(item, done) {
  if (item.match('\\*')) {
    glob.glob(item, function(err, files) {
      if (!files) return;
      async.each(files, function(file, done) {
        checkIfPhotoExists(file, uploadImage, formatExistingPhotoAsOrg, done);
      }, function() {
        done();
      });
    });
  } else {
    checkIfPhotoExists(item, uploadImage, formatExistingPhotoAsOrg, done);
  }
}, function(err) {
  console.log(result.join("\n"));
  var child = cp.spawn('clip');
  child.stdin.write(result.join("\n"));
  child.stdin.end();
});

Wheeee! Hooray for automation. I made a Windows batch script like so:

up.bat

node g:\code\node\flickr-upload.js %*

and away I went. Not only did I have a handy way to process images from the command line, I could also mark the files in Emacs Dired with m, then type ! to execute my up command on the selected images. Mwahaha!

Anyway, I thought I’d write it up in case other people were curious about using Node to code little utilities, filling the clipboard in Windows, or getting data back into Emacs (sometimes the clipboard is enough).

Back to org-protocol, since I was curious about it. With (require 'org-protocol) (server-start), emacsclient org-protocol://store-link:/foo/bar worked when I entered it at the command prompt. I was having a hard time getting it to work under Node, but eventually I figured out that:

  • I needed to pass -n as one of the arguments to emacsclient so that it would return right away.
  • The : after store-link is important! I was passing org-protocol://store-link/foo/bar and wondering why it opened up a file called bar. org-protocol://store-link:/foo/bar was what I needed.

I only just figured out that last bit while writing this post. Here’s a small demonstration program:

var cp = require('child_process');
var child = cp.execFile('emacsclient', ['-n', 'org-protocol://store-link:/foo/bar']);

Yay!

2015-01-13 Using Node as a scripting tool -- index card #javascript #nodejs #coding #scripting

2015-01-13 Using Node as a scripting tool – index card #javascript #nodejs #coding #scripting

Experimental Emacs Hangout 2015-02-18

February 18, 2015 - Categories: emacs

In which we talked about Hydra (0:11), Helm (0:22), packages (0:25), Quelpa/quse-package (0:29), EWW (0:30), Org Mode (0:40), global-flycheck-mode (0:51), widget, TRAMP (1:15), conferences/hangouts (1:26), more Hydra (1:28), Emacs Lisp (1:32), command-history (1:35), Emacs (1:38), plans for getting better (1:44), latexmk (1:49), and other things. (Times are approximate.)

Other questions/comments:

  • Not a question, but I just learned about command-history. Which is a great way to whip up a function. I’m amazed that I just discovered it. – Jonathan Hill
  • I saw something in 24.4 change log about a notification system. Could that maybe solve your problem? – Mitchell Hunter
  • On Air viewers cannot see Sasha due to Sridhar presenting. – Marc Tamsky
  • Anyone using tabs? – Levi Strope

The next Emacs Hangout will be on March 18, 2015, at 8 PM Toronto time (12 midnight GMT) https://plus.google.com/u/0/events/cbj3rg26d8j9ifaiff5uq00ncr4

Want to get notified about upcoming hangouts? You can sign up for notifications at http://eepurl.com/bbi-Ir . We’ll experiment with starting off with a mini-workshop/demo of Org tasks and agenda (or maybe Helm, if that’s more interesting).

Text chat:

JJ Asghar 8:01 PM Russell: http://blog.binchen.org/posts/notes-on-using-gnus.html
Sridhar Ratnakumar 8:01 PM http://www.srid.ca/emacs/
Michael Hoffman 8:03 PM hi sorry i need to hook up my camera
Jason Lewis 8:04 PM https://marmalade-repo.org/packages/winner-mode-enable
Michael Hoffman 8:05 PM brb tech issues
Michael Hoffman 8:07 PM sorry guys looks like my mic isn’t going to work without a reboot sure, thanks so much
Michael Hoffman 8:08 PM can someone repost that gmail/gnus link? that sounded awesome
Sridhar Ratnakumar 8:08 PM http://blog.binchen.org/posts/notes-on-using-gnus.html
Michael Hoffman 8:09 PM thanks Sridhar
Bob Erb 8:09 PM ace-jump-mode
Michael Hoffman 8:12 PM I find `guide-key-mode` very helpful for remembering keybindings as well
Sridhar Ratnakumar 8:13 PM https://github.com/abo-abo/hydra
Michael Hoffman 8:14 PM Sacha can you increase your font siz e? thanks
Michael Hoffman 8:19 PM that’s just an example this is my guide-key setup (require-package guide-key guide-key) (setq guide-key/guide-key-sequence ‘(“C-x” “C-c”)) (setq guide-key/recursive-key-sequence-flag t) (setq guide-key/idle-delay 0.7)
Sridhar Ratnakumar 8:20 PM pretty useful
Michael Hoffman 8:20 PM I don’t see any reason why not to set it up for everything C-x if you set it up with an idle-delay of 0.7 or something then it usually won’t bother you unless you can’t remember
JJ Asghar 8:23 PM ;; i need tab complete (define-key helm-map (kbd “&lt;tab&gt;”) ‘helm-execute-persistent-action)
Sridhar Ratnakumar 8:23 PM thx
JJ Asghar 8:23 PM
Sridhar Ratnakumar 8:23 PM (we are talking about https://github.com/emacs-helm )
Michael Hoffman 8:25 PM has anyone tried the eww web browser it’s definitely a curiosity more than a useful thing
Russell Black 8:25 PM I agree
Michael Hoffman 8:25 PM although i can see cases where it would be useful i keep my .emacs in version control
me 8:26 PM I’ve tried eww a little bit, but I haven’t quite gotten the hang of using it.
Michael Hoffman 8:26 PM i set up a macro to require or install a package
Jacob MacDonald 8:26 PM https://github.com/jaccarmac/quse-package
me 8:26 PM Mostly I just use browse-url to open things in Chrome
Michael Hoffman 8:27 PM ;; XXX: seems to hang when trying to (package-install) at compile time? (defmacro require-package (feature &amp;optional package) “Require FEATURE or `package-install` PACKAGE. Default PACKAGE is FEATURE.” ;; for debugging (message “(require-package %s %s)” feature package) (let ((package (or package feature))) ; XXX: can I have a macro produce multiple forms instead of nesting like this? `(eval-and-compile (eval-when-compile (unless (or (require ‘,feature nil t) (fboundp ‘flycheck-byte-compile-dest-file)) ; don’t run within flycheck (package-install ‘,package))) (require ‘,feature nil t)))) WARNING: does not always work i gotta run guys, this has been great thanks so much sacha
Jacob MacDonald 8:28 PM See ya!
me 8:28 PM Bye, Michael! Oops, missed him
Jacob MacDonald 8:29 PM https://github.com/jaccarmac/dot-emacs-dot-d
me 8:30 PM Hi Howard!
Jacob MacDonald 8:31 PM I used Conkerer for a few months to get the Emacs experience with a decent frontend for JS, etc.
Sridhar Ratnakumar 8:32 PM eww renders images fine; but the layout is not correct
Russell Black 8:32 PM I have to run to an appointment. Thanks guys!
Howard Abrams 8:33 PM Never renders perfectly,. but if you are selective in what you are browsing, it is useful for things like programming documentation that fails to supply a info version.
[email protected] 8:33 PM jittery audio. reconnecting..
[email protected] 8:34 PM i can’t hear anyone
Sod Oscarfono 8:39 PM how about time tracking sacha?
Sridhar Ratnakumar 8:39 PM how many people here already use org-mode?
Jacob MacDonald 8:39 PM I use it primarily for literate programming and a little for note taking.
Sod Oscarfono 8:39 PM i love org-mode! couldn’t live without it
Bob Erb 8:40 PM couldn’t live w/o org-capture – allows mind like water
Sod Oscarfono 8:41 PM sorry no mic or camera here, but that is exactly what i needed thanks Sridhar!
me 8:45 PM Yay!
Sridhar Ratnakumar 8:45 PM Pomodoro org-pomodor
Sod Oscarfono 8:47 PM great stuff thanks Sridhar!
Jacob MacDonald 8:52 PM I’m interested in getting my config to work across multiple OSs. The “correct ” thing to do is to (defvar variable) i believe
Sridhar Ratnakumar 8:52 PM I’m yet to use emacs for git
Jacob MacDonald 8:52 PM It’s like any other linter, you have to prioritize the messages.
Sridhar Ratnakumar 8:53 PM anyone using Emacs 25? apparently supports concurrency
Jacob MacDonald 8:53 PM I build Emacs from Git, so that’s … fun Look at the use-package source .
Bob Erb 8:57 PM (when (memq window-system ‘(mac ns)) (exec-path-from-shell-initialize))
Sod Oscarfono 8:57 PM i just stick to nix based systems so that saves me any hassle there
Sod Oscarfono 9:04 PM you seasoned professionals maybe already know this but i recently discovered the ability to export org to open office docs and pdfs from org: C-c C-e o for open office C-c C-e p for pdf.
Jason Lewis 9:05 PM @sridhar, magit is really nice for using git from emacs
Sridhar Ratnakumar 9:06 PM http://www.srid.ca/emacs/ is generated from C-c C-e h h
Sod Oscarfono 9:10 PM hahaha… there’s an app for that -itis!
Bob Erb 9:11 PM there’s a mode for that
Jacob MacDonald 9:18 PM I’m out. Thanks for the great discussion! I hope to have more to contribute in the future.
Sod Oscarfono 9:18 PM do you key forward also in bash?
Sridhar Ratnakumar 9:18 PM Howard – what font do you use in Emacs, per the screenshot in http://www.howardism.org/Technical/Emacs/literate-devops.html ?
Jason Lewis 9:19 PM https://github.com/adobe-fonts/source-code-pro
Sod Oscarfono 9:25 PM workflow/project and time management/ literate programming. maybe a session where we scrutinize/optimise init files ? we spoke a bit about it already but its always good
Sod Oscarfono 9:30 PM i concur.. thanks sacha
Sod Oscarfono 9:32 PM cut and paste ninja over here.. hahaha
Jason Lewis 9:33 PM I’ve still not managed to make the jump to writing much lisp hope to one day
Bob Erb 9:34 PM URL for Sacha’s book?
me 9:34 PM http://sachachua.com/read-lisp-tweak-emacs
Jason Lewis 9:35 PM cool nice tip thanks
Zachary Kanfer 9:36 PM http://emacsnyc.org/videos.html#2014-06
Howard Abrams 9:40 PM http://www.howardism.org/Technical/Emacs/tao-of-emacs.html
Sod Oscarfono 9:40 PM for those who like sublime style layout i use the graphene starter kit which i think bundles “projectile” … i think.. bad memory sorry… anyways it is now my must have next to org-mode
Sod Oscarfono 9:41 PM i show those people org-mode and that usually gets them interseted
me 9:41 PM Sod: Nice!
Sod Oscarfono 9:42 PM for me the prospect of never having to change screens… ie buffers at will
Sod Oscarfono 9:43 PM yea and just being able to fire up a familiar environment on other systems is super pro
Bob Erb 9:46 PM Cat!
Sod Oscarfono 9:46 PM i’m currently experimenting with desktop publishing from emacs
Zachary Kanfer 9:48 PM my init file: https://bitbucket.org/zck/.emacs.d
Sod Oscarfono 9:48 PM org-mode to pdf to bypass creative cloud / scribus.. but learning latex also. ah thats what i needed to hear cheers jason for sure.. i’m glad i stopped by maybe we also look at where is emacs deficient? can we collaborate on a tool, a bug or whatever. good idea. or we spit out our command history for ideas
Jonathan Hill 9:53 PM I missed all the great suggestions.
Bob Erb 9:56 PM Thank you, Sacha.
Sod Oscarfono 9:56 PM thank you all so much
Jason Lewis 9:57 PM thanks Sacha! bye
Zachary Kanfer 9:57 PM bye! Thanks again, Sacha!

Break down what people mean so that you can learn from the specifics

February 19, 2015 - Categories: learning

People are vague. You are vague. I am vague. We say things without digging into the details; we often use the first word that comes to mind. This makes sense — otherwise, we’d spend all our time clarifying.

You can learn a lot from digging into things and making them more specific. (… she writes, self-conscious about the use of the vaguest word of all: “things.”)

I’m fascinated by the challenge of understanding what people mean. I realized this while looking at it from two different directions:

  • When someone give an excuse like “It takes too much time,” what’s the excuse behind the excuse, and how can we address that?
  • When someone gives a compliment like “Thank you for sharing an inspiring post,” what kind of inspiring was it, and how can I get better at that?

Let me start with the example of inspiration, because it’s something I want to translate into concrete feedback and action. I thought about the different responses I have to things that inspire me.

2015-01-14 Understanding different types of inspiration -- index card #inspiration #breakdown

2015-01-14 Understanding different types of inspiration – index card #inspiration #breakdown

  • Idea: Inspiration might mean coming across something I didn’t even know I wanted. Now that I know it’s possible, I can work toward it. (This happens a lot with Emacs, which is why I like reading Planet Emacsen)
  • Clarity: Seeing other people who have reached my goals (or who’ve travelled further down the path) helps me understand those goals better. What do I really want? What are some ways I can get there? I can see that more clearly thanks to other people who have illuminated the path. (Talking to executives helped me realize I don’t want to be one.)
  • Alternatives: Inspiration can help me see different ways of doing something. For example, I looked at ways other people coloured their sketchnotes and picked several techniques to try.
  • Beginning: Inspiration can show me that something is less intimidating than I thought it was. It can help me figure out a good place to start and give me the courage to do it. Programming tutorials help me get through the initial challenges of a new framework.
  • Action: Inspiration can move me to act on something. I already know it’s a good idea and I’ve been meaning to do it, but sometimes I need that extra push. Comments with questions and suggestions help me a lot.
  • Perseverance: Sometimes I can feel lost or discouraged. Remembering that other people have dealt with bigger challenges helps me address my anxiety, focus on my goals or my progress, and keep going. Anecdotes are easy to find.
  • Hero worship: I often come across stuff that looks so awesome, I don’t think I could ever do anything like it. This is the type of “inspiration” we tend to get bombarded with. This is the least useful kind of inspiration, I think. It takes a little work to transform it into the kind of inspiration I can use: I need to reflect on what part of it resonates with and how I can incorporate a little of that into my life.

In what ways do I want to inspire others? How can I get better at that?

  • I like inspiring with ideas, playing with what’s possible. I can get better at that by sharing more of these little tweaks.
  • I think out loud in order to help people with clarity. I sketch out the reasons and consequences of my choices so that other people can learn without necessarily having to make all those choices themselves.
  • I explore and summarize alternatives so that people can use that to figure out what might fit them. I can get better at that by researching what other people have done, generating a few new ideas (possibly by combining other ideas), and testing things out so that I can share my experiences.
  • I break things down to help people with beginning. This is why I like addressing the “Yeah, but…”s, the excuses, the things that get in people’s way. This is also why I like sharing ideas, because that can help pull people forward.
  • I’d love to get better at moving people to action. I haven’t given this as much thought yet, but I think it’s the most important.
  • I don’t have much to share in terms of perseverance. I’ve been very lucky.
  • I definitely don’t want to be in the region of hero worship. It creates too much distance and can shut down action.

Breaking a general statement down into more specific statements helps me learn a lot. I ask myself: “What would I or someone say that captures a different aspect of this?” and I write that down. When I split off different aspects, I can understand those aspects better, and I can understand the whole thing better too.

This technique is good to use for excuses, too.

2015-01-14 Breaking down excuses -- index card #excuses #breakdown

2015-01-14 Breaking down excuses – index card #excuses #breakdown

I’m getting better at catching myself when I give an excuse, drilling down with “Why?” and splitting it out into different excuses. (I guess, thanks to my parents’ patience, my inner toddler never stopped asking questions.) Then I can check if those excuses match what’s getting in my way, or if they don’t resonate with me.

A technique I often use is to imagine other people giving those excuses, since sometimes my mind is perfectly willing to ascribe weakness to others even when it gets defensive about itself. ;)

I like sharing these excuses because that might help other people get over theirs. It’s often easier to recognize one of your excuses instead of trying to articulate it yourself. “That’s it! That’s what’s getting in my way!” you might say. Or even if you don’t find something that completely fits, you might find something close, and then you can ask yourself: “What’s missing here?”

For example, what does it mean when someone says something “takes too much time”? What’s really getting in their way? Here are some ideas I came up with:

2015-01-14 What does it mean when something takes too much time -- index card #excuses #breakdown

2015-01-14 What does it mean when something takes too much time – index card #excuses #breakdown

“Too much time” is too vague to address. On the other hand, if you think something takes too much time because you’re trying to do something complicated, you might be able to ask yourself: “What do I really need? Can I get away with doing something simpler?” and then reduce the task to something small enough for you to get started with.

Break things down. Find the statement behind the statement or the excuse behind the excuse, and you’ll have more to work with. Instead of getting frustrated because you can’t come up with one specific answer, come up with lots of them, and then see if you recognize yourself in any of them. Almost there, but not quite? Come up with more answers, maybe combining aspects of the ones you already have. This will not only help you understand yourself, but also understand others–and help others understand themselves and you.

If you find my posts inspiring, would you consider helping me understand more about what kind of inspiration you get and how I can get better at it? If you’re reading this because you recognize one of your excuses in it, would you mind figuring out what your more specific reasons are and what could address them? I’d love to hear from you in the comments below. Thanks!

Intentionally interrupting momentum and limiting flow

February 20, 2015 - Categories: productivity

You know how when you get going on something, you want to keep going? It’s a great feeling. You’re in the flow, you’re in the zone. Time passes unnoticed. You’re getting stuff done.

I don’t trust that feeling. At least not all the way.

Here’s what got me thinking about this: I had just finished sketchnoting a book. It was fun. I felt accomplished. I wanted to do another sketchnote. In fact, I had already returned the previous book, picked another book from the shelf, and settled in for more drawing.

Then I stopped and asked myself, Is this really what I should be doing next? I was basking in the glow of people’s appreciation on Twitter and I already had all my tools set up for doing the next book, so it made sense to do another sketchnote. But was that really the best use of that moment?

More of the same, or something else?

I still stay up too late programming sometimes. I still spend hours reading. I still write my way past lunch, snapping out of the trance, suddenly starving, late in the afternoon. But I’m getting better at paying attention when part of me pipes up with weird questions.

I dug deeper and found these sub-questions that help me evaluate whether to continue or whether to switch, and what to do next:

  • Am I at the point of diminishing returns or temporary saturation? It’s like the way that if you’re eating your favourite food, there’s a point after which you don’t enjoy it as much. Sometimes giving it a bit of a rest lets you appreciate it more.
  • What could I be neglecting if I focus on this, both in terms of things I need to do and things I want to do? Am I better off spending time with W-, taking care of things around the house, or learning about things that don’t currently give me the same thrill?
  • Is there value in letting this simmer and blend? I can crank out a lot of similar things quickly. Or I can give myself time to learn from people’s feedback and my reflections on process, so that I improve more with each step. Sometimes different things mixed together result in interesting flavours and textures, like the difference between a purée and a stew.
  • It’s easy to do more, but what would enable me to do better? How can I step back and improve the infrastructure for future work? Infrastructure is not exciting, but it’s good to do. It helps to think about specific ways to make something better. What could better mean?
    • Faster?
    • Deeper?
    • Broader?
    • More consistent?
    • More focused?
    • More aligned?
    • More engaging?
    • With better chunking or flow?

Sure, sometimes I’ll lose myself coding or writing or drawing. But sometimes it’s good to interrupt my momentum and ask: What’s important to do, even if it’s not currently as shiny or as fun as what I’m doing?

Do you do this too? What have you learned? What questions do you ask yourself to help you decide what to do next?

Related posts:

Emacs: Peer-to-peer coaching is easier when you use impatient-mode to share your buffer

February 20, 2015 - Categories: emacs

It turns out that coaching someone on Emacs goes really quickly when you can sit side by side. I’ve been helping Sean Miller with Org Mode and Emacs Lisp, with the condition that he has to turn those notes into blog posts. Since he happens to live in the same neighbourhood, this is pretty convenient.

E-mailing snippets back and forth would’ve been tedious, and working on only one of the computers would’ve slowed us down. I remembered Christopher Wellons‘ demonstration of impatient-mode, which lets you display your buffer contents on a web page that automatically updates when you make changes. Here’s what I did:

  1. Install the impatient-mode package.
  2. Call M-x httpd-start.
  3. Configure the firewall to allow incoming connections.
  4. Put the selected buffer into impatient-mode.
  5. Share the link with my IP address (form: http://my.ip.ad.dress:8080/imp/)

Then Sean was able to easily copy text from my screen and try things out on his computer. For example, we dug into org-capture-templates to find out how to create datetree items that were also scheduled on the specified date in the agenda, and we converted his manually-dated headings to include active timestamps so that those would be on the agenda too. It would’ve been a hassle to dictate or re-type the regular expressions, and since we were changing the code rapidly based on our conversation, e-mail would’ve been a hassle. Using impatient-mode worked out well.

What did I like about this two-computer setup? I had access to all my configuration files so that I could easily pick up snippets, and I could demonstrate interesting features as I figured out the code or explained my approach. At the same time, he had access to all of his files and he could take notes in his own buffer. We didn’t have to fuss about with keybindings.

This kind of setup could probably work with a virtual coaching session, too, especially if both people have multiple monitors or if there was an easy way to switch between views.

This is what the webpage looked like:

2015-02-06 11_31_01-sean

Neat, huh?

Weekly review: Week ending February 20, 2015

February 22, 2015 - Categories: review, weekly

Wow, that was actually a pretty full week: an extended family dinner that required dressing up, technical issues with my work laptop and with my cellphone, cooking, dusting off my sewing things, meeting people, contributing to code… This week, I have a couple of social and family things planned. I’m looking forward to digging into sewing a little more, too, so that I can practise while I remember. =)

2015-02-23b Week ending 2015-02-20 -- index card #weekly

2015-02-23b Week ending 2015-02-20 – index card #weekly

Blog posts

Sketches

Definitely slowed down when I changed my target from five cards a day to one card.

Link round-up

output

Focus areas and time review

  • Business (24.0h – 14%)
    • Earn (10.5h – 43% of Business)
    • Build (11.6h – 48% of Business)
      • Drawing (8.0h)
      • Delegation (0.0h)
      • Packaging (0.6h)
        • Upload to Createspace
      • Paperwork (0.1h)
        • File federal annual return
      • Figure out why library isn’t renewing
      • Fix color detection
      • Fix e-mail relay
    • Connect (1.9h – 7% of Business)
      • Talk to SAP about Quantified Self
      • Attend Sketchnote Hangout
  • Relationships (19.1h – 11%)
    • Help Sean with Emacs
    • Organize get-together with Linda
    • Print tickets
  • Discretionary – Productive (13.2h – 7%)
    • Emacs (6.2h – 3% of all)
      • Host Emacs Hangout
      • Look into bounty for code coverage
      • Set up engines for searching
      • Revise transcript for Magnar Sveen
      • Integrate journal with review
    • Read chapter 3 of Intermediate Japanese
    • Back to sewing!
      • Print out Colette pattern
      • Find 1.5 yards in stash
      • Choose additional fabrics for Sorbetto top
    • Buy Moto G from Staples
      • Set up new phone
    • Read chapter 4 of Intermediate Japanese
    • Review Createspace
    • Investigate Powershell
    • Writing (3.0h)
  • Discretionary – Play (2.8h – 1%)
    • Read synopsis for Die Walkure, watch it
  • Personal routines (35.8h – 21%)
  • Unpaid work (13.5h – 8%)
  • Sleep (59.6h – 35% – average of 8.5 per day)

Sketched Book – So Good They Can’t Ignore You: Why Skills Trump Passion in the Quest for Work You Love – Cal Newport

February 23, 2015 - Categories: career, visual-book-notes

It seems almost given that you should follow your passion, but what if you don’t know what that is? Or what if following your passion prematurely can lead to failure?

In So Good They Can’t Ignore You: Why Skills Trump Passion in the Quest for Work You Love (2012), Cal Newport gives more practical advice: Instead of jumping into a completely unknown field to follow a passion which might turn out to be imaginary, look for ways to translate or grow your existing capabilities. Develop a craftsman’s mindset so that you can improve through deliberate practice. Often it’s not a lack of courage that holds you back, but a lack of skill. As you build career capital, you can develop your appreciation of a field, possibly leading to a clear passion or a mission. You also can make little bets that help you move closer to the cutting edge so that you can make something remarkable. This qualifies you to do greater work that involves creativity, positive impact, and good control.

I’ve sketched the key points of the book below to make it easier to remember and share. Click on the image for a larger version that you can print if you want.

2015-01-03 Sketched Book - So Good They Can't Ignore You - Why Skills Trump Passion in the Quest for Work You Love - Cal Newport

I agree with many of the ideas in the book, although I’m not entirely sure about the dichotomy that Newport sets up between passion and craftsmanship. Many of the passion-oriented books I’ve read encourage you to try out your ideas before making major changes to your life – for example, by working on your own business on weekends or by taking a second job. Very few people advocate leaping into the unknown, and if they do, they recommend having plenty of savings and a network of mentors, potential clients, and supporters. So the book comes down a little harshly on a caricature of the other side rather than the strongest form of the opposing side’s argument.

Amusingly enough, although the book describes What Color is Your Parachute as “the birth of the passion hypothesis”, I remember coming across the idea of gradually transitioning to a new field by first exploring something more related to your current one in What Color is Your Parachute, which recommends it as a way of lowering risk and clarifying what you want. I also remember the What Color is Your Parachute book to be less about impulsively following your whims and more about identifying and exploring the skills that gave you feelings of accomplishment.

Anyway, I think you start with curiosity. Then you develop a little skill. This makes you more curious, which helps you learn more, and so on. That–combined with feedback and appreciation–helps fan a spark of interest into a flame. So it’s not really that you start with passion or that you spend many years developing your craft before you can enjoy it, but rather that you gradually figure out both. (I have a feeling this somewhat agrees with what the book would’ve been if it weren’t trying so hard to distinguish itself from advice about passion.)

We just don’t normally express ourselves that way, I guess. It’s almost as if people are expected to either have strong convictions about their life’s work, or to be lost at sea. If you say, “I’m still figuring things out,” it’s like you’re a drifter. If you say, “I’m not passionate about my work right now,” it’s like you’re just going through the motions. I don’t agree with this, which is why I like the book’s emphasis on forming hypotheses about what you want to do, and testing that with little bets that also develop your skills. (This is particularly apropos, since J- will be choosing a university or college course soon.)

Anyway, after reading this book, the specific take-away I’m looking forward to following up on is that of exploring adjacent possibilities more systematically. How can I move closer to the edge of discovery in myself and in the fields I’m interested in, and what new areas have been opened up? I’ve been thinking about designing more focused projects that result in things I can measure and share. That’s similar to the middle layer of the pyramid that Newport suggests:

  1. Tentative research mission – figuring out what you want
  2. One-month exploratory projects with concrete results
  3. Background results

On the whole, the book has a good message. You don’t have to love something to get good at it. Sometimes (often?) getting good at something will help you like it or even love it.

But the book feels a little… uneven, I guess? The anecdotes feel like they’re making too-similar points. The ones about failure feel unsympathetic and hand-picked for straw-man arguments. I imagine most businesses are not started out of the blue because of some grand passion. People prepare, they minimize risk, they work hard. Passion for something – either the work, the customers, or even just the life that’s afforded by the work – pulls them through the toughest parts and keeps them going. Sometimes they succeed for reasons unrelated to their skills; sometimes they fail for reasons unrelated to their passions. Sometimes things just happen. There are everyday businesses that don’t have the creativity, grand positive impact, or full control that are idealized in the book, but that still give people enjoyable lives. I think that the techniques and ingredients described by Newport in his book are good, but they are not essential to an awesome life.

On a somewhat related note, in the past few years, I’ve been learning to let go of the desire for either passion or mastery, Instead, I’m embracing uncertainty and beginner-ness, setting aside time for things I don’t quite love yet. It’s a challenging path, but it tickles my brain. =)

Anyway, if you’re looking for a counterpoint to the usual “Follow your passion!” advice and you want to check out So Good They Can’t Ignore You, you can get it from Amazon (affiliate link) or your favourite source for books. Like this sketch? Check out sketchedbooks.com for more. Feel free to share – it’s under the Creative Commons Attribution License, like the rest of my blog.

Enjoy!

Learn how to take notes more efficiently in Org Mode

February 23, 2015 - Categories: emacs, org

How do you take notes in Org? Are you buried in a heap of uncategorized notes? Do you manually open the right file and navigate to the right heading? Are you mystified by org-capture and org-refile? Here’s a path that can help you learn how to more efficiently take (and organize!) notes in Org Mode.

  1. Set up a keyboard shortcut to go to your main Org file
  2. Use org-refile to file or jump to headings
  3. Use org-capture to write notes quickly
  4. Define your own org-capture templates for greater convenience
  5. Pull in additional information

Step 1. Set up a keyboard shortcut to go to your main Org file

Instead of using C-x C-f (find-file) all the time, set up shortcuts to jump to the Org files you use the most. This way, you can easily type that keyboard shortcut, go to the end of the file, and add your note. Here’s some sample code that sets the C-c o shortcut to open organizer.org in your home directory. You can add it to your ~/.emacs.d/init.el and then call M-x eval-buffer to load the changes.

(global-set-key (kbd "C-c o") 
                (lambda () (interactive) (find-file "~/organizer.org")))

Alternatively, you can use registers, which are Emacs data structures that can hold text, file references, and more. The following code sets the o register to organizer.org in your home directory:

(set-register ?o (cons 'file "~/organizer.org"))

You can then jump to it with C-x r j (jump-to-register), specifying o at the prompt.

Once you’re in your Org file, you can use M-> (end-of-buffer) to go to the end of the file, or you can use C-s (isearch-forward) to search for some text.

You’ll still need to switch back to your original buffer or window configuration when you’re done, but that’s something you can fix when you learn how to use org-capture.

Step 2. Use org-refile to file or jump to headings

The next improvement is to use org-refile to move the current subtree to a specified heading, or jump to one without moving any text. This will let you quickly go to a project or task from anywhere in Org Mode.

By default, org-refile will show you only the top-level headings of the current file. Let’s configure it to show you headings from all your agenda files. You can use M-x customize-variable to change org-refile-targets. Click on the INS button, then click on Value menu next to Identify target headline by. Change this to Max level number. In the Integer field, fill in a suitably high number, like 6. This is the maximum depth of headings that will be shown.

If you prefer to set your variables using Emacs Lisp, here’s the code that you can add it to your ~/.emacs.d/init.el. Call M-x eval-buffer to load the changes.

(setq org-refile-targets '((org-agenda-files . (:maxlevel . 6))))

Be sure to add your main Org Mode file to your agenda list. You can do so by going to the file and typing C-c [ (org-agenda-file-to-front), or by setting the org-agenda-files variable.

The standard Emacs completion interface isn’t as friendly as it could be. I use the Helm package to make it easier to select and complete input. Since Helm can be a little complex, you may want to start with ido-mode instead. Here’s how you can set Ido up to use with Org Mode:

(ido-mode)
(setq org-completion-use-ido t)

Once you’ve set up your org-refile-targets, your agenda files, and either Helm or Ido, you can get the hang of using org-refile. The standard keyboard shortcut for org-refile is C-c C-w when you’re in an Org Mode buffer. org-refile can do different things depending on how you call it:

  • By default, it moves the current subtree to the specified location.
  • If you call it with the prefix argument C-u (like so: C-u C-c C-w), it jumps to the specified location instead of moving the current subtree.
  • If you call it as C-u C-u C-c C-w, it jumps to the previous refiling location.

First, practise using it with the prefix argument (C-u C-c C-w) to jump to a location. Once you’ve gotten the hang of that, go to some of your uncategorized entries and use org-refile without the prefix argument (just C-c C-w) to move the entries to the right place.

org-refile gives you a quick way to jump to a heading, but you still have to find your way back to whatever you were working on before you wanted to take a note. After you’re comfortable with refiling notes to the right place, move on to learning how to use org-capture to quickly take notes from anywhere.

Step 3. Use org-capture to write notes quickly

org-capture can help you take notes quickly by popping up a window or leading you through prompts. When you’re done taking the note, it will return you to whatever you were looking at before you started. In order to take advantage of this, though, you’ll need to customize org-capture.

The Org Mode manual recommends giving org-capture a global keyboard shortcut such as C-c c.

(global-set-key (kbd "C-c c") 'org-capture)

You can use M-x customize-variable to set org-default-notes-file to the filename you would like notes to be saved to, or set it in Emacs Lisp code like this:

(setq org-default-notes-file "~/organizer.org")

Make sure that the file exists and is automatically opened in Org Mode.

If you type C-c c, org-capture will display a prompt. t is a simple task template, and C will show you the customization interface for org-capture-templates.

Let’s start with t. It will show you a buffer with a simple TODO entry. You can fill in the rest of the details, use C-c C-s (org-schedule) to schedule it for a particular day, set the deadline with C-c C-d (org-deadline), etc. You can change the TODO keyword or delete it.

When you’re done, type C-c C-c to automatically save it to your default notes file (as specified by org-default-notes-file). Changed your mind? Cancel with C-c C-k. After either C-c C-c or C-c C-k, you should be back to whatever it was that you were working on.

Practise using C-c c (org-capture) to quickly jot down several tasks or notes. Then go to your notes file and use C-c C-w (org-refile) to move the notes to the right place.

You can also refile the notes right from the capture buffer. Instead of typing C-c C-c to finish your note, use C-c C-w to refile it.

Get the hang of using org-capture to take notes, organizing them every so often (maybe at the end of your day, or once a week?) or refiling them as you go.

Step 4. Define your own org-capture-templates for greater convenience

If you find yourself capturing different kinds of notes often or you want to capture in another format (table entry? list item?), invest the time in customizing org-capture-templates. In the beginning, you might find the Customize interface you get from M-x customize-variable org-capture-templates to be easier to work with than setting the values in plain Emacs Lisp, since the Customize interface lists the options. Read the documentation and look at examples of how other people have configured their org-capture-templates for more ideas. I have quite a few templates defined in my config, and http://doc.norang.ca/org-mode.html has a number of templates too.

Step 5. Pull in additional information

org-capture and org-refile are great when you’re at your computer, but what if you’re away? Quite a few people use MobileOrg to take quick notes on the go. I haven’t gotten around to setting that up for my workflow properly; instead, I use Evernote to jot quick notes on my phone. As part of my weekly review process, I look at the notes in my Evernote inbox and copy them into Emacs as needed.

You can manually copy information from your preferred non-Emacs note-taking tools, or you can figure out an automatic way of doing so. For example, I have some code to copy Evernote notes titled “Journal” into an Org Mode file structured by year-month-day.

Tweak your workflow!

Here’s a quick sketch showing some of your workflow options when it comes to capturing and organizing information with Org Mode. Which combination do you prefer, and how could you make it even better?

2015-02-09 Capturing Org Mode notes more efficiently -- index card #emacs #org #capture #refile

2015-02-09 Capturing Org Mode notes more efficiently – index card #emacs #org #capture #refile

Different dimensions of scaling up

February 24, 2015 - Categories: business, experiment

When I was coming up with a three-word life philosophy, learn – share – scale felt like a natural fit for me (Nov 2012). Learning and sharing were pretty straightforward. I thought of scaling in terms of sharing with more people, sharing more effectively, building tools to help people save time, connecting the dots among people and ideas, and getting better at getting better.

A recent conversation got me thinking about scale and the different dimensions that you can choose to scale along. For example, startups often talk about scaling up to millions of users; that’s one kind of scale. There’s saving people five minutes and there’s launching people into space; that’s another kind of scale.

What kinds of scale I see myself exploring? Here’s a rough categorization. (With ASCII art!)

Category Left Where I am Right
Size “This might save someone five minutes” X--------- “I’m going to help people get into space.”
People “This might help 1,000 people.” -X-------- “I want to help 1 billion people.”
Time “This might help 1,000 people over ten years.” X--------- “I want to help 1,000 people tomorrow.”
Team “I’m going to gradually develop my skills.” -X-------- “I’m going to build a team of people.”
Performance “We’ll start by doing it manually.” -X-------- “I want to get to sub-second response.”
Focus “I’m going to explore and see what comes up.” X--------- “I’m going to focus on one idea and knock it out of the park.”
Variety “I’ll put lots of things out there and people can tell me what they value.” --X------- “I’ll choose what to put out there and connect with people who need that.”
Demand “I’ll come up with the idea and find the market.” ----X----- “I’ll find the market and then come up with an idea.”
Pace “If I grow slowly and steadily, I’ll build a solid foundation.” --X------- “If I grow quickly, I’ll have momentum.”
Time/money tradeoff “I’m going to make my time more valuable.” ---------X “I’m going to make something outside the time=money equation.”
Risk “If I mess up, things are still okay.” X--------- “If I mess up, people die.”
Empowerment “I’m going to do things myself.” -------X-- “I’m going to support other people.”
Teaching “I will build systems so that I can catch fish for more people.” --------X- “I’m going to teach more people how to catch their own fish.”

Hmm. This is similar to those visions of wild success I occasionally sketch out for myself as a way to test my ideas and plans. Wild success at scaling up for me (at least along my current interests and trajectory) probably looks like:

  • Learning about a wide variety of interesting things
  • Writing, drawing, and publishing useful notes
  • Getting better at organizing them into logical chunks like books and courses so that I can help more people (including people who don’t have the patience to wade through fifty blog posts)
  • Reaching more people over time through good search and discovery in my archives
  • Getting updates to more people through subscriptions and interest-based filters

What would an Alternate Universe Sacha be like? I’d probably keep a closer eye out for problems I run into or that people I care about run into, and practise building small websites, tools, systems, and businesses to solve those problems. I might start with trying to solve a problem for ten people, then a hundred, then a thousand, then ten thousand and more. I might look for medium-sized annoyances so that it’s worth the change. I might build tools instead of or in addition to sharing my notes. (After all, The $100 Startup points out that most people don’t want to learn how to fish, they just want to eat fish for dinner and get on with the rest of their lives.)

Hmm. Alternate Universe Sacha makes sense too. Since I’m doing fine in terms of Normal Universe Sacha and scaling up here is mostly a matter of gradual accumulation, it might be interesting to experiment with Alternate Universe Sacha sometime. Maybe during the next two years of this 5-year experiment, or in a new experiment after that?

It’s good to break down a word like “scale” and figure out the different dimensions along which you can make decisions. Are you working on scaling up? If so, what kind of scale are you working towards?

Using Emacs to prepare files for external applications like Autodesk Sketchbook Pro

February 25, 2015 - Categories: emacs, org

To make it easier to draw using Autodesk Sketchbook Pro on my laptop (a Lenovo X220 tablet PC), I’ve created several templates with consistent dot grids and sizes. Since I want to minimize typing when I’m drawing, I wrote a couple of functions to make it easier to copy these templates and set up appropriately-named files. That way, I can save them without the grid layer, flip between files using Sketchbook Pro’s next/previous file commands, and then process them all when I’m ready.

Index cards

I’ve been experimenting with a habit of drawing at least five index cards every day. Here’s a function that creates five index cards (or a specified number of them) and then opens the last one for me to edit.

(defvar sacha/autodesk-sketchbook-executable "C:/Program Files/Autodesk/SketchBook Pro 7/SketchBookPro.exe")
(defun sacha/prepare-index-cards (n)
  (interactive (list (or current-prefix-arg 5)))
  (let ((counter 1)
        (directory "~/Dropbox/Inbox")
        (template "c:/data/drawing-templates/custom/0 - index.tif")
        (date (org-read-date nil nil "."))
        temp-file)
    (while (> n 0)
      (setq temp-file
            (expand-file-name (format "%s-%d.tif" date counter)
                              directory))
      (unless (file-exists-p temp-file)
        (copy-file template temp-file)
        (setq n (1- n))
        (if (= n 0)
            (shell-command
             (concat (shell-quote-argument sacha/autodesk-sketchbook-executable)
                     " "
                     (shell-quote-argument temp-file) " &"))))
      (setq counter (1+ counter)))))

Afterwards, I call sacha/rename-scanned-cards function to convert the TIFFs to PNGs, display the files and ask me to rename them properly.

Rename scanned index cards

(defun sacha/rename-scanned-cards ()
  "Display and rename the scanned files."
  (interactive)
  (when (directory-files "~/Dropbox/Inbox" t "^[0-9]+-[0-9]+-[0-9]+-.*.tif")
    ;; Convert the TIFFs first
    (apply 'call-process "mogrify" nil nil nil "-format" "png" "-quality" "1"
           (directory-files "~/Dropbox/Inbox" t "^[0-9]+-[0-9]+-[0-9]+-.*.tif"))
    (mapc (lambda (x)
            (rename-file x "~/Dropbox/Inbox/backup"))
          (directory-files "~/Dropbox/Inbox" t "^[0-9]+-[0-9]+-[0-9]+-.*.tif")))
  (mapc (lambda (filename)
          (find-file filename)
          (delete-other-windows)
          (when (string-match "/\\([0-9]+-[0-9]+-[0-9]+\\)" filename)
            (let ((kill-buffer-query-functions nil)
                  (new-name (read-string "New name: "
                                         (concat (match-string 1 filename) " "))))
              (when (> (length new-name) 0)
                (revert-buffer t t)
                (rename-file filename (concat new-name ".png"))
                (kill-buffer)))))
        (directory-files "~/Dropbox/Inbox" t "^[0-9]+-[0-9]+-[0-9]+-.*.png")))

I might tweak the files a little more after I rename them, so I don’t automatically upload them. When I’m happy with the files, I use a Node script to upload the files to Flickr, move them to my To blog directory, and copy Org-formatted text that I can paste into my learning outline.

Automatically resize images

The image+ package is handy for displaying the images so that they’re scaled to the window size.

(use-package image+
 :load-path "~/elisp/Emacs-imagex"
 :init (progn (imagex-global-sticky-mode) (imagex-auto-adjust-mode)))

Get information for sketched books

For sketchnotes of books, I set up the filename based on properties in my Org Mode tree for that book.

(defun sacha/prepare-sketchnote-file ()
  (interactive)
  (let* ((base-name (org-entry-get-with-inheritance  "BASENAME"))
         (filename (expand-file-name (concat base-name ".tif") "~/dropbox/inbox/")))
    (unless base-name (error "Missing basename property"))
    (if (file-exists-p filename)
        (error "File already exists")
        (copy-file "g:/drawing-templates/custom/0 - base.tif" filename))
      (shell-command (concat (shell-quote-argument sacha/autodesk-sketchbook-executable)
                             (shell-quote-argument filename) " &"))))

By using Emacs Lisp functions to set up files that I’m going to use in an external application, I minimize fussing about with the keyboard while still being able to take advantage of structured information.

Do you work with external applications? Where does it make sense to use Emacs Lisp to make setup or processing easier?

Tell the difference between diminishing returns and compounding growth when it comes to investing in skills

February 26, 2015 - Categories: learning, productivity

When is it worth improving a skill you’re already good at, and when should you focus on other things?

I started thinking about this after a conversation about what it means to master the Emacs text editor. Someone wondered if the additional effort was really worth it. As I explored the question, I noticed that skills respond differently to the investment of time, and I wondered what the difference was.

For example, going from hunt-and-peck typing to touch-typing is a big difference. Instead of having to think about typing, you can focus on what you want to communicate or do. But after a certain point, getting faster at typing doesn’t give you as much of a boost in productivity. You get diminishing returns: investing into that skill yields less over time. If I type a little over 100 words per minute, retraining bad habits and figuring out other optimizations so that I can reach a rate of 150 words per minute isn’t going to make a big difference if the bottleneck is my brain. (Just in case I’m wrong about this, I’d be happy to hear from people who type that fast about whether it was worth it!)

Some skills seem shallow. There’s only so much you can gain from them before they taper off. Other skills are deeper. Let’s take writing, for instance. You can get to the point of being able to competently handwrite or type. You can fluently express yourself. But when it comes to learning how to ask questions and organize thoughts I’m not sure there’s a finish line at which you can say you’ve mastered writing. There’s always more to learn. And the more you learn, the more you can do. You get compounding growth: investing into that skill yields more over time.

I think this is part of the appeal of Emacs for me. Even after more than a decade of exploring it and writing about it, I don’t feel I’m at the point of diminishing returns. In fact, even the small habits that I’ve been focusing on building lately yield a lot of value.

No one can objectively say that a skill is shallow or deep. It depends on your goals. For example, I think of cooking as a deep skill. The more you develop your skills, the wider your possibilities are, and the more enjoyable it becomes. But if you look at it from the perspective of simply keeping yourself fueled so that you can concentrate on other things, then it makes sense to find a few simple recipes that satisfy you, or outsource it entirely by eating out.

It’s good to take a step back and ask yourself: What kind of value will you get from investing an hour into this? What about the value you would get from investing an hour in other things?

Build on your strengths where building on those strengths can make a difference. It can make a lot of sense to reach a professional level in something or inch towards becoming world-class. It could be the advantage that gets you a job, compensates for your weakness, opens up opportunities, or connects you to people. On the other hand, you might be overlearning something and wasting your time, or developing skills to a level that you don’t actually need.

When you hit that area of diminishing returns – or even that plateau of mediocrity – you can think about your strategies for moving forward. Consider:

  • What kind of return are you getting on your time? (understanding the value)
  • Is there a more effective way to learn? (decreasing your input)
  • Can you get more value out of your time from this skill or other skills? (increasing your output)
  • If you learn something else first,
    • will that make more of a difference in your life?
    • will that help you when you come back to this skill?

These questions are helping me decide that for me, learning more about colours is worthwhile, but drawing more realistic figures might not be at the moment; learning more about basic Emacs habits is better than diving into esoteric packages; and exploring questions, doing research, and trying things out is likely to be more useful than expanding my vocabulary. I’ll still flip through the dictionary every now and then, but I can focus on developing other skills.

How about you? What are you focusing on, and what helps you decide?

Related:

Trying on common goals

February 27, 2015 - Categories: life, planning

I’ve been thinking a lot about goals lately, thanks to a few discussions with friends. I don’t feel particularly driven by big, hairy, audacious goals (BHAGs). Instead, I focus on small wins and low-hanging fruit, accumulating progress. I don’t have a clear picture of exactly where I’d like to be in 40 years. Instead, I have a multiplicity of posibilities.

But maybe I’m not a special snowflake, and I can learn from the kinds of goals many people have. It’s fun to put on a different hat and try things out. By trying on common goals instead of rejecting them off-hand, maybe I’ll figure out more about what I really want and how to get there.

2015-01-21 What if I tried on common goals -- index card #popular-goals

2015-01-21 What if I tried on common goals – index card #popular-goals

Aristotle says that happiness is the ultimate goal.

2015-01-21 Playing with popular goals - Happiness -- index card #popular-goals

2015-01-21 Playing with popular goals – Happiness – index card #popular-goals

I find it helpful to think of happiness as a response to life instead of as an external state to pursue, so this goal feels a little odd to me. But it’s interesting to imagine a happy 90-year-old Sacha and what that life would be like. I think it involves building specific warm-and-fuzzy memories, maintaining a good perspective, and minimizing stressors.

Let’s take a look at other typical goals: wealth, power, fame, and knowledge/experiences.

2015-01-21 Popular goals - Wealth -- index card #popular-goals

2015-01-21 Popular goals – Wealth – index card #popular-goals

This might be the easiest of goals to desire, since it’s popular and measurable. Based on my reading, I imagine that conspicuous wealth will bring more problems than I’d like, so I don’t aspire to high-flying lifestyles. I value freedom, so it makes sense to have a financial buffer and to avoid becoming too accustomed to luxuries. That increases my security, which allows me to do more experiments. (I’m already privileged as it is!) Tools can be good investments, and it’s great to be able to strategically use money to make a bigger difference. Money also makes decisions easier: instead of worrying about cutting into your safety margin, you can try things out and see what happens.

2015-01-21 Popular goals - Power -- index card #popular-goals

2015-01-21 Popular goals – Power – index card #popular-goals

Power includes determining your life and influencing other people’s lives. I definitely care about having power over myself, but I’m not driven by the idea of making big decisions that affect thousands of people’s lives.

2015-01-21 Popular goals - Fame -- index card #popular-goals

2015-01-21 Popular goals – Fame – index card #popular-goals

I think I care more about depth of connection (tribe) than about breadth of fame (celebrity). I’m not sure about legacy. On one hand, it’s good to do things that are remarkable enough to help or inspire people throughout the years. On the other hand, what do we do that will matter after a century, and how can we get things to even be remembered for that long? I’ll think about this a little more while reading history. What makes essays resonate with me even after all that time, and how can I also reach across the years?

2015-01-21 Popular goals - Knowledge or experience -- index card #popular-goals

2015-01-21 Popular goals – Knowledge or experience – index card #popular-goals

I like the goal of learning more so that I can appreciate life better, maintain my independence, contribute meaningfully, and make better decisions.

I focus more on knowledge in the sketch above, but I think the popular approach to this goal is to focus on experiences. Bucket lists are practically all about experiences: seeing this country, climbing that mountain. That’s why travel is so big, I guess. What kinds of experiences would I like to have if I were to travel more?

2015-01-24 Thinking about collecting experiences -- index card #goals #experiences

2015-01-24 Thinking about collecting experiences – index card #goals #experiences

I currently don’t like traveling, but it’ll probably be less of a hassle now that I’ve gotten my Canadian passport sorted out.

2015-01-23 What would help me enjoy travel -- index card

2015-01-23 What would help me enjoy travel – index card

Still, with J- in school and three cats at home, it’s hard to plan. Maybe this will be something for later.

2015-01-25 On the other hand - travel -- index card #travel #learning #cooking

2015-01-25 On the other hand – travel – index card #travel #learning #cooking

Besides, I’m not totally convinced that travel is the best way to learn these things. It was fun being immersed in a language and going to local shops. But traveling to learn more about cooking seems a little wasteful, since airfare alone will buy lots of ingredients (and even personalized cooking classes). Staying home means I focus on cooking dishes I can enjoy long-term, and I can take advantage of our kitchen setup. So there’s an advantage to staying home, too.

What about other intrinsic goals?

2015-01-21 Popular goals - Health -- index card #popular-goals

2015-01-21 Popular goals – Health – index card #popular-goals

Health makes sense, since your enjoyment of many things can be curtailed by poor health. I probably won’t strive for buffed-up awesomeness, though. I’m mostly focusing on functioning all right, with maybe a little effort here and there to do a bit better.

2015-01-21 Popular goals - Meaning -- index card #popular-goals

2015-01-21 Popular goals – Meaning – index card #popular-goals

People want to make a difference at work and in their relationships. Many people feel that their work doesn’t matter a lot. Despite the abstraction of my work (I move bits around? I crunch numbers and questions? I write tools for a tiny, tiny fraction of the world?), I’m pretty good at convincing myself I have a small impact. =) Do I want to trade up by focusing on work that has a bigger impact (either for more people, or deeper in people’s lives? I don’t know yet.

2015-01-21 Popular goals - tranquility, equanimity -- index card #popular-goals

2015-01-21 Popular goals – Tranquility, equanimity – index card #popular-goals

I like this goal the most. Stoicism tells me that it’s the one thing under my control. It transforms the ups and downs of life into opportunities for growth. It doesn’t mean that I can’t enjoy things, I just shouldn’t get so attached to them that I become afraid. It doesn’t mean that I can’t be sad, it means I can try to take a different perspective on things.

Hmm. Trying on popular goals helped me take advantage of the collective centuries (millennia?) of thought that have gone into those goals. I still have to come up with my own specifics, but it’s good to be able to quickly test what resonates with me instead of trying to formulate everything by myself. If tranquility, happiness, and knowledge are my major goals (with health as the goal I know I should have), I can focus on coming up with specific ways I want to explore those areas.

Do you resonate with some common goals? What are they, and what are you learning from that?