ã次ã®2幎éã§ãäœãç¹å¥ãªãµããããããšããã¹ãã§ã¯ãªãã人é¡ããã§ã«äœæãããã®ãæ§æããã®ã«ååãªã ãè³¢æã§ããã¹ãã§ãã ïŒcïŒ bobuk
1幎åã瀟å
ã®ããã«ãœã³ã§ããã¹ããã®ã¹ã¿ããã¯èŠèŠçãªããã¹ããšãã£ã¿ãŒãMuravyevã®ã¿ã€ãã°ã©ãã¡ãŒãåagiçªãµãŒãã¹ãäžå€ã§èšªããŸããã åºçç©ãè¿
éã«æºåããŠããã°ã«éä¿¡ããã®ã«åœ¹ç«ã€ããšãå€æããŸããã
ãã€ãŠã¯ããã®ãããžã§ã¯ãã¯ãµã€ããããžã§ã¯ããšããŠçããŠããŸãããã瀟å
ã®ã¹ã¿ãŒãã¢ããã®ããã«ãããã€ãã®ãªãœãŒã¹ãäžããããŸããã ãã®çµæãç·šéã¹ã¿ããã®ããªã䟿å©ãªéåã¡ãã£ã¢ãã§ããŸããã
è人ã°ãŒãã³ãã«ã¯ã¯åã¶ã ãã40æ³ã®åç¶ãã€ããŒããã¬ã³ãæµ·ã§æ²æ²¡è¹ãäžãããªã©ã®èå³æ·±ãç©èªãèªãã ãã人æ°ã®ããéæè¡çãªãããã¯ã«é¢ããäœå®¶ã®ããã«ãããã¹ãããå°ããéã皌ãããšãã§ããŸãã
ãã®ãããªãµãŒãã¹ãéçºããéã«äœãèæ
®ããæŸèæãªãã§äœãéžæããããèŠãŠã¿ãŸãããã
äŒçµ±çã«ãç§ãã¡ã¯æçš¿ãç« ã«åå²ããŸãã-åç« ã«ã¯ãæå°éã®å€éšã³ã¡ã³ãã§ãããžã§ã¯ãåå è
ããã®ãã³ããšçŽæ¥ã®ã¹ããŒãããããŸãã
ãµããŒãæ¹æ³ ïŒã·ã¹ãã 管çè
ãšã®ä»äºã«ã€ããŠïŒ
ããããæåããå§ããŸãããã ãµã€ããããžã§ã¯ããé«è² è·ã®ãã©ãããã©ãŒã ã«çºå±ãå§ãããšããäœããè¿œå ããŠæžãçŽãå¿
èŠããããšããç解ããããŸããã
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ãéä¿¡ããŠãã ããïŒ