난 잘될거야

Posted 2009/05/09 19:11, Filed under: 일상적인 이야기

오늘 RSS 구독하다가 Python 태그가 부터있는걸 보는데... 느낀게..
http://cangel.egloos.com/1903547
그래 난 잘될거야라는 느낌? ;;; 아까도 쑥스러워서 승오형이 소개시켜준다고 불렀는데 안나갔자나 ㅜㅜ




아 내가 요즘에 회사를 다니고 있는데, 느낀게...

휴일에 할일이 없어야 엄청난 걸 만들 것 같애.

근데, 난 여자친구가 없잖아.

난 잘될거야, 아마.

저작자 표시 비영리 변경 금지

Trackback URL : http://seapy.com/trackback/176 관련글 쓰기

  1. # BlogIcon chadr 2009/05/10 09:35 Delete Reply

    휴일에 할일이 없으면 잔다능

    1. Re: # BlogIcon nakada 2009/05/10 11:08 Delete

      그렇긴 해도 =_= 이제는 주말 아니면 코딩할 시간도 없다.
      신입사원 연수때 강사분이 했던말의 의미가 이해는 간다.
      "3년동안 연애하지말고 일만 열심히 해야 어느정도 위치에 가있을거다"라고.. 그때는 먼말이야 싶었는데

  2. # BlogIcon bofh 2009/05/11 00:33 Delete Reply

    오호... 저런식으로 바꿀 수도 있었군 생각해보니 'ㅂ'

    1. Re: # BlogIcon nakada 2009/05/11 01:43 Delete

      ㅋ 나는 그저 다른 블로그에 있는거에서 여자친구 있는걸 없는걸로 바꿧을뿐이고...
      없는걸로 바꾸면서 외로울 뿐이고
      나 엄마보고 싶고 ㅜㅜ

Leave a comment

Django 를 위한 IDE 설정(이클립스)

Posted 2009/02/01 01:36, Filed under: Python Story
작년 한해동안은 Pyframe 를 이용해서 python web 개발을 해왔었는데,
갑자기 요즘들어 Django(장고) 를 이용한 개발이 해보고 싶어서 기존에 있던 서비스도 전부 Django 로 바꿀 예정이다.
(pyframe 이 가볍고 좋은데 굳이 바꾸는 이유는 나도 모르겠다... 그냥 공부해보고 싶어서?;;)

기존 서비스들을 Django 로 포팅하려고 생각하니
콘솔에서 일일이 열어서 복사하고 붙여넣기 하고 하는등의 작업이 너무 귀찮게 느껴지는것이다.
그래서 우선 어제 저녁 8시부터 오늘 점심때까지 잠을 잤다 ;;;

서론은 여기까지... 본격적으로 Django 개발을 위한 IDE 에 대한 글을 시작해본다.

0. Python 지원하는 IDE
Django 개발을 위한 IDE 설정이라고 했지만
어떻게 보면 Python 을 위한 IDE 라고 해도 크게 다를바가 없다.
Django 를 위해서 할일은 단지 실행할때 Django 개발서버를 구동시키는 작업뿐..
(아직 내가 한게 이것뿐이라서.. 디버깅, 템플릿 지원 등은 모르겠다)

우선 Python 을 지원하는 IDE 에 대해 알아보는 글을 아래 링크 참고
위의 글에서 보면 여러가지 에디터가 나오는데 내가 몰랐던것도 많다.(wingware ide 라는것도 있는거 같다)
특히 코모도(Komodo IDE) 에디터의 경우에는 Django 지원이라고 아예 써있지만...
예전에 한번 깔았던 느낌이 별로였던거 같아서 우선 제외 시켰다.(나중에 꼭 써봐야지)

http://kkubasik.wordpress.com/2008/03/05/can-someone-get-us-a-real-django-ide/
위 링크에 있는 글의 마지막 댓글을 보면 넷빈즈(Netbeans)에서도 Python 을 지원한다 !!! (2009년 1월부터)
아주 괜찮은것 같은데 안써봐서; (http://wiki.netbeans.org/Python#section-Python-GettingStarted)
(여담이지만 저 링크의 글 중간쯤의 댓글들에는 진정한 프로그래머는 메모장을쓰네 textmate,vi,emacs 이러고 있다)

결론적으로 내가 선택한 Django 를 위한 IDE 는 eclipse(이클립스)+Pydev !
선택한 이유는 생각보다 단순하지만 그리 단순하지만은 않은... 응 ?
  • 회사에서 이클립스를 사용하고 있다. -_-;;;
  • SVN 과 연동하는 부분이 참 마음에 든다.(Team 싱크라던지.. 등)
  • eclipse(이클립스) 쓰면서 SVN 부분이나 다른 부분이 생각보다 편해서.. 습관인듯
Django 를 위한 eclipse(이클립스)+PyDev 를 시작 !

1.eclipse(이클립스) 설치
이클립스 설치는 해보신 분한테는 간단하겠지만
내 경험상... 처음 이클립스 설치할때 참 삽질 좀 했다.

간단하게는 이클립스 사이트 가서 다운 받으면 되는데
이놈의 이클립스는 다운로드사이트 가도 여러개가 무진장 많다.
이중에서  JEE 버전으로 받으면 무난하다고 생각되어진다.(자세한건 모르겟다.)
JEE 는 그나마 웹개발에 필요한 플러그인도 몇개 설치되있고 해서 선택 !

이클립스는 설치가 아니라 압축만 풀면 되는데
압축풀고 그냥 실행하면 오류난다 아 젠장... 암것도 손도 안댔는데 오류나...
검색해서 찾아봤는데 해결방법(http://artlife.egloos.com/4382131)
"eclipse.ini파일에서 256M 부분 앞쪽에 한칸 띄워주면 해결된다" ...
나 역시 내가 겪어본 세상에서 제일 어이없는 오류...-_-;;;

2. PyDev 설치(이클립스 플러그인)
이클립스에 python 을 위한 플러그인 PyDev 를 설치 한다.
이클립스 3.4 버전이후에는 플러그인 설치하는게 약간 다른데 Help->software update 에서 add site 한다음
http://pydev.sourceforge.net/updates/ 이 주소를 입력하고 extension 인것은 제외 하고 설치하면 된다.
플러그인 설치후에는 이클립스 재실행 !!

3. Subversive(이클립스 플러그인)
내가 좋아하는 플러그인 중에 하나이다.
이클립스에서 SVN 사용을 위해 깔아두면 참 편한것중에 하나이다.
Subclipse 라는것도 있는데 package 탐색기에서 볼때 조금 불편하다.(맨 위 루트에 리비전 표시가 안된다.)
subversive 에는 단점도 있는데... 플러그인 설치하고, svn connector 역시 따로 설치해줘야 한다는거
이게 이클립스의 무슨 정책때문이란다. subversive 가 이클립스 프로젝트 안으로 들어가서 그런다고 하던데

어쨋든 설치는 내가 삽질 다 해봐서 아래처럼만 하면 간단하다

  1. subversive 설치
    1. subversive 의 플러그인 설치 주소 있는곳
    2. 지금 현재로는 http://download.eclipse.org/technology/subversive/0.7/update-site/
      이게 플러그인 주소
    3. (subversive 가 이클립스 프로젝트로 들어가면서 버전이 이상하게 되버렸다.
      지금은 0.7 이고 이클립스 프로젝트 들어가기전 버전은 1.1.x 이다.)
  2. svn connector 설치
    1. svn connector 주소 있는곳
    2. 지금 현재 http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/ 이게 주소
    3. connector 이 여러개 있다. JavaHL, SVN Kit, Native JavaHL 중에 골라서 설치하면 된다.
      1. 각각 장단점이 있는데 JavaHL 은 SSH 접속이 안된다. 즉 svn+ssh 접속을 할수가 없다.
      2. SVN Kit 은 회사에서 삽질했었는데 체크아웃이 계속 실패하는 현상이 있었다.
        1. svn kit 이 불안정해서 체크아웃이 가끔 안되기도 한다는 그런 의미였었다.
          (소스포지 SVN 에서 그런다고 하는데 회사 svn 하고도 그런 문제가 있었다.)
        2. 링크 참고
      3. 결론.. 내 가상서버 SVN 은 ssh 접속을 해야되서 SVN Kit 으로 설치
* svn 설정과 관련해서 ssh 포트가 22 기본포트가 아닐경우 일반적으로 svn+ssh:// 이렇게 하면 안되고
svn+ssh55522:// 이런식으로 설정(윈도우의 경우 거북이svn 설정에서, 리눅스는 .svninfo? 그쪽에서)해서 쓰는데
이클립스의 team svn 설정에서는 그럴필요 없이 svn+ssh:// 를 주소로 사용하고 ssh 설정에서 포트를 지정해주면 잘된다.

4. Django 설치
우선 이클립스와 연동을 위해 설치~~ 서버에서 IDE 로 작업할거면 이건 패스해도 상관없다.(이미 깔려있을테니)
리눅스의 경우에는 해당 배포판에 맞게 설치하고, 윈도우 위주로 설명하자면
  1. Django-1.0.2-final.tar.gz 파일을 다운받아서 압축을 풀어준다.
  2. 윈도우 cmd 창에서 해당 폴더로 이동후 setup.py install
  3. Python 이 설치된 폴더의 site-packages 에 django 가 설치되었다.
  4. 아까 압축푼 폴더하고 압축파일은 필요없으니 삭제
  5. django-admin.py 명령어를 아무데서나 사용할수 있게 컴퓨터 환경변수에 등록
    1. 내컴퓨터에서 마우스 오른쪽 버튼 -> 속성 -> 고급 -> 환경변수 -> 시스템변수 -> Path -> 편집
      -> C:\Python25\Lib\site-packages\django\bin 이런 식으로 추가해준다.

5. 첫 프로젝트 추가
이제 설치 하는건 다 끝났다 ^^
이클립스 실행후 새 프로젝트 생성을 Pydev 프로젝트로 한후에 생성한다.
프로젝트 이름과 다른것들을 설정하는데
여기서 맨 아래부분의 "create default 'src' folder an add it to the python path" 는 체크 해둔다.
(이유는 이렇게 해야 실제 프로젝트와 같이 import 가 된다.)

이클립스 프로젝트를 추가햇으니 이제 Django 프로젝트를 추가하자 !
폴더구조는 아래 박스를 참고해서 하면 된다.
cd workspace/django/src    (이클립스 프로젝트 폴더의 src 폴더로 이동)
django-admin.py startproject mysite     (새로운 Django 프로젝트 생성)

이렇게 하면 아래와 같은 폴더구조가 된다. ^^ 이클립스에서 열어도

/workspace    -> 이건 이클립스 기본 워크스페이스 폴더
--/django       -> 이클립스에서 만든 PyDev 프로젝트 이름
----/src         -> 기본적으로 생성되는 폴더
------/mysite -> django 프로젝트 폴더
------__init__.py     -> 기본파일들...
------manage.py
------settings.py
------urls.py

참고로 내꺼 캡쳐 화면


위와 같은 구조가 사실은 내키지 않았다.
쓰잘데기 없이 src 폴더가 생겨야 하고, 이로인해 리눅스 서버에서 체크아웃 받을때 경로도 설정해야 하고...
근데 어쩔수 없었던데 src 폴더가 생기면서 pythonpath 로 등록되어서
import 시에 mysite.model 이런식으로 자동완성이 지원된다.
이상하게 mysite 를 이클립스 프로젝트 이름으로 하고 pythonpath 로 수동 등록해줘도
improt 시에 mysite.model 이 안되고 model 이렇게 되어버린다. 이렇게 되면 Django 가 실행시에 오류만 내뱉을뿐...
그래서 결국 src 폴더를 만들어 주고 실제 서비스하는 내 가상서버에서는 체크아웃 받을때 세부 경로까지 지정해준다.
이때 settings.py 파일은 물론 제외하고 ^^ㅋ 윈도우 환경에서와는 템플릿 경로와 디비 설정부분이 다르니까

이제 이클립스에서 Django 개발서버를 시작해보자 !!
manage.py 를 열어서 F11 을 누르면 디버그가 된다~ 근데 오류가 나지요 ㅋㅋ
이제 메뉴에서 RUN->Debug Configuration 을 클릭하면
Python Run 밑의 <프로젝트이름> manage.py 가 있다.
여기서 탭중에서 arguments 탭을 클릭후 다음과 같이 입력 runserver --noreload
여기서 runserver 는 서버를 실행하는걸 의미하고,
noreload 에 대한 설명은 아래... ㅋ; 대충 auto-reloader 를 중지 시킨다
Use the --noreload option to disable the use of the auto-reloader. This means any Python code changes you make while the server is running will not take effect if the particular Python modules have already been loaded into memory.
파이썬 코드가 바뀌었을때 자동으로 로드 하지 않는다는것인데, 디버깅을 위해서는 이렇게 해주어야 된다.
파이썬 코드가 바뀔때마다 자동으로 디버깅 되게 하려면 방법은 있는데
리모트 디버거를 이용해서 (http://www.fabioz.com/pydev/manual_adv_remote_debugger.html) 하면 된다고 하지만
소스코드 중간중간에 import pydevd; pydevd.settrace() 이걸 넣어주어야 하는 엄청난 단점이 있다.

리모트 디버거를 사용하지만 auto-reload 를 사용하면서 소스코드에 추가없이 디버깅 하는 방법이 있는데
(http://bear330.wordpress.com/2007/10/30/how-to-debug-django-web-application-with-autoreload/)
이 방법은 manage.py 파일을 수정해서 하는 방법이다.
아직 나에게 그닥 필요한것 같지 않아 자세한 설명은 생략~~; 안써봐서

auto-reload 가 필요한 개발상황은 위 링크의 문서에도 있듯이 로그인을 해야하는 경우가 있다고 할 수 있다.
noreload 일 경우 일일이 해당 페이지로 가기 위해 로그인 하는 불편한 과정이 존재하기 때문에~~
나도 조만간 하게 될듯? 이건 개발자가 얼마나 게으르냐에 따른거겠지... 개발자는 게을러야 된다고 하던데 ^^ㅋ

서버 중지는 빨간색 버튼 누르면 중지 된다.

Django 개발 서버 실행시 콘솔에 표시



6. SVN 등록
이제 잘은 되는데 새로 생성한 Django 프로젝트를 SVN 으로 import 해야 된다.
굳이 여기서 안하고 서버상에서 이미 있던것을 해도 되는데 윈도우로 다운받아서 다시 하는 이유는
이클립스 설정까지 모두 SVN 으로 관리하고자 하는 부분 때문이다.

이클립스에서 잘 실행되나 확인해본후에 이클립스 프로젝트를 SVN 으로 import 했다.
구체적으로 말하자면 프로젝트에서 마우스 오른쪽 버튼 -> team -> share project
이렇게 하면 svn 연결창이 뜨는데 여기서 미리 생성해놓은 가상서버의 svn 프로젝트를 선택했더니 끝 !!
이제 이클립스의 package 탐색창에서 옆에 리비전넘버가 보인다 ^^ 끝~

참고로 이클립스에서 본 내꺼 SVN 저장소 구조


7. 마치며...
이런 글을 쓰면서 보기 쉽게 정리하는건 참 어려운거 같다.
특히 나같이 이런 저런 자잘한 이야기도 막 쓰는 스타일의 사람에게는 말이다.
그런데 이렇게 정리하는글 자주 쓰다보면 나만의 포맷도 생길것 같고 해서 자주 쓰기로 햇다 ^^ㅋ
이미 설치 완료후에 정리하는 글이라서 중간에 빼먹은게 있을수도 있기 때문에
이글을 참고해서 설치하다가 잘 안되는 부분이 있으면 댓글로 알려주시면 감사하겠습니다 ~~

설치하는데 대략 6시간정도 걸린것 같고(어떤 에디터 사용할지 고민하느라 4시간 걸린듯...)
이 문서를 쓰는데 4시간 걸린것 같다 ;;;
다시 복기 하면서.. 링크도 걸고 하는게 이렇게 힘들줄이야 ~~;

참고했던 글 링크(거의 이대로 따라했다 ^^)
http://penkin.wordpress.com/2007/08/08/eclipse-for-django/
http://penkin.wordpress.com/2007/08/20/django-with-pydev/
http://pydev.blogspot.com/2006/09/configuring-pydev-to-work-with-django.html

잡소리...
아프리카 방송 알리미(Afreecom)에서 방금 김이브 방송 시작했다고 문자왔는데..
지금 KBS1 에서 하는 다큐3 보느라... 아프리카 김이브님을 포기하고있다.;;
4시간동안 쓰느라;; 지금은 김이브님과 함께 ㅜㅜ 역시 이뻐.. 오늘 화장했다는 ;;ㅋ
음냥.. 방금 문자로 윰댕님도 방송한다고 ... 윰댕님 방송으로 갈...? ㅠㅠ 행복한 고민
아무래도...... 윰댕님 방송으로 갈듯? ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
(지금 포팅 하려고 하는것도 사실은 Afreecom 이다... 돌아가기는 하는데 너무 불편해서)
저작자 표시 비영리 변경 금지

Trackback URL : http://seapy.com/trackback/157 관련글 쓰기

  1. 서로 맞물려서 돌아가야 하는 기반시스템(Infrastructure System)

    Tracked from All of Software 2009/02/03 23:37 Delete

    소프트웨어를 개발하고 있는데, 필수적인 기반시스템에 대해서는 이미 설명한 바가 있습니다. 이 기반시스템은 서로 연동이 되어서 맞물려 돌아갑니다. 만약에 이 기반시스템들을 사용하고 있지 않다면 기적적으로 개발을 하고 계시거나 정말 쓸데 없는 고생을 하고 계신 겁니다. 어떠한 방법론을 쓰더라도 이 기반시스템을 쓰는 것은 거의 다르지 않습니다. 우선적으로 시급하게 기반시스템들을 도입을 해야합니다. 기반시스템을 써보려고 하는데 어려움이 있거나 궁금한 점은..

Leave a comment


예전에도 머 해야지 하면서 한건 아니었는데

생각보다 Python 을 사용할 기회가 없다.
~~ 회사에서 한두번 쓴거 같기는 한데 ㅋㅋ
회사에서는 써도 스크립트언어로서 사용하는거고

실시간 TV 편성표랑 아프리카 알리미 Django 로 옮기려고 생각만하고,
실천을 못하고 있다.
(기본적인 클래스나 함수는 그대로 쓰면 되는데 문제는 웹페이지;; 디자인 그것이지 ㅋ)

머 시간이 없어서는 당연히 아니고;;;
환경이 그래서일까? 말은 원룸텔이지만 고시원 같은곳이라서
그냥 혼자 앉아서 인터넷만 하다보니 별 생각이 없는거 같다.
좀 걸어다니고, 누워도 있고하면 혼자 생각할 시간이 많아지는데

루비도 공부해보고 싶은데... 그냥 어떤건지 맛이라도 보고싶다.;
요즘 스프링공부하는건 공부는 하는데 막상 실습 해보고 싶기도 하면
그만한 성능을 받쳐주기에는 내 개인서버가 너무 영세하고
그냥 회사에서 하는거 수준에서나...

머 보다보면 웹쪽 관련해서는 찾아서 하고, 경험으로도 해보고 하다보면 되는데
가장 문제가 되는건 프레임워크를 구성하고 있는 언어이다.
JAVA라는 언어를 실제 사용한적이 많이 없으니 그쪽이 좀 그렇다.;
하다보면 조금씩 알아가는것 같다^^

저작자 표시 비영리 변경 금지

Trackback URL : http://seapy.com/trackback/155 관련글 쓰기

Leave a comment

생각해보면 JAVA 는...

Posted 2008/12/03 00:28, Filed under: e 세상 이야기

설정으로 프로그래밍 하는 거 같다. ㅋㅋ(이건 아주 조금 접해본 내 사견 ~~)
어떻게 보면 이것도 대단한건데 ㅋ 마치 소설쓰는것처럼 프로그래밍 하는게 ;;
아 그리고 xml 싫어 ㅠㅠ 보기가 너무 불편해

if 문이니 머 이런건 다른거와 별반 다를거 없고
에러나고 머가 안되면 다 설정 문제인거 같다. ^^ㅋ
성공햇을때 기쁨은 똑같지만 ^^

예전에는 python 이나 ruby 같은 언어보고 사람들이 말하기를
"알고리즘에 집중할수 있다." , "프로그래밍 하는 재미를 느낀다"
이런말 들으면...
? 먼말이야 ㅋ 어차피 다 같은 언어인데 이런 생각햇는데 ㅋ

역시나 이해가 갈것도 같다. ^^ㅋ
그래도 JAVA 가 필요한곳이 많으니까.
JAVA가 할건 JAVA로 하고 다른애가 할건 다른애가 하면 되는거지

p.s
여전히 원하는것을 위해 "감사합니다 감사합니다"를 치고 있다. ㅋㅋ
(이건 아는 사람만 알겠지 ㅋㅋ)

오늘은 자면서 1박2일 보면서 자야지 ㅋ 승기 혼자 버려졌다던데 재밌겟다 ^^
내삶의 활력소 1박2일 ㅋㅋ...
음 근데 "구글을 지탱하는 기술" 예약 구매해놓고.. 안보고있네;
저작자 표시 비영리 변경 금지

Trackback URL : http://seapy.com/trackback/151 관련글 쓰기

Leave a comment

파일 인코딩 변경하기(실행권한유지)

Posted 2008/10/21 10:53, Filed under: Python Story


cocoadev 님의 텍스트파일 문자셋 변환 스크립트 를 받아서 유용하게 사용하다가
생각하지 못한 문제에 직면하게 되었다.

일반적으로 파일의 인코딩을 변경하거나 하는 경우는 대개 일반적인 txt 파일이나 데이터 파일이기 때문에
인코딩을 바꿔주는 작업 이외에는 할것이 없다.

하지만 이번에 내가 했던 작업은 소스파일의 인코딩역시 같이 바꾸어 주었기 때문에
인코딩 변경으로 인해서 프로젝트 전체파일들의 실행권한역시 유지 되어야 했는데
아무 생각없이 인코딩 변경하면 유지 되겠거니 했던것이 잘못된 생각 이었다.
인코딩 변경을 할때 기존의 파일을 인코딩하고 이것을 새로 만들어진 파일에 쓰고 파일 이름을 바꾸기 때문에
파일의 실행권한은 유지 되지 않았다.

그래서 cocoadev 님의 스크립트에서 몇줄 추가해 파일의 실행권한도 유지되게끔 수정 해 보았다.
코드에서 # for copy permission... nakada 부분이 내가 수정한 극히 일부분 ~
나도 언젠가 cocoadev 님처럼 처음부터 만들어보고 싶다.

소스코드는 아래 더보기를 누르면 된다 ^^
python 특성상 띄어쓰기로 오류가 있을수도 있기 때문에 파일첨부 !

더보기

저작자 표시 비영리 변경 금지

Trackback URL : http://seapy.com/trackback/140 관련글 쓰기

  1. 텍스트파일 문자셋 변환 스크립트

    Tracked from OS X에서 cocoa 맛보기 2008/10/21 12:03 Delete

    간혹 euc-kr로된 파일들을 utf-8로 변경할 경우가 있어 파이썬으로 아래와 같이 iconv를 이용하는 간단한 스크립트를 만들어 사용했습니다. #!/usr/bin/python import os, sys for arg in sys.argv[1:]: if os.path.isfile(arg): os.rename(arg, arg + '.chg') command = 'iconv -f euc-kr -t utf-8 ' + arg + '.chg' + ' > '..

  1. # BlogIcon hUmaN 2008/10/21 11:35 Delete Reply

    우왕국!
    멋져염ㅋㅋㅋ
    저도이거쓰고있어요ㅋㅋㅋ

    1. Re: # BlogIcon nakada 2008/10/22 01:22 Delete

      ㅋ 너도 쓸일이 있단말야 ?~

  2. # BlogIcon cozydev 2008/10/21 12:06 Delete Reply

    수정해 주시고 알려 주셔서 감사합니다. 허접하게 만들어 놓은 것을 nakada님이 사용할 수 있게 만들어 주시네요. ^^

    1. Re: # BlogIcon nakada 2008/10/22 01:22 Delete

      저 편하려구 한걸요 머;
      저는 이미 잘 차려진 밥상에 숟가락만... 응?
      스크립트 만들어주신 cozydev 님께 감사히 생각하고 있습니다.

  3. # BlogIcon hUmaN 2008/10/22 01:46 Delete Reply

    지금 동아리홈페이지 com서버에있는데 자체서버로 이전작업하고있거든요ㅋㅋㅋ
    근데 com서버는 euckr이고 자체서버는 utf8이라서요 ㅋㅋㅋㅋ

  4. # 이정민 2009/03/03 01:31 Delete Reply

    shutil.copymode()나 shutil.copystat()를 사용하면 간단히 해결할 수 있습니다.

    1. Re: # BlogIcon nakada 2009/03/03 09:51 Delete

      좋은정보 감사합니다 ^^
      집에가서 확인해봐야 겠어요 ^^

Leave a comment

Pyframe 0.2 가 나왔었군요

Posted 2008/08/20 02:29, Filed under: Python Story
사용자 삽입 이미지
1. 나온지 벌써 3달이 다되가는거 같은데 저는 모르고 있었네요 ㅎㄷㄷ;

그 사이에 pyframe 으로 작업도 몇개 햇는데 ㅠ.ㅜ

많이 바뀐거 없는거 같지만 tmpl 파일만 쓰도록 되있던 템플릿 확장자가

html 도 가능하게 되서 템플릿 파일을 수정할때 훨씬 편리하네요 ^^


2. pyframe 으로 돌아가는 서비스가 몇개 있는데 지금 당장 pyframe 0.2 로 바꾸어도 이상이 없을지 ...

확실하게 알 수 없어서 ㅠ.ㅜ 그리고 지금은 졸려서 내일 알아봐야 겠네요

지금 오픈아이디 로그인 부분도 갑자기 안되고 있어서 ㅠ.ㅜ 잘되던게 안되니까 속터지네요


3. 가상서버 사양을 좀더 올려야 하는건지...

학생신분 일때는 취업만 되면 월 20만원 이상내고서라도 내 가상서버 구입해야지 했는데

서울에서 혼자 생활하면서 나가는 돈이 만만치 않네요 ㅠ.ㅜ

Trackback URL : http://seapy.com/trackback/130 관련글 쓰기

Leave a comment

img 태그의 이미지 다운로드

Posted 2008/07/01 01:41, Filed under: Python Story

동아리 게시판을 감시하고 새로운 글이 올라올때마다 메일로 전송하는 프로그램을 제작했는데
문제점이 한가지 있었다.

그냥 메일로만 받는다면 상관없었지만 이메일을 다시 MMS로 전송해주는 메일서비스를 통해
핸드폰에서 이미지를 보게 되면 img 태그로된 이미지는 핸드폰에서 표시되지 않는다는 것이다.
MMS는 이미지를 첨부할수 있는것이지 img 태그의 url 을 찾아가서 보여주는것이 아니기 때문에 당연하다.

그래서 html본문에서 img 태그가 있는 부분의 이미지를 다운로드 받고
이를 첨부해서 전송해야 하는 문제가 있었는데, 지금까지 미루고 있다가
7월 7일 부터 연수를 들어가야 하는데 인터넷도 못하고 하니까
이미지가 있는 게시글의 경우 궁금할것 같아서 한번 만들어 보았다.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

class imageDownload:
    def __init__ (self, text, postDiv="Test"):
        self.html = text
        self.postDiv = str(postDiv)
        self.imageUrlList = []
   
    def findImgTag (self):
        from BeautifulSoup import BeautifulSoup
        soup = BeautifulSoup(self.html.replace('<![CDATA[',''))
        for item in soup.findAll('img'):
            self.imageUrlList.append(item['src'])

    def allDownload (self):
        self.findImgTag()
        for count, imageUrl in enumerate(self.imageUrlList):
            self.oneDownload(imageUrl, count)

    def oneDownload (self, imageUrl, count):
        import urllib2
        image = urllib2.urlopen(imageUrl)
        fileName = 'image_' + self.postDiv + '_' + str(count) + '.jpg'
        imageFile = open(fileName, 'wb')
        imageFile.write(image.read())
        imageFile.close()

import unittest
class imageDownloadTest(unittest.TestCase):
    def testfindImgTag (self):
        text = '<![CDATA[ <IMG src="http://iscert.org/g4//data/geditor/0806/598215854_e5d205f2_BDC3C7E8.jpg"><BR><BR><BR><BR>다들 거의 끝나가죠??<BR>벌써 끝나신 분도 있던데=ㅅ=<BR><BR>조금만 힘내세요~<BR>몇일만 더 날세면 됨= _=ㅋ<BR><BR><FONT size=4><STRONG><FONT size=5>화이팅~~</FONT><BR></STRONG></FONT><BR><IMG src="http://manian.dreamwiz.com/files/attach/images/1680290/2755272/112686439372312.jpg">]]>'
        a = imageDownload(text)       
        a.findImgTag()
        self.assertEquals(a.imageUrlList , ['http://iscert.org/g4//data/geditor/0806/598215854_e5d205f2_BDC3C7E8.jpg','http://manian.dreamwiz.com/files/attach/images/1680290/2755272/112686439372312.jpg'])
   
    def testallDownload (self):
        text = '<![CDATA[ <IMG src="http://iscert.org/g4//data/geditor/0806/598215854_e5d205f2_BDC3C7E8.jpg"><BR><BR><BR><BR>다들 거의 끝나가죠??<BR>벌써 끝나신 분도 있던데=ㅅ=<BR><BR>조금만 힘내세요~<BR>몇일만 더 날세면 됨= _=ㅋ<BR><BR><FONT size=4><STRONG><FONT size=5>화이팅~~</FONT><BR></STRONG></FONT><BR><IMG src="http://manian.dreamwiz.com/files/attach/images/1680290/2755272/112686439372312.jpg">]]>'
        a = imageDownload(text)
        a.allDownload()

    def testoneDownload (self):
        a = imageDownload('test', 'OneDownTest')
        a.oneDownload("http://iscert.org/g4//data/geditor/0806/1982343339_54400aa9_SN150950.JPG",0)

if __name__ == '__main__':
    unittest.main()

음;; 코드를 깔끔하게 보여주는 티스토리 플러그인 같은거 찾아봐야겠다;; 너무 지저분 ㅠ.ㅜ
첨부파일로도 제공해드리겠습니다 ^^ python 은 코드의 띄어쓰기 하나로도 실행이 안되니 ^^ㅋ

아래 부분은 테스트를 위해서 작성한 코드이고,
윗부분의 imageDownload클래스가 실제 html 에서 img 태그의 이미지를 다운로드 받는 역할을 한다.

imageDownload 클래스를 만들고 사용한지는 1주가 넘어가지만
이제서야 공개하게 되는 이유는... 나도 이런 정보를 공유해야겠다는 생각에서 였다.

웹 진화론이라는 책을 읽으면서 느낀점이 많았는데 그중 하나가
일본인의 경우(한국인도 비슷한것 같다.) 자신의 지식을 공유하거나 알리는걸 꺼려한다.
그에 반해 미국인의 경우에는 자기가 알고 있는 지식이 사소하고 다들 알만한것임에도 엄청난 것처럼 주장하고
사람들에게 많이 알린다고 한다.

솔직히 나는 python을 혼자 배웠고 인턴경험도 없기 때문에 내가 코딩하는 스타일이 효율적인지에 대한 생각을 매번 하고 있었다.
그러던중에 내 코드를 블로그에 올리면 다른사람이 보고 더 좋은 방향을 알려주지 않을까 하는 생각에 이제부터 만들어가는 소스코드들을 공개해보고자 한다.

제 코드를 보시고 참고해서, 좀더 효율적인 의견을 많이 많이 주시면 감사하겠습니다. ^^

Trackback URL : http://seapy.com/trackback/124 관련글 쓰기

  1. # BlogIcon ihUmaN 2008/07/01 10:04 Delete Reply

    http://allgd.net/s2h
    여기서 언어별로 하이라이트 해줘요~

    1. Re: # BlogIcon nakada 2008/07/01 14:02 Delete

      정말 좋은 서비스네요 ^^
      그런데 배경색을 SPAN으로 해서인지
      블로그에 그대로 넣으면 별로네요 ㅠ.ㅜ
      DIV에 배경색을 따로 넣는 작업을 해야할듯 싶어요

Leave a comment

코드 트레이닝

Posted 2008/05/01 00:37, Filed under: Python Story
평소 RSS를 통해 구독하고 있던 OK 괜찮아 다 잘 될거야 에
오늘 초보개발자의 알고리즘 도전이라는 포스트가 올라와서 유심히 보던중 +_+
테스트 케이스부터 만들고 시작하는것을 보고

Python 작성에 TDD를 실제 적용해보고자 하던차에 잘됬다고 생각하고 저도 한번 해보았습니다.
퀴즈문제는 초보 개발자 코드 트레이닝, Part 알고리즘과 성능 이 링크에 있습니다.

우선 TDD를 적용하고자 했던 만큼 테스트 코드를 먼저 만들었습니다.
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import unittest
from ArrayEiBo import *

class ArrayTest(unittest.TestCase):
    def testeither (self):
        listA = [1,3,4,5,6,9,7]
        listB = [4,5,8,9,10,15,-1]
        ar = ArrayEiBo()
        self.assertEquals(ar.either(listA, listB), [4,5,9])

    def testboth (self):
        listA = [1,3,4,5,6,9,7]
        listB = [4,5,8,9,10,15,-1]
        ar = ArrayEiBo()
        self.assertEquals(ar.both(listA, listB), [-1,1,3,4,5,6,7,8,9,10,15])

    def testisSubstring (self):
        first = ('a', 'b', 'c')
        second = ('a', 'c' , 'b', 'c')
        third = ('a', 'a', 'b', 'c')
        ar = ArrayEiBo()
        self.assertEquals(ar.isSubstring(first, second), False)
        self.assertEquals(ar.isSubstring(first, third), True)

    def testmatch (self):
        first = ('(', '[', '<', '{', '}', '>', ']', ')')
        second = ('(', '[', '<', '{', '>', '}', ']', ')')
        third = ('(', 'a', 'c', ')', '[', '{', '}', ']')
        fourth = ('<', '[', '<', '{', '}', '>', ']', ')')
        fifth = ('a', '[', '<', '{', 'a' ,'}', '>', ']')
        sixth = ('a', '[', '>')
        ar = ArrayEiBo()
        self.assertEquals(ar.match(first), True)
        self.assertEquals(ar.match(second), False)
        self.assertEquals(ar.match(third), True)
        self.assertEquals(ar.match(fourth), False)
        self.assertEquals(ar.match(fifth), True)
        self.assertEquals(ar.match(sixth), False)

if __name__ == '__main__':
    unittest.main()

테스트 코드는 퀴즈에 나왔던 기본적인 것 이외에도
예외적으로 테스트해야되겠다 싶은것 몇개를 추가했습니다.
이렇게 테스트코드를 만드는 방식이 맞는지 모르겠네요

저는 both 와 either 을 실행함에 있어서 최종결과에서 정렬을 했습니다.

퀴즈문제의 포스트에 나와있던 시간체크나 성능 최적화에는 신경을 쓰지 못한점이 아쉽지만,
TDD 를 실천해보고 재미있다는 느낌을 얻은게 큰 소득이랄까요?
리팩토링할때도 테스트 코드가 있으니 좀더 명확하고 코드에 자신감이 생기더군요

마지막 match 함수의 경우에는
너무 긴 함수가 제작된게 아닌가 싶어서 리팩토링도 해주어야 할듯 싶구요

앞으로 코드 골프나 퀴즈문제를 더 많이 풀어보면서
알고리즘을 최적화하는 방식을 더 공부해야겠다는 생각이 들었습니다.

제가 작성한 소스 코드는 아래 첨부합니다.
#!/usr/bin/env python
# -*- coding: utf-8 -*-

class ArrayEiBo:
       
    def __init__ (self):
        pass

    def either (self, listA, listB):
        eitherList = []
        for item in listA:
            if item in listB:
                eitherList.append(item)
        eitherList.sort()
        return eitherList
       
    def both (self, listA, listB):
        noeitherList = []
        for item in listA:
            if item not in listB:
                noeitherList.append(item)
        bothList = noeitherList + listB
        bothList.sort()
        return bothList

    def isSubstring (self, listA, listB):
        isSub = False
        for startNum in range(len(listB)-len(listA)+1):
            if listA == listB[startNum:startNum+len(listA)]:
                isSub = True
                break
        return isSub

    def match (self, listA):
        isMatch = False
        dicDefBracket = {'<':'>','[':']','{':'}','(':')'}
        listOnlyBracket = []

        for item in listA:
            if (item in dicDefBracket) or (item in dicDefBracket.values()):
                listOnlyBracket.append(item)
       
        adjustCount = 0
        for count in range(len(listOnlyBracket)):
            count += adjustCount
            if listOnlyBracket[count] in dicDefBracket:
                continue
            elif (count-1 >= 0) and (dicDefBracket[listOnlyBracket[count-1]] == listOnlyBracket[count]):
                listOnlyBracket.pop(count-1)
                listOnlyBracket.pop(count-1)
                adjustCount -= 2
            else:
                break

        if len(listOnlyBracket) == 0:
            isMatch = True
       
        return isMatch


Trackback URL : http://seapy.com/trackback/114 관련글 쓰기

  1. 코드 트레이닝 Part.2 알고리즘과 성능.

    Tracked from RUie's room .. 2008/05/05 04:19 Delete

    코드 트레이닝 Part2. 알고리즘과 성능. <- 위 사이트에 대한 트랙백 입니다. 파이썬을 공부해야 하는 일이 있어서, 공부하는 셈 치고 작성해 봤습니다. 언어 자체에 기능이 많으니 사용이 편리한게 많은 것 같네요 .. 1, 2번 문제인 Both, Either입니다. * 파이썬의 경우 List가 기본 자료형이기 때문에 지원이 좋습니다. 간단하게 리스트에 두 리스트를 비교한 후에 리턴해 줍니다. #Both, Either def both(xs, ys)..

  1. # blueiur 2008/05/05 04:21 Delete Reply

    안녕하세요, 코드 잘 보고 갑니다.
    1년 전쯤에 한번 들렀다가 포스트 내용들의 내공에 상당히 놀랐던 블로그인데 이런 계기로 다시 한번 들르게 되네요, 나이가 많지 않으신것 같은데 내공이 대단하신듯 하네요~ 부럽습니다! ^^

    1. Re: # BlogIcon nakada 2008/05/07 12:09 Delete

      Python 으로 하는건 조금 자신있는데
      다른언어가 잘 안되서 걱정이죠 ^^
      내공이랄것도 없습니다.;;
      좋은 포스트 많이 올릴테니 자주와주세요 ^^

Leave a comment

한RSS 중요한글 검색

Posted 2008/04/13 01:39, Filed under: Python Story
저는 한RSS에 하루에 5번이상 접속하고 있습니다.
제가 생각해도 저는 정보 중독증 이거든요 ^^;
그런이유로 중요한 정보다 싶은건 한RSS 중요한글로 체크합니다.
하지만 문제는 한RSS에서는 유저 개인의 중요한글 검색이 되지 않습니다.
1,000개의 중요한글 저장공간을 제공하지만, 검색이 안된다는건 효율적이지 못하지요
대안으로는 아웃룩과 연동해서 중요한글을 읽어온후에 아웃룩에서 검색하면 되겟지만

저는 아웃룩을 설치조차 하지 않기 때문에 한RSS 중요한글 검색을 만들었습니다.

주소는 http://py.seapy.com/vipsearch 입니다.

한RSS 중요한글이 사용자별로 다르기때문에 검색을 시도하기 전에
사용자 아이디와 비밀번호를 입력하고, 검색을 시작하면 됩니다.
한RSS API를 이용했는데 ApiKey 방식이 아니기 때문에 암호화되지 않은 비밀번호가 필요합니다.
제가 따로 비밀번호를 저장하거나 그런것은 없기때문에 안심하셔도 됩니다.
(인증부분에 관해서 보안적으로 우수한 아이디어가 있으시면 리플 부탁드립니다.)


사용자 삽입 이미지

제작은 python 으로 하엿습니다.
기반인 웹프레임워크는 박응용님이 공개해주신 pyframe 를 사용했습니다.
pyframe 덕분에 며칠만에 쓸만한 서비스를 공개하게 되서 만족스럽습니다.

Trackback URL : http://seapy.com/trackback/110 관련글 쓰기

  1. # BlogIcon 성렬 2008/04/16 09:42 Delete Reply

    지난번 "스프링노트로 가져오기"처럼 API 사례에 넣어두었습니다. ^^; (http://www.hanrss.com/help/api/)

    1. Re: # BlogIcon nakada 2008/04/20 12:16 Delete

      감사합니다 ^^ 기능이 좀더 있어야 할텐데;

Leave a comment

주말에 Pyframe과 함께

Posted 2008/03/15 23:57, Filed under: Python Story

주말에 할일이 없다.

몇달전까지만 해도 항상 바뻣던것 같았는데
주말에 하고싶은 것도 많았지만 시간이라는 핑계로 못한것도 많았는데

이제는 주말에 멀 하고 싶어도 할게 없어져 버렷다.

그러더중 Pyframe 이 공개되어서 시작하게되었다.
mytodo위키독스를 보면서 밑에 있는 Powered by pyframe  문구를 보고
pyframe? python 웹 프레임워크중에 처음들어보네 하면서 관심이 잇었지만
개인적으로 쓰시는 거라는 말을 들었었는데

주말을 하루 앞두고 이런 내맘을 아셨는지
박응용님이 공개를 해주셧다 ^^

그리고 수많은 질문을 통해서 기본적인 테스트를 완료하게 되었다.

Django 는 python 프레임워크중에 사람들의 관심을 가장 많이 받고있지만
처음에 서버세팅하기는 그리 쉽지 않았다. 버전에 따라 바뀌는 사항도 많았다.

pyframe는 간단히 혹은 그 이상의 프로그램을 만들기에 좋을것 같다는 느낌이 들었다.
twisted 를 기반으로 작성되어진걸로 보여지는데
우선 서버설정하기가 매우편하다. 윈도우에서 개발서버로 만들어 놓고
리눅스에서 그냥 사용하면 된다.

그래서 주말동안에는 wordfight 서비스를 pyframe 로 포팅하는것을 시작햇다.
그냥 가만히 있으면 머리에 온갖 안좋은 생각들만 들어서 ....

... 내일은 wordfight 의 기본적인 기능만 포팅해보고
덕진공원에 가서 숨좀 쉬어야 겠다.
.


Trackback URL : http://seapy.com/trackback/106 관련글 쓰기

  1. # BlogIcon classifieds in hous 2008/05/23 04:33 Delete Reply

    관심을 끌. 너가 좋을 동일할 지점을.

  2. # BlogIcon pussy old man 2008/05/23 04:37 Delete Reply

    여보세요, 좋은 아주 위치!

Leave a comment