• 2010-04-29

    리스트를 역순으로 순회하는 방법 a = [1,2,3,4,5] for i ...

    리스트를 역순으로 순회하는 방법

    a = [1,2,3,4,5]
    for i in reversed(xrange(0,len(a)):
        print a[i]
    

    list.reverse() 는 inplace 로 뒤집지만 return None 이 되므로 for in list.reverse(): 는 동작하지 않는다. range() 는 실제로 리스트 값을 리턴하지만, xrange 는 순회를 위한 이터레이터 객체를 리턴한다. reversed 역시 값 대신 이터레이터 객체를 리턴한다.

  • 2010-03-10

    Python Tip, Tricks and Hacks

    python tip, tricks and hacks from https://www.siafoo.net/article/52

    부분 문자열 포함 테스트는 in 연산자를 사용할 것

    if 'aaa' in 'aaabbb':
    

    리스트를 , 로 합칠 경우 seperator . join ( list ) 형식을 사용할 것

    ','.join(['aaa','bbb','ccc']
    

    람다 함수는 anonymous function 으로 이해하면 된다. C 의 a? b: c 대용으로는 사용할 수 없을 듯.

    map( lambda x : x*x, [1,2,3,4,5] ) # 리스트를 순회하면서 제곱을 한 걸 리턴한다.
    

    map 함수는 리스트 comprehension 으로 대체할 수 있다. 위의 예제는 아래처럼 고칠 수 있다.

    [ x*x for x in [1,2,3,4,5] ]
    

    filter 함수는 for .. in if 으로 대체할 수 있다.

    filter( lambda x: x<4, [1,2,3,4,5] )  == [ x for x in [1,2,3,4,5] if x < 4 ]
    

    generator 는 [] 대신 () 로 감싸서 for 에 넘길 수 있다.

    for x in ( y*y for y in [1,2,3,4,5] if y*y < 10 ):
      print x
    

    nested for + if + single statement 는 한줄로 표현할 수 있다.

    for x in (0,1,2,3):
    
      for y in (0,1,2,3):
    
        if x < y:
    
          print (x,y,x*y)
    

    print [(x,y,x*y) for x in (0,1,2,3) for y in (0,1,2,3) if x < y] # 다만 리스트다.

    reduce 를 이용하면 리스트를 순회하면서 각 값들을 특정 값에 누적 연산시킬 수 있다.

    result = 1
    
    for i in [1,2,3,4,5]:
    
      result *= i
    

    reduce( lambda a,b: a*b, [1,2,3,4,5] )

    dictionary 생성시 { 'a': 1, 'b': 2 } 대신 dict( a=1, b=2 ) 로 만들 수 있다.

    C 의 a ? b : c 는 다음과 같이 할 수 있다.

    b if a else c
    

    C 의 switch 문은 딕셔너리.get( key, default ) 로 대체할 수 있다.

    if key == a: return 1  elif key == b: return 2  else return 3  ==> dict( a=1, b=2 ).get( key, 3 )
    

    @staticmethod 데코레이터는 클래스 스태틱 함수를 의미한다.

  • 2010-02-12

    Reality Check

    http://image.aladdin.co.kr/cover/cover/8996230030_1.jpg

    스타트업을 시작하는 모든 이들은 꿈속에서 살아간다.

    창업하자마자 프로토타입을 들고 엔젤 투자자를 만나서, 최소 지분만 희생해서 몇 십억 정도는 땡긴 다음, 퍼블리셔에게 데모를 해서 박수를 받고,  퍼블리싱 계약금으로 개발자들에게 외제차 한 대씩 사주고, 출시하면 대박이 나서 서버를 증설하고 매달 몇 십억씩 입금이 되면 경리 부장이 자꾸 돈이 입금되면 세금 처리를 다시 해야 된다고 하소연을 하고...

    이런 사람들에게 이 책을 권한다. 한번 일독하고 나면 왜 현재의 조직이 느리게 움직이는지, 허접한 개발자들이 왜 이 회사에서 안짤리는지, 나는 이 좋은 실력에도 왜 인정을 못받는 것인지, 예전 월급이 밀린 회사 사장님은 무엇을 잘못한 건지를 손쉽게 추측해볼 수 있을 것이다. 본인은 책을 덮으면서 지금까지 거쳐왔던 수많은(ㅠㅠ) 회사들의 사장님들에게 박수를 보낼 수 밖에 없었다.

    이 책을 통해서 대충 지금껏 줏어 듣고, 또 어림짐작하던 많은 사실을 이 책을 통해서 재확인을 할 수 있었다. 가장 감명 깊었던 파트는, 10/20/30 의 법칙에서 투자자들의 속내로 나오는

    "당신은 왜 내 시간을 낭비하고 있지?"
    

    가 있다. 우리가 보통 하는 말로는,

    "좋은 말이군. 그래서 어쩌라고?"
    

    정도가 아닐까 싶다. 근래에 들었던 이야기 중 가장 하일라이트였던 빈태군의 "너무 상식적이지 않은 이야기는 나는 잘 모르겠다.." 에 비할 명언 되겠다. ㅋㅋ

    임팩트 있던 초반에 비해, 후반부로 가면서 좀 지루해지는 감도 없지 않지만 정말 일독을 권한다. 별은 5개.

  • 2010-01-25

    virtualenv

    준비물

    • xcode : node 와 virtualenv 설치시 필요함
    • PIP : easy_install 을 대체할 파이썬 패키지 매니저
    curl http://python-distribute.org/distribute_setup.py | sudo python
    curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | sudo python
    
    • virtualenv virtualenvwrapper : 파이썬 개발 환경(파이썬 버전 및 각종 라이브러리)을 가상화할 수 있게 해주는 도구
    sudo pip install virtualenv virtualenvwrapper
    

    virtualenv 설정

    집과 회사를 오가며 개발하다보면, 파이썬 버전과 각종 라이브러리의 설치 및 충돌 문제 때문에 괴로울 때가 많다. 파이썬 라이브러리들은 파이썬 버전별로 site-packages 에 복사되기 때문에, 개발 환경이 살짝만 바뀌어도 관리자 권한으로 재설치를 해야 한다. virtualenv 는 node 의 nvm, ruby의 rvm처럼 각 개인의 홈에 가상적인 파이썬 환경을 만들고 라이브러리를 설치해서 사용할 수 있게 해주며, virtualenvwrapper 는 좀더 간편한 명령들을 제공해준다. (왜 pvm이라고 안하는지 모르겠다..)

    일단 ~/.bash_profile 에 아래 내용을 추가해서 로그인할 때마다 실행되도록 하자.

    export WORKON_HOME=~/.virtualenvs
    source /usr/local/bin/virtualenvwrapper.sh
    

    이제 저장한 후 source ~/.bash_profile 하면, 관련 명령을 실행할 준비가 된 셈이다.

    mkdir -p $WORKON_HOME
    mkvirtualenv warcloud
    echo 'cd ~/Documents/Works/warclouds' >> $WORKON_HOME/warcloud/bin/postactivate
    

    가상환경을 저장할 폴더를 만들고, warcloud 라는 개발환경과 이 명령을 실행할 때 자동으로 실행할 명령도 추가하자.

    workon warcloud
    

    이걸 실행하면, 이제 관련 폴더로 자동 이동이 된다.

    virtualenvwrapper 에서 제공하는 명령을 간단히 살펴보자.

    • workon {env} : 특정 가상 환경을 실행한다.
    • deactivate : 가상환경을 빠져나간다.
    • mkvirtualenv {env}
    • rmvirtualenv {env}
    • lsvirtualenv
    • showvirtualenv {env}
    • cpvirtualenv {src} {dest}
    • lssitepackages
    • add2virtualenv {dir} : PYTHONPATH 에 경로를 추가하기.
    add2virtualenv /Users/reiot/Documents/Works/warclouds
    
  • 2010-01-17

    Starting Reiot

    http://boxcatstudio.files.wordpress.com/2010/01/startup.jpg

    (이미 좀 기한이 지난 이야기지만) 2009년은 다시는 겪고 싶지 않은 인생 최악(?)의 해이면서, 유아기적 사고에서 벗어나 진짜 어른이 된 해다. 작년에 일어난 수많은 사건들이, 인생이 얼마나 덧없는가에 대해서, 가장의 건강이 왜 그렇게 소중한 것인지에 대해, 가족을 끝까지 책임져야 하는 사명이 얼마나 무거운가를 깨닫게 해 주었기 때문이다.

    건강이란 아무리 잘 관리해도 확률적으로 나빠질 수 있다는 점을 가정했을 때, 우리 나라처럼 사회안전망이 취약한 환경에서는 가장에게 문제가 발생하면 가족과 친지를 괴롭히다가 빈곤층으로 전락해 버릴 수 있다는 것은 알고 싶지 않은 공공연한 비밀이다. 그런 상황이 오기 전에 자산을 최대한 축적해 두는 것이 대한민국을 살아가는 재산세 내지 않는 이들의 운명이고. 이런 것들이 내가 트위터나 클리앙에서 MB와 그 알바들에게 극렬하게 반응하고, 북유럽의 천국같은 복지에 대해서 항상 부러워하고, 웰빙 먹거리에 대해서 떠들어대는 이유다.

    운좋게 회사에서 4개월 가까이 주3일만 출근해도 되도록 배려를 해줬고, 덕분에 아직까지 큰 탈 없이 버틸 정도의 체력을 유지할 수 있었다. 그러나, 이런 배려가 무한정 지속될 수는 없다는 것은 명백한 사실. 결국은 휴직 3개월차인 지난 주에 꾀죄죄한 모습으로 회사로 가서 사직서를 제출했다. 다행히 이번 프로야구매니저의 반응이 제법 좋은 편이어서, 미안함과 부담감은 덜고 한결 편안한 마음으로 작별 인사를 할 수 있었다.

    이제 새해의 목표는 간단하다. 최우선순위는 정상 컨디션의 레이옷으로 복원(?)하기. 그리고 자체 선순환 시스템- 내가 없어도 자산을 증식해주는 앞마당 커맨드 센터 -의 구축이 두 번째다. 한날님처럼 거창하게 오픈하기엔 현실이 참 소박하기에  그다지 할 말은 없지만, 새로 만들 조직의 최종적인 모습에 대해서는 코멘트할 게 좀 있다.

    • 주35시간 근무
    • 아침엔 유기농 야채 샐러드. 점심엔 호텔식 부페
    • 무료 공정 무역 커피
    • 1년에 28일 refresh 휴가
    • 직원 및 가족의 의료 비용 전체 제공
    • 사옥 근처 직원 아파트 제공
    • 육아 및 교육 지원. 종신 보험 및 재무, 법무 컨설팅 제공
    • 전사원 아이폰 또는 안드로이드 제공
    • 모니터, 의자, 키보드, 마우스는 최고의 퀄리티로
    • 이익의 1%는 복지 분야로 기부

    요약하자면, 소수 정예로 최고의 팀을 꾸리고, 업무에만 집중할 수 있는 최고의 환경을 제공한다..라는 거다. 아직은 꿈의 단편에 불과하고 언제 저런 것들이 이루어질지는 의문이지만, 회사 운영도 애자일하게 해나가면 시간을 많이 단축시킬 수 있을지도. 물론 스타트업의 3년 생존률이 1-5% 정도라는 걸 감안하면 초반엔 서바이벌 모드로 갈 수 밖에 없을 것 같다.

    스타트업의 세계는 기술력이 좋다고, 최신 트렌드를 많이 안다고 성공하는 영역이 아니라고 한다. 지식 보다는 지혜가 필요한 영역, 빠른 판단과 실행력이 중요한 세계라나. 그래서 블로그 이름도 Learning Reiot 에서 Starting Reiot 으로 바꿨다. 다음 주에 법인 등록을 마무리 지으면, 이제 컨디션이 허용하는 한 열심히 땅파는 거만 남았다. 다만 현재의 체력대로라면 조만간 재택 근무의 나날들이 이어질 거 같지만.. ^^;;;

    끝으로, 월급 몇 달째 못타오는 못난 남편 대신 생활비와 남편 약값, 시댁 생활비 대느라 야근 라이프를 반복중인 안사람에게 무한한 경의를 바친다. 여보~ 감사합니다~ 빨리 건강도 되찾고 돈도 많이 벌어올께요~ ㅠ_ㅠ