@kyanny's blog

My thoughts, my life. Views/opinions are my own.

最近読んだもの

Clojure for Fun and Profit | eBay Tech Blog

期待より内容薄かった。

The Sad State of the Backbone Ecosystem

Marionette.js 関係で調べ物をしてるとよく見るサイトの記事。広義の Backbone.js コミュニティで精力的に活動している人がいうのだからプロパガンダ的なバイアスは少なそうだし、公開データに基づいて論じていて信用できる感じ。

全体的にまぁそうだよなぁという感じ。何年も前に何度か書いた、フレームワークとアプリケーションの境界に関する問題意識を思い出した。シングルページアプリケーションとか書いてるとなおさら。

ちなみに社内チャットに貼り付けてみたところ Marionette.js を導入したイギリス人は「残念だけど我々のようなアーリーアダプターにはつきももの話だ」みたいなことを言っていて、いやたかだか2年前に使い始めたくらいでは全然アーリーアダプターではないだろ、むしろその時点ですでに枯れはじめてたのでは、と思ったがめんどくさいので言わないでおいた。

A new Device Mode for a mobile-first generation | Web Updates - Google Developers

モバイルが主流になってきてるのはアプリだけじゃなくウェブもそうだよね、という話はよく見聞きするけどポジショントーク入ってるのもあるんじゃないの、という感じもちょっとしてたが、もともとデスクトップブラウザである Chrome のしかもデスクトップで使う専用の開発者ツールがモバイルに主眼を置き始めているというのは、考えさせられる。

転職しました - once upon a time,

最先端の技術を使ったりやミドルウェアをリリースしてないとダメなんじゃないかという悩み

というのを有名な人たちとかですら感じるものなんだなぁ、というのがちょっと目にとまった。だからといって自分の悩みが軽くなったり、救われたりはしないのだが。

最近はそういえばこういうことをあまり気に病んでいない。ひとつにはずっと忙しくて悩む暇もない感じなのだが、業界トレンド的な情報をシャットアウトしたのもよかった。

ツイッターでウェブ業界の有名エンジニアとかを(例外はあるものの)軒並みアンフォローしてブログのフィード購読もやめ、はてブも見ない・使わないようにして三ヶ月も過ごせばすっかり(日本・東京のウェブ業界で働いてるエンジニアとしては)浦島太郎状態になる。これだけだとただの不勉強なひとになってしまうので Ruby Weekly みたいなニュースレターをいくつか購読して、技術トレンドっぽいニュースのインプットを補う。あとは Google Now が何か賢いアルゴリズムでそこそこそれっぽい記事をサジェストしてくれるの頼み。

このやり方のいいところは、それこそ転職しました系のローカルな話題を全然見ずに済むこと(上でリンクしてるブログ記事は、たまたまそれをツイッターかなにかで見かけた奥さんから「このひと知ってるひと?」と聞かれて初めて存在を知った)逆に悪いところは、流行りに疎くなるので同僚と話が合わなくなったり、勉強会などは確実に乗り遅れること(自分の場合は同僚とあんまり流行の話をしないし、人気殺到するような勉強会には行く気がおきないので、たまたまデメリットが少なかった)

CasperJS の then について

公式 API ドキュメント http://docs.casperjs.org/en/latest/modules/casper.html#then

This method is the standard way to add a new navigation step to the stack, by providing a simple function:

then は「ステップ」を表す。といわれてもなんのこっちゃ、という感じだが、要するに「前の処理が完了するまでちょっと待つ必要がある処理は新しい then のコールバックの中で実行する」という約束なのだ、と考えればよい。

公式 FAQ FAQ — CasperJS 1.1.0-DEV documentation

stackoverflow.com

「ちょっと待つ必要がある」いい例が思いつかなかったけど、例。 Web サイトを訪問してページタイトルを表示する。

casper = require('casper').create()

casper.start()

casper.open 'http://www.apache.org/'
casper.echo "1 -> #{casper.getTitle()}"

casper.open 'http://www.eclipse.org/', ->
  @echo "2 -> #{@getTitle()}"

casper.open 'http://www.fsf.org/' # same to `casper.thenOpen 'http://www.fsf.org/'`
casper.then ->
  @echo "3 -> #{@getTitle()}"

casper.run()

https://github.com/kyanny/playground/blob/gh-pages/how-casperjs-then-works/main.coffee

実行結果。

$ casperjs main.coffee
1 ->
3 -> Front Page — Free Software Foundation — working together for free software

1 は open が完了する前に echo が実行されてしまい、まだページタイトルがとれないので 1 -> だけ表示される。

2 は open そもそもコールバック関数を受け取らないので空振りしている。

3 が正しい使い方で、 open 完了後に実行される次のステップとして then が登録されるのでちゃんとページタイトルが表示される。 thenOpen()open().then() のシンタックスシュガー。

最近

健康

悪い。持病は薬の増量で持ち直したけど、花粉症・アレルギー性鼻炎からくる喉・咳がなかなかよくならない。医者でもらった薬を飲むと回復するけど飲むのを止めるとすぐ再発する。例年に比べて喉が弱くなってる気がする。

仕事

相変わらず忙しい。忙しさの種類は変わった。難しくないけど大急ぎな対応が増えて、慌ただしく過ごしてるうちに一日が終わってしまって、本来やるべき仕事が進まない、みたいな感じ。

インプット

それでもだいぶ落ち着いてきて(主に自分の気持ち・ペースが)、いろいろインプットしたい気持ちがとても盛り上がっているし、落ち着いて取り組むこともできていて、とてもよい。新しいプログラミング言語をゆっくり勉強したり、教養を深めるような本をゆっくり読んだり。

アウトプット

インプットに興味が傾いているので、アウトプットは反対にあんまりする気が起きない。それで焦りも感じないので、まぁこれでいいか、という気持ち。細々したメモをプライベートな Wiki にちまちままとめていて、それが盆栽・箱庭っぽくて楽しいのもあって、なおさら外に向けてどうこうという気にならない。

最近の TODO 管理法

これもちょろちょろと試した結果、「自分宛にメールする、終わったらアーカイブ」という非常に原始的な方法に落ち着いている。

まず、「ツールを出来るだけ増やさない」という制約を課した。いろいろ試したいんだけどどうせ使いこなせないし、すぐ飽きるし、というのが目に見えている。暇で仕方なかったら喜んで暇つぶしをしたいところだが、本当に忘れちゃいけない・やらなきゃいけないことができなくなってしまうのは困るので、新しい TODO 管理サービスにサインアップしたりするのはやめにした。

普段から毎日必ず使うものをベースに考えると、結局 Gmail (Inbox) と Google Calendar くらいしか(自分が毎日確認すると)信用できないな、と思い、 Inbox のリマインダーでいいじゃんと思ったのだが、 iOS だとこれがけっこう追加するまで面倒くさい。

ホーム画面で Inbox アプリをタップ -> 右下の + をタップ -> リマインダーのアイコンをタップ -> 何か書く -> 保存をタップ

メールなんてめったに書かないから右下の + をタップでまず迷うし、リマインダーのアイコンを目で探すのも迷う。ようやくキーボード入力出来るようになったころにはもう何をメモしたかったか忘れてしまった、なんてことがしょっちゅうあった。で、 Google Keep を使ってみようとか、 Evernote のリマインダーを Sunrise で見るのはどうかとか、 iOS のリマインダーでもいいんじゃないかとか、いやいや iOS のメモでいいじゃんとか(El Capitan にあげてなくて同期できなくなり断念)、どんどん工夫を凝らしたくなってしまってそれじゃダメだとなり、最終的に Squarespace Note を選んだ。

Squarespace Note はたまに入れてみたりはするものの特に用途がなくてすぐ消したりしていたが、極めて単機能なので「メモってメール」を思いつきが揮発する前に done できるのがとても良い。

ホーム画面で Squarespace Note アプリをタップ -> 起動したらもうキーボード入力できる状態なので何か書く -> 画面を下に引っ張って離す(とメール送信される)

タップが一回でいいし、選択肢の中から何かを選ぶ必要もないし、最後の操作がタップでないので流れるように操作できてスムーズ。アプリが立ち上がるまでの数秒の間に揮発してしまったこともあったが、数秒くらいなら集中すれば覚えていられるので歩いてるときに立ち止まってメモ、みたいなチャンスも(これまでに比べれば)逃さない。

受け取ったメールの管理もなるべく複雑にならないように、「直近でアクションが必要なものは Pin する」「そうでもないがせっかくなのであとで思い出したいものは Inbox に放置」「急ぎではなく期日があるものはリマインダーをセット」「終わったらアーカイブ」くらい。先にスケジュールが決まっているものは Google Calendar にイベントを作ってしまう(が、その日までに何かを準備しなきゃいけないとか、タスクとして意識し続ける必要があればメールも併用)

Inbox の「リマインダー」を使うと、 Google Calendar アプリで(現状モバイル端末上だけではあるものの)リマインダーも表示されるので非常に把握しやすく、心に余裕があればそちらを使うこともある。このあたりは今後おそらくいろいろ連携や使い勝手が強化されてくると思うので、ゆくゆくは「メール」は使わなくて済むようになっていくといいな、と期待したい(iOS の通知バーのウィジェットから Inbox にリマインダーを追加できるようになる、とか、もしくは「リマインダーを追加」という専用アプリがあるとか、だと嬉しい)

要するに、「Google の中で暮らす」と決めてしまって細かい不便に目をつぶることにしたらそれなりに楽だった、というお話でした。

公開できない技術メモの置き場

紆余曲折を経て、結局 GitHub のプライベートリポジトリの Wiki を使っている。用途は主に仕事関係のなにか操作手順(コマンド)とか、調査用コードスニペットとかのメモ。

自分にとっての要件を整理すると、

  • Must
    • オンラインサービスであること(「クラウド」にデータを置けること)
    • 自分以外アクセスできないこと(Gist みたいなのは不可)
    • データのエクスポートができること(できればインポートしやすいフォーマットが望ましい)
    • 検索ができること
  • Nice to have
    • Markdown で書けること(リッチテキストでないこと)
    • コードのシンタックスハイライトができること
    • 余計な機能がついてないこと(「タグ」とか)

他にもあるような気がするけど思い出せないのなら大したことではなかったのだろう。

書いてて気づいたが、「URL があること」が自分にとって非常に大事なのかな、と思った。リンクできること、それも特定のツールの枠を超えて、というあたり(例えば howm みたいなメモツールを使うと、そのシステムの範囲内でしかリンクできない)

この一、二ヶ月くらいでいくつか試して、 Kobito はローカルに閉じてるのでダメ、 Emacs の何かも同様にダメ、 Marxico は煩雑すぎてダメ、 Quiver は多機能すぎてダメ、 Evernote は論外、 GitHub リポジトリを Web から使うのは検索性に勝るが「ファイル名を決める」というのが面倒くさい(あとエディタも良くない)、という遍歴で、検索性に劣るものの最も「邪魔をしない」 GitHub Wiki が消去法で残った。 Qiita::Team とか Confluence みたいなサービスを一人だけで使うのも検討したが、わざわざこれのためだけに別サービスを契約して月額いくらか払うのはやり過ぎと感じた。

検索は GitHub Wiki Search という Chrome 拡張を入れているがこれはどうしても探せないときの「奥の手」で、ページ名をなるべく自分が使いそうな検索キーワードだけにして、元からついてるインクリメンタル検索でさっと探すスタイル。語彙が乏しいのでいずれかぶりまくって破綻すると思うけど、頻出するものだけすぐ見つかる場所にあればいいという割り切りの考え方。なので Home の整理も一切やらず、真っ白のまま。

この手のメモの管理・活用はこれまであまりうまくやれた試しがなくて、公開できるノウハウ・Tips については結局このブログが最も信頼できる(実際、週に何度も検索している)という感じだったが、頻出する手順を忘れて毎回調べながらやる労力と時間のロスはばかにならない(生産性を大きく損なう)と数カ月前からいまさらながら再認識して、無駄を省くために自分に合ったやり方を模索している。またしばらくしてドキュメントがたまってきたら、改善できないか振り返りたい。