åäžã®ãããžã§ã¯ãã®å éšããŒãºã«åãããŠSDKãäœæãããšãå€ãã®ããšãç°¡çŽ åãããŸãïŒäžäœäºææ§ã®åé¡ã¯ããã»ã©æ·±å»ã§ã¯ãªãã詳现ãªããã¥ã¡ã³ããäœæãã代ããã«ãååã®è³ªåã«çŽæ¥çããããšãã§ããæ€åºããããšã©ãŒã¯ãããžã§ã¯ãã«æ¯èŒçç°¡åã«å«ããããšãã§ããŸãã 倧äŒæ¥ã®ãã¹ãŠã®ãããžã§ã¯ãã«å¯ŸããŠSDKãå®è¡ããããšãããã«å€ãã®åé¡ãçºçããŸãã ããããSDKãäžçäžã®ãµãŒãããŒãã£ã®éçºè åãã«èšèšãããŠããå Žåãåªããããã¥ã¡ã³ããèªåãã¹ããªã©ããªããã°äžå¯èœã§ãã APS JavaScript SDKã¯åŸè ã«èµ·å ããå¯èœæ§ããããŸãããã®èšäºã§ã¯ãSDKã䜿çšããã䜿çšãããµãŒãããŒãã£ã®éçºè ãã©ã®ããã«æ©èœããã§ããéãç°¡åã«äœæ¥ã§ããããã«ãããã«ã€ããŠèª¬æããŸãã
è€æ°æåãèªã¿ãããªã人ã®ããã®ã¹ã©ã€ã ã
ãããŠãæããã£ãã¡ãªäººã®ããã«ïŒ ç§ãã¡ ãæã«å ¥ãããã®ãšãµã³ãããã¯ã¹
æè¡çãªè©³çŽ°ãšã³ãŒãã«ã®ã¿èå³ãããå Žåã¯ã第2éšããããã«èªã¿å§ããããšããå§ãããŸãã
ãªã
åçã«ç€ºãããŠããããã«ã泚ç®ãéããããã«æ°ããã¿ã€ãã®è»äž¡ãèæ¡ããããã«ãç¬èªã®SDKã¯å¿ èŠãããŸããã§ããã
Parallels Automationã® OSSã·ã¹ãã å ã®ãã©ã°ã€ã³ã·ã¹ãã ãšParallels Pleskãã¹ãã£ã³ã°ã³ã³ãããŒã«ããã«ããµããŒãããããã«å¿ èŠã§ããã ãããã®ã·ã¹ãã ã¯ããŸããŸãªã³ãŒãããŒã¹ã«åºã¥ããŠãããéåžžã«å€§èŠæš¡ã§ãã Parallels Automationã«ã¯æ°çŸäžè¡ã®ã³ãŒããããããœãªã¥ãŒã·ã§ã³èªäœã¯æçµè£œåã§ã¯ãããŸããã æœåšçãªã¯ã©ã€ã¢ã³ããšå¥çŽãç· çµããã補åã«ãã©ã³ããä»ããããŸãã 補åãæ¡åŒµããå¿ èŠããã£ãããããµãŒãããŒãã£ã®éçºè ãUIãçµ±äžçã«äœæã§ããããã«ããå¿ èŠããããŸããã
Parallels Automationã®æ確ãªã¢ã€ãã¢ãåŸãã«ã¯ã OSSãšã¯äœããç解ããå¿ èŠããããŸãã ããã¯ããããã¯ãŒã¯ã€ã³ãã©ã¹ãã©ã¯ãã£ãã¢ã«ãŠã³ãã£ã³ã°ãããã³ãªãœãŒã¹ã®å²ãåœãŠã管çããéçšãµããŒãã·ã¹ãã ã®ã¯ã©ã¹ã§ãã äž»ãªæ¶è²»è ã¯ãéä¿¡ãšå€§èŠæš¡ãªãã¹ãã£ã³ã°äºæ¥è ã§ãã ã€ã³ãã©ã¹ãã©ã¯ãã£èªäœã管çããã ãã§ãªãã顧客ã«ãµãŒãã¹ã販売ããããšãéèŠã§ãã ãµãŒãã¹ã®è²©å£²ãããé»æ°éä¿¡ã¯è¯ãåå ¥ãåãåããŸãã 1,000äžäººã®ãŠãŒã¶ãŒãããé»æ°éä¿¡ãæ³åããŠãã ããã ãŠãŒã¶ãŒã®1ïŒ ã1ãã«çžåœã®ãµãŒãã¹ãè³Œå ¥ããŠãããã®åçã¯100,000ãã«ã«ãªããŸãã
APS
ãµãŒãã¹ãParallels Automationãšã³ã·ã¹ãã ã«çµ±åã§ããParallelsã«ãã£ãŠéçºãããæšæºã æšæºã®ææ°ããŒãžã§ã³ã¯APS 2㧠ãããŒãžã§ã³1.xã®ãšã©ãŒãä¿®æ£ããŸãã
APS 1.x
APS 1.xã§ã¯ ãçµ±åå¯èœãªãªããžã§ã¯ãã®ããžãã¹ã¢ãã«ãèšè¿°ããã¡ã¿ãã¡ã€ã«ã§UIã宣èšçã«èšè¿°ããããšã§ãã¢ããªã±ãŒã·ã§ã³ãçµ±åã§ããŸããã ãããã£ãŠãUIã¯ããžãã¹ã¢ãã«ããèªåçã«çæãããUXã«æªåœ±é¿ãåãŒããŸããã ã¹ã¯ãªããæåã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãå®çŸããã®ã¯äžå¯èœã§ãã ãããã£ãŠã APS 2.xãäœæãããŸããã
APS 2.x
APS 2ã§ã¯ãããžãã¹ã¢ãã«ã¯ãã¬ãŒã³ããŒã·ã§ã³ããžãã¯ããå®å šã«åé¢ãããŠããŸããã ããžãã¹ãªããžã§ã¯ããRESTã§å©çšå¯èœã«ãªããŸããã
æ¿ããè°è«ãšãã¶ã€ã³ã¬ãã¥ãŒã®åŸãã·ã³ãµãŒããŒã¢ãŒããã¯ãã£ã«èœã¡çããŸããããã®ã¢ãŒããã¯ãã£ã§ã¯ãJavaScriptãéåžžã«ç©æ¥µçã«äœ¿çšããŠãUIãHTMLã§èšè¿°ãå§ããŸããã ããã«ãããå€§å¹ ãªå¶éãªãã«ã¹ã¯ãªããæåã®ã€ã³ã¿ãŒãã§ã€ã¹ãäœæã§ããŸããã
å¶éäºé
ãŸã å¶éããããŸãããã
ããšãã°ã Parallels Desktop for Macãšã¯ç°ãªãã Parallels Automationã¯ãã®ãŸãŸäœ¿çšããããšã¯ã§ããŸããã ååãšããŠãããã販売ããããšãæ·±å»ãªå¥çŽãç· çµããã Parallelsãã©ã³ãã¯ãããè³Œå ¥ãããã¹ãã£ã³ã°æ¥è ãŸãã¯éä¿¡äŒç€Ÿã«æå©ã«é ããŸãã ãããã£ãŠã APSã®UIã¯ãã©ã³ãåãããã¯ãã§ããã åè¿°ã®ããã«ãéçºè ã®ã¬ãã«ã¯å€§ããç°ãªãå¯èœæ§ããããŸãã åçšè£œåãšã³ããŒã¬ããã®å¶éä»ãã©ã€ã»ã³ã¹ã¯ãç§ãã¡ã«é©åããŸããã§ããã
APS JS SDK
ãã®çµæãéçºè ãããŒã¯ã¢ããããæœè±¡åã§ããç¬èªã®JavaScript SDKãäœæãããšããã¢ã€ãã¢ãæãã€ããŸããã æœè±¡åã¯ãç§ãã¡ãšãšã³ãéçºè ã«ãšã£ãŠè¿œå ã®ããŒãã¹ã§ãã å³å¯ã«èšãã°ãã¬ã¬ã·ãŒããŒã¯ã¢ããã¯ã»ãã³ãã£ãã¯ã§ã¯ãããŸããã
ãŸããããã¥ã¡ã³ããæåã«åŒ·èª¿ããŸããã JS SDKã¯å éšã§ã®ã¿äœ¿çšãããããã§ã¯ãããŸããã
ã©ããã£ãŠ
ã©ã®ããã«ããŠãã¬ãŒã ã¯ãŒã¯ãäœæããã©ã®ãããªã«ãŒã«ã«åŸã£ãã®ã§ããïŒ
- æ¢åã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŸããã
- ææ ®æ·±ãAPIãå¿ããªãã§ãã ããã
- ãã¹ãé§åéçºã«æºæ -æåã«äœæãããèªåãã¹ãã
- ããã¥ã¡ã³ãã«åãçµãã
- ãã¬ãŒã ã¯ãŒã¯ãå®éã«è©Šãããšãã§ãããµã³ãããã¯ã¹ã®äžã
æ¢åã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšãã
ç¬èªã®JavaScriptãã¬ãŒã ã¯ãŒã¯ã®äœæãšä¿å®ã¯ãéåžžã«æéã®ãããã¿ã¹ã¯ã§ãã ãããã£ãŠãJS SDKãæ§ç¯ããããã®åºç€ãšããŠãæ¢åã®ãã¬ãŒã ã¯ãŒã¯ã®1ã€ãæ¡çšããããšã«ããŸããã 圌ã¯ããã€ãã®èŠä»¶ãæºãããªããã°ãªããŸããã§ããã
- ãªããªã å°æ¥å€æŽãããå¯èœæ§ã®ããã¿ã€ãã»ããçšã®æ¢åã®ã³ãŒãããŒã¹ãæ¢ã«ãããŸãããUIèŠçŽ ãçµ±åãªããžã§ã¯ããšããŠæ©èœãããããšæããŸãã å¯èœãªéãJSããžãã¯ããåé¢ãããHTMLãã³ãã¬ãŒãã«åºã¥ããŠã£ãžã§ããã§ãã
- ãŠãŒã¶ãŒã®ã¿ã¹ã¯ã¯éåžžã«ç°ãªãããããã¬ãŒã ã¯ãŒã¯ã¯å€çš®å€æ§ãªUXãªãã·ã§ã³ããµããŒãããã®ã«ååãªæè»æ§ãå¿ èŠã§ãã ã
- éçºè ã«ããã€ãã®è€éãªãããã©ã€ãšã¿ãªãã¯ãããžãŒã匷å¶çã«åŠç¿ãããããããŸããã§ããããã®ãããåºæ¬çãªãã¬ãŒã ã¯ãŒã¯ã¯å¯èœãªéãåºãããå¿ èŠããããŸãã
- æ¢ã«è¿°ã¹ãããã«ããŠãŒã¶ãŒã¯ã¢ããªã±ãŒã·ã§ã³ã®èšèšãã«ã¹ã¿ãã€ãºã§ããããããã¬ãŒã ã¯ãŒã¯ã«ãããŠã£ãžã§ããã®å€èŠ³ãç°¡åã«å€æŽã§ããã¯ãã§ãã
- ããã«ãç§ã¯ç¬èªã®ãŠã£ãžã§ããã®äœæãããã«éå§ã§ããå šäœçãªãã¬ãŒã ã¯ãŒã¯ãèŠã€ãããã£ãã®ã§ãã
- ãããŠããã¡ããã誰ããçŸãããã€ãããã¯ãªãŠã£ãžã§ãããæããŠããã®ã§ããã¬ãŒã ã¯ãŒã¯ã«ã¯ãŠã£ãžã§ãããå«ãŸããŠããããå°ãªããšãäœæã§ããããã«ããå¿ èŠããããŸãã
ãªãã·ã§ã³ãšããŠã以äžãèæ ®ããŸããã
- Extjs
- JQuery UI
- ããŒããŒïŒRequireJS / CommonJS / ...ïŒ+ MV *ãã¬ãŒã ã¯ãŒã¯ïŒKnockoutJS / AngularJS / ...ïŒ
- éå ŽããŒã«ããã
Extjs
å€æ°ã®ã¯ãŒã«ãªãŠã£ãžã§ãããšäŸ¿å©ãªããŒã¿ãã€ã³ãã£ã³ã°ã¢ãã«ãåããã匷åã§äººæ°ã®ããã掻çºã«éçºãããŠãããã¬ãŒã ã¯ãŒã¯ã ããã§ããããã¯ãååŸããŠäœ¿çšããããã«äœæããããã®ã§ãã ããã¯ãç¬èªã®ãã¬ãŒã ã¯ãŒã¯ãäœæããããã®åºç€ã§ã¯ãããŸããã ãã®ãŠã£ãžã§ããã¯ã«ã¹ã¿ãã€ãºãé£ããããã¶ã€ã³ã®ã«ã¹ã¿ãã€ãºã¯ææ°ããŒãžã§ã³ã§ã®ã¿è¿œå ãããŸãã ããããç§ãã¡ã«ãšã£ãŠã®äž»ãªæ¬ ç¹ã¯ããã¡ãããéåžžã«é«ããã€ã€ã«ãã£ã§ããã
JQueryUI
ãšã³ããªã®ãããå€ãäœãããã€ã€ãªãã£ãäžè¶³ããŠãããããã«äººæ°ã®ãããã¬ãŒã ã¯ãŒã¯ã å ¬åŒã®äŸçµŠã«å«ãŸãããŠã£ãžã§ããã§ã¯ååã§ã¯ãããŸãããããµãŒãããŒãã£ã®éçºè ããã®ãŠã£ãžã§ãããéåžžã«å€ããããããããã¯åé¡ã§ã¯ãããŸããã æ®å¿µãªããã調æ»ã®æç¹ã§ããã¬ãŒã ã¯ãŒã¯APIã¯ãŸã å®å šã«ã¯å®ãŸã£ãŠãããããã°ãã°å€æŽãããŸããã ãŸãããŠã£ãžã§ããã³ãŒãã¯ã¬ã€ã¢ãŠãããåé¢ãããŠããŸããã
ããŒããŒ+ MV *ãã¬ãŒã ã¯ãŒã¯
調æ»ã®æç¹ã§ã¯ãè§åºŠã®æªæ¥ã¯ãããŸãã§ãããã¯ã¢ãŠãã¯éåžžã«éãããã¿ã¹ã¯ã解決ããŸããã ãããã顧客ãå¥çŽãå³ããç· ãåãããããããæçµçãªéçºãã§ããã ãæ©ãéå§ããããã«ãå šäœçãªåºæ¬çãªãã¬ãŒã ã¯ãŒã¯ãå¿ èŠã§ããã
éå ŽããŒã«ããã
匷åãªAMDããŒã¹ã®ã¢ãžã¥ã©ãŒãã¬ãŒã ã¯ãŒã¯ã ãã³ãã¬ãŒãããµããŒããããè±å¯ã§ç°¡åã«ã«ã¹ã¿ãã€ãºã§ãããŠã£ãžã§ããã Deferredããã³Promiseã«å¯Ÿããé·å¹Žã®ãµããŒãã ãã€ã€ãªãã£ã®äžè¶³ã ãããã éå Žã¯åŒ·åŒ±ã§ãã ãšã³ããªã®ãããå€ãæ¯èŒç倧ãããããåæ£ãäžååã§ãã ããã«ã圌ã¯æè¿ãã¢ãã€ã«ããã€ã¹ã«ç©æ¥µçã«ç§»è¡ãå§ããŸããã
ãã ãã Dojoã䜿çšããããšã«ããŸããã
- ã·ã¹ãã ã®è©³çŽ°ã¯ãã¢ãã€ã«ããã€ã¹ã§ã®ç©æ¥µçãªäœ¿çšãæå³ãããã®ã§ã¯ãããŸããïŒä»ã§ã¯éåžžã«å€ããå€æŽãããŠããŸãããäžæ¹ã§ããã¬ãŒã ã¯ãŒã¯ã®å¯Ÿå¿ããåé¡ã解決ããŸããïŒã
- ãšã³ããªã®ãããå€ãäžããããšããŸããããããã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãã
Dojoã®ã¡ãªããã®è©³çŽ°ã«ã€ããŠã¯ã David Walshã åç §ããŠãã ãã ã ã³ã¡ã³ãã§DojoãšExtJSã®æ¯èŒãèªãããšãã§ããŸãã
æãããã®ããAPI
ãã¬ãŒã ã¯ãŒã¯ã®åºç€ã¯ãããèããããAPIã§ãã
AMD
JS SDKã®åºç€ã¯ããŠã£ãžã§ãããããŒã¿ãæäœããããã®ã³ã³ããŒãã³ããããŸããŸãªè£å©ãŠãŒãã£ãªãã£ãªã©ã®ããžã¥ã¢ã«ã³ã³ããŒãã³ãã§ããAMDã¢ãžã¥ãŒã«ã§ãã ããã«ãAMD圢åŒã§ã¯ããã®ããã±ãŒãžåœ¢åŒããµããŒããããµãŒãããŒãã£ã©ã€ãã©ãªããããžã§ã¯ãã«å«ããããšãã§ããŸãã ãããã£ãŠãéçºè ã奜ã¿ã«å¶éããããšã¯ãããŸããã
ãŠã£ãžã§ãã
ããžã¥ã¢ã«ã³ã³ããŒãã³ãïŒãŠã£ãžã§ããïŒã¯ãHTMLè¡šçŸãšã¯è«ççã«åé¢ãããŠããŸãã ããããã£ã®å€ãåçã«å€æŽããçžäºã«ç¶æ¿ã§ããŸãã éçºè ã®äŸ¿å®ã®ããã«ããŠã£ãžã§ãããèšè¿°ãã3ã€ã®æ¹æ³ããããŸãã ããã«ã1ã€ã®ç»é¢ã§1ã€ã ãã䜿çšããå¿ èŠã¯ãŸã£ãããªããã¡ãœãããèªç±ã«çµã¿åãããããšãã§ããŸãã
ãŠã£ãžã§ãããçžäºã«çµã¿èŸŒã
ãŠã£ãžã§ããã¯ããã³ãã¬ãŒãã¬ãã«ã§çžäºã«å«ããããšãã§ããŸãã ããšãã°ãaps / SliderãŠã£ãžã§ããã¯ãdijit / form / HorizoâântalSlideræ°Žå¹³ã¹ã¯ããŒã«ãšaps / TextBoxã§æ§æãããŸãã
説æãããã³ãã¬ãŒããžã®ãŠã£ãžã§ããã®çµã¿èŸŒã¿ã«å ããŠãåãŠã£ãžã§ãããåçã«è¿œå ããããç»é¢ã説æãããšãã«è¿œå ãããã§ããŸãã ããšãã°ããã©ãŒã ã«å ¥åãè¿œå ããŸãã
宣èšççºè¡š
ç§ãã¡ã®ãã¬ãŒã ã¯ãŒã¯ã¯ãç»é¢ãèšè¿°ãã3ã€ã®æ¹æ³ããµããŒãããŠããŸãã æåã¯å®£èšçã§ãã ãã®äžã§ããŠã£ãžã§ãããšãã®ããããã£ã®å Žæã¯ãæå®ãããç¹å¥ãªå±æ§ãæã€HTMLã¬ã€ã¢ãŠãã®åœ¢åŒã§èšå®ãããŸãã ãŠã£ãžã§ããã®éå±€ã¯ãHTMLèŠçŽ ã®éå±€ã«ãã£ãŠå®çŸ©ãããŸãã ããŒãžãããŒãããåŸããŠã£ãžã§ãããäœæããããŒãµãŒãåŒã³åºãããŸãã ããŒãµãŒã¯ãããŒãžå šäœãŸãã¯ãã®åå¥ã®éšåã§åŒã³åºãããšãã§ããŸãã
ãµã³ãã«ã³ãŒã
require(["dojo/parser", "aps/ready!"], function(parser){ parser.parse(); });
<fieldset data-dojo-type=âaps/FieldSetâ title=âI am aps/FieldSetâ> <input type=âcheckboxâ data-dojo-type="aps/CheckBox" data-dojo-props=" label: 'CheckBox', description: 'I am aps/CheckBox'" > </fieldset>
ãŠã£ãžã§ãããœãããŠã§ã¢ã®ãç¥ãã
ãŠã£ãžã§ããã宣èšãã2çªç®ã®æ¹æ³ã¯ãœãããŠã§ã¢ã§ãã requireã䜿çšããŠãå¿ èŠãªã¢ãžã¥ãŒã«ãæ¥ç¶ããããã©ã¡ãŒã¿ãŒã䜿çšããŠã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºãããšã«ãããå¿ èŠãªãŠã£ãžã§ãããäœæãããŸãã ãŠã£ãžã§ããéå±€ã¯ã addChildã¡ãœããã䜿çšããŠåãŠã£ãžã§ãããè¿œå ããããšã«ããå®çŸ©ãããŸãã
ãµã³ãã«ã³ãŒã
require([ "aps/FieldSet", "aps/CheckBox", "aps/ready!" ], function (FieldSet, CheckBox) { var fs = new FieldSet({ title : âI am aps / FieldSetâ }, "idDiv"); fs.addChild(new CheckBox({ label : âCheckBoxâ, description : âI am aps / CheckBoxâ }); fs.startup(); });
ããŒãããŒããŒã䜿çšãã
ç»é¢ã説æãã3çªç®ã®æ¹æ³ã¯ãããŒãããŒããŒã䜿çšããããšã§ãã ããã¯ç§ãã¡ãéçºãããã®ã§ããããå§ãããŸãã ãŠã£ãžã§ããã®å Žæãšãã®ããããã£ã¯ãJSONã®ãããªæ§é ã®åœ¢åŒã§èšå®ãããŸãã åãŠã£ãžã§ããã¯ãã¢ãžã¥ãŒã«åãã³ã³ã¹ãã©ã¯ã¿ãŒãã©ã¡ãŒã¿ãŒãåèŠçŽ ã®é åãšãã3ã€ã®èŠçŽ ã§èšè¿°ãããŸãã 2çªç®ãš3çªç®ã®èŠçŽ ã¯ãªãã·ã§ã³ã§ãã ãŠã£ãžã§ããã«å ããŠãããŒããŒã¯HTMLã¿ã°ãäœæã§ããŸãã
- HTMLã®è§£æã«ç¡é§ãªæéã¯ãããŸããïŒæåã®æ¹æ³ïŒã
- ããã°ã©ã ã®ã¢ããŠã³ã¹ã¡ã³ãïŒ2çªç®ã®æ¹æ³ïŒã§ã¯ãè«ççãªé åºã«éåããŸããæåã«åãŠã£ãžã§ãããäœæããã次ã«èŠªïŒã³ã³ããïŒãäœæãããŸãããããã¯äžäŸ¿ã§èªã¿ã«ããã§ãã
ãµã³ãã«ã³ãŒã
require([ "aps/load", "aps/ready!" ], function (load) { load(["aps/FieldSet", { title : "I am aps / FieldSet" }, [ ["aps / CheckBox", { label : "CheckBox", description : "I am aps / CheckBox" } ]]]); });
ããŒã¿ãœãŒã¹
ãŠã£ãžã§ããã®ããŒã¿ãœãŒã¹ãšããŠããªã¢ãŒããœãŒã¹çšã®ã¹ãã¢ãšããŒã«ã«ãœãŒã¹çšã®2ã€ã®ã¢ãžã¥ãŒã«ã䜿çšã§ããŸãã
ãµãŒããŒãªã¯ãšã¹ãã®å Žåãaps / Storeã¯æ¡åŒµããŒãžã§ã³ã®RQLã¯ãšãªèšèªã䜿çšããŸããããã¯aps / Memoryã§ããµããŒããããŠããŸãã
ãµã³ãã«ã³ãŒã
require([ "aps/Store", "aps/Grid", "aps/ready!" ], function (load) { var store = new Store({ target : "http://localhost/resources" }); var grid = new Grid({ columns: layoutSimpleGrid, store: store }, "gridDiv"); });
ããŒã¿ãã€ã³ãã£ã³ã°
ããŒã¿ãšãŠã£ãžã§ããã®åæ¹åéä¿¡ã«ã¯ã ã¢ãã«ãã¡ããªãšatã¡ãœããã®ã¢ãžã¥ãŒã«ã䜿çšãããŸãã ããŒã¿ãšãŠã£ãžã§ãããæ¥ç¶ããå Žåã¯ãæž¡ãããã¢ãã«åãšãããã³ã°ããã¢ãã«ãªããžã§ã¯ãã®ããããã£åã䜿çšããŠãã³ã³ã¹ãã©ã¯ã¿ãŒãã©ã¡ãŒã¿ãŒãšããŠatã¡ãœãããæå®ããŸãã ãããã³ã°ã«å ããŠãã¢ãã«ã¯watchã¡ãœããã䜿çšããŠãã®ããããã£ã®å€ã远跡ããæ©èœããµããŒãããŠããŸãã
ãµã³ãã«ã³ãŒã
require([ "aps/TextBox", "dojox/mvc/getStateful", "dojox/mvc/at", "aps/ready!" ], function (TextBox, getStateful, at) { model = getStateful({val : "Hello, world!"}); new TextBox({value : at("model", "val")}, "divTB").startup(); });
ãã¹ãŠã®ã¢ãžã¥ãŒã«ã®ããããã£ãšã¡ãœããã®åœåã«é¢ããçµ±äžã«ãŒã«
åœåèŠåã¯ã·ã³ãã«ã§æšæºçã§ãïŒ
- ãã©ã€ããŒã/ä¿è·ãããããããã£ãšã¡ãœããã®ååã¯ãã¢ã³ããŒã¹ã³ã¢ã_ãã§å§ãŸããŸãã
- ã¡ãœãããé¢æ°ãããã³ããããã£ã®ååã¯å°æåã§å§ãŸããã¯ã©ã¹åã¯å€§æåã§å§ãŸããŸãã ã¯ã©ã¹ãããã¯ã¹ã€ã³ã®å Žåãã¢ã³ããŒã¹ã³ã¢ã倧æåã®åã«çœ®ãããŸãã
ãã¹ãŠã®ã¢ãžã¥ãŒã«ã«å ±éããŠãèªèº«ãšå€çãšã®çžäºäœçšã®æ¹æ³
- ããŒã¿ãšãŠã£ãžã§ããã¯ã Modelããã³Storeã¢ãžã¥ãŒã«ãä»ããŠæ¥ç¶ãããŸãã
- ãŠã£ãžã§ããã®ç¶æ ã®ç£èŠã¯watchã¡ãœããã䜿çšããŠå®è¡ããããŠã£ãžã§ããã¯ç¹å¥ãªã€ãã³ããçæãããããããã£ã®æäœã¯ãã¹ãŠsetã¡ãœãããšgetã¡ãœãããä»ããŠã®ã¿å®è¡ãããŸãã
ãŠã£ãžã§ããã®çžäºäœçšã®äŸ
ãŠã£ãžã§ãããšã®çžäºäœçšã®äŸãšããŠã ã°ãªãããŠã£ãžã§ããã®è¡ã®éžæãæ€èšããŸãã
æãåçŽãªå Žåãè¡ãéžæã§ããããŒãã«ãäœæããã«ã¯ãåæ§é ãè¡éžæã¢ãŒãïŒ1ã€ãŸãã¯è€æ°ã®è¡ãåæã«éžæã§ãããã©ããïŒãããã³ããŒã¿ãœãŒã¹ãæå®ããã ãã§ååã§ãã
æååãéžæãããŠããå Žåããã®IDã¯selectionArrayããããã£ã«ä¿åãããŠããç¹å¥ãªé åã«è¿œå ãããŸãã éžæãåé€ããããšãããããåé€ãããŸãã ãããã£ãŠãè¡ã®éžæãç£èŠããã«ã¯ãã³ãŒã«ããã¯ã¡ãœããwatchElementsãè¿œå ããã ãã§ååã§ãéžæãããè¡ã®ã»ãããå€æŽããããšèªåçã«åŒã³åºãããŸãã
åæ¹åéä¿¡ã ãããã£ãŠãããŒãã«å ã®è¡ãèŠèŠçã«åŒ·èª¿è¡šç€ºããã«ã¯ããã®idãselectionArrayã«è¿œå ããã ãã§ãã
ãµã³ãã«ã³ãŒã
var grid = new Grid({ // columns : layoutSimpleGrid, selectionMode : "single", store : store }); grid.get("selectionArray") // .watchElements(function (index, removals, adds) { alert(adds); }); // grid.get("selectionArray").push("ea7865aa");
èªåãã¹ã
ãã¹ãã¯éèŠã§ãããèªååããããã¹ãã¯äžå¯æ¬ ã§ãã ããã«ãããã³ãŒããå®å®ããç¶æ ã«ä¿ã€ããšãã§ããŸãã ãããŠãæåããéçºããæ¹ãè¯ãã§ãã ãããããã¹ããéçºããåã«ããã«ãã·ã¹ãã ã«ã€ããŠèããå¿ èŠããããŸãã
ãã«ãã·ã¹ãã
ãã«ãã¯ãæšæºã®ãã«ãã¹ã±ãžã¥ãŒã©ã§ããJenkinsãå®è¡ããŸãã Maven ã node.js ãããã³ãããã¬ã¹phantomjsãã©ãŠã¶ãŒãã¢ã»ã³ããªãã·ã³ã«ãããã€ãããŸãã ãã«ãã¯Mavenãã«ãã©ã€ããµã€ã¯ã«ã«çµã¿èŸŒãŸããJSHintã³ãŒãã®ãã§ãã¯ã clojureã³ã³ãã€ã©ãŒã®ã³ã³ãã€ã«ã ã¬ã€ã€ãŒã®äœæïŒãŸãã¯ãã¡ã€ã«ã®ããŒãžïŒãå«ãããã±ãŒãžåãçæãããã¢ãŒã«ã€ãã®ãã¹ãããã³nexusã¢ãŒãã£ãã¡ã¯ã管çã·ã¹ãã ãžã®ãããã€ãå«ãŸããŸãã
èªåãã¹ã
ãã¹ãã«ããããã¬ãŒã ã¯ãŒã¯ã®å šäœçãªå°æ¥ã®éåœã決å®ã§ããŸãã å®å®æ§ã¯éçºã®éµã§ãã
èªåãã¹ããäœæãããšãã«åŸã£ãããšïŒ
- ã€ã³ãã©ã¹ãã©ã¯ãã£ãªãã§å®è¡ã§ããŸã ã ãã¹ãã¯éçºè ã®äŸãšããŠåœ¹ç«ã¡ãŸãã
- ãªããªã ãã¬ãŒã ã¯ãŒã¯ã¯ã¢ãžã¥ãŒã«åŒã§ãããããã³ã³ããŒãã³ãããšã«å³å¯ã«å¥åã®ãã¹ããå¿ èŠã§ãã
- ãã¹ã㯠ãããã«å®è¡ããŠãã¬ãŒã ã¯ãŒã¯ã®äœ¿çšæ¹æ³ã確èªã§ããããã«ããã¬ãŒã ã¯ãŒã¯èªäœã®é£ ããã£ã¹ããªãã¥ãŒã·ã§ã³å ã«é 眮ããå¿ èŠããããŸãã
- æåŸã«ããã¹ããç解ããã«ã¯ãåœåèŠåãå³å¯ã«éµå®ããå¿ èŠããããŸãã ç§ãã¡ã®å Žåããã¹ããã£ã¬ã¯ããªã¯testã§å§ãŸãããã以å€ã¯ãã¹ãŠæåãã¹ãçšã§ãã
ãŠããããã¹ãã¯ãã¢ã»ã³ããªäžã«åžžã«å®è¡ããå¿ èŠããããŸãã å€ãã®å Žåãããã«æ°ããæ©èœãå¿ èŠã«ãªããŸãã åæã«ãéçºããã»ã¹äžã«ãäžéšã®ãã¹ãã¯ãäžç®ã§ããªãã·ã§ã³ã§ãããããããç¡å¹ã«ããŠãã誰ãå·ã€ããªããããšãããããŸããã ãã¹ãã¯ç¡å¹ã§ãã ããããå¥ã®ã ãããŠãæéã®çµéãšãšãã«ããŠããããã¹ãã®å®è¡ãç¡æå³ã«ãªãã»ã©ã®äžäžèŽã®æ°ãå€æããŸãã
å°ãªããšã1ã€ã®ãã¹ãã倱æãããšãã¢ã»ã³ããªã¯ãã£ã³ã»ã«ãããŸãã ãã¹ããç¡å¹ã«ããããšã¯ã§ããŸããã
ããŒã«éžæ
QUnitãšãä»®æ³ãã·ã³ã§phantomjs ãIEãFirefoxãããã³Safariãå®è¡ããç¬èªã®ã·ã¹ãã ãéžæããŸããã 以åã¯ã次ã®ããšã調ã¹ãŸããã
- TestSwarm
- Buster.js;
- DOH Robot;
- å€éšãã¡ãŒã ïŒãã©ãŠã¶ã·ã§ããããã©ãŠã¶ãªã©ïŒ;
- ã»ã¬ã³
QUnitãéžã¶çç±
ç§ãã¡ã®äž»ãªãã®ã¯ãã€ã³ã¹ããŒã«ã®å®¹æãã§ãã ã³ãŒããšãã¹ãã®äž¡æ¹ãèšè¿°ããããã®1ã€ã®JavaScriptããã°ã©ãã³ã°èšèªãããã¯éåžžã«äŸ¿å©ã§ãã QUnitã¯ã·ã³ãã«ã§åºãæ®åããŠããŸããå¿ èŠã«å¿ããŠããã¹ããç°¡åã«ã¢ãŠããœãŒã¹ã§ããŸãã
ãªãTestSwarmã§ã¯ãªã
TestSwarm㯠ãã€ã³ãã©ã¹ãã©ã¯ãã£ã«å€§ããçµã³ã€ããŠããŸãã ããããäž»ãªããšã¯ããã«ãã§ã¯ãªãããã«ãåŸã«ããŒã¯ãããŠããããšã§ãããããã¯ç§ãã¡ã®æ¹æ³è«ãšççŸããŠããŸãã
Buster.jsãéžã°ãªãçç±
ãã®ãã¬ãŒã ã¯ãŒã¯ã¯ããµãŒããŒãšã¯ã©ã€ã¢ã³ãã§ã¢ãžã¥ãŒã«ãå®è¡ããããã«èšèšãããŠããŸã-ãã®ãããªã¿ã¹ã¯ã¯ãããŸããã ããã«ã圌ã¯èªåã§ãã©ãŠã¶ãèµ·åããæ¹æ³ãç¥ããŸããã
Dojox Robotãéžã°ãªãçç±
Dojo Toolkitã«å«ãŸãããã¬ãŒã ã¯ãŒã¯ã æ®å¿µãªãããããã«ãããããããããã¯æŸæ£ãããããªãæ代é ãã§ãã
ãªãå€éšãã¡ãŒã ã§ã¯ãªã
å€éšã·ã¹ãã ã«çžããããã¯ãããŸããã§ãããããã«ãããã«ã¯ãã¢ã»ã³ããªãã·ã³ãžã®VPNã¢ã¯ã»ã¹ã®è€éãªæ§æãå¿ èŠã«ãªããŸãã ããã«ããããã®äœ¿çšã¯éåžžã«é«äŸ¡ã§ãã
ãªãã»ã¬ã³ã§ã¯ãªã
ããã°ããã€ã³ãã©ã¹ãã©ã¯ãã£ã®èª¿æŽãå¿ èŠã§ãã
åèš
ãã€ããªããSelenium ServerããããŸã ãããã¯ãå€éšããã®ã³ãã³ãã§ãä»®æ³ãã·ã³ã§ãã©ãŠã¶ãŒãèµ·åããŸãã ãã¹ãŠã®ãã¹ãã¯1ããŒãžã§å®è¡ããããã¹ããæåã§å®è¡ããå Žåãçµæãã³ã¬ã¯ã¿ãŒã«é ä¿¡ãããããã©ãŠã¶ãŒã«è¡šç€ºãããã§ããŸãã
ãã¹ãã€ã³ãã©ã¹ãã©ã¯ãã£ã³ã³ããŒãã³ã
ãã®å³ã¯ããã¹ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®ã³ã³ããŒãã³ãã瀺ããŠããŸãã ãã«ããµãŒããŒã§ãphantom.jsã䞊è¡ããŠèµ·åããïŒè¿ éãªçµæãåŸãããïŒãä»®æ³ãã·ã³äžã®ç°ãªãOSã§å®è¡ãããŠããç°ãªããã©ãŠã¶ãŒã§ãã¹ããããŸãã
ããã¥ã¡ã³ã
æãæŽç·ŽãããAPIã§ããã䟿å©ãªããã¥ã¡ã³ããå¿ èŠã§ãã APS JS SDKããã¥ã¡ã³ãã¯ã APIãšãªãã¡ã¬ã³ã¹ã¬ã€ãã® 2ã€ã®éšåã§æ§æãããŠããŸã ã
API
APIã»ã¯ã·ã§ã³ã«ã¯ãå©çšå¯èœãªãã¹ãŠã®ã¢ãžã¥ãŒã«ãšãã®ã€ã³ã¿ãŒãã§ã€ã¹ã®ç°¡åãªèª¬æãå«ãŸããŠããŸãã ãã®ã»ã¯ã·ã§ã³ã®äž»ãªç®çã¯ãSDKãæ¢ã«ç解ããŠãããã¡ãœãããŸãã¯ããããã£ã®ååšãšã¹ãã«ããã°ããæ確ã«ãããéçºè ã§ãã ãã®æ å ±ã¯ãã³ãŒãã®ãã«ãäžã«ã³ãŒãå ã®ã³ã¡ã³ãã«åºã¥ããŠçæãããŸãã
åç §ã¬ã€ã
åã¢ãžã¥ãŒã«ã®èª¬æã«ã¯ãããã¥ã¡ã³ãã®2çªç®ã®éšåã§ããã ãªãã¡ã¬ã³ã¹ã¬ã€ããã®å¯Ÿå¿ããããŒãžãžã®ãªã³ã¯ããããŸãã ãã®ã»ã¯ã·ã§ã³ã«ã¯ãAPS SDKã¢ãžã¥ãŒã«ãšãã®äž»ãªããããã£ãšã¡ãœããã®ïŒAPIãšæ¯èŒããïŒæ¡åŒµããã説æãå«ãŸããŠããŸãã SDKã®ãŠãŒã¶ãŒãçŽé¢ããåé¡ã«å¿ããŠå®æçã«æŽæ°ããã³æŽæ°ãããŸãã åãªãã¡ã¬ã³ã¹ã¬ã€ãã®èšäºã«ã¯ãã¢ãžã¥ãŒã«ã®äœ¿çšäŸãå«ãŸããŠããŸãã
äŸ
ã¢ãžã¥ãŒã«ã®äœ¿çšãšäœæã®äŸã¯ããŠã£ãžã§ããã宣èšãã3ã€ã®æ¹æ³ïŒå®£èšçãããã°ã©ã ãããŒããŒã®äœ¿çšïŒã®ãã¹ãŠã«ã€ããŠèª¬æãããŠããŸãã ããããå®è¡ããã³è©Šè¡ã§ããªãäŸã¯ã»ãšãã©é¢å¿ããããŸããã ãªãã¡ã¬ã³ã¹ã¬ã€ãã®åã¢ãžã¥ãŒã«ã®ããŒãžã«ã¯ãèªåãã¹ãã®ããããŒãžãžã®ãªã³ã¯ãå«ãŸããŠããŸãã ãŠãŒã¶ãŒã¯ãã¹ãã®å®è¡æ¹æ³ã確èªã§ãããœãŒã¹ã³ãŒããèŠããšããŠã£ãžã§ããã®ãã¹ãŠã®æ©èœã瀺ãäŸãèŠãããšãã§ããŸãã
ãµã³ãããã¯ã¹
ããããåžžã«èªåã§è©ŠããŠã¿ãããšæãã§ãããã ãããŠãã§ããã°ãè¿ éãã€ç°¡åã«ã ãããè¡ãã«ã¯ãã»ãšãã©ã®äŸãç¹å¥ãªãµã³ãããã¯ã¹ã§å®è¡ã§ããŸãã
ãµã³ãããã¯ã¹ãäœæãããšããæªåé«ãjsfiddleãããžã§ã¯ãã«è§Šçºãããããã apsfiddleãšåŒã°ããŸã ã ãã®ããã«ããŠãŒã¶ãŒã¯HTMLãšãã£ã¿ãŒãCSSãšãã£ã¿ãŒãJSãšãã£ã¿ãŒãããã³ã³ãŒãå®è¡ã®çµæã®4ã€ã®é åã䜿çšã§ããŸãïŒç»é¢ã®æå®ãããé åãšæ°ããã¿ãã®äž¡æ¹ã§ç¢ºèªã§ããŸãïŒã ã³ãŒããšãã£ã¿ãŒãäœæããããã«ã CodeMirrorãããžã§ã¯ãã䜿çšããŸããã
ãµã³ãããã¯ã¹ã«ããã¹ããæåã§å ¥åããããšã«å ããŠããã¡ã€ã«ããã©ãŠã¶ãŒãŠã£ã³ããŠã«ãã©ãã°ããã ãã§éãããšãã§ããŸãã ãšãã£ã¿ãŒã¯èªåçã«ãã£ã±ãã«ãªããŸãã åŸæ¥ã®æ¹æ³ã§ãã¡ã€ã«ãéãããšãã§ããŸãã
ã³ã©ãã¬ãŒã·ã§ã³ã«ã¯ã TogetherJSã䜿çšãããŸãã
ç·šéè ã®ãµããŒã
- æ§æ匷調衚瀺;
- å ¥åãããã³ãŒãã®ãªã³ã¶ãã©ã€ã§ã®æ€èšŒ;
- éãæ¬åŒ§ãšã¿ã°ã®èªå眮æã
- æãããã¿ã³ãŒããããã¯;
- çŸãããã©ãŒããã;
- ã¹ããŒããªã³ãŒãè£å®ã
èªåè£å®
éåžžãHTML + JSã®ãµã³ãããã¯ã¹ãäœæããéçºè ã¯ãåçŽãªãšãã£ã¿ãŒãšå ¥åãããã³ãŒããå®è¡ããããã¬ãŒã ã«éå®ãããŸãã ããã¯æ£ãããªããšèããŠããŸãã ãµã³ãããã¯ã¹ã«æ¥ã人ã¯ãã¬ãŒã ã¯ãŒã¯APIãããç¥ããªãã®ã§ãæ倧éã®ãã³ãããªããã°ãã»ãšãã©äœãã§ããªãã§ãããã ãã®ãããããŒã«ãããã䜿çšããŠã¹ããŒãã³ãŒãè£å®ãå®è£ ããŸããã
ãªãŒãã³ã³ããªãŒãã«ã¯ã Habrã§æ¢ã«èª¬æãããããžã§ã¯ãTern ã䜿çšãããŸãã 圌ã®äœåã§ã¯ã圌ã¯ããã€ãã®èŸæžã䜿çšããŠããŸãã ECMA5ããã³JQueryã®ã¡ãœãããšããããã£ã®ãã£ã¯ã·ã§ããªã¯ãããžã§ã¯ãäœæè ã«ãã£ãŠæäŸãããŸãã; APS JS SDKãªããžã§ã¯ãã®å Žåãããã¥ã¡ã³ãã«åºã¥ããŠãã£ã¯ã·ã§ããªãçæãããŸãã ããã«ããããšãã£ã¿ãŒã¯ãäœæãããã³ã³ã¹ãã©ã¯ã¿ãŒã«åºã¥ããŠãªããžã§ã¯ãã®ã¡ãœãããšããããã£ãããã³ããããããšãã§ããŸãã
"MessageList":{ "!type":"fn(options: object)->!custom:MessageList_ctor", "prototype":{ "add":{ "!type": "fn(description: string, error: string)", "!doc": "added new message" }, ...
ç»é¢ã®4åã®1以å ã§æ··éããããšãããããã®ã§ããã¹ãŠã®ãšãã£ã¿ãŒã¯ãã«ã¹ã¯ãªãŒã³ã¢ãŒãããµããŒãããŸãããã®ã¢ãŒãã§ã¯ãéåžžã¢ãŒãã«å ¥ããã«ãããããŒã§ç»é¢ãåãæ¿ããããšãã§ããŸãã
ãããããŒ
ãããããŒã¯apsfiddleãæäœããéèŠãªèŠçŽ ã§ãã ãããã¯ãã¹ãŠã®æ©èœãè€è£œããäžéšã®æäœã¯ãããã«ãã£ãŠã®ã¿å®è¡ã§ããŸãã ããã¯ãå€æ°ã®ãã¿ã³ã§ç»é¢ãä¹±éã«ãªããªãããã«ããããã§ãã ãŠãŒã¶ãŒã䜿çšã§ããããŒã®çµã¿åãããããã«èªèã§ããããã«ã apsfiddleãéããšãæåã«ããŒããŒãã®çµã¿åããã®å®å šãªãªã¹ãã衚瀺ãããŸãã
ã·ã¹ãã
Ctrl + H-ãã«ã
Ctrl + O-ãã¡ã€ã«ã®ããŠã³ããŒã
Ctrl + R-ãã£ãŒã«ããã¯ãªã¢
Ctrl + Enter-éå§
Ctrl + 1- HTMLãšãã£ã¿ãŒã«ãã©ãŒã«ã¹
Ctrl + 2 -CSSãšãã£ã¿ãŒã«ãã©ãŒã«ã¹
Ctrl + 3 -JavaScriptãšãã£ã¿ãŒã«ãã©ãŒã«ã¹
F11-å šç»é¢åãæ¿ã
Esc-å šç»é¢ã¢ãŒããçµäº
å šè¬
Ctrl + B-çŸãããã©ãŒããããäœæ
Ctrl + F-æ€çŽ¢
Ctrl + K-ã³ãŒããããã¯ãæå°å
Ctrl + / -ã³ã¡ã³ã
Ctrl +ã¹ããŒã¹ -ã³ãŒãè£å®
HTML
Ctrl + J-ã¿ã°ã§åãæ¿ãã
Javascript
Ctrl + I-ã¿ã€ãã衚瀺
Alt +ã -åºåã«ãžã£ã³ã
Alt +ã -ãžã£ã³ãããã¯
èªåä¿å
å¶çºçãªããŒã¿æ倱ãé²ããããå ¥åãããã³ãŒãã¯å®æçã«localStorageã«ä¿åãããŸãã apsfiddleãå床éããš ãæåŸã«ä¿åãããã³ãŒãããšãã£ã¿ãŒã«çœ®ãæããããŸãã
ã泚æ
ãµã³ãããã¯ã¹ãäœæãããšããæ¬æ Œçãªã¯ã©ãŠãIDEãéçºããã¿ã¹ã¯ãèšå®ããŸããã§ããã ãŸãããŠãŒã¶ãŒãSDKãç°¡åã«è©ŠããŠãæäŸãããäŸã«åºã¥ããŠãã®æäœæ¹æ³ããã°ããåŠç¿ã§ãããã©ãããã©ãŒã ãå¿ èŠã§ããã ãã®ãããããšãã°Cloud9ãªã©ã®å€§èŠæš¡ãããžã§ã¯ãã®ã³ãŒãã¯äœ¿çšããŸããã§ããã
ç§ãã¡ã®ãã¬ãŒã ã¯ãŒã¯ã§æãã€ã³ããªãžã§ã³ãã§äŸ¿å©ãªã³ãŒãè£å®ãäœæããããšã§ãç§ãã¡ã¯æ ã®ãŸãã«å§ãŸãã«éããŸããã çŸåšããã©ã°ã€ã³ã®åœåèŠåã«æºæ ããå¿ èŠããããŸãããŸããæé»çãªäœ¿çšäžã«ããããã£åãå ¥åããæ¹æ³ãããããŸããã ã€ãŸã ã³ã³ã¹ãã©ã¯ã¿ãŒãžã®åŒæ°ã§ãããªããžã§ã¯ãã宣èšãããšããããã³ã«ãã»ã«åã¡ãœãããåŒã³åºãããã«ãããããã£ã®ååãæååãšããŠæå®ãããšã
ç°¡åãªèŠçŽ
çŸåšã APS JS SDK
- ã¢ãžã¥ãŒã«æ§é ã«ãªã£ãŠããŸãã
- ãåããŠã£ãžã§ããããããŒã¿ãã€ã³ãã£ã³ã°ãããã³ãã³ãã¬ãŒããå«ãŸããŸãã
- ãææžããããã³èªåçæãããããã¥ã¡ã³ããæäŸãããŸãã
- èªåãã¹ãããã³æåã§ãã§ãã¯;
- é«åºŠãªã³ãŒãè£å®ãåãããµã³ãããã¯ã¹ããããŸãã
ããã§èª¬æãããŠãããã¹ãŠãè©Šãããšãã§ããŸã ã äž»ãªã¯ã©ã€ã¢ã³ãã¯è¥¿éšã«ããããµãŒããŒã¯ããã§ãã¹ããããŠãããããapsfiddleã®æåã®ããŠã³ããŒãã¯é·ããªãå¯èœæ§ããããŸãã
äžè¬çã«ããã®èšäºã¯ã¬ãã¥ãŒã§ããããšãå€æããŸãããå®è£ ã®è©³çŽ°ã«èå³ãããå Žåã¯ãã³ã¡ã³ãã§è³ªåããŠãã ããã äœãã«ã€ããŠå€ãã®è³ªåãããå Žåã¯ãå¥ã®èšäºã§åãäžããããšããŸãã
ãã®èšäºã®èè ã¯ãParallelsã®Timur NizametdinovãšEvgeny Uspenskyã§ãã