[[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"]