ã¯ããã«
æè¿ã1ã€ã®ããã°ã©ã ã«Webã€ã³ã¿ãŒãã§ã€ã¹ãæ·»ä»ããå¿ èŠããããŸããã
ããæ£ç¢ºã«ã¯ãWebã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã§ã«ååšããŠããŸããã§ããããäžæ¹åã«ããæ©èœãããããã°ã©ã ã³ã¢ã®çµæãæäŸããŠããŸããã ãããŠãåæ¹åæ§ãå°å ¥ããå¿ èŠããããŸããã
å ã®åœ¢åŒã®ããã°ã©ã ã¯ãXMLãã¡ã€ã«ã§èšè¿°ãããã¹ããŒã ã®ç¹å®ã®ãããã¯ã®è¡šçŸãã°ã©ãã£ã«ã«è¡šçŸã«å€æããŸããã ãã®ããã°ã©ã ã®ã³ã¢ã¯XMLãã¡ã€ã«ãèªã¿åãããããã®ãã¡ã€ã«ã«èšè¿°ãããŠãããããã¯å³ãããã¯ããªããžã§ã¯ãã«è¡šç€ºãããããã®ãªããžã§ã¯ãããç»åãæç»ããŠãã©ãŠã¶ãŒã§è¡šç€ºããŸããã
æ°ããèŠä»¶ã«åŸã£ãŠãã€ã³ã¿ã©ã¯ãã£ããªç·šéãè¿œå ããå¿ èŠããããŸããã ãããŠããã¯ããªã³ã¯ããã©ãŒã ãè¿œå ãããšã©ãŒãåŠçãããããã«é¢ããã¡ãã»ãŒãžãçºè¡ãããã©ãŒã ã«å ¥åãããããŒã¿ã確èªããå±¥æŽã移åã§ããããã«ãããã©ãŠã¶ãŒãã¿ã³ãèæ ®ããå¿ èŠãããããšãæå³ããŸãã ãããŠæãéèŠãªããšã¯ãããããã¹ãŠãæ··åããªãã§ãã ããã
ãããŒãã£ãŒããæãè€éãªããã°ã©ã ã®ç¿æ £ããããŸãã ããã°ã©ã ã®äœçœ®ãç¹å®ã§ããç¶æ ãããã°ã©ã ãå¿çããã€ãã³ãïŒãã¿ã³ãæŒããªã©ïŒãããã³ããç¶æ ããå¥ã®ç¶æ ãžã®é·ç§»ãè¡šçŸãããŠããã¢ãŒãã§åäœããããã°ã©ã ã®å Žåãæéç¶æ ãã·ã³ãŸãã¯å®å®è¹ã®æŠå¿µã¯çæ³çã§ã;æµ·å€ã§ã¯ãããã¯FSMãŸãã¯Finitã¹ããŒããã·ã³ã ãã€ãŠDOSã®äžã§ããSCç¶æ å³ã®å³ãæãããšãã ãã1ã€ã®æŽç·Žãããããã°ã©ã ã®ã¡ãã¥ãŒãããããŸããã
å®å®è¹ïŒã¹ããŒããã·ã³ïŒãšã¯
ãããäœã§ããããç¥ã£ãŠãã人ã¯ããã®ã»ã¯ã·ã§ã³ãå®å šã«ã¹ãããã§ããŸãã
KAãããã¯ãªãŒãããã³ã®æäœã®èšè¿°ã«å¯Ÿãããã®ãããªã¢ãããŒãã§ãã ããã¯ãå³ã«æãããç¶æ ããå åŽã«ç¢æãæãããåã®åœ¢ã§ç€ºããé·ç§»ã¯åã®ç¶æ ãçµã¶ç¢å°ã®åœ¢ã§æãããŸãã ç¢å°ã¯ãåãç¶æ ã«æ»ãã®ãšåãããªãã¯ãå®è¡ã§ããŸãã éåžžãç¢å°ã«ãå称ããããŸãã
å®éãå®å®è¹ã®ä»äºã¯ãããç¶æ ããå¥ã®ç¶æ ãžã®ç§»è¡ã§æ§æãããŠããŸãã
ãã®å Žåãå®å®è¹ã¢ãããŒãã®ã¢ããªã±ãŒã·ã§ã³ã¯äœãæäŸã§ããŸããïŒ
ãã®å Žåãããã¯Webã€ã³ã¿ãŒãã§ãŒã¹ã®æäœã説æããããã®ãã®ã§ã
-èªã¿ãããã€ã³ã¿ãŒãã§ãŒã¹ç¶æ å³ãæãããšãã§ããŸãã
-ãã®å³ã§æŽçãããã³ãŒããæžãããšãã§ããŸãã
-ã³ãŒããããã£ãŒããžããŸãã¯ãã®éã«ç°¡åã«ç§»åã§ããŸãã
-ç¶æ ãšã¢ã¯ã·ã§ã³ãç解/è¿œå /åé€ããããã
-ã€ã³ã¿ãŒãã§ã€ã¹ã®ãã¹ãŠã®é·ç§»ãæ¯èŒçç°¡åã«ã«ããŒã§ããããããã¹ããç°¡åã«ãªããŸãã
-ç¶æ ããŒãã«ãç°¡åã«äœæã§ããããããã¹ããç°¡åã«ãªããŸãã
æ°Žææ¥
ãã®ãœãããŠã§ã¢ã®éçºæã«ã¯ã次ã®ãœãããŠã§ã¢ã䜿çšãããŸããã
èšèªïŒPython 2.5.4
WebãµãŒããŒïŒCherrypy 3.1.1
ã³ãŒãã®å®è£ ãšæäœ
KAã³ãŒãç·šæ
cherrypyãWebãµãŒããŒãšããŠäœ¿çšããããšããäºå®ã«ãããã³ãŒãã®ç·šæã«é¢ããããã€ãã®èŠä»¶ã決ãŸããŸããã
ã³ãŒãã¯æ¬¡ã®ããã«ç·šæãããŸãããWebã€ã³ã¿ãŒãã§ãŒã¹å šäœãHomePageã¯ã©ã¹ã«å®è£ ãããŠããŸãã
Webã€ã³ã¿ãŒãã§ã€ã¹ãšKAãindexïŒïŒã¡ãœããã®äž¡æ¹ã®ç¯ç¹
KAã¯HomePageã¯ã©ã¹ã«ãå®è£ ãããŠããŸãã å®å®è¹ã®ã³ãŒãã¯3ã€ã®éšåã«åããããšãã§ããŸãã
1. indexïŒïŒã¡ãœããã®ã³ãŒãã ãã©ãŠã¶ãããtostateããã©ã¡ãŒã¿ãåãåããå¶åŸ¡ã¡ãœãããåŒã³åºããŠãå®å®è¹ã®å¶åŸ¡ã«ãŒããå®è£ ããŸãã
2.å®å®è¹ã®å¶åŸ¡æ¹æ³ã fsm_transitionïŒselfãto_stateïŒãfsm_process_methodsïŒselfãfsm_dataïŒ
3. KAããŒã¿ãã£ã¯ã·ã§ããªïŒself.fsm_transïŒã
4.å®å®è¹ã®ã€ã³ã¿ãŒãã§ãŒã¹ã¡ãœããã ãããã¯ãå®å®è¹ã®ããç¶æ ããå¥ã®ç¶æ ãžã®ç§»è¡æã«åŒã³åºããããããã®ç§»è¡äžã«å¿ èŠãªç¹å®ã®ã¢ã¯ã·ã§ã³ãå®è¡ããã¡ãœããã§ãã
KAããŒã¿èŸæž
å®å®è¹ããŒã¿ãã£ã¯ã·ã§ããªã䜿çšããŠãã³ãŒãæäœã®èª¬æãéå§ããããšããå§ãããŸãã ããã«ãããŸãïŒ
self.fsm_trans = { ïŒ1 'init_logo'ïŒ{'type'ïŒ 'Show'ã 'methods'ïŒ[self.fsm_logo_show]}ã ïŒ2 ãlogo_logoãïŒ{ãã¿ã€ããïŒã衚瀺ãããã¡ãœãããïŒ[self.fsm_logo_show]}ã ....... ïŒ6 ãpg1_prj_select_pageãïŒ{ãã¿ã€ããïŒã衚瀺ãããã¡ãœãããïŒ[self.fsm_project_set_dirã self.fsm_diag_files_rmã self.fsm_project_page_algor_startã self.fsm_set_cur_page_algor_first_pageã self.fsm_set_cur_block_first_block_of_pageã self.fsm_create_cur_page_diag_filesã self.fsm_page_show]}ã ..... ïŒ29 'f3_pg_block_edit_check_pg_block_edit'ïŒ{'type'ïŒ 'Act'ã 'methods'ïŒ [self.fsm_pg_block_editã self.fsm_diag_files_rmã self.fsm_create_cur_page_diag_filesã self.fsm_page_cur_saveã self.fsm_go_to_page]}ã .....
èŸæžã㌠ããã¯ãå ã®ç¶æ ãšæ¬¡ã®ç¶æ ã®2ã€ã®ç¶æ ã®ååã§æ§æãããæååã§ãã åæç¶æ ã¯ãã¹ããŒã¹ã¯ã©ããã«ãã£ãŠself.fsm_prev_stateå€æ°ã«èšæ¶ããã次ã¯ãã©ãŠã¶ã®ãªã¯ãšã¹ããã©ã¡ãŒã¿ããååŸãããŸãã ããšãã°ããïŒ1ãã§ç€ºãããé·ç§»ã®å Žåãåæç¶æ ã¯ãinitãã次ã¯ãlogoããããŒã¯ãinitã+ã_ã+ãlogoããšããŠååŸãããŸã
ããã§ãããŒã¯èŸæžã§ãã ãã¿ã€ãããšãã¡ãœãããã®2ã€ã®ããŒããããŸãã
ããŒãã¿ã€ããã¯ã次ã®ç¶æ ã®ã¿ã€ãã瀺ããŸãã ã衚瀺ããšãå®è¡ãã®2ã€ã®ç¶æ ã¿ã€ãããããŸãã ã¿ã€ãã衚瀺ãã¯ããããçæãããHTMLããŒãžã®è¡šç€ºç¶æ ã§ããããã©ãŠã¶ããã®æ¬¡ã®ãªã¯ãšã¹ããåŸ ã£ãŠããããšãæå³ããŸãã ã¿ã€ããActãã¯ããã®ç¶æ ãåæ¢ããå¿ èŠããªãããšãæå³ããŸãã 次ã®ç¶æ ã«é²ãå¿ èŠããããŸãã
å®å®è¹ã®ã¡ãœããã®ã€ã³ã¿ãŒãã§ãŒã¹åã®é åã¯ããmethodsãããŒã«ãã£ãŠèŠã€ããããŸãã å®éãããã¯ãããç¶æ ããå¥ã®ç¶æ ãžã®ç§»è¡äžã«å®è¡ããå¿ èŠãããäžé£ã®æçšãªã¢ã¯ã·ã§ã³ã§ãã ããã«ãã¿ã€ã 'Show'ã®å Žåãé åã®æåŸã®ã¡ãœããã¯çæãããHTMLããŒãžãè¿ããã¿ã€ã 'Act'ã®å Žå-ç®çã®ç¶æ ã®ååãè¿ããŸãã
indexïŒïŒã¡ãœããã®CAã³ãŒã
1 @ cherrypy.expose 2 defã€ã³ããã¯ã¹ïŒselfãblock = ''ãtostate = ''ãpage = ''ãproject = ''ã** dataïŒïŒ ....... 3è©Šè¡ïŒ 4ïŒFSMã¯æ¬¡ã®ç¶æ ã«é²ã 5 fsm_data = self.fsm_transitionïŒself.http_param ['tostate']ïŒ 6ïŒãtostateããã©ã¡ãŒã¿ãŒããã®ç¶æ ã«å¯ŸããŠæå¹ã§ãªãå Žå KeyErrorãerror_detailãé€ã7ïŒ 8 return self.fsm_error_showïŒ 'KeyErrorïŒ' + strïŒerror_detailïŒïŒ 9 processing_result = self.fsm_process_methodsïŒfsm_dataïŒ 10ãTrueã®å ŽåïŒ 11ïŒã¿ã€ãã 'Show'ã®å ŽåãHTMLããŒãžãè¿ã 12 fsm_data ['type'] == 'Show'ã®å ŽåïŒ 13 return processing_result 14ïŒã¿ã€ãããActãã®å ŽåãFSMã¯æ¬¡ã®ç¶æ ã« 15ïŒç¶æ ã®ååã¯processing_resultã«ãããŸã 16 fsm_data ['type'] == 'Act'ã®å ŽåïŒ 17 fsm_data = self.fsm_transitionïŒprocessing_resultïŒ 18 processing_result = self.fsm_process_methodsïŒfsm_dataïŒ
ãã®ã¡ãœããã¯ããªã¯ãšã¹ããããtostateããã©ã¡ãŒã¿ãŒãååŸããŸãã ãã®åŸã5è¡ç®ã®self.fsm_transitionïŒïŒã¡ãœããã¯ãç¶æ ã¿ã€ãïŒShow | ACtïŒãšå®è¡çšã®ã¡ãœããã®é åãå«ãããŒã¿ãã£ã¯ã·ã§ããªãããã£ã¯ã·ã§ããªãè¿ããŸãã
ããŒãšã©ãŒã®å Žåãããªãã¡ ãã®ç¶æ ããç®çã®ç¶æ ã«åãæ¿ããããšã¯ã§ããŸããããäŸå€ãšããŠãSCã¯ããšã©ãŒãç¶æ ã«åãæ¿ãããŸãã ããšãã°ããã©ãŠã¶ãå±¥æŽã«æ²¿ã£ãŠããã€ãã®ã¹ããããè¿ãããä»»æã®ãªã³ã¯ãã¯ãªãã¯ããå ŽåãéèŠãªãšã©ãŒãçºçããå¯èœæ§ããããŸãã ãã®å Žåã
HTMLãã©ãŠã¶ãŒã«ãã£ãŠè¡šç€ºãããããŒãžã¯å®å®è¹ã®ç¶æ ã«å¯Ÿå¿ããŠãããããªã¯ãšã¹ãã«ã¯çŸåšã®ç¶æ ããã®é·ç§»ãååšãã¹ãã§ãªãç¶æ ãžã®é·ç§»ãå¿ èŠãªå ŽåããããŸãã
9è¡ç®ã§ã¯ãself.fsm_process_methodsïŒfsm_dataïŒã¡ãœããã¯é·ç§»ã¡ãœããã®é åãåŠçããæåŸã®ã¡ãœãããã¡ãœããé åããè¿ããå€ãè¿ããŸãã ãShowãã¿ã€ãã®å Žåãããã¯ããŒãžã®HTMLã³ãŒãã§ããããindexãã¡ãœããã¯ãããè¿ãããµãŒããŒã¯ããããã©ãŠã¶ãŒã«æž¡ããŸãã
ã¿ã€ãããActãã®å Žåãããã¯æ¬¡ã®ç¶æ ã®ååã§ãã17è¡ç®ã§å®å®è¹ã次ã®ç¶æ ã«å€æãã18è¡ç®ã§é·ç§»ã¡ãœãããåŠçããŸãã
å®å®è¹ã®å¶åŸ¡æ¹æ³
ïŒFSMã¡ãœãã def fsm_transitionïŒselfãto_stateïŒïŒ ãã FSMã®ç¶æ ãç¶æ ã«å€æŽããŸã 決å®äºé ãæäŸãã åŒæ°ïŒ to_state-移åå ã®å· æ»ãå€ïŒ ãã ïŒå€ãç¶æ ãèšæ¶ãã self.fsm_prev_state = self.fsm_state self.fsm_state = to_state ïŒèŸæžããæ»ãå€ãååŸ ããŒ= strïŒself.fsm_prev_stateïŒ+ '_' + strïŒself.fsm_stateïŒ self.fsm_return = self.fsm_trans [ããŒ] self.fsm_returnãè¿ã def fsm_process_methodsïŒselfãfsm_dataïŒïŒ ãã fsm_dataèŸæžãååŸããé¢æ°ãåŠçãã htmalãŸãã¯æ¬¡ã®ç¶æ ãè¿ã åŒæ°ïŒ fsm_data-self.fsm_transitionïŒïŒã®æ»ãå€ããååŸããèŸæž self.fsm_transèŸæžããååŸãããŸã æ»ãå€ïŒ ã±ãŒã¹ 'ã¿ã€ã'ã®htmlããã¹ãïŒ '衚瀺' ã±ãŒã¹ 'type'ã®æ¬¡ã®ç¶æ ã®ååïŒ 'Act' ãã last_func = lenïŒfsm_data ['methods']ïŒ i = 0 fsm_data ['methods']ã®ã¡ãœããã®å ŽåïŒ i + = 1 i == last_funcã®å ŽåïŒ return methodïŒïŒïŒæåŸã®é¢æ°ã¯æ»ãå€ãè¿ã ã¡ãœããïŒïŒ
ããã§ã¯ããã¹ãŠãäºçŽ°ãªããšã ãšæããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹ã¡ãœããã®åŠçæ¹æ³ã®éžæã«ã€ããŠ
ã¡ãœãããé åã«æ ŒçŽããç¹å¥ãªçç±ã¯ãããŸããã é·ç§»ããšã«ããã¹ããããã€ã³ã¿ãŒãã§ã€ã¹ã¡ãœãããåŒã³åºãããç¬èªã®ã¡ãœãããæã€ããšã¯å®å šã«å¯èœã§ãã
äžèšã®åŠçæ¹æ³ã¯ãã³ãŒããèªã¿ãããããããã«ãã€ã³ã¿ãŒãã§ã€ã¹é¢æ°ãžã®ãã¹ãŠã®åŒã³åºãã1ã€ã®å Žæã§åããã¹ãã¬ãã«ã«ããããã«ãæå³çã«éžæãããŸããã å®è£ ãããã³ãŒãã§ã¯ãå®å®è¹ã®å°å·ããããã£ãŒããååŸããå®å®è¹ã®ããŒã¿ãã£ã¯ã·ã§ããªã®ã³ãŒãã䜿çšããŠã1ã€ããã®é·ç§»ã«å¯ŸããŠå®è¡ãããã¢ã¯ã·ã§ã³ã®ãã§ãŒã³ã確èªã§ããŸãã
å¥ã®ç¶æ ã
ãããã«
èšèšã«å®å®è¹ã䜿çšããã¢ãããŒããé©çšããããšã§ãæè»ã§èªã¿ããããéæã§ç°¡åã«ãµããŒãã§ããã³ãŒããæžãããšãã§ãããšæããŸãã