RubyKaigi で熱的なものをもらった勢いで patch を送ってみたところ、いつの間にか取り込まれてた。
続きを読むメーリングリストに登録するというハードルの高さ
あまりに GitHub を使った開発に慣れきってしまったため、バグレポートやパッチは「まずメーリングリストに登録して」みたいな文章を見るだけで、一気にハードルが高く感じてしまって、やる気がなくなってしまう。
そういうものに限って、世界的に使われているデファクトスタンダードだったりするため、対応してもらわないと、こちらの手間がものすごくかかったりする。
たまに GitHub への mirror や、repository 自体の公開をしてくれているものはあるけど、pr/issue が禁止されていたりするため、結局ソースコードビューワ的な効果しかない。それでも latest tarball しかリンクしてないものに比べれば、だいぶありがたい。
やっぱり歴史が古いものほど開発プラットフォーム移行の腰が重くなるのはわかるが、現代においては「気持ち的にはクローズドソース」だなあと感じてしまうことがある。
RubyKaigi 2018 に行ってきたので小並感を書く
Day1
Keynote
- 生 Matz 初めて見た。
Lunch
- 牛タン弁当
- スタンプラリー
- どら焼き祭り
- クッ社さんのどら焼きはずんだ&餅で一味違った
- フロッピー獲得
Analyzing and Reducing Ruby Memory Usage
- 「草生えるで有名になった」で草
- 5000 兆円ほしい
- 「簡単でしょ」と言いながら diff が長い
Hijacking Ruby Syntax in Ruby
- 通訳泣かせの高速トーク
- Binding の万能感
Afternoon Break
- 電源がないので GitHub さんのブースにみんな群がる
TTY - Ruby alchemist’s secret potion
- https://github.com/piotrmurach/tty
- tty-* ギガ便利そう
RubyGems 3 & 4
- all-ruby 便利そう
Exploring Internal Ruby Through C Extensions
- デカ外人クイズ
- C/C++ の他の hash lib でも検証してほしかった
- メインホールの肘掛けが開いてサイドテーブルが出てくるツイートが 1 時間ごとくらいに流れてきてた
LT
- ruby is dead every year
RubyKaigi 2018 Official Party
- LT で windows 版の話が出てたのでメンテナの方に Cygwin 版はどうなってるか訪ねたら、担当者不在ということでした。(ワンチャンある?)
Day 2
Sponsor session (SmartHR)
- 社長が人が欲しい気持ちをぶっちゃけ過ぎてて草
My way with Ruby
- 「まつもとさんという言語デザイナーの方」がいらっしゃるそうです
Faster Apps, No Memory Thrash: Get Your Memory Config Right
- http://bit.ly/kaigi2018-gibbs
- GC でいろいろ見えて、環境変数でチューニングできるよ的な話
Lunch
- トランプタワー
Improve Ruby coding style rules and Lint
- デカ外人クイズ
- 正解はバナナソングでも可
Firmware programming with mruby/c
- オフィス内の二酸化炭素濃度が上がると Slack に Alert が飛ぶ
- トマト推し
- Nice Lake
RNode with code positions
Type Profiler: An analysis to guess type signatures
Ruby Committers vs the World
- backtick あまり使われていないなら地上げして method symbol にしたい
- 任意の end に ensure をつけられるようにすると else さんの存在意義が...
- OS 特有の話になると、コミッタ以外置いてきぼりで流速がガクッと下がる
夜
- https://twitter.com/rechiba3/status/999493922832318465
- おすすめの善次郎をキメた
- https://syldra.jp/
- くつろいだ
Day 3
Parallel and Thread-Safe Ruby at High-Speed with TruffleRuby
- 会場の自販機から RedBull が消える (売り切れ)
- Graal で殴ればとりあえず速くなる風潮
- 180fps とか初めて見た
Grow and Shrink - Dynamically Extending the Ruby VM Stack
- 先生がインターン売り込みするのヤバい
- 大学の発表会っぽい感じだった
The Method JIT Compiler for Ruby 2.6
- こちらも同時通訳泣かせの速度
- C is dead
- 答 : コロンビア
LuaJIT as a Ruby backend
- LLVM を JIT にするのは最近は流行ってない
- コンパイラ最適化と Lua/LuaJIT についての説明がかなりの割合だった
- 結局ものはできていないので次回に期待したい
- SCDD (進捗だめです)
How happy they became with H2O/mruby, and the future of HTTP
- printf デバッグになっちゃうよねー
JRuby 9.2 and Rails 5.x
- ここでも Graal
- C extension どうするんじゃい問題
TRICK 2018 (FINAL)
- 三連覇おめでとうございます
RubyKaigi 2018 After Party
- なんだかんだでいつものメンバとしか話せなかったが良かった
川
- 疲れてた&風邪をもらったぽかったので不参加
- どうやら「川」が RubyKaigi の本当の本番らしい
株式会社はてなに入社しました
株式会社はてなに入社しました
Wait for ajax on Rails5 (without jQuery)
ボタンをクリックするなどして、画面が変わったことを待ってから、テストをしたい場合に、処理完了を待つ snippet がぐぐるとけっこうでてくる。
要するに jQuery.active に通信数が保存されているので、これが 0 になるまで待つというのが定石らしい。
ところが Rails5 だと脱 jQuery 化しているようで、これだと完了を検出することができない。
公式の issue でも言及されているようで現時点では解決されていないようである。
仕方ないのでテストが成功するまでループするやっつけコードを使うことにした。
def wait_for Timeout.timeout(Capybara.default_max_wait_time) do loop do break if yield end end end wait_for do actual == expected # RSpec の expect(...).to で書きたい...。 end
capybara & chrome でテスト時に画面外を click できなかった → Element#hover で解決した
リモートワーク振り返り
joker 氏のやつを見て、自分もがっつりリモートワークをやりだしてから 1 年以上経つし、そろそろ振り返りをしてみるかと思った。
続きを読むcharlock_holmes を bundle install するのに苦戦した
タイトルそのまんまです。
環境は以下の通り。
$ uname -rs CYGWIN_NT-10.0 2.8.2(0.313/5/3) $ ruby -v ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-cygwin]
bundle install すると extension のコンパイルでコケます。
g++ -I. -I/usr/include/ruby-2.3.0 -I/usr/include/ruby-2.3.0/ruby/backward -I/usr/include/ruby-2.3.0 -I. -DHAVE_UNICODE_UCNV_H -ggdb -O2 -pipe -o transliterator.o -c transliterator.cpp In file included from /usr/include/unicode/utypes.h:38:0, from /usr/include/unicode/translit.h:15, from transliterator.cpp:5: /usr/include/unicode/umachine.h:347:13: error: 'char16_t' does not name a type typedef char16_t UChar; ^
char16_t は C++11 の機能であるため、g++ に -std=c++11 を渡さないといけないようです。 というわけで bundle config でオプションを設定する必要があります。(これを知るのにけっこう時間を食った。)
$ bundle config --local build.charlock_holmes --with-cxxflags=\"-std=c++11\"
bundle config の build.* は extconf.rb 内で with_config したものしか受け取れないのかと思ってました。
[追記] with_config してましたね。
$CXXFLAGS = (with_config("cxxflags", arg_config("CXXFLAGS", config["CXXFLAGS"]))||'').dup
git submodule の削除
git submodule を削除するのに苦戦したのでメモっておく。
foo/bar が submodule だった場合に以下のコマンドを実行する。
$ git submodule deinit foo/bar $ git rm foo/bar $ git rm .git/modules/foo/bar
string table overflow が起きたため CMAKE_C_FLAGS から -g を取り除いた話
この記事は 第2のドワンゴ Advent Calendar 2016 - Qiita の 7 日目 (空いていたので飛び込んだのは 10 日目ですが) です。
続きを読むcalm のインストールと mksetupini
はじめに
cygport が 0.23.0 になった時に既存の genini が使えなくなるという問題に遭遇した。
原因は cygport が生成する hint のファイル名が固定の setup.hint から変わってしまったことによるもので、genini は setup.hint 固定されている前提の処理であったため、hint ファイルが認識できなくなってしまったというものであった。
というわけでなんとかしたい旨を cygport に issue ってみた。
https://github.com/cygwinports/cygport/issues/1github.com
すると genini じゃなくて calm の mksetupini を使えばいいんじゃね?という返事をもらったので、さっそく試してみた。
インストール
残念ながら pip で入れようとすると別の calm というパッケージが入ってしまうようなので、仕方なく setup.py でインストールすることにした。
$ git clone https://github.com/cygwin/calm.git $ cd calm $ python3 setup.py install $ rehash $ which mksetupini /usr/local/bin/mksetupini
実行
普通に実行しても、いろいろとエラーを吐かれたため、最終的には以下のようなオプションをつけての実行となった。
$ mksetupini --arch x86_64 --inifile ./x86_64/setup --okmissing required-package --releasearea . $ xz ./x86_64/setup
- genini とは異なり、結果を stdout に出してはくれない。(そのため、あとから xz している。)
- releasearea はデフォルトだと /sourceware 配下にあることを想定する。そのためオプションでカレントを指定した。
あと、追加で calm のソースコードをいじって、categories に Emulators など過去に存在したカテゴリを追加した。(ここで宣言されていないカテゴリが yacp に残っており、それらが存在するとエラーとなり、setup.ini が生成されなかったため)
time で実行時間を確認したところ genini の 2/3 くらいになったように見えた。
$ gtime ./genini --recursive x86_64 > /tmp/setup.ini 29.17user 7.23system 0:51.42elapsed 70%CPU (0avgtext+0avgdata 60227584maxresident)k 2367inputs+0outputs (258major+112605minor)pagefaults 0swaps $ gtime mksetupini --arch x86_64 --inifile /tmp/setup.ini --okmissing required-package --releasearea . 17.31user 4.70system 0:33.37elapsed 65%CPU (0avgtext+0avgdata 192790528maxresident)k 1950inputs+3outputs (676major+34400minor)pagefaults 0swaps