#activitystrea.ms
Explore tagged Tumblr posts
Text
ããã¹ããã³ãæ¯ããæè¡ãããœãŒã·ã£ã«ãŠã§ãããæ¢ãïŒåŸç·šïŒ ãMastodon Tech Night#1æœå
¥ã¬ããŒãã
from https://html5experts.jp/yusuke-naka/23094/
ä»åã®èšäºã¯åŸç·šã§ããåç·šã¯ãã¡ã
ä»åã¯ããšã³ãžãã¢åããã¥ãŒã¹ã¢ããªTechFeedã®éå¶ãåœã¡ãã£ã¢ã®ç·šéé·ãåããçœç³ä¿å¹³ãããäž»å¬ãããMastodon Tech Night#1ã«æœå
¥ããŠããŸããïŒäŒå Žã¯æ ªåŒäŒç€Ÿãªããã¡ãã£ã¢ããïŒãäž»å¬ã®çœç³ãããšããœãŒã·ã£ã«ãŠã§ãã«è©³ããåœã¡ãã£ã¢ã®ãšãã¹ããŒãã§ãããããŒããããäºäººãã¡ã€ã³ã¹ããŒã«ãŒãšããŠé²è¡ããïŒåã®æ¹ã®ã©ã€ããã³ã°ããŒã¯ã§ç· ãããããšããå
容ã§ããã
ããã¹ããã³ãæ¯ããæè¡ããœãŒã·ã£ã«ãŠã§ãããæ¢ãããšããå¯é¡ãä»ããããåœã€ãã³ãããšã³ãžãã¢ïŒç¹ã«SNSããœãŒã·ã£ã«ã¢ããªéçºè
ïŒã§ããã°åæ¶ã®ãæ¿ããå
容ã§ãããã§ã¯çæ§ã楜ãã¿ãã ããã
æ¬ã€ãã³ãã®äŒå Žãšãªã£ãæ ªåŒäŒç€Ÿãªããã¡ãã£ã¢ãã
ä»åã®é²è¡çšã¹ã©ã€ãã¯ãã¡ãã§ãã
ä»åã®èšäºã¯åŸç·šã§ããåç·šã¯ãã¡ã
ãœãŒã·ã£ã«ãŠã§ãã®ãããã³ã«ãæ¢ã
çœç³ ã§ã¯æ¬¡ã«ããã¹ããã³ããšããããœãŒã·ã£ã«ãŠã§ããæ§æãããããã³ã«ã®ã話ã«å
¥ããŸããããã
Mastodonãæ§æããïŒã€ã®ã¬ã€ã€ãŒïŒåæ²ïŒ
ããŒã OpenIDã«ã€ããŠã¯å
ã»ã©èª¬æããã®ã§ã次ã¯ãã¯ãOAuthã§ããã
ãµãŒãã¹ããŸããã§æ
å ±ã®ããåããè¡ããããšããããŒãºã«çããããã«ã¯ãå€éšãµãŒãã¹ã®APIåŒã³åºããå®å
šã«è¡ããå¿
èŠããããŸãããŸãããŠãŒã¶ãŒãèªåã«é¢ããæ
å ±ï¿œï¿œã©ã®ãµãŒãã¹ã«ãã©ããŸã§å
¬éããããšèšã£ãã¢ã¯ã»ã¹æš©ãèšå®ããããšããããŒãºãåºãŠããŸãã ããã§ç»å Žããã®ãOAuthã§ããOAuthã¯ãTwitterã¯ã©ã€ã¢ã³ããäœããããšãã人ãã¡ã®éã§æ¥éã«æ®åããŸãããã
OAuthã¯ããäžè¬çãªã®ã§ãä»ã¯ãããããªããšãæèããã«ãã¿ãªããå©çšããŠããŸããããFacebookã§ãã°ã€ã³ããTwitterã§ãã°ã€ã³ããšèšã£ãæ©èœãæã€ãµã€ãã¯ãã¿ããªOAuthãå©çšããŠããŸãã
çœç³ ããã§ãããæåæã®é ãTwitterã®APIã£ãŠBasicèªèšŒã ã£ãã®ã§ãã¿ããªãTwitterã®ãã¹ã¯ãŒããå€éšã®ãµãŒãã¹ã«å
¥åããŠãããšãã(ç¬) ç§æçãªæä»£ã§ãããã
ããŒã ããã§ãã(ç¬)
ã§ã¯æ¬¡ã«ç޹ä»ãããã®ã¯WebFingerãšããæè¡ã§ãã ãã®æè¡ã¯ã端çã«ãããšããŠãŒã¶ãŒIDãåããã°ããã®ãŠãŒã¶ãŒã«çŽä»ããããã£ãŒã«ããŒãžãWeb APIãªã©ã®äžèЧãååŸã§ãããšãããã®ã§ãã ã(API)ãã£ã¹ã«ããªãã®æè¡ãšèšããŸããã
äŸãã°ã以äžã®URLã«ã¢ã¯ã»ã¹ããŠã¿ãŠäžããã
https://don.techfeed.io/.well-known/[email protected]
â» resource=ããåŸã«ã¯èªåã®IDãå
¥åããŠäžããããã¡ã€ã³ã¯ã€ã³ã¹ã¿ã³ã¹ã«åãããŠå€ããŠäžãã
ããŒã çµæã¯JSONã§è¿ã£ãŠããŸãããè²ã
ãšæ
å ±ãããã«è©°ã蟌ãŸããŠããŸãã
â»ããã«è¡šç€ºããŠããã®ã¯çè
ã®ã¢ã«ãŠã³ãæ
å ±ã§ã
linksã®äžèº«ãåç
§ãããšãAPIã®ãšã³ããã€ã³ãURLããAPIã®çš®å¥ãªã©ã®æ
å ±ãè©°ã蟌ãŸããŠããŸãã ãŠãŒã¶ãŒIDãããããã°ããµãŒãã¹äžã§ãã®ãŠãŒã¶ãŒã«é¢ããæ
å ±ã«ã¢ã¯ã»ã¹ããããã®æ§ã
ãªãšã³ããã€ã³ããåãã£ã¡ãããã§ããããããWebFingerã§ãã
â»çè
泚: WebFingerã¯ãæ§ã
ãªãã¹ãããã¹ãäžã®ãŠãŒã¶ãŒã®æ
å ±ãååŸã§ããFingerã³ãã³ãã«ãªããããŠåœåããããšæãããã
links.relã®äžã«ãsalmonãostatusãšèšã£ãæååãèŠãé ãããŠããŸããã ãããããœãŒã·ã£ã«ãŠã§ããæ§æãããããã³ã«ã®åç§°ã§ããã
ãã€ã¯ãããã°é¢é£ã®ãããã³ã«ãæ¢ã
çœç³ ã§ã¯æ¬¡ã¯ããã€ã¯ãããã°é¢é£ã®åçš®ãããã³ã«ã®è©±ã«å
¥ããŸããããã 以äžãããã¹ããã³ã®ããã¥ã¡ã³ãããåŒã£åŒµã£ãŠããããããã³ã«ã®äžèЧã§ãã ãã¹ããã³ã®ã³ãŒããæ·±ãç¥ãã«ã¯ãããããœãŒã·ã£ã«ãŠã§ãã®æè¡ã«éããŠããå¿
èŠããããŸãã
ãã¹ããã³ Tech Night#1é²è¡ã¹ã©ã€ããã
çœç³ ããã¯å
çšãŸã§ããŒããããèªã£ãŠãããœãŒã·ã£ã«ãŠã§ãã®äžçããã®å
ã«ãããããªãã§ããã ãããŠè¡ãçããšããã¯ããã¹ããã³ã©ããããæ§ã
ãªSNSãèªåã§ãã£ã¹ã«ããªãŒãæ
å ±é£æºã§ããäžçã ãᅵᅵᅵãªåæ£åSNSã®äžçãå®çŸããããã®æ§æèŠçŽ ããã®ãããã³ã«ãã¡ããšããäœçœ®ã¥ãã§ãã
ãããããŒããããäžã€äžã€ãç°¡åã§ããã®ã§è§£èª¬ããé¡ãããŸãã
AtomãActivityStreamsãAtom Threading
ããŒã ãŸãã¯ãAtomã§ãããããã¯ãåãã®æ¹ã沢山ããã£ããããšæããŸãã
ããã¯RSSãªã©ãšåããããã£ãŒãæ
å ±ãXMLã§è¡šçŸããæè¡ã§ãæ
å ±ãæç³»åã§çºä¿¡ããå Žåã«é©åãªãã©ãŒãããã§ãããšãããŸãã ãµã€ãã®æŽæ°æ
å ±ãçºä¿¡ããã®ã«ãã䜿ãããŠããŸãã
çœç³ Atom Publishing Protocolãšããã®ããããŸãããã Atom圢åŒã§æ
å ±ããã¹ããããã§ããããã«ããæè¡ãã¯ãŠãªãã€ã¢ãªãŒã®APIãšãã¯ãAtomPubã§æ§ç¯ãããŠããã¯ãã§ãã
ããŒã ãã®Atomãæ¡åŒµããŠããµãŒãã¹äžã®ãŠãŒã¶ãŒã¢ã¯ãã£ããã£ã衚ããããã«ãããã®ãActivity Streamsã§ãã Activity Streamsã¯ãJSONçã®ä»æ§ãçšæãããŠããŠãJavaScriptãšãçžæ§ãè¯ãããèšèšãããŠããŸãã
çœç³ ããŸã銎æã¿ã®ãªãæ¹ãå€ããã§ãããSNSäžã®è¡åã®äºãæè¡çã«ã¯ãã¢ã¯ãã£ããã£ãã£ãŠåŒã¶ãã§ãããã Facebookã«ããèªåã®ãããã£ãŒã«ããŒãžã«ãã¢ã¯ãã£ããã£ãã°ãèŠããã£ãŠæ©èœããããŸãã
ããŒã ããããªã®ã§Activity Streamsã¯ãã®ã¢ã¯ãã£ããã£ãã¹ããªãŒã 圢åŒã§åç
§ã§ãã仿§ãšããããšã§ãã äžè¬çãªAtomãæã€æ
å ±ã«å ããŠãåçãåããŸãããšããç©ãè²·ããŸãããšããäœããã®ã¢ã¯ã·ã§ã³ã«çŽä»ããæ
å ±çºä¿¡ãã§ããã®ãActivity Streamsã®ç¹åŸŽã§ãã
çœç³ ã¡ãªã¿ã«ãActivityStreamsãšããã°ãactivitystrea.msãšãããã¡ã€ã³ã ã£ãã®ãèŠããŠãŸãã ãããã颚ã«ååãšãã¡ã€ã³ããã¶ãããã€ãææµè¡ããŸããããã
activitystrea.ms
ããŒã Web2.0ã®æä»£ã«æµè¡ããŸããããŒ(ç¬)
次ã¯Atom Threadingã§ãããããã¯ããŸãç§ã詳ãããªãã§ãã æ³åã§ããã誰ãããã¹ãããæã«ãããã¹ã¬ããåãããã®ãªããããªãããªãšæããŸãïŒâ»ïŒã
â»RFCã«ãããšããAtomå
ã§ã¹ã¬ããç¶ã®ãã£ã¹ã«ãã·ã§ã³ã衚çŸããããã®ã¡ã«ããºã ã§ãããïŒThis memo presents a mechanism that allows feeds publishers to express threaded discussions within the Atom Syndication FormatïŒã ããã§ãã
OStatus
ããŒã 次ã¯ãOStatusã§ãã äŸãã°ã¡ã³ã·ã§ã³ããã©ããŒããªãã©ã€ãšèšã£ãæ©èœãTwitterã«ã¯ãᅵᅵᅵãŸããããããã£ãæ©èœãç°ãªããµãŒãã¹éã§è¡ããããã«ãã仿§ã§ãã
çœç³ ãã£ããã£ãããã«ããã¹ããã³äžã§ @ID@ãã¡ã€ã³ã®åœ¢åŒã§ã¡ã³ã·ã§ã³ãšããè¡ããšãOStatusã®ãããã³ã«ãåäœãããšããããã§ããã
ããŒã ã¯ããããã§ãã
ä»ã®ãŠãŒã¶ãŒã«å¯ŸããŠã¡ã³ã·ã§ã³ãè¡ããšããŸãå
ã»ã©ã話ããWebFingerãåäœããŠãä»ã®ã€ã³ã¹ã¿ã³ã¹ãæã€APIã®ãšã³ããã€ã³ããååŸããŸãã ãã®åŸãå®éã®APIåŒã³åºããè¡ãããŠåŠçãå®è¡ãããããã§ããã
äŸãã°ããã¯ã/api/v1/statusesïŒããã¥ã¡ã³ããžã®ãªã³ã¯ïŒãšããAPIãå©ããŠããããªãã¯ãã¥ãŒãã®æ
å ±ã衚瀺ãããšããã§ãã
â»èšäºã§ã¯é©åœãªãã¥ãŒãã顿ã«ããŠããŸã
ããŒã mentions ã inreply_to çã®ããŒæ
å ±ããããŸããããã¡ã³ã·ã§ã³ããªãã©ã€ããããšããã«æ
å ±ãæ ŒçŽãããŸããããããOStatusãã¯ãããšããæ§ã
ãªä»æ§ã«ãã£ãŠä»äžãããæ
å ±ãªãã§ãã ããããã³ã«ããšèšããããšãªãã ãä»°ã
ãããã®ã®ããã«æããŠããŸããšæããŸãããå®éã«ã¯ããããã·ã³ãã«ãªåŠçãå®çŸ©ããŠããã ããªãã§ããã
Salmon
ããŒã 次ã¯Salmonã§ããSalmonã¯éæµãããšããæå³åãã§äœ¿ãããŠããŸããé®ãªã®ã§å·ãé¡äžããŸããããå¥ã®ã€ã³ã¹ã¿ã³ã¹ã§ã³ã¡ã³ããä»ããå Žåã«ãèªåã®ã€ã³ã¹ã¿ã³ã¹äžã«ãæ»ã£ãŠãããä»çµã¿ãæäŸããŠããŸãã ãŒãããã以äžã®ããšã¯ç¥ããªããã§ãããäœããåç¥ã§ããïŒ
Salmon Protocol
çœç³ ãããŒãç¥ããªãã§ããã ãã ãæèª¿ã¹ãã®ã¯èŠããŠãŸãã2010幎ãããã«ãDaVinciPadã£ãŠãããµãŒãã¹ãäžäººã§äœã£ãŠãããã§ããããã®ãããã³ã«ã䜿ãããã£ããã§ãããã ã¡ã¢ïŒSNSãžã®ãã«ããã¹ãæ©èœããã£ãŠããã®ãã¹ããžã®ãªãã©ã€ãããŒã«äžã§ãã£ããã¢ãããããã£ããã§ããããŸããã ããç¥ããªãããšãªãã§ãã(ç¬)
ããŒã ããŒãDaVinciPadã£ãŠäœã£ãŠãã£ããããŸãããããªã€ãããã
ã¡ãªã¿ã«ãäžã€æžå¿µããŠããããšããããã§ãããSalmonᅵᅵã¯ãããããããããã³ã«ã£ãŠåºæ¬çã«ææ³ãå€ããã§ãããã XMLããŒã¹ã®ä»æ§ãå€ãããšãå«ããä»ã®Webã«æé©åãããŠããªããã§ããç»å Žãã7幎ãçµã£ãŠãããããªã®ã§ã倧éã®ãã©ãã£ãã¯ãæããŠããã«ã¯ã仿§ãã¢ããããŒãããŠããå¿
èŠãããããããªãããªãšèããŠããŸãã
Portable Contacts
ããŒã 次ã¯Portable Contactsã§ãããããã¯Identityã«é¢ä¿ãããã®ã§ãããåéãªã¹ãã亀æããããã«ãã©ãŒããããåãããããã®ä»æ§ã§ãã 確ããGoogleã«ã¯Portable Contactsã®APIããã£ãŠãGmailã®ã¢ãã¬ã¹åž³ã®ããŒã¿ãPortable Contactsã®åœ¢åŒã§ååŸã§ããŸãïŒæ®å¿µãªããçµäºæžã¿ïŒã
çœç³ ãªãã»ã©ããã©ããŒïŒãã©ãã¢ãŒã®ãªã¹ããšããããåãããããã®æ±çšçãªä»æ§ã§ããã SNSãæã€æ§ã
ãªæ©èœã现åãã«ããŠãããããæšæºåãããšããæããåããŸãã
ããŒã ãã®è§£éã¯æ£ãããšæããŸãããæ±çšçã«ãªãããã«ããããŠäžéšã ãã§ãå©çšã§ããããã«ããããŠçްãã仿§ãåããŠãã£ããšããæããããªãã§ããããã äžã€äžã€ã®ä»æ§ã¯å°ããã®ã§ããããŸãšããŠçµã¿åããããšçè·¯æŽç¶ãšããŠããæãã§ãã
çœç³ ãªãã»ã©ãŒãã§ããããããã ããã©ãã©ãªãçå®ããŠããå£äœãäŒæ¥ãæ§ã
ãªä»æ§ããããŸãã€ãªããããšãåºæ¥ãŸãããã åœæããœãŒã·ã£ã«ãŠã§ãã¯ããã ãã®ã ãŒãã¡ã³ãã ã£ããšããããšã§ããã
PubSubHubbubãWebFingerãLink-based Resource Descriptor Discovery
ããŒã 次ã¯ãPubSubHubbubã§ãã PubSubHubbubã¯ãããããªã¢ã«ã¿ã€ã éç¥ã®ä»çµã¿ã§ãããµãã¹ã¯ã©ã€ãããŠãããšããããä»ããŠããã·ã¥åã§ã¡ãã»ãŒãžãéã£ãŠããããã
çœç³ ã¡ãã£ãšè£è¶³ãããšãRSSãªã©ã®ãã£ãŒãã£ãŠãåºæ¬çã«ã¯ããŒãªã³ã°ã§ååŸããŸãã15åã«1åãšãã30åã«1åãšãã ã§ããæŽæ°ããªããŠç©ºæ¯ãããããšãå€ããããããå¹çãæªããšããããšã§ãPubSubHubbubã¯ãµã€ãåŽãããµãã¹ã¯ã©ã€ããŒã«åããŠããã·ã¥ã§æŽæ°ãéç¥ãããšããä»çµã¿ã§ããã
ããªãã ãW3Cãæ¥ã«æšæºåãé²ããŠããWebSubããšèšã仿§ã§Candidate Recommendationã«ããã®ã¯ã³ã£ããããŸãã(ç¬)
WebSub
ããŒã æ®ãã¯WebFingerãšLink-based Resource Descriptor Discoveryã§ãããWebFingerã¯å
ã»ã©ã説æããããã«ããŠãŒã¶ãŒããµãŒãã¹ã«é¢ããæ§ã
ãªæ
å ±ãåç
§ããããã®ãããã³ã«ã§ãã Link-based Resource Descriptor Discoveryã¯ããµãŒãäžã«çœ®ã /.well-known/host-meta ãšãããã¡ã€ã«ã®ãã©ãŒãããã«é¢ãã仿§ã§ãWebFingerã®URLããã®ãã¡ã€ã«ãåç
§ããŠååŸããããšãã§ããŸãã
â»çè
泚: äŸãã° don.techfeed.ioã®host-meta㯠https://don.techfeed.io/.well-known/host-metaã«ã¢ã¯ã»ã¹ãããšåç
§ããããšãã§ãããã®äžã«WebFingerã«é¢ããURLãå«ãŸããŠããã以äžãhost-metaãã¡ã€ã«ã®å
容ã
<?xml version="1.0"?> <XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"> <Link rel="lrdd" type="application/xrd+xml" template="https://don.techfeed.io/.well-known/webfinger?resource={uri}"/> </XRD>
ãã¹ããã³ã¯ãœãŒã·ã£ã«ãŠã§ãã®çæ³ãå®çŸãããïŒ
çœç³ ãœãŒã·ã£ã«ãŠã§ãã®ãããã³ã«ã«é¢ããŠãäžéãçºãããšããã§ãã ãã¶ãœãŒã·ã£ã«ãŠã§ãã®ã¹ã¿ãã¯ãããã¹ããã³ã«é¢ããçè§£ãæ·±ãŸã£ãããã«æããŸãã ã§ã¯ãããããŸãšãã«å
¥ããããšæããã§ãããæšä»ã®ãã¹ããã³ããŒã ããããŠãœãŒã·ã£ã«ãŠã§ããæ¯ãè¿ã£ãŠãæããšãããããã°ãèãããã ããã
ããŒã ããã§ããããŸããœãŒã·ã£ã«ãŠã§ãã®ç®æããšããã¯ããŠã§ãäžã«ã¢ã€ãã³ãã£ãã£ã®ã¬ã€ã€ãŒãç¯ããšããããšããã®äžã§ããµãŒãã¹ããŸããã ã³ãã¥ãã±ãŒã·ã§ã³ãå®çŸãããšããããšã«ãããšæããŸãã ãã¹ããã³ã®æµè¡ã¯ãããããäžçã®å®çŸãåŸæŒããããããããªããšæåŸ
ããŠããŸãã
çœç³ ãªãã»ã©ããœãŒã·ã£ã«ãŠã§ãã®æä»£ã¯ãŸã ãŸã ããããã ããšã
ããŒã ãŸãã§ãããœãŒã·ã£ã«ãŠã§ãã®çæ³ãå®å
šã«å®çŸãããâŠã£ãŠãããšéã¯é ãã ãããªãããšæã£ãŠããã®ãæ£çŽãªãšããã§ãã
ä»ã¯ãšã«ããããã¹ããã³ãæµè¡ããšè¯ããªãšæã£ãŠããŸããç±çããŠããé ãã7幎ãçµã£ãŠããã®ã§å€å°ã¯èœã¡çãããšãããããããŸãçŽç²ã«çæ³ãè¿œãæ±ããŠãããšãããâŠäœãŠèšããã ããã
çœç³ åç䞻矩ïŒ
ããŒã ãããããã ããœãŒã·ã£ã«ãŠã§ãåç䞻矩(ç¬) ããããåç䞻矩çãªææ³ã¯ä»ã¯å°ãåãŸã£ãŠããŠããšãããããã¹ããã³æµè¡ãã°ãããããã¹ããã³ãæµè¡ãã°çµæçã«ãœãŒã·ã£ã«ãŠã§ããæµè¡ãããšã«ç¹ãããâŠãšããããªé¢šã«æããŠãããšããã®ãæ£çŽãªãšããã§ãã
ããã¹ããã³ã®æè¡ãå¿çšããŠãæ¢åãµãŒãã¹ã§äœãã§ãããããèããã®ã¯é¢çœã
çœç³ ã»ããããã¹ããã³ã®æè¡ãå¿çšããŠãæ¢åãµãŒãã¹ã§äœãã§ããããã£ãŠè©±ãããããšãã£ããã£ãŠãŸãããããã¡ãã¯ã©ãã§ããïŒ
ããŒã ããããããœãŒã·ã£ã«ãŠã§ãã®æè¡ã£ãŠããŠã§ããããŒã¹ã«èããããŠããã®ã§ãæ¢åã®ãµã€ããšãã«çµã¿èŸŒãã®ã¯å®ã¯ããã»ã©é£ãããªããã§ããã äŸãã°ã¡ãã£ã¢ãåããŠãRSSãã£ãŒããAtomããŒã¹ã®Activity Streamsã«å€ããããããšãããããªã¡ãã£ãšãã倿Žãå ããŠããã ãã§ããã¹ããã³ãšã³ãã¥ãã±ãŒã·ã§ã³ã§ããããã«ãªããããããªããã§ãã
çœç³ ãªãã»ã©ãã¡ãã£ã¢ã1ãã¹ããã³ã€ã³ã¹ã¿ã³ã¹ããããã¯ãã¹ããã³ãŠãŒã¶ãŒã«ããªããããšããããšã§ããã
ããŒã ããã§ããçœç³ããããã£ãŠãã£ãããTechFeedãšããããã¹ããã³ã®æè¡ãåã蟌ã䟡å€ã¯ããããããªãããšæããŸããã ãã®äŒå Žã«ããã£ãããæ¹ã
ãããã§ã«äœããã®ãµãŒãã¹éçºã«åãçµãã§ããã£ãããæ¹ãå€ããšæããŸãããããã«ãã¹ããã³ããœãŒã·ã£ã«ãŠã§ããçµã¿åããããšã©ãããããšã«ãªãããã¡ãã£ãšæ³åããŠã¿ãã®ã¯é¢çœããšæããŸãã
ã¡ãªã¿ã«ãåã«ãã©ã³ã¹ã§ããã¹ããã³ã®æµè¡ã®æ³¢ãæ¥ãŠããã¿ãããªã®ã§ãããæ¥æ¬ã¯ããã®äœåãã®å€§ããªæ³¢ãããŠããã¿ããã§ãã Twitterãšãã§ãè±èªã§ãã®ããšãã€ã¶ãããšãã¿ããªãã®çç±ãç¥ãããããšããç¶æ
ã§ãã ãã®ãŸãŸãã¹ããã³ã®æŽ»çšã§ãäžæ©å
ãããŠããã¹ããã³å
é²åœããã£ãšèšãã°ãœãŒã·ã£ã«ãŠã§ãã®å
é²åœã«ãªããããããªâŠãªããŠããšãæã£ããããŠããŸãã
çœç³ ãªãã»ã©ãããã倢ã®ãã話ã§ããâŠïŒããŒãããã仿¥ã¯ãã¹ããã³ãšãœãŒã·ã£ã«ãŠã§ãã«ã€ããŠããšããšããŸã§æ·±ãä»ãåã£ãŠããã ããããããšãããããŸããïŒ
ã©ã€ããã³ã°ããŒã¯
ããŒããããšçœç³ããã®å¯Ÿè«ã®ããšã¯ãã©ã€ããã³ã°ããŒã¯ã§ç· ãããããŸããã
Meganedonãã£ãŠã¿ãã
meganedonãšããç¬èªã€ã³ã¹ã¿ã³ã¹ãç«ã¡äžï¿œï¿œãŠã¿ã話ã§ãããéçšããäžã§éèŠãšãªããã£ããã¹ãïŒåéã®LTã«æ¿çž®ãããŠããŸãã
ãœãŒã¹èªã 仿¥ã®ããŒã㯠Mastodo
ãã¹ããã³ã®ãœãŒã¹ã³ãŒããèªãããã«FreeBSDã§ã€ã³ã¹ã¿ã³ã¹ãç«ãŠã話ããã¹ããã³ã®ãœãŒã¹ã³ãŒãã远ããããããããŠããŠããããããã解説ãããŸããã
ãã€äžŒ ïŒåéãã¯ããã³ã°
ãã€äžŒ5åã¯ããã³ã° from dsuke Takaoka
TechFeedã®CTOã§ãããdsukeããã®LTã§ãAWSäžã§TechFeedonãç«ãŠã話ã玹ä»ãããŸããããœãŒã¹ã³ãŒããGithubã§å
¬éäžãšã®ããšã
https://github.com/techfeed/techfeedon
æåŸã«
çããããããã ã£ãã§ããããïŒ ä»å€§äººæ°ã®åæ£åSNSãã¹ããã³ã§ããããã¹ããã³ã®è£åŽã«èŠãé ãããŠãããœãŒã·ã£ã«ãŠã§ãã®ææ³ãåçš®ãããã³ã«ã«ã€ããŠãå£éèŠãŠããã ãããšã¯åºæ¥ãã§ããããïŒ ãã¹ããã³ã¯åã«æµè¡ãã®ãµãŒãã¹âŠãšããããã§ã¯ãªãããšããçè§£ããã ãããšæããŸãããã¹ããã³ã«è§Šããéã¯ããã¹ããã³ãå®çŸããããšããŠããå€ããŠæ°ãããœãŒã·ã£ã«ãŠã§ãã®äžç芳ã«ã€ããŠæ¯éæããå·¡ãããŠã¿ãŠäžããã
ä»åã®èšäºã¯åŸç·šã§ããåç·šã¯ãã¡ã
https://www.slideshare.net/slideshow/embed_code/key/yjXkC7WrHxbpqy
0 notes
Text
MongoDB MapReduce
I got my first map reduce function working today with MongoDB. Well, it's not a full map-reduce, but just a group function, but it was a good learning experience.
We have a collection to store all the activities of a user's child (user can have many children) when the child does a quiz or reads a book, etc. We use ActivityStrea.ms format to store the activities.
So one of my tasks is to mark all the quizzes each user's child has completed, using the latest attempt as the score of how many corrects over total. I went an extra mile and added some statistics to the requirements list, such as the number of attempts, the overall total questions, and the overall total corrects.
So I have a list of quiz ids, and the username. I would loop through the quiz ids, find the whole quiz, then use group function to find all the related activities group by the children name, and attach the result to the quiz and return to the browser (or the Backbone Model in my case).
The piece of code to perform the grouping is:
$keyf = new MongoCode(' function(activity) { return {child: activity.actor.displayName}; } '); $initial = array( "attempts" => 0 , "corrects" => 0 , "total" => 0 ); $reduce = 'function (activity, prev) { prev.attempts++; if (typeof(prev.latest) === "undefined" || prev.latest.updated < activity.updated) { prev.latest = activity; } for (var i=0; i<activity.object.questions.length; i++) { prev.total++; var question = activity.object.questions[i]; if (question.options[4] === question.options[0]) { prev.corrects++; } } }'; $condition = array( "object.objectType" => "quiz" , "object.id" => $quiz_id // $quiz_id is the element in the loop , "actor.parent" => $user->email , "updated" => array('$exists' => true) ); // Called after all the reduce calls are completed. $finalize = 'function(out) { out.latest_total = 0; out.latest_corrects = 0; for (var i=0; i<out.latest.object.questions.length; i++) { out.latest_total++; var question = out.latest.object.questions[i]; if (question.options[4] === question.options[0]) { out.latest_corrects++; } } }'; $progress = $activities->group( $keyf, $initial, $reduce, array("condition"=>$condition, 'finalize'=>$finalize) );
$progress will have the output
[ { "child": "Child 1" , "attempts": 1 , "corrects": 9 , "total": 10 , "latest": {/* the latest activity object */} , "latest_corrects": 9 , "latest_total": 10 } , { "child": "Child 2" , "attempts": 3 , "corrects": 27 , "total": 30 , "latest": {/* the latest activity object */} , "latest_corrects": 8 , "latest_total": 10 } ]
0 notes