Slide 1

Slide 1 text

Async Asynchronously. ඇಉظͬͯಉظΛॻ͘͜ͱ͡ΌΜɻ [email protected] programming is all about programming

Slide 2

Slide 2 text

Important First ϑολʔʹεϙϯαʔ͕ग़ͯΔ͔ΒݟͯͶ!!

Slide 3

Slide 3 text

About me

Slide 4

Slide 4 text

WEB+DB PRESS Vol.73 ʮͨͷ͍͠։ൃ࣮گதܧʯͷϨϏϡʔ͋Γ͕ͱ͏͍͟͝·ͨ͠ (ஶऀҰಉ) code ERB dRuby Rinda Drip

Slide 5

Slide 5 text

͑Ή͞ΜύΠϯΞϝ1kg͋Γ͕ͱ͏ talk RubyKaigi 2006, 7, 8, 9, 10, 11, 13 RubyConf 2012

Slide 6

Slide 6 text

ͺ͖ͬΎΔʙΜ!! @tsurumau and write dRuby ʹΑΔ ؔকढ़ஶ ෼ࢄ ɾ Web ϓϩάϥϛϯά

Slide 7

Slide 7 text

Answering the RubyConf 2012

Slide 8

Slide 8 text

ΦʔϜࣾץʰϓϩάϥϛϯάClojure ୈೋ൛ʱࢴͱిࢠॻ੶͋Θͤͯ޷ධൃചதʂ @koichiro RubyConf 2012 "dRuby͸ࣦഊ࡞ͩ" dRubyಉظݺͼग़͔ͩ͠Βࣦഊͳ ʁʁʁ ݴ͍༁͠ͳ͍ͱʂ

Slide 9

Slide 9 text

RubyKaigi2013ָ͠ΈͰ͢ɻ@iwadon ࠓ೔͓࿩͢Δ͜ͱ ඇಉظʹ͓͜Δ͍ΖΜͳ͜ͱ͸͍ͭ΋͍ͩͨ ͍ಉ͡Α͏ʹղ͘ΜͩΑͬͯ࿩

Slide 10

Slide 10 text

ΫϦΞίʔυ͸Rubyձٞ2013ͷγϧόʔεϙϯαʔͰ͢ ਐΊํ ੈք͸͍͍ͩͨඇಉظͱಉظͰͰ͖͍ͯΔ ඇಉظ෩ͳঢ়گΛͨ͘͞Μࣔ͠·͢ ͍ͭ΋ಉ͡Α͏ʹղ༷͘ࢠΛݟͯͶ

Slide 11

Slide 11 text

৿ా͞Μ͸ָͬͦ͘͢͝͠͏ʹ࿩Λฉ͍ͯ͘Ε·͢ɻൃදͷ͋ͱʹ͔ͭ·͑ͯ࿩ͯ͠ΈͯͶ ࠓ೔͓࿩͢Δ͜ͱ 2 ΋Μ͍͘͏ͳ dRuby͸ඇಉظݺͼग़͞Ε RubyͰͰ͖ΔόοΫάϥ΢ϯυॲཧ΋౰ વͰ͖Δͷ

Slide 12

Slide 12 text

Wait a moment ✓ +3:00ɹ ✓ ࠓ೔ͷAgenda ✓ એ఻͗͢͠ͳ͍ ✓ ࣍͸ඇಉظݺͼग़͞Ε

Slide 13

Slide 13 text

͙Μ·Ͱ·ͬͯΔ ඇಉظͬͯͳʹ Α͘Θ͔Μͳ͍͚Ͳಉظత͡Όͳ͍΋ͷʁ ࠓ೔͸ࣗ෼ͷ౎߹ͱؔ܎ͳ͘ى͜Δͳʹ͔ɺ ͱ͠·͢

Slide 14

Slide 14 text

࿩͔͚͠ͳ͍Ͱ΋Β͑·͔͢ @track8 ඇಉظݺͼग़͞Εܥ ࣗ෼ͷ౎߹ʹؔ܎ͳ͘ݺ͹ΕΔ UNIX signal dRuby RMI

Slide 15

Slide 15 text

9/21 ͱͪ͗Rubyձٞ05ΑΖ͓͘͠Ͷ͕͍͠·͢ @mame UNIX signal ͳʹΛ͍ͯͯ͠΋ɺಥવొ࿥͞Εͨؔ਺͕ݺ ͹Εͯɺ͖ͬ͞ͷͱ͜Ζ͔Β࠶։͢Δ ओॲཧ͸γάφϧ͕ൃੜͨ͜͠ͱΛ஌Βͳ͍

Slide 16

Slide 16 text

͕Μ͹ͬ΃౦๺! @MUNAKATA_Akiko UNIX signal ͳʹΛ͍ͯͯ͠΋ɺಥવొ࿥͞Εͨؔ਺͕ݺ ͹Εͯɺ͖ͬ͞ͷͱ͜Ζ͔Β࠶։͢Δ int foo() { while(1) { bar(); baz(); } } int signal_hanlder(...) { }

Slide 17

Slide 17 text

Lang-8͸૬ޓఴ࡟ܕSNSͰɺ໿190ϲࠃ͔Β80छྨҎ্ͷݴޠͰར༻͞Εͯ·͢ɻ@sasata299 dRuby RMI dRuby͸ඇಉظݺͼग़͞ΕͰ͋Δ RMI͝ͱʹ৽͍͠εϨου͕Ͱ͖ͯॲཧ͢Δ ଞͷεϨου͸RMI͕͋ͬͨ͜ͱΛ஌Βͳ͍

Slide 18

Slide 18 text

΍Δؾφϯγʔ @vestige_ dRuby RMI RMI͝ͱʹ৽͍͠εϨου͕Ͱ͖ͯॲཧ͢Δ ଞͷεϨου͸RMI͕͋ͬͨ͜ͱΛ஌Βͳ͍ DRb.start_service(...) DRb.thread.join class Service def foo ... end end

Slide 19

Slide 19 text

Yokohama.rb͸ຖ݄ୈ2౔༵೔։࠵Ͱ͢ʂ ඇಉظݺͼग़͞Εͷಛ௃ ·͞ʹඇಉظ ࣗ෼ͷ౎߹ʹؔ܎ͳ͘ݺͼग़͞ΕΔ ͦͯ͠ݺͼग़͞Εͨ͜ͱΛ஌Βͳ͍ ݺ͹ΕͨΒͳʹ͔͢Δɺ͕ॻ͖ʹ͍͘

Slide 20

Slide 20 text

֏͞Μڃʹ͸෺଍Γͳ͍ʰͳΔ΄ͲUNIXϓϩηεʱ͸ୡਓग़൛ձ͔Βେ޷ධൃചதͰ͢!! @kakutani ݺͼग़͞Εͨ͜ͱΛ఻͑Δ ఻͑Δνϟϯε͕͋Δͷ͸ݺͼग़͞Εͨଆ Ͳ͏΍ͬͯ఻͑Δʁ Global Variables Synchronization Mechanisms

Slide 21

Slide 21 text

ελʔτΞοϓRuby Kindle൛͸͡Ί·ͨ͠ @igaiga555 Global Variables ඇಉظʹݺͼग़͞Εͨ͜ͱΛϝϞ͢Δ Ͱ΋ϝϞͨ͜͠ͱΛ଴ͯͳ͍ ϙʔϦϯά busy loopʹͳΔ͔΋... EINTRͱ͏·͘૊Έ߹ΘͤΔͷ΋ख

Slide 22

Slide 22 text

hikari no cafe Ұॹʹߦ͜͏! ฏ೔ʹ༡ͼʹ͖ͯ!! > @ay Synchronization Mechanisms εϨουؒͷ଴߹ͤɺ఻ݴ ৚͕݅ἧ͏·ͰٳΉ εϨου͕ผεϨουʹ৘ใΛ఻͑Δ εϨου͕ผεϨου͔Βͷ৘ใΛड͚Δ

Slide 23

Slide 23 text

@nagachika͞Μͷruby-trunk-changesɺ͍ͭ΋ݟͯ·͢! Latch, Semaphore, Monitor ৚͕݅ἧ͏·Ͱ଴ͭ ͋ͷඇಉظݺͼग़͕͋ͬͨ͠Αʂͱ͔Ͷ

Slide 24

Slide 24 text

6/5ͷAWS Summit Tokyo 2013Ͱ͠Ό΂Γ·͢ɻςΫχΧϧτϥοΫʹ͋ͿΕͨํ͸ͥͻɻ @tsuboi Queue ଴ͯΔ্ʹϞϊΛ౉ͤΔ FIFO ఻͍͑ͨΦϒδΣΫτΛpush, pop ۭͷͱ͖͸ΦϒδΣΫτ͕ಧ͘·ͰٳΉ

Slide 25

Slide 25 text

ϑΣΠτɾςελϩοα http://www.fatechan.com Queue QueueΛ஥հʹೋͭεϨου͕ಉظ͢Δ while req = $q.pop do_it(req) end

Slide 26

Slide 26 text

ϑΣΠτɾςελϩοα http://www.fatechan.com Queue QueueΛ஥հʹೋͭεϨου͕ಉظ͢Δ while req = $q.pop do_it(req) end class Service def foo(bar) $q.push(bar) end end

Slide 27

Slide 27 text

ϑΣΠτɾςελϩοα http://www.fatechan.com Queue QueueΛ஥հʹೋͭεϨου͕ಉظ͢Δ while req = $q.pop do_it(req) end class Service def foo(bar) $q.push(bar) end end

Slide 28

Slide 28 text

ϑΣΠτɾςελϩοα http://www.fatechan.com Queue QueueΛ஥հʹೋͭεϨου͕ಉظ͢Δ while req = $q.pop do_it(req) end class Service def foo(bar) $q.push(bar) end end sync!!!

Slide 29

Slide 29 text

ϑΣΠτɾςελϩοα http://www.fatechan.com Queue QueueΛ஥հʹೋͭεϨου͕ಉظ͢Δ while req = $q.pop do_it(req) end class Service def foo(bar) $q.push(bar) end end sync!!!

Slide 30

Slide 30 text

RubyKaigi 2013͸ແࣄϦϦʔε͞ΕͯͨΒiRubyKaigi'13ͰνΣοΫ!! @gutskun socket ... ಉظϝΧχζϜͱ͸ݺ͹Εͯͳ͍͚Ͳ... FIFO σʔλͷ౸ணΛ଴ͯΔ σʔλΛ౉ͤΔ

Slide 31

Slide 31 text

@hemge ʹձͬͨͷ͸Rubyձٞ2007Ͱͨ͠Ͷʔɻࠓ౓ͦ͜দߐͷ࿨՛ࢠ԰͞ΜҊ಺͍ͯͩ͘͠͞ɻ Rinda::TupleSpace ॱংʹ͖·Γ͕ͳ͍ λϓϧͷऔΓग़͠ʹΑΔ଴߹ͤͱ৘ใަ׵ ύλʔϯϚον ActorϞσϧͷϝοηʔδͷج൫ʹ΋߹͏Α Τʔςϧ

Slide 32

Slide 32 text

ΤϯδχΞืूதͰ͢ bit.ly/cookpad_jobs @mrkn Rinda::TupleSpace TupleSpaceΛத৺ʹෳ਺ͷεϨου͕ಉظ ΋͸΍ඇಉظݺͼग़͞Εؔ܎ͳ͍͚ͲӈଆͶ req = $ts.take([:req, ..]) value = do_it(req) $ts.write([:ans, value])

Slide 33

Slide 33 text

ΤϯδχΞืूதͰ͢ bit.ly/cookpad_jobs @mrkn Rinda::TupleSpace TupleSpaceΛத৺ʹෳ਺ͷεϨου͕ಉظ ΋͸΍ඇಉظݺͼग़͞Εؔ܎ͳ͍͚ͲӈଆͶ req = $ts.take([:req, ..]) value = do_it(req) $ts.write([:ans, value]) $ts.write([:req, ..]) $ts.take([:ans, nil])

Slide 34

Slide 34 text

ΤϯδχΞืूதͰ͢ bit.ly/cookpad_jobs @mrkn Rinda::TupleSpace TupleSpaceΛத৺ʹෳ਺ͷεϨου͕ಉظ ΋͸΍ඇಉظݺͼग़͞Εؔ܎ͳ͍͚ͲӈଆͶ req = $ts.take([:req, ..]) value = do_it(req) $ts.write([:ans, value]) $ts.write([:req, ..]) $ts.take([:ans, nil]) sync!!!

Slide 35

Slide 35 text

ΤϯδχΞืूதͰ͢ bit.ly/cookpad_jobs @mrkn Rinda::TupleSpace TupleSpaceΛத৺ʹෳ਺ͷεϨου͕ಉظ ΋͸΍ඇಉظݺͼग़͞Εؔ܎ͳ͍͚ͲӈଆͶ req = $ts.take([:req, ..]) value = do_it(req) $ts.write([:ans, value]) $ts.write([:req, ..]) $ts.take([:ans, nil]) sync!!!

Slide 36

Slide 36 text

ΤϯδχΞืूதͰ͢ bit.ly/cookpad_jobs @mrkn Rinda::TupleSpace TupleSpaceΛத৺ʹෳ਺ͷεϨου͕ಉظ ΋͸΍ඇಉظݺͼग़͞Εؔ܎ͳ͍͚ͲӈଆͶ req = $ts.take([:req, ..]) value = do_it(req) $ts.write([:ans, value]) $ts.write([:req, ..]) $ts.take([:ans, nil]) sync!!! sync!!!

Slide 37

Slide 37 text

ΤϯδχΞืूதͰ͢ bit.ly/cookpad_jobs @mrkn Rinda::TupleSpace TupleSpaceΛத৺ʹෳ਺ͷεϨου͕ಉظ ΋͸΍ඇಉظݺͼग़͞Εؔ܎ͳ͍͚ͲӈଆͶ req = $ts.take([:req, ..]) value = do_it(req) $ts.write([:ans, value]) $ts.write([:req, ..]) $ts.take([:ans, nil]) sync!!! sync!!!

Slide 38

Slide 38 text

Ұॹʹ͋ͷөըΛݟ͍ͨͰ͢ɻ > @nari3 ·ͱΊ ඇಉظʹݺͼग़͞Εͨ݁ՌΛ஌Δͷ͸໘౗ ಉظϝΧχζϜΛ࢖͏ͱ఻͑Δ͜ͱ͕Ͱ͖Δ

Slide 39

Slide 39 text

Wait a moment ✓ +13:00ɹ ✓ dRuby͸ඇಉظݺͼग़͞Ε ✓ ݺͼग़͞Εͨ݁ՌΛผεϨουʹ఻͑Δಉظ ✓ ࣍͸ଈ࣌෮ؼ

Slide 40

Slide 40 text

֏͞ΜͷಠಛͷงғؾಌΕ·͢! ͍͔ͭ࿩ֻ͚͠ʹ͍͖·͢! - @elim όοΫάϥ΢ϯυॲཧ ଈ࣌෮ؼ ॲཧΛड͚෇͚ͨΒ੍ޚ͕໭Δ ड͚෇͚ॲཧͩͱࢥ͏ͱ׬ྃͯ͠Δ

Slide 41

Slide 41 text

The dRuby Book ೔ຊޠ൛͸δϡϯΫಊͰۚͰങ͑Δ ͜Ε͸ඇಉظʁ ͏ʔΜ ࣗ෼ͷ౎߹ͱؔ܎ͳ͘ॲཧΛ࣮ߦ ࣗ෼ͷ౎߹ͱؔ܎ͳ͘׬ྃ

Slide 42

Slide 42 text

9/21 ಹਢԘݪ ͱͪ͗Rubyձٞ05 Eiffelຊ༁ऀͷञ೏͞Μ͕͘ΔΑʂ ݁Ռ͕ؾʹͳΔ ଈ࣌෮ؼͷଟ͘ͷ৔߹ ΍Γͬͺͳ͠Ͱ͸ͳ͘ ݁Ռʹڵຯ͕͋Δ ݁ՌΛ଴ͭAPI͕༻ҙ͞ΕͯΔ

Slide 43

Slide 43 text

The dRuby Book Japanese Edition : Best as GIFT FROM JAPAN جຊతͳύλʔϯ ॲཧΛґཔ → νέοτ΋Β͏! ฒߦͯࣗ͠෼ͷ࢓ࣄΛ͢Δ νέοτ࢖ͬͯґཔͷ݁ՌΛ଴ͭ←ಉظ͢Δ

Slide 44

Slide 44 text

` service جຊతͳύλʔϯ d request join ticket value application background task

Slide 45

Slide 45 text

dRubyHiroba - dRuby hands-on 6/2 10:30- (RubyHiroba) νέοτͷྫ ιέοτͦͷ΋ͷ͕νέοτ ґཔΛॻ͖ɺ݁ՌΛಡΉ popenͳͲ΋ࣅͨΑ͏ͳ΋ͷ ticket = TCPClient.new(...) ticket.write('your task') my_important_task ticket.read

Slide 46

Slide 46 text

2013-9-21 ͱͪ͗Rubyձٞ05 @ ಹਢԘݪࢢ౦ಹਢ໺ެຽؗ νέοτͷྫ εϨου΋νέοτͷΑ͏ʹ࢖͑Δ joinͰ଴߹ͤͱ஋ͷऔಘ͕Ұ౓ʹͰ͖ΔΑ ticket = Thread.new { your_task } my_important_task ticket.join

Slide 47

Slide 47 text

The dRuby Book νέοτͷྫ λϓϧεϖʔεͳΒλϓϧ ticket = Object.new tuple_space.write([:your_task, ticket]) my_important_task tuple_space.take([:your_task_done, ticket])

Slide 48

Slide 48 text

ʮαϯϥΠζग़ӢͰߦ͘ RubyWorld Conference 2013 ʯಉߦऀืूதʂ @yancya ΋ࣗ͠෼͕αʔόͩͬͨΒ ॲཧΛґཔ ฒߦͯࣗ͠෼ͷ࢓ࣄ͢Δ νέοτ࢖ͬͯґཔͷ݁ՌΛ଴ͭ

Slide 49

Slide 49 text

ʮαϯϥΠζग़ӢͰߦ͘ RubyWorld Conference 2013 ʯಉߦऀืूதʂ @yancya ΋ࣗ͠෼͕αʔόͩͬͨΒ ॲཧΛґཔ ฒߦͯࣗ͠෼ͷ࢓ࣄΛ͢Δ νέοτ࢖ͬͯґཔͷ݁ՌΛ଴ͭ ґཔΛ଴ͭ

Slide 50

Slide 50 text

ʮαϯϥΠζग़ӢͰߦ͘ RubyWorld Conference 2013 ʯಉߦऀืूதʂ @yancya ΋ࣗ͠෼͕αʔόͩͬͨΒ ॲཧΛґཔ ฒߦͯࣗ͠෼ͷ࢓ࣄΛ͢Δ νέοτ࢖ͬͯґཔͷ݁ՌΛ଴ͭ ґཔΛ଴ͭ ೋछྨ଴͍ͪͨ

Slide 51

Slide 51 text

dRubyHiroba - dRuby hands-on 6/2 10:30- (RubyHiroba) ଴ͪํ͕·ͪ·ͪͩͱࠔΔ or Ͱ͸ͭͳ͛ͳ͍ ࠷ॳͷ଴߹ͤͰࢭ·ͬͪΌ͏ ͍Ζ͍ΖҰ౓ʹ଴ͯͳ͍ͱμϝ queue.pop or soc.read or rinda.take or ...

Slide 52

Slide 52 text

dRubyHiroba - dRuby hands-on 6/2 10:30- (RubyHiroba) ҰൠԽͨ͠αʔόͷϧʔϓ ͍Ζ͍Ζ·ͱΊͯ଴ͭ ৽͍͠ґཔͳΒ... ׬ྃ௨஌ͳΒ...

Slide 53

Slide 53 text

dRubyHiroba - dRuby hands-on 6/2 10:30- (RubyHiroba) ۉ࣭ʹͯ͠·ͱΊͯ଴ͭ ͲΕ΋ಉ͡APIͰ଴ͯΔΑ͏ʹۉ࣭ʹ͢Δ select()͸શͯΛϑΝΠϧʹͯ͠Δ TupleSpace͸tupleʹਖ਼نԽ

Slide 54

Slide 54 text

dRubyHiroba - dRuby hands-on 6/2 10:30- (RubyHiroba) ·ͱΊ ଈ࣌෮ؼ͢Δͱ͖ɺ͍͍ͨͯ݁Ռ͕ؾʹͳΔ ݁ՌΛ଴ͭͷ͸ಉظ ඇಉظݺͼग़͞Εͱಉ͡Α͏ͳײ͡

Slide 55

Slide 55 text

Wait a moment ✓ +22:00ɹ ✓ ଈ࣌෮ؼͰ΋ಉظ͕ϛι ✓ ࣍͸ࣗ෼͚ͩ͸ݻ·Βͳ͍౒ྗͷ͜ͱ

Slide 56

Slide 56 text

Ruby's GC slide is here! : slidesha.re/19sbBwA (w/o animation, free ver) and gumroad.com/l/xWCR (w/ animation, premium ver) selectଐϝΠϯϧʔϓ select(ͨ͘͞Μͷιέοτ) ϒϩοΫ͠ͳ͍ιέοτͷಡΈॻ͖ ͳʹ͔ॲཧΛ͢Δ

Slide 57

Slide 57 text

͵Ruby൪௕ɺ͍ͭ΋͓ੈ࿩ʹͳ͓ͬͯΓ·͢ʂTIMEXɺ͔Θ͍͍Ͱ͋Γ·͢ʂ ίʔϧόοΫͷύλʔϯ select(ͨ͘͞Μͷιέοτ) ϒϩοΫ͠ͳ͍ιέοτͷಡΈॻ͖ ͳʹ͔ॲཧΛ͢Δ ϑϨʔϜϫʔΫ͕Ӆ͢ ͜ͷลίʔϧόοΫ

Slide 58

Slide 58 text

The dRuby Book ίʔϧόοΫͷ᠘ select(ͨ͘͞Μͷιέοτ) ϒϩοΫ͠ͳ͍ιέοτͷಡΈॻ͖ ͳʹ͔ॲཧΛ͢Δ ϑϨʔϜϫʔΫશମ͕஗͘ ͳΔ ͕͜͜஗͍ͱ

Slide 59

Slide 59 text

The dRuby Book ίʔϧόοΫͷ᠘ select(ͨ͘͞Μͷιέοτ) ϒϩοΫ͠ͳ͍ιέοτͷಡΈॻ͖ ͳʹ͔ॲཧΛ͢Δ ૬ޓʹݺͼ߹͍ͬͯΔͱγεςϜશ ମ͕ݻ·Δ... ͞Βʹผαʔόʹґཔͨ͘͠ ͯ΋͜͜Ͱ݁ՌΛ଴ͭͱ

Slide 60

Slide 60 text

The dRuby Book ίʔϧόοΫͷ᠘ select(ͨ͘͞Μͷιέοτ) ϒϩοΫ͠ͳ͍ιέοτͷಡΈॻ͖ ͳʹ͔ॲཧΛ͢Δ ͠ΐ͏͕ͳ͍͔Β݁Ռ଴ͪ΋select ϑϨʔϜϫʔΫͷ؅ཧ֎Ͱ଴ͭ͜ͱʹ

Slide 61

Slide 61 text

http://www.amazon.co.jp/registry/wishlist/1R43BBPSPUEEE/ γϯάϧεϨου೿ ॲཧ͕Ͳ͜·ͰਐΜ͔ͩίϯςΩετΛ࡞ͬ ͯɺॲཧதͰ΋ϝΠϯϧʔϓʹ໭Δ ࣗવͳίʔυʹ͢Δͷ͸ۤ࿑͢Δ Fiberͱ͔ܧଓͱ͔...

Slide 62

Slide 62 text

2013-9-21ͱͪ͗Rubyձٞ05 @ ಹਢԘݪࢢ౦ಹਢ໺ެຽؗ ͋Εʁ ιέοτͷ଴ͪͱFiberͳΒThreadͱେࠩͳ ͍ͷͰ͸ʁ

Slide 63

Slide 63 text

2013-9-21ͱͪ͗Rubyձٞ05 @ ಹਢԘݪࢢ౦ಹਢ໺ެຽؗ ϚϧνεϨουͰղ͘ acceptͨ͠ΒThreadੜ੒ͯ͠readɺॲཧɺ write͢Δ ίϯςΩετͷอଘ΍෮ݩ͕ෆཁ ࣗવͳίʔυ͕ॻ͚Δ ௕͍ॲཧ΋Ͱ͖Δ͠ɺผαʔϏεʹ׬ྃ ෮ؼͰґཔͯ͠΋ྑ͍

Slide 64

Slide 64 text

2013-9-21ͱͪ͗Rubyձٞ05 @ ಹਢԘݪࢢ౦ಹਢ໺ެຽؗ dRubyͷ࣮૷ͦͷ΋ͷ େࣄͳΦνͰ͢Α!! Rubyʹ͓͚Διέοταʔόͷయܕ shttpsrv (ݪ͞ΜͷHTTPαʔόʔ) ඇৗʹૉ๿ dRuby͸ͦͷΑ͏ʹ࡞ΒΕ͍ͯΔ

Slide 65

Slide 65 text

dRubyHiroba - dRuby hands-on 6/2 10:30- (RubyHiroba) ·ͱΊ ඇಉظʹ͓͜Δ͍ΖΜͳ͜ͱ͸͍ͭ΋͍ͩͨ ͍ಉ͡Α͏ʹղ͘ΜͩΑͬͯ࿩Ͱͨ͠

Slide 66

Slide 66 text

dRubyHiroba - dRuby hands-on 6/2 10:30- (RubyHiroba) ͱͪ͗RubyKaigi 05 2013-9-21 ಹਢԘݪ ট଴ߨԋ: ञ೏׮