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시간 자고 일어나서 전화받고 깨서 버그 잡고 있습니다. ㅡㅜ

증명사진

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

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

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

어라.. 내 글이 왜 KLDP 위키 처음에?;

습관대로 KLDP에 접속했는데 첫 화면에 위키 최신글에 dasomoli/SubVersion-Installation이 있길래 깜짝놀랐습니다. 해당 글은 예전 회사에 다닐 때 서브버전 설정을 했던 경험을 토대로 셋팅 방법을 적어놓은 것입니다. 글의 소개에서도 알 수 있지만 개인적으로 정리해 둔 글이었는데 다른 분들이 참고했었나 봐요. 글 속의 오타인 “다룬로드” 를 “다운로드”로 변경해서 누군가가 수정해 놓았네요.

아무리 사소한 글이라도 제 글이 누군가에게 도움이 된다는 건 참 기분좋은 일인 것 같습니다.

제가 지금 기분이 좋거든요. 🙂

삼성 소프트웨어 멤버십 합격

[ 삼성전자 SW멤버십 ] ’07년 상반기 신입회원 선발 기술전형 결과 발표

축하드립니다!

양정석 님은 07년도 상반기 삼성 SW 멤버십 17기 신입회원 기술전형에 합격하셨습니다.

삼성 SW 멤버십에서 계획하신 큰 꿈을 이루시기 바랍니다.

양정석 님이 활동하실 지역은 수원 멤버십입니다.

앞으로의 일정을 안내해 드리겠습니다.

[신입회원 집중 세미나]

1) 지역별 집합장소/시간

– 강남 : 1월 24일 / 강남멤버십 5층 집합교육장 / 18:00

– 신촌 : 1월 23일 / 신촌멤버십 4층 세미나2실 / 18:00

– 수원 : 1월 25일 / 수원멤버십 세미나실 / 18:30

– 대전 : 1월 25일 / 대전멤버십 3층 교육장 / 14:00

– 대구 : 1월 24일 / 대구멤버십 세미나실 / 14:00

– 부산 : 1월 24일 / 부산멤버십 5층 세미나 2실 / 15:00

– 광주 : 1월 26일 / 광주멤버십 5층 세미나실 / 19:00

– 전주 : 1월 24일 / 전주멤버십 세미나실 / 15:00

2) 행사내용

– 담당연구원, 자치회 상견례

– 멤버십 생활 소개

– 집중세미나 일정 안내

– 신입회원 Orientation 안내

3) 준비물 : 필기구, 통장사본(외환은행), 도장

기타 문의 사항은 아래의 연락처로 문의해 주시기바랍니다.

강남 : 02-3446-3733, chuho.chang@samsung.com

신촌 : 02-702-0387 , mincheol.kwon@samsung.com

수원 : 031-217-9915, kyoungbong.kang@samsung.com

대전 : 042-488-5782, hosang.kim@samsung.com

대구 : 053-428-3309, chanho61.park@samsung.com

부산 : 051-636-1543, kyutae2005.park@samsung.com

광주 : 062-269-4607, inki.dae@samsung.com

전주 : 063-273-7064, jaekyu44.park@samsung.com

네. 그렇습니다. 합격이라네요. ㅎㅎㅎ
별로 기대도 하지 않았는데.. 한편으로는 고생문을 연 것 같기도 한 것 같고..
뭐 암튼 되었다니 기분은 좋네요!
다이어리에 1월 25일, 2월 7~9일을 표시해두어야겠어요.

OpenDWG 라이브러리 참고?

학교 토목과 랩의 동아리 선배의 의뢰로 프로그래밍 아르바이트를 하고 있는 중입니다.
이제 시작하는 단계인데 AutoCad 의 DWG 포멧을 읽어서 정보를 얻어달라고 하시네요.
저는 CAD 프로그램은 전혀, 하나도 다룰 줄 모릅니다;
선배님의 친구분이 그 비슷한 업무를 하셨다고 하시는데 소스포지의 자료를 참고해서 하셨다고 전해들으셨답니다. 전화상으로 거기 있는 것을 참고하면 별로 어렵지 않을 것이라고 하시더군요.

제가 지금까지 소스포지에서 찾아본 것으로는 OpenDWG 라는 DWG 포멧을 다루는 라이브러리를 사용한 프로그램이 있더군요. OpenDWG 사이트를 가보니 크게 네 종류의 멤버로 구분하고 있고 Associate member를 제외한 나머지는 비용을 내야 하는 것으로 되어 있네요.

일단 Associate member로 신청해놓았습니다만 양식을 채워서 다시 보내야할지 말아야 할지 고민이 됩니다.(다운로드 할 수 있는 양식을 채워 이메일이나 팩스로 다시 보내야만 최종 회원으로 승인됩니다.) 제가 하는 것은 아르바이트이지만 랩 내에서만 쓰이는 프로그램 같지는 않고 어느 곳의 프로그램을 제작해주는 형식이지 않을까 하는데 그렇게 되면 라이센스 문제를 피할 수 없겠죠.(Associate member는 educational이나 free형식의 사용만 가능한 것으로 이해했습니다.)

또 다른 고민으로는 과연 오픈소스 프로그램을 “참고”하는 것을 어떻게 보아야 하는 건가 하는 겁니다.(OpenDWG가 오픈소스이냐 아니냐는 일단 차치해두고라도 말이죠) 오픈소스 프로그램 코드 전체 혹은 일부를 Copy & Paste 한다면 당연히 프로그램의 라이센스에 따라야겠죠. 그렇다면 소스를 보고 이해한 후 다시 작성한다면 어떤걸까요? 소스 코드를 보고 재작성한다 하더라도 역시 머리속에서 루틴을 Copy & Paste 하는 것이나 마찬가지 아닐까요? 그렇다면 소스코드를 보는 것 만으로 라이센스에 따라야 할까요? “참고”라는 애매한 단어를 어떻게 보아야 할까요? 국내 많은 업체들이 괜찮은 오픈소스 프로젝트를 따와서 자신들의 프로그램을 만들고 상용으로 판매하고 있다고 합니다.(언젠가 MS의 DevDays에 갔다가 들은 이야기) 이 업체들은 라이센스 문제를 어떻게 이해하고 적용한 걸까요?(자신들의 소스코드를 공개하지 않으니 누가 뭐라든 증거가 없다는 식일지도..) 단지 “참고용”이었을 뿐일까요?

일단 선배형의 친구분이 어떤 프로젝트를 참고하셨는지는 아직 확실치 않습니다만, OpenDWG를 사용하셨을 확률이 높을 것 같습니다. 만약 OpenDWG를 사용해서 하자고 하시면 일단 안된다고 해야겠죠.(프로젝트 성격이 다르다면 모르겠지만요) 이리저리 찾아본 결과 DXF 파일 포멧은 공개 포멧인 것 같으니 제작방향은 일단 그 쪽으로 설정하고 이야기해 보아야겠습니다.

데비안 새로운 관리자 안내서!

우분투 위키의 사용자 문서를 보다가 데비안 새로운 관리자 안내서라는 문서를 이제서야 발견했습니다! 무심코 눌렀다가 “왜 이제서야 이걸 발견했지!?” 라는 탄성이 절로 나와버렸네요!

이 문서는 데비안 패키징에 대해 “제대로 된 방법으로 시작”하는 방법을 설명합니다. 전 패키지 시스템을 유용하게 쓰고 있긴 합니다만 패키지를 직접 만들어 쓰는 것은 우분투패키징 안내서를 참고해서 파일 몇 개 수정하고 dpkg-buildpackage -rfakeroot 하는 것 밖에 몰랐거든요!

엇? 근데 전에 언젠가 이 비슷한 문서를 프린트해서 어디다 뒀었는데;;

어찌됐건간에! 숨겨둔 보석을 발견한 기분이네요!