Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
%q is for Quine
Search
Koichi ITO
December 19, 2022
Programming
1.7k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
%q is for Quine
Koichi ITO
December 19, 2022
More Decks by Koichi ITO
See All by Koichi ITO
Reframing the Agile Manifesto
koic
5
3k
The NotImplementedError Problem in Ruby
koic
1
1.7k
Exploring RuboCop with MCP
koic
0
6.7k
Ruby and LLM Ecosystem 2nd
koic
1
2.2k
STYLE
koic
0
2.2k
Ruby and LLM Ecosystem
koic
3
13k
Write Code Every Day
koic
1
2.7k
Bliki (ja), and the Cathedral, and the Bazaar
koic
7
3.2k
Welcome to the LLM Club
koic
0
430
Other Decks in Programming
See All in Programming
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
Go 1.27 における memory allocation の高速化
andpad
0
210
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
300
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
300
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
380
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
120
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
520
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
260
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
160
メールのエイリアス機能を履き違えない
isshinfunada
0
240
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
770
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.7k
Featured
See All Featured
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.3k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
420
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Building an army of robots
kneath
306
46k
Six Lessons from altMBA
skipperchong
29
4.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
73
41k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
350
Paper Plane
katiecoart
PRO
2
53k
Designing for Timeless Needs
cassininazir
1
440
Transcript
2VJOFجຊจܕͷಡΈॱ %q is for Quine !LPJD
w ઈٕϓϩάϥϛϯάͷ w ଏੈͷརӹͱؔͷͳ͍ͳ͠ ࠓͷͳ͠
53*$,࡞ΑΓ ࢲͷ͖ͳٕ࡞ $ruby.is_a?(Object){|oriented| language} IUUQTHJUIVCDPNUSJDUSJDLCMPCNBTUFSVOBLFOUSZSC VTBL࡞
53*$,ۚ ઈٕ࡞ UPNQOH࡞ IUUQTUXJUUFSDPNUPNQOHTUBUVT
3VCZ,BJHJͷ หεϙϯαʔΑΓ &4. *ODͷΞεΩʔΞʔτ࡞ GLJOP࡞ IUUQTHJTUHJUIVCDPNGLJOPDFCFFBFBBBBGDFpMFFTN@CFOUPSC w FWBM X
ͱ͍͏ఆੴ͕ΘΕ͍ͯΔ w ͜͏͍ٕͬͨͷجૅΛֶΔॻ੶͋Δʁ
ٕज़ධࣾ
w ιϑτΣΞ։ൃͷϓϩΛࢦͨ͢Ί ͷॻ੶Ͱͳ͍ w ϓϩάϥϛϯάͷ࣮༻ੑͱ͍͏ࡶ೦Λ ΕΔ͜ͱͰɺϓϩάϥϛϯάຊདྷͷ ָ͠͞Λ࠶ൃݟ͢Δ͖͔͚ͬʹͳΔ w ஶऀͷ3VCZίϛολʔNBNF͞Μ 8PSME/P*0$$$1MBZFS
͋ͳͨͷΒͳ͍ઈٕϓϩάϥϛϯάͷੈք
Ͱ͖Δ͚ͩฏқʹ Ͱ͖Δ͚ͩղʹ ࣮༻తʹ ඇ࣮༻తʹ ઈٕϓϩάϥϛϯά ͓ࣄͷϓϩάϥϛϯά ͋ͳͨͷΒͳ͍ઈٕϓϩάϥϛϯάͷੈք
2VJOF
w ࣗࣗΛධՁͯ͠ɺࣗࣗΛग़ྗ͢Δ ϓϩάϥϜͰ͢ 2VJOFͱʁ % ruby -e 'eval s=%q(puts %(eval
s=%q(#{s})))' eval s=%q(puts %(eval s=%q(#{s})))
ࠓճࡐͱ͢Δجຊจܕ eval s=%q(puts %(eval s=%q(#{s})))
lͲͷΑ͏ʹಈ͔͘ɺ ߟ͑ͯΈ͍ͯͩ͘͞ IUUQTUXJUUFSDPNNPSJNPSJIPHFTUBUVT ʰ͋ͳͨͷΒͳ͍ઈٕϓϩάϥϛϯάͷੈքʱQΑΓ ʰͲ͏ॻ͘ʱͳΒ͵ʰͲ͏ಡΉʱͱ͍ͬͨײ͡Ͱɺ ͍ͪಡऀͱͯ͠ߟ͑ͯΈ·ͨ͠
FWBMͷલʹҾͷೖ͕ߦΘΕ·͢ ࠷ॳͷΩʔϙΠϯτ eval s=%q(puts %(eval s=%q(#{s})))
ೖ͞Ε͍ͯΔͷRͱ͍͏γϯάϧΫΥʔτ૬ͷૉ ͳจࣈྻϦςϥϧͰ͢ɻ͜͜Ͱจࣈྻʹࣜల։͕ॻ͔Ε ͍ͯ·͕͢ɺγϯάϧΫΥʔτͳͷͰࣜల։͞Εͣɺͦͷ ··ͷจࣈྻͱͯ͠ѻΘΕ·͢ɻ ͍͠ͷจࣈྻ eval s=%q(puts %(eval s=%q(#{s})))
ه๏Λ ಡΈସ͑Δ IUUQTUXJUUFSDPNNPSJNPSJIPHFTUBUVT ઈٕϓϩάϥϚʔޚ༻ୡͬΆ͍ ه๏Λ Α͘ݟΔޓΫΥʔτʹಡΈସ͑ͯΈ·͠ΐ͏ RJTGPS2VJOF
͔͜͜Βه๏׳Ε͍ͯ͠ͳ͍ਓͷͨΊศٓతʹɺ͜ͷ จࣈྻΛಉٛͷΫΥʔτه๏ͰಡΈସ͑ͯΈ·͠ΐ͏ɻ ·ͣҰ൪֎ଆͷRه๏ΛγϯάϧΫΥʔτʹ͠·͢ɻ RͷಡΈସ͑ -eval s=%q(puts %(eval s=%q(#{s}))) +eval s='puts
%(eval s=%q(#{s}))' গ͠ಡΈ͘͢ͳͬͨʁ
ه๏ΛμϒϧΫΥʔτʹ͠·͢ɻ ه๏ͷಡΈସ͑ -eval s='puts %(eval s=%q(#{s}))' +eval s='puts "eval s=%q(#{s})"'
͏গ͠ಡΈ͘͢ͳͬͨʁ
ΤεέʔϓͰಡΈͮΒ͘ͳΔͷͰ͕͢ɺଆ ͷRγϯάϧΫΥʔτʹஔ͖͑·͢ɻ RͷಡΈସ͑ -eval s='puts "eval s=%q(#{s})"' +eval s='puts "eval
s=\'#{s}\'"' ͍ͭ͘ॏͶͯΤεέʔϓෆཁͳͨΊ ઈٕϓϩάϥϚʔޚ༻ୡΒ͍͠
શମͱͯ͠γϯάϧΫΥʔτͰғ·Εͨɺࣜల ։ΛධՁ͠ͳ͍ͨͩͷจࣈྻͰ͢ɻ܁Γฦ͠ʹͳ Γ·͕͢ɺ͜ͷஈ֊Ͱ\T^ධՁ͞Ε·ͤΜɻ ಡΈସ͑ͨ͠จࣈྻΛݟͯΈ·͠ΐ͏ eval s='puts "eval s=\'#{s}\'"'
͜͜ͰϩʔΧϧมTʹγϯάϧΫΥʔτ Ϧςϥϧͷจࣈྻ͕ೖ͞Ε·͢ɻ 2VJOFͷશମ૾ʹ͍͖ͬͯ·͠ΐ͏ eval s='puts "eval s=\'#{s}\'"'
ೖޙʹFWBMʹೖͨ͠จࣈྻΛධՁ͠· ͢ɻͳ͓͜ͷ࣌ͰϩʔΧϧมTʹจࣈ ྻ͕ೖ͞Ε͍ͯ·͢ɻ ҾΛFWBMͰධՁ͢Δ eval s='puts "eval s=\'#{s}\'"'
FWBM͞ΕΔ༰ͱͯ͠ɺ͜͜·Ͱݟ͖ͯͨจ ࣈྻΛจʹͯ͠ݟͯΈ·͠ΐ͏ɻ FWBMͰධՁ͞ΕΔจ eval s='puts "eval s=\'#{s}\'"'
QVUT͢Δ༰͜͜ͰධՁ͞ΕΔμϒϧ ΫΥʔτจࣈྻͰ͢ɻ ͯࣜ͞ల։\T^ʹೖΔʁ ඪ४ग़ྗ͢ΔจࣈྻͷΈཱͯ eval s='puts "eval s=\'#{s}\'"'
μϒϧΫΥʔτࣜల։͞ΕΔͷͰɺ\T^ʹFWBMධ Ձલʹจࣈྻೖ͍ͯ͠ΔϩʔΧϧมT͕ల։͞Ε· ͢ɻϩʔΧϧมTʹೖ͍ͬͯΔจࣈྻΛ࠶ܝ͠·͢ɻ ϩʔΧϧมTͷจࣈྻίϨ eval s='puts "eval s=\'#{s}\'"'
͜ͷจࣈྻΛࣜల։ʹೖΕͯΈ·͠ΐ͏ɻ ˞ͨͩ͠μϒϧΫΥʔτจࣈྻͷΤεέʔϓ͕ෆ ͍ͯ͠Δ͜ͷίʔυಈ͖·ͤΜɻ࣍ϖʔδͰ ϩʔΧϧมTʹΑΔࣜల։ -"eval s=\'#{s}\'" +"eval s=\'puts "eval s=\'#{s}\'"\'"
ࣜͷల։ޙͳͷͰɺҙຯ߹͍తʹγϯάϧ ΫΥʔτʹஔ͖͑·͢ɻ ϩʔΧϧมTʹΑΔࣜల։ -"eval s=\'puts "eval s=\'#{s}\'"\'" +'eval s=\'puts "eval
s=\'#{s}\'"\''
ϓϩάϥϜࣗΛ࠶ؼతʹग़ྗ͍ͯ͠Δ͜ͱ͕Θ͔Γ·͢ɻ࣍ ϖʔδ͔ΒɺศٓతʹΫΥʔτஔ͍ͯͨ͠෦Λɺຊདྷͷ ه๏ʹ͠·͠ΐ͏ɻ QVUTग़ྗ͞ΕΔจࣈྻͷݪܕ puts 'eval s=\'puts "eval s=\'#{s}\'"\''
·ͣଆͷγϯάϧΫΥʔτΛRʹ͠· ͢ɻ ಡΈସ͑ΛRʹ͢ -"eval s=\'puts "eval s=\'#{s}\'"\'" +"eval s=\'puts "eval
s=%q(#{s})"\'"
࣍ʹμϒϧΫΥʔτΛه๏ʹ͠·͢ɻ ಡΈସ͑Λه๏ʹ͢ -"eval s=\'puts "eval s=%q(#{s})"\'" +"eval s=\'puts %(eval s=%q(#{s}))\'"
࠷ޙʹ֎ଆͷγϯάϧΫΥʔτΛRʹ͠·͢ɻ ه๏͍ͭ͘ॏͶͯόοΫεϥογϡෆཁͱ͍͏ ͜ͱͰɺ2VJOFͷΠσΟΦϜͱͳ͍ͬͯΔΑ͏Ͱ͢ɻ ಡΈସ͑ΛRʹ͢ -"eval s=\'puts %(eval s=%q(#{s}))\'" +"eval s=%q(puts
%(eval s=%q(#{s})))" େࣄͳ͜ͱͳͷͰ͏Ұ
ࡐͷ2VJOFΛ࠶ܝ eval s=%q(puts %(eval s=%q(#{s}))) 2VJOFͷίʔυϦʔςΟϯά͕Ұप͠·ͨ͠ɻ ධՁ͞ΕΔಡΈॱͰ͕ಈ͘Α͏ʹͳΓ·͔ͨ͠ʁ લϖʔδ·Ͱݟ͖ͯͨจࣈྻ࠷ॳʹݟͨ 2VJOFͦͷͷͰ͢ɻ
w SVCZίϚϯυΛ࣮ߦͯ͠ɺࡐͷجຊจ ܕΛ࣮ߦͯ͠Έ·͠ΐ͏ɻ 2VJOFͷ࣮ߦ % ruby -e 'eval s=%q(puts %(eval
s=%q(#{s})))' eval s=%q(puts %(eval s=%q(#{s})))
w ࣗࣗͷग़ྗΛ࠶ධՁͨ݁͠Ռࣗ ࣗͰ͢ 2VJOFͷ࣮ߦ % ruby -e 'eval s=%q(puts %(eval
s=%q(#{s})))' \ | ruby eval s=%q(puts %(eval s=%q(#{s})))
w ࣗࣗͷग़ྗΛ࠶ʑධՁͨ݁͠Ռࣗ ࣗͰ͢ 2VJOFͷ࣮ߦ % ruby -e 'eval s=%q(puts %(eval
s=%q(#{s})))' \ | ruby | ruby eval s=%q(puts %(eval s=%q(#{s})))
w ࣗࣗͷग़ྗΛ࠶ʑʑධՁͨ݁͠Ռ ࣗࣗͰ͢ 2VJOFͷ࣮ߦ % ruby -e 'eval s=%q(puts %(eval
s=%q(#{s})))' \ | ruby | ruby | ruby eval s=%q(puts %(eval s=%q(#{s})))
ࠓճࡐͱͨ͠جຊจܕ eval s=%q(puts %(eval s=%q(#{s}))) ͜ͷ2VJOFͷઆ໌͜͜·ͰͰ͢
Կͷʹཱͨͳ͍ ϓϩάϥϜΛָ͠ΉจԽ IUUQTXXXZPVUVCFDPNXBUDI W5#ON((VV
l ख़ͨ͠จԽɺྫ͑ԻָͰָේΛٯ͞ʹͯ͠ ͘͜ͱ͕Ͱ͖ΔԻָͱ͔ͦ͏͍͏ͷ͕͋ͬ ͯɺ தུ ख़ͨ͠จԽʹ͜͏͍͓ͬͨ༡ͼ ͕ൃల͍ͯͯ͠ɺϓϩάϥϛϯάͱ͍͏ ख़ͨ͠จԽʹͳ͍ͬͯΔͱ͍͑ΔΜͰ͔͢Ͷ !LJOBCB
w ஶऀͷԕ౻ NBNF ͞Μ 8PSME/P*0$$$1MBZFS w ୭͕ॻ͍ͨॻ੶ɺॏཁ w ʑͷٕ͕հ͞Ε͍ͯΔ w
ϓϩάϥϛϯάͷਂ७ਮͳ ָ͠͞Λࢥ͍ฦ͖͔͚ͬ͢ʹͳ Δ͔ ͋ͳͨͷΒͳ͍ઈٕϓϩάϥϛϯάͷੈք
% cat esm_bento.rb | tee /dev/stderr | ruby | grep
--color . eval( %w( put s(([ 2*7, 2*31 ,1,3 *3*5 ,2*2 *2*2 *3]. map{ |c|c .to_ s(5*7 ).gs ub("1 "," \s") .upca se}. zip( [2*5* 61*1 801, 2*5*3 931, 811* 1871, 2*11 *350 27,7* 11*1 259* 20389 *764 171].map{|c|c.to_s(2*2*3*3)}))*""))*"") Enjoy Ruby with Agile Development https://gist.github.com/fkino/c4e73594b0e9eaea9621a273aa1fc6e8