2016-12-10(土)の Yokohama.rb Monthly Meetup #75 に参加しました。
次の流れでした。
- 前半は Ruby レシピブック読書会
- 後半は LT
今回は、参加者の @Nabetani さんがすでにメモを書いてくださっています。僕もメモしておきます。
レシピブック
今回はレシピ 240 から 243 まで読みました。おもにシステム寄りの Ruby プログラミングについてでした。
レシピ 240
システムのダイナミックリンクライブラリを Ruby から呼ぶためのレシピです。
システムライブラリを呼ぶためのライブラリとして dl が紹介されていますが、これは Ruby 2.0 以降では deprecated になっており、2.2 以降では削除されています。かわりに fiddle を使うとよさそうです。
また、macOS 環境では libc の代わりに libSystem.B.dylib を使う必要があります。
たとえば、次のような感じで標準 C ライブラリの関数としておなじみの strlen
が呼べます。
require 'fiddle/import' module LibSystem extend Fiddle::Importer dlload 'libSystem.B.dylib' extern 'int strlen(char*)' end p LibSystem.strlen('abc') #=> 3
レシピ 242
Ruby 付属のベンチマークライブラリである benchmark
についてです。
@igrep さんからベンチマークにより便利な benchmark-ips
を紹介してもらいました。与えたブロックの 1 秒あたりの繰り返し回数 (iteration per second: ips) を測定する gem です。評価値が大きいほど評価がよいので、直感的という話などをしていました。
軽く使いたいなら Benchmark#measure
を使っておくと楽そうです。次のように書けます。
require 'benchmark' puts Benchmark.measure { 'a' * 1_000_000 }
レシピ 243
シェルのコマンドを Ruby から起動するためのレシピです。
@Nabetani さんも書いておられますが、Kernel.#open
の引数に |
(パイプ)をつけて | df -k
のように文字列を渡すと、IO.popen
と同じ動きになることにびっくりしました。つまり、任意のコマンドを実行できるということです。この仕様については、次のドキュメントの最初にも
ファイル名 file が `|' で始まる時には続く文字列をコマンドとして起動し、 コマンドの標準入出力に対してパイプラインを生成します
と明記してあります。
さらに、これは macOS でも Windows でも実行できることを、前回に引き続き @igrep さんに Windows 環境で実験してもらいました!
File.open
にはこのような仕様がないので、ファイル操作にはこちらを使っておいたほうが、万一のコマンドインジェクションは防げるので安心ということだそうです。
LT
LT 一本目は、先月と話がかなり被るのですが、僕が 10 月に受けていた GMO ペパボの第二新卒向け研修「ペパボカレッジ」について、社のテックブログに書いたエントリをもとにご紹介しました。
ペパボさんよく人を育ててるんだなぁ #yokohamarb
— Yuji Yamamoto: 山本悠滋 (@igrep) 2016年12月10日
あらためてペパカレについて紹介しました #yokohamarb https://t.co/tiXsFpI7Ry
— ky (@kymmt90) 2016年12月10日
ペパボさんが第二新卒を大事に教育してる https://t.co/XtGcyDp0VQ
— ゆーいち@ヒョーバル (@u1tnk) 2016年12月10日
LT 二本目は、@ryonext さんから、先日の Re:Invent で発表された AWS のサービス群について紹介がありました。AWS は VPS から人工知能まで幅広いですね……。
懇親会
もう 12 月なので、忘年会と銘打たれていた気がします。来年もよろしくお願いします!!1
次回は 2017-01-14(土)です。次のリンクから申し込めます。ぜひぜひ。