ã¯ããã«
æè¿ã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ã€ããã®é·ç§»ã«å¯ŸããŠå®è¡ãããã¢ã¯ã·ã§ã³ã®ãã§ãŒã³ã確èªã§ããŸãã
å¥ã®ç¶æ
ã
ãããã«
èšèšã«å®å®è¹ã䜿çšããã¢ãããŒããé©çšããããšã§ãæè»ã§èªã¿ããããéæã§ç°¡åã«ãµããŒãã§ããã³ãŒããæžãããšãã§ãããšæããŸãã
ä»é²ïŒå®å®è¹å³ã®äŸïŒå®éã®å³ã®æçïŒ
