@kyanny's blog

My life. Opinions are my own.

RubyKaigi 2017 に参加します

rubykaigi.org

人生初の広島。修学旅行は広島を飛ばして長崎だった。

去年の RubyKaigi はオフィシャルパーティー以外の催し物に全く参加しなかった。京都は学生時代に四年暮らしていたので個人的に思い出深いスポットが多く、土地勘もあったため、一人行動に抵抗が無かった(むしろ一人のほうが好都合だった)。また、ちょうど「君の名は。」が上映中だったのでうっかり初日の夜に観たらハマってしまい、毎晩映画館へ行った。一年経っても奥さんから「京都まで行って交流もせずアニメの映画なんか観て、うまいものも食べずコンビニ飯で済ませて、一体何をやっているのか」と叱られる。今年は反省を活かしてもう少し活動的に過ごしたい。

スケジュール

  • 9/17(日)午後に広島入り。厳島神社か原爆ドームを見に行く。
  • 9/18(月)Kaigi に参加。夜は RubyKaigi 2017 Official Party に参加する。
  • 9/19(火)Kaigi に参加。夜は freee DRINK UP at RubyKaigi 2017 に参加申し込みしてみた。前に書いたブログに興味深いブコメをくれた人が freee の人らしいのでもしいたら会ってみたいのと、 QA の話をする勉強会でも freee の人の話が良かったのとで freee の中の人に興味があるので。あと、いま関わってるサービスの競合サービス*1を作ってる人が参加予定らしく、それもやや興味があるので。
  • 9/20(水)Kaigi に参加。夜は After Party に現れる予定。
  • 9/21(木)昼に広島発。当日の夜に東京で用事があり、また翌金曜日の午後にも埼玉で絶対に外せない用事があるので、残念ながら週末まで滞在して観光することができない。

*1:俺を含めて開発者は特に競合という意識はないが、親会社の営業の人たちは競合とみなしているようだ

ディスク使用量に余裕があるのに No space left on device エラーが出るときは inode 枯渇を疑え

df -i で inode 使用率がみえる。

-[3940]% docker run bash df -i
Filesystem              Inodes      Used Available Use% Mounted on
none                   1218224    523382    694842  43% /
tmpfs                   255879        16    255863   0% /dev
tmpfs                   255879        15    255864   0% /sys/fs/cgroup
/dev/vda1              1218224    523382    694842  43% /etc/resolv.conf
/dev/vda1              1218224    523382    694842  43% /etc/hostname
/dev/vda1              1218224    523382    694842  43% /etc/hosts
shm                     255879         1    255878   0% /dev/shm
tmpfs                   255879        16    255863   0% /proc/kcore
tmpfs                   255879        16    255863   0% /proc/timer_list
tmpfs                   255879        16    255863   0% /proc/sched_debug
tmpfs                   255879         1    255878   0% /sys/firmware

MongoDB とドットを含むキーと Embedded Document

途中で調べるのが面倒くさくなったので中途半端だけど、調べた範囲でメモしておく。

  • MongoDB ではドキュメントのキーにドットを含むことはできない
    • Embedded Document 内のキーにアクセスするとき、階層の区切りとしてドットを使うので、ドキュメントのキー自体にドットを含めてしまうと、そういうキーなのか embedded document へのアクセスなのか判別できないため
  • mongo-ruby-driver v2.4.3 だと insert 時にエラーになる
  • しかし mongo-ruby-driver v1.12.5 だと insert 時はエラーにならない
  • しかし insert できたドキュメントを update するときはエラーになる
    • クライアント側ではなくサーバ側にコマンドを送った結果がエラーなのでサーバ側でエラーになっていそう
    • ではなぜ insert は通って update は通らないのか?が謎
  • おそらく v1.12.5 の振る舞いのほうがおかしい
  • v.1.12.5 だとうっかりドットをキーに含むドキュメントを作れてしまうが、本来おかしいデータなので作らないほうがよい

GitHub - kyanny/mongo-dotted-key: My study about MongoDB and dotted key name

ちなみに mongo shell から試した場合も、キーにドットを含むのは NG となる

-[3880]% mongo
MongoDB shell version v3.4.5
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.2.11
WARNING: shell and server versions do not match
> db.books.insert({"meta":{"ok.google":"hey.siri"}})
2017-09-12T02:33:37.425+0900 E QUERY    [thread1] Error: can't have . in field names [ok.google] :
DBCollection.prototype._validateForStorage@src/mongo/shell/collection.js:244:1
DBCollection.prototype._validateForStorage@src/mongo/shell/collection.js:252:13
Bulk/this.insert@src/mongo/shell/bulk_api.js:663:17
DBCollection.prototype.insert@src/mongo/shell/collection.js:349:13
@(shell):1:1

代償

奥さんに「こういうイヤミスとか好きなんでしょ」と渡されたので読んだ(イヤミスが好きなわけではなく、傑作ミステリーとの評判が高い『殺戮にいたる病』を読んだらたまたま胸糞悪い系の話だった、というだけ)

これがサイコパスってやつか、と思った。

代償 (角川文庫)

代償 (角川文庫)

アクセスログを awk するとき何列目が何のデータか添字を手っ取り早く数える

こういうログがあるとき、

-[3662]% cat access_log.txt
2012-02-07T09:43:06.123456+00:00 heroku[router]: at=info method=GET path="/stylesheets/dev-center/library.css" host=devcenter.heroku.com fwd="204.204.204.204" dyno=web.5 connect=1ms service=18ms status=200 bytes=13

こういう風に特定の列のデータだけ見たいけど添字を数えるのが手間なとき($10 だっけ $11 だっけ?ってなる)、

-[3660]% cat access_log.txt | awk '{print $10}'
service=18ms

こんな風にすると見やすく表示できて便利。

-[3658]% cat access_log.txt | ruby -rpp -anle 'pp (1..$F.size).to_a.zip($F)'
[[1, "2012-02-07T09:43:06.123456+00:00"],
 [2, "heroku[router]:"],
 [3, "at=info"],
 [4, "method=GET"],
 [5, "path=\"/stylesheets/dev-center/library.css\""],
 [6, "host=devcenter.heroku.com"],
 [7, "fwd=\"204.204.204.204\""],
 [8, "dyno=web.5"],
 [9, "connect=1ms"],
 [10, "service=18ms"],
 [11, "status=200"],
 [12, "bytes=13"]]