YAPC::Asia2009 09/10ã®ã¡ã¢
- åå¤ç¥ã«å¼ãç¶ãåYAPCåå ãã»ãã·ã§ã³éã®ç§»å大å¤ã ã£ãã
- è¨å¿µã«Acme大å
¨2009ã¨Pythons&PerlMongersã®2ã¤ã¨ãè²·ã£ã
- Acmeã®ä¸ã«ä½ããããç¥ãããã£ãããã¡ããã©ããã¿ã¤ãã³ã°ã ã£ãï¼
- P&Pã¯ãã©ãã©è¦ã¦ãããã³ã¶ãããã§ã®å¿å¾ç·¨ããã£ã¦ããã ããã£ããèªãã§ãã¾ã£ã
- AnyEventã®æå³ãããããããªãã¾ã¾ä½¿ã£ã¦ãã®ã§miyagawaããã®è©±èãã¦è¯ãã£ãããã£ã¨my $w; $w = AnyEvent->timerã®ä¸ã§undefãã£ã¦ãçç±ãããã£ãï¼ãããªï¼
- ãã ã$cv->cb(sub{ $cv->recv });ã§è¤æ°åæã«ç«ã¡ä¸ãããã¿ã¼ã³ã£ã¦ã®ãå®éã«ãã£ã¦ã¿ããã©ä¸æãåããªãã£ãããããã¡ããåå¼·ããªãã¨ããããã
Welcome - id:lestrrat
- ä»å¹´ããJPAã主å¬
- 2å¹´é£ç¶ä¸çæ大ã®YAPCãç»é²æ°539人/確èªæ¸ã¿459人
- ãã¼ãï¼3ã¤ã®C
- Community:Perlã¯ã³ãã¥ãã¥ãã£ã®æåã¨è¨ã£ã¦ãéè¨ã§ã¯ãªã
- Corporate:ã³ã¼ãã¬ã¼ããã©ãã¯ãä¼æ¥ã§ã©ã®ããã«ä½¿ããã¦ããã
- Connect:ä¸ã®2ã¤ã®Cãã¤ãªããã
åºèª¿è¬æ¼ Perlã®æªæ¥ããã®è¡ç¨ - Perl Foundation: Richard Dice
FLOSSã®æè¡é²åã®ããã®ã¢ãã«ã¨ã¯ï¼
- æéã¨ã¨ãã«ã½ããã¦ã§ã¢ã¯é²åãã
- åãã«èª°ããéçºããæ©è½ãå ãã誰ããããã«å ãã
éçºãå®å®ããç¶æ ã«ãªã
- æ»ãã ç¶æ
- åé¡åéãããå°½ããã(Text::Template)
- éçºè ã®èå³ããã§ã«ä»ã«ç§»ã£ã¦ãã¾ã£ã
- 次ã®ã¹ãããã«ã³ã¹ãããããããã
åé¡åéã¯ãã¹ã¦ããå°½ãããï¼
CPANã®éçºããã»ã¹
- 誰ããå¿
è¦ã«è¿«ããã
- ãã®äººãéçºãä»ã®èª°ããæ©æµã«ãããã
- å¿
è¦ã«è¿«ãããªãå ´åã¯è§£æ±ºãããªã
- ããã¤ã解決ãããã§ã¯é
ã
- åãã«è§£æ±ºãã人ãåã¤
- ããã¤ã解決ãããã§ã¯é
ã
誰ãèå³ãªãï¼
- æ¬å½ã«ï¼
- å®éã¯èå³ããã人ã¨ã解決ãã人ãä¸è´ããªãã ãã§ã¯ï¼
- ãéããã人ã¯ãéã§è§£æ±ºã§ãã
- å®éã¯èå³ããã人ã¨ã解決ãã人ãä¸è´ããªãã ãã§ã¯ï¼
ãªã¼ãã³ã½ã¼ã¹ããã¸ã§ã¯ã
ã±ã¼ã¹ã¹ã¿ãã£ï¼Mozilla
ã±ã¼ã¹ã¹ã¿ãã£ï¼eclipse
ä¼æ¥ã¸ã®å£²ãè¾¼ã¿
TPFã§èµ·ãã£ã¦ãããã¨
- å
é¨ã§ã®è°è«ãä½ãã§ããï¼ä½ãããããã¹ãï¼
- ãæå°éãã¢ãã«
- ä»ã®ã¾ã¾
- ãæ欲çãã¢ãã«
- è½åçã«çµç¹ä½ããããPerlã¨ã¨ãã«æ¦ãæºå
- ãæå°éãã¢ãã«
Perlã®æªæ¥
Webã¨ã³ã¸ãã¢ã®ããã®mixiã¢ããªéçºã¬ã¤ã - mixi ç°ä¸æ´ä¸é
mixiã¢ããªã¨ã¯
- mixiã§èç©ãããã½ã¼ã·ã£ã«ã°ã©ããéçºè ã«éæ¾
- 8/24ã«ä¸è¬å ¬é
å ¬éã¢ããªã«ã¤ãã¦
- ã¢ããªæ°:231
- ä»ã®1ä½ï¼è½å大å¦-æ¼¢åãã¹ãï¼ããªã³ã ï¼
- ã¦ã¼ã¶æ°ï¼395,598
ãã¤ã©ã«ã®ä»æã
- invite
- ãã¤ãã¯ã«ã¢ããªãç´¹ä»ããæ©è½
- ã¢ã¯ãã£ããã£ãã£ã¼ã
- ãã¤ãã¯ã®æ´æ°æ å ±
mixiã¢ããªã¨OpenSocial
- OpenSocialã«mixiã®ç¬èªã®APIãå ããç©ãmixiã¢ããª
- mixiã¢ããªï¼PCçï¼
- XML + HTML + JavaScript + Flash
- DBç¨æããªãã¦ãkey valueã®ç°¡åãªPersistence APIãæä¾ããã¦ãã
- èªåã®ãµã¼ãã«ã¢ãããã¼ããããã®URLãmixiã¢ããªã«ç»é²
- mixiã¢ããªï¼ã¢ãã¤ã«çï¼
- æ¥æ¬ã®æºå¸¯ã¯JavaScriptã«å¯¾å¿ãã¦ãªãã®ã§ãHTML + XML + RESTFulAPI
- mixiããããã·ã«ãªã£ã¦ãã¦ããªã¯ã¨ã¹ããèªåã®ãµã¼ãã«æ¸¡ãããã¤ã¡ã¼ã¸
- Gadget XMLãã¡ã¤ã«
- ä¸ã¤ã®ãã¡ã¤ã«ã§PCçã¨ã¢ãã¤ã«çã®ä¸¡æ¹ã«å¯¾å¿å¯è½ãªè¨è¿°ãã§ãã
å¿ è¦ã¨ãªãå®è£
- Social Data API
- /people, /activities, /appdata, JS(opensocial.*)
- Gadget APIã®å®è£
- /gadgets/makeRequest, JS(gadget.*)
- Gadget Rendering
- /gadgets/ifr
- ããããå®è£ ããã®ã¯å¤§å¤
PSGI/Plack - id:tokuhirom,ãid:miyagawa
- ä»æ¥ã¯Async/DBIã®è©±ã¯ãã¾ãããPlackã®è©±ã¯11æããã¯ãã¾ããããã§ããã¦ã³ã³ã®åãã®ãã ã®ã§ãäºæ¥é ãã®å½±é¿ã¯ããã¾ããããã¢ãããã¾ãã
æåã«éè¦ãªãã¨
ãããã³ã«ã¯ã·ã³ãã«
- ãªã¯ã¨ã¹ãã¯HASHREFã«ã·ãªã¢ã©ã¤ãºãã¦æ¸¡ã
- ã¬ã¹ãã³ã¹ã¯ARRAYREFã«ã·ãªã¢ã©ã¤ãºãã¦æ¸¡ã
- ç¬èªå¤æ°
- ãªãã§å¿
è¦ãï¼
- èªåã§Webã¢ããªã±ã¼ã·ã§ã³ãã¬ã¼ã ã¯ã¼ã¯ãä½ãã¨ãwebãµã¼ããã¨ã®å®è£ ãå度èªåã§ä½ããªãã¨ãããªããapahceã¨ãmod_perlã¨ãfast cgiã¨ã
- response
- é
åã®å½¢ã«ãã
- ããã·ã¥ãããªãã®ã¯åããã¼ã使ãæã«å°ãã®ã§
- é åã¯å«ã ã£ã¦ã®ã¯èããªãã¦ãããèããã®ã¯ãã¬ã¼ã ã¯ã¼ã¯ä½ã人ã ãããã®äººãããã°ãã°ããã ã
- é
åã®å½¢ã«ãã
- specã¯githubã«ç½®ãã¦ããã®ã§è¦ã¦
- HTTP::Engineã¯å®è£
ã¨ä»æ§ã¨APIãå
¨ã¦ãã£ã¡ãã«ãªã£ã¦ã
- HTTP::Engine::Interface::PSGIã«åé¢ããç©ãä»ãªãã¸ããªã«ä½ã£ã¦ãã
- Plack::Adapter::HTTP::Engineãç¨æãã¦ãã
- HTTP::Engineããä¹ãæããããããã«ããã ãããããã®ã¾ã¾åºããã¯ããããªã
- HTTP::Engineã¯ã¡ã³ããã³ã¹ã®ã¢ããã¼ã·ã§ã³ãè½ã¡ã¦ãã®ã§ãã®å ãã°ãã£ãã¯ã¹ã ããã
Plack
- Request class/Response classãæã£ã¦ã
- ã¢ããªãå®è¡ã§ããplackupã³ãã³ãããã
- plackup
- application loader
- ãplackup MyAppããå®è¡ããã°ãµã¼ããç«ã¡ä¸ãã
- plackup foo.cgiã¨æã¦ã°CGIãç«ã¡ä¸ãã
- PLACK_IMPL=Mojoã¨ãæã¦ã°Mojoã使ã£ã¦ç«ã¡ä¸ãããã
- ã¢ããã¿ãå·®ãæ¿ããã®ã¯-a Catalystã¨ã
- ã¢ããã¿ã¯Webã¢ããªã±ã¼ã·ã§ã³ã®å·®ç°ãå¸åãããã®
- ãã¬ã¼ã ã¯ã¼ã¯å´ã§ç¨æãã¦ããããã©ãPlackå´ã«ãå ¥ãã¦ãã
TODO
- Asyncã®specãã¾ã 決ã¾ã£ã¦ãªã
- èªåã®ãã¬ã¼ã ã¯ã¼ã¯æ¸ãã¦ã人ã¯ircã§æè¦åé
- mod_perlã¨FCGIã®ã¤ã³ã¿ãã§ã¼ã¹ãæªå®è£
- impl::ModPerl
- impl::FCGI
ãã¢
- test
- catalystã®testããã¯ã£ã¦æ¥ã¦åããã
- ã¾ã å ¨é¨éããªãã®ã§ã©ã£ãã«ãã°ããã
- ããã¯ãããã¨ããã¬ã¼ã ã¯ã¼ã¯ãä½ããã³ã«åããããªãã¹ããæ¸ãå¿ è¦ããªã
- catalystã®testããã¯ã£ã¦æ¥ã¦åããã
- CGI.pmã«ãPSGIãå
¥ãããã¨ã¯ã¡ã³ããã®äºæ¿æ¸ã¿
- CGI.pmã使ã£ã¦ããã¬ã¼ã ã¯ã¼ã¯ã¯ãã®ã¾ã¾ä½¿ãã
- AnyEventã®ãã¢
- ï¼ã»ãã·ã§ã³å§ã¾ãåããtimeãåºåãããã¢ä½ã£ã¦ããã©ããªããinteravalã§åºåãããä¸æãåããªãï¼
- miyagawa:ããããã¡ããã¦ãããåºåãããªãããããªãï¼æ¹è¡ä»ãããåºãªãããªï¼ã
- tokuhirom:ã³ã¼ãã®writeé¨åã«æ¹è¡ãã®ã¾ã¾å ¥ãã
- miyagawa:ãããããç¬ã
- miyagawa:ãnew lineã
- tokuhirom:èãã
- miyagawa:ã\nã
- tokuhirom:èãè¾¼ã
- miyagawa:ãï¼ãã¼ãPCã®åã«è¡ã£ã¦æ¸ããã¨ãããã©ï¼viã ã¨æ¸ããããªã
- tokuhirom:æå³ãããã£ã¦"\n"ã追å
- åºåã§ãããä¼å ´ããããã¨çãä¸ãã
- ï¼ã»ãã·ã§ã³å§ã¾ãåããtimeãåºåãããã¢ä½ã£ã¦ããã©ããªããinteravalã§åºåãããä¸æãåããªãï¼
質å
- HTTP::Engine使ã£ã¦ã人ã¯ãã¼ã¸ã§ã³ã¢ããããªãã¨åããªããªãï¼
- ä½ãããå¿ è¦ãªãåããã大ä¸å¤«ããã¨ãã¼ã¸ã§ã³ã¢ããã¯å¤åããããªãã
- Plackã®HTTP::Engineãä»ã¨ã®ãã¼ãã©ãã³ã¹æ¯è¼ã¯ï¼
- Plackã®ãã³ããã¼ã¯ã¯ã¾ã åã£ã¦ãªã
- é ãã£ãå ´åã¯PSGIã®ä»ã®å®è£ ã使ãã°ãã
- Plackã使ã£ã¦ãã°ãä»å¾æ°ããPSGIã®å®è£ ãåºã¦æ¥ãæã«ã¢ããªå´ã¯ä½ãå¤ããå¿ è¦ãªããããåãå ¥ãã¦éãã§ãã
- PSGIã®ä»å¾ã¯ï¼
- Catalystèªä½ãPSGIãå®è£
ããã¹ãã§ã¯ï¼
- Catalyst::Engineãå¤ãã¦åããªããªã£ããå°ãããCatalyst::Engineã®ä¸èº«ãPSGIã§åãããããªãã®ãæ¸ãã
- ä»ãããã¬ã¼ã ã¯ã¼ã¯ãPSGI対å¿ããã®ã¯ãããç°¡åãCGIä½ãã ããªã®ã§ã
- HTTP::Engineã¯ããããªã¨ãããã¡ãã¾ãã«ãªã£ã¦ãããä»ã®ãã¬ã¼ã ã¯ã¼ã¯ãã移ããªãã¨ãããªããªã£ã¡ããããªã®ã§ãå¿ è¦é¨åãåããã
Inline::x86 JIT Assembler - Yoshinori TAKESAKO(id:TAKESAKO)
No Binary
- ãã£ã±ãuse Perlã ãã
- use Win32::API;
- messageBoxã«æ¸¡ãå¤ãå¼æ°ã§æ¸¡ãã¦ãã¦ãããããããç¬
- use Win32::API;
- use Win32::APIãããªãã¦ãDynaLoaderã§dl_install_xsubã使ã£ã¦ãã§ãã
- use Inline::X86
- åããã ãã©ãã»ãã¥ãªãã£ã®åé¡ã§Windowsã®DEPã®è¨å®ããããå¿ è¦ããã
- ï¼ããã¾ã§èãã¦ãå¾ã¯ã¡ã¢åããã«è©±èãã¦ã¾ããï¼
- ããããªããã¦ãã¾ãã§å¤§å¦ã®ææ¥ãèãã¦ããã®ãããªæè¦ã«æ»ãã¾ãã
API Design - Shawn Moore (Sartak)
- Googleã®ããã¯ãã¼ã¯ã§ãAPIè¨è¨ã®è©±ãåºã
- Moose,Path::Dispatcher,HTTP::Engine,Dist::Zilla,IM::Engineã®ã¯ã¼ã«ãªAPIã®è©±
- ç§è¨£ã¯ãã¹ããæ¸ããã¨
Moose
Path::Dispatcher
- jifty::Dispatcherãprophetã§ä½¿ãããã«ä½ããã
- å
ã
ã¯Sub::Exporterã使ã£ã¦ãã
- æ¡å¼µæ§ããªãã£ã
- å
ã
ã¯Sub::Exporterã使ã£ã¦ãã
- Robert Krimen(grink)ãæ¡å¼µãããã£ã¦Path::Dispatcher::Builderãã§ãã
- ãµãã¯ã©ã¹åãã¦ãã¸ãã¯å¤æ´ã§ããããã«ãã
HTTP::Engine
Dist::Zilla
- è²ã
ãªãã©ã°ã¤ã³ã使ãã
- ãã©ã°ã¤ã³ã®å½¹å²ãæ¸ãã¨ãã®å½¹å²ããã¤ãã©ã°ã¤ã³ãé¸ã°ãã
- Request Tracker
- é¸æè¢ãå¢ããã
- ModuleBuild or MakeMaker
- MetaYAML or MetaJSON
- Dist::Zilla::Pluginã«æ¡å¼µãå¯è½
- ãã¼ã«ã«å¿ è¦ãªæ¡ä»¶ãæºããã°ãã
IM::Engine
- Japperãªã©ã®IMã«å¯¾å¿
- ä»åãçµãã§ãããã¸ã§ã¯ã
- æ°ã«å
¥ã£ã¦ãã®ã¯plugin_collect
- method=>'traits'ã§traitsã¡ã½ãããå¼ã³åºãã
- çµæã¯ã¡ã½ããã®çµæãé åã«ã¾ã¨ãããã®
- method=>'traits'ã§traitsã¡ã½ãããå¼ã³åºãã
- new_with_plugins,nwe_with_traitsãæ°ã«å
¥ã£ã¦ã
- new_with_traitsã¯MooseX::Traitsãå©ç¨ãã¦ãã
- Mooseã§ã¯Roleã¨Traitã¯ã»ã¼åæèª
ã¾ã¨ã
- Mooseã¯æ¡å¼µæ§ãã·ã¥ã¬ã¼ã®åé¢ãæãã¦ããã
- Path::Dispatcherã®ããã«ooã·ã¥ã¬ã¼å±¤ã¨ããèããåºãã£ã¦æ¬²ãã
- HTTP::Engineã®å¿ è¦ãªæ©è½ã ãèããã°æè»ã§ç°¡æ½ã«ãªã
- Dist::Zillaã®ããã«è¿½å ãããæ©è½ãæ示çã«æå®ã§ããã£ã¦ãã
- IM::Engineã®ããæ¹ãããã°DRYã«ã§ãã
- ãã¹ãæ¸ãã®ãå¿ããªãããã«
modern Catalyst - DeNA Hideo Kimura(id:hide-k)
- Catalystã®æ¡å¼µã®è©±
- Catalyst5.8
Deprecation
Extend Application
- pluginã¯ãããã¡ãæã人ã«æããã
- Application namespaceãªãã®ãªã®ãªã»ã¼ã
- Helper Method
- Role
- use Moose::Roleã§setupã«å
¥ããã°ä½¿ãã
- ããã¾ãããªããã©
- use Moose::Roleã§setupã«å
¥ããã°ä½¿ãã
- base Controller
- BEGINã§extendsãã
Extend Controller
Dispatcher
- default:Privateã使ããªããªã
- default:Pathã使ãããã«ãã¦ãã ãã
- 極端ãªè©±catchall::Pathã§ããã¾ããªã
- index:Privateãåæ§ã«ãã¡
- $c->goã$c->vistiã追å ããã
- 使ãéãããããããªããã©ã
Model
- Contollerãå°ãããã¦ãModelãè³¢ãããªãã
Test
Asynchronous Event programming with AnyEvnt - id:miyagawa
- èªåã®æ¸ããã¢ã¸ã¥ã¼ã«ä»¥å¤ã®è©±ãããã®ã¯4å¹´ã¶ãããããªã®ã§ãã¼ã·ãã¯ãªè©±ã«ãªããã
- AnyEventã®ä½è
ã®äººã¯é¢ç½ã人
- miyagawaããã®ãã¨ãå«ãããããã¡ã¼ã«ããã¨æ濤ã®å¢ãã§æã£ã¦ãã
- ã§ãä½ããããé¢ç½ããªã£ã¦æ¥ã
- miyagawaããã®ãã¨ãå«ãããããã¡ã¼ã«ããã¨æ濤ã®å¢ãã§æã£ã¦ãã
- ã¤ãã³ãã«ã¼ãã®ã¢ã¸ã¥ã¼ã«ã¯ãããããããAPIããããéã
- ããã¯åé¡
- POE::Componentsã®æ°ã250ããããã人æ°ã®ããã«è¦ãããã©ãIO::Asyncã®å¯¾å¿ãã¦ããããªãã®ã°ãã
- ããã¯åé¡
- AnyEventã§æ¸ããã³ã¼ãã¯ã©ã®ã¤ãã³ãã«ã¼ããå
¥ã£ãã¢ã¸ã¥ã¼ã«ã§ã使ãã
- POEã使ããã¦ããæ¢åã®ã³ã¼ãã«ã追å ã§ãã
- ããPOE::Componentsã¯å¢ãããªãã¦ãããããã³ãã
- POEã使ããã¦ããæ¢åã®ã³ã¼ãã«ã追å ã§ãã
AnyEventã®åºæ¬
- TimerWatcher
- timer
- afterç§å¾ã«intervalç§ãã¤å®è¡
- timer
- condvarã§å¾
ã¡åãã®ã¤ãã³ããä½ã£ã¦ãå®è¡ããããã³ã¼ã«ããã¯é¢æ°ã®å®è¡çµæãrecvã«æ¸¡ã
- $cv->recvãã¡ã¤ã³ã«ã¼ã
- $cv->recvã®æ»ãå¤ã«sendã§æ¸¡ããå¼æ°ãå ¥ã
I/O
- AnyEvent::Handle
- push_readã®line,chunk(ããè¡æ°å),json(jsonãèªã¿è¾¼ã¿çµãã£ãã)
- AnyEvent::Sokect
- AnyEvnt::HTTP
- ããªããã£ããªã®ã§Headerãªã©ã¯èªåã§ããã°ã£ã¦æ¸ããªãã¨ãããªã
ã¢ã¸ã¥ã¼ã«ã®ç´¹ä»
- AnyEvent::Twitter::Stream
- AnyEvent::ReverseHTTP
- ãã¹ã¯ãããã§ã¯ã©ã¤ã¢ã³ãä½ãã¨éä¿¡ã§ããªããã©ããµã¼ãã¨ã¯ã©ã¤ã¢ã³ããé転ããããã¨ã§ä¸æããã£ã¦ã
AnyEventã®Tips
- Transactions(multi signals)
- parallelã«downloadãããå ´åã¯ä¸æå¤æ°ä½¿ã£ã¦æ¸ããããªããã©ããããããªãã¦sendã使ããªãæ¸ãæ¹ããã
- beginã¨endã使ã
- parallelã«downloadãããå ´åã¯ä¸æå¤æ°ä½¿ã£ã¦æ¸ããããªããã©ããããããªãã¦sendã使ããªãæ¸ãæ¹ããã
- watcherã®ã¹ã³ã¼ãã«ã¤ãã¦
- forã®ä¸ã§$wã¨ããwatcherãä½ããforã®å¤ã§recvãããã¨ããã¨ãã«ãä½ãããªãã¨forãå®è¡ãããã¿ã¤ãã³ã°ã§$wãæ¶ããããä¸æããããªã
- ã¯ãã¼ã¸ã£ã®å¾ªç°åç
§ã®æ§è³ªã使ã£ã¦ãcallbackã®ä¸ã§$wãåç
§ããã°ããã
- ä¸ã§åç §ããã°ä½ã§ããããã ãã©ãã¤ãã£ãªã ã¨ãã¦ã¯undefããã
- my $w; $w = AnyEvent->timerã¨æ¸ãã¦ãcb => sub { undef $w; }
- ããããã¨å¾ªç°åç §ãèµ·ãã¦æ¶ããªã
- my $w; $wã¨ãããã2ã¤ã«åãã¦ããçç±ã¯ãmy $w = AnyEvent->timerãå®ç¾©ãã¦ããä¸ã§$wãåç §ãããã¨ãã§ããªããã
- è¤æ°åæã«ç«ã¡ä¸ãããå ´åã®ããæ¹
- è¤æ°ã®$cvã->recvã§ã¯åããããªã
- $cv->cb(sub{ my $v = $cv->recv })
- or use Coro::AnyEvent
- malaãããææ¥è©±ãã ããããå²æ
CPANã«ããããå ´å
- AnyEventã使ã£ãã¢ã¸ã¥ã¼ã«ã¯newããã®ã¯ã¤ãã¤ã
- åç´ãªé¢æ°ã§æ¸ããæ¹ããã
- AnyEvent::mDNSãåèã«
- åç´ãªé¢æ°ã§æ¸ããæ¹ããã
- 循ç°åç
§ä½¿ãã¨ã¡ã¢ããªã¼ã¯ããããæ°ãä»ãã
- Scalar::Util::weakenã使ã£ã¦ç¢ºèªãã
- æè¿ã§ããAEã¨ããåå空éã¯å¼æ°ã®åæ°ã¨ãè¦ã¦ãããã®ã§ã³ã³ãã¤ã«æã«ã¨ã©ã¼ãåºã¦ããã¦ãã
質å
- CPANã¢ã¸ã¥ã¼ã«ã«ããã¨ãåå空éã¯ã©ããããããï¼
- AnyEventã®ä¸ã«ç½®ãã¦ããã©ãèªåãã©ãããããããã¡ãã£ã¨èãä¸ãPOEã¨ãã§ã使ããããAnyEventã£ã¦å ¥ããªãã¦ãè¯ããã
åªããã¢ãã³ãªWAFã®ä½ãæ¹ (How to develop modern web application framework) - id:dann
- Angelosã¨ãããã¬ã¼ã ã¯ã¼ã¯ãä½ã£ã¦ã
ã¢ãã³ãªWAFã¨ã¯
- æ¡å¼µæ§ãé«ã
- Plaggerã®ããã«ãã©ã¬ãã«
- ãã¹ã¿ããªãã£
- WSGIã®ããã«ãµã¼ãæ½è±¡å
- ã¦ã¼ã¶ããªãã£
- Railsã®ããã«ãã«ã¹ã¿ãã¯
WAFã®åºæ¬æ§æè¦ç´
- Engine
- requestãåãã¦ãresponseãè¿ãï¼Plackã§ã®ãµã¼ãæ½è±¡åï¼
- Dispatcher
- URLãControlleråã¸ãããã³ã°
- Component Manager
- ã³ã³ããã¼ã©ãªã©ã®ãã¼ã
Plackãæ ã«ããWAFã®ä½ãæ¹ã«ãã¾ãã
- Server Gatewayã®ä½æ
- Plack::Loaderã§çæ
- psgi handler
- request handler
- ãªã¯ã¨ã¹ããåãããDispatcherã§ãã£ã¹ããã
- Dispatcher
- HTTP::Routerã§ãªã¯ã¨ã¹ãã«ãããããrouteãåå¾
- dispatchãçæ
- Dispatch
- Component Managerããã³ã³ããã¼ã©ãæ¤ç´¢ããactionã«æ¸¡ã
- ã·ã³ãã«ãªWAFã¯2-3æéããã°ä½ãã
æ¡å¼µé¨åã«ã¤ãã¦ï¼æ¡å¼µæ§ï¼
- ããã¹ã姿
- ã³ã¢ã¯å°ãã
- æ¡å¼µç®æãéå®
- Contoroller,View,Middleware,Request,Response
- Hookãã¤ã³ããæ示çã«
- ãã©ã°ã¤ã³ã®ç¨®é¡ã¯å¤§ããåãã¦2ã¤
- ã©ã¤ã¹ãµã¤ã¯ã«ã®Hookç³»
- Mouseã®Role + method modifier
- Class::Trigger
- MouseX::Object::Pluggable
- ã¡ã½ããçããç³»
- Mouseã®Role
- Exporter
- å¤éç¶æ¿
- ã©ã¤ã¹ãµã¤ã¯ã«ã®Hookç³»
- ãã©ã°ã¤ã³ã®ä½ãæ¹
- PluginãRoleã«
- Roleã¯Controllerã«withãããã¨ã§ä½¿ã
- HooKãã¤ã³ããæ示(è¦ç´)
- 大æåã§ACTION
- ãã©ã°ã¤ã³ã®ã³ã¼ãã¯before 'ACTION'ã¨after 'ACTION'
- é©åãªããã©ã«ãã»ããã®æä¾ããã
- ãªãã¨utf8flagãã©ãã®ã¨ãããããã®èããªãã¦ã¯ãããªã
- PluginãRoleã«
- ã¾ã¨ã
- WAFä½ãããã¤ã¦ãªãã»ã©ç°¡åã«ãªã£ã¦ã
CPAN::Packager - ã²ãã¤ã¥ã id:dann
- CPANã¢ã¸ã¥ã¼ã«ã®ä¾åé¢ä¿ãåèµ·çã«è§£æ±ºãã¦èªåã§RPM/Debããã±ã¼ã¸ã«ãã¦ãããã¢ã¸ã¥ã¼ã«
- ã¢ããã¼ã¸ã§ã³
æ¢åãã¼ã«ã®èª²é¡
- ä¾åé¢ä¿ã解決ãã¦ãããªã
- CPANPLUS::Dist::{Deb,RPM}
- ä¾åé¢ä¿ã®è§£æ±ºã1段é
ãã¼ã«ãæºããã¹ãè¦ä»¶
- ä¾åé¢ä¿ãåèµ·çã«è§£æ±º
- æåã§æ¢åã¢ã¸ã¥ã¼ã«ã®Fixãå¯è½
- å ¥ããããªãã¢ã¸ã¥ã¼ã«ã¯å ¥ããªãããã«è¨å®ãããªã©
- CPAN::Packagerã¯ä¸è¨ãæºããã¦ã
CPAN::Packager使ãæ¹
- ãªãã·ã§ã³--builderã§RPMãªã©ã®æå®ãconfã§è¨å®
- è¨å®ãã¡ã¤ã«ã§ä¾åé¢ä¿ãæåã§ã®æ¡ä»¶ãæ¸ã
- globalã§ã¢ã¸ã¥ã¼ã«å ±éã®å ¨ä½è¨å®ãã¨modulesã§ã¢ã¸ã¥ã¼ã«æ¯ã®è¨å®
- è¨å®ãã¡ã¤ã«ã§ä¾åé¢ä¿ãæåã§ã®æ¡ä»¶ãæ¸ã
質å
- å¤ããã¼ã¸ã§ã³ã®ã¢ã¸ã¥ã¼ã«ãæ®ãããå ´åã¯ï¼
- cpanminiã§mirrorããªãããã«ããããæåã§skipãã¦ãã«ãããã
- local::libã«æ¯ã¹ã¦ã¡ãªããã¯ï¼
- pure perlã ã¨ãããã©ãã¢ã¼ããã¯ãã£ä¾åãé¢ãã£ã¦ããã®ã§RPMã§ç®¡çããã°ã·ã³ãã«ãªããããªãããªã¨æã
- 使ã£ã¦ãã®ã ãã©ãconfigãçµæ§ããã©ããã
- configã®ãµã³ãã«ãããã®ã§ããè¦ãã¨ããç¨åº¦ããããããããªã¨æã
- buildããæã«testã¯ãã¦ãªãï¼
- RPMçã¯ããããã¢ã¼ãããããããã¹ããã¦ã¤ã³ã¹ãã¼ã«ãã¦ã¨ããã®ãããè¿ããªãã¨ãããªãã®ã§å¦çã大å¤
- CPAN::Packagerèªä½ãä¾åé¢ä¿ã§ãã
- ç¬ãCPANPLUSã®ä¾åé¢ä¿ãå¤ãããããwelcome
- CPANPLUSã®ä¾åé¢ä¿ã¯githubã«extlibç½®ãã®ãããããããªãããªï¼
Key Value Store with O/R Mapper - Kazuhiro Osawa (id:yappo)
- KVSã¨ORMãçµã¿åãã
Data::Modelã£ã¦ä½ï¼
- ORM
- Data::ObjectDriverã®ãããªãã®
- webã¢ããªã±ã¼ã·ã§ã³ä¸ã§ã¯ORMã¯KVSã ããããç¨ã«
ã¹ãã¼ãå®ç¾©
- use Data::Model:Scema;ã§DSLãã¤ã³ã¹ãã¼ã«
- install_model user => schema {} ã§userãã¼ãã«ãä½ãã
- key 'user_id'ã§primary keyãæå®
- column qw/ /ã§ã«ã©ã ãè¨å®
使ãæ¹
- ãã£ãå®ç¾©ããã¹ãã¼ããuseãã¦newãã¦ã¢ãã«ã®ã¤ã³ã¹ã¿ã³ã¹ä½æ
- $model = UserSchema->new;
- ã¢ãã«ã®ã¡ã½ããã§ããset_base_driverã®DBIä¸ã§DBIãnewããã¨ãã®å¾ã¯lookupãªã©ã§ãã¼ã¿ãåã£ã¦æ¥ãã
- $model->set_base_driver();
åºç¤ç¥è
- ãã¼ã¿ã½ã¼ã¹ã¯DBI,Memcached Protocol, Perl Hash, Perl Code, Gearman(äºå®)
- ãã¼ã¿ã½ã¼ã¹ãRDB以å¤ãäºå®ãã¦ããã®ã§Data::*ã¨ããåå空é
- Q4Mã«ãã£ãã£ã対å¿
- mixin
- ééãã£ãã·ã¥
- ãã¦ãã¤ãã¬ã¼ã¿
- model('User')->get('user')ã§åãåã£ããã®ã<>ã§ã¤ãã¬ã¼ã
- 1ãã¼ãã«/1ã¯ã©ã¹ã§ã¯ãªãã¦1DB/1ã¯ã©ã¹ or 1ã¤ã®ãã¼ã¿ã®ã¾ã¨ã¾ã/1ã¯ã©ã¹
- install_model(ãã¼ãã«å®ç¾©)æ¯ã«Driverãå¤æ´ã§ãã
ãªãä»ã®ã¢ã¸ã¥ã¼ã«ãé¸ã°ãªãã£ãã®ï¼
- çµè«ããè¨ãã¨æºè¶³ããç©ãèªåã§ä½ãæ¹ãéãã£ã
- 使ããã¨ããã¢ã¸ã¥ã¼ã«ã®é¸å®åºæº
- webã¢ããªã¯indexå¼µã£ã¦ããkeyãåºæºã«ã²ã£ã±ã£ã¦ãã
- JOINã¯èæ
®ããªã
- ãã¼ãã«ãè¤æ°ã®DBãµã¼ãã¸åæ£ããæã«é¢å
- Schemaå®ç¾©ã§æ¥½ããã
- DB以å¤ã®ãã¼ã¿ã½ã¼ã¹ãæ±ããã
- KVS風ãªç©
- ä»ã¢ã¸ã¥ã¼ã«
- Class::DBIã¯å®ç¸¾ã¯ãããå¤ã
- DBIx::CLassã¯æ使ã£ããã©ã¦ãã§é¸ã°ãªãã£ã
- Roseã¯è¦ãæãªãJifty::DBIã¯Jiftyã§ãªãã¨æ¨å³ãªããã
- DSLå¨ãã¯åèã«ãã
- Fey::ORM
- use Moose使ã£ã¦ãã®ã¯â¦
- DBIx::MoCo
- ããã¥ã¡ã³ãå°ãªã
- infrateå¨ãã¯åèã«ãã
- Data::ObjectDriver
- æ¬å½ã¯ããã使ãããã£ã
- ã°ã°ã£ã¦ãå ¨ç¶æ¥æ¬èªæ å ±ãªãã¦è¾ã
- SixApartãæ³å®ãã使ãæ¹ä»¥å¤ã ã¨ã©ããªããããããªã
- DBIx::Skinny
- ä¸å¹´åã¯ãã°å¤ããã ã£ã
- ä»ã¯ããã§ããªããããã®ã§æ¬¡ã®ã»ãã·ã§ã³ã§èãã¦ã¿ã¦
ORMãä½ããã¤ã³ã
- 大ä½ä»¥ä¸ã®5ã³ã³ãã¼ãã³ããããã°ãã
使ãæ¹
- lookup
- memcacheã®ã¤ã³ã¿ãã§ã¼ã¹ã«åããã¦ã
- insert
- kvsãªã®ã§setã«ãã
- column sugar
- ãã®ãããªäººã«ãããã
- column_sugarãå®ç¾©ããã¨ãããå©ç¨ã§ãã
- ããã¾ãªãããã ãã©ãéçºä¸ã«ã¹ãã¼ãå¤ãã¾ãã£ãæã¨ã便å©
- alias_colum
- ãã¤ããªãã¼ã¿ãDBã«æ ¼ç´ããã«ã©ã ãããæã«ãã«ã©ã ã«ã¨ã¤ãªã¢ã¹ãå¼µããã¨ã§æååå½¢å¼ã¨ãã¤ããªå½¢å¼ã®ä¸¡æ¹ã®å½¢ãå©ç¨ã§ãã
- CREATE TABLE
- auto incrementã®æµåã®éããªã©ãå¸å
- ééãã£ãã·ã¥
- ãã£ãã·ã¥ããªããã°DBã«ã¢ã¯ã»ã¹
- mysql master slave
- slaveãä¸ã¤ããè¨å®ã§ããªãããLBã§ãããã®ã§ããã§ãã
- add methodã§ã¡ã½ãããçããã
- mixin
- DBICã®ResultSetæ¡å¼µçãªãã¨
- Q4M
- queue_running
- transaction
- tx_scope, rollback, commit
å§ç¸®
- è¨ããããã¨ã¯å¤§ä½ããã°ã«æ¸ãã¦ãã
- å§ç¸®ãå¿
è¦ãªçç±
- æ±ããã¼ã¿æãå¤ããªãã¨ãå§ç¸®ã®CPUã³ã¹ããããioã®è² è·ãå¤ããªã
- ãããããµã¤ãºå°ãªããã°ãã£ãã·ã¥ã«ããããã®ããããã
- ã©ãããï¼
- Storableã¯é度éããã©ã·ãªã¢ã©ã¤ãºã®ç©ºéå¹çæªã
- id:viverä½ã®messagepackãæ¡ç¨
- å®éã¯perlãã¤ã³ãã£ã³ã°ã®Data::MessagePack
- messagepack
- é«éã§ãã¤ã¡ã¢ãªå¹çã®è¯ãã·ãªã¢ã©ã¤ãº
- Data::Modelã®æ¦ç¥
- ã«ã©ã åã¯æ°å¤ã«å¤æ
- primary keyã¯valueã«å«ããªã
- ãã¼ãã«åãçãååã«å¤æ
- memcacheã«æããæã«teblename:keyã¨ããå½¢ã§æããã®ã§
å©ç¹
- SQLããkvsã®æ¹ãéã
- ã«ã©ã ã®è¿½å ãèªç±ãALTER TABLEãªãããããªã
- ã·ãªã¢ã©ã¤ãºãããããã·ã¥ãªãã¸ã§ã¯ããªã®ã§
DBIx::Skinny -simple OR mapper - ã¢ãã¤ã«ãã¡ã¯ããªã¼ id:nekokak
ã©ããã¦ä½ã£ãã
- DBICã¯ä¾¿å©ã ãã©ããã£ã¨Liteã«ããã£ã¨æè»ã«
DBICã®åé¡ç¹
- è¤éãªPerlã®ãã¼ã¿æ§é ããã¨ã«è¤éãªSQLã¯çµã¿ç«ã¦å¯è½
- DBIãç´æ¥å©ããå ´å
- inflateãã¦ãããªã
- utf8flagãªããããã便å©æ©è½ã使ããªããªã
- è¨å®ãDBICæããã¦ããã®ã§ãããä¸æã使ããªãããªï¼
- éã
- 1ã¤ã®ãªãã¸ã§ã¯ãã大éã®ãªãã¸ã§ã¯ãã§æ§æããã¦ãã
- ãªãã¸ã§ã¯ãã®çæã³ã¹ããã§ãã
- ãªãã¸ã§ã¯ãçæã«æéãããããããHotSpotã§ã¯DBICãå¤ããã¨ã
- 1ã¤ã®ãªãã¸ã§ã¯ãã大éã®ãªãã¸ã§ã¯ãã§æ§æããã¦ãã
- ãããã°ãã«ãã
- Dumpããã¨ã©ãã¾ã§ç¶ããã ããã£ã¦ããããã©ãã©ã¨åºã¦ãã
- ã»ãã¨ã«ãããã¨ããããã¾ãã
- Dumpããã¨ã©ãã¾ã§ç¶ããã ããã£ã¦ããããã©ãã©ã¨åºã¦ãã
DBICã®ç´ æ´ãããé¨å
- æ
£ããã°ç°¡åã«è²ããªãã¨ãã§ãã¦éçºå¹çããã
- resultsetã使ã£ãã¡ã³ã¿ã«ãªsearchãããªã便å©
- Pluginãè±å¯
- æåãªPerlHackerãã¡ã³ããã³ã¹ãã¦ãã®ã§å®å¿
çµå±ã®ã¨ãããªãã§DBICã«ããªãã£ããï¼ã©ããã¦DBIx::Skinnyä½ã£ããï¼
- ä¸æºã®é¨åãã©ãã«ããããã£ã
- å¨ãã¨è©±ãããã¨åããã¨ãæã£ã¦ã人ãå¤ãã£ã
- ä»ã«ãã¢ã¸ã¥ã¼ã«ãã£ããã©ãçã®SQLãããæãã«ãã¦ãããã®ããªãã£ã
è¨è¨æ¹é
- çSQLã®Rãã§ãã¦ãinflate,utf8flagå¨ããå¦çã§ããã°ãã
- Rã«ã¤ãã¦ã¯ããã°ã©ããã«ã«
- DBICã®resultsetã¿ãããªã¤ã³ã¯ãªã¡ã³ã¿ã«ãªsearch
- Rã«ã¤ãã¦ã¯ããã°ã©ããã«ã«
- inseart,update,deleteã«ã¤ãã¦ã¯DBICã¿ããã«
- pre_hookã¯æ¬²ãã
- æ¤ç´¢çµæãã«ã¼ã«ãã¼ã¹ã§ãªãã¸ã§ã¯ãã«ãããã³ã°
- ãããã°ããããããã«ãªãã¸ã§ã¯ãã«åãã¾ãããªã
- printãããã°ä¸æ³
ã«ã¼ã«ãã¼ã¹ã£ã¦ï¼
- åå¾ãããã¼ã¿ããªãã¸ã§ã¯ãã«ããéãç¹å®ã®ã«ã©ã ã«ã¤ãã¦ã¯utf8,inflateã®å¦çãå¿ è¦
- è¨å®ããã«ã¼ã«ã«ãããããã«ã©ã å
¨ã¦ã«å¯¾ãã¦å¦ç
- ããã®ã«ã©ã åã®å ´åã¯ãããããã£ã¦æ±ºãã§ååã ã¨æã£ãã®ã§ã
使ãæ¹
- setupã¡ã½ããã§dsn,usename,passwordã®è¨å®ããããããpackage Your::Model;ã¨ãã
- install_tableã¡ã½ããã§schemaè¨å®
- install_utf8_columnsã¡ã½ããã§utf8ã®ã«ã©ã
- install_inflate_urlã¡ã½ããã§inflate,deflateã®è¨å®
- æ£è¦è¡¨ç¾ã使ãã
- search_by_sqlã§SQLã使ãã
- search_name
- search_by_sqlã®æ¡å¼µç
- ãã¤ã³ãã®é çªãééãã¨ãã¬ã¼ã¹ãã«ãé¨åã§ãã¹ãã®ã§ã
- ããã·ã¥ã§ååã§æ¸¡ã:idãªã{id => ãªãã¨ã}ã¿ãããªæãã§æ¸¡ãã
- ã¯ã©ã¹ãã¼ã¹orã¤ã³ã¹ã¿ã³ã¹ãã¼ã¹
- ã¯ã©ã¹ããç´æ¥å¼ã³åºããã¨ããã¤ã³ã¹ã¿ã³ã¹çæãã¦ãè¯ã
- ç¹ãã£ã±ãªãã¯å«ã ã£ã¦æã¯newãã¦ã¤ã³ã¹ã¿ã³ã¹ä½æãã¦ã¨ã
- ãã¤ã³ã¹ã¿ã³ã¹ãä½ã£ã¦ã³ãã¯ã·ã§ã³ç®¡çããã¾ã§ããªããªãã¨ããå ´åã¯ã¯ã©ã¹ããç´æ¥
- ã¯ã©ã¹ããç´æ¥å¼ã³åºããã¨ããã¤ã³ã¹ã¿ã³ã¹çæãã¦ãè¯ã
- DBIx::Skinny::Manual::*ã«æ¥æ¬èªããã¥ã¢ã«
relationshipã«ã¤ãã¦
- ãã¼ãã«éã®ãªã¬ã¼ã·ã§ã³ã¯ç¹ã«ä½ããã¦ãªã
- DBICã®ãããªhas_many/belongs_toã¯ãªã
- ããã¨ä¾¿å©ã ããããã¨ä½¿ã£ã¡ãããã©ããããåé¡ã«ãªã
- è£å´ã§ã¯ããããã¯ã¨ãªçºè¡ããã¦ããå¯è½æ§ããã
ã©ããã¼
- Skinnyã¯ãªãã¹ãå°ããè¨è¨ãã¦ãã
- æ¡å¼µé¨åã¯ã©ãããæ¸ããã¨ãããã
- nekoyaãããDBIx::Skinny::ARãä½ã£ã¦ã
- æ¡å¼µé¨åã¯ã©ãããæ¸ããã¨ãããã
- ã³ã¢é¨åã§å¯¾å¿ããé¨åã¯å¯¾å¿ããã®æè¦åé
Skinnyã®è¯ã
- çSQLæ±ãããã
- Skinnyãä½ããªãã¸ã§ã¯ãã¯å°ããã®ã§ã¢ããªå´ã§ãããã°ãããã
- DBICããéã
- æ©è½å°ãªãããå½ããåããªã®ã§ãã³ããã¼ã¯ã¯ããã¦åããªã
ã¾ã¨ã
- CPANã«ããã®ã§ä½¿ã£ã¦ã¿ã¦
- githubã«ç½®ãã¦ãã
Corporate Perl in Recruit, OpenSocial and Emoji - id:iandeth, id:kawanet
- 2人ã§ãªã¯ã«ã¼ãã®ãã¨ã¨ãçµµæåã®ãã¨ã«ã¤ãã¦çºè¡¨
ï¼ã¾ãã¯ããã°ããããããªã¯ã«ã¼ãã«ã¤ãã¦ï¼
- Recruit Web Service
- çµæ§ãªéãã
- ã³ã³ãã³ãã®åå©ç¨ãé£ããã¨ããåé¡ç¹ããã£ã
- ã·ã¹ãã ãåå©ç¨ç®çã§ã¯ãªã
- ã³ã¹ããé«ã
æ¹åã«2å¹´åã«çæ
社å ã®äºä¾
- ã¨ã¤ãã¼ãã¼ããã±ã¤ã³ã¨ããã
- SEOçã«ãã
- 社å ã§ã®æ¡ç¨çç±
社å¤ã®äºä¾
- å°çã®æ©ãæ¹ã¯JSONPã§APIãå¼ã³åºãã¦ã
- ä½ã³ã¹ãã§ã¨ãããã試ãã¦ã¿ããã¨ãå¯è½
æ§æ
Perlã«ã¤ãã¦
- ModPerl::RegistryPrefork
ã¢ã¸ã£ã¤ã«éçº
- ãã¹ããæ¸ã
- å½¹å²åæ
ãããªãã§ã¿ããªã§ãã
- ãããçµæ§å¹æç
ä»å¾
- 10æã«iPhoneã®ããããããã¼ï¼FooMooï¼ã¢ããªãæ°ãããªãã
- å»å¹´åºãããã¤ã¯Safariï¼JavaScriptã ã£ããã©ã¬ã¹ãã³ã¹é éããã®ã§Objective-Cã§ä½ãç´ã
ï¼æ¬¡ã«ããããããã®çºè¡¨ï¼
- åå¤ç¥ã«ãã£ãLiveSliesã¯æéããªãã®ã§å°å°
Emoji
- åããã¼ãã§ãsjisãutfãæåã³ã¼ããéã
- googleãç¬èªã®ãåºãã¦æ¥ã
- emoji4unicodeã§ãµãã¼ã
- googleãç¬èªã®ãåºãã¦æ¥ã
- Unicode::Emoji::E4Um
- googleã®emoji4uicodeããã¸ã§ã¯ãã«å¯¾å¿
- Encode::JP::Emoji
- åãã£ãªã¢ã®çµµæåã®ããããæã£ã¦ã
- çµµæåãåå¨ããªãå ´åã¯ããã¹ãã§è¿ã
- pure perl
- ã¬ã³ã¿ã«ãµã¼ãã§ãåã
å é¨å¦ç
- å
é¨çã«ã¯cp932ã«ä¸åå¤æãã¦tr//çã§ç½®æããä»çµã¿
- utf8flagãç«ã£ã¦ãtrã ã¨3åãããé ããã©id:dankogaiãä»æ¹ãªãã¨è¨ã£ã¦ãã®ã§ä»æ¹ãªã
ä¾
- ãããã®ä¾
注æç¹
- googleã®utfã¯4ãã¤ãããã®ã§MySQL5ã«æ ¼ç´ã§ããªã
ï¼è©±å¤ãã£ã¦ï¼CREYLEã«ã¤ãã¦
- http://creyle.jp/
- FastCGI + HTTP::Engine
- OpenSocial対å¿
- osapiï¼é称ï¼ãªãµãã¼ï¼ã«å¯¾å¿ãã¦ãã
- newIdSpecä¸è¦ã§ç°¡æ½ã«æ¸ãã
ä»å¹´ãMA5ããã
- ä»æ¥ããåé
LT
Moose Hacking Guide - id:gfx
- Mooseã®ã½ã¼ã¹ã³ã¼ãã§ãèªãã§ã¿ãã
- ã¢ã¸ã¥ã¼ã«å¤éãã¦èªããªã
- ã«ãã´ãªåã
- Mooseã¨Moose::Role
- Moose::Util
- Moose::Error
- Moose::Object
- Moose::Exporter
- ããã¾ããã§ãã
- Moose::Meta::*
- å®éã®ã³ã¢ã®åã
- Moose::Meta::Instance
- MOPã®ã¤ã³ã¹ã¿ã³ã¹ã¨åã
- Moose::Meta::Class
- ã¯ã©ã¹ã管çããã¯ã©ã¹
- Moose::Meta::Attribute
- hasãªã©
- Moose::Meta::Method
- ã³ã¼ããªãã¡ã¬ã³ã¹ã®æ±ããããã©ãã
- Moose::Meta::Role
- ãã¼ã«ã®çºã®ã¯ã©ã¹
- Moose::Meta::TypeConstraints
- TCãªãã¸ã§ã¯ããå®è£
- ã½ã¼ã¹ã³ã¼ããèªãã«ã¯NYTProf使ãã°ãã
- ããã½ã¼ã¹ã³ã¼ããã¥ã¼ã¢
- ã¢ã¸ã¥ã¼ã«ã¯ãããããããã©10種é¡ãããã«åãããã
Perlã§salefsforce - fujiwara è¤å ä¿ä¸é
- Salesforceã¨ã¯
- perlã§ã©ã使ãã
- WWW::Salesforce
- kvsã§ãªãSQLã«ä¼¼ãSOQLã¨ããè¨èªã§åãåãã
- APIåæ°å¶éã¨é度ããã
- ãªã®ã§æ¥ç¶ç¢ºèªã¯ããªãæ¹ããã
- upsertã使ã
- updateã¨insertã両æ¹ä¸çºã§ã§ãã
- ã¢ã¡ãªã«ã«ããã®ã§ãã¾ã«ç¹ãããªã
- æ´æ°ç³»ã¯job queueã§ãã£ãæ¹ããã
Webã¢ããªã±ã¼ã·ã§ã³ãã¬ã¼ã ã¯ã¼ã¯Mojoã®ç´¹ä» - æ¨æ¬è£ç´(id:perlcodesample)
- ãµã³ãã«ã³ã¼ãã«ããPerlå ¥éã®ãµã¤ãã®äºº
- Mojoã¨ã¯
- ãã¼ã¿ãã«ãªWebã¢ããªã±ã¼ã·ã§ã³ãã¬ã¼ã ã¯ã¼ã¯
- ãªã¼ã«ã¤ã³ã¯ã³
- éçºè ã¯Catalystã®Sebastian Riedelæ°
- ãã¼ã¿ãã«ãª
- Perl5.8.1ãã¤ã³ã¹ãã¼ã«ããã¦ããã°OK
- ã¢ãããã¼ãããã°åã
- CGI,FastCGIã§åã
- ãªã¼ã«ã¤ã³ã¯ã³
- Catalystã¨ãããªããããªã®ãåãã¦ã
- Mojoã®å©ç¹
- æ°è»½ã§ä¾¿å©ã«æ±ããWAFããªãã£ã
Test::TCP - id:tokuhirom
- Testã¯ãããã®ã ãã©ããã©ããªãã®ããã
- TCPãµã¼ãã®CPANã¢ã¸ã¥ã¼ã«ã®ãã¹ããã©ãããï¼
- forkãã¦ãã¹ãâã§ããã¹ãã®é çªããã©ãã©ã«ãªã£ã¦ãã¡
- TCPãµã¼ãã®CPANã¢ã¸ã¥ã¼ã«ã®ãã¹ããã©ãããï¼
- ããã§Test::SharedFork
- 親åããã»ã¹ãå¹³è¡ã«åãã¦ããæã
- TCPãã¼ãããã¼ãã³ã¼ãã£ã³ã°ãã¦ããCPANã¢ã¸ã¥ã¼ã«ã ã¨ããã
- Test::TCP::empty_port()使ãã°ãã
im.kayac.comã®ç´¹ä» - Daisuke Murase(id:typester)
miyagawanize - ãã¼ããã¹ã¼(id:kamawada)
- purple thingã«ã¤ãã¦
- CPANã®ç´«è²ã®ã¢ã¬
- purple thingãç»åã«ä»ããscriptãä½æ
- OpenCVã®é¡èªèã§ç´«è²ã®ãã®ãä»ãã
- å®ä¾
- ãªãããããã
- ï¼ãyes, we can!ãã§å¤§çãä¸ããï¼
- ã¢ã¼å¨ã®ãããªéååçã§ãããã
- ã®ã¼ã¯ãããªãã®ãã´ããã ããããªã
- ãªãããããã
nginxãlighttpdã§MogileFSãã¦ã¿ã - id:kamipo
- MogileFSã¨ã¯
- åæ£ãã¡ã¤ã«ã¹ãã¬ã¼ã¸
- è¤æ°ã®ãã¼ãã«åæ£ãã¦ä¿å
- ä¿åï¼åç
§ã¯å°ç¨ã®ãã¼ã
- ä»åã¯åç §ã®è©±
- mod_perlã§è¿ãã¨ã§ããç»åãè¿ããã¨ããã¨ä¸ã¤ã®ããã»ã¹ãéããªã
- perlbal使ã
- ãã ä»æã¯mod_perlãããªãã¦FastCGI
- perlbalã¯X-REPROXY-URLãããããã¨ã§ãããã«ããä¸åº¦ã¢ã¯ã»ã¹ãã
- ãã ããã£ã¦ã¿ãçµæã¯å¤±æã§ãã
- perlbalã¯ã¡ããã¨ãã£ãã·ã¥ãã¦ãããã®ã«å¯¾ãã¦ã
- ngixã¯ãã£ãã·ã¥ãã¦ãããªã
- lightã¯ã¡ããã¨è¿ãã¦ããããªã
- perlbalã¯ã¡ããã¨ãã£ãã·ã¥ãã¦ãããã®ã«å¯¾ãã¦ã
Server::Starter - kazuho oku(id:kazuhooku)
- ããããããã¤ã®è©±
- ãµã¼ãããªã¹ã¿ã¼ããããã¨ãªããã¼ã¸ã§ã³ã¢ãããã
- Server::Starter
- SIGHUPããã¨æ°ããã¢ããªãfork&execãããã¾ãããã°å¤ããã¤ã¯æ¶ã
- æ°ããã¢ããªã®ã³ã³ãã¤ã«ã失æãã¦ãå¤ãããã»ã¹ãçãã¦ããã®ã§åé¡ãªã
- SIGHUPããã¨æ°ããã¢ããªãfork&execãããã¾ãããã°å¤ããã¤ã¯æ¶ã
- deamontoolsã¨çµã¿åãããã¨ãã
Yuval Kogman(nothingmuch)
- ironmanããã¸ã§ã¯ãã«åå
- ä»åã¯dieã®è©±
- dieã®catchã¯evalã§ãããeval is EVIL
- $@ = ""ã¨ãªã£ã¦catchã§ããªãæããã
- local $@ã使ã£ã¦ãåé¡ãã
- $@ = ""ã¨ãªã£ã¦catchã§ããªãæããã
- è²ã
解決ãããã¨ãã¦ãåé¡ãåºã¦æ¥ã¦ã解決æ³ã®è§£æ±ºæ³ãã©ãã©ãã§ã¦ããã®ã§ã
- Try::Tinyãããã