Slide 1

Slide 1 text

๭༗໊ΞϓϦͷΫϩʔϯΛ PerlͰ࡞Δʢ༧ఆ @mackee_w Mishima.pm 2014-07-12

Slide 2

Slide 2 text

୭ • @mackee_w / Ϛίϐʔ / ϑΝογϣϯϙΤϜ • Yokohama.pm ෭Ϧʔμʔ • ๭໘ന๏ਓ ઌ೔GoΛ΍Δͱ͍͕ͬͨPerlΛ΍ ΊΔͱݴ֮ͬͨ͑͸ͳ͍ͧͱ͍͏ࢥ͍

Slide 3

Slide 3 text

๭༗໊ΞϓϦͱ͸

Slide 4

Slide 4 text

͜Ε͔ͳʁ

Slide 5

Slide 5 text

͜Ε͔ͳʁ

Slide 6

Slide 6 text

͜Ε͔ͳʁ

Slide 7

Slide 7 text

͜ΕɾɾɾɾͰ͢

Slide 8

Slide 8 text

Yoͱ͸ ໊લΛࢦఆͯ͠ʮYoʯͱૹΕΔΞϓϦ ϋΠίϯςΩετ͔ͭάϩʔόϧͰΦϙνϡχςΟͳίϛϡχέʔ γϣϯΛ࣮ݱ͢ΔࠓϋΠτΡΤϯςΟٴͼौ୩ք۾ʹਓؾͷSNS ΞϓϦέʔγϣϯ ࠓ͔ΒpapixʹૹΓ·͢

Slide 9

Slide 9 text

ͳͥYoΛͭ͘Δ͔ • ๻ͷۈΊ͍ͯΔ໘ന๏ਓʹ͸ϓϥΠϕʔτ Gyazo΍ϓϥΠϕʔτGistͳͲطଘαʔϏεͷ ΦϯϓϨ൛ʢʁʣΈ͍ͨͳͷΛαΫοͱॻ͍ ͯஔ͍͍ͯ·͢ • YoͰίϛϡχέʔγϣϯऔΕΔͳΒΫϩʔζ υͳYo΋धཁ͕͋ΔͷͰ͸ʁ

Slide 10

Slide 10 text

Yo private

Slide 11

Slide 11 text

ུͯ͠Yop

Slide 12

Slide 12 text

·ͩදଆ࡞ͬͯΔͱ͜Ζ αʔόαΠυΛ঺հ

Slide 13

Slide 13 text

Yoʹඞཁͳཁૉ • ໊લΛܾΊΔ(࠷ۙ͸ύεϫʔυ΋ೖͬͨ • ϓογϡ௨஌

Slide 14

Slide 14 text

໊લΛܾΊΔ • ͳΜ͔ೖྗͯ͠΋Β͍APIͳΓϑΥʔϜͳΓͰ ૹͬͯ΋Β͏ • ૹ͖ͬͯͯ΋Β໊ͬͨલΛόϦσʔγϣϯ͠ ͯDBʹಥͬࠐΉ • ͦΕΛΑ͠ͳʹҾ͚ΔΑ͏ʹ͢Δ

Slide 15

Slide 15 text

׳Ε͍ͯΔAmon2Ͱ ૊ΜͰΈΔ

Slide 16

Slide 16 text

amon2-setup.pl Yop

Slide 17

Slide 17 text

Yop::Web::Dispather

Slide 18

Slide 18 text

Yop::Model::Member

Slide 19

Slide 19 text

t/model/member.t

Slide 20

Slide 20 text

࢖͍ͬͯΔCPANϞδϡʔϧ • JSON::Types • Data::Validator • Time::Piece::Plus • Furl

Slide 21

Slide 21 text

ςετͷ΄͏ • Test::Time • Test::Fatal • Test::Mock::Guard • Path::Tiny

Slide 22

Slide 22 text

PerlͰϓογϡ௨஌ • Protocol::Websocket • Amon2ʹ΋WebSocketϓϥάΠϯ͸͋Δ • PocketIO • Socket.IOͷผ࣮૷

Slide 23

Slide 23 text

Perl + ඇಉظ = AnyEvent • ίωΫγϣϯΛͭͳ͗ͬͺͳ͠ʹ͠ͳ͍ͱ͍ ͚ͳ͍ͷͰඇಉظඞਢ • ͦ͜ͰAnyEvent • ͔͠͠AnyEventʹ͸᠘͕……

Slide 24

Slide 24 text

ίʔϧόοΫ஍ࠈ • AΛ΍ͬͨΒBΛ΍ͬͯͦΕ͕͓ΘͬͨΒCΛ ΍ͬͯ…… • ίʔϧόοΫ͕ωετ͍ͯͬͯ͠Α͘Θ͔Β ͳ͍͜ͱʹͳΔʂ • Promise::Defferedͱ͍͏ճආํ๏΋͋Δ

Slide 25

Slide 25 text

AnyEvent + DBI = blocking… • DBIΛͦͷ··࢖͏ͱϒϩοΩϯάIOͳͷͰ ౰વΠϕϯτϧʔϓΛࢭΊΔ • WebSocketͩͱίωΫγϣϯҡ࣋Ͱ͖ͳ͔ͬ ͨΓ͢Δ • ࣮ࡍͦΜͳʹ໰୊ͳΒͳ͍આ΋͋Δ

Slide 26

Slide 26 text

DBI on AnyEvent • AnyEvent::DBI • ͦͷ໊ͷ௨Γ • forkΛར༻ τϥϯβΫγϣϯ͕ࠞ͟Δ໰୊ • AnyEvent::DBI::MySQL • MySQLઐ༻ • txn࢖͑ͳ͍ؾ͕͢ΔΜͰ͚͢ΕͲͲ͏ͳΜͰ͠ΐ͏͔

Slide 27

Slide 27 text

Gearmanͱ͔ʹ೚ͤΔ • Gearman δϣϒΩϡʔϫʔΧʔ • Gearman::Client͸ϒϩοΩϯάIO • AnyEvent::Gearman::Client͸Mooseͷґଘ࣋ ͪͳͷͰ͋Μ·Γ࢖͍ͨ͘ͳ͍ײ͕͡க͠· ͢(࣋පͷMooseΞϨϧΪʔʁ

Slide 28

Slide 28 text

ඇಉظ͸Perl͔Β௥͍ग़͢ʂ

Slide 29

Slide 29 text

Kuiperbelt Asyncronous Protocol Proxy

Slide 30

Slide 30 text

Kuiperbeltͱ͸ • ಉظϞσϧ(preforkϞσϧ)ͷΞϓϦέʔγϣ ϯͱ࿈ܞ͢Δ͜ͱΛ૝ఆͨ͠ඇಉظϓϩτί ϧͷίωΫγϣϯϓʔϧ • ࠓͷͱ͜ΖHTTP Stream(Long polling/ Comet)ͷΈରԠ • Golang੡ github.com/mackee/kuiperbelt

Slide 31

Slide 31 text

ίωΫγϣϯ࣌

Slide 32

Slide 32 text

kuiperbelt Yop(Amon2) PAPIX

Slide 33

Slide 33 text

kuiperbelt Yop(Amon2) PAPIX ᶃTUSFBNDPOOFDU

Slide 34

Slide 34 text

kuiperbelt Yop(Amon2) PAPIX ᶃTUSFBNDPOOFDU ᶄ66*%ΛؚΜͩ+40/

Slide 35

Slide 35 text

kuiperbelt Yop(Amon2) PAPIX ᶃTUSFBNDPOOFDU ᶄ66*%ΛؚΜͩ+40/ ᶅKPJOVVJE66*%OBNF1"1*9

Slide 36

Slide 36 text

YopΛૹΔͱ͖

Slide 37

Slide 37 text

kuiperbelt Yop(Amon2) PAPIX MOZNION

Slide 38

Slide 38 text

kuiperbelt Yop(Amon2) PAPIX MOZNION ᶃTFOEUBSHFU@OBNF1"1*9

Slide 39

Slide 39 text

kuiperbelt Yop(Amon2) PAPIX MOZNION ᶃTFOEUBSHFU@OBNF1"1*9 ᶄTUSFBNTFOE66*%1"1*9ͷ66*%

Slide 40

Slide 40 text

kuiperbelt Yop(Amon2) PAPIX MOZNION ᶃTFOEUBSHFU@OBNF1"1*9 ᶄTUSFBNTFOE66*%1"1*9ͷ66*% ᶅDPOOFDUΛ࢖ͬͯNFTTBHF:PQΛૹ৴

Slide 41

Slide 41 text

PerlͰॻ͖΍͍͢ͱ͜Ζ͸Perl ͦͷଞ͸ؙ౤͛

Slide 42

Slide 42 text

σόοά؀ڥ • ҎԼͷ΋ͷΛProcletͰଋͶΔ • Yop(Starlet) • kuiperbelt • Ҏ্ͷ΋ͷΛҰͭͷϙʔτͰड͚ΔͨΊʹ Plack::App::Proxy(Twiggy) • ຊ൪؀ڥ͸nginxͰଋͶΔ͔ͳ͋ • ଋͶΔͷ͸ΫϩεΦϦδϯରԠΊΜͲ͍ͷͰ

Slide 43

Slide 43 text

·ͱΊ • ϑϩϯτ͕શવ࡞Εͯͳ͍ͷͰؼͬͨΒຊؾ ग़͢ • Component / Vue.js / Polymerͱ͔࢖͍͍ͨ • Amon2Ͱ͕͢࢓ࣄಉ͡Α͏ͳײ͡+๻ͷΞϨ ϯδͱݴ͏ײ͡Ͱ͢ɻڵຯ͕͋Ε͹Ͳ͏ͧɻ ͋ͱͰ্͛Δ