mumumu の日記

Development, Translation, daily life, thoughts, and so on.

baby shutdown my server

赤子に Xeonサーバをシャットダウンされました。。上の画像のような感じでサーバを置いていて、なんか触ってるなーと思ったらLEDの光が消えてました。。

名前解決結果のキャッシュサーバをこのサーバが兼ねていたのでネットが不通になったり、ビルドが走っていたWindowsサーバが電プチによって起動しなくなったりなど、少なからざる被害をもたらしました。

「子供の手の届かない場所に置きましょう」という注意書き一般を鼻で笑い飛ばしていたのを死ぬほど後悔した次第です(´ー`; )

この注意書きで言うところの「子供」とは、赤ちゃんが歩き始める時期が既に該当してるんですね。世界中の赤子と向き合うエンジニアに 「サーバは子供の手の届かない場所に置きましょう」 と注意喚起したいと思います…

look back at 2014

2014年を簡潔にまとめると、以下の3つに明け暮れた一年だった。

A) ピアレビュー
B) 少しのコード書き
C) 本番運用

特にピアレビューは比率が大きくて、人のコードを見て指摘したりされたりしていた。そうする中で、事故ることが許されない環境にふわっと本番のことを考えない無責任なコードを投げつけられそうになって憤慨するという事案が多発した。別に仲が悪くなったというわけではないのだが、2015年はそういった部分を少しずつ言語化してアウトプットできればと思う。

DevOps って言うけれども、いくら仲良くしても無責任にコードを投げつけられるだけでは逆効果なだけだ。仲良くするにはお互いの意識が近くなければならないので、Ops の意識を何度でも言語化して伝えていかなければならないのだと強く感じた。

あと、ひとつのまとまったプロダクトをローンチまで持って行ったのもひとつの成果だ。大規模なトラフィックと24時間365日戦う中でまだまだやることはあるけれども、一区切りを付けたことは素直に喜びたい。赤子と向き合うのが一番大変な時期にぶつかり、相方には様々な迷惑を掛けた。バランスを取るのはなかなか大変だったけれども、相方を一人で孤立させないことを心掛けたい。

忙しさが大きくなると、周囲の動向に関する視野や問題意識が狭くなると思う。問題意識と視野あってこそのアウトプットなのだから、余裕を持って楽しもう。それが2015年の目標である。

Silly patch - Octopress does not open new entry file immediately

github Page を github で管理するためのソフトウェア Octopress では、新しいエントリを書くときにいちいちエディタを開くコマンドを打たねばならない。最初は気にならなかったのだが、ranger を導入したあたり からそれがどうにも煩雑だと感じるようになった。

こんなの誰でも思いつくだろと思って Octopress の github を調べると、こんな Pull Request が見つかり…

これをよく読んでいくと以下のように、「俺たちの流儀ぢゃねえからこれに類する提案は皆 Reject だよハゲ」という話になっていて…そもそもこういう路線の patch は本体に取り込まれる見込みがないことが明確になっていた(´ー`; )

https://github.com/imathis/octopress/pull/749#issuecomment-11451776

なので、仕方なく自分は必要な部分のみ糞 patch を当てるわけです。。

https://github.com/mumumu/mumumu.github.io/commit/a139bf79c3af9346c1f607ef04acce6e442a32df

またもや下らぬ patch を書いてしまった。。これもうシリーズ化しようかなって思うんですけど、どないですかね(´ー`; )

ranger - file manager with VI keybindings

http://ranger.nongnu.org/

比較的大きな規模のプロジェクトになると、ディレクトリツリーの階層もそれなりに深くなる場合が多い。しかも同じディレクトリに常にとどまって作業をしていればいいという話にならなくなってくる。ディレクトリを移動する度に cd /path/to/foo とか cd /another/path/fuga とかもう打ってられないことに気がついた。

vim とかのエディタ内のファイルマネージャーを使えばいいじゃない、と一時期は考えて netrw とか nerdtree とかを我慢して使っていた時期もあったが、どうもディレクトリの移動の度にリターンキーを「ッターン!」 しなければいけないのがつらく、結局使わなくなった。

ある日、コンソール上で画像ファイルをプレビューしたくなった。そんなソフトはないかと捜していたら、ranger にいきついた。いざ使ってみると、ファイルやディレクトリの移動、そしてファイルを開く操作が全て hjkl だけで済むのが異常に心地よいことに気がついた。w3m を入れて設定に一行足せば、以下のように画像ファイルのプレビューも出来る。cd /path/to/foo/bar するよりはかなり速い。 また、ranger を開きながら Shift+s でシェルに落ちることもできる。これもかなり楽。

また、vim の場合だと、ファイルを開きながら、別のファイルを選んで開くときも、 netrw とかを使わずに ranger を使えるモードがあることに気がついた。こんな設定 を ~/.vimrc に書けば、<leader>r を押すことで ranger でファイルを選ぶことができる。

そんな感じで喜んで使っていたのだが、Pythonのファイルを扱っていると若干問題があった。types.py というファイルがディレクトリに存在すると、それを vim から ranger で開こうとした時点でエラーになってしまうのだ。

1
2
3
4
5
6
7
8
9
10
11
12
Traceback (most recent call last):
  File "C:\Python27\lib\site.py", line 62, in <module>
    import os
  File "C:\Python27\lib\os.py", line 398, in <module>
    import UserDict
  File "C:\Python27\lib\UserDict.py", line 83, in <module>
    import _abcoll
  File "C:\Python27\lib\_abcoll.py", line 70, in <module>
    Iterable.register(str)
  File "C:\Python27\lib\abc.py", line 107, in register
    if not isinstance(subclass, (type, types.ClassType)):
AttributeError: 'module' object has no attribute 'ClassType'

これは ranger 自体が Python で書かれていることと、Pythonインタプリタ自体の問題 が重なったことによって起こることだった。けれども、今の職場で主に使われているのは Python なので、どうにかして解消しなければ ranger は使えないという話になってしまう。

仕方なく、細かすぎて伝わらないpatch を書いた… vim ファイルだけではなくて、コアのイベントアクションにまで手を加えているので、全く受け入れられる気がしない… それに vim 連携のためだけに types.py を特別扱いするとかアフォかと。俺がメンテナなら多分 Reject するだろうなと思いつつ、fork したコードだけは置いておくのであった(´ー`; )

https://github.com/mumumu/ranger