오픈소스?

개인적으로 오픈소스에 관심이 많습니다.
개발자라면 공개된 소스에 관심이 많은 것은 당연하겠죠.
저 역시 오픈 소스 커미터가 되었으면 하는 막연한 생각은 합니다. 일단 멋지지 않은가요? 😉

오픈 소스 애플리케이션을 쓰면서 소스코드에 주목하지 않는 것은 저 역시 마찬가지 입니다. 다만 뭔가 불편한 사항이 생겼을 때, 그리고 시간적 여유가 있을 때는 조금 다르죠.
오픈 소스 애플리케이션을 사용하다가 불편한 것이 있다면, 그리고 능력이 허락된다면, “에이~ 왜 이거 안돼!” 하면서 소스코드를 보면서 고쳐볼 수 있습니다.
제가 해본 유일한 경험은 우분투를 사용하면서 FTP 클라이언트인 gftp 프로그램의 파일이름의 원격인코딩이 제대로 적용되지 않는 것을 보고 gftp의 소스코드를 제맘대로 수정해서 원격인코딩을 구현해 본 것 뿐입니다.(나중에야 안 것이지만 비슷한 기능을 gftp 메일링 리스트에서 중국인이 패치한 것이 있다고 하더군요. 그래도 제 패치가 더 좋습니다. 😛 전 Upload & Download 시에도 원격 인코딩 설정에 맞춰서 파일이름을 변경하게 했거든요. 패치를 원 개발자에게 이메일로 보내긴 했습니다만, 코드의 품질 탓일까요? 반영되진 않는 것 같군요;;)

윗 글에서는 오픈 소스 커미터가 되어 보자고 권장하고 있습니다. 전체적인 질을 높이자는 것이죠. 찬성합니다! 저 역시 제 시간이 허락하는 한도 내에서 그렇게 하고 싶고, 막연히 생각하고 희망하는 “오픈 소스의 발전”에도 도움이 될 것 같아서 말이죠.(받은 만큼 돌려준다. 제 기본적인 마인드입니다.)

결론은 리눅스 또는 소프트웨어 개발에 관심이 있는 분들이라면 오픈 소스에 참여해 보시기를 저 역시 권하고 싶습니다.(일단 저부터 해야겠지만요; )

p.s : 윗 글의 제목과 글을 보았을 때 제목에서 나오는 오픈소스 코드가 가지는 의미는 없다는 것으로 오해할 만 하군요; 이에 관해서 KLDP 에 권순선님이 트랙백 하신 글에 달린 원 글 주인의 댓글을 인용합니다.

오픈소스코드 활용의 자유가 얼마나 큰 의미가 있고 중요하다는 것은 충분히 잘 알고 있습니다. 고객이나 주변 사람들에게 항상
그런 얘기를 하고 더 나아가 코드의 활용을 통해서 얻을 수 있는 가치가 얼마나 큰지에 대해서도 자주 강조하는 편입니다. 작년엔
마소에 “오픈소스의 소스코드는 개발자를 위한 숨겨진 보물이다”라는 내용의 글을 쓰기도 했습니다.

하지만 그런 얘기들이 점점 공허하게 느껴졌습니다.

오픈소스 제품의 사용자(많은 개발자들은 라이브러리나 프레임워크의 사용자입니다)들은 점점 자신이 사용하는 것이 오픈소스라는
것에 의미를 두지 않습니다. 소스코드의 존재여부 자체에 관심도 없습니다. Free/OSS라고 하면 대부분 “공짜”라는 것에만
관심을 둡니다.

반대로 소스코드가 뭔가 대단한 것을 줄 것이라는 환상에 빠져있는 사람도 많습니다.

의미라는 것은 결국 어떤 것이 가지는 “가치”라는 뜻입니다. 저는 의의(significance)가 없다고 한 것이 아니라
개개인에게 현실적인 의미(meaning)나 가치(value)가 없다고 얘기한 것입니다. 현실적으로 각종 차별이 견고하게 존재하는
한국에서 “평등”이라는 헌법조항이 무슨 의미가 있냐고 항변하는 것과 마찬가지 입니다. 물론 그 평등조항이 있기 때문에 넓게 보면
얼마나 큰 혜택을 받는지 알 수 있겠죠. 하지만 그것이 존재의미가 있다고 해서 현실에서 차별당하는 사람에게 “헌법에는 평등권이
있어”라고 얘기해주는 것이 현실적으로 무슨 유익이 있겠냐는 것입니다.

물론 극히 좁은 시각과 제한된 관점에서 나온 발언인 것은 인정합니다. 제 최근의 경험 때문에 그런 말을 꺼낼 수 밖에
없었습니다. 소스코드에 대해서 막연한 환상을 가지고 있다가 나중엔 그 존재 의미조차 부정할지도 모르는 사람들에게 좀 더
“현실적”이 되자는 얘기였습니다.

그리고 진정한 그 존재 의미를 이해하고 그 가치를 누리며 적극적으로 활용하는 소수의 사람들이 있겠죠. 그들을 무시한 것은 절대 아니기에 저는 이 포스트의 제목에 고쳐 쓰신 것처럼 “아무” 의미가 없다라고는 하지 않았습니다.

마지막으로 오픈소스의 소스코드는 저한테는 개인적으로는 큰 의미가 있습니다. 저는 그 가치를 충분히 누리고 있고 그 점에
대해서 항상 감사하게 생각하고 있습니다. 하지만 이제는 다른 사람에게 그렇게 너도 하라고 “강요”할 욕심은 버렸습니다.

C 코드 최적화에 관한 글

C 코드 최적화

ARM 기반의 C 코드 최적화에 대해서 다루었다고 합니다.
저 개인적으로는 회사에서 했었던 프로젝트에 적용했던 것들이 몇 개 눈에 띄네요.
17번 같은 경우는 정말 독특하군요~ 저런 방법이 있을 줄이야!
나머지들도 특정 상황에서는 꽤 도움이 될 듯 싶어 블로그에 남겨둡니다.

관심있으신 분들은 한 번쯤 읽어보세요~!
답글에 오하라 님이 남겨주신 글도 꼭 한번 봐야겠군요. 🙂

익스플로러에서는 블로그가 이상하네요.

파이어폭스를 씁니다. 익스플로러보다 훨~~~~~~~~~~~~~~씬 편하고 빠르고 안전하거든요.
그래서 익스플로러로 제 블로그를 들어오는 일이 없었는데 어젠가 누가 제 블로그에 들어온 걸 보았는데 그림이 막 4개씩 뜨고 그러더군요-_-
파이어폭스에서는 제대로 보이는데.. 흐음..
수정이나 해볼까 하고 관리자로 로그인하려고 했더니 로그인도 안되는데 이건 뭘까요;;
태터툴즈의 버그일까요? 이런 버그라면 전 왠지 환영하고 싶은..(…;;;)
파이어폭스 안써보신 분은 한 번 써보세요~ 🙂

수강신청 화나네요.

20분째 로그인 시도중입니다.
페이지를 찾을 수 없습니다 오류가 오늘따라 더 짜증스럽네요.
로그인조차 할 수 없다니-_-+

컴퓨터 공학 전공 커리큘럼부터 시작해서 맘에 드는 게 없는 우리 학교입니다.
돈은 왜 또 그렇게 많이 쳐받는지…
학생회는 왜 또 그렇게 고분고분한지…

누워 침뱉기지만 고교생이 우리 학교 오고 싶다고 하면 뜯어말리고 싶습니다.

..전 성균관 대학교를 다닙니다.

GRUB 삭제하고 윈도우즈XP로만 부팅시키기(복구 콘솔)

1. XP가 실행 중인 상태에서 설치 CD를 넣고 “시작”/”실행”/”D:\i386\winnt32.exe /cmdcons”
2. 복구 콘솔 설치
3. 리부팅
4. 복구 콘솔 선택
5. Administor 로 로그인
6. “fixmbr”
7. “fixboot”
8. 리부팅
9. “내 컴퓨터”에서 우클릭 후 “속성”
10. “고급” 탭의 “시작 및 복구”란의 “설정”
11. “시스템 시작” 에서 “편집” 버튼
12. “[operation systems]” 에서 복구 콘솔이 있는 라인(아마도 맨 마지막) 삭제
13. “파일”/”저장” 후 종료
14. C 드라이브의 “Cmdcons” 폴더와 “Cmldr” 파일 삭제

당연히 리눅스 파티션(EXT3와 SWAP)은 지우고 합친 후 NTFS나 FAT로 포멧해서 사용한다.

Gaim 플러그인과 자테온(Jateon)

네이트온을 안쓰고안쓰다가 결국에는 쓰게 되어 버렸습니다.
학과 프로젝트시나 잠깐잠깐 썼었는데 SSM 되면서 SSM 멤버들끼리 공식적으로 네이트온을 쓰더군요. “대세는 네이트온!” 이란 말에 흥! 했었는데 결국 이렇게 되는군요-_-;;

근데 이 네이트온이란 메신저가 윈도우즈 기반에서만 동작합니다. 제가 원래 썼던 MSN 메신저의 경우 Gaim 에서 MSN 용 플러그인을 사용할 수 있었기 때문에 윈도우든 리눅스든 어디서나 메시지 주고받기나 간단한 파일전송 등의 기본 기능은 사용할 수 있었습니다. 근데 네이트온은 리눅스용 클라이언트를 공식적으로 제공하지 않기 때문에 사용할 수가 없습니다. 이 것 때문에 리눅서들이나 맥 유저들의 비난을 받고 있기도 하죠.(관련글)

그런데! IRC의 #ubuntu에서 뵈었던 Kfmes 님께서 자바 기반의 네이트온 클론을 만들고 계십니다. 전에 개발중이신걸로만 알고 있었는데 이게 오픈 베타로 전향되면서 인터넷 상에 꽤 파장을 일으켰더군요. 좋은 일입니다. 🙂 기본적인 문자/쪽지 보내기 기능에 문자보내기까지 구현이 되었다고 합니다. 아직 써보지 않았었는데 한번 써보아야겠어요. 🙂 자바 기반의 프로그램이므로 자바 VM을 구동할 수 있는 환경이라면 어느 환경에서나 쓸 수 있는 점이 장점이겠네요. 역시 자바인가요 ㅎㅎ.

그런데 이 것뿐만이 아닙니다. 역시나 #ubuntu 채널에서 뵈었던 헤즈님이 게임메신저의 네이트온 플러그인을 개발 중이십니다. 1 년전쯤 마음에 드는 아는 여자분이 네이트온을 사용한다고 하여 리눅스에서도 네이트온을 쓸 수 있도록 해야겠다! 고 마음먹으셨던게 개발동기인 것으로 알고 있습니다. (그 이후 개발이 왜 뜸해졌던가는 대충 예상하실 수 있겠죠? 좋은쪽과 나쁜쪽 중 나쁜쪽입니다;) 오늘 보니 이 플러그인도 인증과 리스트를 처리하는 부분까지는 완성된 모양입니다. ㅎㅎ

두 분께 정말 박수를 보냅니다.
서로 소스공개도 하시고 같이 하셨으면 더 좋겠어요~ ㅎㅎ. 힌트만 주고 받는 것 말고요~ 😉

전 게임을 자주 쓰므로 게임 플러그인이 하루빨리 완성되기를 손꼽아 기다리고 있습니다. 그 전까지는 자테온을 열심히 써야겠지요. ㅎㅎ

p.s : SK는 정말 괘씸합니다.

이곳은 gpl 프로그램이 상업적 용도로 사용되는것을 지지합니다?

오늘 우분투 포럼에 가볼 생각으로 우분투 한국 사용자 모임(http://ubuntu.or.kr)에 들어가 보았습니다. 첫페이지에서 뭔가 묘한 위화감을 느끼고 뭘까 하고 고민해보니 처음 문구가

“이곳은 gpl 프로그램이 상업적 용도로 사용되는것을 지지합니다.”

로 바뀌어 있더군요. 바뀌어 있던 페이지는 여기서 보실 수 있습니다.
얼마전 첫페이지가 질문글로 바뀌어 있던 만행을 본 후라 뭔가 모르게 욱!했습니다.
원래대로 다시 고쳐놓긴 했습니다만.. 씁쓸합니다.
게다가 더 씁쓸한 것은 우분투 포럼에 접속하자 다음과 같은 화면을 보여주는 것이었습니다.

(수정) IRC 의 #ubuntu 에서 이야기를 꺼냈더니 바로 복구되었습니다 🙂

int. 하면 무엇이 떠오르시나요?

int. 하면 뭐가 떠오르시나요?

문득 한컴 사전을 띄워놓고 코딩작업을 하던 중에(한컴 사전은 마우스 포인터 위치에 있는 문자열의 사전적 의미를 보여줍니다.) 한컴 사전에 int. 의 뜻에 대해서 나오고 있더군요.

한컴 사전에서 int.에 대해서 보여주는 것은 다음과 같습니다.

int.
interest; interim; interior; interjection; internal; international; interpreter; intransitive.

저는 Machine-dependent 한 정수 자료형이 떠오릅니다만, 여러분들은 어떤 것이 떠오르시나요?(마지막에 붙은 .은 잠시 접어두죠. 😉 )

변수 초기화의 중요성

변수를 선언하고 정의할 때 초기값을 넣어 초기화한다.

기본 중의 기본입니다. 이 말을 왜 하는가 하면-_-;;

아르바이트로 VC 6로 프로그램을 하나 작성중인데 DEBUG 모드에서는 없던 문제들이 RELEASE 모드에서 빌드한 후에 마구 터져나오더군요;
역시나 쓰기전에 초기화하지 않은 변수들때문이었죠.

한가지는 윈도우 크기를 콤보박스의 선택에 따라 바꾸는 기능을 넣고 싶어서 원래 창의 크기를 m_Rect 에 기억시켜뒀다가 선택에 따라 m_Rect.Height() <-> m_Rect.Height() + 30 으로 창의 높이를 변경하려고 했습니다. 헤더에 CRect m_Rect; 를 선언하고 다음과 같이 작성했죠.

   CRect rect;
   GetWindowRect(&rect);
   if(m_Rect.Height() == 0)    {
       m_Rect = rect;
   }

이게 제대로 동작하려면 당연히 초기에 m_Rect.Height() 가 0이어야합니다.(!)
생성자에 넣어야지. 라고 생각하고 까먹었던거죠(…) 이게 없던 결과로 m_Rect.top 과 m_Rect.bottom 에는 -8203…어쩌고 하는 값이 들어가서 윈도우가 안보이더군요. 전 프로그램이 뻗은 줄 알았어요-_- DoModal() 로 띄워둔 창은 안보이고 아래 윈도우에 Focus() 가 가지 않고 모든 입력을 거부하고 있으니 어디서 무한루프를 도나? 하고 생각했던거죠.
이 문제는 생성자에 다음을 넣음으로써 간단히 해결됐습니다-_-

   m_Rect.top        = 0;
   m_Rect.bottom    = 0;

또 다른 문제는 같은 역할을 하는 double형 값을 입력받는 Edit 창 10개를 만든 후 개수에 따라 Visible 한 Edit의 개수를 변경해서 값을 입력받는 것이었습니다. 먼저 헤더에

   double    m_dDip[10];
   double    m_dDipDirection[10];

과 같이 선언하고, DoDataExchange 변수에

   DDX_Text(pDX, IDC_EDIT_JOINT_DIP01, m_dDip[0]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP02, m_dDip[1]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP03, m_dDip[2]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP04, m_dDip[3]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP05, m_dDip[4]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP06, m_dDip[5]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP07, m_dDip[6]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP08, m_dDip[7]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP09, m_dDip[8]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP10, m_dDip[9]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP_DIRECTION_01, m_dDipDirection[0]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP_DIRECTION_02, m_dDipDirection[1]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP_DIRECTION_03, m_dDipDirection[2]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP_DIRECTION_04, m_dDipDirection[3]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP_DIRECTION_05, m_dDipDirection[4]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP_DIRECTION_06, m_dDipDirection[5]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP_DIRECTION_07, m_dDipDirection[6]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP_DIRECTION_08, m_dDipDirection[7]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP_DIRECTION_09, m_dDipDirection[8]);
   DDX_Text(pDX, IDC_EDIT_JOINT_DIP_DIRECTION_10, m_dDipDirection[9]);

와 같은 코드를 작성했더랍니다.

근데 다이얼로그를 띄우면 “숫자를 입력하세요” 란 메시지가 나타나면서 IDOK를 거부하는 겁니다-_- 역시나 멤버 변수의 값들의 초기화 문제 때문이었습니다.
이문제도 생성자에 다음을 넣어서 간단히 해결되었습니다-_-

   int i = 0;
   for(i = 0; i < 10; i++)    {
       m_dDip[i]            = 0;
       m_dDipDirection[i]    = 0;
   }

아고.. 암튼 삽질의 연속입니다. 역시 기본을 충실히 지키지 않으면 언젠가 댓가가 따르는 법입니다. 전 그 댓가로 3시간 자고 일어나서 전화받고 깨서 버그 잡고 있습니다. ㅡㅜ

증명사진

살다보면 증명사진 필요한 일이 꽤 많은 것 같습니다.
증명사진을 스캔해서 주어야 하는 일이 생겼는데 미루고 미루던 증명사진 찍기를 드디어 해야만 할 것 같습니다.
사실 정보처리기사도 작년에 붙었는데 증명사진 가져오라는 공지에 미루고 미루다가 아직까지 찾아오지 않았다지요(…) ..그거 지금 가도 주겠죠?;

암튼 사진찍으러 얼른 가야겠어요. 설 전에 참 바쁘네요!

모두들 새해 복 많이 받으세요!