ãã®ãã©ã°ã€ã³ã¯ã Stepik TelegramããããiOSããã³Androidåãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®å Žåã®ããã«ããµã³ã¯ãããã«ãã«ã¯ã®ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã»ã³ã¿ãŒã®åŠçã§ããæ°ããã€ã³ã¿ãŒã³ããŒã¿ãŒãã°ãããã«ãã£ãŠèšèšãããŸããã
ãã©ã°ã€ã³ã®ç®ç
ãªããããããã®ã§ããïŒ ãã¡ãããåŠçã®æ¥åžžç掻ã匷å¶ããã®ã§ã¯ãªããåŠçã®ç掻ãç°¡çŽ åããããã«ãåŠç¿ããã»ã¹ã«å®å šã«éäžã§ããããã«ããŸãã
ãã©ãããã©ãŒã ã§ããã°ã©ãã³ã°ã®ã³ãŒã¹ãåè¬ããéã«åŠçãæåã«ééããåé¡ã¯ãIDEãããã©ãŠã¶ã«ã³ããŒã¢ã³ãããŒã¹ãããå¿ èŠãããããšã§ãã ãã©ãŠã¶ã§ã®ããã°ã©ãã³ã°ã¯ç°¡åã§ã¯ãããŸãããã³ãŒããå®è¡ããŠããŒã«ã«ã§ãã§ãã¯ããããšã¯ã§ããŸãããèªåè£å®ããªãã¡ã¯ã¿ãªã³ã°ãªã©ã¯ãããŸããã ãŸããIDEã§ããã°ã©ãã³ã°ãããšãã¯ãã¿ã¹ã¯ã®ç¶æ ã衚瀺ãããããµã³ãã«å ¥åãã³ããŒãããããããã«ãåžžã«ãã©ãŠã¶ãèŠãå¿ èŠããããŸãã
2çªç®ã®åé¡ã¯ããããžã§ã¯ãã§ã³ãŒããæŽçããåé¡ã§ãã çåŸã¯ããµã³ãããã¯ã¹ã«ã³ãŒããå ¥åããŠãéåžžã¯çŸåšã®åé¡ã®ã¿ã解決ãã次ã®åé¡ãã©ãã§è§£æ±ºããããèããŸããã ãããŠããããããåŠçã¯ä»¥åã®æ±ºå®ãä¿åããªããã圌ã®ãã¡ã€ã«ããnew_fileããnew_file7ããnew_file777ãã®ããã«åŒã°ããŸãã ããã¯ãã¹ãŠããã²ãŒã·ã§ã³ãè€éã«ããã³ãŒãã®åå©çšãå°é£ã«ããŸãã
éçºããã»ã¹
ä»å¹Žã®6æã«ãJavaã®ã¿ããµããŒããããã©ã°ã€ã³ããªãªãŒã¹ãããããžã§ã¯ããããŒãžã£ãŒã«ãã°ã€ã³ããã³ã³ããã¹ãã¡ãã¥ãŒã䜿çšããŠStepik.orgãšå¯Ÿè©±ããŸããã ãããã圌ã¯ãŸããã¢ãŒããã¯ãã£ã«é倧ãªæ¬ é¥ããããŸããã
ããã°ã©ãã³ã°ãåŠã¶ããã®äŸ¿å©ãªãã©ãããã©ãŒã ãšããŠãã§ããã ãå€ãã®ããã°ã©ãã³ã°èšèªããµããŒãããããšãéèŠã§ãã ãã©ã°ã€ã³ã¯æ¡ä»¶ä»ãã§2ã€ã®éšåã«åå²ã§ããŸãããµããŒããããŠããèšèªã«äŸåããïŒæ¿èªãAPIãšã®å¯Ÿè©±ãèšå®ïŒãçŽæ¥èšèªãµããŒãïŒåºæ¬çã«ãããžã§ã¯ãã®ãã«ãïŒã§ãã
å€ããã©ã°ã€ã³ã¯ã¢ããªã·ãã¯ã§ãã£ããããæ°ããèšèªã®ãµããŒããè¿œå ããä»ã®IDEã®æ°ãããã©ã°ã€ã³ãäœæããããšã¯ã§ããŸããã§ããã ãããã£ãŠã PyCharmããŒã ãããã¬ãŒãã³ã°ãã©ã°ã€ã³ã®ã³ã¢ã«åãæ¿ããããšã決å®ãããŸããã
詳现ã«æ€èšããŠãã ããïŒ
- ãŠãŒã¶ãŒããŒã¿ãä¿åãã
- æ¿èªãšãããã¯ãŒã¯éä¿¡
- ãããžã§ã¯ãããªãŒã®æ§ç¯
ãŠãŒã¶ãŒããŒã¿ãä¿åãã
åèµ·åäžã«ãŠãŒã¶ãŒããŒã¿ã倱ãããªãããã«ããã«ã¯ãä¿åããå¿ èŠããããŸãã ãããè¡ãããã«ãIDEAã«ã¯PersistentStateComponentã€ã³ã¿ãŒãã§ã€ã¹ããããããã䜿çšããŠãç®çã®ã¯ã©ã¹ã.xmlã§ã·ãªã¢ã«åã§ããŸãã ããã¯ããã¥ã¡ã³ãã«ã¯ç€ºãããŠããŸãããã PersistentStateComponentãå®è£ ããã¯ã©ã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ã¬ãã«ããããžã§ã¯ãã¬ãã«ãã¢ãžã¥ãŒã«ã¬ãã«ã®3ã€ã®æ¹æ³ã®ããããã§ã€ã³ã¹ã¿ã³ã¹åããå¿ èŠãããã·ã³ã°ã«ãã³ã§ãããšç解ãããŠããŸãã
åè ã®å Žåãã·ã³ã°ã«ãã³ã¯ãã©ã°ã€ã³å šäœã§å¯äžã®ãã®ã§ãããã°ããŒãã«èšå®ãããã«ä¿åããã®ã劥åœã§ãã
ä»ã®å Žåã«ã¯ãå€ãã®ã·ã³ã°ã«ããŒã³ãããããããã¯./.ideaã§ã·ãªã¢ã«åãããŸãã ãŠãŒã¶ãŒããŒã¿ïŒååãããŒã¯ã³ãªã©ïŒãããã³ã³ãŒã¹ã«é¢ããã»ãŒãã¹ãŠã®ã¡ã¿æ å ±ãä¿åããã®ã¯ãããžã§ã¯ãã¬ãã«ã§ãã
åççãªè³ªåã¯ãéããŠãããããžã§ã¯ãããªãå Žåã«ããŒã¿ãä¿åããå Žæã§ãã ãã®ãããªå ŽåãIDEAã«ã¯ defaultProject ãããã次ã®ããã«ååŸã§ããŸãã
ProjectManager.getInstance().getDefaultProject()
ããããããããžã§ã¯ããäœæãããšãã«è³æ Œæ å ±ãååŸããŸãããã®ãããèšå®ã«æ瀺çã«ãã°ã€ã³ããåã«ãã¹ãŠã®ãããžã§ã¯ããéããããã«ãŠãŒã¶ãŒã«èŠæ±ããŸãã
ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯2ã€ã®æ¹æ³ã§å®è£ ã§ããŸãïŒ è©³çŽ°ã«ã€ããŠã¯ããã¥ã¡ã³ããåç §ïŒãããã«ãã¬ãã«ã«å¿ããŠããã®ã³ã³ããŒãã³ããplugin.xmlïŒæãéèŠãª.xmlïŒã§ç¢ºå®ã«å®£èšããå¿ èŠããããŸãã
<projectService serviceInterface="com.jetbrains.edu.learning.StudyTaskManager" serviceImplementation="com.jetbrains.edu.learning.StudyTaskManager"/>
äžè¬ã«ãIntelliJ APIããã®ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ããããplugin.xmlã§å®£èšããå¿ èŠããããŸãã
ãŸãããã¹ã¯ãŒããä¿åããããã«ãçµã¿èŸŒã¿ã®ãã¹ã¯ãŒããããŒãžã£ãŒPasswordSafeã䜿çšã§ããŸãã 次ã®ãŠã£ã³ããŠã衚瀺ãããã®ã¯ãæã ããã«å¯Ÿããé åã®ããã§ãã
æ¿èªãšãããã¯ãŒã¯éä¿¡
Stepik.orgã¯ãå®å šãªOAuth 2èªèšŒããµããŒãããŠããŸãã ãã ãããã©ã°ã€ã³ã§ã¯ããããŸã§ã®ãšãããã°ã€ã³ãšãã¹ã¯ãŒãã«ããèªèšŒã®ã¿ãå®è£ ãããŠããŸãã redirected_urlããªãã¹ã³ããã«ã¯ããµãŒããŒãlocalhostã«äžããå¿ èŠããããšããç¹ã§ãä»ã®ã¿ã€ãã®èªèšŒã«åé¡ããããŸãã
Stepikãšéä¿¡ããããã«ãã³ã¢ã«ã¯æ¢ã«å€æ°ã®éçã¡ãœããã®ã»ãããå«ãEduStepicConnectorã¯ã©ã¹ãšããªã¯ãšã¹ããå®è¡ããããã®HttpClientã€ã³ã¹ã¿ã³ã¹ããããŸããã ãã®ã¯ã©ã¹ã¯ã4ã€ã®ã¯ã©ã¹ã«åå²ãããããšã決å®ãããŸããã
Client Initã¯HttpClientãåæåãã蚌ææžã®æ€èšŒã«é¢ããåé¡ã解決ããŸãã Stepikã«ã¯Let's Encryptããã®èšŒææžããããIdenTrus CAã¯Java 8u101ã§ã®ã¿è¿œå ãããŸããã StepikConnectorLoginã¯æ¿èªãæ åœããŸãã ãããŠãæ®ãã®ã¯ã©ã¹ã¯ãæ¿èªãå¿ èŠãšãããªã¯ãšã¹ããäœæã§ããŸãã
ãã®ãããªã¹ããŒã ã§ã¯ãã¢ã¯ãã£ããªã¯ã©ã€ã¢ã³ãã¯1ã€ã ãã§ãããèš±å¯ãããã¯ã©ã€ã¢ã³ãã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŠããããè€æ°ã«æ¡åŒµããããšã¯é£ãããããŸããã ãã ããStepicaã§äºéã®ç掻ãéãåŠçã«ãµããããããŸããã
ãããžã§ã¯ãããªãŒã®æ§ç¯
ãããžã§ã¯ãããªãŒã®æ§ç¯ã¯ããã©ã°ã€ã³ã®æåã®ããŒãžã§ã³ã«æ¯ã¹ãŠå€§å¹ ã«å€æŽãããŸããããã«ãŒãã«ã«å¯ŸããŠã¯æ¯èŒç匱ãã§ãã
ããã§ãã³ãŒã¹ãããŠã³ããŒãããããã£ãã·ã¥ããããã£ãã·ã¥ããã®ã¿æ§ç¯ãããŸãã ããã¯ããããžã§ã¯ãã®æ§ç¯ãé ãããã«å®çŸãããŸãããã³ãŒã¹å šäœãããŠã³ããŒãããã«ã¯ãçŽ100件ã®ãªã¯ãšã¹ããå®äºããå¿ èŠããããŸãã ããã§ã¯ãå€ãã®IDãAPIãžã®1ã€ã®ãªã¯ãšã¹ãã«çµåããããšã§ãå€§å¹ ãªé«éåãå®çŸããŸããã
ãã©ã°ã€ã³ã®6æããŒãžã§ã³ã¯Yandex.Translatorã«ãã£ãŠãµããŒããããã³ãŒã¹åãã¬ãã¹ã³ãã»ã¯ã·ã§ã³ãè±èªã«ç¿»èš³ããŸããã ããã¯ãJavaã®ããã±ãŒãžåãè±èªã§ãããç¹å®ã®ãã¡ã€ã«ãã¹ãããã«å¯Ÿå¿ããããã«å¿ èŠã§ããã ãããŠãããã¯å°ãäžå¿«ã§ããã éä¿¡ããåã«ãã¡ã€ã«ãç·šéããå¿ èŠããããè¿œå ã®å¶éã課ããŸããã
ããã§ãã¹ãããã¬ãã«ããœãŒã¹ã®ãããã£ã¬ã¯ããªã«å¯Ÿå¿ããããã«ãªã£ããããããã¯äžèŠã«ãªããŸããã ããããããã§ãããã£ã¬ã¯ããªã«ã¯çŸåšäœæ¥åïŒlesson1 / task1ïŒãããã TreeStructreProviderã®å©ããåããŠããã£ã¬ã¯ããªåã®æ¶ç©ºã®çœ®æããããã³ãŒã¹ã®èšèªã§è¡šç€ºãããŸãã
TreeStructureProviderã®ãªã³ /ãªãã
TreeStructureProviderã¯ãã / src / hideãã£ã¬ã¯ããªãé衚瀺ã«ããŸãã ãã®ãã£ã¬ã¯ããªã«ã¯ãç°ãªãèšèªã§ã¹ããããã³ãã¬ãŒããä¿åãããŸãã ãŸããèšèªãå€æŽãããšããã¡ã€ã«ã移åãããŸãã
ãã©ã°ã€ã³ã®äŸåé¢ä¿
ãã®åçã¯ãJetBrainsã®ãã¹ãŠã®æè²çšãã©ã°ã€ã³ãšãStepikãã©ã°ã€ã³ãšãã®äŸåé¢ä¿ã瀺ããŠããŸãã PyCharmã®Lilacãã©ã°ã€ã³ã衚瀺ãããŸãã ãã©ã°ã€ã³ãæ©èœããã«ã¯ãããã«3ã€ã®ãã©ã°ã€ã³ãå¿ èŠã§ããããšãããããŸãã PythonäŸåé¢ä¿ã¯ãŸã æ£ããæ§æãããŠããŸããïŒãããã£ãŠãæåã§ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãïŒã èå³æ·±ãããšã«ãCommunityãšUltimate IDEAã¯ç°ãªããã©ã°ã€ã³ã«äŸåããŠããŸãã Edu-IntelliJã¯ããããžã§ã¯ããããŒãžã£ãŒã®åãªãæ¡åŒµãã€ã³ãã§ãã ããããããã®äŸåé¢ä¿ãåé€ããŸãã
ãŸããã«ãŒãã«ãžã®äž»ãªäŸåé¢ä¿ã¯æ®ã£ãŠããŸããã«ãŒãã«ã®çŸåšã®å€æŽã¯ãŸã å ¬åŒãªããžããªã«ã¢ããããŒããããŠããªããããäžå®å®çãæåã§ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã ãã®å ŽåãEdu-Javaããã³Edu-Kotlinãã©ã°ã€ã³ã¯ãŸã æ©èœããŸããã
æ°ããUI
æåã«è¿œå ããã®ã¯ãèšå®ã§ã®æ¿èªãGitHubã§ãã
ãã ãããã®ã¢ã¯ã·ã§ã³ããŸã ã¹ããããããšãããäŸµå ¥çãªæ¿èªãåŸãããŸãã
ãããžã§ã¯ããæ§ç¯ãããšãããµãã¹ã¯ã©ã€ãããŠããã³ãŒã¹ã®ãªã¹ãããã³ãŒã¹ãéžæã§ããŸãã ããããããã¯ãããããã¹ãŠãã©ã°ã€ã³ãšäºææ§ããããšããæå³ã§ã¯ãããŸããã ãšã©ãŒãªãã§ã³ãŒã¹ãäœæããã«ã¯ãããã°ã©ãã³ã°ã¿ã¹ã¯ãå«ãå°ãªããšã1ã€ã®ã¹ããããå¿ èŠã§ãã
ãã®ãŠã£ã³ããŠã§ã¯ãç®çã®ããã°ã©ãã³ã°èšèªãéžæã§ããŸããã䜿çšã§ããªãå Žåã¯ãæã人æ°ã®ããèšèªãéžæãããŸãã
åç §ã«ãã£ãŠã³ãŒã¹ãã¢ã³ããŒãããæ©äŒã¯ãŸã ãããŸããã以åã«ã³ãŒã¹ã«ãµãã¹ã¯ã©ã€ãããŠããªãå Žåã¯ããµãã¹ã¯ãªãã·ã§ã³ãçºçããŸãã ãªã³ã¯ãã£ãŒã«ãã«ãã³ãŒã¹IDãŸãã¯ã³ãŒã¹ããã®ãªã³ã¯ãå ¥åã§ããŸãã
ã¹ãããã®ã¹ããŒã¿ã¹ã¯ãããžã§ã¯ãããªãŒã«è¡šç€ºãããŸãã
ãŸããäž»ãªã¢ã¯ã·ã§ã³ã¯å³åŽã®ã¿ã¹ã¯ã®èª¬æããã«ã«ãããŸãã
ãã®äžã«ã¯ããœãªã¥ãŒã·ã§ã³ã®éä¿¡ãå/次ã®ã¹ããããæåããããçŽãïŒãŸã å©çšã§ããŸããïŒãææ°ã®ãœãªã¥ãŒã·ã§ã³ã®ããŠã³ããŒããèšèªã®å€æŽããããŸãã
äºææ§
Stepik.orgã«ã¯ãç¹å®ã®ã³ãŒã¹ããµãŒãããŒãã£ã¢ããªã±ãŒã·ã§ã³ãšäºææ§ããããã©ãããç解ããããã®APIããŸã ãªãã®ã§ããã¹ãŠãã©ã®ããã«æ©èœããããæ³åãããšäŸ¿å©ã§ãã
æ¿èªåŸããã©ã°ã€ã³ã¯ãããžã§ã¯ãããªãŒãããŠã³ããŒãããŸããããã«ãããã³ãŒã¹ã®éããŠããéšåã®ãã¹ãŠã®ã¹ãããã«é¢ããæ å ±ãåéãããŸãã 次ã«ããµããŒããããŠããã¹ãããã®ããŒã¿ã®ã¿ãä¿åããŸãã çŸæç¹ã§ã¯ããããã¯ãã³ãŒããã¿ã€ãã®ã¿ã¹ã¯ã®ã¿ã§ãã ãã ãããã®ã¿ã€ãã®ã¿ã¹ã¯ã«ã¯ç¹æ®æ§ããããŸã-é ããããã³ãã¬ãŒãã䜿çšããŸãã é ããã¿ãŒã³ã¯ããã¡ã€ã«ã®å é ãšæ«å°Ÿã«è¿œå ãããã³ãŒãã®äžéšã§ãã ãŸããå®çŸ©äžãåŠçã¯å©çšã§ããŸããã
Javaã®äŸãèããŠã¿ãŸãããã ãã³ãã¬ãŒãã䜿çšãããšãæåž«ã¯å¥ã®ã¡ãœãããå®è£ ããããã®ã¿ã¹ã¯ãäœæã§ããã¡ãœããã¯ãµãŒããŒäžã®æ¢åã®ã¯ã©ã¹ã«ã©ãããããŸãã ãããã£ãŠããã¹ãŠã®Javaã³ãŒããã¯ã©ã¹ã«å«ãŸããŠããå¿ èŠããããããåŠçã¯æ£ãããœãªã¥ãŒã·ã§ã³ãã³ã³ãã€ã«ããŸããã
ããããè¯ããã¥ãŒã¹ã¯ããã®ãããªã¿ã¹ã¯ãããã»ã©å€ããªãããšã§ãã ã»ãšãã©ã®å ŽåãèªåŠã³ãŒã¹ã§èŠãããŸãã
ãããã£ãŠããã©ã°ã€ã³ã¯ã¢ã«ãŽãªãºã ãšHadoopã® ã³ãŒã¹ã«æé©ã§ãã
ä»åŸã®èšç»
è¿ãå°æ¥ãããŸããŸãªããã°ã©ãã³ã°èšèªã®ãµããŒããéçºããããšèããŠããŸãã çŸæç¹ã§ã¯ãRãScalaãStepik Unionã«ç°¡åã«è¿œå ã§ããŸãããããšãã°ãHaskellã®ãµããŒãã¯ãŸã æªçã§ãã ãŸããC ++ã§ã¯ããã«è€éã«ãªããŸããããã§ã¯ãCLionçšã«å¥ã®ãã©ã°ã€ã³ãäœæããå¿ èŠããããŸãã
ããã«ããã©ã°ã€ã³ã«ããä»ã®ã¿ã€ãã®ã¿ã¹ã¯ã®ãµããŒãã®å®è£ ãæ€èšããŠããŸãã
è¬èŸ
ãã«ããšé«å質ã®ã³ã¢ãæäŸããŠãããPyCharmããŒã ã«æè¬ããŸãã
ãããã«
ã³ã¡ã³ããVKãã©ã°ã€ã³ã®äœæè ãšã®è°è«ã§ããã©ã°ã€ã³ã«é¢ãã質åããã£ãŒãããã¯ãææ¡ã建èšçãªæ¹å€ãåãã§åãåããŸã ã
ãªã³ã¯ïŒ Stepik.orgãã©ã°ã€ã³ ã StepikOrg / intellij-community ã Stepik APIããã¥ã¡ã³ã ã IntelliJ Platform SDKããã¥ã¡ã³ã ã IntelliJ Platform SDKããã¥ã¡ã³ãã® ãªããžããª