SlideShare a Scribd company logo
クックパッド
春の超絶技巧パンまつり
超絶技巧プログラミング編
講師:遠藤 侑介(@mametter)
1
講師:遠藤 侑介(@mametter)
•プログラミング言語Rubyの開発が仕事です
•ちょっと変なプログラムを書きます
2
TA:茂呂 智大 (@slightair)
• エンジニア統括マネージャー 兼 モバイル基盤部 部長
• エンジニア組織づくり、採用、社内のモバイルアプリ
開発基盤の環境改善が仕事です
• Ruby の開発はしていませんが Ruby はよく書きます、
大好きです
• 変なプログラムは書けませんが、それがどうして動く
のか考えるのは好きです
3
4
5
eval$s=%q(;eval"
"+%w(z=?¥s;t=z+?¥n;$><<(
t*5+"eval$s=%q(#{$s.gsub(/#.*/){
$&.tr(z,?¥x21)}})¥n"+t+(0..6).map{|y
|(0..47).map{"co@@@@@@okpad¥x21".upcas
e["h7sam@@@@@@b@@ @@jw@@@@@@@24yz3n
dq4vk3q@@ @ @@ @@tzcro
eg26ut5@ @ @2xbkt
rzzvizj@ @j1uy1
ubzk8xhw@ @ @fj3q33
0".to_i(3@@ @@@@@@6)[_1*7
+y]>0?_1/7:@@@ @7]}<<?¥n}*""+
t*5).gsub(/.@ @+/){$&.strip
.center(66)@ @@@@@@@@@@@@@@@}.gsub(/./){t
=?¥x21==$&@ @;u=$`.size>1
800;"¥e[@ @48;2;#{u&&t|
|z==$&?"@@@@@@@@@@@@@@@@@@255;255;255"
:u||$&==?¥x40?"64;28;0":"255;153;51"
}m#{(t)?z:$&}¥e[0m"};exit).join.
## (C) 2022 Cookpad Inc.
gsub(?¥x40,""))
https://gist.github.com/mame/97d352962539d5065e97487d287e74aa
6
クックパッドロゴのQuine
•Quine:ソースコード自身を
出力するプログラム
※特別な許可をもらって作ってます!
会社のロゴは大切な知的財産なので、
他者のロゴを勝手にQuineにするのはやめましょう
7
eval$s=%q(;eval"
"+%w(z=?¥s;t=z+?¥n;$><<(
t*5+"eval$s=%q(#{$s.gsub(/#.*/){
$&.tr(z,?¥x21)}})¥n"+t+(0..6).map{|y
|(0..47).map{"co@@@@@@okpad¥x21".upcas
e["h7sam@@@@@@b@@ @@jw@@@@@@@24yz3n
dq4vk3q@@ @ @@ @@tzcro
eg26ut5@ @ @2xbkt
rzzvizj@ @j1uy1
ubzk8xhw@ @ @fj3q33
0".to_i(3@@ @@@@@@6)[_1*7
+y]>0?_1/7:@@@ @7]}<<?¥n}*""+
t*5).gsub(/.@ @+/){$&.strip
.center(66)@ @@@@@@@@@@@@@@@}.gsub(/./){t
=?¥x21==$&@ @;u=$`.size>1
800;"¥e[@ @48;2;#{u&&t|
|z==$&?"@@@@@@@@@@@@@@@@@@255;255;255"
:u||$&==?¥x40?"64;28;0":"255;153;51"
}m#{(t)?z:$&}¥e[0m"};exit).join.
## (C) 2022 Cookpad Inc.
gsub(?¥x40,""))
今日のテーマ:超絶技巧プログラミング
•あえて実用性のないプログラムを書いて遊ぼう
• ふつうのRubyコードの話はしません
• クックパッドの業務の話もしません
8
超絶技巧プログラミングで得られるもの
•コンピュータ科学の理論にふれるきっかけ
•プログラミング言語についての深い理解
9
今日の流れ
•13:15~14:15:講義
•14:15~17:00:実習
•17:00~18:00:発表会
•超絶技巧プログラミングコンテストに投稿を!
• TRICK 2022(締切:2022/07/31)
• https://github.com/tric/trick2022
10
講義内容
•➔超絶技巧プログラミングの事例紹介
•基本テクニック3点
• プログラムをアスキーアートにする
• ターミナルで遊ぶ
• Quineを書く
11
Quineリレー
• 自分自身を出力する
REXXプログラム、を出力する
rcプログラム、を出力する
…
Scalaプログラム、を出力する
Rustプログラム、を出力する
Rubyプログラム
https://github.com/mame/quine-relay/blob/master/QR.rb
12
Green-square Quine
• https://github.com/mame?from=1970-01-01&to=1970-12-31
eval s=%q"n=t
• https://github.com/mame/green-square-quine
13
もっと見たい人は
•参考書をみてください
14
講義内容
•超絶技巧プログラミングの事例紹介
•➔基本テクニック3点
• プログラムをアスキーアートにする
• ターミナルで遊ぶ
• Quineを書く
15
Tip 1: アスキーアートプログラム
1. 好きなRubyプログラムを書く
2. 空白と改行と円マーク ¥ を避ける
3. おまじないで囲む
16
puts "Hello world!"
puts("Hello"+32.chr+"world!")
eval(%w( puts("Hello"+32.chr+"world!") )*"")
この範囲を自由に整形できる
たとえば
17
eval(%w(put
s("Hello"+3
2.chr+"worl
d!"))*"")
eval(%w(puts(
"H el
lo "+
32 .c
hr +"
world!"))*"")
eval(%w(p
ut s(
"H el
lo "+
32 .c
hr +"
wo rl
d!"))*"")
つぶしたり 四角にしたり 円にしたり
メソッド名や数字の途中で
改行してもOK
文字列の途中に
スペースいれてもOK
仕組み
•Rubyの%w記法は「文字列の配列」を返す
•配列を掛け算すると連結した文字列になる
•evalは文字列をコードとして実行する
18
%w(pu ts( 42)) #=> ["pu", "ts(", "42)"]
%w(pu ts( 42))*"" #=> "puts(42)"
eval(%w(pu ts( 42))*"") #=> 42
練習問題(5分)
•自己紹介を出力するプログラムを
イニシャル形状にしてみましょう
• 余分はコメント(#)などで埋める
• 別のメッセージ・形状でも可
•gistに置いてSlackへ提出ください
19
eval(%w(
pu ts ("Yusu
Ke -E nd
oh,h obby:w
al ki
ng ") ###### ##
).join)
eval(%w(puts("YusuKe
-E nd oh,h ob
by :w alki ng")##
### ##### ##
#### ###### ######
#### ## ## ##
#############).join)
解説
•正解はありません、動けばOK!
•手編集が面倒くさいなあと思ったら→自動化
20
code = %q(puts("YusuKe-Endoh,hobby:walking")).chars
puts <<END.gsub("#") { code.shift || "#" }
## ## ######
## ## ##
#### ######
## ##
## ## ###### ##
END
Tip 2: ターミナルで色の表示
• "¥e[数字m"で色を指定、"¥e[m" で指定解除する
• 最近は"¥e[38;2;R;G;Bm"でRGB指定もできる
• 注:cmd.exeやTerminal.appでは動かない
• Windows TerminalやiTerm2を使ってください
21
puts "¥e[31mfoo¥e[m" #=> foo(赤い字になる)
puts "¥e[41mfoo¥e[m" #=> foo(背景が赤くなる)
puts "¥e[38;2;255;0;0mfoo¥e[m" #=> foo
puts "¥e[48;2;255;0;0mfoo¥e[m" #=> foo
30黒 40黒
31赤 41赤
32緑 42緑
33黄 43黄
34青 44青
35紫 45紫
36水 46水
37白 47白
練習問題(5分)
•好きな色付きメッセージを出してみましょう
•発展:コードをアスキーアート化しましょう
• おまじない eval(%w( ... )*"") で囲む
• ヒント:"¥e[数字m" のかわりに 27.chr+"[数字m"
22
$ ruby color-message.rb
Hello, world!
解説
•たとえば
•アスキーアート化するには
23
puts "¥e[37;46mHello¥e[m ¥e[33;41mworld!¥e[m"
eval(%w(
e = 27.chr;
puts(e+"[37;46mHello"+e+"[m"+32.chr+e+"[33;41mworld!"+e+"[m")
)*"")
なぜ円マークは使えない?
•¥ と e の間に空白や改行が入ると動かなくなる
• 興味があったら実習時に試してみてください
24
eval(%w(
puts("¥ e[37;46mHello¥e[m")
)*"")
ここに空白が入ると意味が変わる
Tip 3: Quine
•自分自身を出力するプログラム
• 哲学者Willard van Orman Quineに由来
25
$ ruby quine.rb > quine2.rb
$ diff –s quine.rb quine2.rb
ファイル quine.rb と quine2.rb は同一です
間違ったQuineの書き方
• …を出力するプログラム
• それを出力するプログラム
• それを出力するプログラム
• この方針は明らかにきりがない
26
puts "..."
puts "puts ¥"...¥""
puts "puts ¥"puts ¥¥¥"...¥¥¥"¥""
ただしいQuineの書き方(1)
•…を出力するプログラム
•このコードを eval で包む
• %q[...] は文字列リテラル "..." とほぼ同じ
27
puts "..."
s = %q[puts "..."]; eval s
ただしいQuineの書き方(2)
•… の代わりになるべく↑を出力するようにする
28
s = %q[puts "s = %q[...]; eval s"]; eval s
s = %q[puts "..."]; eval s
ただしいQuineの書き方(3)
•… の位置に入るべき文字列は、変数 s そのもの
•答え:
29
s = %q[puts "s = %q[" + s + "]; eval s"]; eval s
#=> s = %q[puts "s = %q[" + s + "]; eval s"]; eval s
s = %q[puts "s = %q[...]; eval s"]; eval s
練習問題(10分)
• Quineを実際に動かしてみましょう
• ちょっと違う形式でQuineを書いてみましょう
• 【やや難】自分自身を反転して出力してみましょう
• 【難】自分自身を赤字で出力するようにしましょう
• ヒント:%q[...] は %q{...} などに置き換えよう
30
eval(s = %q[puts "...ここを埋める..."])
s = %q[puts "s = %q["+s+"]; eval s"]; eval s
解説
•答え:
• 文字列内の式展開を使ってもいいです
•赤字Quine:
31
eval(s = %q[puts "eval(s = %q[" + s + "])"])
eval(s = %q[puts "eval(s = %q[#{ s }])"])
eval(s = %q{puts 27.chr+"[31meval(s = %q{"+s+"})"+27.chr+"[m"})
講義はここまで
32
実習
• 好きなプログラムを自由に書いてください
• 講義内容を参考にしても、しなくてもよいです
• 次ページのネタ案も参考に
• 15:30ごろから講師とzoom雑談(1人3分くらい)
• 何を作ろうとしてるか講師に聞かせてください!
• 17時ごろから発表
• githubに置いてSlack提出してください(gistでも可)
33
ネタ案:へんな見た目のプログラム
•アスキーアートの形をしたQuine
•アスキーアート+色+Quine
• 今回の講義内容の組み合わせでできる(はず)
• ヒント:Quineの中にアスキーアート化のおまじないをうまく混ぜる
•【難】色がついたまま
実行可能なQuine
• ヒント:コード中にエスケープ
シーケンスを混ぜる
34
$ ruby quine.rb
eval(...色つきコード...)
$ ruby quine.rb | ruby
eval(...色つきコード...)
ネタ案:エンコードQuineを極める
• 自分自身を難読化して出力するQuine
• ヒント:putsの前にBase64.encode64を通せばよい
• 【やや難】自分自身を出力するPythonプログラムを
出力するRubyプログラム
• ヒント:Pythonの"""文字列リテラルを使うとちょっと簡単かも
35
$ ruby base64-quine.rb | base64 –d > base64-quine2.rb
$ ruby base64-quine.rb | python3 > base64-quine2.rb
ネタ案:Quineを進化させる
•実行のたびに長くなるQuine風コード
• ヒント:普通のQuineにコメント # を足すだけでできます
•【難】実行のたびに1増えるQuine風コード
36
eval(s=%q[...ここを埋める...])
#=> eval(s=%q[...ここを埋める....])#
#=> eval(s=%q[...ここを埋める.....])##
n=1;eval(s=%q[...ここを埋める...])
#=> n=2;eval(s=%q[...ここを埋める...])
#=> n=3;eval(s=%q[...ここを埋める...])
ネタ案:アスキーアートを極める
•【やや難】コードより大きいアスキーアートを
表示する
• 300文字のコードで横40 x 縦20(800文字)の
アスキーアートを表示するなど
• 圧縮を実装する必要がある
• ランレングス圧縮、Byte Pair Encodingあたりが簡単
• 基本的な構造→
37
data = "アスキーアートを圧縮したデータ"
print(展開(data))
ネタ案:形状を変化させるQuine
•【激難】"A"形状と"B"形状を行き来するQuine
• 初期状態は"A"形状
• 実行すると自分自身を"B"の形にして出力する
• "B"の形を実行すると"A"に戻る
• ヒント:アスキーアート化プログラム+圧縮+Quine
全部組み合わせる必要がある
38
ネタ案:アニメーション
•端末に何回も上書きする
•エスケープシーケンスを使う
• ¥e[H
• カーソルを画面左上に移動する
• ¥e[2J
• 画面の内容を全部消す
• 参考:https://en.wikipedia.org/wiki/ANSI_escape_code
39
print "¥e[H¥e[2J"
(0..).each do |i|
print "." * (i%10)
print ":"
print "." * (9-i%10)
print "¥e[H"
sleep 0.1
end
ネタ案:その他
• 【難?】今日の内容をRuby以外の言語で再現する
• evalや%w()がとても便利なことがわかる
• 【?】自分の得意な技術と今日の内容を組み合わせる
• アスキーアート × 競技プログラミングのアルゴリズム
• Quine × Next.js、Quine × Unity、Quine × AI
• うまくできたら → https://github.com/tric/trick2022
40
余談:哲学者QuineとプログラムQuine(1)
•命題:
• この命題は真とも偽とも言えない
•「この命題」で命題自身を参照してるのが肝
• 次のQuineと同じ構造
41
この命題は偽である
puts File.read(__FILE__)
余談:哲学者QuineとプログラムQuine(2)
•哲学者Quineが研究した間接的自己言及の命題
• 「この命題」みたいなインチキなしで
同じ構造を作り出している
• expr => v は v = expr と(ほぼ)同じ意味
• s.dumpは文字列を引用形式にする
42
「は、自身の引用を前置されると偽になる」は、
自身の引用を前置されると偽になる
" => s; puts s.dump + s" => s; puts s.dump + s
余談:哲学者QuineとプログラムQuine(3)
• 自己言及は計算機の理論分野でわりと登場する
• 停止性問題
• プログラムが有限時間で停止するかどうかを判定するアルゴ
リズムは書けない
• クリーネの再帰定理
• チューリング完全な言語では自己言及が構成できる
• ゲーデルの不完全性定理
• よくわかりません
• 興味があったら→理論計算機科学、数理論理学
43
おわり
•超絶技巧プログラミングとは、
おもしろい理論・技術をおもしろく実践する遊び
•作ったものはぜひ発信していきましょう
• 感想記事でも、YouTubeでも、GitHubの肥やしでも
• うまくできたら → https://github.com/tric/trick2022
44

More Related Content

What's hot

緊急Ques - コードのメトリクスに基づくリファクタリング戦略
緊急Ques - コードのメトリクスに基づくリファクタリング戦略緊急Ques - コードのメトリクスに基づくリファクタリング戦略
緊急Ques - コードのメトリクスに基づくリファクタリング戦略
Tomoki Kuriyama
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとはTakuya Akiba
 
Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話
terurou
 
全部Excelだけで実現しようとして後悔するデータ分析 2nd Edition
全部Excelだけで実現しようとして後悔するデータ分析 2nd Edition 全部Excelだけで実現しようとして後悔するデータ分析 2nd Edition
全部Excelだけで実現しようとして後悔するデータ分析 2nd Edition
__john_smith__
 
深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし
AtCoder Inc.
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
 
Wacate2018 winter jstqb-al-ta
Wacate2018 winter jstqb-al-taWacate2018 winter jstqb-al-ta
Wacate2018 winter jstqb-al-ta
kauji0522
 
入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
Yusuke Sangenya
 
バグハンターの哀しみ
バグハンターの哀しみバグハンターの哀しみ
バグハンターの哀しみ
Masato Kinugawa
 
Optcarrot: A Pure-Ruby NES Emulator
Optcarrot: A Pure-Ruby NES EmulatorOptcarrot: A Pure-Ruby NES Emulator
Optcarrot: A Pure-Ruby NES Emulator
mametter
 
error_highlight: User-friendly Error Diagnostics
error_highlight: User-friendly Error Diagnosticserror_highlight: User-friendly Error Diagnostics
error_highlight: User-friendly Error Diagnostics
mametter
 
Jenkins 再入門
Jenkins 再入門Jenkins 再入門
Jenkins 再入門
Jumpei Miyata
 
TLA+についての話
TLA+についての話TLA+についての話
TLA+についての話
takahashi takahashi
 
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』
Proktmr
 
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
NTT DATA Technology & Innovation
 
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
catupper
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
Masaki Hara
 
探索的テスト入門
探索的テスト入門探索的テスト入門
探索的テスト入門H Iseri
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 

What's hot (20)

緊急Ques - コードのメトリクスに基づくリファクタリング戦略
緊急Ques - コードのメトリクスに基づくリファクタリング戦略緊急Ques - コードのメトリクスに基づくリファクタリング戦略
緊急Ques - コードのメトリクスに基づくリファクタリング戦略
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
 
Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話
 
全部Excelだけで実現しようとして後悔するデータ分析 2nd Edition
全部Excelだけで実現しようとして後悔するデータ分析 2nd Edition 全部Excelだけで実現しようとして後悔するデータ分析 2nd Edition
全部Excelだけで実現しようとして後悔するデータ分析 2nd Edition
 
深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
Wacate2018 winter jstqb-al-ta
Wacate2018 winter jstqb-al-taWacate2018 winter jstqb-al-ta
Wacate2018 winter jstqb-al-ta
 
入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
 
バグハンターの哀しみ
バグハンターの哀しみバグハンターの哀しみ
バグハンターの哀しみ
 
Optcarrot: A Pure-Ruby NES Emulator
Optcarrot: A Pure-Ruby NES EmulatorOptcarrot: A Pure-Ruby NES Emulator
Optcarrot: A Pure-Ruby NES Emulator
 
error_highlight: User-friendly Error Diagnostics
error_highlight: User-friendly Error Diagnosticserror_highlight: User-friendly Error Diagnostics
error_highlight: User-friendly Error Diagnostics
 
Jenkins 再入門
Jenkins 再入門Jenkins 再入門
Jenkins 再入門
 
TLA+についての話
TLA+についての話TLA+についての話
TLA+についての話
 
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』
 
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
 
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
 
探索的テスト入門
探索的テスト入門探索的テスト入門
探索的テスト入門
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 

Similar to クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料

入門 超絶技巧プログラミング !
入門 超絶技巧プログラミング !入門 超絶技巧プログラミング !
入門 超絶技巧プログラミング !
Nobutada Matsubara
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
Yasuhiko Yamamoto
 
STC-OC2019_1st201906
STC-OC2019_1st201906STC-OC2019_1st201906
STC-OC2019_1st201906
Yoshihiko Yamamoto
 
Redmineをつかったスクラム開発のはじめの一歩
Redmineをつかったスクラム開発のはじめの一歩Redmineをつかったスクラム開発のはじめの一歩
Redmineをつかったスクラム開発のはじめの一歩kiita312
 
Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005gotohayato
 
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
mametter
 
SVM -R-
SVM -R-SVM -R-
SVM -R-
Yuu Kimy
 
Mac Rubyではじめる!Macアプリ開発入門
Mac Rubyではじめる!Macアプリ開発入門Mac Rubyではじめる!Macアプリ開発入門
Mac Rubyではじめる!Macアプリ開発入門
宏治 高尾
 
Ruby でつくる型付き Ruby
Ruby でつくる型付き RubyRuby でつくる型付き Ruby
Ruby でつくる型付き Ruby
mametter
 
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書く
mametter
 
僕らのおれおれメトリクス / We Metrics Our Own Way!
僕らのおれおれメトリクス / We Metrics Our Own Way!僕らのおれおれメトリクス / We Metrics Our Own Way!
僕らのおれおれメトリクス / We Metrics Our Own Way!
Yasui Tsutomu
 
Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習
Yusaku Kawaguchi
 
ラボユース 最終成果報告会
ラボユース 最終成果報告会ラボユース 最終成果報告会
ラボユース 最終成果報告会shiftky
 
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
サイボウズ・ラボユース 最終成果報告会プレゼンテーションサイボウズ・ラボユース 最終成果報告会プレゼンテーション
サイボウズ・ラボユース 最終成果報告会プレゼンテーションsn_monochr
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
Nishida Kansuke
 
20121017_アプリ制作勉強会@GMO Yours
20121017_アプリ制作勉強会@GMO Yours20121017_アプリ制作勉強会@GMO Yours
20121017_アプリ制作勉強会@GMO Yours
Yozo SATO
 
T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版Masami Yabushita
 
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
耕平 谷口
 
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうかわんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうかMasami Yabushita
 

Similar to クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料 (19)

入門 超絶技巧プログラミング !
入門 超絶技巧プログラミング !入門 超絶技巧プログラミング !
入門 超絶技巧プログラミング !
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
 
STC-OC2019_1st201906
STC-OC2019_1st201906STC-OC2019_1st201906
STC-OC2019_1st201906
 
Redmineをつかったスクラム開発のはじめの一歩
Redmineをつかったスクラム開発のはじめの一歩Redmineをつかったスクラム開発のはじめの一歩
Redmineをつかったスクラム開発のはじめの一歩
 
Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005
 
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
 
SVM -R-
SVM -R-SVM -R-
SVM -R-
 
Mac Rubyではじめる!Macアプリ開発入門
Mac Rubyではじめる!Macアプリ開発入門Mac Rubyではじめる!Macアプリ開発入門
Mac Rubyではじめる!Macアプリ開発入門
 
Ruby でつくる型付き Ruby
Ruby でつくる型付き RubyRuby でつくる型付き Ruby
Ruby でつくる型付き Ruby
 
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書く
 
僕らのおれおれメトリクス / We Metrics Our Own Way!
僕らのおれおれメトリクス / We Metrics Our Own Way!僕らのおれおれメトリクス / We Metrics Our Own Way!
僕らのおれおれメトリクス / We Metrics Our Own Way!
 
Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習
 
ラボユース 最終成果報告会
ラボユース 最終成果報告会ラボユース 最終成果報告会
ラボユース 最終成果報告会
 
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
サイボウズ・ラボユース 最終成果報告会プレゼンテーションサイボウズ・ラボユース 最終成果報告会プレゼンテーション
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
20121017_アプリ制作勉強会@GMO Yours
20121017_アプリ制作勉強会@GMO Yours20121017_アプリ制作勉強会@GMO Yours
20121017_アプリ制作勉強会@GMO Yours
 
T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版
 
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
 
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうかわんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
 

More from mametter

Enjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProfEnjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProf
mametter
 
TypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without AnnotationsTypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without Annotations
mametter
 
Ruby 3の型解析に向けた計画
Ruby 3の型解析に向けた計画Ruby 3の型解析に向けた計画
Ruby 3の型解析に向けた計画
mametter
 
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRubyemruby: ブラウザで動くRuby
emruby: ブラウザで動くRuby
mametter
 
Type Profiler: Ambitious Type Inference for Ruby 3
Type Profiler: Ambitious Type Inference for Ruby 3Type Profiler: Ambitious Type Inference for Ruby 3
Type Profiler: Ambitious Type Inference for Ruby 3
mametter
 
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
mametter
 
Ruby 3の型推論やってます
Ruby 3の型推論やってますRuby 3の型推論やってます
Ruby 3の型推論やってます
mametter
 
マニアックなRuby 2.7新機能紹介
マニアックなRuby 2.7新機能紹介マニアックなRuby 2.7新機能紹介
マニアックなRuby 2.7新機能紹介
mametter
 
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
mametter
 
A Plan towards Ruby 3 Types
A Plan towards Ruby 3 TypesA Plan towards Ruby 3 Types
A Plan towards Ruby 3 Types
mametter
 
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
mametter
 
A Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and UnderstandingA Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and Understanding
mametter
 
本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能
mametter
 
Transcendental Programming in Ruby
Transcendental Programming in RubyTranscendental Programming in Ruby
Transcendental Programming in Ruby
mametter
 
Cookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own InterpreterCookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own Interpreter
mametter
 
Ruby 3のキーワード引数について考える
Ruby 3のキーワード引数について考えるRuby 3のキーワード引数について考える
Ruby 3のキーワード引数について考える
mametter
 
TRICK 2018 results
TRICK 2018 resultsTRICK 2018 results
TRICK 2018 results
mametter
 
Type Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signaturesType Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signatures
mametter
 
Esoteric, Obfuscated, Artistic Programming in Ruby
Esoteric, Obfuscated, Artistic Programming in RubyEsoteric, Obfuscated, Artistic Programming in Ruby
Esoteric, Obfuscated, Artistic Programming in Ruby
mametter
 
Cookpad Spring 1day internship 2018 超絶技巧プログラミングコース資料
Cookpad Spring 1day internship 2018 超絶技巧プログラミングコース資料Cookpad Spring 1day internship 2018 超絶技巧プログラミングコース資料
Cookpad Spring 1day internship 2018 超絶技巧プログラミングコース資料
mametter
 

More from mametter (20)

Enjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProfEnjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProf
 
TypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without AnnotationsTypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without Annotations
 
Ruby 3の型解析に向けた計画
Ruby 3の型解析に向けた計画Ruby 3の型解析に向けた計画
Ruby 3の型解析に向けた計画
 
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRubyemruby: ブラウザで動くRuby
emruby: ブラウザで動くRuby
 
Type Profiler: Ambitious Type Inference for Ruby 3
Type Profiler: Ambitious Type Inference for Ruby 3Type Profiler: Ambitious Type Inference for Ruby 3
Type Profiler: Ambitious Type Inference for Ruby 3
 
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
 
Ruby 3の型推論やってます
Ruby 3の型推論やってますRuby 3の型推論やってます
Ruby 3の型推論やってます
 
マニアックなRuby 2.7新機能紹介
マニアックなRuby 2.7新機能紹介マニアックなRuby 2.7新機能紹介
マニアックなRuby 2.7新機能紹介
 
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
 
A Plan towards Ruby 3 Types
A Plan towards Ruby 3 TypesA Plan towards Ruby 3 Types
A Plan towards Ruby 3 Types
 
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
 
A Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and UnderstandingA Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and Understanding
 
本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能本番環境で使える実行コード記録機能
本番環境で使える実行コード記録機能
 
Transcendental Programming in Ruby
Transcendental Programming in RubyTranscendental Programming in Ruby
Transcendental Programming in Ruby
 
Cookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own InterpreterCookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own Interpreter
 
Ruby 3のキーワード引数について考える
Ruby 3のキーワード引数について考えるRuby 3のキーワード引数について考える
Ruby 3のキーワード引数について考える
 
TRICK 2018 results
TRICK 2018 resultsTRICK 2018 results
TRICK 2018 results
 
Type Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signaturesType Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signatures
 
Esoteric, Obfuscated, Artistic Programming in Ruby
Esoteric, Obfuscated, Artistic Programming in RubyEsoteric, Obfuscated, Artistic Programming in Ruby
Esoteric, Obfuscated, Artistic Programming in Ruby
 
Cookpad Spring 1day internship 2018 超絶技巧プログラミングコース資料
Cookpad Spring 1day internship 2018 超絶技巧プログラミングコース資料Cookpad Spring 1day internship 2018 超絶技巧プログラミングコース資料
Cookpad Spring 1day internship 2018 超絶技巧プログラミングコース資料
 

クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料