2016년 8월 31일 수요일

Linuxbrew에 감동하다!

그림 출처: https://avatars2.githubusercontent.com/u/10321259?v=3&s=400
CentOS 6.X를 쓴다는 것은, 낮은 버전의 파이썬(v2.6)과 gcc 및 glibc의 뒤엉킴으로 인한 문제를 늘 떠안고 살아야 함을 뜻한다. 컴퓨터를 CentOS 7.X로 갈아 엎거나 우분투로 마이그레이션하면 대부분의 문제는 해결된다. 그러나 게으른 컴퓨터 사용자이자 관리자인 나는 이러한 대변혁(?)을 차일피일 미루어 왔는데...

놀랍게도 Linuxbrew는 이러한 고민을 한 방에 해결해 주었다. 어제 설치 작업에서 Perl 버전이 약간 꼬이면서 잠깐이나마 고생을 하였으나, 최신의 프로그램 개발 환경(파이썬을 포함하여)을 일반 유저 권한으로 설정함으로써 생명정보 분석에 필요한 프로그램들을 아주 쉽게 설치할 수 있게 되었다.

원래 pyenv를 써서 파이썬 2.7.8을 설치하면 khmer 설치가 간단히 끝날 것으로 생각했었다. 그러나 C 개발 환경은 그대로 예전 상태로 남아있어서인지 에러가 발생하고 말았다. 그러면 혹시 Linuxbrew가 해답이 되지 않을까 싶어서 이를 활성화시키고 pip install khmer를 실행하니 순식간에 설치가 완료되었다. 이렇게 허무할 데가 있는가.

그동안 나를 혼란에 빠뜨렸던 easy_install, setuptools, virtualenv 등등은 이제 차차 잊어버리도록 하자. 어차피 CentOS 6.X에서 파이썬 2.7 이상을 설치하고, gcc를 업그레이드하는 것은 리눅스 배포판을 바꾸는 것 이상의 완벽한 해결책이 아니었다. 참고로 pip와 virtualenv의 활용에 대한 참고자료로서 김형용님의 글을 링크한다. 어차피 나는 파이썬 버전 환경에 맞추어서 이것저것을 시도할 사람은 아니니, Linuxbrew로 많은 문제를 해결할 수 있으리라 기대한다.

다음번 도전 목표는 어설프게 설치한 metAMOS를 Linuxbrew에서 깔끔하게 재설치해 보는 것이다.

Linuxbrew를 만든 개발자에게 감사를! 페이팔로 기부금이라도 좀 보내고 싶은 마음이 든다.

이것만큼은 주의하자.

su를 실행하면 Linuxbrew 환경이 그대로 이어지므로 yum으로 패키지 업데이트를 하면 시스템이 엉망이 될 수도 있다. CentOS의 yum은 파이썬 환경과 밀접히 연관되어 있어서 문제가 발생한다는 글을 읽은 적이 있다. 관리자 권한으로 패키지를 업데이트하거나 프로그램을 빌드할 일이 있다면 반드시 "su -" 명령을 사용하여 수행하자.

2016년 8월 30일 화요일

오래간만의 독서 기록

요즘은 독서량도 줄고 더군다나 기록도 잘 하지 않는다. 최근 읽은 두 권의 책이 심금을 울리는 바 있어서 이렇게 기록을 남긴다.


1. [회사의 목적은 이익이 아니다] 요코타 이데키 지음/임해성 옮김

13년 연속 고객만족도 1위라는 기록을 세운 넷츠토요타난고쿠(토요타 자동차 딜러)의 비밀을 기록한 책. 누구나 당연히 회사의 목적은 이익의 실현이라 생각하겠지만, 소중한 것을 가장 소중하게 여기는 자세를 가지고 이를 실행에 옮기는 것이 중요하다. 경제로 이어지는 도덕을 추구해야 하고, 목표(이익)보다 목적(사명)을 중요시하며, 아무리 많은 비용이 들어도 채용에 가장 큰 힘을 기울이고 회사를 직원이 성장하는 장으로 만든다는 요코타 창업자의 철학이 잘 드러난 책이다. 이 책은 리더십에 대한 책은 아니다. 그러나 모든 구성원이 행복해하고 승리하는 삶을 만들겠다는 목표로 회사를 운영한다는 것은 결국 매우 바람직한 리더의 자세 아니겠는가?

2. [왜 학교는 질문을 가르치지 않는가] 황주환 지음

지난 봄에 읽은 책에서 정말로 뼈저리게 느낀 점이 있었다. 우리 한국 사회에서 가장 부족한 것은 연대의식이 아닐까? 타인의 어려움에 공감하는 것 역시 소극적인 의미에서 연대의식의 발로라 할 수 있다. 자기 자식이 좋은 학교에 가는 것, 그리고 자기가 소유한 부동산 가격이 오르는 것 말고 과연 한국의 평균적인 시민이 최근 들어서 정의 실현과 공동의 이익을 위해 한 목소리를 내 본 적이 있는가? 광우병 쇠고기 수입 문제나 세월호 사건 등 극히 예외적인 사례가 있지만 말이다. 학교는 더 이상 순수하고 이상적인 집단이 아니며, 우리 사회가 갖고 있는 모든 문제들이 고스란히 녹아있다. 왜 우리는 비판하지 않고, 질문도 하지 않는가? 시골 교사가 써 내려간 사색과 질문들을 정말 가슴 아프게 읽었다.

천국과 지옥을 오가게 했던 Scalar-List-Utils

문제의 발단이 된 오전 포스팅: Genomics 시대에 phylogenetic tree 그리기

윗 글의 마지막 부분에 소개한 Roary를 CentOS 6.8에 설치하는데 문제가 있어서 사무용 컴퓨터(윈도우 7)에 VirtualBox로 우분투 16.04를 설치하고 여기에 Roary를 깔아서 sample data를 성공적으로 분석하였다. 'fast and dirty' FastTree는 메모리 부족으로 돌아가지를 않아서 CentOS 쪽으로 core gene alignment를 보내서 계통수를 그린 후 다시 우분투쪽으로 보내서 그림을 마무리하였다.


CentOS 쪽 서버에서 linuxbrew와 perlbrew를 만지작거리다보니 Perl 작동이 뭔가 심상치않음을 느꼈다.


$ perldoc Bio::Seq
Can't load '/usr/lib64/perl5/auto/List/Util/Util.so' for module List::Util: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/lib64/perl5/auto/List/Util/Util.so) at /usr/lib64/perl5/XSLoader.pm line 70.
 at /usr/lib64/perl5/List/Util.pm line 23.
Compilation failed in require at /usr/lib64/perl5/Scalar/Util.pm line 23.
Compilation failed in require at /usr/local/share/perl5/File/Temp.pm line 18.
BEGIN failed--compilation aborted at /usr/local/share/perl5/File/Temp.pm line 18.
Compilation failed in require at /usr/share/perl5/Pod/Perldoc.pm line 1548.


# perl -MCPAN (원래 -e shell까지 붙여야 정상이다)
Attempt to reload Scalar/Util.pm aborted.
Compilation failed in require at /usr/lib64/perl5/Safe.pm line 4.
BEGIN failed--compilation aborted at /usr/lib64/perl5/Safe.pm line 4.
Compilation failed in require at /usr/local/share/perl5/CPAN.pm line 56.
BEGIN failed--compilation aborted at /usr/local/share/perl5/CPAN.pm line 56.
Compilation failed in require.
BEGIN failed--compilation aborted.

갑자기 웬 GLIBC_2.14 에러가 나는 것일까? /usr/lib64/perl5/auto/List/Util/Util.so 라이브러리의 날짜를 살펴보니 바로 오늘 낮이다. 하반부 에러에서 보이는 Safe.pm 모듈의 네번째 줄에서도 use Scalar::Util이 선언되었다. 아마도 오늘 linuxbrew를 시험삼아 설치하다가 설정이 틀어진 모양이다. 이를 어떻게 하나... Perl을 다시 설치하기도 이상하고, OS를 새로 업그레이드하는 것도 엄두가 안나고...

눈 앞이 캄캄해졌다. 이를 어쩐다. 생각을 해 보자, 생각을... 혹시 List::Utils만 새로 설치하면 되지 않을까? 내 컴퓨터에서는 어차피 GLIBC_2.14를 사용하도록 컴파일이 되지 않으니까 말이다. CPAN에서 Scalar-List-Utils 1.45를 소스로 받아다가 빌드하여고 인스톨하였다. 설치 과정 중에 아무런 문제가 발생하지 않았고, 설치 후에는 Perl 동작도 정상 상태로 되돌아왔다. 

휴! 가슴을 쓸어내린다.

그러면 CentOS에서 Roary 설치 작업을 마무리해 보도록 하자. brew install로 설치하면 에러가 발생하던 blast+ 2.4.0은 rpm 패키지를 직접 받아서 실로 오랜만에 사용하는 rpm -Uvh 명령으로 설치해 버렸다. 항상 yum만 사용하다 보니 rpm을 명령행에서 직접 실행하는 것도 매우 새롭다.

웹사이트에서는 다음 명령으로 Roary 설치를 마치도록 되어 있었다.

sudo cpanm -f Bio::Roary

sudo를 하지 않고 직접 수퍼 유저로 전환한 뒤 .linuxbrew/bin/cpanm -f Bio::Roary를 실행하였다. 외견상으로는 아무런 문제 없이 설치가 끝났다. 자, 그런데 roary 프로그램은 어디로 갔나? 우분투에 설치했을 때에는 /usr/bin/roary로 복사가 되었다. CentOS에서는 어디로 갔을까? root의 .cpanm/build.log까지 뒤져서 겨우 /usr/local/bin/roary로 다른 스크립트와 같이 복사가 되었음을 알아내었다. 

perl -MCAPN -e shell 또는 cpan 유틸리티가 있음에도 불구하고 cpanm을 따로 쓰는 이유가 뭔지를 잘 모르겠다. 

Genomics 시대에 phylogenetic tree 그리기

Next-generation sequencing 시대가 되면서 미생물 연구자들도 큰 수혜를 입게 되었다. 유전체 서열 정보를 이용한 상세하고 정확한 phylogenetic tree를 그리는 것이 그 중 하나다. 나는 원래 phylogenetic analysis에 대해서는 제대로 배운 바가 없다. 생물정보학에서 매우 중요하게 다루는 주제인 것은 부정할 수 없는 현실이니 늦었다 생각할 때가 가장 빠른 때라 생각하고 스스로 공부를 해 나가야 하지 않겠는가?

계통수를 그린다는 것은 여러 phylogenetic level에서 가능한 것이다. Bacillus cereus group(대표적인 구성원으로는 B. cereus, B. thuringiensis and B. anthracis) 처럼 최소한 수십 종의 세균이 서로 제대로 구별이 되지 않는 사례를 생각해 보자. 아래의 논문에서는 whole-genome sequence-based BLAST distance phylogeny(GBDP), 16S rRNA gene analysis 및 새로운 MLSA(논문에서는 a novel variant of multi-locus sequencing analysis, nMLSA라고 부름)을 사용, 224개 스트레인의 유전체 서열을 분석하여 이들이 30개의 클러스터로 분류되며 이 중에서 11개는 알려진 종이지만 일부분은 서로 겹치는 것을 보고하였다.

Genomic insights into the taxonomic status of the Bacillus cereus group. SCIENTIFIC REPORTS | 5:14082 | DOI: 10.1038/srep14082 (PubMed) ... 2015년

이 논문에서는 pXOn 플라스미드와 cry 유전자와 같이 B. cereus 그룹 연구에서 중요한 주제를 역시 다루고 있지만 오늘의 블로그 포스팅에서는 생략하도록 하자. MLSA에는 꼭 이 유전자 세트를 써야 한다고 정해진 것은 없다. Prokaryotic taxonomy에 입각한 MLSA에 관한 다음의 최신 리뷰를 보면 공부가 될 것이다.

Multilocus sequence analysis (MLSA) in prokaryotic taxonomy. Systematic and Applied Microbiology 38(4) 237-45, 2015. (Science Direct)

위에서 언급한 Bacillus cereus group 논문에서는 미생물의 생존에 필수적인 것으로 알려진 최소 유전자 세트(233개의 단일 카피 유전자, 근거 논문은 Determination of the core of a minimal bacterial gene set. Microbiol Mol Biol Rev 68, 518–537 (2004))에서 해상도가 좋은 것으로 생각되는 20개 유전자를 골랐다고 한다. 계통수의 시각화에는 iTOL(interactive tree of life) 웹 서버가 사용되었다.

Intraspecies analysis

동일 종 내에서 서로 다른 스트레인들이 어떻게 진화해 나가는지를 살펴볼 세밀한 계통수를 원한다면 이상의 방법과는 다른 전략을 구사해야 한다. 내가 어제부터 집중적으로 들여다보기 시작한 것도 바로 이 분야이다. 종 내의 비교 분석이라면 SNP을 추출하여 사용하는 것이 가장 바람직할 것이다. 가장 간단하게는 하나의 reference genome을 선정하여 다른 비교 대상으로부터 생산된 short read를 여기에 매핑한 뒤 SNP을 추출하여 계통수를 그리는 것이다. 이를 reference-mapping-based phylogeny reconstruction이라고 부르자. REALPHY(Mol. Biol. Evol. 31(5):1077–1088 doi:10.1093/molbev/msu088 2014년)는 하나의 reference를 설정함으로 인하여 생기는 오류를 감안한 분석 도구이다. 매우 감사하게도, reference와 비교 샘플(genome fragments or sequence reads)를 업로드하여 트리까지 그려주는 웹 서버를 공개하였다.

두번째로 살펴본 논문은 PhyME에 관한 것이다(bioRxiv 2015). 이 프로그램은 read, draft 혹은 complete genome sequence를 입력으로 하여 core genome alignment를 수행하고, SNP를 동정한 뒤 계통수를 작성하고 진화 분석을 실시하는 도구이다. REALPHY나 PhyME 모두 whole-genome SNP를 이용한 계통수 작성 도구라고 보면 된다. PhyME를 사용하기 위해 필요한 외부 프로그램이 꽤 있지만 INSTALL.sh 설치 스크립트를 실행하면 알아서 다운로드하여 하위 디렉토리에 깔아준다. 사전에 필요한 프로그램 설치가 늘 나를 괴롭히는데, metAMOS에서 이미 충분히 경험하였다.

PhyME 패키지에 포함된 샘플 데이터셋을 분석해 보았다. phame.ctl 파일을 편집하여 환경 설정을 하게 되어있다. 레퍼런스 디렉토리에는 총 9개의 에볼라 바이러스 유전체(complete 상태이며 각 19kb)가 들어있는데 이 중에서 annotation(GFF3)을 동반한 KJ660347이 reference로 지정되었다. 비교 샘플은 complete sequence와 contig가 섞인 상태이다. 기본 설정으로는 FastTree를 이용하여 계통수를 그리게 되는데, RAxML도 선택 가능하다. 트리는 whole genome SNP 및 CDS SNP x 2(unrooted & rooted)의 총 4개가 만들어진다. 여기에서 알 수 있듯이 coding 영역에 발생한 SNP를 동정하려면 reference genome sequence와 더불어 GFF3 file이 필요한 것이다.

트리 파일은 newick 포맷이라서 여러가지의 시각화 도구를 이용하여 그림을 그리면 된다. 간단하게 웹 브라우저에서 트리 그림을 볼 수 있는 treeview에 파일 내용을 copy & paste를 해 보았다. 

마지막으로 살펴본 논문은 Roary에 관한 것이다(Bioinformatics, 31(22), 2015, 3691–3693). 이 프로그램은 원래 SNP 분석이 아니라 미생물의 pan genome analysis를 위한 것이다. 즉, 여러 종류의 미생물 유전체를 비교하여 공통적으로 존재하는 유전자를 찾아내는 것이 주된 목적이다. 그렇지만 core gene alignment 파일이 만들어지기 때문에 이를 활용하여 여러가지 다른 분석을 할 수가 있다. 막상 Roary를 설치하려고 보니 Fedora나 CetOS에서는 linuxbrew라는 매우 생소한 패키지 매니저를 사용하도록 되어있다. 그러나 매우 불행하게도 linuxbrew를 이용하여 NCBI blast+를 빌드하다가 에러가 발생하고 말았다. linuxbrew는 루트 권한 없이도 프로그램 환경을 구축해주는 아주 편리한 도구이지만, 이미 깔려 있는 라이브러리와 충돌하는 문제가 발생하는 것으로 보인다. 그래서 임시방편으로 사무용 컴퓨터(윈도 7)에 VirtualBox를 설치하여 우분투 16.04 환경을 구축한 뒤, sudo apt-get install roary 명령어 한 방으로 설치를 모두 끝냈다. 유전체 주석화를 위하여 필수적인 도구인 prokka는 여기를 참조하여 설치하였다. 주로 CentOS에서 작업을 하고는 있으나 '신선하게' Ubuntu를 설치한 시스템이 결국은 필요하다는 생각이 점점 엄습해 온다!

Roary pan genome analysis tutorial은 여기에 있다. 내가 특별히 관심을 갖는 결과물은 각 genome이 공통적으로 가지는 유전자의 여부를 매트릭스 형태로 표현한 gene_presence_absence.csv 파일이다. 이를 core gene alignment 파일과 같이 사용하여 다음과 같은 pan genome matrix 그림을 그릴 수 있다. 이 그림의 작성법은 tutorial에는 없고 여기의 Visualizing Results 항목을 참조해야 한다. Roary 실행에서 tree file이 기본적으로 주어지지는 않으므로, core gene alignment 파일을 FastTree에 투입하여 만들어야 한다.

그림 출처: https://github.com/microgenomics/tutorials/blob/master/pangenome.md

오늘 소개한 것들은 매우 가까운 미생물 유전체들의 비교 분석에 쓰이는 도구들의 일부에 불과하다. 그 배경을 이루는 이론적 지식을 습득해 나가는 것은 앞으로의 숙제가 되겠다. 소프트웨어 도구를 찾는 과정에서 독일 하이델베르크에 위치한 Exelixis 연구실을 알게 된 것도 예상하지 못했던 성과 중 하나이다. "Our Mission - Enable Research in Evolutionary Biology" 멋있지 않은가?

2016년 8월 27일 토요일

SyntaxHighligher test 두번째

이번에는 Perl 코드에 대해서도 제대로 하이라이트가 되는지 살펴보자.

#!/usr/local/bin/perl
 
$name = "Ali";
$age = 10;

$status = ($age > 60 )? "A senior citizen" : "Not a senior citizen";

print "$name is  - $status\n";

잘 된다! 예전에는 텍스트(특히 코드)를 있는 그대로 보이게 하려고 노력을 별로 기울이지 않았다. 그러다보니 저장한 후에 열어보면 의도한 대로 되지 않은 경우가 많았다. 이제는 SyntaxHighlighter의 도입으로 좀 더 세심한 글 작성이 가능할 것이다.

처음에 참조한 사이트의 설명 대로 한번에 성공하지는 못했다. 구글 블로거의 템플릿(html)을 열어서 필요한 코드를 삽입하였더니 script 태그가 닫혀있지 않다는 오류 메시지가 나와서 이를 일일이 넣어주고 Bash와 Perl을 위한 브러쉬를 설정해 주니 비로소 제대로 작동하게 되었다.

이 모두가 지난 3일 동안 참석했던 KOBIC 차세대생명정보학 교육의 부작용이다! 괜히 일 만들어서 도전하기...

SyntaxHighlighter test

package tutorial;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport {
  private String name;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String execute() {
    name = "Hello, " + name + "!"; 
    return SUCCESS;
  }
}
참조 사이트(예제): http://gommoo.blogspot.kr/2012/09/blogspot-syntaxhighlighter.html

단, 모바일 기기에서는 제대로 표현되지 않는다.

2016년 8월 26일 금요일

Jupyter로 더듬더듬 플롯을 그려보다


어제의 교육에서는 '내가 이걸 과연 해야 되는가?'하는 혼란스런 생각만 머릿속에 가득했었다. 그런데 오늘 데이터를 이용하여 몇 가지 간단한 플롯을 그려 보면서 약간 생각이 긍정적으로 바뀌었다. 내가 가장 즐겨쓰는 gnuplot으로 multiplot 하나를 그리려면 마진을 조정하는 것부터 시작하여 골치아픈 것이 한두가지가 아니다. R 스타일의 데이터 구조 다루기를 다시 한번 공부할 필요는 있지만 jupyter에서 matplotlib과 pandas를 이용하면 정말 편하게 데이터의 시각화가 가능함을 배웠다. 

파이썬으로 짜여진 수많은 응용 프로그램 중에서 그래프를 출력하는 것은 대부분 matplotlib을 사용한다. R이라면 ggplot2가 있다. 짧은 3일 동안의 교육이지만 다시 직장으로 돌아가서 복습해야 할 것들의 목록이 하나 가득 만들어지고 있다. R을 다시 들여다보는 것에서부터 시작하자. 그리고 텍스트 파일의 입력 방식에서 Perl과 python이 어떻게 다른지를 정리하고, 이를 바탕으로 실무 차원에서의 응용을 위해 노력해 보자.

Barbara J. Bachmann을 추모하며

대장균의 오래된 역사를 뒤져보아야 하는 논문을 쓰다가 그녀의 이름을 알게 되었다. 'wild-type' E. coli K-12 스트레인이 숱한 돌연변이 유발과 선별 과정을 거쳐 어떻게 현대의 방대한 계보를 이루게 되었는지를 기술한 족보에 해당하는 1972년 Microbiological Reviews 논문이 내가 처음으로 접한 그녀의 논문이다.  1996년 단행본으로 나온 Escherichia coli and Salmonella: cellular and molecular biology에 그 후속판이 실린다. 두 저작물 사이에도 대장균의 계보에 대한 논문을 발표했는지는 아직 찾아보지 못하였다.

Bachmann은 1958-64년 사이에 대학에서 미생물학을 강의한 바 있으며, 1968년 예일대학으로 돌아가서 강의를 계속하면서 E. coli Genetics Stock Center의 소장으로 재직하면서 보유 균주 스톡의 규모를 크게 늘리기도 하였으며, 1996년 은퇴하여 1999년에 작고하였다. 분자생물학 실험의 바이블인 Molecular cloning 1판 부록에 실린 대장균 실험 균주 목록을 보면 Bachmann과의 personal communication을 근거로 한 것이 많다. 그만큼 대장균의 역사에 대해서 너무나 잘 알고 있는 대가였기 때문이 아닐까? 그녀의 연구 업적 중에서 1983년과 1991년에 출판된 대장균의 complete genetic map은 당시 가장 많이 인용되는 논문이었다고 한다. 이상의 내용은 1999년 3월 예일대학교 부고 기사에서 정리하였다. 본격적인 유전체학 시대가 도래하기 직전의 세대에서 큰 역할을 하신 분이라고 할 수 있겠다. 공교롭게도 이 부고 기사는 그녀의 현황이 궁금하여 수일 전 웹 검색을 하다가 우연히 발견한 것이다.

1991년도에 발표된 Bachmann의 논문 "Linkage map of Escherichia coli, edition 8(원문)"을 살펴보았다. Next-Generation Sequencing에 의해 산더미같은 데이터가 쏟아져나오는 지금의 현실과 비교한다면 대단히 소박하게 표현된 결과물이라 할 수도 있다. 하지만 요즘 우리는 유전체 해독과 분석에 과연 이만한 정성을 들이고 있는가? 1222개에 이르는 참고문헌 목록은 저자가 얼마나 오랫동안 정성을 들여서 평생 업적으로서 이 자료들을 다듬어 왔는지 짐작하게 해 준다.


1990년 무렵의 Bachmann 여사 모습이다(출처). 손으로 기록한 노트도 볼 수 있다.

다음에 기회가 된다면 역시 대장균 유전체 과학에서 큰 족적을 남김 Monica Riley에 대한 글을 써 보려 한다.

2016년 8월 25일 목요일

Anaconda와 Jupyter

파이썬 교육 2일차의 혼동스런 아침을 맞는다. 수일 동안 아침 잠을 설쳤더니 어젯밤 숙소에서는 도저히 제대로 된 복습을 하지 못하였다. 오늘은 아나콘다와 주피(파이?)터라는 생소한 시스템을 처음 접한다.

미생물 유전체와 관련된 파이썬 스크립트를 설치하고 필요한 패키지들을 설치하여 사용하는 정도의 매우 초보적인 유저 수준을 이제 벗어날 수 있을까? 아직까지는 Perl의 자유로움(또는 난해함?)을 좀 더 만끽하고 싶지만, 이제는 바이오인포매틱스 = 파이썬이라는 등식이 자연스럽게 받아들여지고 있으니 대세를 거스를 수는 없는 노릇이다. 비교<언어학>적 입장에서 두 스크립트 언어를 다룬다면 생소한 파이썬 문법과 활용사례를 익히는데 도움이 되리라 믿는다.

위키피디아에서 아나콘다가 무엇인지 찾아보았다.

Anaconda (python distribution) 
Anaconda is a freemium open source distribution of the Python and R programming languages for large-scale data processing, predictive analytics, and scientific computing, that aims to simplify package management and deployment. Its package management system is conda.

아나콘다는 파이썬 배포판의 일종이라는 뜻일 것이다. 그렇다면 파이썬 공식 사이트에서 배포하는 것(링크)와는 별도의 것으로 생각된다.

Jupyter는 무엇인가? http://jupyter.org 사이트의 첫 페이지에 있는 설명을 가져와 본다.

The Jupyter Notebook is a web application that allows you to create and share documents that contain live code, equations, visualizations and explanatory text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, machine learning and much more.

Jupyter는 커맨드 라인의 개발 환경을 로컬 컴퓨터에서 돌아가는 웹 서버 환경에 올려서 작접 작업을 합과 동시에 코드와 실행결과 및 설명 등을 공유할 수 있는 환경이라고 생각된다. 데이터 과학자의 인생이 이것을 배우게 됨으로서 갑자기 달라진다고 하니 약간의 과장은 포함된 것이겠지만 공부를 할 가치는 있을 것이다. GitHub는 (내가 알기로는) 버전 관리와 배포를 위한 것이라면, Jupyter에서는 live code를 포함한다 하니 아마도 웹 환경에서 돌아가는 코드를 직접 볼 수 있게 만든 것으로 생각된다.

파일 입출력도 제대로 못해서 아직 허덕이는 중에 배울 것이 너무나 많다. 쉬는 시간을 이용하여 multiple fasta를 읽어들이는 연습문제를 풀어야 한다. Perl의 Bio::SeqIO에 해당하는 물건이 분명히 파이썬에도 있겠지만, 교육 목적을 달성하기 위해서는 직접 손으로 뭔가를 만들어내야만 한다!

이틀째 교육을 마치고...

Jupyter와 pandas를 이용하여 자료를 분석하는 교육을 받았다. Jupyter는 매우 생소하였고, pandas는 그나마 단편적으로 알고있던 R에 대한 지식까지도 뒤죽박죽이 되게 만들었다. 준비가 충분하지 않았던 내 잘못이 크겠지만 말이다. 어디까지를 공부해서 내 것으로 만들어야 하는지 더욱 자신이 없어졌다. 일단은 R을 다시 공부해야겠다는 생각을 갖게 되었다.

2016년 8월 15일 월요일

펠리칸 "트위스트" 만년필

저가 만년필이 또 하나 늘었다. 이번에는 Pelican의 Twist. 한달 남짓의 기간 동안 자꾸 저가 만년필이 늘어가게 된 연유에 대해서 정리를 해 보겠다.

먼저 다음의 사진은 내가 갖고 있는 가장 '비싼' 만년필인 워터맨 필레아(Phileas)이다. 내가 알기로는 이미 단종이 되었으며 시중에서는 현재 5~6만원 선에 팔리고 있다. 사용한지는 약 1년 정도. 신품을 사거나 구입한 것은 아니고, 작년 추석 무렵에 형이 쓰지 않는다고 내게 준 것이다. 지금까지 사용한 만년필 중에서 외관, 쥐는 느낌, 필기감 모두 가장 우수하다. 잉크가 마른 상태로 있다가 내가 다시 사용하게 되면서 익숙하게 되는데 약간 시간이 걸렸지만 말이다. 잘 사용해 오다가 최근 잉크가 줄줄 흐르는 현상이 발생하였다. 고장이 난 것인지, 카트리지를 꽉 꽂지 않아서인지는 아직 정확히 판별하기 어렵다. 필레아의 닙은 아직 국내에서 구입 가능하므로, 최악의 경우에는 교체를 하면 된다.


필레아의 특징(불편한 점?) 중 하나는 전용 카트리지가 아니면 뒷뚜껑이 닫히지 않는다는 것이다. 카트리지 입구쪽 구멍은 소위 국제 표준 규격을 준수하지만, 배럴 내부에 파이프 모양의 두꺼운 금속 부속이 끼워져 있어서 일반 카트리지가 들어가질 못한다. 다음 그림을 보라. 국제 표준 카트리지는 딱 저기까지만 들어간다. 구글을 검색해 보면 이 문제에 대한 질문과 답이 꽤 보인다. 물론 전부 외국 사이트이다. 워터맨 카트리지는 가격도 싸지 않다. 6개 들이 한 상자에 6~7,000원 꼴이다.



어쨌든 나는 필레아의 잉크 흐름에 문제가 있다 생각하고 싸구려 만년필을 하나 둘 사 모으기 시작하였다. 갖고 있던 파커 카트리지를 소모하겠다는 생각에 먼저 파랑색 벡터 스탠다드(아래 사진의 가운데 것)를 구입했는데, 필기감은 아주 좋으나 쥐는 느낌이 영 나쁘다. 다음으로는 쉐퍼의 VFM(루비색, 아래 사진의 맨 아래 것). 이것은 카트리지 하나를 다 쓰도록 '헛발질 증세', 즉 잉크가 종종 끊기는 문제를 아직 극복하지 못하였다. 아마도 저가 닙이 갖고 있는 근본적인 문제가 아닐까 한다. 이상의 만년필 두 개는 모두 13,000원 내외의 가격에 구입하였다.


어제 서울 나들이를 갔다가 잠실 롯데월드몰 반디앤루니스에서 9,900원에 세일 중이던 펠리칸의 트위스트를 구입해 보았다. 이런 물건이 시중에 있다는 것은 익히 알고 있었지만 '이건 모양이 뭐 이래... 초등생 필기용인가'하는 생각에 전혀 눈길을 주지 않았다가 1만원이 안되는 것을 알고 구입해 본 것이다. 뒤틀린 삼각기둥 모양으로 손가락 닿는 부분이 성형되어 있어서 바르게 펜을 잡는데 도움을 준다. 그러나 왼손잡이에게는 잘 맞지 않는다(왼손잡이인 아들의 평). 펠리칸 홈페이지에서는 10대를 위한 제품의 하나로 소개된 되어 있으니 40대 후반을 향해 달려가는 나에게 너무 튀는 디자인인 것은 맞다. 다이어리 표지나 주머니에 꽂을 클립도 없고, 너무 두껍다. 늘 갖고 다니면서 일상 필기용으로 쓰기에는 부적합하겠지만, 책상 위에 놓아두고 가끔 메모를 할 목적으로 사용한다면 나쁘지는 않을 것이라 생각하였다. 놀라운 것은 펠리칸 웹사이트에 교사와 부모를 위한 정보 페이지가 있었다는 것이다. 단순히 제품의 기능을 알리기 위한 것이 아니라 교육과 필기구에 관한 생활정보(얼룩을 지우는 방법 등)까지 수록함으로써 이 회사가 교육과 문화를 위해 사회에 기여한다는 느낌을 받았다.

워터맨 필레아의 카트리지 규격에 대한 글을 읽다가 펠리칸의 long cartridge가 맞는다는 글을 얼핏 보았다. 어제 반디앤루니스에서 보았던 카트리지는 5개 들이 한 박스의 가격이 겨우 3,000원이었다. 온라인 상점에서도 비슷한 가격에 팔린다. 자, 그러면 내 워터맨 필레아에 잉크 흐름 문제가 없다는 가정 하에, 펠리칸의 긴 카트리지를 대신 끼워서 쓰면 되지 않을까? 어차피 책상 서랍 속에는 자바펜 만년필을 쓰던 시절 구입한 표준 카트리지가 많이 있으니 이것을 트위스트에 끼워서 쓰면 된다.

펠리칸 카트리지를 워터맨 필레아의 배럴에 넣어 보았다. 그렇지! 쏙 들어간다.



좋아하는 물건을 하나 둘 사 모으는 것은 매우 즐거운 일이지만, 이들을 항상 사용 가능한 상태로 유지하는 것은 쉽지 않다. 특히 만년필은 매일 조금씩이라도 쓰지 않으면 곧 잉크가 말라버리므로 아예 잉크를 빼서 세척한 상태로 그저 눈요기용으로 쓸 것이 아니라면 세심한 관리가 필요하다. 실제 만년필 매니아들은 몇 자루나 상시 사용 가능한 상태로 관리를 할까? 필기 용도에 맞추어 각기 잉크 색을 달리해서 유지한다면 너댓자루도 가능하겠지만, 나처럼 거의 흑색으로만 쓰는 사람은 그것도 쉽지가 않다. 동시 관리 가능한 최대 수량은 세 자루라고 생각한다.

2016년 8월 7일 일요일

Korg X2 floppy drive solution

90년대에 생산된 신시사이저(주: 국립국어원 표준 외래어 표기법을 따랐다)에는 5핀짜리 MIDI 단자 외에도 데이터 입출력 장치로서 플로피 디스크 드라이브를 갖고 있는 것이 많았다. 내가 갖고 있는 Korg X2 Music Workstation은 2HD도 아니고 2DD 플로피 디스크를 꽂을 수 있는 드라이브가 장착되어 있다. 이 드라이브는 벨트로 구동되는 독특한 방식인데다가 26핀 FDD/FFC flat flex ribbon cable을 사용하도록 되어있어서 역시 일반적인 플로피 디스크 드라이브용 34핀 케이블과 호환되지 않는다. 노후한 장비에서 가장 흔하게 나타나는 증세는 드라이브의 벨트 구동용 벨트가 느슨해져서 더 이상 디스크를 통한 데이터 저장 및 로딩을 하지 못하게 되는 것이다.

이런 상태에서는 어떻게 해야 되는가? MIDI 케이블을 통해서 SysEx 신호 형태로 전송하는 방법은 일단 논외로 하자. 가장 간단한 방법은 드라이브 구동용 벨트를 교체하는 것이다. BustedGear라는 곳에서 교체용 벨트 및 다른 부속들을 아직도 판매한다. SYNTAUR에서도 드라이브 벨트를 비롯한 부속들을 팔고 있다.

Floppy Drive Solutions에서는 플로피 디스크 드라이브를 판매한다. 물론 X2 발매 당시의 순정 드라이브는 아니고, 벨트로 구동하지 않는 신뢰도가 높은 제품이다.

반면 ebay의 wasatchbay라는 판매자는 과거 Korg 제품의 서비스센터였다는데, 교체 가능한 드라이브를 판매한다(링크).

34핀 케이블을 사용하는 보편적인 플로피 디스크 드라이브에 Korg X3용의 flat flex cable을 꽂을 수 있는 어댑터를 파는 곳도 있다(링크). 그러나 이 사이트에서 주력으로 내세우는 제품은 FlexiDriver라는 에뮬레이터이다. 자세한 설명은 이 포스팅의 후반부를 참조하라.

여기까지는 기존의 플로피 디스크를 그대로 사용함을 전제로 한다. 이렇게 플로피 디스크에 저장한 파일들을 최신 PC에서 열어보려면 어떻게 하면 될까? USB 단자가 달린 USB floppy drive를 쓰면 된다. 이것은 바로 다음에 언급할 플로피 드라이브 에뮬레이터와는 다르다. USB floppy drive는 마치 외장 ODD처럼 생긴 것으로, 플로피 드라이브를 꽂아서 최신 PC에서 파일을 읽고 쓰기 위한 장비이고,  floppy drive emulator는 구형 장비의 FDD 베이에 꽂아서 사용하되 저장 매체는 최신의 USB drive를 사용하는 장비이다.

요즘은 USB 스틱을 저장 매체로 이용하는 전자악기용 플로피 드라이브 에뮬레이터가 나오기 시작하였다. 범용 드라이브를 쓰던 다른 악기용 에뮬레이터는 비교적 가격이 싼 편이지만, Korg X2/X3에는 워낙 흔치 않은 드라이브가 쓰였기에 에뮬레이터도 그 수요가 적어서인지 값이 꽤 비싸다. 그 중의 하나인 Nalbantov USB floppy disk drive emulator가 ebay에서 팔린다.

만약 플로피 디스크 드라이브를 전혀 쓰지 않겠다고 한다면, 컴퓨터를 이용하여 설정 파일(SysEx)을 X2쪽으로 전송하면 음색을 원래대로 되돌리는 것이 가능하다. 문제는 기본 음색 설정만을 SysEx로 덤프해 두었지만 나머지 유용한 음색 디스켓의 설정은 그렇게 하지를 못했다. 윈도우 98 초기버전 이 돌아가는 컴퓨터와 MIDI 인터페이스가 있다면 xedit라는 유용한 도구를 쓸 수 있었다. 이 프로그램은 현재 무료로 공개되었다.

그럴 가능성은 앞으로도 많지 않겠지만, 만약 내가 X2에 직접 시퀀싱 작업을 했다고 가정하자. 이를 PC로 보내서 다른 시퀀서나 DAW 프로그램으로 처리하고 싶다고 하자. MIDI를 통해서 X2측의 모든 데이터를 SysEx 파일 하나로 덤프하는 것과 이를 다시 X2로 전송하는 것은 아무런 문제가 없지만, 덤프 과정에서 MIDI 시퀀스 정보도 포함되는지, 만일 그러하다면 덤프한 SysEx 파일에서 MIDI 파일을 뽑아내는 것이 가능한지는 아직 잘 모르겠다.




2016년 8월 5일 금요일

Alesis NanoPiano

결국 취미는 돌고 돌아 제자리로 왔다. 약 3년 가까운 시간 동안 음악의 감상 측면에 필요한 하드웨어와 소프트웨어(음원)을 갖추고 만드느라 즐거운 시간을 보냈다. 깊이 들어가자면 오디오 취미의 세계에는 끝이 없겠으나, 이제는 뭘 더 만들어도 둘 자리가 없다는 생각에 약간 옆길로 새는 것을 고민하기 시작하였다. 바로 과거에 한참 빠져들었던 악기(synthesizer & guitar)에 관심을 가져 보자는 것이다.


이것은 알레시스의 64 voice stereo piano module인 NanoPiano이다. 얼마만에 꺼내어 MIDI 파일을 재생해 보는 것인가? 윈도우 7 환경에서 HSR 2.0 미디 인터페이스를 연결하였고, 컴퓨터에서는 vanBasco's Karaoke Player를 실행하여 피아노 곡을 연주하는 모습이다. 2002년쯤에 미디앤사운드에서 20여만원을 주고 구입했었다.

건반류를 구입하는데 과거에 꽤 돈을 들였었다. 접촉 불량 상태가 되어 창고에 처박힌 Fatar SL-990 마스터 건반, 액정 백라이트가 수명을 다하고 플로피 디스크 드라이브가 작동하지 않는 Korg X2, 두 대의 일렉기타... 그 사이에 몇 개의 49키 마스터 건반과 저가 음원 모듈 3개(소리샘, 야마하 MU50, 야마하 TG300)가 내 손을 거쳐 다시 팔려나갔다. 이에 대한 기록은 원래 네이버 블로그에 빼곡히 기록을 해 두었었으나, 네이버를 탈퇴하면서 그 정보들은 컴퓨터 안에 PDF 파일로 남아있을 뿐이다.

인터넷을 뒤져보니 오래된 전자악기류를 고칠 수 있는 정보는 오히려 더 늘어났다. 예를 들어 플로피 디스크 드라이브가 장착된 구형 장비에 사용할 수 있는 에뮬레이터라는 것이 있다는 것을 발견하고 놀라 자빠지는 줄로만 알았다!

HxC for Korg X3?

요즘은 많은 전자악기가 소프트웨어화되어서 기억에 남는 synthesizer 모델명이 잘 떠오르지 않는다. 어쩌면 내가 관심을 거의 접고 살아서 그런지도 모르겠다. 이런 오래된 기기를 자가수리하기 위한 정보(유튜브 동영상 포함)와 부품이 인터넷에 오히려 더 풍부해진 느낌이다. 좀 더 창의력을 발휘한다면 Arduino를 이용한 장난도 가능하다. 이것으로 30년 정도는 우려먹을 취미 거리는 다 마련된 셈이다.

그렇지도 않다. 아직 사진(기)과 자전거, 그리고 망원경이 남아있구나.

2016년 8월 2일 화요일

라디오나 만들자

여름이 다 가기 전에 심심풀이용 전자제품 장난감을 또 하나 질렀다. 품명은 New DSP & PLL LCD Digital Stero FM Receiver Module with Serial Control이다. 안테나를 연결하고 휴대폰 충전기를 써서 전원을 공급하면 된다. 그림의 출처는 여기(ebay)이다. 사진에서 보이는 두 개의 놉은 회전식 가변저항이 아니라 엔코더이다. 따라서 무한정 돌아간다.


음질 측면에서는 완벽하지 않지만, 라디오(튜너)만큼 단순하고 직접적인 소스가 또 있을까? 사무실에서는 주로 인터넷 라디오 "콩"으로 KBS 제1FM을 듣는데 가끔 소리가 끊길 때가 있다. 아마 네트웍 사정에 따라서 접속 상태가 불량해지는 순간이 있을 것이다. 독립형 튜너와 비교하여 어떤 음질을 들려줄지 매우 기대가 된다. 20달러 정도를 투자하면 리모콘에다가 MP3 디코딩 및 블루투스 수신 기능까지 있는 소출력 앰프 모듈을 사는 것이 가능하다. 그런데 요즘은 주로 스트리밍을 통해서 음악을 듣게되니 USB drive나 microSD 카드와 같은 이동식 매체에 MP3 파일을 담아서 재생하는 일은 거의 없다. 더군다나 재생장치의 표시창에 숫자밖에 나오지 않는다면 선곡을 하기도 정말 힘들지 않은가?

장난감들이 하나 둘 쌓여가니 이를 골고루 활용하려는 노력이 이제 필요한 시점이다. 뭔가 만들고 싶은 욕구, 사소한 사치, 그리고 비용... 균형잡힌 취미활동이 되어야 한다.

2016년 8월 1일 월요일

새 만년필 구입(파커와 쉐퍼의 저가 모델)

작년 추석 이후로 사용한 워터맨 필레아가 망가지면서 잉크가 줄즐 흐르는 상태가 되었다. 새 만년필이 필요하기는 한 상태인데 워낙 파커의 카트리지가 많아서 가장 저가품인 벡터 스탠다드를 인터넷으로 구입하였다. 예전에 벡터 스탠다드 스테인레스 만년필을 잠시 쓴 일이 있었는데 쥐는 느낌이 별로 좋지는 않았다. 이번에는 플라스틱 배럴의 초저가 모델을 구입했는데 역시 손 안에서 자꾸 겉도는 느낌이다. 결국 퇴근길에 인근 삼화문구몰에서 쉐퍼의 최저가 모델인 VFM NT 만년필(F 닙)를 구입하였다. 포장 내부에 들어있는 설명서의 인쇄처는 슬로바키아, 만년필 제조국은 중국이다. 두 자루의 만년필을 같이 놓고 사진을 찍어본다. 사무실 서랍을 뒤지다가 프레피 카트리지를 발견하여 다 쓴 프레피 만년필에 끼워넣는 즐거움을 누렸다.



그런데... 쉐퍼 VFM에는 여분의 카트리지를 배럴에 넣을 수가 없었다. 배럴의 끝부분을 유선형으로 만들다보니 이런 일이 벌어지는 모양이다. 워터맨 필레아 만년필의 경우 국제 표준 카트리지를 끼울 수는 있지만, 배럴 내에 삽입된 링 모양의 부품때문에 배럴을 아예 닫지를 못한다. 전용 카트리지(약간 슬림함)가 아니면 여분은커녕 아예 사용 불가이다.


갖고 있던 카트리지를 종류별로 하나씩 비교해 보자. 맨 위의 것은 왼쪽부터 쉐퍼, 국제 표준(자바펜), 워터맨, 그리고 아래의 긴 것은 파커의 것이다.


엊그제 서울 나들이를 하면서 종로 1가를 지나게 되었다. 종각 바로 곁의 빠이롯트 제품 전시장이 있던 건물은 임대 광고를 붙인 상태였다. 세월의 무상함을 느꼈다.