Subscribed unsubscribe Subscribe Subscribe

@kyanny's blog

Write down what I learnt.

GitHub の Commit ページを移動するキーボードショートカット

そういうのないの?と聞かれて調べたらあった(github.com の適当なページで ? 押したあと Show all をクリック)

f:id:a666666:20150728024007p:plain

https://github.com/rails/rails/commit/0a780b1e8527c7d1bc764d6b6423966ff0381af4p を押すと https://github.com/rails/rails/commit/695937c23b0c283488060825c87b8402cd35d4f1 に移動する。

子 -> 親へは移動できるが親 -> 子に直接移動はできないので、 Pull Request をコミット単位でレビューするときなどは latest commit から見始めないといけない。子から始めた場合、親をみてもう一度子に戻りたいときはブラウザの「戻る」を使えばよい。

SendGrid の suppression list からメールアドレスを削除するスクリプト

SendGrid は bounce メールを suppression list に入れることがある。 suppression list に入ったメールアドレスにはメールが送信されないが、業務で利用しているメールアドレスが何かの理由でバウンスし、 suppression list 入りしてしまうことがある(あった)。大変困るので、リストに入っていたら削除するスクリプトを書いた。 Jenkins に仕込んで定期実行させる。

Delete email address from suppression list of Send ...

SendGrid は Web API からいろいろ操作できて便利。

https://sendgrid.com/docs/API_Reference/Web_API/bounces.html

ghq でクローンしたディレクトリを peco で検索して移動 (bash)

zsh での例ばかり見つかるので bash では無理なのかと思って諦めていたがいい加減面倒くさくなってきて zsh に乗り換えようかとも思ったが改めて調べたら bash でもできた。

こういう関数を ~/.bashrc に書けば ok。

function pcd {
    local dir="$( ls -1d $HOME/github/*/* | peco )"
    if [ ! -z "$dir" ] ; then
        cd "$dir"
    fi
}

最近読んだもの

#:g1: Common Lispは大文字と小文字を区別しないという誤解

なるほど、むずかしい。よくわからなかった。何かしら配慮しない限りは defun foo のあと defun FOO が評価されると foo が FOO で上書きされてしまう、というのは、技術的には大文字小文字を区別するのだとしても、実用上は大文字小文字を区別しないものと考えて使わないと事故りそうだなと思った。コーディング規約でシンボル名は全て小文字にすべし、とか定めたり、 lint 的なものをかけるのも簡単そうだから運用で十分カバーできそう。

メタな話として、ソースコードの書き方がどのように解釈されるかは言語処理系の仕様次第で普遍的なルールがあるわけじゃないのだな、ということに気づけたのが面白かった。例えば Ruby の場合アルファベット大文字で始まる識別子は定数で、 Ruby しか知らないと他のプログラミング言語においてもそれが当たり前であるかのように考えてしまいがちだが、そういうルールに基づかない世界があっても別に何も不思議ではない。

逆に Common Lisp に慣れている人からすれば「Ruby は識別子の先頭がアルファベット大文字か小文字かによって全然異なる解釈をするから、先頭一文字の case を意識しなくてはならなくて面倒」と感じるのかもしれないわけだ。そういう「自分が常識だと思い込んでいることとの差異(現実に対して自分の感覚のほうがズレている)」を意識するきっかけになった。

CSS再入門 - できる!中央寄せ 2 | CodeGrid

今回もとてもわかりやすかった。平易な文章だが仕組みや理屈を手抜きせず技術的な裏付けありで説明しており、最高。

backbone.stickit のセレクタにマッチする要素が複数あるのに one-way binding の要素は無視され two-way binding しか動かない理由

サンプル https://github.com/kyanny/test-stickit app.js 参照。

view1 の h1 h2 はどちらも model の値で更新される。 view2 の input も同様。しかし view3 の h1 h2 は無視され input のみ値が更新される。なぜか。

getConfiguration の中で handler (モデルの属性値をビューに反映する具体的な方法を示すオブジェクト)を組み立てるときに、

  1. 一番 generic な handler として $el.text(val) というのが定義されている(この handler は特定の要素向けではないので selector がない)
  2. フォーム要素の場合はそれぞれ実装が複雑な handler が別に定義されている(input 要素用の handler も)
  3. セレクタに input 要素がマッチすると input handler が「利用可能な handler」として選択される
  4. handler は最終的に一個になるので generic handler と選択された handlers が _.extend でマージされる
  5. 最終的に得られる handler は selector が input 固定になるので他の要素には適用されない
  6. 結果として h1 h2 要素の値は更新されない

という理由。下のスクリーンショットでいうと、 handlers には三つのオブジェクトが入っていたが(左から generic handler, input handler, observe のマッピング情報)、 config では一つにまとめられてしまっている。この config が handler として使われるので...というからくり。

f:id:a666666:20150723204624p:plain