What could I do if I showed up in a bigger way?

I’m reading Ben Arment’s Dream Year: Make the Leap From a Job You Hate to a Life You Love (2014), and there’s a reminder in here about the choice between the fear of failure and the fear of insignificance. “Choose the fear of insignificance,” the author says. And I think: Hmm, actually, I’m okay with insignificance (or minor minor minor significance, in any case). Stoicism reminds us that after thousands of years, very little of this will matter. But maybe I should care a little bit. Since I’ve done all this work to minimize the fear of failure anyway. I might as well play on that side of the equation.

I’ve been thinking about this recently because I’m wondering whether I should take this experience in social business and make something bigger out of it. I could probably negotiate something with my main consulting clients so that we could get ideas or even code out in the wider world, or I could independently develop something that they and other people would be welcome to use. I haven’t quite sorted out what that would be like yet, but I imagine it would start off as open source components, then possibly consulting and product development once I’ve established a reputation in that community.

Of social business, Emacs, and blogging, though, I like Emacs the most. There’s something about it. I like the community a lot: interesting people doing interesting things, and a remarkably flexible platform that has kept me curious and fascinated for years. If I were to show up in a bigger way, I suppose that would involve writing more guides, and maybe understanding enough of the core of complex things like Org and Emacs itself so that I could contribute to the codebase. I tend to focus on workflow more than bugfixes or new features, though… I think there’s something interesting in how people use the same things in such different ways. Maybe I’ll write more about my evolving workflow, using that and personal projects as excuses to keep tweaking.

As for blogging, there are bucketloads of people who are happy to give other people advice on what to do and how to do it. I’m interested in keeping it unintimidating and useful for personal learning, but I’m more excited about and curious about those other two causes. Still, I can show by example, and I can offer advice and encouragement when people ask.

What are the differences between this slightly bigger life and my current one? I think part of it is related to the way that I’ve been minimizing my commitments during this 5-year experiment, being very careful about what I say yes to and what I promise my time towards. Part of it is taking the initiative instead of waiting for requests or sparks of inspiration. Part of it is working more deliberately towards a goal. It’s not going to be a big big life, but it might be interesting to experiment with.

The Google Chrome extensions I use

Richard wanted to know which Google Chrome extensions I use. Here’s the list:

  • AdBlock: I still see ads, but I probably see fewer ads than before.
  • AngularJS Batarang: Great for debugging AngularJS applications.
  • Any.do Extension: I use this on my phone. Still thinking about how I can get something working with Org Mode and my phone. Might replace this with MobileOrg.
  • Application Launcher for Drive (by Google): I hardly use this, but it seems like a good idea.
  • Boomerang Calendar: Recognizes dates in e-mails and makes it easy to create appointments. Might not need it after Google improves its interface some more.
  • Boomerang for Gmail: Great for delaying replies, following up in case of non-response, or getting things to turn up in your inbox after a specified delay.
  • Capture Webpage Screenshot – FireShot: Can come in handy for full-page screenshots.
  • CSS Reloader: Handy during development.
  • Don’t track me Google: I use this mainly to remove the annoying Google redirection that happens when you copy links from search results without clicking through them. This way, I can copy and paste cleaner URLs.
  • Dragon Web Extension: Theoretically allows me to use speech recognition to control Chrome. I still haven’t gotten Dragon Naturally Speaking to be part of my workflow.
  • Evernote Web Clipper: Evernote is a great way to stash things I may want to refer to later.
  • Feedly: The extension lets me quickly subscribe to blogs. I prefer reading them on my phone, though.
  • Google Docs: Handy for sharing documents and editing them online.
  • Hangouts: I use this for video chats.
  • LastPass: Free Password Manager: Handy for storing and sharing passwords.
  • RescueTime for Chrome & ChromeOS: Tracks the sites I visit. I’m not doing anything with this data yet.
  • Rikaikun: Helps me learn Japanese when I hover over kanji.
  • RSS Subscription Extension (by Google): Displays a feed icon in the address bar if the site has alternate links to feeds. This way, I don’t have to hunt around for the right link.
  • Send from Gmail (by Google): Makes Gmail the default handler for e-mail addresses.
  • Tampermonkey: For injecting the Javascript that Skewer needs so that I can interact with webpages from Emacs. Could probably get away with using a bookmarklet instead. This tends to slow down Chrome, so I enable it only when I’m planning to develop.

What extensions do you use?

Dealing with uncertainty one step at a time

Sometimes it’s hard to plan ahead because there are just too many factors to consider, too many things I don’t know, too many divergent paths. I can come up with different scenarios, but I can’t figure out a lot of things that would make sense in all the likely scenarios. Some of the scenarios are exciting, but some of them are also scary. They’re hard to hold in my mind. They fight my imagination. I can’t plan straight for these. I can’t come up with step 1, step 2, step 3. At best, I can come up with if-then-elses, but I still have to wait and see how things turn out.

Sometimes it’s easier to take life one day at a time, because if I think about too large a chunk, I start getting lost. Sometimes it’s better to not focus on everything that’s needed, just what’s needed right now.

wpid-2014-11-11-Dealing-with-uncertainty-one-step-at-a-time.png

It rattles me a little bit because I’m more used to seeing clearer paths. Or do I only think that I’m used to that?

Let me try to remember when I felt that sense of clarity and certainty. I was certain about taking computer science; I loved programming even as a kid. I was certain about teaching after graduation; I loved helping people learn. I was certain about taking a technical internship in Japan; it was an interesting thing to do. I was certain about taking my master’s degree; it was a logical next step, necessary for teaching, and the research was interesting.

I was not certain about being in Canada, and I was often homesick during my studies. But I was certain about W-, and now this place also feels like home. I was certain about IBM and about the people and ideas I wanted to work with. I was certain about saving up an opportunity fund so that I could explore other things someday. I was certain about starting this 5-year experiment with semi-retirement.

So I’m familiar with what it’s like to plan for a chunk of certainty – half a year, four years, decades. It feels good when a plan comes together, when I can see how each step leads to a future I’ve already lived in my head.

I am certain, now, that I’m going in roughly the right direction. I don’t know exactly how it will work out, but I know that it will be interesting.

Ah! There it is, I think, the thing I’m trying to grasp. The future Sacha of this five-year experiment is fuzzy in my head. That evaluation point is only two years away now, and I should be able to imagine her more clearly. But aside from a few abstract characteristics (future Sacha is a better developer and writer, future Sacha continues to be happy, future Sacha gets to work on what she wants), I don’t have a good sense of her yet – not with the same solidity of past futures. I’m not sure what to put on that Conveyor Belt of Time (as Mr. Money Mustache puts it) aside from generically-useful gifts to my future self: decent finances, relationships, skills.

Circling back to the metaphor that emerged while I was drawing and writing my way through this question, I suppose this is like the difference between hiking along a trail with a view – or even unmarked ground, but with landmarks for orienting yourself – versus exploring the woods. Not that I know much of the latter; I’ve never been lost in the woods before, never strayed from the safety of a trail or the sight of a road. (Well, except maybe that one time we were hiking along the Bruce Trail and got turned around a little bit, and we ended up scrambling up a slope to find the trail we really wanted to be on.)

I can learn to enjoy exploring, knowing that in the worst-case scenario, I’ve got the figurative equivalent of supplies, a GPS, emergency contacts, backup batteries and so on. I can learn to enjoy observing the world, turning questions and ideas over, noticing what’s interesting about them, perhaps cracking things open in order to learn more. I can learn to take notes, make maps, tidy up trails, and leave other gifts for people who happen to wander by that way.

Ah. That might be it. Let’s give that a try.

Emacs: Evaluating Javascript and CSS in Chrome using Skewer Mode

I build a lot of quick prototypes, using Javascript and CSS to build little tools on top of the Jive social business platform. Since Javascript syntax errors could prevent the proper loading of the overview page customization screen and require me to reset the overview page through the admin console, my previous Javascript workflow involved copying and pasting code into Google Chrome’s developer console. Most of the time, I used narrow-to-region to focus on just the specific script block or set of functions I was working on, and I used js2-mode to handle syntax highlighting and indentation. Once the Javascript was sorted out, I’d widen to get back to the full HTML, JS, and CSS file, using web-mode for indentation.

Copying code between Javascript buffers and the developer console was a bit of a hassle. I’d use C-x h (mark-whole-buffer) to select the buffer, then C-w to copy it, change over to the Chrome window (possibly wading through a number of tabs and windows to find the right one), find the developer console, click in it, paste the code, and run it. My first step was to define a custom function that copied the whole buffer:

(defun sacha/copy-buffer ()
  "Copy buffer contents to kill ring."
  (interactive)
  (kill-new (buffer-substring-no-properties (point-min) (point-max))))
(global-set-key (kbd "C-c w") 'sacha/copy-buffer)

I still had to find the Chrome window and paste the code in, though.

My CSS workflow had its own challenges. I used Inspect Elements to look at CSS properties, and then I modified them on the fly. When I was happy with the rules I added or changed, I wrote the corresponding CSS code in my local file. Because I often ended up modifying several elements, it was hard to remember all the changes I needed to make, apply different sets of changes, or apply the changes after reloading the page. I used Stylish to make some of my changes persistent, but that still involved going back and forth between screens.

Since I’ll continue to work on web development over the next year (at least!), I thought I’d invest some time into improving my workflow. I’d seen several demos of Skewer Mode for Emacs, and I’d even given it a try a few times before. I hadn’t integrated it into my workflow yet, but it looked like it was definitely worth a try. Skewer allows you to interact with Google Chrome from Emacs. You can send HTML, CSS, and Javascript fragments to your browser.

If you use the included Greasemonkey-compatible script, you can even use this interactive capability on any website. I used the Tampermonkey extension for Google Chrome to run the script. When I tried it on the site I was working on, though, the https/http mismatch resulted in a content security error. It turns out that you need to run chrome --allow-running-insecure-content in order to let Chrome inject HTTPS sites with the scripts from the local HTTP server that Skewer Mode runs inside Emacs. If you had other Chrome sessions open, you’ll want to close them before starting up Chrome with that option. Once I sorted that out, it was easy to run skewer-setup, open a JS file, and start sending code to my browser.

I quickly became a fan of how C-c C-k (skewer-load-buffer in JS, skewer-css-eval-buffer in CSS) let me send my buffer to my browser. I narrowed my buffer to the parts I was working on, wrote some tests using console.assert(...), and kept the console visible as I coded. I periodically loaded the buffer to check whether my tests passed. I also liked having a proper file identifier and correct line numbers for errors. (It’s amazing how small things matter!)

Then to top it all off, I wanted a function that would prepare the source code for easy pasting into an HTML widget:

<script type="text/javascript">
// filename
</script>

Since Emacs is Emacs, you can do that. =)

(defvar sacha/javascript-test-regexp (concat (regexp-quote "/** Testing **/") "\\(.*\n\\)*")
  "Regular expression matching testing-related code to remove.
See `sacha/copy-javascript-region-or-buffer'.")

(defun sacha/copy-javascript-region-or-buffer (beg end)
  "Copy the active region or the buffer, wrapping it in script tags.
Add a comment with the current filename and skip test-related
code. See `sacha/javascript-test-regexp' to change the way
test-related code is detected."
  (interactive "r")
  (unless (region-active-p)
    (setq beg (point-min) end (point-max)))
  (kill-new
   (concat
    "<script type=\"text/javascript\">\n"
    (if (buffer-file-name) (concat "// " (file-name-nondirectory (buffer-file-name)) "\n") "")
    (replace-regexp-in-string
     sacha/javascript-test-regexp
     ""
     (buffer-substring (point-min) (point-max))
     nil)
    "\n</script>")))

(define-key js2-mode-map (kbd "C-c w") 'sacha/copy-javascript-region-or-buffer)

So now I can fiddle around with Javascript and CSS, send it to my browser with C-c C-k, and then use C-c w to wrap the Javascript in script tags and prepare it for copying.

Emacs!

Planning little improvements

I like re-planning when things are a little bit clearer and when things change. It’s nice to take a look at where I am, where I might get to, and maybe what I can do with more reinvestment.

wpid-2014-11-01-Baselines-and-possible-improvements-part-1.png wpid-2014-11-01-Baselines-and-possible-improvements-part-2.png

A year still feels a little abstract. A 12-week span might be interesting for concrete goal-setting and momentum; maybe something to experiment. In any case, here’s a small achievement list I can work towards…

  1. Development
    • Propose a calendar of prototypes with business-value descriptions
    • Design prototype and help team members write it instead of coding it myself
    • Think syntactically
  2. Reporting
    • Make Tableau reports snappy
    • Identify business questions for a valuable regular report
    • Analyze my own data in R
  3. Writing: Put together the intermediate Emacs config guide
  4. Drawing: Sketch people quickly
  5. Cooking: Map the families of recipes I want to try, and try them
  6. Learning: Map the things I know and what I want to learn, and maybe find a coach
  7. Tracking: Do grocery tracking in Quantified Awesome
  8. Making: Sew those box cushion covers
  9. Organizing house stuff
    • Simplify wardrobe
    • Tile floor
  10. Biking: Maybe bike in winter
  11. Pet care: Get Luke used to the toothbrush
  12. Exercise: Do the exercise ladder for twelve weeks
  13. Relationship: Work on more projects together
  14. Community:
    • Set up Emacs hangout experiment
    • Hang out at Hacklab during winter

Weekly review: Week ending November 7, 2014

This week was about getting back into the swing of several projects: Emacs, Japanese, Quantified Awesome and one of the personal projects I’m working on. Also, we picked up the LEGO Movie videogame, which is turning out to be lots of fun. =) I’m taking it pretty easy at the moment because there’s lots of stuff on the go.

… Oh. Now that I look at all the things I’ve crossed off, it deosn’t seem like I’ve been taking it easy. Funny how that works. Thank goodness for TODO lists!

Blog posts

Sketches

Link round-up

Focus areas and time review

  • Business (38.5h – 22%)
    • Earn (15.3h – 39% of Business)
      • E1: Brainstorm prototypes I want to propose
      • Earn: E1: 2.5-3.5 days of consulting
    • Build (20.5h – 53% of Business)
      • Drawing (0.9h)
      • Delegation (0.0h)
      • Packaging (0.0h)
      • Paperwork (2.8h)
        • Apply updates from bookkeeper
        • Send trial balance and general ledger to accountant
        • Sort out invoice/deposit thing
      • Plan business and delegation for this phase
      • Set up Guard again
      • Set up Skewer
    • Connect (2.8h – 7% of Business)
      • Plan for office hours
      • Process Quantified Self videos
  • Relationships (3.9h – 2%)
    • File insurance paperwork
    • Coach Lucas on programming
  • Discretionary – Productive (23.4h – 13%)
    • Emacs (5.6h – 3% of all)
      • Figure out how Michael’s smartparens is showing rainbow colours for the blocks
      • Get the hang of smartparens
      • Log editing inefficiencies, keep track of annoyances. Then you can go through them when you have time.
      • Organize Emacs Hangout
      • Pick a different keychord instead of hs for seeking to seconds, or maybe turn it on only when transcribing
      • Quick clocking in on a task, or jumping and clocking task
      • Quick way to capture little thing to experiment with in Emacs
      • Rebind other-window
      • Set up and get the hang of Skewer
      • Set up and get the hang of autocompletion
      • expand-region
    • Japanese
      • Added counters to my Anki decks
      • Find a good resources for learning about Japanese counters
      • Minna no Nihongo Chapter 10
      • Minna no Nihongo Chapter 11: Counters
      • Minna no Nihongo Chapter 12
      • Minna no Nihongo Chapter 13
    • Quantified Awesome
      • Fix login form
      • Fix pagination
      • Fix sparklines
      • I can give someone access to my grocery list
      • Make list entry closer to my design
      • Update to Rails 4.1
      • Upgrade localhost to next version of Ubuntu
      • Wireframe design for groceries
      • Work on Angular interface for grocery list
    • Other
      • Organize a journal section in my notes
      • Trim my organizer.org file
      • Split up book notes into individual files
    • Apply for passport
    • Ask two guarantors for passport
    • Get passport pictures
    • Move my dentist appointment
    • Pick up cultural access pass from Front and Parliament
    • Writing (6.8h)
  • Discretionary – Play (9.7h – 5%)
  • Personal routines (24.1h – 14%)
  • Unpaid work (15.7h – 9%)
  • Sleep (53.9h – 32% – average of 7.7 per day)