$30 off During Our Annual Pro Sale. View Details »

某人気アプリのクローンをPerlで作る(予定

mackee
July 12, 2014

 某人気アプリのクローンをPerlで作る(予定

Yop - Yo private -
kuiperbelt + Amon2

mackee

July 12, 2014
Tweet

More Decks by mackee

Other Decks in Programming

Transcript

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

    View Slide


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

    View Slide

  3. ๭༗໊ΞϓϦͱ͸

    View Slide

  4. ͜Ε͔ͳʁ

    View Slide

  5. ͜Ε͔ͳʁ

    View Slide

  6. ͜Ε͔ͳʁ

    View Slide

  7. ͜ΕɾɾɾɾͰ͢

    View Slide

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

    View Slide

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

    View Slide

  10. Yo private

    View Slide

  11. ུͯ͠Yop

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  16. amon2-setup.pl Yop

    View Slide

  17. Yop::Web::Dispather

    View Slide

  18. Yop::Model::Member

    View Slide

  19. t/model/member.t

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  29. Kuiperbelt
    Asyncronous Protocol Proxy

    View Slide

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

    View Slide

  31. ίωΫγϣϯ࣌

    View Slide

  32. kuiperbelt
    Yop(Amon2)
    PAPIX

    View Slide

  33. kuiperbelt
    Yop(Amon2)
    PAPIX ᶃTUSFBNDPOOFDU

    View Slide

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

    View Slide

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

    View Slide

  36. YopΛૹΔͱ͖

    View Slide

  37. kuiperbelt
    Yop(Amon2)
    PAPIX
    MOZNION

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide