Agile2robust
Be agile to be robust

Rio – 단순한 아름다움

By lordmiss on 2009/01/12

루비는 매우 우아한 언어이다.

?View Code RUBY
 3.times {print "Hello Ruby"}

위의 코드는 “Hello Ruby”라는 문자열을 세 번 출력해 준다. 이 정도 되면 루비는 사람의 마음을 잘 이해하고 있다고 해야 할 것이다. 그래서 나는 루비를 배웠고, 그걸 잘 써먹고 있다.

Zinc에서 화합물 데이터베이스 파일을 전부 다운로드받아야 하는 일이 생겼다. 단순하게 0부터 순서대로 160여개의 파일이 있는데, 개당 약 30메가 정도의 크기이고 그걸 다 다운받으면 되는 일이다. 어플리케이션으로 한다면 다운로드 매니저를 쓰면 되고, 유닉스 스타일로 한다면 curl이나 wget으로 간단하게 해결되는 일이지만, 루비로 이 일을 해 보기로 했다. 기본적으로는 웹에서 파일을 다운받는 것이니만큼 net/http 기능을 사용해서 하는 것으로 생각을 했다. 그런데 이게 생각보다 코드가 예쁘지 않고 직관적이지도 않은게 좀 마음에 들지 않는 것이다. 누군가는 분명 이런 문제에 대해 답을 가지고 있을 것이라는 생각으로 검색을 좀 해 봤고, 결국 Rio라는 프로그램을 찾을 수 있었다.

위에서 이야기한 Zinc에서 다운받기는 아래와 같은 12줄짜리 스크립트로 해결할 수 있었다.

?View Code RUBY
require 'rubygems'
require 'rio'
 
def get_sdfgz(url, res)
    rio(url) > rio(res) #url의 파일을 res 파일로 저장
end
 
for number in 0..165
    name = "http://zinc.docking.org/subset1/6/6_p0" + number.to_s + ".sdf.gz"
    res = number.to_s + ".sdf.gz"
    get_sdfgz(name, res)
end

특히 다섯번째 줄의 rio(url) > rio(res) 같은 경우에는 정말 아름답지 않은가! 이런 코드로 일을 할 수 있다는건 참 행복이 아닐 수 없다.

알고보니 Rio의 기능은 이 정도에서 끝나는 것이 아니었다. 다음과 같은 예도 가능하다.

?View Code RUBY
rio('dir').files(*.jpg) { |jpg| ... } # dir 디렉토리에 있는 모든 jpg 파일에 대해 작업
rio('dir').files['*.txt'] # dir 디렉토리에 있는 모든 txt 파일의 array
rio('a.txt') > string # a.txt 파일의 내용을 string 변수에 복사
rio('file').lines[0..3,/re/] # file의 처음 세 줄에 대해 정규표현식을 적용
rio('ftp://host/file.gz').gzip.lines[0,3..5] # file.gz의 압축을 푼 후, 0, 3-5 라인을 array에 넣음
ans = rio(?-).print("Input: ").chomp.gets # 사용자 입력을 받아 ans에 돌려줌

위의 예제 정도면 rio가 얼마나 일을 편하게 만들어주는지를 알 수 있을 것이다. 더 많은 예제와 사용법을 원하신다면 홈페이지를 방문해 보시길. 단순한 것이 아름답다는 것을 느끼게 될 것이다.

Posted in 화학정보학 | Tagged Rio, ruby, 다운로드, 단순함, 루비 | Leave a response

« Previous Next »

Pages

  • 이 블로그는 개점 휴업?
  • 이 블로그에 대해
  • 피드버너를 중지합니다.

Categories

  • 과학 일반
  • 기타
  • 분자모델링
  • 소프트웨어
  • 신약개발
  • 화학정보학

Archives

Tag cloud

Depth-first 자바 데이터 Chempedia 데이터베이스 QSAR protein structure rcdk Web2.0 Grid Computing 과학 Pipeline Pilot SMILES 비디오 openbabel 저널 집단지성 youtube 화학정보학 위키 chemical database InCHI 블로그 cheminformatics 롱테일 sdf CAS number wikipedia 신약개발 생합성 ruby java Jmol open source 단백질 Nature python 공유 구글 PDB 논문 파이어폭스 pubchem 화학 문헌

RSS Calm Shouting

  • 창조론과 진화론 – 어떤 짧은 논쟁 (2)
  • 창조론과 진화론 – 어떤 짧은 논쟁
  • 윈도우에서 Typinator 기능 사용하기
  • 윈도우에서 스크롤 방향 바꾸기
  • Momolog 데이터를 Momento로 옮기기

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org

Copyright © 2012 Agile2robust.

Powered by WordPress and Hybrid.

Array