valid,invalid

関心を持てる事柄について

HIPHOPダンスとヨガを始めた

年初に 2017年の目標 -1年の目標を立てるのをやめる- - valid,invalid で書いたように今年は30日ずつ何かを頑張ることにしている。やや飽きつつも10月からまた再開し、11月はダンススクールに通うことにした。

やる理由

あえて理由を言語化するなら

  • 健康をもう1ランク上に引き上げたい
  • 身体一つで勝負したい

といったところ。

もう少し補足する。

健康をもう1ランク上に引き上げたい

今年の2月に健康にテコ入れ(参考:1ヶ月で身体を健康に持っていく - valid,invalid)して以来、人並みの健康を得られた。しかし未だ敏捷性と柔軟性に難があるようで、持病の腰痛も厳しさを増してきた。どうやらこのあたりを補強しないともう1ランク上の健康には至れないらしい。

だから、やる。

身一つで勝負したい

一廉のパフォーマーになりたいわけではないのだが己の身体一つで勝負できる者が真の強者であるという少年誌じみた観念から逃れられない。さらに悪いことにこうしたイデオロギーは歳を重ねるごとに焦燥感としてのしかかってくるようですらある。

f:id:ohbarye:20170304185908j:plain

そう、これは自分にとっては過去の清算でもある。

ダンススクール

NOAダンスアカデミーでは、HIPHOPダンス、JAZZダンス、HOUSEダンスなどさまざまなダンスレッスンがあり、開校20年の間に築き上げてきたレッスンノウハウでダンスの上達をサポートします。一流ダンサーが教える初心者から上級者まで楽しめる東京都内(新宿、池袋、都立大、秋葉原)にあるダンススクールです。

はい。

www.noadance.com

知人の紹介で選んだ。1回90分のダンスレッスンだけでなく各種ヨガクラスにも参加できるのが良いところ。

感想

HIPHOPダンス

楽器経験があるので人並みにはリズム感があるから大丈夫かと奢っていたのだがそういう問題ではなかった。

拍の裏を感じ取ることと、そのタイミングに合わせて身体を自由に操作することは全く別だった。

また、人前で踊るという非日常じみた行為に恥を覚えずいかに没入できるか、いわば"トランス"できるかという点でのせめぎ合いもまた面白い。レッスン中に周囲を見回すと、いわゆる"鏡前"の歴々は何年やっているのかわからないが完全に"入(はい)"れているのでスゴイと思う。ちなみに子供や高校生は最初から素で"入(はい)"っているので強い。

最上級までいくとこんな感じになれるようなので研ぎ澄ませていきたい。

www.youtube.com

ヨガ

一日の終わりにこれまで外を向いていた矢印を内側に向けたり第三の目で自分を見つけたりとスピリチュアルな面は否定できないが、前々より興味があった瞑想と非常に近い領域にあるおかげで素直に取り組めている。

しかしそうしたメンタル面の強化よりも遥かに身体面がキツイ。キツさでいえばダンスよりも上で、その証拠に毎回筋肉の震えが止まらなくなる現象が起きる。

あまりにプルプル震えるので心配になって調べたところ、筋肉に力をいれて収縮させているときの震えは問題ないらしい。一部の筋繊維は収縮するが他の筋繊維は疲労のために収縮できないという状況とのこと。一方、ストレッチ中の震えは筋肉がストレッチ強度が高すぎるゆえに引き留めようと収縮する動きなので緩める方がよいとのこと。


1ランク上に至ったらまた何か書くかもしれない。

10月はお金周りを整理した

年初に 2017年の目標 -1年の目標を立てるのをやめる- - valid,invalid で書いたように今年は30日ずつ何かを頑張ることにしているのだが夏以降は完全に飽きていた。

しかし10月は家庭の事情もありお金まわりの勉強をちょっとだけ真面目にしてみた。

目標

以下の現状をなんとかする。

  • 年金の積立状況が謎
  • 自分の資産総額がわからない
  • 毎月お金を何に使っているか忘れる(クレカの明細も見ていない)
  • 寝てるだけでお金が増えて欲しい
  • 保険に加入するべきかどうかわからない
  • 不動産を買うべきかどうかわからない

まぁちょっと勉強すればわかる常識的なこととか、身辺の情報整理ちゃんとやってる人からすると本当にどうでもよい内容だと思うがわからないものはわからないのだからしょうがない。他にもわからないことだらけなのだが一旦はこれだけでも片付けたかった。

結果

1つずつ解消してみた。

年金の積立状況

前職で企業型の確定拠出年金(DC)なるものに加入し、退職後もよくわからないまま個人型に移管していた。毎月1万円ぐらい給与から天引きされる設定になっていたらしい。

これがどんな状況になっているか。どうやら定期的にレポートが届いているようなのだが見当たらない…。ということで電話で問い合せて住所変更を依頼した。本人確認書類のコピーを提出する必要があり、電話では完了せずに後日届いた書類を返送してようやく住所を変更できた。

同じタイミングで加入者IDとパスワードの再発行も依頼し、三井住友信託銀行のサイトにログインできるようになった。

どうやらこれまで累計で80万円弱を拠出しており、現在の残高は110万円弱なので30万円程度の運用益を出していた。ハイリスク・ハイリターンの運用プランを選んでいたらしいのだが驚きの24.4%増とは…。

気分をよくしたので掛け金を増やそうとも考えたが受け取れるのは老後と思うと…もう少し"今"にかける方向で保留することにした。

資産総額

銀行口座は1つしか持っていないので大体それが資産総額かと思ったが確定拠出年金の思わぬ額によってかさ増しされた。また、遥か昔に作ったマネックス証券の口座にもお金が入っていることを思い出した。

いちいち合算するのはめんどうだということでマネーフォワードを使うことにした。ひとまず無料プランで申し込み、自分が覚えている限りの金融機関を登録した。

moneyforward.com

これで初めて自分の資産総額が可視化された。

毎月お金を何に使っているか忘れる

マネーフォワードにクレカも登録して支出の明細を一覧で見られるようにした。

一度トラッキングし始めると、記録が残らない現金支払いをしたくなくなってくる。そこそこカードで買い物をするようになった。

支出カテゴリもある程度は自動分類されるので家賃が出費の何%を占めているかとかも見えてよい。

寝てるだけでお金が増えて欲しい

確定拠出年金の結果を見てやはり銀行にお金を眠らせていてはアカン、高利回りで運用して寝てるだけでお金が増えて欲しいんじゃという気持ちが強くなった。

株式投資は以前やってみたのだがそれなりの勉強と継続はしたくない!!!せっかくなので代替となりそうなwebサービスをいくつか試すことにした。

WealthNavi

人工知能で資産運用〜ってやつ。

www.wealthnavi.com

他にも類似サービスがあるが柴山社長のインタビューを読んで気になっていたので WealthNavi を選んだ。

tech-camp.in

FOLIO

投資先の企業ではなくジャンルを選ぶというコンセプト。

folio-sec.com

これも中の人の考えが面白い。

careerhack.en-japan.com

暗号通貨

これは完全に投機と知的好奇心。bitFlyer, coincheck, Bittrex それぞれアカウントを作ってみた。

bitflyer.jp

coincheck.com

Bittrex.com - Bittrex, The Next Generation Digital Currency Exchange

手当たり次第売買してみたのだがまったく儲かってはいない。生半可なFXとか株の知識(移動平均線がどうローソク足がこうとか)で凸ったらみるみるマイナスがかさんでびびった

また、各コインの特性やアルゴリズム、とりわけブロックチェーンの勉強などはしていない…。


各金融期間の口座に入金する際にはインターネットバンキングを利用すると圧倒的に楽。これらを始めるまでアカウントがなぜか凍結されており銀行に直接行って解除してもらわないといけないのは辛かった。

それぞれのアカウントをマネーフォワードにも登録しておいた(ただしFOLIOとBittrexは自動連携に対応していなかったので手動でちまちま入力した)。だいたい資産の70%ぐらいを運用に注ぎ込むことになったようだ。

これで寝てるだけでお金が増えていく(たまに減っていく)ようになった!!!

保険

詳細は割愛するが、現時点ではどの保険も自分には完全に不要と判断した。

不動産

詳細は割愛するが、当面は不動産購入は自分にはメリットがないと判断した。


気持ち

妻にもこうしたサービスを紹介し、幾つか興味のあるものに登録してもらった。

使ってない口座や要らない保険の整理・把握にも繋がってある意味断捨離になったり、考えなくてよいことを忘れられるようになったり自分たちにとってのノイズが減ったのも良かったという気持ちです。

Simple is not easy (抄訳)

"Simple is not easy" という記事を読んで感銘を受けたので、ついでに英語の勉強と思って抄訳してみる。

www.christopherspenn.com


Simple is not easy

「Simple」は「Easy」のことではありません。驚くほど多くの人がこの2つを同義語だと混同していますが違います。実際にこれらが反意語になるケースがあります。

「Easy」は単に簡単だということに過ぎません。言い換えれば「Easy」は結果を生み出すための努力が最小限ですむということです。 「Easy」は重荷、努力、投資、約束のいずれも意味しません。多くの人々が望むものです。労力に不釣り合いな高級が得られる仕事。大した投資もせずに得られる愛情。達成が重要でないうえに、成長することでさえもさして重要でないような人生。

一方「Simple」は非常に難しいです。「Simple」とは重要なことを除いてすべてを取り去ることで、ダビデ像が現れるまで大理石を掘り続けるようなものだからです。「Simple」はミニマリズム、すなわち複雑さを取り除いて物事をコアエッセンスにまで減らすことでもあります。初めは取り除くべき余計なものがすぐに見つかるので簡単に思えるかもしれません。しかし掘り進めれば進むほど難しくなります。必要なものを取り除かないようにするスキルと熟練が必要になってくるからです。

まだあいまいですか?「Easy」はデジタルカメラを手に入れ、さっと開封し、無作為に写真を撮ることです。 スキルや投資は必要ありません。本当に簡単です!「Simple」は、あなたが真に伝えたい本質が一点の曇りなく輝くように写真を撮る方法を学ぶことです。

この時点であなたは「「Easy」は怠け者の価値観だから自分の人生と自分の辞書から無くしてしまおう」と思っているかもしれませんが、だとしたらあなたは恐ろしい間違いをするでしょう。「Easy」は勢いを生み出すものです。「Easy」によって早期に得られる低リスクの成功体験は継続へとつながるでしょう。お客さんを招き入れて最初の買い物をさせるもの、初めて買ったデジタルカメラで最初の写真を撮るのに役立つもの、それが「Easy」なのです。そう、「Easy」こそがボールを転がすのです。

一度そうした勢いを得たら、あとはシンプルさと簡素化に焦点を当てることが大事されます。先入観、成功への障害、不要なものこれらすべてを取り除くことが絶対に不可欠になります。とはいえ初めに「Easy」な成功体験を得られなければ、スキルを獲得したり何かに熟達したりすることは決してないのではありませんか?

「Simple」は「Easy」の違いを理解しましょう。あなたがしていることのどのあたりに「Simple」と「Easy」があるのか考えてみましょう。最初は「Easy」で、後から「Simple」になっている、そうでしょう?


ソフトウェアエンジニアリングの文脈、特に Rich Hickey 先生のおかげで Clojure の文脈で見かけることが多い「Simple」と「Easy」の概念だが、この記事ではソフトウェアのことには一切触れていない。人生訓のような語り口が印象的だった。

特に納得したのは「Easy」の良いところを強調しているところだった。弾みを付ける「Easy」なもの(momentum builder)がなければ継続や熟達には届かない、たしかに。これは教育心理学の「人は学びたいから学ぶのではなく、学び始めたから学ぶ」のだという研究結果にも通じるものがあると思う。学び始めのランディングを手厚くすることで自走する状態に持っていくことができるという考え方だ。

合わせて見たい/読みたい

Simple Made Easy

シンプルさの必要性 | eed3si9n

Clean Coder Blog

ふつうのRailsアプリケーション開発

『教育心理学概論』

意図しないイベントバブリングの停止 in CoffeeScript

jQueryのイベントハンドラでreturn falseするとイベントのバブリングが止まるとは知っていたのに気づかなかった例

flag = true

setFlag = =>
  flag = false

$target = $('.target')

$target.on 'change', (e) =>
  setFlag()
    
$target.on 'change', (e) =>
  submit(e.value) # ここに到達しない

お分かりいただけただろうか

var $target, flag, setFlag;

flag = true;

setFlag = () => {
  return flag = false;
};

$target = $('.target');

$target.on('change', (e) => {
  return setFlag(); // ここで return false しているので
});

$target.on('change', (e) => {
  return submit(e.value); // ここに到達しない
});

CoffeeScript を捨てようかともがいている最中にその意思を強めた例とも言えるがこんなコードを書くのも悪い

ag を使った複数行にわたる grep

既存コードで .all とかやっている場所を ag である程度まで*1洗い出そうと正規表現と格闘した。

ag 'users?(.where.+)?.all' みたいなので単一行のユースケースは良い感じに絞り込めたものの、メソッドチェーンしているやつ (multi line) が拾えないよと同僚から指摘を受けた。

全部まとめた表現は自分ではちょっと書けそうになかったので個別のケースに絞って書いてみたのがこんな感じ。

行頭に \. が来るケース

$ ag 'user(\s*\..*\n)+\s*(\..*)*\.all'

test.rb
11: active_users = User
12:                  .active
13:                  .all

行末に \. が来るケース

$ ag 'subscriptions.*\.\n(\s*.*\.\n)+\s*(\..*)*all'

test.rb
11: active_subscriptions = user.subscriptions.
12:                          active.
13:                          all

混在しているケース

無視


rubocop にもそういえばこのスタイルに関する cop があったようなと思ったらやっぱりあった

New cop DotPosition · bbatsov/rubocop@e41175f · GitHub

*1:Rubyで全ユースケースを洗い出すのは無理

git commit, rebase -i でうっかり起動した vim をキャンセルする :cq と、Git コードちょい読み

うっかり git commitgit rebase -ivim 起動してしまったがキャンセルしたいときは

:cq

でエラーコードとともに vim を終了させる。

エラーコード 1 を受け取った Git は処理を進めず終了する。

Git のコード

ついでに Git のコードをちょっと読んでみる。

git rebase だと git-rebase.sh の run_specific_rebase でエラーコードのハンドリングをしているようだ。

git commit は… builtin/commit.c の cmd_commit の中にありそうだと思いつつC言語力が低いのでパッと読んでよくわからなかった。なので試しに失敗してみて、エラーメッセージから追ってみた。

$ g cm 
# vim で :cq する
error: There was a problem with the editor 'vim'.
Please supply the message using either -m or -F option.

There was a problem with the editorコード検索をかけると、このメッセージは editor.c の launch_editor から来ているとわかった。

commit.c の中でこのメソッドを呼んでいるのは… ここか。2行目のエラーメッセージから探したほうが早かったようだ。

webpackerを導入したRailsアプリケーションをDeisにデプロイする

webpackerを導入したRailsアプリケーションが手元ではちゃんと動いておりテストもパスした、あとはデプロイだけだ〜という段階で失敗した。

解決策

新しめの Ruby アプリケーション用の buildpack が使われるよう、BUILDPACK_URL を正しく指定する。具体的には以下のように環境変数を与える。

deis config:set BUILDPACK_URL='https://github.com/heroku/heroku-buildpack-ruby'
# 特定のバージョンを指定する場合
deis config:set BUILDPACK_URL='https://github.com/heroku/heroku-buildpack-ruby#v170'

経緯メモ

2時間ぐらい試行錯誤したメモ。

Gem::GemNotFoundException

デプロイ失敗、Gem::GemNotFoundException に出くわす。

2017-11-16T16:01:50UTC app-name[web.1]: /usr/lib/ruby/1.9.1/rubygems.rb:308:in `bin_path': can't find gem bundler (>= 0) (Gem::GemNotFoundException)
2017-11-16T16:01:50UTC app-name[web.1]:    from /app/bin/bundle:3:in `<main>'```

Rails | `bin_path': can't find gem bundler に対処する - Qiita に書かれているように bundler を install し直せばよいのか?と思ったが、ruby 1.9.1 というのがそもそもおかしいと気付く。

Deis's app detection system is not smart

Slack の過去ログを Gem::GemNotFoundException で検索したら過去に似たような事例があり、どうやらpackage.json が ルートディレクトリにあると Deis が Node.js アプリケーションだと判定するらしいとわかる。

deis のコードでいうとこのへん。たしかにこのへんでダウンロードした buildpacks をループで回して最初にマッチしたものを選択しているだけなので nodejs > ruby の優先順になりそうだ。

git rm package.json

過去ログでは deploy 直前に git rm package.json してから push するというワークアラウンドで回避していたので一旦それを試してみる。

remote: [1G[1G       Webpacker requires Node.js >= 6.0.0 and you are using 0.10.30[K
remote: [1G[1G       Please upgrade Node.js https://nodejs.org/en/download/[K

heroku-buildpack-ruby が使われるようになったはよいが、違う理由で失敗した。Node.js バージョンが古いので webpacker が使えないようだ。

ここで使っている Node.js バージョンは buildpack 側で指定しているもので、そもそも Deis が preinstall している buildpack のバージョンがやや古めと SRE メンバーに教えてもらった。

Set BUILDPACK_URL

v150を指定しているCHANGELOG によると webpacker をサポートし始めたのは v155 から。

冒頭に述べたように環境変数 BUILDPACK_URL があればそれを使うようになっているとのことなので指定した。

2時間ぐらいかけて遂にデプロイできた。 👏

Heroku では起きない

余談だが Heroku ではデフォルトで最新の buildpack が使われるはずなのでこうした問題は起きないはず。

また、buildpack のアップデート時に非互換のでかい変更がブッ込まれるのはそうそう無い印象なので一旦はバージョン固定なしで運用してみる。


所感

インフラとして使っているのにも関わらず Deis のコードを読むのは初めてで新鮮。PaaS のコードが読めるって凄いことだな、と思うなど。

ラストワンマイルはいつも大変。