お布団宇宙ねこ

にゃーん

RubyKaigi2015に参加した話(1日目)

rubykaigi.org

会社からスポンサーチケットをいただいたので行ってきた。こういったカンファレンスは YAPC 以来2回目だったからどんな発表が聴けるかわくわくしてたら...

最高(´・_・`)

以下、聴いたトーク。

ちなみにレポート内容が箇条書きになっているのは自分の知識不足の表れなので戒めのためにそのまま残しておいた。

Saving people from typos

  • did_you_meanというgemを作った人
    • kaminariのメンテナーもしてるよ
  • 誤ったメソッドなどの入力に対して正しいと思われるものをサジェストする
    • gitのcliやグーグルの検索にも同じようなものが使われている
  • 検出されるエラーの種類によって使う辞書を変える
  • タイピングミスとスペルミスは違う

Time files like an arrow: Fruit files like a banana. Parsers for Great Good

  • パーサのお話
  • 区切り方で文章は意味が変わってくる(likeでも「好き」と「のような」の2つの意味がある)
  • 分解してみる
    • 数学の足し算や引き算を例にあげると、数字のあとは必ず演算子がくる規則がある
    • これがわかっていると少しずつ式を分解することができる
    • カッコがかかっているものはさらに小さく分解ができる
  • 分解したものを構文木にして書いてみるとわかりやすい
  • スタックという形で分解した順に積み上げて表現することもできる

High Performance Template Engine: Guide to optimize your Ruby code

  • テンプレートエンジンの話
  • erb, haml, slim
  • テンプレートエンジンによってテンプレートをrubyのコードにコンパイル、それをhtmlにレンダリングすることで使える
  • ちょっとしたテクニックを使えばrubyの仕組みを全て把握していなくても速くすることができる
  • ベンチマーク
    • benchmark-ipsというgemで測ってる
    • コンパイルレンダリングの時間を計測
    • stackprof(gem)
    • 推測するな計測しよう
      • 改善に対する評価をちゃんと行う
  • テンプレートエンジンのためのライブラリ、temple
  • rubyをパースする、parser gem
  • attributesの種類
    • static(高速)
    • dynamic(コンパイル時まで値がわからない。けどそれなりに速い)
    • runtime(遅い)
  • dynamicコンパイルはエラー時に行番号がずれることがある
  • 速くするためにC拡張を使う(これはクックパッド本体でも使われている)
  • あまり使われない機能を削ることで計算そのものをなくして速くする
    • C拡張もちょこちょこやる
  • 修正をPRで送ったらリジェクトされたので仕様らしい

TRICK 2015: The second Transcendental Ruby Imbroglio Contest for RubyKaigi

  • "TRICK" というrubyプログラミングコンテストがある
  • 2015で2回目
  • 同じようなことをしているコンテストは別言語でいくつかある
  • 2013年には、ポエムに見えるコードや実行するとバッハの音楽が流れる音符の形のコードなどが作品として出てきた
  • 目的としては、とにかく利益のない意味不明なプログラムを書く
  • 審査員も出してOKだし出してる
    • でも公平性を保つために誰が書いたのかは知らずに採点をしている
  • 宣伝
  • 去年は日本からのエントリーしかなかった
    • 今年になって少し外国の割合が増えたけどまだまだ日本以外のエントリーが少ない
  • 今年の作品
    • コップの中のコインがどこにあるのか当てるプログラム
    • rubyスキーマ両方で解釈できるプルグラム
    • プログラムと同じ模様を返すプログラム
    • 数独ソルバ
    • アンフェスバエナプログラム。自分自身を時計回りに複製していく

所感

英語のトーク試しに聴いてみたらなにを言っているのかほとんどわからなかった...。スライドで脳内補完することでなんとか大筋の内容は掴めたけれど。

TRICKのトークはコードを読んでもなにをやっているのかわからないけれどすごいものができているという印象だった。このメソッドはこのプログラムを作るために作られたとか言ってて言語開発者ですらそんなことを思うメソッドが存在するのかと。

知らない用語が出てくるととりあえず記憶の片隅に留めておいて聴くことにしていたけれど、トークを聴き終わったあとに結局なにが言いたかったんだっけってなることが結構あった。YAPCとはベクトルが違うかもしれないけれど、トークを聴いた時に面白いことやってるって感覚を持てたらいいと思ってるから、次回行ける機会があればもう少し知識を増やしてから臨みたい。