Posts from July 2009

Taiji – 널 지우려해

올해 ETP엔 꼭 가고 싶다. 무려 limpbizkit도 온다.

Project Euler #55 in python

list = []
def islychrel(x):
    t = x
    for _ in xrange(50):
        t = t + int(str(t)[::-1])
        if str(t) == str(t)[::-1]:
            return False
    return True

for x in xrange(1, 10**4):
    if islychrel(x)==True:
        list.append(x)

print len(list)

오랜만에 잡은 project euler.. 하지만 55번 뭔가 재미도 없고 감동도 없고. 뻔한 palindrome에 iteration…

파이썬으로 재밌게 코딩하려면 뭘 해야할까. python challenge도 15번인가 가니까 자꾸 image processing나와서 지겹고.. 정말 파이썬 쓰는 회사를 알아보던가 이번 프로젝트에 파이썬을 도입하던가..windows에서 PyQt하자니 화창한날 양산대신 우산쓰는 기분들고..

아무튼 파이썬 공부 시작한지 2달.. 간단한 후기를 적어보자면 일단

프로그래밍의 즐거움을 새삼 깨달았다는 점. C++ 코딩이 싫지 않았지만 더 즐거운 세계를 보았다. 그리고 당장 파이썬을 사용하는 프로젝트에 투입된다 하더라도 두려움이 없을 정도가 되었다는 점에서 지난 두달은 성공적이었다. 사실 공부한 절대적인 시간만 놓고 본다면 Erlang이 더 많지만 Python에 빠르게 친숙해졌다. Erlang에 사용된 이런 저런 기법이 Python에 그대로 적용되고 있기 때문도 한몫했다. 예를들어 list comprehension같은.

Visual Studio에서 regex를 이용한 find and replace

뭐 아시겠지만. 찾기 및 바꾸기(ctrl+h)에서 regex를 지원합니다. 저도 이걸 사용하지 않고 수년간이나 프로그래밍 해왔지만 regex를 사용하고 안하고의 productivity 차이는 분명히 존재합니다. 사용해본 입장에서 말씀드리자면.. 웬만하면 사용하길 추천합니다.

대부분의 정규식은 regex standard에 준하지만 특히 다른점 몇 가지는 검색에서 태그를 칠때 ()를 사용하지만 VS에선 {}를 사용합니다. 또한 :i, :q (c/c++ identifier, 문자열)과 같이 자주 사용하는 것에 대한 단축 키워드가 존재합니다. coding horror 사이트에 잘 정리해 놓았네요. 참고하세요. http://www.codinghorror.com/blog/archives/000633.html

visual studio의 공식 설명서-_-인 MSDN의 링크는 http://msdn.microsoft.com/en-us/library/2k3te2cs(VS.80).aspx 입니다.

그럼 정규표현식을 뭐할때 쓰면 좋을까요. 간단한 예를 하나만 들어보겠습니다. enum값이

eNAME1_BINGSOO_ENUM
eTITLE1_BINGSOO_ENUM
eSCHOOL7_BINGSOO_ENUM
eSCHOOL8_BINGSOO_ENUM
eKEYBOARD_BINGSOO_ENUM
eKEY1_BINGSOO_ENUM
eKEY2_BINGSOO_ENUM
eKEY3_BINGSOO_ENUM

이런게 수백개 있습니다. 이 이름들이 되게 마음에 안들어요. 정렬도 안되고 보기도 어렵죠. 그래서 모두

eBINGSOO_XXX_숫자

형식으로 바꾸어 주려고 합니다. 이걸 정규표현식 없이 한다면 과연 어떻게 하실건가요. 답이 안나오네요. 하지만 regex를 이용한다면 e{[A-Z]+}{[0-9]+}_{BINGSOO}_ENUM를 찾아서 e\3_\1_\2로 바꾸어 주면 됩니다.

eBINGSOO_NAME_1
eBINGSOO_TITLE_1
eBINGSOO_SCHOOL_7
eBINGSOO_SCHOOL_8
eBINGSOO_KEYBOARD_14
eBINGSOO_KEY_1
eBINGSOO_KEY_2
eBINGSOO_KEY_3

수 백개의 enum값들이 이렇게 정렬됩니다. 아름답습니다.

검색을 예로 들어보죠. 어떤 함수 이름에 On와 Info가 있었던 것 같은데 정확히 기억은 안난다.. 이럴때 On과 Info는 너무나 흔한 단어라서 하나씩 찾아선 눈 빠지는 경우가 발생합니다. 하지만 On.*Info.*\(로 검색하면 두 단어를 정확히 포함하고 있는 함수를 찾아냅니다. (On.*Info)|(Info.*On).*\(라고 검색한다면 Info와 On의 순서가 바뀌는 경우까지 고려해서 검색됩니다. On과 Info를 포함하면서 함수의 마지막에 숫자가 붙어있는 함수만 보고싶다면 뒤에 [0-9]+까지 붙일 수도 있습니다. 인생이 편해지죠.

20090716, Son Gohan

R0010016

Goodbye Cell, you're fucked up