'이야기'에 해당되는 글 5건

  1. 2010.05.26 구글 캘린더 한글 검색 팁! 10
  2. 2007.08.20 프로그래밍팁: 다이얼로그 디자인 복사하기 2
  3. 2007.07.21 프로그래밍팁: malloc과 free 시점 4
  4. 2007.07.11 IT 개발자의 푸념들
  5. 2006.12.15 하드보일드 드리머
2010. 5. 26. 20:11

구글 캘린더 한글 검색 팁!

일정 관리 도구로 구글 캘린더를 이용하고 있습니다.(구글 캘린더 - 쇼옴니아 Xcalendar 동기화) 
다 좋은데 한글 검색이 좀 안되더라구요.. 이리 저리 검색을 해봐도 다들 문제점만 나오고 해결책이 없더군요..

구글 캘린더 검색 창에 키워드를 넣고 검색 하다 보면 결과가 터무니 없게 나옵니다. (2010.05.26 기준)
검색엔진의 대가 구글이 이런 결과를 보이다니..대단히 실망스럽다는 생각과 함께 구글캘린더를 버려야 하나 뭐 이런 생각을 하기도 했습니다. 그러나 우리 구글신님이 이정도일리 없다는 판단에 이리 저리 해보다가 그 원인을 찾아내고야 말았습니다. 

"회의"를 검색하기 위해서 아래와 같이 입력하면 제대로된 결과를 도출해 줍니다.
내용: 회의
제외: null


원인은 잘 모르겠지만 아무래도 제 추측은 이렇습니다. 구글이 다국어 인덱스 파일을 만들 때 null 데이터를 인덱스에 포함시키는 버그가 있는 것으로 생각됩니다. 그래서 한글과 같은 다국어를 넣으면 검색 시 무조건 매칭되는 것으로 나오는 것이죠...

뭐 아니면 말구...  -    _-;

어쨋든 구글 캘린더 고급검색에서  당분간 저리 써야 겠네요.. 믿습니꽈...구글신!!!
2007. 8. 20. 09:00

프로그래밍팁: 다이얼로그 디자인 복사하기

윈도우 프로그래밍을 하다보면 자기 자신에 대한 깊은 애정으로 말미암아 현재 컴파일이 안되거나 되더라도 실행이 안되는 이유는 우리 빌게이츠 형님의 심복 마법사(AppWizard)님이 만들어 주신 코드에 문제가 있는 것이라고 감히 의심하는 경우가 생긴다.(대개는 자신의 코딩 문제다. 감히 마법사님이 만들어 주신 코드따위를 수정한다거나..ㅋㅋ)

이럴 경우 우리는 "그래 처음부터 다시 해보면 될꺼야~"라는 지푸라기라도 잡는 심정으로 다시 마법사님을 호출하게 된다.("님하 지능, 체력, 민첩 버프 부탁해요~")

 
하지만 대부분 다이얼로그나 윈도우의 디자인을 다시 하나씩 다시 만들다 보면 '급좌절'이 몰려 오면서 안선생님의 말씀이 귓가에 서라운드로 울려퍼지게 된다.
사용자 삽입 이미지

기적적으로 우연히 자신의 버그코드를 찾게된다면 문제가 해결되고 집에갈 수 있지만 그렇지 않을 경우 의심과 다시 시작, 포기 과정을 반복적으로 수행하면서 철야의 지옥 속으로 빠져들게 된다. ㅜㅜ 이때 '포기 과정'을 조금 극복할 수 있는 팁을 작성해 본다. (사실 쉬운건데 책에서는 잘 안나와서...한동한 삽질을 계속.......)

보통 우리는 프로젝트에서 다이얼로그나 윈도우 디자인을 할때 Workspace의 Resource 탭에서 Button이니 Edit box등을 끌어다 붙이거나 늘이는 짓으로 하게 되지만 우리 마법사님은 이를 Resource.rc란 파일에 스크립트 언어로 친절히 작성해 주신다. 또 VC++ 6.0의 경우 윈도우 프로젝트 간의 디자인 복사는 안되지만 프로젝트 내에서 디자인 복사는 Copy & Paste 방식으로 쉽게 할 수 있다. 이 두 가지 사실을 이용해 우리는 다음과 같이 디자인을 복사할 수 가 있다.

새로 시작할 프로젝트 'A'를 열어놓는다. 프로젝트 'A'에서 File->Open메뉴를 클릭한다. 읽기 파일 형식을 Resources Files를 선택하고 복사할 다이얼로그가 잔뜩 들어있지만 잘 안되는 프로젝트 'B'의 폴더를 선택한다음 Resource.rc 파일을 찾아서 클릭한다.

그럼 놀랍게도 프로젝트 'B'의 다이얼로그들이 촤라락 하고 익숙한 화면이 펼쳐진다. "오~ 놀랍...." 자 이제 화면에 버튼들을 모두 복사해(Ctrl+C) 'A' 프로젝트 다이얼로그에 복사(Ctrl+V)해주자.(물론 다이얼로그 크기는 수동으로 좀 맞춰주자....쿨럭)
사용자 삽입 이미지

당신들의 반응이 위와 같을 거라는것은 매우 잘 알고 있지만 그래도 나같이 야매로 프로그래밍을 배운 사람들에게는 유용할지도 모른다는 생각에 작성해 보았다. ㅎㅎㅎ 그럼 모두 즐 삽질~(ㅜㅜ)

'이야기' 카테고리의 다른 글

구글 캘린더 한글 검색 팁!  (10) 2010.05.26
프로그래밍팁: malloc과 free 시점  (4) 2007.07.21
IT 개발자의 푸념들  (0) 2007.07.11
2007. 7. 21. 23:58

프로그래밍팁: malloc과 free 시점

여러 사람이 윈도우 프로그래밍(VC++)을 하다 보면 다양한 형태의 라이브러리가 자신의 코드에 포함되고 여러 API를 사용하기 마련이다. 이 때 API에 파라미터로 넘어가는 포인터에 메모리를 할당하는 주체는 포인터를 사용하는 API 호출함수가 될 것이다. 쓰는 쪽에서 할당(malloc)하고 다 쓴 후 해제(free)하는 것이 기본적인 접근 방법일 것이다.

사용자 삽입 이미지
그러나 세상사 그리 뜻대로 되는 일이 얼마나 있겠는가? 코딩을 하다보면 여러 요인으로 라이브러리 내에서 메모리를 동적으로 할당하고 API 호출 함수쪽에서 이를 해제해야 하는 일이 발생하고 만다. 이러한 코딩 방식은 메모리릭(memory leak)을 유발하는 가장 적!극!적인! 코딩방식으로 다니는 회사가 마음에 안들때는 가끔씩 사용해 주는 것이 좋다. 아무리 주석으로 이 API를 쓰면 free를 꼭 해달라라고 써 놔도 시간이 지나고 여러사람이 사용하다 보면 결국 누수가 발생하고 만다. (쓰기만 하면 메모리 릭이 나서 모두들 꺼려하지만 상당량의 코딩을 다시하는 것은 귀찮고 누구하나 신경쓰지 않기 때문에 궁시렁 거리면서 계속 쓰게 되는 API 라이브러리가 탄생하는 것이다..ㅎㅎㅎ)

그런데 이러한 팁(응?)을 사용하다 보면 가끔 API 라이브러리 안에서 할당한 메모리가 API 호출 함수에서 해제되지 않는 불상사가 생기고 만다. 프로그램은 쀍~ 하고 죽어버리기 때문에 이건 좋지 않다. 이런 경우 API 라이브러리를 만든 사람과 API 호출 함수를 만든 사람들은 서로 잘 못 한 것이 없기 때문에 상대방의 정신상태를 과격하게 지적하는 상당량의 말들을 쏟아내고 프로젝트는 점점더 지옥 속으로 빠져드는 것이다.

이러한 상황을 극복하기 위해서 다음과 같은 코딩 패턴을 추천한다.(어찌보면 당연하지만)

//Hell.DLL (API Lib)
//pDeveloper에 스트레스 길이만큼 malloc()해서 적당히 태운다음 반환하는 함수
  //void vBurn(char *pDeveloper);
//pDeveloper를 해제(free)하는 함수
  //void vFree(char *pDeveloper);

//Company 프로그램(API 호출 함수)
void main()
{
  HANDLE hHell = LoadLibrary("Hell.dll");
  char *pJInyoung = NULL;
  while(1)
  {
      hHell->vBurn(pJInyoung);

      hHell->vFree(pJInyoung); //여기서 free(pJInyoung); 하면 될 수도 안될 수도 있다.
  }
}

free(pJInyoung);이 될 수 도 안될 수도 있다는게 지옥이다. 보통 안될 때는 hHell.DLL 내에서 malloc한 주소 값과 Company프로그램에서 pJInyoung의 주소가 같기 때문에 나같은 초급 개발자는 당췌 free가 안되는 이유를 알 수가 없다. 또 Debug 모드에서는 안되면서 Release 컴파일 모드로는 되버리는 경우가 있기 때문에 마음속에 '불안감'이 동골동골 굴러다니게 되는 코드가 되는 것이다.

main과 DLL은 서로 같은 메모리 스페이스를 사용하기 때문에 DLL과 exe 프로그램의 주소체계는 같다고 보면 된다. 서로 다른 메모리 스페이스를 사용한다면 vBurn에 포인터를 넘겨서 Hell.dll 안에서 작업하는 것 자체가 불가능할 것이다. 즉 주소가 잘못되서 이런 문제가 발생하지는 않는다.

실제 문제는 라이브러리와 프로그램에서 VC++이 사용하는 Heap이 서로 다르기 때문에 발생한다. VC++에서는 debug heap, crt heap, mp heap 등 다양한 Heap이 존재한다. 각 Heap들은 allocation/deallocation 방식도 다르고 자기가 사용하는 메모리 영역도 다르기 때문에 한쪽 힙에서 할당한 메모리를 다른쪽 힙에서 해제하려고 하면 메모리 릭이 발생하거나 혹은 에러를 내는 것이다. 따라서 dll에서 사용한 힙과 exe에서 사용한 힙이 같을 경우에는 전혀 문제가 발생하지 않게 되는 경우도 있다. 우연히 릴리즈모드에서 사용 heap이 같아서 free(pJinyoung)이 되는 경우가 있을 수 있는것이다.

진짜 문제는 나같은 초급 개발자는 일반적으로는 dll에서 어떤 힙을 사용했는지 모르게 되는 경우가 대부분이라 더욱 난감하다. 따라서 DLL에서 메모리를 할당했으면 DLL 안에서 free를 해주는 것이 세상을 아름답게 하는 코딩방법이라고 주장해 본다. ㅎㅎㅎ

사용자 삽입 이미지

'이야기' 카테고리의 다른 글

프로그래밍팁: 다이얼로그 디자인 복사하기  (2) 2007.08.20
IT 개발자의 푸념들  (0) 2007.07.11
하드보일드 드리머  (0) 2006.12.15
2007. 7. 11. 14:41

IT 개발자의 푸념들

최근 IT 개발자들의 힘든 삶의 모습들이 이슈화 되고 있는 것을 다음 기사들을 통해서 느낀다. 모든 사람에게 일반화 시킬 수 없는 몇 가지 사례들일 뿐이지만 진지한 공감 리플과 여러 매체에서 비슷한 논조를 바라보면서 나 역시 한사람의 IT 개발자로서 깊은 공감을 느낀다. 계속 이러한 논의가 활발히 진행되어 다른 산업에 비해 기형적으로 개발자의 희생을 바탕으로 한 산업구조가 해소되기를 기대해 본다. (그런 일이 일어날리 없지만... 고도의 자본주의 사회에서 자본이 투입되고 예산이 편성되기 시작한 '시스템'을 그 속에 속한 인간들이 불평을 좀 해본들 "어이쿠 이런~냉큼 바꾸겠습니다.."라고 할리 없다. 적자가 난다면 아마 "슬슬 바꿔볼까"하고 생각할지도...)

MoveOn21.com:: IT맨, 내가 사직서를 쓴 이유
네이버 뉴스:: [집중] '월화수목금금금' 프로그래머의 현실
ZDNet Korea:: 한국에서 SW 개발자가 성공하지 못하는 세가지 이유
SmartPlace:: 글로벌 R&D 센터의 부진, 그리고 대한민국의 개발 역량 저하
SmartPlace:: 개발자여, 즐거워 져라

그리고 개발자로서 상당히 재미있고 유용한 이야기들을 링크해 본다.

SmartPlace:: 합리성의 함정, 방법론의 환상에 빠지지 마세요
SmartPlace:: 오픈소스의 저작권, 그리고 상용 SW 개발자가 반드시 지켜야 할 사항
MBA Story:: 연봉의 경제학-프로그래머의 적정 연봉은 얼마인가?
ZDNet Korea:: S/W 업계에서 살아남기 위한 다섯 가지 지침
ZDNet Korea:: IT 인재를 관리하기 위한 세 가지 중요 지침
ZDNet Korea:: 현실, 이상, 그리고 환상의 IT. 그 세가지 세계관에 관하여

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지








2006. 12. 15. 00:22

하드보일드 드리머

너무 맑아 음산한 느낌이 드는 호수가 보인다.
뒤로는 울창한 숲이 있는 것 같기도 하고 텅 빈 공간일지도 모른다.
지독하게 짙은 안개는 그녀의 판단을 흐려 놓는다.
잘 알 수 는 없지만 그녀의 마음은 왠지 무겁다.

이 때 그녀의 아들이 시야에 나타난다.
아들의 얼굴은 몹시 무표정하고 초점은 흐리다.
그녀는 직감적으로 그가 무엇인가에 홀려 있음을 깨닫는다.
크게 소리쳐 그를 불러 세우고 싶지만 왠지 그녀는 소리칠 수 없다.
목 언저리에 걸린 고함이 더욱 그녀를 답답하게 옥죄어 온다.

그 사이 아들은 호수로 천천히 걸어 들어간다. 붙잡고 싶지만 그녀는 꼼짝도 할 수 없다.
눈 앞에서 호수가 아들을 삼켜버리는 장면은 끔찍하다.
그녀의 눈에서는 오래전 부터 계속 눈물이 흘러나오고 있지만 깨닫지 못한다.

그녀의 울음이 격해지기 시작할 때 갑작이 호수로 부터 처녀가 걸어 올라온다.
나무랄 데 없이 착해 보이는 외모지만 그녀는 한 순간에 처녀가 위험한 존재임을 알 수 있다.
갑작이 처녀는 입을 열어 외친다. 목소리가 울리는 것인지 그녀가 떨고 있는 것인지 알 수 없지만
목소리는 그녀의 가슴을 때리듯 들린다.

"나는 이 호수에 만년 동안 잠겨있도록 저주를 받았지만 너의 아들을 뜯어 먹고 다시 이땅을 밟았다."

계속 되는 무서움 속에서 아들이란 단어가 퍼뜩 그녀의 정신을 들게 한다.
고난한 그녀의 인생에서 위기 때 마다 늘 그랬듯이 아랫배에서 부터 따뜻한 용기가 퍼져 나온다.
아들을 구해야 한다는 생각이 그녀의 떨림을 멎게 만들고 차분하게 응대한다.

"나의 아들을 돌려 주시오. 당신은 나의 아들을 가져갈 권리가 없소."
"다만 내가 할 수 있는 일이라면 뭐든지 내어 주겠소.
그리고 당신을 위해 공양을 들여 성불 할 수 있도록 빌겠소. 나의 아들을 돌려 주시오..."

처녀는 외견 상으로는 전혀 변하지 않았지만 더욱 위압감이 느껴진다.

"내가 성불할 수 있도록 빌어 준다면 너의 아들을 돌려 줄 수도 있다."
"그러나 나는 너를 믿을 수 없다."

동시에 그녀의 아들은 물 위로 떠오른다. 그런데 아들은 혼자가 아니다.
완전하게 동일하게 생긴 아들이 2명이나 떠 오른 것이다.
게다가 아들의 다리 쪽은 짙은 녹색에 언뜻 비늘로 덮혀 있어 물고기같아 보인다.

그녀는 마음이 다급해 진다. 그녀는 간곡한 마음으로 무릎을 꿇어 부처에게 소망한다.

"처녀를 성불시켜 주십시오...처녀를 성불시켜 주시고 나의 아들을 돌려 받을 수 있게 해주십시오..."

진실된 그녀의 소망은 처녀의 마음을 움직인다. 아들을 슬쩍 가르키자 한명의 아들이 훌쩍 떠올라
그녀 앞으로 던져진다. 그녀는 정신없이 아들을 부둥켜 안고 이름을 불러 보지만 아들은 의식이 없다.
그녀는 아직 호수에 떠 있는 아들과 합쳐져야만 아들이 완전해 짐을 깨닫는다.
다시 침착한 목소리가 처녀를 향한다.

"나의 아들을 데려가려고 하지만 그 것 과는 별개로 나는 당신이 불쌍합니다.
제발 당신의 성불을 계속 빌어 주고 당신을 잊지 않을 테니 제발 나의 아들을 돌려 주세요.."

마지막 말에는 다시 울음이 섞인다. 마음 속 깊은 곳에서 퍼올린 진실의 언어가 처녀에게 향한다.
숱제 비명과 흡사하지만 그녀는 간곡하게 외치고 외친다...

.........

눈을 떠보니 울고 있지만 익숙한 감각이 돌아온다.
흠뻑 흘린 눈물과 땀으로 전신이 끈적하지만
왠지 모를 안도감이 밀려온다.
"그렇구나...꿈이었구나.... 휴..."


2006. 12. 13. 엄마의 꿈 이야기...
덜덜덜.....엄마는 완전히 하드보일드 드리머다.......
도대체 엄마의 무의식에는 어떤 세계가 펼쳐져 있을 지 생각하는 것만으로도 두렵다..ㄷㄷㄷ