Sunday, February 27, 2011

뇌를 자극하는 알고리즘

뇌를 자극하는 알고리즘. 산지 한 1년 정도 된 책인데. 요즘 알고리즘을 다시 제대로 차례차례 공부해보고자 다시 보고 있는 책. 처음 샀을 때는 필요한 부분만 눈으로 살펴봤는데.. 역시 남는게 없었다. 해서 지금은 코딩을 따라해본다. 역시나 눈으로 익혔던 C를 이용해서. 나름 여러모로 도움이 된다.. 직접 C도 써보고 코딩도 하기에  알고리즘이 확실히 이해가 되기도 하고..
4장까지는 자료구조로 리스트, 스택, 큐, 트리를 설명하고 5장 이후로는 탐색등등의 알고리즘을 설명한다. 완전 잘 쓴 책이지는 내가 판단을 못하겠다. 뭐 다른 알고리즘 책을 제대로 본적이 없기 때문에. 
이책을 다 마치면 금선생의 권유로 algorithms on strings trees and sequences 라는 책 볼 예정이다. 그 예정이 꼭 이루어지길 간절히 소망한다. 


2011/3/6 
책의 절반정도를 보고 있는데. 왠만하면 아직까지는 코딩을 따라하고 있다. 왜 처음에 이 책을 샀을 때 대충봐도 될거라고 생각했는지 지금 생각하면 참 아쉽기만 하다. 코딩을 따라 하고 있는데도 쉽지 않다. 물론 그냥 저자가 인도하는데로 이해한다면 그냥 그냥 그렇게 가지만 왜 그렇게 해야만 했는가하고 조금이라도 의문을 갖는다면 다른 경우의 수가 틀렸음을 증명해야 하기 때문에 만만치 않다. 코딩을 따라해도 몇일이 지나면 까먹는다. 만만찮다. 최소한 수십번은 코딩을 따라하고 외워야 감이 올거 같다. 마치 예전에 정석 공부하듯이(저자의 머릿말이 와닿는다. 천재 화가 피카소도 다른 유명한 작품들을 수없이 모사 했다는것).


2011/3/12
많이 어렵다. 아니. 익숙하지 않다. 확실히 많이 짜야 한다. 읽을땐 이해하고 따라가는거 같아도 막상 책 덮고 C로 짜려면 아무것도 기억이 나지 않는다. 그리고 단순히 이해하는 것 조차 어려운 부분도 있다. 레드블랙이진트리나 문자열 탐색인 보이어-무어 알고리즘은 이해조자 어렵다. 아.. 나의 무지함에 막막할 뿐이다.

Friday, February 25, 2011

ensembl api

시작 url
http://www.ensembl.org/info/docs/api/index.html


Core databases and APIs


1. DB connection 
내가 이해한걸로는 우선은 registry 라는 모듈의(클래스 인듯..) load_registry_from_db라는 메소드로 DB에 연결을 한다. 아니면 ensembl_registry.conf 파일을 미리 만들어서 load_all()이란 메소드로 conf 파일에 명시된 DB로 연결한다. http://www.ensembl.org/info/docs/api/registry.html


2. Object Adaptors
Registry 모듈로 DB에 연결되었으면 DB의 데이터를 object(데이터를 캡슐화 한것같은..)로 가져와야 한다. 이때 object adaptor를 사용한다. 그러니까 DB의 데이터 덩어리를 object라고 하고 이것들을 생성하기 위해 DB의 구조 정보등을 담고 있어서 우리가 검색하고자 하는 query 정보만 주면 object를 가져오게 하는 adaptor를 생성해야 한다. 이때 사용하는 것이 Registry의 get_adaptor 메소드. 
http://www.ensembl.org/info/docs/api/core/core_tutorial.html


3. Object 
object는 slice, gene, exon등 데이터인데 이는 2번 스텝에서 생성한 adaptor를 이용해서 adaptor에 쿼리를 인자로 줘서 생성한다. object는 reference로 return하기 때문에 while과 shift를 사용하길 권장한다. 주의 할점은 data object에서 시퀀스를 뽑아내면 그것의 strand와 상관없이 항상 + strand로 나온다. position도 strand와 상관없이 +strand 기준으로 작은 bp가 start 이 된다.


slice : object represents a single continuous region of a genome ,
features : objects in the database which have a defined location on the genom
  • gene : grouping of transcripts
  • transcript : grouping of exons
  • exon 
  • translation : trascript 객체의 translation 메소드를 호출하면 나오는 것으로 CDS와 UTR을 위한것.
  • transcript객체에는 translate가는 메소드도 있는데 이는 protein sequence를 위한것
  • proteinFeature : amino acid sequence object. translation 객체의 get_all_proteinFeature()의 return object
  • Alignment Feature : slice 객체의 DnaAlignFeatures과 ProteinAlignFeatures 메소드로 각각 dna와 protein을 genome 에 alignment 한 feature
  • repeat : RepeatMasker 와 TRF로 찾아진 repeat region, slice 객체에서 get_repeatmasked_seq 메소드를 이용해서 인자에 따라 hard 또는 soft masked sequence를 얻어낼수 있다.
  • Maker : imported into the Ensembl database from UniSTS and several other sources (primer sequences, product size...). 




그러니까 slice는 그냥 dna 가닥이고 feature는 게놈상의 정의된 위치, 그러니까 
2번 스텝의 url 뒷내용은 각 object에 대한 이야기 므로 위의 내용이 API 사용의 큰 개념인 듯하다.


살짝 본 후 느낀바는...
DB에서 sql 데이터 받아와서 DB를 만든후 혹은 파일들을 다운 받아서 파싱해서 처리해야 하는 일을 ensembl api를 이용해서 DB의 구조는 신경쓰지 않은채 할 수 있다. 잘만 이용하면 사전에 필요한 귀찮은 작업을 하지 않고 api만을 이용해서 할수 있다. 또한 던진 쿼리에 return인 object가  여러데이터 들이 캡슐화로 이루어 졌기 때문에 그 object에 왠만한 데이터는 다 들어 있다. eutil 같은 경우에는 특정 파일에 대한 내용만 가져오는 식인데 ensembl api는 내 쿼리에 해당하는 자료들이 어떠한 구조를 이루어 넘어 오기 때문에... 말이 복잡한데 그냥 쉽게 말하면 eutil은 file이 넘어 오는데 반에 ensembl api는 C의 구조체 같은 (혹은 class)가 return되기에 자료의 접근만 잘하면 parsing없이 데이터를 뽑아 낼수 있는거 같다. 다만 문제라고 한다면 네트워크를 이용해서 데이터를 얻어 오는 거라서 좀 느리다는거(참기 힘든 정도는 아니다. 꽤 빠르다. eutil 보다도 어떻게 보면 나은듯??). 알아둘 만 하다.

Thursday, February 24, 2011

ensembl api setting

perl을 한다고 한다고 하다가.. 안하다가.. 영건씨가 얼마전에 다녀온 nicem에서 한 ensembl api  워크샵 다녀오고 괜찮다길래.. 써볼려는 요량에 perl 개요만 읽어보고 사용해 보려한다.
기본적으로 ensembl api를 사용할려면 약간의 setting이 필요한데.. 


1. 우선 bioperl 설치
http://www.bioperl.org/wiki/Installing_Bioperl_for_Unix
여기 나와 있듯이 cpan도 업글하고 뭐 이것저것 하는데 그냥 따라한다. 그리고 bioperl은 cpan을 이용해서 install


2. perlconsole 설치
http://sukria.net/perlconsole.html
python에 익숙한 나로는 잘 모르는 일을 할때는 interactive 창에서 한스텝마다 검사하는 습관이 있어서 아무래도 perl도 그런게 있지 않나 싶어서 찾은 것. 지금 사용하기론 부족함 없어 보인다.


3. ensembl api 설치
http://www.ensembl.org/info/docs/api/api_installation.html
cpan으로 cpan>d /ensembl/ 하면 ensembl 관련 package가 나오는데 ensembl-bundle 이라는걸 깔았는데 ensembl api는 아닌듯. 그냥 위의 링크대로 하고 path만 잡아주면 문제없이 잘 되는 듯 하다.


4. 확인
perlconsole을 띄우고 use Bio::EnsEMBL::Registry; 라고 쳐보면.. 아무 에러 메시지 없으면 일단 성공한 걸로 보인다.

Tuesday, February 22, 2011

python somthing

memory와 cpu 를 monitoring 하는 방법을 찾다가 
ps명령어를 subprocess module의 popen을 이용해서 사용하는 프로그램 발견
http://stackoverflow.com/questions/276052/how-to-get-current-cpu-and-ram-usage-in-python


그 뒤 아예 누군가 만들어놓은 psutil 모듈
http://code.google.com/p/psutil/


그리고 예전부터 궁금했던 teminal control을 위한 글 
http://nadiana.com/python-curses-terminal-controller


사실 이는 stdout에서 어떻게 overwrite 하는지 찾다가 나온건데..
sys 모듈의 sys.stdout.write()과 \r (carrige return) 과 sys.stdout.flush()를 이용하면 된다.
너무 적은 내용은 버퍼에 있기 때문에 sys.stdout.flush()를 사용하지 않으면 출력이 먼저 되지 않는다. 사실 생각해보면 sys.stdout.write를 사용하지 않고 print를 사용해도 된다. 다만 "," 를 붙여서 사용하면 동일하다. 그리고 ","를 붙이면 바로 출력이 되는 것이 아니라 buffer에 들어 가기 때문에 이 역시 stdout.flush를 호출해야 한다.

Monday, February 7, 2011

ActivePython, Tkinter

Tkinter 모듈? 인터페이스? 아직 정체를 잘모르겠다. 책을 하나 샀는데 python and tkinter programming이라고..앞에 1부가 전체적인 것을 보는것 같은데 솔직히 책이 해석에 초점을 맞춰서.. 영 뭔소린지.. 아직 그정도의 백그라운드가 내가 없는듯. 여튼 따라 할려니까 Tkinter 모듈을 import 해야 한다. 헉.. 안된다. 대충 보아하니 tcl이라는 스크립트 언어를 python으로 이용하게 하는 모듈인거 같은데 그래서 tcl과 tk를 설치 했다. 헉 그래도 안된다. 근데 최근 버젼의 python에는 원래 들어가 있다고 한다. 서버 python이 2.6 버젼인데 왜 없는거냐고.. 해서 다시 깔려고 한다. 그런데 ActivePython이 많이 언급됨을 본다. 그래서 ActivePython을 설치(아직 정확히 그냥 python이랑 activepython이랑 뭐가 다른지는 모르겠다). 여튼 아래 url (http://www.activestate.com/activepython/downloads) 에서 다운 받아서 설치. 아.. 그런데 왠걸 이거 왠지 fancy하다. easy-install도 잘돌아가고 sys.path도 잘 잡혀 있어서 easy-install로 깔는게 지금 돌리는 버젼에 맞게 모듈이 설치된다. 그리고 tkinter 역시 기본적으로 들어 있다. 좋다. 이 책은 다 볼 생각은 없고 목표한 바. 그러니까 버튼 몇개 만들고 그거에 맞춰서 특정 프로그램이 돌아가는 스크립트 하나 만들어 보고 치울 생각이다. 이거 보니 예전 visual c++인가 그걸로 네이버 접속해서 블로그웹페이지 소스 글어다가  wma 파일 url 알아내가지고 음악 다운 받았던 프로그램 짯던 것이 생각난다. 어느 순간 네이버에서 음악 파일을 쪼내 놓는 바람에 버려졌지만.

Saturday, February 5, 2011

뇌를 자극하는 프로그래밍 원리

예전에 한번 link programming to hardware라는 제목으로 포스팅을 한적이 있는데 그 때 cpu는 어떻게 구성되어 있는지 궁금해서 한 블로그의 글을 본 기억이 있다. 캐쉬 메모리랑, os에 대한 내용이 대략적으로 나오기에 산 책. 프로그래밍을 하는데 그 소스가 돌아가는 컴퓨터는 어떻게 되어있고 또 그 하드웨어는 프로그램에서 어떻게 이용되는지 알고 싶을 때 보면 좋은 책 같다. 저자의 말처럼 자동차를 운전할때 자동차에 대해 조금이라도 알고 운전 하는거랑 그냥 운전만 하는거랑은 차이가 있는 것처럼 하드웨어적인걸 알고 프로그래밍을 하는게 머리속에 그려지는게 더 명확하지 않을까 한다.


한 반절 본거 같은데 좋은 책인거 같다. 프로그래밍을 할때 변수를 잡고 수를 대입하고 연산하고 함수를 만들고 하는것들이 어셈블리어로는 어떤식으로 변하고 그리고 이것이 인스트럭션으로는 어떻게 되고 그래서 cpu회로에서는 어떤식으로 돌아가는 정리해놨다. 그렇기에 1부에서는 cpu의 회로에 대한 대략적인 내용을 그리고 2부에서는 이 기초를 바탕으로 C언어가 어떻게 돌아가게 되는것인지 마지막 3부에서는 os 에대한 내용이 나온다.