Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Gotanda.rb#59 難解な自己紹介プログラムを書く
Slide 2
Slide 2 text
この発表で 得られること
Slide 3
Slide 3 text
この発表で得られること 3 Rubyを使って自己紹介ができるようになる その過程で、Rubyに少し詳しくなる(かも) 日曜大工のネタが手に入る
Slide 4
Slide 4 text
突然ですが
Slide 5
Slide 5 text
5 自己紹介の目的ってなに??
Slide 6
Slide 6 text
自己紹介の目的 6 たぶん覚えてもらうこと 普通に自己紹介して覚えてもらえる? 僕は無理、、、人の名前覚えられない(ごめんなさい)
Slide 7
Slide 7 text
7 我々はRubyが書ける。 覚えてもらえる自己紹介をRubyで書こう(?) 謎の提案
Slide 8
Slide 8 text
8 例えばこういうの? Rubyで自己紹介
Slide 9
Slide 9 text
9 いや、もう少し技巧を凝らしたい。 インパクトが欲しい Rubyで自己紹介
Slide 10
Slide 10 text
10 Rubyで自己紹介
Slide 11
Slide 11 text
これは全てRubyの プログラムです
Slide 12
Slide 12 text
コレを作りましょう
Slide 13
Slide 13 text
工程 13 1. プログラムの形を自由に変えられるようにします 2. アスキーアートを準備します 3. クワインを書きます 完成!
Slide 14
Slide 14 text
プログラムの形を変える 14 `puts "Hello,I am nasa."`を変形してみる eval, %w, joinを使う
Slide 15
Slide 15 text
プログラムの形を変える 15 ● eval, %w, joinを使う ● %wは文字列配列を返す ● スペースが区切り文字として解釈される ● %wで作った配列をjoinで連結 ● あとは手で頑張って整形
Slide 16
Slide 16 text
プログラムの形を変える 16 ただし、いくつか出来ないことがある ● )が使えない。%wを閉じると解釈 ● 複数命令かけない ● スペースが使えない
Slide 17
Slide 17 text
プログラムの形を変える 17 () が使いたい ● %w'のように終了文字を変更できる ● puts(“..”)としてみた
Slide 18
Slide 18 text
プログラムの形を変える 18 複数命令かけない ● 改行の他に;が区切り文字として使える ● これを手でやるのはめんどくさい ● プログラムを書くプログラムがあると便利
Slide 19
Slide 19 text
プログラムの形を変える 19 スペースや%wと競合する文字が使いたい ● スペースは%wによって消える、改行も同様 ● %w'とやると'は使えない。他の文字も同様
Slide 20
Slide 20 text
プログラムの形を変える 20 スペースや%wと競合する文字が使いたい ● ""<<10 で改行 ● 32がスペース、39がシングルクオート
Slide 21
Slide 21 text
工程 21 1. プログラムの形を自由に変えられるようにします 2. アスキーアートを準備します 3. クワインを書きます 完成!
Slide 22
Slide 22 text
アスキーアートを準備します 22 AAを準備します ● ChatGPT, jp2a ● jp2aがお勧め
Slide 23
Slide 23 text
アスキーアートを準備します 23 jp2aがお勧め ● brewで入ります ● charsで利用する文字を指定すると 使いやすいAAができる
Slide 24
Slide 24 text
工程 24 1. プログラムの形を自由に変えられるようにします 2. アスキーアートを準備します 3. クワインを書きます 完成!
Slide 25
Slide 25 text
クワイン 25 クワインとは ● プログラム自身を出力するプログラム ● 例えば eval$s="puts'eval$s='+$s.inspect"
Slide 26
Slide 26 text
クワイン 26 AAをプログラム中に埋め込む ● AAの長さがソースコード長の上限になる ● なるべく小さいデータにしてAAを埋め込みたい
Slide 27
Slide 27 text
クワイン 27 AA変換処理 ● 01の羅列にして二進数として解釈 ● その後Base64エンコーディング ● 記号が入り込む心配がない
Slide 28
Slide 28 text
クワイン 28
Slide 29
Slide 29 text
クワイン 29 あとはクワインを書くだけ! コード生成コードを書いてる ● d: AAデータ ● e: プログラム自身 ● w: アスキーアートの幅 ● h: アスキーアートの高さ
Slide 30
Slide 30 text
クワイン 30 あとは、AAの定義を見て ● 文字があったらe ● 文字がなければスペース を出力する
Slide 31
Slide 31 text
クワイン 31 AA表現さえあればクワインが生成できるようになった
Slide 32
Slide 32 text
完成 32 1. プログラムの形を自由に変えられるようにします 2. アスキーアートを準備します 3. クワインを書きます 完成! 🎉 🎉 🎉 🎉 🎉 🎉
Slide 33
Slide 33 text
完成 33 https://github.com/k-nasa/quine_sandbox
Slide 34
Slide 34 text
whoami 34 nasa ● STORES, Inc.(2024-04-15~) ○ STORES予約チーム ○ Backend中心にあれこれ ● ハンドルネームnasaを追い求める ○ GitHub: @k-nasa ○ Twitter: @nasa_desu
Slide 35
Slide 35 text
時間があれば 次回予告
Slide 36
Slide 36 text
供養 36 いろんなAAを作って遊べるようになった。 でもAAだけじゃん。。。。
Slide 37
Slide 37 text
供養 37 実行できる画像が作りたい! アイコン画像が実はRubyプログラムだったら 面白くない?
Slide 38
Slide 38 text
供養 38 GIFならマジックナンバー的に行ける! GIF comment extensionにプログラムを埋め込める (詳しくは懇親会で話しましょう) (ジフ、ギフどっちやねん)
Slide 39
Slide 39 text
供養 39 今は、悲しきgifたちが生まれている。。。 これらを動く画像にするぞ!