ã次ã®2幎éã§ãäœãç¹å¥ãªãµããããããšããã¹ãã§ã¯ãªãã人é¡ããã§ã«äœæãããã®ãæ§æããã®ã«ååãªã ãè³¢æã§ããã¹ãã§ãã ïŒcïŒ bobuk
1幎åã瀟å ã®ããã«ãœã³ã§ããã¹ããã®ã¹ã¿ããã¯èŠèŠçãªããã¹ããšãã£ã¿ãŒãMuravyevã®ã¿ã€ãã°ã©ãã¡ãŒãåagiçªãµãŒãã¹ãäžå€ã§èšªããŸããã åºçç©ãè¿ éã«æºåããŠããã°ã«éä¿¡ããã®ã«åœ¹ç«ã€ããšãå€æããŸããã
ãã€ãŠã¯ããã®ãããžã§ã¯ãã¯ãµã€ããããžã§ã¯ããšããŠçããŠããŸãããã瀟å ã®ã¹ã¿ãŒãã¢ããã®ããã«ãããã€ãã®ãªãœãŒã¹ãäžããããŸããã ãã®çµæãç·šéã¹ã¿ããã®ããªã䟿å©ãªéåã¡ãã£ã¢ãã§ããŸããã
è人ã°ãŒãã³ãã«ã¯ã¯åã¶ã ãã
40æ³ã®åç¶ãã€ããŒããã¬ã³ãæµ·ã§æ²æ²¡è¹ãäžãããªã©ã®èå³æ·±ãç©èªãèªãã ãã人æ°ã®ããéæè¡çãªãããã¯ã«é¢ããäœå®¶ã®ããã«ãããã¹ãããå°ããéã皌ãããšãã§ããŸãã
ãã®ãããªãµãŒãã¹ãéçºããéã«äœãèæ ®ããæŸèæãªãã§äœãéžæããããèŠãŠã¿ãŸãããã
äŒçµ±çã«ãç§ãã¡ã¯æçš¿ãç« ã«åå²ããŸãã-åç« ã«ã¯ãæå°éã®å€éšã³ã¡ã³ãã§ãããžã§ã¯ãåå è ããã®ãã³ããšçŽæ¥ã®ã¹ããŒãããããŸãã
10人ã®ãšãã£ã¿ãŒã®ãã¡ãäž ïŒJSïŒãéžæããå¿ èŠãããçç±
ã¿ã€ãã°ã©ãã¡ãŒã®Muravyovã«æè¬ ïŒPythonïŒ
çäœé²æ¢ã·ã¹ãã ã®ä»çµã¿ ïŒPytnonïŒ
èè ã¯ã©ã®ããã«ããã¹ããäžãã圱é¿ãç解ã§ããŸãã
ãµããŒãæ¹æ³ ïŒã·ã¹ãã 管çè ãšã®ä»äºã«ã€ããŠïŒ
åç¶ã®ãã€ããŒã®ç©èª ïŒuPagesïŒ
ããããæåããå§ããŸãããã ãµã€ããããžã§ã¯ããé«è² è·ã®ãã©ãããã©ãŒã ã«çºå±ãå§ãããšããäœããè¿œå ããŠæžãçŽãå¿ èŠããããšããç解ããããŸããã
0.ãã¯ãããžãŒãéžæããæ¹æ³
幎æ«ãŸã§ã«ã8,000人ã®èè ããã®ãã©ãããã©ãŒã ã䜿çšããèªè æ°ã¯30äžäººã«éãããšäºæ³ãããŸãã
Ilya devhard ãCTO uPagesïŒ ããããžã§ã¯ãã«ãã¯ãããžãŒãéžæãããšããç§ãã¡ã¯æ¬¡ã®ãããªèæ ®äºé ããé²ããŸãããçŽæãšéè² è·ãžã®æµæã
éžæã¯Node.js + MongoDBã®æã«ããã£ãã ã¯ã©ã€ã¢ã³ãã«ã¯è§åºŠãåå¿ãçž®å°ã¯ãããŸããã Express.jsããã¬ãŒã ã¯ãŒã¯ãšããŠéžæãããã®ã¯ããã®ããããªãºã ãšãè¿œå èšå®ãªãã§å¿ èŠãªãã¹ãŠãããã«äœ¿çšã§ãããããŸãã¯è¿œå èšå®ãå°ãªãããã§ãã
ãŸãã ESlintããããŸãããããã¯ããã¿ããšã¹ããŒã¹ã®ã©ã¡ããè¯ããããšãã粟ç¥ã§ããŸãè°è«ããããšãªããè€æ°ã®éçºè ã®ã³ââãŒããå€å°çµ±äžããã¹ã¿ã€ã«ã«ããã®ã«å€§ãã«åœ¹ç«ã¡ãŸããã éçºã®åæ段éã§éåžžã«åœ¹ç«ã¡ãŸãã
ESlintã®ãµã€ãã«ã¯ãã¢ããããŸãã GitHubãããããžã§ã¯ããããŠã³ããŒãã§ããŸãã
ãããžã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®äœæ¥ç°å¢ãšããŠã®Dockerã³ã³ãã-ãã©ã€ãã©ãªã®æŽæ°ãšãã¹ãŠã®ç Žæããªã©ã®ãã©ãã€ã¢ãã身ãå®ããå¿ èŠã«å¿ããŠãé©åãªã©ã€ãã©ãªããŒãžã§ã³ãŸãã¯å®å šã«ç°ãªãããã€ãã®ã¢ã»ã³ããªïŒå€§ãŸãã«èšã£ãŠãå®å®ãããbleeding_edgeã¢ã»ã³ããªïŒãè¿ éã«ååŸããŸãã
ãŸãã 3ã€ã®Gitãªããžã㪠ïŒãªãã£ã¹ã«ããŒã«ã«ã«1ã€ãç°ãªãããŒã¿ã»ã³ã¿ãŒã«2ã€ïŒããããŸããã ãããŠããã€ãããžã¥ã¢ã«ãšãã£ã¿ãŒã®äœæãéå§ããããšãç¥ã£ãŠããŸãããã
1.ç¬èªã®WYSIWYGãäœæããå Žåã¯ãåæ
ããŸã
éçºè ã®ã»ã«ã²ã€ïŒ ãããã«ãœã³ã®ãããã¿ã€ãã¯ãuCozã®ããã°ãšãµã€ãçšã«äœæãããŸããã ãããŠãã¡ãããç§ãã¡ãæåã«èããã®ã¯ããããäœããåãããšã§ããã ãããããåç¥ã®ããã«ãuCozã®äžéšã¯Perlã§èšè¿°ãããŠãããNode.jsãéžæããŸããã ãã®ããããšãã£ã¿ãŒã¯å¥ã®ãµãŒãã¹ãšããŠæ¥ç¶ããããæžãçŽãå¿ èŠããããŸãã
ããã«å€ãã®ãªãã·ã§ã³ãæ€èšããåŸããããã¯åæ§ã«ç Žæ£ãããŸããã
- ã©ã¡ãããäœããèŠãŠãç·šéè ã§ã¯ãããŸããã§ããã
- ãŸãã¯ãç®±ããåºããŠããã«èŠããŸããã§ããããWord 2003ã®ããã§ãã
- ããããã«ã¹ã¿ãã€ãºããããšã¯ãã³ã¹ã¿ã€ã©ã€ãºã®ãããªãã®ã§ãã
ç·šéè ã®ãªã¹ãã¯æåã®ã³ã¡ã³ãã§ã¯ãå§ãããŸããããããã«éããŸãïŒ
CKEDITOR-ããªãã®ä»²éã§ã¯ãããŸããïŒå°ãªããšãçç±ïŒ2ã®ããïŒ
ãã®ãµã€ãã®èè ã¯ããŸããŸãªäººã ã§ã-ãããŠãããã®ãžã£ãŒããªã¹ããã³ããŒã©ã€ã¿ãŒãå®å šã«æ°äººããããŠå³ãã2000幎代ã«ããã°ãè©Šã¿ã人ã ã§ãã 誰ããããã«èšäºãããŠã³ããŒãã§ããããã«ãšãã£ã¿ãŒãäœãããã£ãã®ã§ãã
å床æ€çŽ¢ããçµæã2016幎ã®æ¥ã«ã¯éžæè¢ãæ確ã§ããããšãããããŸãããMediumEditorã¯ãååã®äººæ°ããã°ãã©ãããã©ãŒã ã«è§ŠçºããããªãŒãã³ãœãŒã¹ãšãã£ã¿ãŒã§ãã äžèŠãããšãããã€ãã®å©ç¹ããããŸãã
MEã«ã¯å®å šã§ç解ããããããã¥ã¡ã³ããããããããžã§ã¯ãã¯çµ¶ããæŽæ°ãããŠãããæŸæ£ãããŠããŸããã ãŸãããç®±ããåºããŠããã«ãå¿ èŠãªæ©èœïŒããã¹ããæäœããããã®ããŒã«ããŒãšããŒã«-ãããGitHubã«ãããŸãïŒãšã«ã¹ã¿ãã€ãºã®å¯èœæ§ããããŸããã
ç·šéããŒã«ã¯ãå¿ èŠãªå Žåã«ã®ã¿è¡šç€ºãããŸãã 暪ã®ãã©ã¹èšå·ã®åŸãã«ã¯ãåçãšãããªã®æ¿å ¥ããããŸãã
ãããã«å«ãŸããŠããªããŠã£ãžã§ãã-ããããªãããåçããããã³ãã»ãã¬ãŒã¿ã-ç§ã¯ããã¶ã€ã³ããå§ããŠèªåã§æžããŸããã ãããŠã圌ãã®åµé ã«ã¯å€ãã®æéã¯ããããŸããã§ããã
ããããè»èã«ããšããªãããã§ã¯ãããŸããã æåã®é©ãã¯ãMEããšãã£ã¿ãŒå ã®æšæºã€ãã³ãïŒ keyupãpasteãªã©ïŒãåå®çŸ©ããç¬èªã®ã€ãã³ãã«çœ®ãæãããšããäºå®ã§ããã ç¶æ³ãå¶åŸ¡ããã«ã¯ãMEã³ãŒãã«ç§»åããŠäŸå€ãè¿œå ããå¿ èŠããããŸããã
è匱æ§ãçºèŠããã®ã§ããããžã§ã¯ãã§MEã䜿çšããŠãã人ã ã«æçŽãæžãããããéããæ¹æ³ã説æããŸããã
æåã®ãã¹ãã§è匱æ§ãçºèŠãããŸããã MEã§ã¯ã次ã®ãããªå±éºãªãªã³ã¯ã«å¯Ÿããä¿è·ãååšããªãããšã«æ°ä»ããŸããã
javascript:alert('xss http://www.ru')
ããã¯ãç§ãã¡ããã£ãããã«ãåã«javascriptïŒã¿ã€ãã®ã·ãŒã±ã³ã¹ã远跡ããŠç Žå£ããããšã§è§£æ±ºã§ããŸãã
äžæ¹ã§ãç§ãã¡ã¯ç¡äœæ³ã«ãããè¡ã£ãŠããŸã-å±éºãªãªã³ã¯ã®å Žåãç§ãã¡ã¯åã«èšäºãä¿åããããšã¯ããŠããŸããã ããããäžæ¹ã§ããã®ãããªå®éšãè¡ãããšã決å®ããå Žåããã®ãŠãŒã¶ãŒã¯æããã«ãŠãŒã¶ãŒã§ã¯ãããŸããã
2.ãã€ãã³ã®ä»£ããã«ããªã³ããŒã³ãšããã·ã¥ã®åŒçšç¬Š
éçºè ã®ããŒã¿ãŒïŒ ãäžè¬çã«ãèªç¶èšèªã§ã®ããã¹ãåŠçã¯ãç¹ã«ãã·ã¢èªã«é¢ããŠéèŠãªäœæ¥ã§ããããšã«æ³šæããŠãã ããã å¿ èŠãªæ©èœãåããæ¢è£œã®ããŒã«ã䜿çšã§ãããããç°ãªãããšãããããšããè©Šã¿ã®éçºãé ãããªãã§ãã ããã
ããã«ãœã³ã§ããªãã¿ã®ãŠãŒãã£ãªãã£ãå°å ¥ããããšã決å®ãããŸããã ç§ãã¡ã¯ããããDockerã³ã³ããã®åœ¢ã§å¥åã®ãã€ã¯ããµãŒãã¹ã«è©°ã蟌ã¿ãŸãã-WSGIãä»ããŠåäœããAPIãæã€äžçš®ã®Pythonã©ãããŒã§ãã
ããŒã«ã®1ã€ã¯ã å°å·äŒç€ŸMuravyovaã§ããã ç§ã®è¬èãªæèŠã§ã¯ãRunetå šäœã«ã¿ã€ãã°ã©ãã£ä¿®æ£ã®ããã®ããè¯ãããŒã«ã¯ãããŸãããã«ãŒã«ãšPHPãšPythonã®å®è£ ã®å°è±¡çãªèŠçŽã§ãã ãããŠãéåžžã«éèŠãªã®ã¯ã©ã€ã»ã³ã¹ã§ãã
@emuragevã«æ¬æãè¡šããŠããããªãã¯ãã¡ã€ã³ïŒãããªãã¯ãã¡ã€ã³ïŒãšããŠé åžãããŠãããããPythonå®è£ ã§ãããžã§ã¯ãã«åºå®ããŸããã ã«ãŒã«ãè£è¶³ããæ¹æ³ã«ã€ããŠã®æ©äŒãšã¢ã€ãã¢ããããŸããããããŸã§ã®ãšããã圌ãã¯äœãå€æŽããŠããŸããã
3. SEOã³ã³ãã³ããã¡ãŒã ã«ãªããªãããã«ããæ¹æ³
ã°ã©ãã©ããã¢ãšã¢ããã¥ã¢ãå± å¿å°ã®è¯ãblozicsããåæçš¿ããã®ãé²ãããã«ãäºå調æŽãå°å ¥ããŸããã åºçç©ã®ããã¹ãã®äžææ§ããã§ãã¯ãããŸããèè èªèº«ãšãã®ãããªãã§ãã¯ãå®è¡ã§ããŸãã
éçºè ã®ããŒã¿ãŒïŒ ããã©ãããã©ãŒã ã®ã³ã³ã»ããã¯ããããã¯ã圢åŒãå³å¯ã«èŠå¶ããããšãªããé¢çœââãã¹ããŒãªãŒãã¬ãã¥ãŒãäœæããããšã§ãã ããããåããã¹ãã§çšŒãããšãã§ããŸãã ãããŠããããäžæã§ãªããã°ãªããªãããšã¯æããã§ãã
äžè¬ã«ãããã¹ãã®äžææ§ããã§ãã¯ããããã®ãªã³ã©ã€ã³æ©èœãå®è£ ããã«ã¯ã Yandex.XMLãã¯ãããžãšãçæ³çã«ã¯ãããã¹ããæåã«å®è¡ããŠããY.XMLãããã¯ããããã¹ããã¿ãŒã³ã®ããŒã¹ãå¿ èŠã§ãã
ãã ãã1ã€ã®ãã¡ã€ã³ããY.XMLãµãŒãã¹ãžã®ãªã¯ãšã¹ãã®æ°ã¯å¶éãããŠããããµã€ãã®TCIã«çŽæ¥äŸåããŸãã ãŸããæªãªãªãŒã¹ã®Webãããžã§ã¯ãã«ã¯ã©ã®ãããªTICããããŸããïŒ ãªãã ãŸããéçºäžã¯ããªã¯ãšã¹ããéä¿¡ããåçã解æããããŒã¿ãåŠçããããšãåžžã«å¿ èŠã§ããã
ãã¡ããã倧ããªTICããããµã€ããååšãããã¡ã€ã³ã«ãªã¯ãšã¹ããéä¿¡ããããšãã§ããŸãã ããããæçµçã«ã¯ããããè¡ãããæ¢è£œã®Content-WatchïŒCWïŒAPIã䜿çšããããšã«ããŸããã ã·ã¹ãã ã¯æåã§ãããç§ãã¡ã«ãšã£ãŠç¹å¥ãªæ¡ä»¶ã«ãªããŸããã
ãããã¯ãŒã¯äžã®ã¬ãã¥ãŒã¯ããŸããŸã§ãããåé¡ãããç解ããŠããããã§ãåªããããã¥ã¡ã³ããæå°éã®APIãããã³Y.XMLã«å ããŠç¬èªã®ã¢ã«ãŽãªãºã ã䜿çšããŠãµãŒãã¹ãæ®åœ±ããŸããã
ç§ãã¡ã«ãšã£ãŠããµãŒãã¹ã®ãŠãŒã¶ãŒã«é¢ããŠã¯ããã¹ãŠãéåžžã«ç°¡åã«æ©èœããŸãããã§ãã¯ããããã¹ããå«ãCWãµãŒãã¹ã®ãªã¯ãšã¹ããéä¿¡ããjsonå¿çãååŸããŸãã å¿çã«ã¯ãããã¹ãã®äžææ§ã®çšåºŠã«é¢ããæ å ±ïŒçŸããåã°ã©ãã衚瀺ãããŸãïŒãšããã®ããã¹ããŸãã¯ãã®ããã¹ããèŠã€ãã£ããããã¯ãŒã¯äžã®ããŒãžãžã®ãªã³ã¯ãå«ãŸããŸã-ãããŸã§ã®ãšãããã¢ãã¬ãŒã¿ãŒã®ã¿ããªã³ã¯ä»ãã®ãããã¯ã䜿çšããã¡ã€ã³ããŒãžã§å ¬éããåã«èšäºã確èªããŸããã
4.èè
ã«èšäºãåæãããæ¹æ³
èè ãããé¢çœãããããã«ãç§ãã¡ã¯ãã¹ãŠã®äººã«ããã¹ãåæãšæ¯æãããŒã«ãå°å ¥ããããšã«ããŸããã åå ¥ã¯æ¬¡ã®ããã«çæãããŸããããã¹ãã®æšªã«ã¯ãåºåãšæšå¥šã®2ã€ã®ãããŒããããŸãã ãããŒã«ã¯ã¯ãªãã¯äŸ¡æ ŒããããŸãïŒåºåã·ã¹ãã ã«ãã£ãŠæ±ºå®ãããŸãïŒ-åã¯ãªãã¯ã®ã³ã¹ãã®80ïŒ ãèè ã«æäŸããŸãã
ã€ãªã¢ãCTO uPagesïŒ ãèå³æ·±ãã¿ã¹ã¯ã¯ãèè ã«çšŒãã éé¡ãšææã瀺ããåæã«äºå®ã瀺ãããšã§ãã-誰ããèšäºãèªãããã§ã¯ãªãããã£ãŒã¶ãŒãèŠåºãã ãã§ãªããããã¹ãå ã§ã®åãçµã¿ã«åãçµãå¿ èŠããããŸãã
ãããã£ãŠãçµ±èšã¢ãžã¥ãŒã«ãäœæããŸããã
ã¯ã©ã€ã¢ã³ãéšåã§æ§æãããŠããŸã-Chart.jsãä»ããŠã°ã©ããæç»ã ãæ°åãšãªã¹ããæäŸããŸãã
ãµãŒããŒåŽã§ã¯ãããããïŒãããèªã¿åããããããã¯ããŒã¯ãã®æ°ãªã©ãèªåèªèº«ã§äœããæ€èšããŸãã
ãããŠãããŒã¿ã®äžéš-äœæè ãç²åŸãããããŒã®ã¯ãªãã¯ã«é¢ãã-ã¯ãGoogleã¢ããªãã£ã¯ã¹APIãšEngageyaæšå¥šãµãŒãã¹ãå©çšããŸãã 2çªç®ã®ãã®ã«ã¯äŸ¿å©ãªAPIããããŸãããã1æ¥ã«1åãå¿ èŠãªãã¹ãŠã®æ å ±ãå«ãã¬ããŒããã¢ããããŒãããããšã«åæããããšãã§ããŸããã ããã¯ãèšäºã®åŽé¢ã§ã®åºåã¯ãªãã¯ãšèè ã®åå ¥ã瀺ãæ¹æ³ã§ãã
Google APIã®å Žåããªã¯ãšã¹ãã«ã¯å¶éãæºããããã«äžå®ã®åšæããããŸãã
ã¯ãã Google APIã¯èŠçã§ãã éåžžã«å€ãã®ç°ãªã補åããããããèšå€§ãªéã®ããã¥ã¡ã³ããèªã¿çŽããŠãããã€ãã®ã¢ãããŒããè©Šãå¿ èŠããããŸãã æåãAdSense Management APIã䜿çšããŠAdSenseã®åçããŒã¿ãååŸããããšããŸãããããã®ã¬ããŒãã§ã¯åçæºã®è©³çŽ°ãªäŒèšæ å ±ãæäŸã§ããŸããã
é·ãã°ãŒã°ã«ãšç§ã®é ãããŒããŒãã§å©ããåŸãæãã¯åæããããããããŸããã
Google Adsenseã¢ã«ãŠã³ããšAnalyticsã¢ã«ãŠã³ãã®éã«ãªã³ã¯ã確ç«ããããã®åŸãåæAPIããªã¯ãšã¹ããããšAdSenseããŒã¿ãå©çšå¯èœã«ãªããŸãã
5.ã¡ã³ããã³ã¹æ¹æ³
Ruslan pys ãã·ã¹ãã 管çè ïŒ ãã¿ã¹ã¯ã¯ããããã¯ã©ãŠããµãŒããŒã§ããããšã埮åŠã«ç€ºåããŸããã ãã¶ãŒããŒãã®æž©åºŠããã¡ã³ã®é床ããã£ã¹ã¯ã®ç£èŠãããã³ã·ãªã¢ã«çªå·ã®æžãæããå¿ããã«ãã£ã¹ã¯ãå€æŽããããšã¯ãæ¬åœã«ããããããŸããã§ããã
ã¯ã©ãŠãä»®æ³ãã·ã³ã«ã¯æ¬¡ã®èŠä»¶ããããŸããã
- ã¢ã¹ã¯ã¯ã®ããŒã¿ã»ã³ã¿ãŒïŒãã·ã¢èªã話ãèŽè¡ãããããïŒã
- 䟿å©ãªæ§æå€æŽã
- ç°ãªããããã€ããŒã® 2å°ã®ãµãŒããŒ-ãã©ãŒã«ããã¬ã©ã³ã¹ãšããŠã³ã¿ã€ã ãªãã®æè¡çäœæ¥ã®å¯èœæ§ã®ããã
ãã1ã€ã®éèŠãªã¿ã¹ã¯ã¯ããœãããŠã§ã¢å±éã¢ãã«ã§ãã æããã«ãéçºãµãŒããŒã§ã®ç掻ãšæŠéã§ã®ç掻ã¯ã2ã€ã®å€§ããªéãã§ãã ããã«ãŠãããŒãµã«ã³ã³ããåãéžæããã®ã¯è¯ãããšã§ãããã®æ©äŒã«ãã·ã¹ãã 管çå šäœããæè¬ãè¡šæããŸãã
ä»ã®ãããžã§ã¯ãã§æ¢ã«æ£åžžã«äœ¿çšããŠãããããã³ã³ããã®å±éããã³æ§æ管çã·ã¹ãã ãšããŠSaltstackãéžæããŸããã
ãµãŒãã¹ãèŠæç¶æ ã«ããçµæãéåãå®æœããããšããèªç¶ãªæ¬²æ±ãçããŸããã Yandex.Tankããçºç ²ããŸãã ããã»ããµã³ã¢ãšã·ã¹ãã ããã³ã¢ããªã±ãŒã·ã§ã³ãœãããŠã§ã¢ã®èšå®ã«å¯ŸããèŠæ±ã®æ¯çãå€ããå®éšã®éçšã§ã1ã€ã®ããŒãã®å®¹éãšããã®å®¹éãšä»®æ³ããŒããŠã§ã¢ããã³OSèšå®ã®æ§æãšã®çžé¢é¢ä¿ãç¹å®ããŸããã ãŸãã圌ãã¯11æ1æ¥ã«å§ãŸããŸãããã
PS æ°ãããµãŒãã¹ã« http-requestsãéä¿¡ããŠãã ããïŒ