bionote.net

<대체 뭐가 문제야> - 문제 해결보다 중요한 문제 발견


문제를 명확하게 발견하고 정의하는 것은 문제 해결의 핵심이다. 문제란 '바라는 것과 인식하는 것의 불일치'인데, 문제를 찾는다는 것은 그것이 누구의 문제이고 그 핵심이 무엇인지를 파악하는 것이다.

문제의 정의는 끊임없이 이루어져야하는 작업이다. 따라서 문제가 해결되었다고 하더라도 정확한 정의를 내렸다고 확신해서는 안된다. 지속적으로 문제를 제대로 이해하고 있는지 검증해보는 방법으로는 '잘못될 수 있는 경우 떠올리기'와 '외국인이나 장님 혹은 어린이의 입장에서 검증하기'같은 방법이 있다. 이 방법들은 우리가 문제에 손쉽게 접근할 수 없을 때 새로운 관점에서 문제를 바라봄으로써 그 본질에 다가갈 수 있도록 도움을 준다.

문제 해결을 위해 누구의 문제인가를 파악했다면 문제의 당사자가 문제를 해결하도록 한다. 만약 어떤이가 문제에 대한 조치를 취할 수 있음에도 문제를 느끼지 못하고 있다면 그가 행동할 수 있도록 조치를 취해라. 때때로 문제의 본질을 쫓아가다보면 자신에게 문제가 있는 경우도 있다. 그렇기 때문에 잠시라도 스스로에게 책임을 물어보는 과정을 거치는 것이 필요하다.

2009/02/12 22:07 2009/02/12 22:07
top

 

Boost.Python을 이용한 python extension


파이썬은 단시간에 손쉽게 코드를 완성할 수 있어서, 새로운 아이디어를 구현해서 테스트해보기에 적합한 언어이다. 아이디어를 구현하는 초기에는 파이썬을 이용한 코딩이 많은 시간을 절약시켜 준다. 하지만 대용량의 데이터를 이용한 프로그램 검증이나 최적 파라미터를 찾는 등의 작업을 하기에는, 프로그램 수행속도가 느리다는 점에서 손해를 감수해야한다.

이런 문제를 해결할 수 있도록 low-level 언어인 C/C++를 이용해서 파이썬 인터페이스를 확장할 수 있다. Boost.Python은 이 확장 작업을 손쉽게 할 수 있도록 도와주는 라이브러리이다.

이후에 다시 참고하기 편하도록, 여기(http://radiohead.springnote.com/pages/712895)에서 정리한 내용을 다시 정리해본다.

  1. Boost.Python 설치
    우분투에서 다음 명령어를 이용해서 Boost.Python을 설치할 수 있다.
    $ apt-get install libboost-python-dev libboost-python1.34.1


  2. 간단한 예제 모듈
    간단한 문자열을 출력하는 예제 코드이다.
    // greet.cpp
    //
    #include <stdexcept>

    char const* greet(unsigned x) {
      static char const* const msgs[] = { "hello", "Boost.Python", "world!" };
      if (x > 2)
        throw std::range_error("greet: index out of range");
      return msgs[x];
    }

    #include <boost/python.hpp>
                       
    using namespace boost::python;
                       
    BOOST_PYTHON_MODULE(hello) {
      def("greet", greet, "return one of 3 parts of a greeting");
    }

    위의 C++ 코드를 파이썬 모듈로 작성하기 위한 setup.py를 아래와 같이 만든다.
    from distutils.core import setup, Extension

    module1 = Extension('hello',
                         include_dirs = ['/usr/include/boost'],
                         libraries = ['boost_python'],
                         library_dirs = ['/usr/lib'],
                         sources = ['greet.cpp'])

    setup (name = 'hello',
           version = '1.0',
           description = 'This is a demo package',
           ext_modules = [module1])

  3. 파이썬 인터프리터에서 예제 모듈 사용하기
    아래 명령어로 예제 코드를 빌드한다.
    python setup.py build


    빌드가 완료되면 현재 디렉토리 아래에 build/lib.linux-XXX에 hello.so가 생긴다. 이제 hello 모듈을 import해서 실행시켜 보자.
    >>> import sys
    >>> sys.path.append('build/lib.linux-XXX')
    >>> import hello
    >>> for x in range(3): print hello.greet(x)
    hello
    Boost.Python
    world!
자세한 설명과 튜토리얼은 이곳(http://www.boost.org/doc/libs/1_37_0/libs/python/doc/index.html)으로 가면 얻을 수 있다.

Boost.Python으로 alignment를 구현해보았는데 python에서 C++로 대체된 부분에 대해서 수행시간이 획기적으로 개선되었다. 특히 다른 방법들과 비교했을 때, Boost.Python은 파이썬과 비슷한 스타일로 코딩을 할 수 있다는 점이 마음에 든다.

python profiler를 이용해서 파이썬 코드의 수행시간을 분석하고, 많은 시간이 소용되는 부분에 Boost.Python을 적용하면 효과적으로 코드를 최적화할 수 있을 것이다.
2008/12/11 20:22 2008/12/11 20:22
top

 

<실전! 청소력> - 청소를 통해서 인생을 바꾸다


예전에 TV에서 청소가 사람의 기분과 행동에 미치는 영향에 대한 다큐멘터리를 본적이 있다. 그 프로그램에는 실제 지저분한 집에서 사는 한 가정집을 전문가들이 깨끗이 청소해주고 그 이후의 행복을 되찾은 가정의 모습과 사장이 직접 화장실 청소를 하는 한 회사에 대한 이야기가 담겨 있었다. 그 방송 중간에 한 일본인 청소 전문가가 등장하는데, 그가 바로 이 책의 저자인 '마쓰다 미쓰히로'이다.

청소력의 과정은 다음과 같다.
  1. 환기 - 집안의 마이너스 기운을 몰아낸다
  2. 버린다 - 욕망을 제어하라 (필요한 것은 반드시 채워진다)
  3. 오염 제거 - 스트레스 해소와 리셋
  4. 정리 정돈 - 최상의 상태를 유지하고 운을 불러온다
  5. 볶은 소금 - 안정적인 자장 형성과 상쾌한 마무리
책을 덮고나서 4단계까지 실천해 보았는데 주기적으로 청소를 하지 않던 때와 비교해서 좀 더 살기 좋아진 집을 느낄 수 있었다. 마찬가지로 연구실 책상도 4단계까지 적용해서 정리해 보았는데, 연구에 집중할 수 있는 환경이 만들어져서 연구 능률이 향상된 것처럼 느껴진다. 처음 청소를 하는데는 3~4시간이 소용됐지만 이후에 관리를 하는데는 매일 10분정도면 충분하기 때문에, 적은 노력으로 큰 효과를 얻을 수 있는 방법이다.

흔히 청소의 장점이라면 그 결과물인 깨끗함만을 떠올리기 쉽지만 청소를 하는 행위 자체로부터 얻는 이점도 있다. 청소를 하면서 과거의 영광에 집착하는 자신을 바로잡고 스스로를 낮은 위치에서 돌아보게 하는 효과를 얻을 수 있다. 일부 경영자들은 맨손으로 화장실 청소를 하면서 프라이드를 없애는 효과를 얻고 있다고 한다.

마이너스 기운이니 집안의 자장이니 하는 이야기는 논리적으로 믿어지지 않는다. 하지만 정리된 환경에서 생활하는 사람이 그렇지 않은 사람보다 몇 배나 나은 성과를 얻는다는 것은 사실이다. 청소를 함으로써 미래지향적이고 긍정적인 사람이 될 수 있다. 청소는 최소의 노력으로 꿈에 가까워지는 방법이다.
2008/08/26 23:36 2008/08/26 23:36
top