(変な)おもしろコード見せ合い会に参加した #omosiro_code

(変な)おもしろコード見せ合い会 - connpass

ハッシュタグ#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

反応

トーク所感

途中から参加したので主催者の氏とtadsanの1回目聴き逃した

ペンさん

イカちゃんかわいい

はしっこのほうにevalを埋め込むといい感じに埋め込めないことがあるので体の中に入るように分割して真ん中に入れ込んでるのがコツっぽくてこれを応用するとギザギザしたQuineが作れそう 3回転で1週の周期で微妙に形が違っているの、こだわりっぽい

ジュエル武さん

自動生成したコードをサンドボックスに入れずにevalしていてつよい卍 生成元コードだいたい透けてるやつとかあって面白かったw

[https://twitter.com/hanachin/status/1134703165431877633:embed] [https://twitter.com/hanachin/status/1134703533352148992:embed]

sue445さん

おもしろコード(ただし実用可能)な感じがめちゃよかった

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が出てきてオッとなった

なるほどポーランド記法?

% 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面白いな〜〜〜。

写真

f:id:h6n:20190601172115j:plain

終わった後

Zero Width Joiner(U+200D)とか教えてもらったり家族の絵文字をバラしたりくっつけたり家族を入れ替えたりできる絵文字芸を教えてもらった。

所感

おもしろ、言語仕様だったり、見た目だったり、動きだったり、いろんなおもしろがある。

主催のりゅうくんさん、発表者・参加者のみなさんありがとうございました👏 またおもしろコードみせあいたい

...ところで@1って尖らせたいときに最高じゃないですか?

"puts :hi".
then{
eval\
@1
}

いいなと思ったらKyashでお金を下さい
20191128011151
GitHubスポンサーも受け付けています
https://github.com/sponsors/hanachin/