[펌] 느낌이 왔을때 저질러라?

앤드류스 타이(Andrew’s Tie)란 넥타이 전문점이 있다. 이태리에서 가장 큰 넥타이 전문 메이커인데 유럽 등지에서는 최고의 넥타이로 유명하다.

한국에서도 이미 15개의 점포가 있으며 급속하게 그 이름이 알려지고 있다. 이 회사의 한국 대표 장윤경 사장은 원래 전자부품 관련 일을 오랫동안 했으며 한편으로는 명품 관련 수입을 20여년 가까이 해 온 사람이다.

덕분에 해외 출장을 누구보다 많이 다닌 사람이다. 그러다 다니던 전자부품 회사가 어려워지자 회사를 그만 두고 2년간 중국에서 낭인생활을 했다. 2년간 29개의 중국성을 모두 다녔으니 대단한 용기와 투자가 아닐 수 없다.
 
그가 친구와 같이 했던 명품 관련 일은 재고와 미수금 문제 때문에 겉으로는 남고 뒤로는 밑지기 일수였고 그의 흥미를 끌지 못했다. 그러던 그가 이태리 여행 중에 흥미로운 경험을 한다.

어느 가게 앞에 사람들이 줄을 서서 기다리고 있었던 것이다. 영문도 모른 채 그도 줄을 섰는데 알고 보니 넥타이 가게였고 그는 여기서 선물용으로 넥타이를 20개 정도 사서 친구들에게 선물한다. 그런데 친구들 반응이 폭발적이었다.

그 때 이 사업을 하면 되겠다는 느낌이 왔으며 이를 실행한 결과 대박을 터뜨린 것이다. 전자부품 하던 사람이 넥타이 사업을 한다? 어떻게 이런 일이 벌어질 수 있고 성공의 요인은 무엇일까. 다른 사람이 이 일을 했다면 어땠을까.
 
벤처 기업에서 소프트웨어 영업을 하던 김 부장은 헬스광이다. 집안에 골치 아픈 일이 있어도, 회사 실적 때문에 스트레스를 받아도 자전거를 타고 열심히 땀을 흘리며 뛰다 보면 잊을 수 있었다.

그는 자신이 좋아하는 이 일을 사업으로 하면 좋겠다는 생각을 하고 과감히 실행에 옮긴다. 가진 돈을 다 투자해 서울 근교에 스포츠센터를 열었지만 쉽지 않다. 1 년이 넘어가지만 아직 적자이다.

우선 사업에 대해 너무 몰랐다. 심지어 탈의장 숫자도 중요하다는 사실을 지금에야 깨닫고 있다. 손해를 보고라도 빨리 털고 나가고 싶지만 마땅한 작자가 없어 그 또한 쉽지 않다.
 
유사 이래 우리 인간은 늘 결정하고 선택을 했지만 하필 요즘 와서 블링크가 화제가 되는 이유는 무엇일까. 무엇보다 정보의 양이 급속히 늘고, 변화 속도가 너무 빨라졌기 때문이다. 변화 속도가 빠르기로 유명한 전자산업이 대표적이다.

세계의 LCD 업계를 제패한 모 기업 임원은 이런 얘기를 한다. “이 업계를 제패한 성공요인은 불확실한 상황에서 차세대 공장을 짓기로 결정하고 밀어부친 것입니다. 그 때 일본 업계는 불황이란 이유로 멈칫했습니다. 몇 달간의 망설임이 극복하기 어려운 차이를 만든 겁니다. ”
 
이것저것 따지지 않고 결정하고 밀어부친 결과 세계 1위를 했다는 것이다. 그런 것을 보면 탈무드의 다음 말이 맞는 것도 같다. “지나치게 쓰면 안 되는 세 가지가 있다. 빵에 넣는 이스트, 소금, 망설임이 그것이다.” 느낌이 왔을 때 저지르라는 얘기다.
 
결정적인 느낌은 어느 순간에 온다. 그리고 그 느낌에 따라 결정을 하라는 것이다. 하지만 여기에는 위험요소가 있다. 필이 꽂힌다고

출처: 머니투데이, 서울과학종합대학원 교수

귀여운 강아지..

역시 출처는 디씨인사이드, 내가 한건.. 마우스 왼쪽인가..? 오른쪽인가 클릭해서 그림저장 후 포토샵에서 Clip 한 후 여기에 올린 수고..

처음 이거 보고.. 우아… 하고 탄성이 절로 나왔다.. 또 봐도.. 우아… 네……….

뿱스런 나의 GDI+ 사용기

이번에 상당히 황당스런, 하지만 결과를 알고보니 그럴것도 같다는 문제성 코드 때문에 또 하루의 수십%에 해당하는 시간을 소비해 버렸다.

Need는 OpenGL의 텍스쳐맵핑 소스로 BMP, JPG, PNG, GIF등 다양한 이미지 포멧을 사용하기 위해 GDI+의 Bitmap 클래스를 사용하게 되었는데, 이상하게도 Bitmap 클래스를 new 연산자를 통해 Heap에 할당하고 당연이 소멸자에서 delete를 하면 메모리 충돌이 나는 것이였다. delete를 어디선가 두번해 주는 것이 아닌가 하는 의문이 들었으나 그런 부분은 없는 듯 하였다. 또한 분명히 delete 하기전에 클래스의 참조 포인터가 NULL인지를 확인하는 조건까지 따져 코딩했었고….. 오늘은 포기하고 낼 맑은 머리로 해야지 싶어 포기할때쯤, 그 원인이 잡혔다.

프로그램이 시작되면 GDI+ 초기화가 일어나고 종료되면 GDI+ 정리가 일어난다. 문제는 Bitmap 클래스의 해제가 GDI+ 정리 이후에 호출되어져 메모리 충돌이 일어나는 것이였다. 즉, GID+ 관련 클래스들의 생성과 해제는 반드시 GDI+의 초기화와 정리의 중간에 발생해야 한다는 것..! 알고보니 당연한듯도 하다.

하지만 정말 당연한 것일까? 혹시 이런 것은 아닌가..

일단 한번 GDI+ 관련 클래스가 만들어지면 GDI+는 자신의 Namespace의 클래스 중, 생성된 인스턴스를 모두 관리하고 있다는 것. .NET 프레임워크에서 GDI+는 기존의 GDI를 완전이 새롭게 대체하는 요소이다. .NET 하면 GC, 즉 가비지 컬렉션이라는 개념이 존재하는데, 개발자가 생성한 객체를 따로 delete와 같이 직접 메모리에서 해제하지 않아도 알아서 해제를 해주는 참으로 편리한 개념이다. 혹시 이러한 .NET의 중요한 일부를 차지하는 GDI+가 GC를 위해 자신의 Namespace 하의 모든 클래스의 생성을 알고 있기 때문이 아닐까?

이것이 사실이라면 GDI+의 클래스들을 생성하고 직접 해제하지 않아도 GDI+의 정리코드를 호출하면 자동으로 해제된다는 개념이다. 그런데 실제로 GDI+ 클래스를 직접 delete하지 않아도 메모리의 누수가 발견되지 않았고, GDI+를 해제하는 즉시, GDI+ 클래스의 인스턴스의 아무리 사소한 맴버변수나 함수의 호출에 실패한다. 즉, GDI+의 해제시 GDI+의 클래스들의 모든 인스턴스는 무효화 되며 자동적으로 delete 되는 것 같다. Managed가 아닌 개발 환경에서도 말이다.

오전 시간 전부와 오후 시간 조금을 갉아 먹은 코드.

퇴근하기전에 해결하지 못한 코드를 다음 날로 미루고 퇴근한 바로 그 다음날인 오늘, 다시 문제의 코드를 살펴보는데, 도무지 모르겠더라.. 여차저차 해서 문제가 발생하는 방향과 문제가 발생하지 않은 방향은 알게 되었는데.. 그 원인이 무엇인지는 여전히 모르겠더라..

Need는 3DS 파일을 로딩하여 화면상에 표시하는 어느 외국(DigiBen, digiben@gametutorials.com)인 잘만들어 공개해 놓은 소스 코드를 사용하려고 하는데.. 핵심적인 사용은 클래스 하나와 구조체 하나를 조합하여 사용하는 것이었다.

문제는 시험차원에서 만들어 놓은 코드는 잘작동을 하는데, 실제 프로젝트에 적용을 해보면 프로그램이 뻗어 버렸다. 여차저차해서 겨우 문제가 발생하는 경우와 발생하지 않는 경우를 알게되었는데..

문제가 발생하지 않는 경우는 제공되는 클래스 하나와 구조체 하나를 전역으로 선언해 놓고 사용하는 경우고, 문제가 발생하는 경우는 지역이나 힙에 할당해서 사용하는 경우였다.

OOP의 규칙중에 최대한 전역적인 요소를 제거해야 하는 바 절대 전역으로 선언해서 사용해서는 않되었기에 new에 의한 힙 할당으로 사용하려고 했지만 계속 뻗어 버리고.. 뭐가 원인인지도 모르고, 나중에는 제작자의 불순한 의도가 아니겠는가하는 의심까지 들고… 역시 세상에 꽁짜가 없다느니하는 생각이 들더랬다.

제작자의 불순한 의도로 방향을 몰고 가던중에, 소스 코드까지 제공했다면 그 불순한 의도 역시 소스 코드 어디엔가 나를 비웃고 있겠지 하는 생각에.. 반듯이 잡아 족치리라 생각하고 코드 한줄 한줄 디버깅 해 들어갔다. 문제를 발생시키는 함수는 asm 소스로 된 memcpy라는 Ansi C 함수였다. 다시 memcpy가 받은 인자의 값을 살펴보니 웬 쓰레기값?

불현듯… 몽롱한 과거 까까머리로 C/C++을 학습하던 시절에 전역 변수는 자동으로 초기화가 되지만 그외의 경우는 자동으로 초기화가 되지 않는다는 성경말씀이 생각나.. 이것이구나! 라는 생각에 제공되는 클래스와 구조체 중에 구조체의 맴버 변수의 값들을 모두 0으로 설정하고 다시 돌려보니 잘되더라는…. 원인을 알고보니 참으로 어처구니가 없더라는… 하지만 원이 무엇이듯 잘해결이 되니 참으로 감격스러웠다..

이런 감격에 오늘의 교훈을 잊지 않고자 기록에 남긴다. 역시 90%의 오류는 오직 내 안에 있다는 것을… 또한 다른 이의 선행을 확실한 근거 없이 오해하지 말자라고….