Evil plans

Curious about anything? Contact me at sacha@sachachua.com . Web: http://sachachua.com/evil-plans Raw file: evil-plans.org

Additional notes: http://sachachua.com/blog/2014/03/reflecting-goals-time/

Plan graph

See raw file or end of document for code.


How do I want to represent specific goals?

Goals   goal

live an awesome life

TODO do a 5-year experiment in self-directed living

so that I can live an awesome life


Questions to resolve:

  • Would I prefer the structure of a regular career, or can I learn how to make the most of a more self-directed life?
  • Do I understand my wants and needs enough to manage my finances with reasonable safety?

More information: http://sachachua.com/blog/experiment

What could "awesome" look like?

  • Good handle on expenses, resisted lifestyle inflation
  • Expenses covered by dividends/capital gains, with a reasonable buffer for the next correction (and so that I can buy the next time stocks go on sale)
  • Be the kind of happy, loving, equanimous person I want to be
  • Icing on the cake:
    • Tickled brain from learning lots of things
    • Good karma from helping lots of people
    • Scaling up (building resources)
  • Confederates whom I know well and am in touch with

What kind of concrete actions or projects will move me towards that? What kinds of things do I want to explore?

  • [X] E-book publishing: Easy to do once I have a clear idea of what I want to put together. I like pay-what-you-want.
  • [X] Print publishing: Doable with LaTeX and CreateSpace.
  • [ ] Useful, organized non-fiction
  • [ ] A way for people to self-identify as tribe members (ex: e-book purchases, mailing list signups)
  • [ ] Git-tip and other microtipping?
  • See other projects in this file

TODO improve our garden in 2014

so that I can live an awesome life

This year:

  • Keep track of which plants were planted where
  • Water by hand
  • work in the garden every 1-3 days



strawberries strawberries carrots carrots
choy choy beets beets
spinach spinach beets beets
beets beets spinach spinach
spinach spinach spinach spinach
lettuce, cilantro lettuce, cilantro bitter melon, carrots bitter melon, carrots
peas (bush) 4/12 peas (bush) 4/12 bitter melon, carrots bitter melon, carrots
peas 4/12 peas 4/12 peas 4/12 peas 4/12


Want: kale, cherry tomatoes, basil, bitter melon, green onions

Islington Nurseries compost: 55 delivery, 35 per cubic yard

tickle my brain

TODO learn image processing with the Raspberry Pi

so that I can tickle my brain

Using simplecv

  • [X] Load the images
  • [X] Calculate the absolute difference
  • [X] Identify the largest blob (minimum size of X)
  • [X] Draw the path followed by the centroid of the blob
  • [ ] Figure out a better visualization for litter box monitoring

DONE learn Morse code for all the letters; receive at 5 WPM; transmit as slowly as needed

So that I can tickle my brain

  • [2014-03-19 Wed] Tried Morse Code Trainer on my phone. =) Learning my .- -… -.-. -..!

TODO memorize Latin declensions

So that I can tickle my brain

Testing: http://www.latintests.net/grammar/nouns.php - 5 days in a row, first test 100%

  • [2014-03-30 Sun] One mistake (first declension), second declension still giving me prblems
  • [2014-03-23 Sun] 100% first declension

SOMEDAY make ABCs of Emacs

So that I can tickle my brain and share useful stuff

  • [X] apropos
  • browse-kill-ring
  • customize / compile / calc
  • dired, debug-on-entry
  • edebug-defun, eshell
  • fastnav, ffap, fixup-whitespace
  • grep-find, gnus
  • help-with-help, helm
  • ielm
  • just-one-space
  • keyboard macros, kmacro-start-macro, kbd-macro-query
  • load-library, locate-library, list-packages
  • magit, make-indirect-buffer
  • name-last-kbd-macro
  • occur (and occur-edit-mode); org
  • package-list-packages, picture-mode
  • quick-url, query-replace-regexp-eval
  • regexp-builder, recursive-edit, recover-this-file,
  • savehist-mode, server-start, smartparens
  • tags-search, term, thumbs, tmm-menubar, type-break
  • undo-tree-visualize
  • vc-next-action, view-lossage, visual-line-mode
  • where-is, winner-mode, windmove, window-configuration-to-register
  • M-x (execute-extended-command)
  • yank-pop
  • zap-to-char

DONE Draw the goal graph based on my Org entries   emacs

share useful stuff

TODO publish 12 free/PWYC resources   project

So that I can share useful stuff

  • [X] Sketchnoting resources
  • [X] No Excuses Guide to Blogging
  • [X] Sketchnotes 2012
  • [X] Sketchnotes 2013
  • [ ] How to learn Emacs Lisp by customizing Emacs: http://sach.ac/baby-steps-emacs-lisp
  • [ ] Baby steps guide to managing your tasks with Org: http://sach.ac/baby-steps-org-todo
  • 10-week Emacs Basics course (or 12…)
    1. Mouse, copy, paste
    2. M-x
    3. Customize

TODO sketchnote 10 more books   beeminded

so that I can share useful stuff

DONE package Sketchnotes 2012 for print

So that I can share useful stuff

build good karma

So that I can learn from people

Is this a true goal, or it mainly on the way to something else? Are there projects that support this instead of the other stuff?

learn from people

TODO project F2

TODO host another 10 episodes of Emacs Chats

So that I can learn from people and help the Emacs community grow

  1. [ ] Emacs Chat: technomancy - scheduled
  2. [ ] Emacs Chat: Xah Lee - asked
  3. [ ] Emacs Chat: Bozhidar Batsov - asked
  4. Reach out to the other bloggers on Planet Emacsen

DONE complete project F

So that I can learn from people

DONE host at least four episodes for the Frugal FIRE show   PROJECT

So that I can learn from people and share useful stuff


I suggested these as a way to get to know other people exploring financial independence / early retirement. I wanted to see if that was a community I resonated with.

DONE host 10 episodes of Emacs Chats [9/12]   project


So that I can learn from people and help the Emacs community grow

  1. [X] Emacs Chat: John Wiegley
  2. [X] Emacs Chat: Avdi Grimm (Org-mode, Ruby, etc.)
  3. [X] Emacs Chat: Thomas Kjeldahl Nilsson
  4. [X] Emacs Chat: Carsten Dominik
  5. [X] Emacs Chat: Bastien Guerry
  6. [X] Emacs Chat: Sacha Chua (with Bastien Guerry)
  7. [X] Emacs Chat: Magnar Sveen (Emacs Rocks)
  8. [X] Emacs Chat: Iannis Zannos
  9. [X] Emacs Chat: Tom Marble
  10. [X] Emacs Chat: Janis Mancevics

make better decisions

so that I can live an awesome life

TODO track and reflect on 25 non-trivial decisions/assumptions   project

So that I can make better decisions As listed in http://sachachua.com/blog/category/decision

What do I want to tweak about how I make decisions?

TODO add more tracking tools to Quantified Awesome

so that I can make better decisions

get more value from my time

so that I can live an awesome life

SOMEDAY write 10 blog posts with Dragon NaturallySpeaking

so that I can get more value from my time

Hmm. I am not very good at dictating blog posts, since I write as a way of figuring things out, and I end up jumping around non-linearly. So maybe dictation will have to be more about book notes and transcripts.

  • Dictate blog posts
    • Make posts sound more natural
    • Get ideas out faster
    • Rest my hands
  • Dictate book notes
    • Rest my hands
    • Read more ergonomically

SOMEDAY write AutoHotkey script that has file actions

SOMEDAY read the iMacros API

SOMEDAY learn Plover steno

SOMEDAY set up Selenium for automating web actions

delegate more effectively

TODO delegate 2,000 hours of meaningful, useful work   delegation project

So that I can delegate more effectively and build good karma

So far:

(let ((hours 384.5))
  (format "%d hours - %d%%" hours (* (/ hours 2000.0) 100.0)))

The work should:

  • move me towards my primary goals
  • help assistants improve their skills and justify better rates in the marketplace

TODO add 50 items to my process library   delegation project

So that I can delegate more effectively and share useful stuff

Process library - for my virtual assistants and for other people who are interested in delegation

0 items - 0%

help the Emacs community grow

TODO experiment with working with Alex

TODO Create a set of beginner resources for Emacs   emacs project

SOMEDAY create a 10-week Emacs Basics course   emacs specific project

So that I can help the Emacs community grow


  1. [X] Use the mouse
  2. [X] Call commands by name with M-x
  3. [X] Customize and configure
  4. [ ] Learn keyboard shortcuts
  5. [ ] Learn Emacs Lisp
  6. [ ] Customize keyboard shortcuts
  7. [ ] Save time with keyboard macros
  8. [ ] Be inspired

SOMEDAY set up regular Emacs hangouts

so that I can help the Emacs community grow

Every two weeks? Every month? Need a co-host.

SOMEDAY draw 10 visual guides for learning Emacs

So that I can help the Emacs community grow

  • [X] Beginner's guide
  • [X] Keyboard shortcuts
  • [X] Org mode
  • [X] Dired
  • [X] Managing your tasks

improve my blog

So that I can share useful stuff

SOMEDAY split off topic-focused views

So that I can improve my blog

SOMEDAY review 31 blogs

So that I can improve my blog

4 items - 12%
1. Engagement, sticky shares - markevans.ca
2. Fat footer, lots of structure - extension.org
3. Lots of comments - rootofgood.com
4. Sticky sidebar get started - mywifequitherjob.com

Old graph



(let ((count 0)
       (directory-files directory nil pattern)))
  (format "%d items - %d%%\n%s" 
          (length files)
          (/ (* 100.0 (length files)) target)
           (lambda (x)
             (setq count (1+ count))
             (format "%d. %s" count (replace-regexp-in-string strip "" x)))
(defun sacha/fill-string (string new-fill-column &optional replace-char)
  "Wrap STRING to NEW-FILL-COLUMN. Change newlines to REPLACE-CHAR."
    (insert string)
    (let ((fill-column new-fill-column))
      (fill-region (point-min) (point-max))
      (if replace-char
            (goto-char (point-min))
            (while (re-search-forward "\n" nil t)
              (replace-match replace-char t t))))

(defun sacha/org-map-goals (tag)
  "Return an alist, based on the TAG tree and \"so that I can\" link structure.
Structure: ((nodes . ((components) ...)) (edges . ((a . b) ...)))"
  (let (nodes edges)
   ;; Go through the entries
     (lambda ()
       (let ((heading (org-heading-components)))
         (unless (member (elt heading 2) '("DONE" "SOMEDAY"))
               ;; Ignore subtrees in the body
                 (org-set-property "CUSTOM_ID" (replace-regexp-in-string "[^A-Za-z0-9]" "_" (elt heading 4))))
                (if (re-search-forward
                     (concat "[\r\n]\\(" org-outline-regexp "\\)") nil t)
                    (match-beginning 1)
               (goto-char (point-min))
               (when (> (car heading) 1)
                 (setq nodes (cons heading nodes)))
               (when (re-search-forward "so that I can" nil t)
                 (while (re-search-forward org-bracket-link-regexp (line-end-position) t)
                   (setq edges (cons (cons (elt heading 4) (match-string-no-properties 1)) edges)))))))))
    (list (cons 'nodes nodes) (cons 'edges edges)))) 

(defun sacha/org-map-to-graphviz (map fill-column)
  "Convert MAP to a graphviz representation. Wrap titles at FILL-COLUMN."
   "digraph G {\n"
   "node [shape=box,fontname=\"Open Sans\",pad=1]\n"
   "edge [color=\"#CCCCCC\"]\n"
    (lambda (x)
      (format "\"%s\" -> \"%s\"" 
              (sacha/fill-string (car x) fill-column "\\n")
              (sacha/fill-string (cdr x) fill-column "\\n")))
    (cdr (assoc 'edges map))
   (mapconcat (lambda (x)
                 (if (null (elt x 2))
                     (concat "\"%s\" [style=filled, URL=\"#%s\", tooltip=\"%s\"]")
                   "\"%s\" [URL=\"#%s\", tooltip=\"%s\"]")
                 (sacha/fill-string (elt x 4) fill-column "\\n")
                 (replace-regexp-in-string "[^A-Za-z0-9]" "_" (elt x 4))
                 (elt x 4)))
              (cdr (assoc 'nodes map)) "\n")
(org-babel-execute:dot (sacha/org-map-to-graphviz (sacha/org-map-goals tag) fill-column) params)
Back to top
Back to top | E-mail me