Wednesday, December 29, 2010

language benchmark

python을 주로 쓰는데 비슷한 작업을 친구가 perl로 짯는데.. 속도가... 너무 차이난다. file IO가 많아서 그런지.. 좌절.. perl도 공부해야 겠다는 생각이 든다. 아래는 언어 performance 비교한거.
http://www.bioinformatics.org/benchmark/results.html

그리고 보통 프로그램 시간 체크 하기 위해서 time 명령어를 쓰는데 default로 real, user, sys 모드의 시간이 나온다. 거기에 대한 설명은 아래 링크
http://stackoverflow.com/questions/556405/what-do-real-user-and-sys-mean-in-the-output-of-time1


그렇다면 두 프로그램의 퍼포먼스를 비교할려면.. user + sys 로만 비교해야 하는건가... 음..


-이번에 이런저런 check하면서 알게된 tip
--어떠한 key값이 사전형 변수에 key로 있는지 없는지 확인하고 대입할경우 예를 들어 
key = 'good'
d_some = {#something in here#}
if key in d_some.keys():
      d_some[key] = "something"


이렇게 하는 것보다
try:
      d_some[key] = "something"
except:
      pass
식으로 하는것이 더 빠르다. 특히 d_some의 key가 많을때.


--그리고 itertools 괜찮은거 같다. 활용해 볼 만하다.
http://www.builderau.com.au/program/python/soa/Faster-smaller-clearer-Python-iterator-tools/0,2000064084,339280043,00.htm
위 내용을 간단하게 정리 하자면 zip()을 써서 두 list 합쳐서 거기서 하나씩 iterative하게 뽑나낼려면 우선은 두 리스트를 합치는 과정이 들어가기 때문에 느린데 izip을 쓰면 합치는 과정 없이 그냥 iterative object를 생성한다는 것 같은데..  그렇다면 고스란히 메모리에 올려놓는건가? 두 리스트를? 음.. 


--python에서 프로세스 시간을 재는 방법
http://www.tutorialspoint.com/python/time_clock.htm

Friday, December 24, 2010

web server

이것저것 고려해보다가.. 결국 웹 서버를 만드는데 옵션 사항들을 결정했다. 웹서버를 만드는데 들어가는 대부분의 사항들이 내가 약한 부분이라 많은 시간을 들여 공부해야 할것이다. 우선적으로 hanil 서버에다가 web server를 구축 할 것이 아니라 google app engine을 사용하기로 한다. python을 이용하며 google app engine에 django가 포함되어 있으므로 장고 식으로 갈거고 이 참에 jquery까지 공부해 보도록 한다.또한 버젼 관리를 위해 전에 해보지 않았던 svn을 이용하기로 한다. (아.. 근데 문제가 있긴 있구나.. 만약 내가 python에서 특정 모듈을 사용할려면 그게 서버에 깔려 있어야 하는데.. 이런 문제는 어떻게 해결하지.. 음.. biopython모듈을 사용해서 사이트를 만든 것이 있는걸로 보아 기본적으로 외부 모듈을 지원하는거 같은데 조금더 알아봐야 한다.예 :http://biosqlweb.appspot.com/ )


-결론적으로 봐야할 list
django, jquery, svn


초보자로서 큰 틀을 다시 그려보면 hanil 서버에 svn 저장소를 생성하고 내 계정에 권한을 줘서 계속 소스를 갱신해서 웹 프로그래밍을 한다. 웹 프로그래밍의 테스트 및 나중에 google app 에 올리는 것은 google_appengine을 이용한다.


-setting & study-
-google app engine SDK 설치
google_appengine_1.4.0.zip 다운로드 하고 path와 PYTHONPATH에 goolge_appengine 위치를 잡아 놓는다.
-svn
http://www.oneone.kr/?document_srl=2030
-html
http://deadfire.hihome.com/html/html01.html
-css 
http://blog.naver.com/rusdudtn2?Redirect=Log&logNo=140047835464
-javascript 
http://deadfire.hihome.com/jscript/jscript01.html (참고 : http://ej5811.blog.me/80094536125 )
-django
http://www.wikidocs.net/read/955 (참고 : http://www.wikidocs.net/read/828)

Monday, December 20, 2010

microbe annotation 추가 사항

BER
TIGRFAMs,
equivalog-level HMM
TIGR role catergory scheme
PROSITE motifs
XDOM


추가 고려

Tuesday, December 14, 2010

call process without wait

요즘 microbe annotation pipeline을 만들고 있는데 때때로 일의 진행이 동시에 일어나야 할 때가 있다. 그러니까 A , B, C 라는 프로세스가 있을때 A -> B -> C 순서대로 일을 진행하지 말고 A, B, C가 연관성이 없는 작업이기때문에 그냥 동시에 일을 진행하려 한다. 일반으로 python에서 os 상의 어떤 명령어를 실행할때 os.system을 많이 쓰는데 이 모듈은 실행시킨 프로세스가 종료가 되고 return이 되야 다음으로 넘어간다. 그래서 그냥 return 값의 wait 없이 바로 바로 진행시키는 모듈을 찾다가.. http://docs.python.org/library/subprocess.html#subprocess-replacements (17.1.3.4 참조)과 같은 링크에서 발견. 이름하여 subprocess 모듈의 Popen. 내 생각이 맞다면 알아서 os가 cpu에 잡을 나누겠지. cpu가 하나라면 의미 없겠지만(I/O 의 경우를 제외하면, 단순 계산이라면 성능의 향상이 없을거겠지만) 일반적으로 지금 쓰는 컴터가 쿼드니까 알아서 나눠주겠지.. 아닐려나.. 아니라면 누가 좀 수정해주세요.

Monday, December 13, 2010

file I/O by python

전 포스팅에도 언급했듯이 요즘 perl calendar를 참조하고 있다. 나같은 허접댕이들은 언어로 어떠한 일을 할 수 있는지 조차도 잘 모르기 때문에 그 사이트를 보면서 아.. 이런것도 할수 있구나 하고 좋은 팁을 많이 얻는다. 
이번에 봐볼 것은 파일 입출력! 우선 motive가 된 perl calendar 셋째날 http://advent.perl.kr/2010-12-03.html


위의 코드를 나름 이해하자면.. 우선 파일을 바이너리 파일로 변환한다. 파일에 특정 범위의 숫자가 들어가 있으므로 byte를 정해서 바이너리로 변환한다(pack). 변환되 바이너리 파일에 접근하기 위해서는 이미 알고 있는 행과 열의 갯수와 각 값에 할당된 byte 수로 접근 가능한 수치(offset)로 변환한다. 그리고 map 모듈을 이용해서 하드 디스크의 파일을 메모리에 같다 붙여서 아까 구한 offset을 이용해서 바로 파일의 특정 위치에 접근한다.


이걸 python으로 할려면 필요한 모듈이..
데이터를 binary로 변환하는 모듈,
perl의 map모듈과 같은 역할을 하는 python 모듈




-pickle-
우선은 내가 잘 이용하지 않았던 pickle이란 모듈: http://swingbeat.egloos.com/4076363
자세한 내용은 http://docs.python.org/library/pickle.html. 그런데 내가 산 책에는 pickle을 이용하려면 파일을 열때 바이너리 모드로 열어라고 했는데.. 근데 꼭 그런거 같진 않네. 그냥 열어도 dump를 하면 binary모드랑 똑같은 형식으로 써진다.
-mmap-
http://docs.python.org/library/mmap.html
이게 대충 보니까 mapped된 파일은 mutable 하기에 바로 접근해서 수정가능한 것 같다. 자신이 원하는 파일의 위치를 알때 이를 사용하면 좋을듯


그밖에
http://stackoverflow.com/questions/1035340/reading-binary-file-in-python
http://linux.byexamples.com/archives/478/python-writing-binary-file/



이건 상관없는건데 그냥..
-ctypes tutorial-
http://python.net/crew/theller/ctypes/tutorial.html

Friday, December 3, 2010

send message by google gdata module

금선생의 buzz에 올라온 perl calendar(http://advent.perl.kr/) 오.. 대단한데.. python도 이런거 하나하고 찾아봤는데 못찾고.. 다만 perl calendar의 12월 2일째에 올라온 구글 calendar로 문자보내기를 검색해본다. 했더니 오.. 이런 신세계가.. http://www.wikidocs.net/read/683 


gmail로도 문자 보내기가 가능하다.(이건 잘 모르겟다...음..) 
http://thesteveblog.blogspot.com/2009/02/python-script-to-send-sms-via-gmail.html
그런데 첨에 내 gmail 계정에는 sms 사용 창이 없어서 setting을 바꾸는데.. 무자게 구글을 뒤졌다. 결국 나와 같은 분을 위해
http://www.labnol.org/internet/send-sms-text-messages-from-gmail/5156/


아래도 괜찮다.
http://www.wikidocs.net/read/668



확실히 언젠가 시간 잡고 google python api를 봐야 하겠다. 

Thursday, December 2, 2010

gap closing by phrap & consed

요즘 FLX로 de novo assemble 한 scaffold의 gap closing 중인데. gap 인 N부분을 메꾸기 위해서 sager sequencing 을 이용하고 그 gap 부위의 assembly를 phrap을 이용하고 consed로 확인을 한다. phill green 이라는 사람이 만들었는데 프로그램을 얻기가 여느 프로그램 중에 젤 까다롭다. phred랑 phrap은 바로 첨부파일로 보내주지만 consed는 파일이 크기 때문에 접속할 ip를 academic 한 이유로 프로그램을 이용한다는 동의서와 함께보내야한다. 
뭐 여튼.. 기본적인 make 만 하면 되고 make install도 없다 다만 실행 파일을 모아놓은 bin을 path로 걸어놓기만 하면 끝. 


gap이 무자게 많은 관계로 가능한 automation을 하고 싶어서 이것저것 짜고 있는데.. 결론은 아무리 정리를 해도 눈으로 확인해봐야 한다는... 여튼 눈으로 확인하기 전에 최대한 정보를 정리해서 summary를 해야 하는 까닭에... 필요한 데이터를 링크, 정리는 아직 모르겠고


-ace file format
http://bcr.musc.edu/manuals/CONSED.txt


autofish라고 있는데.. 이게 뭔지는 자세히 들여다 봐야 할듯.. 
http://www.phrap.org/consed/autofinish.html