- 開発
READ MORE
こんにちは、hachi8833です。RubyKaigi 2017@広島のかわいい公式Tシャツをどうやらどこぞに置き忘れてしまいました(´・ω・`)
RubyKaigiの動画も既にすべて公開され、スライドもほぼ出揃ってきたようです。既に大きな話題になっているので今さらですが、RubyKaigiのNOCWi-Fiチームのそらはさんのインフラ記事がとてもよかったので一応貼っておきます。
書いた / “RubyKaigi 2017 で Wi-Fi を吹いてきた #rubykaigi – diary.sorah” https://t.co/fY1AEYtthh
— そらは (@sora_h) September 25, 2017
ウオッチ特別編は2日目LTと3日目セッションです。それではいってみましょう。
LTは10本のような気がしてましたが、並べてみたら12本でした。昨年と同様、LTにするにはもったいないレベルの内容が多く、大変濃密な1時間でした。以下は通しのLT動画です。
セッションの番号は、先週に続き視聴した順に振っています。今回動画やスライドの埋め込みは控えめにしました。
つっつきボイス: 「マストドンって最近流行ってるようでござるな」「スライドでも説明されていますが、分散サーバー型のTwitter的マイクロメッセージのSNSで、フェデレーションという概念がある」「最初OStatusという古い標準をベースにしたGNU socialでMastodonしてたのが、バルス祭りに備えようとしたときにパフォーマンスが出ないわドキュメントもろくにないわで、検討の末ActivityPubという新しい標準に乗り換えたお話」「Web開発者やインフラエンジニアならいろいろ心当たりありそうな話でした」
つっつきボイス: 「vimでマリオ動かしてた」「VimでIDEみたいにRubyコードからc定義へのジャンプやオートコンプリートとかするプラグインを書いたというLTらしいお話でした」
上のスライドMarkdownにあったhttps://github.com/ujihisa/cruby-defs.vimはRubyKaigi中に公開するとありましたが、今見たらリンクが切れてました。数日前のリポジトリと思われる以下がありましたので参考までに。
frozen_string_literal: true
. @znzつっつきボイス: 「frozen_string_literal
マジックコメントを付けまくったら、IO#read
でもエラーが出たそうです」「read
なのにでござるか?」「IO#read
のパラメータが2つあるやつだと2つ目がバッファなんですが、そこで起きてた」
joker1007さんのrefinement愛が伝わってきました。
RubyKaigiブログ書いた! #rubykaigi
RubyKaigi 2017の記録 – joker1007’s diaryhttps://t.co/Xa8DeugRcS pic.twitter.com/WhSLZorCEN— ジョーカー1007 (@joker1007) September 27, 2017
つっつきボイス: 「refinementなら特定のテストの特定の部分だけパッチを当てる、みたいなことができるんですね」「TableSyntax
のテストの書き方とかなかなかトリッキー↓」
つっつきボイス: 「最初ニコ生で小規模にWeb Socketでプロキシ立てたら『これニコ動でもやれるよね?』と指示が来て、ユーザー数が段違いなので引きつりながらJRubyで切り抜けた話」
「サーバーに入る人より出て行く人が多かったりという怪現象」
つっつきボイス: 「Railsのブラウザコンソールでオートコンプリートできるようにしたそうです」「ほほー」
今動画を少し見直してみると、Ruby Roguesという技術系Podcastを愛聴しているとスライドに記載されていたので貼ってみました。文字起こしもされていてなかなかよさそうなPodcastです。
つっつきボイス: 「hypervisorでmrubyしようとしたらFPU(浮動小数点演算ユニット)が使えなかったりしたのでソフトウェアに置き換えたりして切り抜けた」「大昔はFPUなんてないのが当たり前だったからみんなこんなふうにソフトウェアでやってましたけどね: 8088の頃とか」
そういえば私も8080から始めたのでした。
glitchingという用語を初めて知りました。glitchは一般には「故障」「誤作動」と訳されるくだけた英語ですが、コードのある部分と別の部分をわざと取り替えるなどして、普通では出てこないようなバグをあぶり出す技法のようです。glitchingのため、ここではamerican fuzzy lopというツールを使ったそうです。
つっつきボイス: 「urabeさんがRuby trunkにときどき『どうやって見つけたのこれ?』みたいな見つけにくそうなバグをちょくちょく上げていたのは、きっとこれ使ったんですね」「アプリ開発者よりは言語やフレームワークメンテナが使いそうな」
こうしたツールをfuzzer(「毛羽立たせる」からの転用)と呼ぶそうです。私はつい楽器エフェクターのファズを連想してしまいました。
つっつきボイス: 「機械学習用ライブラリdlib(C++)用rubyバインディングを作成した話」「GPUを使いたくてCUDAを呼ぶためにがんばった」「RubyでGC(ガベージコレクション)してもGPU側では自動でGCされないので自分でやってくださいだそうです」「そういえば昔機械学習で遊んでたときにNVIDIAのCUDAダウンロードしたんですが、すごくでかいうえに結局Pythonにバインドできなかった…」
つっつきボイス: 「Rubyist Magazineるびまの記法をhikiからmarkdownに変えた話」「昔はいろんなWiki記法が乱立しとりましたなー(今もか)」「今はGitHubのおかげで開発者にはmarkdownが定着したし、記事をもっと書いてもらうために書きやすい環境を整えたということですね」「TechRachoが昨年内部的にmarkdownに切り替えたのも記事作成促進の一環なのでわかるなー」
つっつきボイス: 「まさに今回のオープニングキーノートでも触れられていた『RubyをコンパイルするためにRubyが必要』という部分に手を加えた話」
rakeのファイルを動かすためにminirakeをシングルバイナリ化したそうです。
つっつきボイス: 「これはもう普通のセッションでやってもおかしくない内容」「私も同じこと思いました」
Here are my slides for today's #rubykaigi lightning talk / 結構丁寧に資料つくったので見てください! https://t.co/0qFXTwGRrZ
— k0kubun (@k0kubun) 2017年9月19日
どこで見かけたか思い出せませんが、今回のRubyKaigiにはセッション枠の3倍ぐらい応募があったそうで、これを含むいくつかのLTも、もともと通常セッション用だったのかもしれません。泣く泣く絞り込んだ運営側の苦労が偲ばれます。
つっつきボイス: 「Aaron Pattersonさんのこのセッションもよかった: GitHubの中の人として、Unicornのチューニングの一環としてRubyのGC周りを改良した話」「CoW(Copy on Write)はコピーは瞬時に終わる代わりに、後で書き込むときにコピーが始まって遅くなるやつ」
そういえばiOS 11やMac OS High SierraのAPFSにもファイル単位でのCoWが行われます。
「メモリはページ単位で管理されますが、実際にはページ内に使われていない領域がけっこう含まれているので、起動時にこんなふうに↓コンパクトにすればfork時にCoWでコピーされる量が明らかに減るし、Unicornの場合実はめったに書き換えは発生しないのでパフォーマンスがよくなる」「初期起動ならコンパクト処理がんばって多少遅くなっても運用上問題はないし」「Ruby側のC実装の問題などで移動できないページもあったりするけど、それでも46%までコンパクトにできたそうです」
並行処理向けで知られるErlang言語のBEAM VMを使って、できるだけRubyライクな言語を作る試みです。今回のRubyKaigiでは、Rubex、Goby、そしてこのJetとRubyライクな新言語の発表が目立ちました。
BEAM VM上で動くという点ではElixir言語と似ていますが、Erlangの特徴を採り入れつつ、よりRubyらしい記法を目指しているそうです。
その一方で、クラスを継承しないとかブロックが単なるクロージャであるなどの独自の方向性も打ち出しています。
つっつきボイス: 「スライドにGobyが映っていたので個人的にちょっとうれしかった」「Q&AでMatzがとてもうれしそうにたくさん質問してました」
つっつきボイス: 「BigDamというJavaで書かれた社内の大規模分散ストレージのRuby版を自分で書いたそうです『だって書きやすいから』」
なおbigdam-pool-rubyは現時点でもまだ公開されていません。
IRB生誕20周年にかけたRDoc内パーサーのお話です。今のRubyにはRipperという正式なパーサークラスがありますが、昔はなかったのでIRBやRDocなんかが独自のパーサーを持ってしまっていて、そのRDocのパーサーをこの方がRipperに置換えてくれたそうです。パーサーがいくつもあると、本家パーサーが更新されたときに並行してメンテしないといけなくなって相当つらいだろうと想像できました。
偶然ですが、数か月前私がGobyのREPL部分を改造していたときに、最初に実装したStanさんから「参考までに、RubyのIRBは独自のパーサーを持ってるよ」と教えてもらい、見に行ったら本当にRubyで書かれた独自パーサーがありました。
つっつきボイス: 「前日のRubyKaraokeで平沢進を素晴らしい美声で熱唱している方がいて個人的におおっと思ったのですが、それがこの方でした」「冒頭で登山関連の話が割と長く続いて、どうなるかと思ってドキドキしちゃいました」「こういうドキュメント寄りの作業はなかなかやってくれる人がいないだろうなと思いました: 実際このPR↓に喜びの声が続々あったそうです」
つっつきボイス: 「パターンマッチングとあったので最初正規表現の話かなと思ったんですが、Rubyに%p()
というElixir的な新しいパターンマッチング記法を追加する話がどちらかというとメイン」「ワイの大好きな%w
みたいなやつですな」
つっつきボイス: 「RubyやRedMineなどのお馴染みのツールを開発以外の業務にも役立てる話でした」
つっつきボイス: 「昨年のRubyKaigiではJRuby系のセッションを全然見られなかったので見てみました: JRubyの歴史や概要をおさらいできた」「今年のJRuby関連セッションは昨年より少なかった印象です」
つっつきボイス: 「これは私とmorimorihogeさん両方とも見ました」
「RuboCopがコードを解析する仕組みと、自分で設定を書いてみようというお話でした: 広く使われているツールなのでQ&Aも賑わいましたね」「RuboCopもRipperは使ってないようでした」
RuboCopのメンテナの方だと途中まで気づいてなかった…
m_sekiさんは今年もおそ松さんで攻めてます。
つっつきボイス: 「1日目のko1さんのセッションにもあったFiberのお話: 動画で丁寧に解説してくれているので動画の方がわかりやすいと思います」
Fiberやスレッドはやっぱり難しいとうなずき合いました。
週刊Railsウォッチ(20170922)特集: RubyKaigi 2017セッションを振り返る(1)、Rails 4.2.10.rc1リリースほか
つっつきボイス: 「速いと評判のTruffleRubyをチェックしたくて見てみました: JVM上で動くのでJRubyととても近い関係」「ファミコン(英語圏ではNES)エミュレータのOptcarrotもベンチマークに使ってました」
つっつきボイス: 「GCCなどを長年手がけている方だけあって、CPUのインストラクションコードが出まくる非常に濃厚な内容: さすがの締めくくりでした」「まあこのレベルを扱える、コンパイラの中身まで知りつくした超ベテランは世界にも数えるほどしかいないでしょうな」
「ここでもOptcarrot使われてた: Microsoftが以前フライトシミュレーターでパフォーマンスチェックしてたのをちょっと思い出しました」
Rubyに今後JITが導入されるのか、されるとしたらどんな形になるのか、見守りたいところです。
あらためて、みなさまお疲れさまでした。
ここから通常運転です。
先週お伝えしたrc版から基本変わってないようです。
DHH自身の旗振りです。
The combination of config/secrets.yml, config/secrets.yml.enc, and SECRET_BASE_KEY is confusing. It’s not clear what you should be putting in these secrets and whether the SECRET_BASE_KEY is related to the setup in general.
This PR will deprecate secrets.yml* and instead adopt config/credentials.yml.enc to signify what these secrets are specifically for: Keeping API keys, database passwords, and any other integration credentials in one place.
with_attached_*
スコープを導入改修そのものは1箇所でした。
# activestorage/lib/active_storage/attached/macros.rb
+ scope :"with_attached_#{name}", -> { includes("#{name}_attachment": :blob) }
ActiveRecord::Associations::Preloader
のメモ化部分# activerecord/lib/active_record/associations/preloader/association.rb
def key_conversion_required?
- @key_conversion_required ||= association_key_type != owner_key_type
+ unless defined?(@key_conversion_required)
+ @key_conversion_required = (association_key_type != owner_key_type)
+ end
+
+ @key_conversion_required
end
change_table_comment
とchange_column_comment
がMySQLでも使えるようになったkamipoさんのPRです。
activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
+ def change_table_comment(table_name, comment) #:nodoc:
+ comment = "" if comment.nil?
+ execute("ALTER TABLE #{quote_table_name(table_name)} COMMENT #{quote(comment)}")
+ end
+
...
+ def change_column_comment(table_name, column_name, comment) #:nodoc:
+ column = column_for(table_name, column_name)
+ change_column table_name, column_name, column.sql_type, comment: comment
+ end
+
TechRacho記事でご紹介したこのRails 5の機能↓への追加です。
# actionpack/lib/action_dispatch/system_testing/server.rb
- Capybara.server = :rails_puma
+ Capybara.server = :puma, { Silent: self.class.silence_puma }
end
つっつきボイス: 「今は管理画面系gemもたいていRails 5に対応していると思いますが、5が登場したころまともに動いたのがこのgodminぐらいしかなかった」
ドメイン駆動開発(DDD)に関連してるようです。
つっつきボイス: 「このサイト、これも含めていい記事が多いので翻訳しようと思います」
これも上のサイトの別記事です。
クックパッドが入っていないのは著者が英語圏の人だからでしょうか。
Travis-CI製ですが、さまざまなCIサイトにデプロイできるようです。
つっつきボイス: 「対応CIが多くてサポートが薄まってないといいけど」「BPSの主力リポジトリのGitLabはまだ入ってないかー」
短いのですぐ読めます。
火曜日にさらっとリリースされていました。一応記念写真。
日本語版もあります。
Rubyの現状 : RubyKaigi 2017の簡単な振り返り #rubykaigi | JetBrains ブログ – https://t.co/lkEniXDPkd
— JetBrains (@jetbrainsjp) 2017年9月27日
I'm speaking at RubyConf about the history of space computing + simulating rocket launches with Ruby and Kerbal Space Program! https://t.co/U532SKpuYV
— Nate Berkopec (@nateberkopec) September 23, 2017
よさそうです。
30分の動画です。今年6月にニューヨークで開催されたGORUCO 2017というRubyカンファレンスのセッションだそうです。初めて知りました。
目次を見るとRubyKaigi並にエッジの効いた感じのセッションが多く、Railsネタもいくつもあるようです。
つっつきボイス: 「このPolyglotってどの意味なんだろう?」「Polyglot.jsではなさそう: Single track(=セッションの部屋が分かれていない)とあるからそれとの対比で「いろんな内容を扱う」的な感じかな」「あー、それか: 多言語のことでもなさそうだし」
polyglot: {形} : 数カ国語の[に通じた・を話す・で書かれた]
ロゴからして「ウォーター」と読ませたいようです。
つっつきボイス: 「Capybaraの競争相手ですね」
+* Emoji
+ Emoji
+ Emoji_Component
+ Emoji_Modifier
+ Emoji_Modifier_Base
+ Emoji_Presentation
+
つっつきボイス: 「他の言語のことはよく知らないんですが、RubyのUnicode対応ってかなり手厚いんじゃないかと思います」「だと思いますよ: あの巨大な仕様をちゃんと追っかけて実装するメンテナがいる言語なのは確か」
RubyKaigiでもおなじみのマーティン先生からの提案です。
私は賛成です。
ARGV [0] # NoMethodError: undefined method `ARGV' for main:Object
A [0] # NoMethodError
Dimitri Fontaine氏の記事です。よさそうです。
これもよさそうです。CSS-in-JS(JSS)は今回初めて知りましたが、日々CSSに苦しめられているコーダーからの支持を集めつつあるようです。
Oh shit Adobe pic.twitter.com/7rDL3LWVVz
— Juho Nurminen (@jupenur) 2017年9月22日
ベーシックインカムは天使か悪魔か? アメリカで史上最大の実験 #ベーシックインカム #実験 #サム・アルトマン #YCombinator https://t.co/ezvRNwUBOu
— BusinessInsiderJapan (@BIJapan) 2017年9月24日
何年か前に米国で小規模なベーシックインカムを無作為抽出でやってみたら、なぜか離婚率が急上昇したという記述を何かの本で見た覚えが。
Playing with the Coriolis force https://t.co/Ko7EAJnUEb #Science #Fun pic.twitter.com/5docWL59Jr
— Massimo (@Rainmaker1973) 2017年9月22日
ヤバい、音商標の登録開始で、特許情報DBがCMマニアの天国と化してる pic.twitter.com/H8oUuaKtOf
— 祥太 (@shota_) 2017年9月28日
今週は以上です。
週刊Railsウォッチ(20170922)特集: RubyKaigi 2017セッションを振り返る(1)、Rails 4.2.10.rc1リリースほか
#form_tag
廃止決定のその後、deviseの5.1対応はこれから、ほかソースの表記されていない項目は独自ルート(TwitterやRSSなど)です。