08 May 2019, 06:34

Rode bicycle to station
06:34 Wednesday 08 May 2019 JST

I rode TJ Bike to the bicycle parking lot today. This is the first time I have done so for work, given that we got our bicycle parking passes during Golden Week, and this is the first day that I have to work outside the house.

I usually allow 24 minutes to walk leisurely to the station. Riding TJ Bike “leisurely” down a big hill, I arrived at the bicycle parking area in 8 minutes. Leisurely locking TJ Bike and walking to the train took 6 minutes. So it took 14 minutes from house door to train door.

07 May 2019, 21:58

Working with Mark soon: Behavioral OS
21:58 Tuesday 07 May 2019 JST

I found out that Mark is a trainer for Behavioral OS, something I have been interested in for a while. They are launching a course this year and I am excited to join!

07 May 2019, 18:04

Looking for a Japanese teacher
18:04 Tuesday 07 May 2019 JST

There are probably errors in the Japanese notes below!

今日新しい先生三人の授業を登録しました。 Today I registered with three new teachers.

先週も先生四人の授業を登録しました。 Last week I registered with four teachers.

一人は沢山英語を使えます。 One used a lot of English

勉強のため英語より簡単日本語方がいいと思います。 Easy Japanese is better than English for me to study.

一人はカメラを使えない。それで対面式じゃなくて、電話見たいです。 One did not use a camera. No face to face so we might as well have used a phone.

一人はグーグルDocsを使えません。それも嫌と思います。 One could not use Google Docs. Bah.

英語を使えなくて、カメラもグーグルドックスも両方使うな先生を探しています。 I am looking for a teacher who uses a camera, Google Docs, and does not use English.

だけど、たまに宿題をできない日もあります。 But there are times I do not study.

まだどうやて巨みがあるな宿題があまりわかりません。 I still have not found Japanese homework that interests me.

人生でいつも英語を使いちゃうから日本語のれんしゅは時々できません。 I use English in my life so cannot practice Japanese much.

昨日西麻布で男の人六人はグループに来ました。 Yesterday 6 men came to group in Nishi Azabu

仕事じゃないけど沢山教えたから、終わる時、疲れました。 It’s not my job, but I led a lot, so by the end, I was tired.

07 May 2019, 08:09

Expanding shortlinks on Marble Track 3 website
08:09 Tuesday 07 May 2019 JST

Now that I will not likely add any more shortlinks to Marble Track 3 website, I have been expanding them in the markdown, which will save a redirect each time people click on the links.

06 May 2019, 18:11

men's group today
08:40 Monday 06 May 2019 JST

Right now I’m headed to Hiroo for two (2) workshops. One, for men already in the group, a Mission workshop to find or refine our life missions. Why are we here in this world, on this planet? What value do we bring to the world? How?

The next workshop is for new men, an introduction to our work. I think a couple men will attend even though I am the only person who has responded on Meetup for our second Journey of the Heart workshop.

I chalk it up to only having it online for about 10 days with minimal promotion.

18:11 Monday 06 May 2019 JST

Great workshops today. Good feedback from the men on both of them. Great work by men who participated.

Six men in attendance, counting me and Robert Golden who has attended as a guest facilitator.

I feel physically tired. Emotionally I feel grounded joy.

06 May 2019, 08:57

Marble Track 3 website easier to write
08:57 Monday 06 May 2019 JST

Atom editor has a way to write my own autocomplete rules. I don’t have a link handy, but it is handy for making links.

So I have a two part approach:

  1. create a file with Emacs by entering a Title (part name), Shortcode, Image, Tag(s), and date. Emacs creates the new file as part_name.md and now appends to the Atom file ~/.atom/snippets.cson the information necessary to let Atom auto complete the markdown after I type the shortcode.
  2. use Atom to edit the file and easily insert markdown via autocompletion. Yay!

Here is the most recent addition to snippets.cson

      'Lower Zig Zag 3 ban Upper Base Base':
        'prefix': 'lzz3bubb'
        'body': '[Lower Zig Zag 3 ban Upper Base Base](/parts/lower-zig-zag-3-ban-upper-base-base/)'

With this, I can type lzz3bubb RET to get Atom to write

[Lower Zig Zag 3 ban Upper Base Base](/parts/lower-zig-zag-3-ban-upper-base-base/)

Awesome.

I am headed to men’s group to lead workshops all day so will probably forget to show the code, but there is code on github.

Emacs function to create file and autocomplete [mt3-new-part](https://github.com/thunderrabbit/emacs-hugo-posts/blob/master/hugo.el#L219)


(defun mt3-new-part (title shortcode tags image yyyy mm dd)
  "Create a new track part for Marble Track 3 .com with TITLE, TAGs, and shortcode."
  (interactive
    (list
      (read-string "Title: ")
      (read-string "Shortcode: ")
      (journal-read-tags nil)
      (read-string "Image: " nil nil "/img/guest/default-guest.png")
      (read-string (format "Year (%s): " (format-time-string "%Y")) nil nil (format-time-string "%Y"))
      (read-string (format "Month (%s): " (format-time-string "%m")) nil nil (format-time-string "%m"))
      (read-string (format "Date (%s): " (format-time-string "%d")) nil nil (format-time-string "%d"))
    )
  )
  (let (
        (file-name (journal-post-title dd title))
        (file-path (journal-no-date-path title))
        )
    (switch-to-buffer (find-file-noselect location-atom-snippets))
    (end-of-buffer)
         (insert
          (format
          (get-string-from-file (expand-file-name "snippet_part.txt" location-journal-template-files))
           title
     	     shortcode
           title
     	     (file-name-sans-extension file-path)  ;; https://stackoverflow.com/a/8716106/194309
     	     ))
	 (save-buffer)
	 (kill-buffer)
    (set-buffer (get-buffer-create file-path))
    (insert
      (format
         (get-string-from-file (expand-file-name "mt3_parts_template.txt" location-journal-template-files))
         title
         (mapconcat (lambda (x) (format "\"%s\"" (downcase x)))	tags ", ")
         image
         (thumbnail-path image)
         title
         shortcode
         yyyy
         mm
         dd
         (format-time-string "%H:%M:%S+09:00")
         (format-time-string "%Y %b %d ")
      )
    )
    (write-file (expand-file-name file-path (concat mt3-site-location "parts")))
    (switch-to-buffer file-path)
    (auto-fill-mode)
  )
)

06 May 2019, 08:54

Lin's bag today
08:54 Monday 06 May 2019 JST

It turns out I like the bag Lin bought online better than the bag I bought in a shop last year. The wheels on her bag are larger and quieter. That was something I could not test on the linoleum tile floors in the shop. That sounded perfectly smooth there, but out on the street they are raucous.

And this bag has more pockets. I thought I could survive with the number of pockets on the other bag, but this one is way more pockety

04 May 2019, 22:06

autocompletes in Atom
22:06 Saturday 04 May 2019 JST

Fantastic! Atom has a pretty easy way to auto-complete my custom strings in markdown format. I now can type cs and it will offer to autocomplete ‘Caret Splitter’ as [Caret Splitter](/parts/caret-splitter/)

Here is the first draft of snippets.cson, before expanding the URLs to their full selves (and save a redirect with each click).

'.source.gfm':
  'Back Right Medium Landing Zone':
    'prefix': 'brmlz'
    'body': '[Back Right Medium Landing Zone](/p/brmlz)'
  'Bar Below Circle by Caret Splitter':
    'prefix': 'bbcbcs'
    'body': '[Bar Below Circle by Caret Splitter](/p/bbcbcs)'
  'Bearing':
    'prefix': 'bearing'
    'body': '[Bearing](/p/bearing)'
  'Below Lower Zig Zag Track':
    'prefix': 'blzzt'
    'body': '[Below Lower Zig Zag Track](/p/blzzt)'
  'Caret Splitter Backboard':
    'prefix': 'csb'
    'body': '[Caret Splitter Backboard](/p/csb)'
  'Caret Splitter Feeder Extension Reflection Second Stanchion':
    'prefix': 'csfer2s'
    'body': '[Caret Splitter Feeder Extension Reflection Second Stanchion](/p/csfer2s)'
  'Caret Splitter Feeder Extension Reflection Stanchion':
    'prefix': 'csfers'
    'body': '[Caret Splitter Feeder Extension Reflection Stanchion](/p/csfers)'
  'Caret Splitter Feeder Extension Reflection':
    'prefix': 'csfer'
    'body': '[Caret Splitter Feeder Extension Reflection](/p/csfer)'
  'Caret Splitter Feeder Extension':
    'prefix': 'csfe'
    'body': '[Caret Splitter Feeder Extension](/p/csfe)'
  'Caret Splitter Feeder':
    'prefix': 'csf'
    'body': '[Caret Splitter Feeder](/p/csf)'
  'Caret Splitter Right Hand Inner Side':
    'prefix': 'csrhis'
    'body': '[Caret Splitter Right Hand Inner Side](/p/csrhis)'
  'Caret Splitter Right Track':
    'prefix': 'csrt'
    'body': '[Caret Splitter Right Track](/p/csrt)'
  'Caret Splitter Rudder':
    'prefix': 'csr'
    'body': '[Caret Splitter Rudder](/parts/caret-splitter-rudder/)'
  'Caret Splitter':
    'prefix': 'cs'
    'body': '[Caret Splitter](/parts/caret-splitter/)'
  'Circle by the Caret Splitter':
    'prefix': 'cbtcs'
    'body': '[Circle by the Caret Splitter](/p/cbtcs)'
  'Decorative Walls after the Lowest Small-Medium Splitter':
    'prefix': 'dwatlsms"'
    'body': '[Decorative Walls after the Lowest Small-Medium Splitter](/p/dwatlsms")'
  'Eighth Placed Outer Spiral Support':
    'prefix': '8poss'
    'body': '[Eighth Placed Outer Spiral Support](/p/8poss)'
  'Fifth Placed Outer Spiral Support':
    'prefix': '5poss'
    'body': '[Fifth Placed Outer Spiral Support](/p/5poss)'
  'First Placed Outer Spiral Support':
    'prefix': '1poss'
    'body':  '[First Placed Outer Spiral Support](/p/1poss)'
  'First Snake-Installed Rail':
    'prefix': 'fsir'
    'body': '[First Snake-Installed Rail](/p/fsir)'
  'Fourth Placed Outer Spiral Support':
    'prefix': '4poss'
    'body': '[Fourth Placed Outer Spiral Support](/p/4poss)'
  'Front Left Medium Landing Zone':
    'prefix': 'flmlz'
    'body': '[Front Left Medium Landing Zone](/p/flmlz)'
  'Guides into Back Right Medium Landing Zone':
    'prefix': 'gibrmlz'
    'body': '[Guides into Back Right Medium Landing Zone](/p/gibrmlz)'
  'Left Side Small Landing Zone':
    'prefix': 'lsslz'
    'body': '[Left Side Small Landing Zone](/p/lsslz)'
  'Little Wiggly Track':
    'prefix': 'lwt'
    'body': '[Little Wiggly Track](/p/lwt)'
  'Lower Curver off the Lowest Small-Medium Splitter':
    'prefix': 'lcotlsms'
    'body': '[Lower Curver off the Lowest Small-Medium Splitter](/p/lcotlsms)'
  'Lower Zig Zag 2 ban top':
    'prefix': 'lzz2bt'
    'body': '[Lower Zig Zag 2 ban top](/p/lzz2bt)'
  'Lower Zig Zag 2 ban':
    'prefix': 'lzz2b'
    'body': '[Lower Zig Zag 2 ban](/p/lzz2b)'
  'Lower Zig Zag 3 ban base':
    'prefix': 'lzz3bb'
    'body': '[Lower Zig Zag 3 ban base](/p/lzz3bb)'
  'Lower Zig Zag 3 ban':
    'prefix': 'lzz3b'
    'body': '[Lower Zig Zag 3 ban](/p/lzz3b)'
  'Lower Zig Zag 3ban Upper Base Base':
    'prefix': 'lzz3bubb'
    'body': '[Lower Zig Zag 3ban Upper Base Base](/p/lzz3bubb)'
  'Lower Zig Zag Net':
    'prefix': 'lzzn'
    'body': '[Lower Zig Zag Net](/p/lzzn)'
  'Lower Zig Zag':
    'prefix': 'lzz'
    'body': '[Lower Zig Zag](/parts/lower_zig_zag/)'
  'Lowest Back Left Small Marble Curve':
    'prefix': 'lblsmc'
    'body': '[Lowest Back Left Small Marble Curve](/p/lblsmc)'
  'Lowest Largest Backtracking Chopstick':
    'prefix': 'llbc'
    'body': '[Lowest Largest Backtracking Chopstick](/p/llbc)'
  'Lowest Largest Backtracking Popsicle Stick':
    'prefix': 'llbps'
    'body': '[Lowest Largest Backtracking Popsicle Stick](/p/llbps)'
  'Lowest Largest U-Turn':
    'prefix': 'llut"'
    'body': '[Lowest Largest U-Turn](/p/llut")'
  'Medium Catcher Below Triple Splitter':
    'prefix': 'mcbts'
    'body': '[Medium Catcher Below Triple Splitter](/p/mcbts)'
  'Ninth Placed Outer Spiral Support':
    'prefix': '9poss'
    'body': '[Ninth Placed Outer Spiral Support](/p/9poss)'
  'Outer Spiral':
    'prefix': 'os'
    'body': '[Outer Spiral](/p/os)'
  'Right Side Small Landing Zone':
    'prefix': 'rsslz'
    'body': '[Right Side Small Landing Zone](/p/rsslz)'
  'Second Placed Outer Spiral Support':
    'prefix': '2poss'
    'body': '[Second Placed Outer Spiral Support](/p/2poss)'
  'Seventh Placed Outer Spiral Support':
    'prefix': '7poss'
    'body': '[Seventh Placed Outer Spiral Support](/p/7poss)'
  'Sixth Placed Outer Spiral Support':
    'prefix': '6poss'
    'body': '[Sixth Placed Outer Spiral Support](/p/6poss)'
  'Snake Plate Chopstick':
    'prefix': 'spc'
    'body': '[Snake Plate Chopstick](/p/spc)'
  'Snake Plate U Turn':
    'prefix': 'sput'
    'body': '[Snake Plate U Turn](/p/sput)'
  'Snake Plate U-Turn Berm':
    'prefix': 'sputb"'
    'body': '[Snake Plate U-Turn Berm](/p/sputb")'
  'Snake Plate U-turn Berm Bar':
    'prefix': 'sputbb'
    'body': '[Snake Plate U-turn Berm Bar](/p/sputbb)'
  'Snake Plate':
    'prefix': 'sp'
    'body': '[Snake Plate](/p/sp)'
  'The First Track':
    'prefix': 'tft'
    'body': '[The First Track](/p/tft)'
  'Third Placed Outer Spiral Support':
    'prefix': '3poss'
    'body': '[Third Placed Outer Spiral Support](/p/3poss)'
  'Triple Splitter Small Feeder Inner Bar Lower Support':
    'prefix': 'tssfibls'
    'body': '[Triple Splitter Small Feeder Inner Bar Lower Support](/p/tssfibls)'
  'Triple Splitter Small Feeder Inner Bar':
    'prefix': 'tssfib'
    'body': '[Triple Splitter Small Feeder Inner Bar](/p/tssfib)'
  'Triple Splitter Small Feeder Outer Bar Lower Support':
    'prefix': 'tssfobls'
    'body': '[Triple Splitter Small Feeder Outer Bar Lower Support](/p/tssfobls)'
  'Triple Splitter Small Feeder Outer Bar':
    'prefix': 'tssfob'
    'body': '[Triple Splitter Small Feeder Outer Bar](/p/tssfob)'
  'Triple Splitter Small Feeder':
    'prefix': 'tssf'
    'body': '[Triple Splitter Small Feeder](/parts/triple-splitter-small-feeder/)'
  'Triple Splitter':
    'prefix': 'ts'
    'body': '[Triple Splitter](/parts/triple_splitter/)'
  'Two Ends Chopped Off Triple Splitter':
    'prefix': 'tecots'
    'body': '[Two Ends Chopped Off Triple Splitter](/p/tecots)'
  'Upper Splitter off the Lowest Small-Medium Splitter':
    'prefix': 'usotlsms'
    'body': '[Upper Splitter off the Lowest Small-Medium Splitter](/p/usotlsms)'
  'the Lowest Small-Medium Splitter':
    'prefix': 'tlsms'
    'body': '[the Lowest Small-Medium Splitter](/p/tlsms)'
  'the Triple Splitter Small Marble Catcher':
    'prefix': 'ttssmc'
    'body': '[the Triple Splitter Small Marble Catcher](/p/ttssmc)'
  '円周螺旋':
    'prefix': 'os'
    'body': '[円周螺旋](/p/os)'

04 May 2019, 21:44

how to find last slash on line while recording macro in Atom
21:44 Saturday 04 May 2019 JST

In my workflow, I end up with image URLs like this

https://b.robnugen.com/art/marble_track_3/track/parts/2019/2019_may_03_caret_splitter_rudder_planner_3.jpg

and I want to convert them to markdown with thumbnail like this:

[![2019 may 03 caret splitter rudder planner 3](//b.robnugen.com/art/marble_track_3/track/parts/2019/thumbs/2019_may_03_caret_splitter_rudder_planner_3.jpg)](//b.robnugen.com/art/marble_track_3/track/parts/2019/2019_may_03_caret_splitter_rudder_planner_3.jpg)

(N.B. the title came from the image filename, and thumbs/ has been inserted into the thumbnail’s URL)

With Emacs, I can do it with a custom keyboard macro, which starts by moving point to the end of the image URL then I-search backward to find the last / in the URL. Then I can easily extract the name of the image from which I can get the title of the image.

I installed atom-keyboard-macros, but it fails when I try to find previous with ⌘-⇧-G.

Perhaps there is a whole different atom.io way to go about converting the image URL into a markdown-friendly string. Do you know of one?

30 Apr 2019, 23:56

snack with Michael
23:56 Tuesday 30 April 2019 JST

At Mark’s suggestion, Michael and I ate at a restaurant in Noborito where we talked about Marble Track 3. I showed him the secret backend of Marble Track 3 where I have “episodes” showing the 300+ hours of livestreams for creating the animation of the construction..