(変な)おもしろコード見せ合い会に参加した #omosiro_code
話した
他の言語の機能をrubyで真似するのが好き
rubyでgroovyやKotlinのitが使えるthats_it gemを作った - Qiita 定数の名前書き換えloadするimport_as gemの紹介 - Qiita RubyでJavaScriptのTemplate literalsの真似をする - Qiita
最近つくったhabu gemの記事を話した
rubyでいいかんじにDIするhabuの紹介 - Qiita
反応
はなちんさん!#omosiro_code
— fu11gen (@ascg_no1) 2019年6月1日
はなちんさんだー#omosiro_code
— フーミン@孤高のSE (@fumi_042) 2019年6月1日
はなちんさんの新作Gemのお話だ #omosiro_code
— りゅう (@Ryu1__1uyR) 2019年6月1日
Ruby で Java のアノテーションを実現したい #omosiro_code
— ジュエル武 (@jewel_x12) 2019年6月1日
ruby -c べんり #omosiro_code
— sue445 (@sue445) 2019年6月1日
みんな大好きTracePoint #omosiro_code
— りゅう (@Ryu1__1uyR) 2019年6月1日
「みんなTracePoint大好きだと思うんですけど」、悪い人基準だ! #omosiro_code
— sue445 (@sue445) 2019年6月1日
Rubyのインスタンス変数は実質アノテーション #omosiro_code
— sue445 (@sue445) 2019年6月1日
Rubyのインスタンス変数は実質アノテーション!! #omosiro_code
— フーミン@孤高のSE (@fumi_042) 2019年6月1日
Ruby のおもしろコード界隈無限に進化してるな #omosiro_code
— ジュエル武 (@jewel_x12) 2019年6月1日
トーク所感
途中から参加したので主催者の氏とtadsanの1回目聴き逃した
今日喋ったやつです!!! #omosiro_codehttps://t.co/rTKhWKnioz
— りゅう (@Ryu1__1uyR) 2019年6月1日
ペンさん
イカちゃんかわいい
コードになったイカちゃんが泳ぐ様子ですhttps://t.co/bnhlW5rD4f pic.twitter.com/z82iSXP00Z
— ぺん! (@tompng) 2019年6月1日
はしっこのほうにevalを埋め込むといい感じに埋め込めないことがあるので体の中に入るように分割して真ん中に入れ込んでるのがコツっぽくてこれを応用するとギザギザしたQuineが作れそう 3回転で1週の周期で微妙に形が違っているの、こだわりっぽい
https://t.co/bnhlW5rD4f 動くイカのコードとそのgeneratorです #omosiro_code
— ぺん! (@tompng) 2019年6月1日
ジュエル武さん
今日の内容です https://t.co/o65BMloAPD #omosiro_code
— ジュエル武 (@jewel_x12) 2019年6月1日
自動生成したコードをサンドボックスに入れずにevalしていてつよい卍 生成元コードだいたい透けてるやつとかあって面白かったw
[https://twitter.com/hanachin/status/1134703165431877633:embed] [https://twitter.com/hanachin/status/1134703533352148992:embed]
sue445さん
おもしろコード(ただし実用可能)な感じがめちゃよかった
これからしゃべるやつ / “スライド/2019/06/01/(変な)おもしろコード見せ合い会/今まで作ったgemの面白コード #omosiro_code - https://t.co/oswjWGA1jw” https://t.co/WxwVHIpaVu
— sue445 (@sue445) 2019年6月1日
evalでreplめちゃくちゃべんりそう (別途撮影するのだるいのでコマンド一発でそのままGIFになってほしい気もする)
継承元のクラスを動的にするやつ、実際Redmineプラグイン開発でRedmine 3系(Rails 4.2)とRedmine 4系(Rails 5.2)で動くマイグレーション書くときに同じようなことをしていて、わかりみが深い...。 sue445/activerecord-compatible_legacy_migration: Compatible migration file between Rails 4.2 and 5+
Gemfileをevalはなしは、RedmineでもプラグインのGemfileを読み込んだり、ローカルでしか入れないgemをGemfile.localにいれて読み込んだりするのにeval_gemfile
というDSLを使っているんだけど、requireとかrequire_relativeとかload使えないからなんだな、納得(Rubyだとそのへんのメソッド全部潰れていても頑張れば読み込めるのがべんりだ...)。
特異メソッドのやつはsingleton_class.prepend
で実現できそうな気もするけどどうなんだろう。
tadsan 2回め
さいきんよく見るブロックを渡さないProc.new
が出てきてオッとなった
このブロックなしのhttps://t.co/7Yy27kXD5l ささださんが使わないでっていってたやつではw #omosiro_code
— Miyagi (@hanachin_) 2019年6月1日
このコードを書いたときの最新版は1.9だったんです… https://t.co/2UTzZ4Rci7
— たっどさんおぼえた。 (@tadsan) 2019年6月1日
なるほどポーランド記法?
% ruby -r ripper -e 'pp Ripper.sexp("1 ** 2 ** 3 ** 4 ** 5")' [:program, [[:binary, [:@int, "1", [1, 0]], :**, [:binary, [:@int, "2", [1, 5]], :**, [:binary, [:@int, "3", [1, 10]], :**, [:binary, [:@int, "4", [1, 15]], :**, [:@int, "5", [1, 20]]]]]]]]
% ruby -r ripper -e 'pp Ripper.sexp("1 + 2 + 3 + 4 + 5")' [:program, [[:binary, [:binary, [:binary, [:binary, [:@int, "1", [1, 0]], :+, [:@int, "2", [1, 4]]], :+, [:@int, "3", [1, 8]]], :+, [:@int, "4", [1, 12]]], :+, [:@int, "5", [1, 16]]]]]
ペンさん 2回め
こないだのパズル1からのFizzBuzzのようにみえるRubyTrickバズの紹介、コードは真っ白なのに内容の濃さ...
TRICK FINAL 5作品入選 - tompngのブログ
tadsan 3回め
spl_autoload_register — 指定した関数を __autoload() の実装として登録するで頑張る話、PHPでもかなり動的に色々できるというのがわかって大収穫(ぜったいよくないコード書きたい)。
みんなn回め
tadsan無限に発表資料が出てくる
不動点コンビネータからのPHPの無名関数からのPHPの無名クラスは実は無名じゃない再帰とかやった り、ピュアCSS実装のライフゲームを眺めたりした
これのクイズ正解した✌
〆のトーク
routingとactionの実装とroutingのpathからのパラメータ分解の実装までやってる謎の巨大無名関数内で無名関数や無名クラスを使っているのなどを眺めた。PHP面白いな〜〜〜。
写真
ギークハウス沖縄勢との記念写真です! #omosiro_code pic.twitter.com/hn2KwXaoU8
— sue445 (@sue445) 2019年6月1日
#omosiro_code pic.twitter.com/h1vJTYn5Wk
— Miyagi (@hanachin_) 2019年6月1日
終わった後
Zero Width Joiner(U+200D)とか教えてもらったり家族の絵文字をバラしたりくっつけたり家族を入れ替えたりできる絵文字芸を教えてもらった。
所感
おもしろ、言語仕様だったり、見た目だったり、動きだったり、いろんなおもしろがある。
主催のりゅうくんさん、発表者・参加者のみなさんありがとうございました👏 またおもしろコードみせあいたい
...ところで@1って尖らせたいときに最高じゃないですか?
"puts :hi". then{ eval\ @1 }