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
某人気アプリのクローンをPerlで作る(予定
Search
mackee
July 12, 2014
Programming
0
1.1k
某人気アプリのクローンをPerlで作る(予定
Yop - Yo private -
kuiperbelt + Amon2
mackee
July 12, 2014
Tweet
Share
More Decks by mackee
See All by mackee
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
260
Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜
mackee
5
4k
今!ソフトウェアエンジニアがハードウェアに手を出すには
mackee
14
5.9k
ワンバイナリWebサービスのススメ
mackee
10
8.2k
tanukistack ライブコーディング / tanukistack live-coding
mackee
0
230
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
1.1k
perl for shell, awk and sed programmers
mackee
3
2.6k
今更GoのWebフレームワークを作ろうとしているワケ / Why am I trying to create a Go web framework now?
mackee
1
1k
database/sqlでNullを扱う歴史とsql.Null[T]の登場 / sql.Null[T] history
mackee
0
920
Other Decks in Programming
See All in Programming
AIエージェントの設計で注意するべきポイント6選
har1101
6
2.8k
Python札幌 LT資料
t3tra
7
1.1k
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
490
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
210
AI Agent Dojo #4: watsonx Orchestrate ADK体験
oniak3ibm
PRO
0
120
Basic Architectures
denyspoltorak
0
150
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
160
20251212 AI 時代的 Legacy Code 營救術 2025 WebConf
mouson
0
230
Cap'n Webについて
yusukebe
0
160
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
150
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
180
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
430
Featured
See All Featured
A Tale of Four Properties
chriscoyier
162
23k
Ethics towards AI in product and experience design
skipperchong
1
150
Mind Mapping
helmedeiros
PRO
0
43
The Cost Of JavaScript in 2023
addyosmani
55
9.4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
How to build a perfect <img>
jonoalderson
1
4.8k
Why Our Code Smells
bkeepers
PRO
340
58k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
410
How GitHub (no longer) Works
holman
316
140k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
6.8k
Transcript
༗໊ΞϓϦͷΫϩʔϯΛ PerlͰ࡞Δʢ༧ఆ @mackee_w Mishima.pm 2014-07-12
୭ • @mackee_w / Ϛίϐʔ / ϑΝογϣϯϙΤϜ • Yokohama.pm ෭Ϧʔμʔ
• ໘ന๏ਓ ઌGoΛΔͱ͍͕ͬͨPerlΛ ΊΔͱݴ֮ͬͨ͑ͳ͍ͧͱ͍͏ࢥ͍
༗໊ΞϓϦͱ
͜Ε͔ͳʁ
͜Ε͔ͳʁ
͜Ε͔ͳʁ
͜ΕɾɾɾɾͰ͢
Yoͱ ໊લΛࢦఆͯ͠ʮYoʯͱૹΕΔΞϓϦ ϋΠίϯςΩετ͔ͭάϩʔόϧͰΦϙνϡχςΟͳίϛϡχέʔ γϣϯΛ࣮ݱ͢ΔࠓϋΠτΡΤϯςΟٴͼौ୩ք۾ʹਓؾͷSNS ΞϓϦέʔγϣϯ ࠓ͔ΒpapixʹૹΓ·͢
ͳͥYoΛͭ͘Δ͔ • ͷۈΊ͍ͯΔ໘ന๏ਓʹϓϥΠϕʔτ GyazoϓϥΠϕʔτGistͳͲطଘαʔϏεͷ ΦϯϓϨ൛ʢʁʣΈ͍ͨͳͷΛαΫοͱॻ͍ ͯஔ͍͍ͯ·͢ • YoͰίϛϡχέʔγϣϯऔΕΔͳΒΫϩʔζ υͳYoधཁ͕͋ΔͷͰʁ
Yo private
ུͯ͠Yop
·ͩදଆ࡞ͬͯΔͱ͜Ζ αʔόαΠυΛհ
Yoʹඞཁͳཁૉ • ໊લΛܾΊΔ(࠷ۙύεϫʔυೖͬͨ • ϓογϡ௨
໊લΛܾΊΔ • ͳΜ͔ೖྗͯ͠Β͍APIͳΓϑΥʔϜͳΓͰ ૹͬͯΒ͏ • ૹ͖ͬͯͯΒ໊ͬͨલΛόϦσʔγϣϯ͠ ͯDBʹಥͬࠐΉ • ͦΕΛΑ͠ͳʹҾ͚ΔΑ͏ʹ͢Δ
׳Ε͍ͯΔAmon2Ͱ ΜͰΈΔ
amon2-setup.pl Yop
Yop::Web::Dispather
Yop::Model::Member
t/model/member.t
͍ͬͯΔCPANϞδϡʔϧ • JSON::Types • Data::Validator • Time::Piece::Plus • Furl
ςετͷ΄͏ • Test::Time • Test::Fatal • Test::Mock::Guard • Path::Tiny
PerlͰϓογϡ௨ • Protocol::Websocket • Amon2ʹWebSocketϓϥάΠϯ͋Δ • PocketIO • Socket.IOͷผ࣮
Perl + ඇಉظ = AnyEvent • ίωΫγϣϯΛͭͳ͗ͬͺͳ͠ʹ͠ͳ͍ͱ͍ ͚ͳ͍ͷͰඇಉظඞਢ • ͦ͜ͰAnyEvent
• ͔͠͠AnyEventʹ᠘͕……
ίʔϧόοΫࠈ • AΛͬͨΒBΛͬͯͦΕ͕͓ΘͬͨΒCΛ ͬͯ…… • ίʔϧόοΫ͕ωετ͍ͯͬͯ͠Α͘Θ͔Β ͳ͍͜ͱʹͳΔʂ • Promise::Defferedͱ͍͏ճආํ๏͋Δ
AnyEvent + DBI = blocking… • DBIΛͦͷ··͏ͱϒϩοΩϯάIOͳͷͰ વΠϕϯτϧʔϓΛࢭΊΔ • WebSocketͩͱίωΫγϣϯҡ࣋Ͱ͖ͳ͔ͬ
ͨΓ͢Δ • ࣮ࡍͦΜͳʹͳΒͳ͍આ͋Δ
DBI on AnyEvent • AnyEvent::DBI • ͦͷ໊ͷ௨Γ • forkΛར༻ τϥϯβΫγϣϯ͕ࠞ͟Δ
• AnyEvent::DBI::MySQL • MySQLઐ༻ • txn͑ͳ͍ؾ͕͢ΔΜͰ͚͢ΕͲͲ͏ͳΜͰ͠ΐ͏͔
Gearmanͱ͔ʹͤΔ • Gearman δϣϒΩϡʔϫʔΧʔ • Gearman::ClientϒϩοΩϯάIO • AnyEvent::Gearman::ClientMooseͷґଘ࣋ ͪͳͷͰ͋Μ·Γ͍ͨ͘ͳ͍ײ͕͡க͠· ͢(࣋පͷMooseΞϨϧΪʔʁ
ඇಉظPerl͔Β͍ग़͢ʂ
Kuiperbelt Asyncronous Protocol Proxy
Kuiperbeltͱ • ಉظϞσϧ(preforkϞσϧ)ͷΞϓϦέʔγϣ ϯͱ࿈ܞ͢Δ͜ͱΛఆͨ͠ඇಉظϓϩτί ϧͷίωΫγϣϯϓʔϧ • ࠓͷͱ͜ΖHTTP Stream(Long polling/ Comet)ͷΈରԠ
• Golang github.com/mackee/kuiperbelt
ίωΫγϣϯ࣌
kuiperbelt Yop(Amon2) PAPIX
kuiperbelt Yop(Amon2) PAPIX ᶃTUSFBNDPOOFDU
kuiperbelt Yop(Amon2) PAPIX ᶃTUSFBNDPOOFDU ᶄ66*%ΛؚΜͩ+40/
kuiperbelt Yop(Amon2) PAPIX ᶃTUSFBNDPOOFDU ᶄ66*%ΛؚΜͩ+40/ ᶅKPJOVVJE66*%OBNF1"1*9
YopΛૹΔͱ͖
kuiperbelt Yop(Amon2) PAPIX MOZNION
kuiperbelt Yop(Amon2) PAPIX MOZNION ᶃTFOEUBSHFU@OBNF1"1*9
kuiperbelt Yop(Amon2) PAPIX MOZNION ᶃTFOEUBSHFU@OBNF1"1*9 ᶄTUSFBNTFOE66*%1"1*9ͷ66*%
kuiperbelt Yop(Amon2) PAPIX MOZNION ᶃTFOEUBSHFU@OBNF1"1*9 ᶄTUSFBNTFOE66*%1"1*9ͷ66*% ᶅDPOOFDUΛͬͯNFTTBHF:PQΛૹ৴
PerlͰॻ͖͍͢ͱ͜ΖPerl ͦͷଞؙ͛
σόοάڥ • ҎԼͷͷΛProcletͰଋͶΔ • Yop(Starlet) • kuiperbelt • Ҏ্ͷͷΛҰͭͷϙʔτͰड͚ΔͨΊʹ Plack::App::Proxy(Twiggy)
• ຊ൪ڥnginxͰଋͶΔ͔ͳ͋ • ଋͶΔͷΫϩεΦϦδϯରԠΊΜͲ͍ͷͰ
·ͱΊ • ϑϩϯτ͕શવ࡞Εͯͳ͍ͷͰؼͬͨΒຊؾ ग़͢ • Component / Vue.js / Polymerͱ͔͍͍ͨ
• Amon2Ͱ͕͢ࣄಉ͡Α͏ͳײ͡+ͷΞϨ ϯδͱݴ͏ײ͡Ͱ͢ɻڵຯ͕͋ΕͲ͏ͧɻ ͋ͱͰ্͛Δ