사자성어

고진감래: 고생을 진탕하고 나면 감기몸살이 온다.
새옹지마: 새처럼 옹졸하게 지랄하지마라.
죽마고우: 죽치고 앉아서 고스톱치는 친구
삼고초려: 쓰리고를 할때는 초단을 조심하라.
희로애락: 희희락락 노닐다가 애떨어질까 무섭노라
개인지도: 개가 사람을 가르킨다.
구사일생: 구차하게 사는 한 평생

by 어린왕자 | 2009/06/30 22:50 | 사색 | 트랙백 | 덧글(2)

Emacs에서 컴파일

Emacs에서 컴파일(M-x compile)을 하면 현재 버퍼가 존재하는 디렉토리를 디폴트 디렉토리로 컴파일한다.
리눅스에서 거의 대부분 Makefile을 작성해서 컴파일하게 되는데 M-x compile 실행하면 미니버퍼에 "Compile command : make "라고 나온다.
여기서 그냥 엔터를 치면, 현재 버퍼가 존재하는 디렉토리를 디폴트 디렉토리로 make가 실행된다.
여기서 불편한 점이 있다. 무엇이 불편할까?
현재 작업중인 버퍼와 같은 디렉토리에 Makefile이 존재하는 경우 M-x compile한 후 그냥 엔터를 치면 아무 문제가 없지만,
디렉토리 구조가 복잡하게 되어 있어 Makefile이 모든 디렉토리에 존재하지 않고 프로젝트 디렉토리의 root에만 존재할 경우 문제가 발생한다.
아래와 같이 MyProject 디렉토리에만 Makefile이 존재하고 MyProject/IO/src/FileIO.cpp 버퍼를 편집하고 있는 경우
M-x compile을 실행하면 "메이크파일이 없습니다."라는 에러 메세지가 출력된다.

MyProject/Makefile
MyProject/IO/src/FileIO.cpp

이와 같은 문제점을 해결하기 위해 Elisp으로 현재 편집 중인 버퍼의 디렉토리부터 root 디렉토리까지 업하면서 Makefile파일이 존재하는 체크하여 존재하면 해당 디렉토리를 make -C옵션 값으로 자동으로 입력하도록 만들었다. Makefile을 못 찾은 경우 단순히 "make"만 기본 입력값으로 출력된다.

설치 및 사옹법은 아래와 같다.

1. 아래 내용을 myfunc.el로 저장한 후 홈디렉토리에 복사한다.
2. [~/.emacs] 파일에 아래 내용을 추가한다.

(load-library "~/myfunc.el")
(define-key global-map (kbd "<f7>") 'j-make)

3. emacs를 restart한다.
4. "F7"입력하면 make -C MyProject 가 기본으로 입력된다.

다운로드 : myfunc.el



myfunc.el 내용보기

by 어린왕자 | 2008/11/29 03:39 | 리눅스 | 트랙백 | 덧글(0)

포팅시 단순 반복 작업을 Elisp로 편하게

윈도우 헤더파일을 리눅스에서 컴파일할 때 아래와 같은 반복작업을 해야 한다.

수정전 윈도우 헤더파일
--- myfunc.h ---
#pragma once
void myfunc();
--- EOF ---

수정후 윈도우 헤더파일
--- myfunc.h ---
#ifndef MyProject_myfunc
#define MyProject_myfunc

#ifdef OS_WIN
#    pragma once
#endif
void myfunc();

#endif // MyProject_myfunc
(new line 추가:마지막에 new line없으면 g++에서 warning 발생)
--- EOF ---

수정해야 하는 파일이 많은 경우 개발자를 정말 힘들게 하는 작업이다.
그래서 자동으로 수정하도록 Elisp으로 만들어 보았다.
위 작업을 아래 Elisp을 이용하면 단축키 하나로 해결할 수 있다.
설치 및 사용 방법은 아래와 같다.

1. 아래 내용을 myfunc.el로 저장한 후 홈디렉토리에 복사한다.
2. [~/.emacs] 파일에 아래 내용을 추가한다.

(load-library "~/myfunc.el")
(define-key global-map (kbd "C-c m m") 'j-modify-header-file-for-g++)

3. emacs를 restart한다.
4. 수정할 헤더파일을 오픈한 상태에서  "C-c m m"입력하면 자동으로 변경된다.

다운로드 : myfunc.el




myfunc.el 내용보기

by 어린왕자 | 2008/11/28 11:22 | 리눅스 | 트랙백 | 덧글(0)

A Guided Tour of Emacs

Emacs 전반적인 사용법을 알고 싶으면 http://www.gnu.org/software/emacs/tour/ 클릭해보길 바란다.

by 어린왕자 | 2008/10/17 01:01 | 리눅스 | 트랙백 | 덧글(0)

Flyakite OSX 3.5

FlyakiteOSX는 WindowsXP를 MacOSX처럼 사용할 수 있도록 Windows 테마를 바꿔주는 프로그램이다.
Windows 시스템 DLL을 패치하는 방식이라 StyleXP보다 빠르고, 기본 WindowsXP 테마보다 부드럽고 속도도 더 빠른 것 같다.
아래 스크린샷은 FlyakiteOSX을 설치하고 Emacs와 Eclipse를 실행한 화면이다.



[ 다운로드 ]

by 어린왕자 | 2008/10/10 22:34 | IT | 트랙백 | 덧글(0)

Mac4Lin

Mac4Lin을 설치하면 아래와 같이 리눅스(Ubuntu)에서 깔끔한 MacOSX Leopard UI를 사용할 수 있다.

by 어린왕자 | 2008/09/20 11:40 | 리눅스 | 트랙백 | 덧글(0)

소프트웨어 개발과 오케스트라 연주

if ( 소프트웨어공학 == 건축학 ) ...

  보통 소프트웨어공학을 건축학과 비슷하다고 합니다. 건축학에서 건물이 완성될 때 수요 분석, 설계, 시공, 검사, 유지보수로 단계를 거치듯이, 소프트웨어공학에서도 소프트웨어가 제품화(완성)될 때 고객의 요구사항 분석, 설계, 구현(코딩), 테스트, 유지보수단계를 거치게 됩니다.
  건축학은 예전부터 내려온 학문으로 체계적으로 잘 정리가 되어 있고 시공만 제대로 하면 많은 시간을 할애할 필요가 없으며,소프트웨어공학은 시스템이 복잡해지면서 소프트웨어 신뢰성 저하, 개발비 증가되는 현상이 자주 발생(소프트웨어 위기)하여 이를 해결하기 위해 최근에 생겨난 학문으로 구현보다 유지보수 단계에 많은 노력이 필요하다는 것이 다른 점이라고 할 수 있습니다. 비록 건축학과 소프트웨어공학은 다른 점이 있지만, 소프트웨어공학이 건축학과 많이 비슷하다는 것은 부인할 수 없는 사실입니다.
  현재 건축학의 많은 것들을 벤치마킹하여 소프트웨어공학에서 사용하고 있습니다. 예를 들면 건축가(Architect)에 해당하는용어를 소프트웨어 공학에서는 소프트웨어 아키텍트(Software Architect)라고 정의하고 있으며 요즘 들어 소프트웨어아키텍트의 존재와 역할이 중요하다고 시끌벅적대고 있습니다.
  소프트웨어 공학이 발전하고 나뿐만 아니라 다른 개발자들이 관심을 가지고 있다는 사실을 기쁘게 생각하고 있지만, 소프트웨어 공학을 건축학에 비교하면서 소프트웨어 개발자를 건축학의 시공단계에서 일하고 계시는 분들(이 분들을 폄하하는 발언이 절대 아님을 밝혀드립니다.)과 비슷하다고 나도 모르게 각인하고 있는 안타까운 마음을 조금이나마 달래고 싶어 몇자 적어봅니다.

if ( 소프트웨어 개발 == 오케스트라 연주 ) ...

  인류문명과 함께 발을 맞춰오며 소리를 통해 사람들에게 즐거움과 감동을 주는 음악처럼 소프트웨어는 정보화시대의 꽃으로서 사람들에게 즐거움과 감동을 주는 예술이라고 할 수 있습니다. 시스템이 점점 복잡해져 한 두 명이 아니라 수십명이 하나가 되어 개발하는 모습은 마치 오케스트라 연주를 연상하게 합니다. 두 눈을 감고 상상해 보시기 바랍니다.(정말 눈을 감고 있나요? 눈을 감았다면 순수한 마음을 가진 당신을 이시대 진정한 개발자로 임명합니다.^^) 같은 곡이라도 혼을 다해 연주한 오케스트라를 감상한 사람들이 더 많은 감동을 받듯이, 혼을 다해 개발한 소프트웨어는 더 많은 사람들에게 감동을 줍니다.
  자 그럼 소프트웨어 개발과 오케스트라 연주가 무엇이 비슷할까요? 같이 알아보도록 하겠습니다.
  수 십명의 연주자가 모여 관/현/타 악기(musical instrument)를 가지고 오케스트라를 연주하게 되듯이, 구현에 필요한 프로그래밍 도구(Tool, 언어:ASM, COBOL, Pascal, C, C++, JAVA, Haskell, Scheme, Ruby,Ocaml, ...)를 사용하여 코딩을 하게 됩니다. 악기 종류마다 같은 음을 내기위해 연주하는 방법이 다르며,  같은 음이라도 악기에 따라 특색이 있습니다. 프로그래밍 언어도 같은 결과를 얻기위해 표현 방법이 다르며, 패러다임이나 철학이 다릅니다. 또한 연주자에 따라 선호하는 악기가 차이 있듯이, 개발자에 따라 선호하는 악기도 다를 수 있습니다. 연주자들이 연주하기전 악기를 튜닝하는 모습은 개발자가 개발하기전 프로젝트에 관련된 용어나 정보를 습득하고 자기계발하는 것과 닮았습니다.
  오케스트라 연주할 때 지휘봉을 가지고 음악 연주를 이끄는 지휘자는 연주자들에게 박자를 알려주고 악기나 성부가 들어가는 부분도 지적해줍니다. 지휘자처럼 프로젝트관리자는 프로젝트의 일정을 개발자들에게 알려주며 자원 투입시기를 알려 줍니다. 지휘자와 연주자의 호흡이 좋을수록 오케스트라 연주를 관람하는 사람에게 더 큰 감동을 주듯이, 프로젝트관리자와 개발자의 커뮤니케이션이 잘 되면 잘 될 수 록 고객에게 더 많은 감동을 줄 수 있는 소프트웨어를 개발할 수 있습니다. 오케스트라 연주를 통해서 오케스트라 단원의 호흡을 알 수 있듯이, 프로젝트팀의 팀웍은 프로젝트팀이 개발한 소프트웨어를 통해서 알 수 있습니다.
  지휘자와 연주자만 있다고 훌륭한 오케스트라를 연주할 수 있을까요? 지휘자와 연주자 사이 호흡이 중요하다고 했습니다. 아름다운 오케스트라 연주를 위해 지휘자와 연주자 사이의 호흡을 어떻게 맞출 수 있을까요? 학교 다닐 때 처럼 여행이나 MT를 가는 것도좋은 방법입니다. 그러나 그런 방법은 외적호흡은 맞출 수 있지만 내적호흡은 맞출 수 없을 것입니다. 그럼 내적호흡은 어떻게 맞출수 있을까요? 내적호흡을 맞추기 위해서는 오로지 연습밖에 없습니다. 무엇을 연습해야 할까요? 당연히 오케스트라 연주할 곡일것입니다. 그 곡을 지휘자와 연주자가 서로 공유하기 위해서는 악보가 필요합니다. 이부분은 현악기 파트가 들어가서 처음에는 강하게  마지막 부분에는 약하게 연주해야 하고 현악기 파트 연주가 끝나면 목관악기 파트가 들어가야 한다는 것들을 악보를 보며 서로 공유하여 호흡을 맞추기 위해 연습해야 합니다. 악보는 지휘자와 연주자 사이 문자언어로 인터페이스 역할을 해줍니다. 이와 같이 소프트웨어개발에서도 프로젝트관리자와 개발자사이에 인터페이스 역할을 해주는 것이 있습니다. 바로 문서입니다. 문서를 바탕으로 서로 다른 이해관계자들(소프트웨어 개발에 관련된 모든 사람들)과 대화를 통해 계속 정제(RUP에서는 Iteration이라고 표현을 함)해야 악보를 가지고 피나는 연습을 한 오케스트라 연주처럼 훌륭한 소프트웨어 개발을 할 수 있습니다.
  오케스트라 연주하는 것만으로도 대단한 예술이지만, 오케스트라 연주곡을 만드는 작곡은 예술중의 예술이라고 할 수 있습니다.(메타예술이라고나 할까요?^^) 백과사전에 보면 작곡을 아래와 같이 설명하고 있습니다.
음악활동은 작곡·연주·감상의 3부분으로 이루어지며 그 중에서도 작곡은 가장 근원적인 활동이다. 특수한 경우 작곡과 연주가 동시에 이루어지는 즉흥연주도 있다. 작곡의 주체는 일반적으로 특정한 개인이며, 작품에는 작곡자의 개성과 사상이 반영되고 표현의 독창성이 요구된다.
  오케스트라 연주하기 앞서 지휘자와 연주자들이 이해할 수 있는 악보를 만드는 작곡은 소프트웨어 개발의 설계단계와 많이 닮았습니다. 소프트웨어 아키텍트는 요구사항에 대해 구현할 소프트웨어 시스템의 구성요소와 구성요소 사이의 상호작용에 대해 기술하는 문서(소프트웨어 아키텍처 기술서,건축세계에서 축소모형이나 청사진에 해당됨)를 작성하게 됩니다. 이 문서를 기반으로 개발자가 구현을 하게됩니다. 좋은 곡을 쓰기위해서는 화음을 기초로 선율을 조직하는 방법인 화성법을 배워야 한다고 합니다.(제 친구 말씀^^) 화성법처럼 좋은 설계를 하기 위해서는 패턴(아키텍처 패턴, 디자인 패턴 모두 해당된다고 할 수 있음)을 이해하고 있어야 합니다. 그런데 화성법 배우지 않아도 작곡할 수 있듯, 패턴을 모르더라도 문서를 작성할 수 있습니다. 또한 패턴에 너무 의존하는 것도 좋지 않습니다. 화성법보다 작곡가의 마음과 사상을 표현하는 것이 더 중요하듯, 너무 무리하게 패턴을 적용한 문서는 오히려 이해하는데 방해가 될 수 있을 뿐만 아니라 자칫하면 요구사항 영역을 벗어나는 문서가 될 수 있습니다.
  전체 곡을 처음부터 끝까지 단번에 완성할 수 있는 그런 천재적인 작곡가도 있지만, 대부분 성부나 마디가 물이 흐르듯 자연스럽게 흘러가는지 생각(의심)하며 직접 연주해보기도 합니다. 이와 같은 모습은 특정 상황에서 특정 메소드가 제대로 돌아가는지 증명하는 단위테스트와 비슷하다고 할 수 있습니다. 그럼 최종 오케스트라 연주 전, 리허설을 하는 모습은 소프트웨어 개발과정에서 무엇과 비슷할까요? QA/QC팀에서 하는 통합 테스트나 전체 테스트와 비슷합니다.
  완성도가 뛰어나고 많은 사랑을 받은 오케스트라 연주(곡)들은 후세에 또 다른 색으로 입혀지게 되듯(리메이크) 완성도가 뛰어나고 모듈화가 잘 된 소프트웨어는 다른 개발자들이 재사용하여 또 다른 소프트웨어를 만들기도 합니다.(개인적으로 개발툴로는 Emacs와 Eclipse가 완성도가 뛰어나고 모듈화도 잘 되어 있다고 생각합니다.)

else ...

  지금까지 소프트웨어 개발과 오케스트라 연주의 비슷한 점에 대해서만 간략히 알아보았는데, 아래와 같은 차이점들이 존재합니다.
  소프트웨어 개발의 설계는 많은 이해관계자들의 참여를 필요로 하지만, 작곡은 주로 작곡가 혼자만 작업을 하게 됩니다. 또한, 소프트웨어 개발의 유지보수단계가 많은 시간을 필요로 하는 반면, 오케스트라 연주는 시간예술이기 때문에 유지보수 단계가 필요 없습니다.
  소프트웨어 개발과 오케스트라 연주를 조금 억지스럽게 비교하고 소프트웨어 개발과 오케스트라 연주가 조금 다르다는 것을 간과한 점이 있지만, 이 글을 통해 소프트웨어공학과 건축학을 비교하면서 생겼던 응어리를 나름대로 소프트웨어 개발을 예술로 승화시켜 없애보며(^^), 오늘도 한글과컴퓨터 개발본부의 오케스트라단원으로서 즐겁게 연주해봅니다.(가끔 실수도 합니다.^^)

by 어린왕자 | 2008/04/03 21:05 | 사색 | 트랙백 | 덧글(3)

사고

불완전한 사고[思考]는 사고[事故]의 씨앗이 된다.

by 어린왕자 | 2008/03/06 10:20 | 사색 | 트랙백 | 덧글(0)

MySQL 사용자 추가

1. 계정 추가
mysql -u root -p
mysql> use mysql;
mysql> insert into db (host, db, user, select_priv, insert_priv, update_priv, delete_priv, create_priv, drop_priv, grant_priv, references_priv, index_priv, alter_priv) values ('%','db_name','user_name', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y' );
mysql> insert into user (host,user,password) values ('%','user_name', password('user_password') );
(테스트 후 접속이 안 되는 경우 권한이 'Y'로 되어 있는지 확인한다.)
mysql> flush privileges;
mysqladmin -u root -p reload

2. 테스트
mysql -u user_name -p

by 어린왕자 | 2008/02/19 10:57 | 리눅스 | 트랙백 | 덧글(1)

<< 이전 페이지     다음 페이지 >>