[[TableOfContents]] == 소개 == * ì£¼ì œ : NSIS IDE * 참여 : ê°•ì„천 (99, ["1002"]) * 기간 : 2002.2.3 (ë.. 어쩌면 2.9 ì¼ê¹Œì§€ í• ìˆ˜ë„.^^;) * 목표 : NSIS 와 ì—°ë™í•˜ì—¬ 간단한 NSIS Script 작성과 ê´€ë ¨í•œ IDE í™˜ê²½ì„ êµ¬ì¶•í•œë‹¤. == Opening Statement == 특별한 ë…€ì„ì€ ì•„ë‹ˆê³ . -_-; NSIS 스í¬ë¦½íŠ¸ë¥¼ 작성하다가 ì—디터 ì—서 스í¬ë¦½íЏ ìž‘ì„±í•˜ê³ command ì°½ì—서 스í¬ë¦½íЏ ì»´íŒŒì¼ í•˜ê³ ë§Œë“¤ì–´ì§„ ì¸ìŠ¤í†¨ëŸ¬ 실행하다가 ê°‘ìžê¸° ìƒê°ì´ 나서ë¼ëŠ”. --; 그냥 Editplus ì—서 makensis ì„ ì—°ê²°í•´ì„œ ì¨ë„ ìƒê´€ì—†ì§€ë§Œ, ë§Œì¼ ì§ì ‘ ë§Œë“ ë‹¤ë©´ 어떻게 해야 í• ê¹Œ 하는 ìƒê°ì—.. 그냥 하루 ë‚ ìž¡ì•„ì„œ ë‚ ë¦¼ í”Œë° í•´ë´¤ë‹¤ëŠ”. --; (ì´ í”„ë¡œì 트는 ["NSIS_Start"] ì˜ subproject로, ["NSIS_Start"] ê°€ ë나면 ìžë™ì†Œë©¸ì‹œí‚µë‹ˆë‹¤. ^^;) Solo Programming 으로 ì§„í–‰. XP 공부한거 소í ì 용해봄. == User Story == * .nsi 스í¬ë¦½íŠ¸ë¥¼ load/save í• ìˆ˜ 있다. * .nsi 스í¬ë¦½íŠ¸ë¥¼ ì½ì–´ì„œ íŽ¸ì§‘í• ìˆ˜ 있다. * .nsi 스í¬ë¦½íŠ¸ë¥¼ ì§ì ‘ 컴파ì¼í•´ì„œ 실행화ì¼ë¡œ 만들 수 있다. ì»´íŒŒì¼ ê³¼ì •ì´ output ì°½ì— í‘œì‹œëœë‹¤. * ì»´íŒŒì¼ ëœ í™”ì¼ì„ 테스트하여 실행해볼 수 있다. * MDI 기반. == Engineering Task == 한 Iteration ì„ 2시간으로 ìž¡ìŒ. 1 Task Point는 Ideal Hour(?)로 1ì‹œê°„ì— í• ìˆ˜ 있는 ì–‘ ì •ë„로 계산. (ì•„.. ì—¬ì „ížˆ ì´ê±° ê³„ì‚°ë²•ì´ ëª¨í˜¸í•˜ë‹¤. 좀 ë” ì œëŒ€ë¡œ ê³µë¶€í•´ì•¼ê² ë‹¤.) * .nsi 스í¬ë¦½íŠ¸ë¥¼ load/save í• ìˆ˜ 있다. || í™”ì¼ ì½ì–´ì„œ ìžë£Œêµ¬ì¡°ì— ì €ìž¥. || 0.4 || || ìžë£Œêµ¬ì¡°ì— 있는 ë°ì´í„°ë¥¼ í™”ì¼ë¡œ ì €ìž¥. || 0.4 || * .nsi 스í¬ë¦½íŠ¸ë¥¼ ì½ì–´ì„œ íŽ¸ì§‘í• ìˆ˜ 있다. || Rich Edit Control ì˜ ì´ìš©. 편집. ìžë£Œêµ¬ì¡°ì™€ sink. || 0.5 || * .nsi 스í¬ë¦½íŠ¸ë¥¼ ì§ì ‘ 컴파ì¼í•´ì„œ 실행화ì¼ë¡œ 만들 수 있다. ì»´íŒŒì¼ ê³¼ì •ì´ output ì°½ì— í‘œì‹œëœë‹¤. || CInnerProcess Class ì˜ ì´ìš©. 약간 ìˆ˜ì •. makensis ì´ìš©. || 0.5 || || Output Windows ì˜ ìƒì„± || 0.5 || || Compile ë™ìž‘ ì—°ê²° || 0.5 || * ì»´íŒŒì¼ ëœ í™”ì¼ì„ 테스트하여 실행해볼 수 있다. || ìŒ.. script ì—서 ì‹¤ì œ Outputì´ ë í™”ì¼ì„ ë¶„ì„ & ê°€ì ¸ì˜¤ê¸°. || 0.7 || * MDI 기반. || MFCì˜ MDI Framework ì´ìš© || none || 0.4 + 0.4 + 0.5 + 0.5 + 0.5 + 0.5 + 0.7 = 3.5 (ì „ì²´ 3.5 Task Point) [[BR]] 3.5 * 2 (ì‹¤ì œë¡œëŠ” 1.5ë°°~2ë°°ì •ë„ ì‹œê°„ì´ ê±¸ë¦´ê²ƒìž„) = 7 시간 [[BR]] Planning & 중간 휴ì‹ì‹œê°„ í¬í•¨ 1시간 추가 = 8 시간 == Iteration ê³„íš == First Iteration : * MDI Framework * Rich Edit Control ì˜ ì´ìš©. 0.5 * í™”ì¼ Save / Load 0.4 + 0.4 = 0.8 - 1.3 * 2 = 2.6 Second Iteration : * CInnerProcess Class 0.5 * Output Window 0.5 - 1 * 2 = 2 Last Iteration : * Script 로부터 Output ì´ ë Target í™”ì¼ì˜ ë¶„ì„ & ì´ë¦„ ê°€ì ¸ì˜¤ê¸° - 0.7 * Load / Save MDI Framework ì™€ì˜ ì—°ê²° - 0.7 - 1.4 * 2 = 2.8 == ì§„í–‰ == === Iteration 1 (1:00 ~ 3:00) === 추가 Task : Load / Save MDI Framework ì™€ì˜ ì—°ê²° 현재 ì™„ë£Œëœ Task MDI Framework Rich Edit Control CView ì— ë¶™ì´ê¸°. 0.5 í™”ì¼ Save / Load 0.8 = 1.3 중간 10ë¶„ 휴ì‹. * velocity : 1.3 task point === Iteration 2 (3:20 ~ 5:40) === CInnerProcess Class ì´ìš©, Nsis 연결하기 - 0.5 Output Window 0.5 - 1 * 2 = 2 오후 4:34 완료. 추가사í•: ê³ ë ¤í• ì‚¬í• - NsisProcess 는 ì–´ë””ì— ì†í•´ 있는 ë…€ì„ì¸ê°€? -_-a -> Singleton 으로 있어야 í• ë…€ì„ìž„. -> AppClass ì— ìžˆìœ¼ë©´ ìžë™ìœ¼ë¡œ Singleton ì´ ë˜ê² êµ°. ^-^; - NsisProcess ì´ë²¤íЏ ë°œìƒì‹œì—” 누가 어떻게 통지받아서 Outputì— ì°ì–´ì£¼ë‚˜? -> 어차피 Execute Process 는 Blocking Call ìž„. -> Nsis Execute ë’¤ì— ë°”ë¡œ Output ì„ ë¿Œë ¤ì£¼ë©´ ë¨. 오후 5:05 - 10ë¶„ 휴ì‹. Iteration 3 ì— ìžˆëŠ” ë…€ì„ì„ ë§ˆì € 하ìž.~ Script 로부터 Output ì´ ë Target í™”ì¼ì˜ ë¶„ì„ & ì´ë¦„ ê°€ì ¸ì˜¤ê¸° - 0.7 * velocity : 1.7 task point * average : 1.5 task point === Iteration 3 (5:50 ~ 8:10) === * Load / Save MDI Framework ì™€ì˜ ì—°ê²° - 0.7 * velocity : 0.7 task point. * average : 2.2 / 3 = 0.73 task point / Iteration (2 hours) == 중간 공부 == * Save/Load 와 ê´€ë ¨í•œ ë©”ì„¸ì§€ì˜ í•¨ìˆ˜ 호출 순서 (Function Call ë”°ë¼ê°€ê¸°) {{{~cpp * CWinApp::OnFileNew -> CDocManager::OnFileNew -> CMultiDocTemplate::OpenDocumentFile -> CNIDoc::OnNewDocument .. -> CNIView::OnInitialUpdate () * CWinApp::OnFileOpen -> CDocManager::OnFileOpen -> CMultiDocTemplate::OpenDocumentFile -> CNIDoc::OnOpenDocument .. -> CNIView::OnInitialUpdate () * CDocument::OnFileSave -> CDocument::DoSave -> CNIDoc::OnSaveDocument * CDocument::OnFileSaveAs -> CDocument::DoSave -> CNIDoc::OnSaveDocument * CFrameWnd::OnClose -> CWndApp::SaveAllModified -> CDocManager::SaveAllModified -> CDocTemplate::SaveAllModified -> CDocument::SaveModified -> CDocument::DoFileSave -> CDocument::DoSave -> CNIDoc::OnSaveDocument * CDocument::SaveModified -> DoFileSave }}} * 프로그램 실행중 다른 Process ë„ìš°ê³ ê²°ê³¼ ìŠ¤íŠ¸ë§ ì–»ì–´ì˜¤ê¸° (Console Util) == 실행 화면 == http://zeropage.org/~reset/zb/data/NSISIDE_output.gif == ê³ ì³ì•¼ í• ë²„ê·¸ == * í™”ë©´ì˜ ì—디터와 ì‹¤ì œ ë°ì´í„° ì €ìž¥ë˜ëŠ” ë¶€ë¶„ì´ updateê°€ ì œëŒ€ë¡œ 안ëœë‹¤. * í™”ì¼í¬ê¸° ê´€ë ¨ 8kb ë¯¸ë§Œì˜ ë°ì´í„°ë§Œ 처리가능. == í‰ê°€ == * MFC 와 ì—°ê²°ë˜ëŠ” ë¶€ë¶„ì— ëŒ€í•œ TestFirstProgramming ì„ ì œëŒ€ë¡œ 지키지 못했다. (ì•„.. GUI ë¶€ë¶„ì€ ì• ë§¤í•˜ë‹¤. --;) ì• ë§¤í•œ ë¶€ë¶„ì— ëŒ€í•´ì„œ ì˜ˆì „ì— í•˜ë˜ ë°©ì‹ì´ 섞ì´ë‹¤ 보니까 ë¦¬ë“¬ì´ ê¹¨ì¡Œë‹¤. ì°¨ë¼ë¦¬ ì² ì €í•˜ê²Œ TFP로 가는게 나았었ì„í…ë° í•˜ëŠ” ìƒê°ì´ 들었다. * 하지만, View/Document 구조가 한편으로는 방해물ì´.. ì´ë¯¸ ë””ìžì¸ì´ ë˜ì–´ë²„린 Framework ì˜ ê²½ìš° 어떻게 ì ìš©ì„ ì‹œì¼œë‚˜ê°€ì•¼ í• ê¹Œ. ì¼ë‹¨ 주로 ì•Œê³ ë¦¬ì¦˜ê³¼ ê´€ë ¨ëœ ë¶€ë¶„ì— ëŒ€í•´ Test Code를 만들게 ë˜ì—ˆë‹¤. ê³„ì† ìƒê°í•´ë´ì•¼ í• ë¬¸ì œì¼ ê²ƒì´ë‹¤. * AcceptanceTest 를 ì¤‘ê°„ì— ì§¤ ì‹œê°„ì„ í• ë‹¹í•˜ì§€ 못했다. (솔ì§ížˆ GUI ë¶€ë¶„ì´ ë“¤ì–´ê°€ëŠ” ë¶€ë¶„ì— ëŒ€í•´ ê°ì´ 오질 않았다. ì „ì— Web Programming 때ì—는 ì§ì ‘ HTTP Protocolì„ ì´ìš©, 웹서버로부터 받아온 HTML 문서를 Parsing 한 ë’¤ ê·¸ ê²°ê³¼ì— ëŒ€í•´ Test Code를 작성하는 ì‹ì´ì˜€ëŠ”ë°.. (ê·¸ëž˜ë„ Manual Test 목ë¡ì´ë¼ë„ 작성해 ë‘었어야 í–ˆëŠ”ë° ì´ê±´ 계íšë‹¨ê³„ì˜ ì‹¤ìˆ˜ë¼ ìƒê°) * ì•„ì´ë””ì–´ ë– ì˜¤ë¥¸ 것중 하나 - 마우스 매í¬ë¡œ 프로그램과 ì—°ë™í•´ì„œ 쓰는건 어떨까. -_-a 아니면 Message 를 보내는 ì‹ìœ¼ë¡œ 하는 방법, DLLì„ ì‚½ìž…í•˜ëŠ” 방법.. ì´ê±´ 좀 ë” êµ¬ì²´ì 으로 ìƒê°ì„ í•´ë´ì•¼ í• ê²ƒ 같다. * PairProgramming ì´ ì•„ë‹Œ Solo ì¸ ê²½ìš°ì—” ì£¼ìœ„ì˜ ìœ í˜¹ì´ ë§Žë‹¤. -_-; ì˜ì‹ì 으로 휴ì‹ì‹œê°„ì„ 10ë¶„ì •ë„ ë°°ë‹¹ì„ í–ˆì§€ë§Œ, Iteration 3 때 확실히 집중ë„ê°€ 떨어졌다. * UserStory ì˜ ìž‘ì„±ê³¼ EngineeringTask 부분 ìž‘ì„±ì‹œì— ì• ë§¤ëª¨í˜¸í•˜ê²Œ ì“´ 부분과 ìžŠì–´ë¨¹ê³ ê³ ë ¤í•˜ì§€ ì•Šì€ ë¶€ë¶„ì´ ìžˆì—ˆë‹¤. (ì´ëŠ” í›—ë‚ ë’¤í†µìˆ˜ë¥¼ 친다. -_-;) 너무 ë³µìž¡í•´ì„œë„ ì•ˆë˜ê² 지만, 중요한 사í•ë“¤ì— ëŒ€í•´ ìžŠì–´ì„œë„ ì•ˆë 것ì´ë‹¤. ---- ["NSIS_Start"]