Slide 1

Slide 1 text

The Pragmatic Glitch Shimpei Makimoto https://github.com/makimoto https://twitter.com/makimoto one of lightning talks in RubyKaigi 2013 | 31st May, 2013 Έͳ͞Μ͜Μʹͪ͸ɻ 5IF1SBHNBUJD(MJUDIͱ͍͏࿩Λ͠·͢ɻ

Slide 2

Slide 2 text

ӳޠͰൃද͢ΔͷͰ೔ຊޠͷࣈນΛ͍Ε·ͨ͠ɻ I talk it in (poor) English, so I added Japanese subs.

Slide 3

Slide 3 text

self ·ͣࣗݾ঺հ͔Βɻ

Slide 4

Slide 4 text

Shimpei Makimoto / ຀ຊ৻ฏ https://{github,twitter}.com/makimoto photo by mirakui ຀ຊ৻ฏͱ͍͍·͢ɻ 5XJUUFS΍(JU)VCͰ͸!NBLJNPUPͱ͍͏ΞΧ΢ϯτ໊Ͱ͢ɻ

Slide 5

Slide 5 text

We’re hiring http://info.cookpad.com/jobs http://info.cookpad.com/en ΫοΫύου͔Βདྷ·ͨ͠ɻ ͨͩ͠ɺ͜ͷൃද͸ࢲͷޏ༻ओͱ͸ؔ܎͋Γ·ͤΜɻ

Slide 6

Slide 6 text

Glitch ͦΕͰ͸άϦονͷ࿩Ͱ͢ɻ άϦονͱ͸ԿͰ͠ΐ͏͔ʁ

Slide 7

Slide 7 text

me ͜Ε͸ࢲͰ͢ɻ

Slide 8

Slide 8 text

me me (in glitch) ͜Ε΋ࢲͰ͢ɻͨͩ͠άϦον͍ͯ͠·͢ɻ

Slide 9

Slide 9 text

It’s Glitch ͜Ε͕άϦονͰ͢ɻ͓Θ͔ΓͰ͢Ͷʁ

Slide 10

Slide 10 text

How? Ͳ͏΍ͬͯ͜ΕΛ࣮ݱ͍ͯ͠ΔͷͰ͠ΐ͏ʁͱͯ΋؆୯Ͱ͢ɻ

Slide 11

Slide 11 text

sed ‘s/a/b/g’ original.jpg > glitch.jpg ͜Ε͚ͩͰ͢ɻTFEΛ࢖ͬͯจࣈBΛจࣈCʹஔ͖׵͍͑ͯ·͢ɻ

Slide 12

Slide 12 text

sed(1) glitch ͜ΕΛҰൠʹTFEάϦονͱ͍͍·͢ɻ

Slide 13

Slide 13 text

Ruby 3VCZΛ࢖ͬͯͳ͍ʁͦ͏Ͱ͢ͶɻͰ͸3VCZΛ࢖ͬͯΈ·͢ɻ

Slide 14

Slide 14 text

ruby as better sed ·ͣ͸ΑΓྑ͍TFEͱͯ͠SVCZΛ࢖͍·͢ɻ

Slide 15

Slide 15 text

ruby -e 'print ARGF.read.force_encoding("ascii-8bit").gsub("a", "b")' original.jpg > glitch.jpg ͍͍ͩͨ͜ΜͳϫϯϥΠφʔͰઌ΄Ͳͷ΋ͷͱಉ͜͡ͱ͕࣮ݱͰ͖·͢ɻ

Slide 16

Slide 16 text

ruby --external-encoding=ascii-8bit -e 'print ARGF.read.gsub("a", "b")' original.jpg > glitch.jpg ΋ͪΖΜ͓޷ΈͰ͜Μͳײ͡ʹͯ͠΋͍͍Ͱ͢ɻ

Slide 17

Slide 17 text

me me (in glitch) ͍ͣΕʹ͠ΖάϦονͨ͠ը૾͕࡞੒͞Ε·͢ɻ

Slide 18

Slide 18 text

data = ARGF.read.force_encoding('ascii-8bit') 36.times do |from| from = from.to_s(36) 36.times do |to| to = to.to_s(36) open("#{from}_#{to}.jpg", 'wb').write(data.gsub(from, to)) end end ͍ͬͺ͍ը૾͕΄͚͠Ε͹͜ΜͳίʔυΛॻ͍ͯ΋͍͍Ͱ͢ɻ

Slide 19

Slide 19 text

͜Μͳײ͡Ͱը૾͕େྔʹ࡞੒͞Ε·͢ɻ

Slide 20

Slide 20 text

៉ྷͰ͢Ͷɻ

Slide 21

Slide 21 text

Glitch in web applications ͯ͞ɺ͔͜͜Β͸গ͠Ԡ༻دΓͷ࿩Λ͠·͢ɻ ΢ΣϒΞϓϦέʔγϣϯΛྫʹ͠·͠ΐ͏ɻ

Slide 22

Slide 22 text

Rubyistokei ͓ͦΒ͘Έͳ͞Μ͸3VCZJTUPLFJΛ͝ଘ஌ͩͱࢥ͍·͢ɻ

Slide 23

Slide 23 text

͜ΕͰ͢ɻ

Slide 24

Slide 24 text

I apologize before a demo ͋Β͔͡Ίؔ܎֤ҐʹँΓ·͢ɻ

Slide 25

Slide 25 text

Let’s break Rubyistokei ͦΕͰ͸3VCZJTUPLFJΛյ͠·͠ΐ͏ɻ

Slide 26

Slide 26 text

Glitch Rubyistokei 3VCZJTUPLFJ͔ΒϑΥʔΫͤ͞ɺ (MJUDI3VCZJTUPLFJΛ࡞Γ·ͨ͠ɻ ແஅͰ

Slide 27

Slide 27 text

http://glitch-rubyistokei.herokuapp.com

Slide 28

Slide 28 text

إ͕ݟ͑ͨ΄͏͕ྑ͍ͱࢥͬͨͷͰɺ ͜Μͳײ͡Ͱ൒෼͚ͩյ͢ͱ͍͏͜ͱΛͯ͠Έ·ͨ͠ɻ

Slide 29

Slide 29 text

How? ͜Ε͕ͲͷΑ͏ʹ࣮ݱ͞Ε͍ͯΔ͔͸ɺ ιʔείʔυΛݟͯ΋Β͏ͷ͕ૣ͍Ͱ͢ɻ

Slide 30

Slide 30 text

3VCZJTUPLFJ͸4JOBUSBΞϓϦέʔγϣϯͰ͢ɻ ը૾Λ൒෼յ͢ϝιουΛ௥Ճͯͦ͠ΕΛද͍ࣔͤͯ͞·͢ɻ

Slide 31

Slide 31 text

get '/glitch' do data = open(params[:url]).read data_a = data[0 .. data.size / 2] data_b = data[data.size / 2 .. -1] content_type :jpeg data_a + data_b.force_encoding('ascii-8bit').gsub('a', 'b') end ͬ͟ͱݟͯ΋ΒͬͨΒΘ͔ΔΜͰ͕͢ɺ؆୯ͳϩδοΫͰ͢ɻ

Slide 32

Slide 32 text

get '/glitch' do data = open(params[:url]).read data_a = data[0 .. data.size / 2] data_b = data[data.size / 2 .. -1] content_type :jpeg data_a + data_b.force_encoding('ascii-8bit').gsub('a', 'b') end ը૾ϑΝΠϧΛಡΈࠐΜͰɺͭͷϒϩοΫʹΘ͚·͢ɻ

Slide 33

Slide 33 text

get '/glitch' do data = open(params[:url]).read data_a = data[0 .. data.size / 2] data_b = data[data.size / 2 .. -1] content_type :jpeg data_a + data_b.force_encoding('ascii-8bit').gsub('a', 'b') end ࠷ॳͷϒϩοΫ͸ͦͷ··ʹɺ࣍ͷϒϩοΫͰ͸HTVC͠·ͯग़ྗ͠·͢ɻ

Slide 34

Slide 34 text

ͦΕʹΑͬͯ͜ͷΑ͏ʹ൒෼͚ͩյΕͨը૾͕ੜ੒Ͱ͖·͢ɻ

Slide 35

Slide 35 text

https://github.com/makimoto/rubyistokei/tree/glitch ͜ͷϒϥϯν͸͜ͷ63-Ͱެ։͞Ε͍ͯ·͢ɻ

Slide 36

Slide 36 text

def show respond_to do |format| format.html do # snip end format.glitch do data = open(IMAGES_PATH.join(params[:id])) data = data.force_encoding('ascii-8bit').gsub('a', 'b') send_data data, type: 'image/jpeg', disposition: 'inline' end end end ͪͳΈʹ3BJMTͰಉ༷ͷॲཧΛߦ͓͏ͱͨ͠Β͜Μͳײ͡ʹͳΓ·͢ɻ protip: Case in Rails

Slide 37

Slide 37 text

Wrapping up ·ͱΊ·͢ɻ

Slide 38

Slide 38 text

Glitch is quick and easy Glitch is useful for web applications (JPEG is good) ͱ͍͏͜ͱͰɺάϦον͸ૉૣ͘Ͱ͖ͯ؆୯Ͱ͢ɻ ΢ΣϒΞϓϦέʔγϣϯͱͷ਌࿨ੑ΋ߴ͍Ͱ͢ɻͥͻࢼ͍ͯͩ͘͠͞ɻ You can try it!!1;

Slide 39

Slide 39 text

The Pragmatic Glitch one of lightning talks in RubyKaigi 2013 | 31st May, 2013 Shimpei Makimoto https://github.com/makimoto https://twitter.com/makimoto