2015년 7월 27일 월요일

교체 일변도의 사후 서비스는 제품의 완성도가 떨어짐을 고백하는 것인가?

오늘은 파워블로거 리더유님의 글 링크를 하나 인용하면서 시작해 보겠다.

AS에 길들여진 대한민국! 이케아, 애플, 샤오미의 경쟁력은 AS가 아니다!

[사족] 우리가 흔히 쓰는 AS 또는 A/S(=After Service)는 대표적인 콩글리시이다.

작년에 추석 직전에 아들에게 사 준 삼성 센스 노트북 컴퓨터를 최근 쓰는 모습을 통 보질 못하였다. 왜 안쓰냐고 다그쳤더니 윈도우 자동 업데이트를 하다가 먹통이 되어서 그냥 서랍 속에 넣어놓은 것이었다. 아직 보증기간 중이라서 수리 센터에 가 보라고 하였다. HDD에 이상이 있다고 새것으로 교체를 해 주었다고 하였다.

생각해 보니 갤럭시탭, 아내가 쓰던 갤럭시 그랜드 스마트폰 전부 기판을 통째로 교체해 주었었다. 삼성 HDD를 쓰다가 보증기간 내에 문제가 생기면 묻지도, 따지지도 않고 새것으로 1:1 교환을 해 주는 것을 우리나라에만 있는 훌륭한 고객 서비스 정신이라고 생각하던 때가 있었다.

그런데 이건 좀 아니다 싶었다. IT 기기에서 주기판 전체를 갈아버린다는 것은 그만큼 제품의 완성도가 떨어진다는 것을 인정하는 것 아닌가? 십여년 전 회사에 근무할 때 Alpha의 CPU가 주기판에 납땜이 되어있던 서버 보드를 가지고 씨름을 하던 경험까지도 생각이 난다. 제조사인 삼성전자 본사까지 가서 점검을 해 보니 특정 lot의 메모리와 충돌이 난다는 희한한 진단을 받았었다.

오늘의 글은 삼성전자의 제품이 전반적으로 튼튼하지 못함을 이야기하고자 함은 아니다. 예전에는 동네마다 전파사가 있었고, 집에서 사용하는 대부분의 가전제품을 수리하기에 충분한 기술을 갖추고 있었다. 물론 당시의 가전제품은 현재보다 훨씬 간단하였고, 따라서 주요 부품이나 assembly를 그대로 교체하기보다는 어떻게든 수리를 해서 쓰는 것이 옳은 일이었다.

그런데 이제는 전국적인 서비스 체인망이 없는 가전제품은 국내 환경에서 소비자의 선택을 받기가 더욱 어려워지고 말았다. 이러한 현실은 은연중에 '대기업이 역시 최고다'라는 고정관념을 뿌리내리게 하는 것.

간단한 결론을 내려보겠다. 대기업이라면 좀 더 완성도가 높은 제품을 만들어 주시고, 중소기업이라면 연합 서비스 체인망과 같은 현실적인 대책을 만들어서 고장이 나면 못고치니 사지 말아야 되겠다는 때이른 걱정을 하지 않게 하는 것이 좋지 않을까?

2015년 7월 26일 일요일

'예비○○'라는 표현이 불편한 까닭

언어는 사상을 담는 그릇이다. 그 그릇에는 현실 세계가 가장 많이 담겨 있지만, 희망사항이나 불만이 담겨 있기도 하다. 그리고 엄청난 침투력을 발휘한다. 특히 인터넷 시대가 되면서 어법에 맞지 않는 신조어가 너무나 빨리 퍼져나가는 것을 쉽게 목격하게 된다.

오늘 내가 다루고자 하는 주제는 '예비(豫備)○○'라는 표현이다. 이 말은 인터넷 시대가 되기 전부터 쓰여 왔는데, 요즘은 '○○'에 해당하는 낱말의 폭이 점점 넓어지고 있다.

예비 수험생, 예비 신랑·신부, 예비 고3. 예비 엄마·아빠(곧 출산을 앞둔), 예비 대학생...

이러한 용어를 쓰는 우리의 마음가짐은 '○○'를 간절히 기다리면서 준비하는 사람으로서 갖는 조바심을 나타내주고 있다. 그리고 대개 그 '○○'는 열심히 준비하면서 맞아야 하는 가치있는 그 무엇인가가 대부분이다. 그도 그럴 것이 '예비'라는 낱말을 사전에서는 '더 높은 단계로 넘어가거나 정식으로 하기 전에 그 준비로 미리 갖춤'이라는 뜻을 갖고 있기 때문이다. 여기서 또 한가지 짚고 넘어갈 것은 그 '○○'은 거의 100% 달성되는 과정만을 일컫는다. 즉 쉽게 설명하자면 대학 합격증을 받고 입학을 기다리는 사람만이 예비 대학생이 될 수 있다. 수능시험 전의 고3생이나 재수생 신분으로는 언감생심 예비 대학생이라는 말을 쓰지 못한다. 왜냐하면 본인의 노력와 운 여하에 따라서 대학생이 되지 못할 가능성도 있기 때문이다. 즉 (취업 준비생 ≠ 예비 직장인)의 공식이 성립하게 되며, 결국은 '예비'라는 낱말이 내포하는 다양한 뜻의 폭을 지극히 좁혀서 쓰는 것이 된다. '○○'가 곧 될 사람으로서 이미 적법한 자격을 갖춘 자의 자부심을 은연중에 흘리고도 있는 것이다.

인생을 살면서 곧 임박한 무엇인가를 준비한다는 것은 매우 좋은 미덕이다. 비록 그것이 아무도 원하지 않는, 그러나 피해갈 수 없는 것이라 해도 말이다. 그런데 그런 '○○' 앞에는 보통 '예비'가 붙지 않는다. 예비 입대자, 예비 환갑, 예비 이혼부부, 예비 임종자... 이런 말을 한번이라도 들어본 일이 있는가? 찾아보니 예비 입영 장정이나 예비 입대자라는 글이 보이기는 한다. 아, 그러고보니 '예비군'이라는 낱말이 있지만 이 글에서 논하는 그 의미가 예비○○와는 사뭇 다르다. 군대 가기 직전의 사람이라는 뜻은 전혀 아니니까.

'예비'를 붙임으로서 우리의 인생은 한낱 준비과정에 애쓰는 사람으로 환원되고 만다. 현실은 매우 어렵지만 이는 가까운 미래에 '○○'가 됨으로써 다 보상받을 수 있음을 뜻한다. 게다가 이는 마케팅 용어로서 정말 적절하다. '예비 신혼부부를 위한 ~', '예비 중학생을 위한 ~', '예비 수험생을 위한 ~' 등 각종 서비스와 상품이 준비되어 있으니 미리미리 준비하여(즉 구입하여) 대비하고 남보다 한걸음 더 경쟁력을 갖추라는 광고 문구에 아주 적합하다.

'예비'는 현실이란 결국 지나가는 과정으로서 더 나은 미래를 위해 심하게는 희생까지도 할 수 있다는 가치를 은연중에 심어준다. 정말 중요한 것은 현재 내가 얼마나 행복감을 느끼고 있느냐 하는 것이 아닐까? '예비○○'라는 말을 들을 때 과거 스포츠 입국 시대의 기사가 자꾸 떠오른다.

'드디어 태극전사들이 은메달을 확보했습니다!'

준결승을 통과했다는 뜻이다. 결승전에 올라가게 되었으니 1등(금메달), 아니면 최악의 경우 2등이라는 뜻이다. 물론 결승전이 끝나기 전까지는 그것이 금메달인지 은메달인지를 알지 못한다. 그러나 우리의 조바심 정신은 이를 '은메달 확보'라는 희한한 전투적(군사적?) 용어로 바꾸어 놓았다. 심지어 4강에 오른 것에 대해 '동메달 확보'라고 전하는 어이없는 기사도 종종 보인다. 만약 3-4위 모두에게 동메달을 주는  운동 경기가 있다면 이는 내 무식의 소치가 되겠다.

인생을 준비기간만으로 생각한다면 극단적으로 말해서 최종 목표는 '죽음'인가? 죽기 전에 가치있는 정신적 또는 물질적 유산을 많이 남기는 것을 목표라고 볼 수도 있으나, 사실 그것으로는 충분하지 않다. 오늘 하루 하루가 얼마나 나에게 행복감을 주었느냐가 더 중요하다(물론 정의로운 방법으로! 남까지 행복하게 한다면 더욱 좋다). 나는 종종 '프로는 결과로 말한다'라고 이야기한다. 그러나 이것은 나 자신을 단련하기 위한 표어이지 남에게 강요하고 싶은 자세는 아니다.

2015년 7월 25일 토요일

나의 마인드세트는 무엇인가?

'성공의 새로운 심리학'(캐롤 드웩)을 최근 읽고 많은 감명을 받았다. 이 책은 요즘 흔한 자기계발서가 아니라 심리학 실용서로 보는 것이 타당하다. 나는 다음 중 어떤 부류의 사람인가?

고착형 마인드셋


  • 당신의 지능은 매우 근본적인 자질이어서 많이 바꿀 수 없다.
  • 당신은 새로운 것들을 배울 수 있다. 그렇지만 당신의 지적 수준을 진정으로 바꿔놓지는 못한다.
  • 당신은 특정 부류의 사람이다. 그리고 그 부류 자체를 바뀌기 위해 할 수 있는 일은 그렇게 많지 않다.
  • 당신은 일들을 달리 처리할 수 있다. 그렇다고 당신이라는 존재의 중요한 부분이 진정으로 변하지는 않는다.

성장형 마인드셋

  • 당신의 지능이 아무리 높다 하더라도, 당신은 언제나 그 지능을 크게 바꿔놓을 수 있다.
  • 당신은 언제나 지적 수준을 근본적으로 바꿀 수 있다.
  • 어떤 부류의 사람이든 관계없이 당신은 언제든지 성격을 상당 부분 바꿔놓을 수 있다.
  • 당신은 자신의 존재의 기본적인 것까지도 언제나 바꿀 수 있다.

어떠한 마인드셋이 더 바람직하겠는가? 바람직한 성공은 당신이 똑똑하다는 것을 과시(입증?)하는 것인가, 아니면 더 많이 배우고 성장을 했음을 의미하는가? 나는 최근 아무런 댓가 없이 연구원과 학생 2명을 대상으로 미생물 유전체 분석 방법을 교육하기 시작하였다. 내가 가진 지식을 공유하여 그들에게 도움을 주겠다는 거창한 목적이 아니라 교육을 준비하고 실습과 강의를 거치면서 내가 더 배울 것이 많다는 생각이 나를 움직이고 있다.

물론 요즘 문제가 되는 '열정 페이'를 합리화하자는 것은 아니다. 이 교육 자체가 나의 생계 혹은 본업에 지장을 주는 것이 아니며, 이 일에 대한 기획을 하고 실행에 옮기는 주체가 오로지 나 자신이므로 문제가 되지 않는다. 만약 다른 사람을 들쑤셔서 '너에게도 도움이 되는 일이니 스스로 프로그램을 개발해서 신입 직원을 가르쳐라'라고 강요한다면 그건 문제가 된다.

업무와 개인적인 성장 및 보람이라는 것 사이에 경계를 나누는 것은 매우 어려운 일이다. 그러나 매사를 긍정적으로 바라보면서 성장과 기여를 위한 기회로 생각하고 일을 추진한다는 것은 성장형 마인드셋을 가진 사람들에게 관찰되는 태도일 것이다. 회의 주재나 강연 등을 통해서 자기의 능력과 자격을 과시하려 함이 아니라, 오히려 이를 새로운 배움의 기회로 여기는 자세를 갖자는 것이 매우 신선하게 느껴졌다. 최근 읽은 책 중에 가장 풍성한 깨우침을 준 책이다.

하마마츠에 가 보고 싶다

최근 수년 동안 오디오 기기와 음악을 듣는 행위에만 몰두하면서 악기를 연주하는 일에는 많이 소홀해졌다. 집과 사무실에서 자리만 차지하고 있는 기타와 건반에게 늘 미안한 마음을 갖고 있다. 한동안 MIDI나 홈 레코딩 등에 관심을 가지면서 맨날 미디앤사운드 홈페이지를 들락거리고, 싸구려 장비를 중고로 들이거나 처분하기도 했었다. 당시에는 정말 이러한 활동이 나의 중요한 취미가 되어서 가끔씩 곡을 쓰거나 홈 레코딩을 할 수 있을 것으로 기대했었다. 지금 돌이켜보면 어림 반푼어치도 없는 희망이었지만! 내 손을 거쳐갔던 저가 장비들을 나열해 보면,
  • 사운드 블라스터 16 MCD, 웨이브 블라스터 II: 컴퓨터를 이용한 음악으로는 최초의 투자였다. 지금 생각하면 정말 후덜덜한 가격이었다. 지금까지의 음악 경험을 통틀어서 가장 큰 충격을 주었던 고품질의 소리는 바로 웨이브 블라스터 II 도터보드에서 나오는 그것이었다.
  • 옥소리 카드, 소리샘, 야마하 TG-300(리뷰) 등의 음원
  • 48건반 미스터 키보드 2종
  • Tapco Mix60
아직 남아있는 것은 2대의 일렉트릭 기타, 연습용 앰프, Korg AX3G 멀티이펙터, Vox amplug, Hi-Z 기타 인터페이스, Alesis NanoPino, Korg X2 Music Workstation.. 참 많이도 모았다. 아, Fatar 88 weighted 건반도 있지만 금방 고장이 나서 쓰지 못하고 있는 상태이다. 없던 살림에 꽤 큰 가격을 주고 구입했었는데...

요즘은 어떤 건반들이 인기를 끌고 있는지 갑자기 궁금해졌다. 커즈와일, 야마하와 롤랜드의 정보를 찾아보다가 롤랜드사의 본사가 하마마쓰에 있다는 것을 알게 되었다.

하마마쓰! 1990년대 말, 나는 microarrayer와 스캐너의 제작에 몰두하고 있었다. 이것이 후속 연구성과나 사업으로는 전혀 이어지지 않았던 것이 매우 아쉽다. 결국 나는 생물학자였으니까. cDNA microarray의 선구자였던 패트릭 O. 브라운 교수도 이제는 나이가 많이 드셨을 것이다. 그때 구입했던 광전자증배관(photomultiplier tube, PMT)의 제조사 이름이 하마마쓰였다.  

Hamamatsu Photonics 홈페이지 "Photon is our business"

비즈니스 모토가 멋지지 않은가? 

어쨌든 하마마쓰라는 단어를 한동안 잊고 있다가 롤랜드의 본사가 있는 도시라는 것을 발견하고 좀 더 검색을 해 보니 재미난 사이트가 하나 나왔다.


시즈오카현에 위치한, 일본의 거의 중앙에 위치한 곳으로 문화와 역사, 산업의 중심지라고 할만한 곳이다. 스즈키, 야마하, 혼다 등 유명한 메이커가 이곳에서 시작되었으며 악기 생산지로도 유명하다고 한다.

웹 검색을 통해 우연히 알게된 미지의 도시에 가 보고 싶다!

2015년 7월 24일 금요일

NCBI에서 유전체 정보 파일 찾기

염기서열과 annotation을 모두 담고 있는 GenBank 포맷의 파일의 쓰임새는 무궁무진하다. ArtemisEMBOSS 패키지만 있으면 못할 것이 없다. 그러면 NCBI에서 이를 어떻게 다운로드하는 것이 가장 좋은가? 단, 혼동을 피하기 위하여 이 글의 나머지 부분에서 GenBank는 데이터베이스가 아니라 파일의 포맷을 일컫는 것으로 정의하자. 데이터베이스(RefSeq와 대응하는) 명칭으로는 INSDC라는 용어를 쓰도록 하겠다.

보통 유전체 서열 정보를 NCBI에 등록하면 INSDC에 올라간다. 이 중에서 완성도가 높고(미생물의 경우 complete genome) 중요도가 높으면 RefSeq로도 등록이 된다. 이 과정에서 NCBI가 새롭게 주석화를 실시한다. 만약 매우 중요한 모델 생물의 유전체를 다루는 컨소시엄에서 정보를 생산하게 되면 곧바로 RefSeq로 등록되는 영광을 누리게 된다. RefSeq를 구성하는 세 가지 카테고리의 유전체 정보(reference genome, representative genome 및 variant genome)에 대해서는 이전에 작성한 글(원핵생물 유전체에 대한 NCBI의 RefSeq 정책이 어떻게 변해가고 있는가)를 참고하라.

예전에는 RefSeq 자료를 만들 때 INSDC의 유전자 정보를 그대로 이용하되 functional annotation을 새롭게 실시하였다. 이는 유전자 산물 이름(product)을 자체 주석화 파이프라인에 의해서 새롭게 매겨 줌을 의미한다. 그러나 이제는 유전자 예측(gene prediction or functional prediction)도 자동 파이프라인에 의해서 새롭게 실시한다. RefSeq 자료에서 locus tag의 접두사는 INSDC의 것과 동일하게 유지되지만, 숫자 필드의 앞부분에 'RS'가 추가된다. 그리고 이에 해당하는 예전의 locus tag 정보는 old locus tag이라는 qualifier에서 살펴볼 수 있다.

요즘은 다루어야 할 유전체가 워낙 많아서 완성된 유전체 정보를 등록하면서 NCBI의 자동 주석화 파이프라인을 써 달라고 요청하는 경우가 많아졌다. 이렇게 등록된 INSDC와 RefSeq는 내용적으로 사실상 차이가 없다. 실제 사례를 들어보자. 올해 내가 간단한 논문을 쓰면서 등록한 E. coli BL21이 어떻게 되어 있는지를 찾아보겠다(TaKaRa에서 파는 competent cell을 그대로 이용).

http://www.ncbi.nlm.nih.gov/assembly/GCF_000833145.1/

여기에는 INSDC와 RefSeq로 연결되는 링크(웹사이트 및 ftp)가 전부 수록되어 있다.

http://www.ncbi.nlm.nih.gov/nuccore/CP010816.1 (GenBank, INSDC)
http://www.ncbi.nlm.nih.gov/nuccore/NZ_CP010816.1 (RefSeq)

예전에는 RefSeq accession number가 NC_....의 형식이었는데, 이제는 NC_(INSDC accession)으로 바뀐 모양이다.

유전자의 수는 전부 동일하다. RefSeq 자료로 가 보자. locus tag의 숫자 필드는 RS로 시작한다. old locus tag에는 RS라는 문자열만 없을 뿐 숫자 필드는 동일하다.

     gene            190..255
                     /gene="thrL"
                     /locus_tag="SR36_RS00005"
                     /old_locus_tag="SR36_00005"

웹사이트에서 GenBank 포맷 파일을 받는 것이 가능하지만 웹 브라우저로 파일 내용을 로드하다가 먹통이 되는 경우가 종종 있다. 차라리 FTP 링크를 아는 것이 훨씬 자연스럽다.

ftp://ftp.ncbi.nlm.nih.gov/genomes/refseq/bacteria/

여기에 있는 서브디렉토리는 하나의 species에 대해 존재하는 모든 genome을 모아 놓은 것이다. 대장균을 찾아서 들어가보면 각 스트레인에 대한 모든 최신 어셈블리가 다음 위치에 있음을 알 수 있다.


[1] ftp://ftp.ncbi.nlm.nih.gov/genomes/refseq/bacteria/Escherichia_coli/latest_assembly_versions/ 


그런데 별로 친절하지가 않다. 마치 암호와 같은 assembly ID로만 되어있어서 뭐가 어느 스트레인에 대한 것인지 알 수가 없다. 다음 파일을 열어 보아야 뭐가 뭔지 비로소 알 수가 있다. 게다가 압축도 풀어야 한다.

ftp://ftp.ncbi.nlm.nih.gov/genomes/refseq/bacteria/Escherichia_coli/assembly_summary.txt

각 스트레인별로 별도의 폴더가 있으면 후속 작업이 조금 더 편할 것이다. 그렇다면 다음 주소가 훨씬 요긴하게 쓰일 것이다.


[2] ftp://ftp.ncbi.nlm.nih.gov/genomes/Bacteria 내용물은 분명히 RefSeq가 맞다.


자, 그러면 같은 균주의 RefSeq record가 ftp site에 따라 어떻게 다른지 확인해 보자. 추억의 세균, Hahella chejuensis의 정보를 검색해 본다. 먼저 [1]번 체계의 주소를 찾아가 본다. 주소가 너무 길어서 링크를 직접 드러나게 타이핑을 하지는 않겠다.
  • Hahella chejuensis, RefSeq style [1] 링크 GCF_000012985.1_ASM1298v1_genomic.gbff.gz, locus tag에 RS가 붙어있다.
  • Hahella chejuensis, RefSeq style [2] 링크 RS가 붙어있지 않다.
  • Hahella chejuensis, GenBank(INSDC) 링크 (참고용)
종합적으로 판단하건대 stype [2]의 링크가 가장 무난하다. JSpecies 등에서 유전체 정보를 자동으로 받을 때 사용하는 주소도 style [2]인 것으로 안다. 그렇다면 매우 최근에 등록한 BL21 자료가 style [2] 주소에 있는가? 없다. 그러면 도대체 style [2] 주소에 등록되는 영광을 누리는 RefSeq 레코드는 무엇이란 말인가? 좀 오래된 것? 나도 잘 모르겠다 :)





2015년 7월 21일 화요일

익스팬시스에서 구입한 루미아 430


G마켓의 익스팬시스 스토어에서 윈도8.1폰인 루미아 430 듀얼심 제품을 구입하였다. 영문으로 Expansys인데 왜 한글로는 '익스펜시스'라고 쓰는지를 도무지 모르겠다. 난 끝까지 '익스팬시스'라고 쓰겠다. 지난 목요일 저녁에 주문을 했는데 주말을 지나서 어제(월요일) 도착하였으니 홍콩에서 출발한 것 치고는 무척 빨리 배송이 되었다.

크기는 꽤 작고 가벼우며 저렴한 티가 난다. 예전에 쓰던 MP3 플레이어인 아리리버 E100 주황색 버전과 너무 닮았다. 전원 어댑터는 주변에서 흔히 보기 어려운 영국식이다! 다행히도 돼지코가 같이 들어 있었다. 이미 노안으로 접어든 나에게는 편하게 보기에는 좀 작은 글씨였다. 주변에 흔하지 않아서 즐거움을 주는 윈도폰 특유의 타일 인터페이스가 재미있다.

그러나 이 단말기는 내가 쓰려고 산 것이 아니다. 모토로라 레이저를 쓰던 아들이 액정이 깨진 채로 그냥 들고 다니는 것이 보기 안쓰러워서 약정 없는 저가형 단말기를 구입해 준 것이기 때문이다. 

안드로이드와 iOS 일색인 스마트폰 세계에 그나마 다양성을 제공하는데 기여하려고 마이크로소프트가 애를 쓰는 것은 알겠지만, 시장 점유율은 너무나 낮은 수준이다. 말이 좋아 3위이지 세계 시장 점유율은 작년 2분에 2.5%에 불과하다. 세상은 2등도 기억을 해 주지 않는데, 점유율 3%를 채 지키지 못하는 모습이 너무나 위태롭다.

단말기 제조사나 앱 개발자는 어쩌면 플랫폼이 많아지는 것을 원치 않을 수도 있다. 각각의 기준에 맞게 설계와 제작을 한다는 것이 매우 골치아픈 일임은 당연하다. 생물의 세계에서는 다양성이 가장 큰 미덕인데, 산업화된 인간 세계에서는 표준 혹은 '사실상의' 표준이라는 명목으로 다양성이 뿌리내리는 것에 대한 큰 저항감이 있다. 오늘 포스팅의 서두에서도 밝혔듯이 AC 전원 플러그의 모양이 나라마다 달라서 여행객이나 해외 직구족에게 불편함을 주는 것은 분명한 사실이니까.

요즘 시장은 점차 롱테일 구조로 변모해 간다는데... 스마트폰 구동 소프트웨어 역시 좀 더 다양한 형태가 공존하는 모습을 보이면 안될까? 내가 너무 순진한 바람을 갖고 있는지도 모른다.

2015년 7월 20일 월요일

리눅스에서 파일 백업을 위한 사소한 팁 몇가지

리눅스 서버에서 RAID와 NAS를 이용하여 대용량 작업공간 및 백업을 겸하고 있으나 언제 어떤 일이 생길지 모르는 것이 현실이라서 별도의 HDD를 구입하여 2차 백업을 하기로 결정하였다. 지난 주에 웨스턴디지털의 6 TB짜리 기업용 HDD를 몇 개 구입하였다. 랙 마운트 서버가 있으니 HDD를 꽂고 빼기가 훨씬 수월하다. 대신 안정성을 위해서 핫 스와핑을 하지는 않을 생각이다.

대용량 HDD가 등장하면서 리눅스에서 '섹터 정렬(정확한 번역인지는 잘 모르겠다)'과 관련하여 최적의 파티션을 하는 방법을 찾아보았다. 전체를 하나의 파티션으로 잡기로 하였다.

# parted -a optimal /dev/sda
(parted) mklabel gpt
(parted) mkpart primary 0% 100%
(parted) quit

GUI로 된 디스크 파티션 도구가 있지만 왠지 생소하다. 그리고 리눅스 서버와 떨어진 곳에서 작업을 하려면 command line interface가 더 친숙함은 당연하다.

이제 mkfs.ext4 명령을 실행해서 파일 시스템을 만들고 적절한 곳에 마운트를 하면 된다.

다음으로는 파일을 가져오는 방법에 대한 것이다. 백업할 파일이 새로 장착한 HDD가 붙어있는 동일한 시스템에 존재한다면(nfs로 연결된 것을 포함) cp나 rsync를 하면 된다. 백업이라는 의미에 충실하도록 파일 및 디렉토리의 권한이나 최종 수정일을 그대로 보존하려면 매뉴얼을 보면서 적절한 옵션을 찾아서 적용하면 되겠다.

원본 파일이 네트워크 상의 다른 컴퓨터에 있다면? scp나 sftp, rsync 등 쓸 수 있는 것이 많이 있다. 원격 컴퓨터에 접속하는 계정이 다르거나, 어느 한 쪽에서 관리자 권한을 필요로 하는 경우 약간의 공부가 필요하다. 이 포스팅에서는 그러한 사례까지 상세하게 다루지는 않겠다. 요즘은 사용법이 매우 간단하면서도 다재다능한 ftp client인 lftp를 즐겨 사용하고 있다.

6 TB 하드 디스크를 /backup에 마운트한 다음, 다른 컴퓨터에 있는 파일을 하위 디렉토리 포함하여 가져오려 한다. 백업용 컴퓨터에서는 관리자 권한을 유지하는 것으로 가정한다. 그렇지 않으면 backup 디렉토리 자체 혹은 그 하위에 일반 사용자가 사용 가능한 위치를 만들어야 하기 때문이다. lftp의 mirror처럼 기분 좋은 명령어가 또 있을까?

# lftp -p 3030 sftp://user@111.222.333.444
Password:
lftp user@111.222.333.444:~> cd /data/project
lftp user@111.222.333.444:/data/project> mirror .


2015년 7월 19일 일요일

또 다른 지름을 기다리며

아들 녀석의 깨진 휴대폰을 바꿔주기 위해 익스팬시스에서 구입한 루미아 윈도폰이 국내로 들어와서 이제 대전까지 와 있다는 문자를 받았다. 처음으로 개인통관번호라는 것도 발급받았다. 비주류폰에 대한 호기심은 오래 전부터 있었고 한때 윈도우즈모바일 6.5로 구동되는 옴니아팝을 쓴 일도 있다. 루미아는 내가 더 쓰고 싶지만 이미 사 준 것을 아들보고 바꾸자고 할 수는 없다.

이것 말고도 나를 위한 장난감을 하나 더 '질러'서 배송을 기다리는 중이다. 오디오와 관련된 저가 물품은 더 이상 사지 않겠다고 몇번이나 다짐을 하지만 그 결심이 오래 가지를 못한다. 이번에 구입한 것은 진공관을 사용한 헤드폰 앰프 겸 프리앰프. 혼자 사무실을 쓰는 처지라서 스피커를 울리는 것에는 비교적 자유롭지만 박력이 있는 음악을 듣기는 무리이다. 이런 상황에서는 헤드폰이 매우 좋은 도구가 된다.



만약 궁극적인 음질을 추구한다면 DAC를 경유하는 것이 가장 바람직할 것이다. 이렇듯 확실한 해결책은 취할 생각을 하지 않고 변죽만 울리는 것이 나의 음악 감상 방법이다. 사무실에서는 저가 디지털앰프, 집에서는 진공관 앰프에 튜너. 이러한 실용적인 접근 방식이라면 헤드폰을 들으려면 사운드 카드의 단자에 직접 연결만 하면 된다. 그런데 왜 또다시 앰프인가? 그저 호기심을 충족하기 위함에 다름이 아니다. 가격이 얼마 안하니까.. 이것이 내가 나를 합리화하는 방식이다. 싸고 좋은 것은 없다는 것이 만고의 진리인데 의미가 별로 없는 투자를 계속 하고 있다. 그러나 또 한편으로 생각해 보면 그래 봐야 몇만원 안되는 투자인데 나를 위해 이 정도 소비는 할 수 있다는 생각이 들기도 한다.

어떤 품질의 물건을 받게 될지는 모르지만... 기다려 보도록 하자.

2015년 7월 15일 수요일

HTC 센세이션

딸아이가 현재의 휴대폰인 옵티머스 GK로 바꾸기 직전까지 쓰던 휴대폰이 바로 HTC 디자이어이다. 모토로라 레이저와 동시에 구입하였던 구시대의 단말기이다. 워낙 험하게 써서 많이 긁히기도 했고 너무 자주 떨어뜨려서 전면 카메라는 아예 작동을 하지 않는다. 유심칩을 끼워서 이틀째 써 보고 있는데, 의외로 괜찮다. 무겁고 인터넷이 약간 느린 것 말고는 실용기로서 전혀 손색이 없다. 물론 게임 같은 것을 전혀 하지 않는 나의 기준으로 그러하다는 뜻이다.


화면이 큰 베가 팝업노트는 집에서 특별한 일이 없어도 자꾸 휴대폰을 손에 쥐게 만든다. 그런데 화면이 작은 휴대폰을 써 보니 통화나 메시지 발송 등 꼭 필요한 일 이외에는 손을 대지 않게 된다. 주머니에 넣어도 불룩해지지 않아서 좋다.

내가 쓰던 레이저는 아들에게로 갔는데 얼마 전에 떨어뜨려서 액정화면이 깨지고 말았다. 그 전에 쓰던 아이폰은 잃어버리고... 오늘 익스팬시스에서 루미아 430을 주문하여 기다리는 중이다. 원래 내가 윈도폰을 쓰고 싶었다.

멀쩡한 팝업노트를 놔두고 센세이션을 쓸 수는 없는 노릇 아니겠는가. 며칠간 더 쓰다가 다시 돌아가기는 해야 되겠지만.

[2015년 7월 21일 추가 작성] HTC 센세이션은 채 일주일을 채우지 못하였다. 업데이트한 코레일톡 앱에서 승차권을 확인하려고 했더니 앱이 종료되고 마는 것이었다. 자연스럽게 베가 팝업노트로 다시 돌아가고 말았다.

사무용 컴퓨터에서 Bio-Linux를 제거하다

수년 전에는 당시 기준으로 성능이 약간 좋은 데스크탑 컴퓨터에 Bio-Linux를 설치하고 윈도우를 가상머신(VirtualBox)으로 설치하여 연구 업무와 일상적인 사무를 같이 보았었다. 문서 작업을 하려면 리눅스 안에서 부팅을 다시 해야 한다는 점이 번거로왔고, 화면 전환을 하다보면 창의 활성화 상태가 꼬여서 불편한 점이 있었다. 이를 해결하고자 추가로 HDD를 달아서 윈도우를 설치한 다음 EasyBCD로 듀얼 부팅을 하기로 하였다.

그러나 연구 업무용으로 별도로 장만한 리눅스 서버에 PuTTY + Xmanager로 접속하여 작업을 하는 일이 훨씬 많아지면서 자연스럽게 데스크탑에 설치된 Bio-Linux는 거의 손을 대지 않게 되었다. 디스크만 괜히 돌고 있는 꼴이 되고 만 것이다.

드디어 오늘 데스크탑에서 Bio-Linux가 설치된 HDD를 제거하였다. EasyBCD에서는 리눅스 엔트리를 삭제하는 동시에 부트 메뉴를 생략해서 전원을 켜면 곧바로 윈도우가 시동되도록 하였다.

이로써 리눅스를 데스크탑으로도 쓰려는 시도는 완전히 종료되고 말았다. 윈도우에서 편하게 돌아가는 오피스 관련 프로그램과 여전히 인터넷 익스플로러만을 편애하는 금융 관련 사이트 때문에 데스크탑 환경에서 리눅스를 쓰는 것은 여전히 어렵다. 윈도우 환경에서 나는 전적으로 크롬을 쓰고 있지만, 금융 업무와 연구소 전용 인트라넷 프로그램을 쓰려면 익스플로러를 쓰지 않을 도리가 없다.

돌이켜보면 백업에도 너무 신경을 쓰지 않고 지내왔다. 저장 매체에 언제 어떠한 일이 생길지는 아무도 모른다. 앞으로는 효율적인 백업 전략을 세워서 주기적으로 자료를 백업하는 습관을 들여야 할 것이다. 내가 비록 전산실에 근무하는 사람은 아니지만, 만약의 사태에 대비하는 자세는 아무리 강조해도 지나치지 않다.



2015년 7월 14일 화요일

많은 정보를 안다는 것이 늘 바람직한 것은 아니다

세상이 어떻게 돌아가는지, 다른 사람은 어떤 것에 관심을 갖는지에 대해 약간은 알고 사는 것이 도움은 된다. 내가 종종 자유게시판의 글을 읽는 어떤 인터넷 커뮤니티가 있는데(알만한 사람은 다 아는), 읽고 나면 짜증이 나는 글들이 점점 많아지는 것이 문제다.

- 자랑(연봉, 비싼 자동차, 명품...)
- 너무나 편협한 사고에서 비롯된 단순한 불만의 글
- 적대적인 댓글 릴레이를 불러 일으키는 날선 댓글
- 지식의 부족함을 여실히 드러내는 글

오늘은 교회의 <십일조>를 <11>라고 쓴 것을 보고 기절하는 줄로만 알았다. <이틀>을 <2>로 쓰는 것은 애교라고 봐 주겠지만 이건 정말 너무했다. 어떻게 모든 글들이 소리나는 그대로 씌여질 것으로 생각을 하는 것인지?

인터넷 시대에는 간단한 질문은 예절이 아닌 일이 되었다. 누구나 손에 들고 있는 휴대폰으로 찾아보면 되니까. 그러나 이렇게 찾은 지식에는 깊이가 없고, 찾은 정보가 옳은 정보라는 근거도 부족하다. 그보다 세상을 더 어지럽히는 것은 알아도 그만, 몰라도 그만, 심지어 알면 좋지 않은 걸러지지 않은 정보들이다.

난 감히 이렇게 생각한다.

- 모든 주요 포털들은 실시간 검색어 서비스를 하지 말아야 한다.
- 언론 사이트는 기사에 대한 덧글 달기 기능을 차라리 없애는 것이 낫다.
- 사이트를 도배한 광고의 수준이 바로 그 사이트의 수준을 결정한다. 도저히 낯이 뜨거워서 볼 수 없는 광고 링크를 없애자.

이제 더 이상 서두에서 언급한 그 커뮤티니 사이트를 방문하지 않겠다.

2015년 7월 13일 월요일

사무실 책상 위의 음악 감상 시스템 - 2015년 7월 중순 버전

나는 남들보다는 사무실 집기 배치를 자주 바꾸어서 변화를 즐기는 편이다. 오늘은 책상 위가 작업 대상이다.

시각적인 재미를 충족시키기 위해 진공관을 이용한 '소품'을 하나 더 들이는 것을 오랜 기단 동안 고민했었다. 그러다가 다음 사진과 같은 구성을 갖추는 것으로 일단락을 지었다. 새로 구입한 것은 없다. 집에 있던 야마하 class D 앰프 보드를 갖고 나온 것이 전부이다. 원래 금속제 시계 케이스에 수납을 했었는데, 뒷면의 헤드폰 단자는 살리지 못하였었다. 케이스를 제거하면서 비로소 헤드폰 단자에 접근하는 것이 가능해졌다.


사무실은 주변의 연구 공간에 있는 실험 장비들의 소음이 심해서 음악 감상이 용이한 조건은 아니다. 독립 사무실이기는 하지만 항상 음악을 스피커로 듣는 것이 주변에 미안하기도 하고... 그래서 시끄러운 음악을 들을 때는 헤드폰을 쓰고 싶은 생각이 늘 있었다. 그래서 진공관을 이용한 헤드폰 앰프(되도록이면 프리앰프 겸요)에 상당한 관심을 가져왔다.

사무실의 음원은 항상 PC용 사운드카드(오디오트랙 MAYA 5.1 MK-II Zen)이다. 보드 내장용 사운드카드보다는 낫다고 믿는다. 그리고 헤드폰을 직결해도 실용상으로는 별 문제가 없다. 그런데 그렇게 하려면 책상 밑으로 몸을 숙여야 한다. 그래서 야마하 보드를 가져다가 헤드폰 앰프 대용으로 쓰기로 한 것이다.

컴퓨터 본체를 책상 높이로 올리면 USB나 ODD 등 컴퓨터에 직접 뭔가를 연결하는 것이 편해지는 것은 맞다. 사운드 카드의 단자도 좀 더 수월하게 접근 가능하다. 그렇지만 컴퓨터가만드는 소음을 좀 더 가까이에서 듣게 된다. 별것이 아니라고 생각하겠지만 책상 밑에 컴퓨터를 둠으로 인하여 상당한 소음이 차단되는 것은 맞다. 단, 먼지에는 주의할 필요가 있다.

야마하 보드의 스피커 단자까지 활용한다면 브리즈 앰프를 아예 치워 버리는 것도 가능하다. 안타깝게도 사무실에 있는 스크류 드라이버의 날이 맞지 않아서 이렇게까지는 하지 못하였다.

2015년 7월 10일 금요일

CMG-Biotools 활용을 위한 팁 정리하기

미생물 유전체 분석과 관련한 실무를 교육할 일이 생겨서 가상 머신으로 동작시킬 Genomics/Informatics용의 리눅스 배포판을 다시 검토하고 있다. Bio-Linux도 좋지만 가상 머신에 걸맞게 가벼운 리눅스를 찾는다면 Xubuntu 기반의 CMG-Biotools가 더 낫다. 특히 CMG-Biotools는 미생물 유전체의 비교 분석에 알맞게 특화되어 있어서 더 유리한 면이 있다.

CMG-Biotools, a free workbench for basic comparative microbial genomics. PLoS One
(2013)
Current download page: http://www.cbs.dtu.dk/~dave/CMGtools/

검색을 해 보니 DNALinux라는 것도 있다. 그런데 최신 뉴스는 2009년 것이다. 이래서는 곤란하다. 리눅스 배포판과는 상관이 없는 UGENE이라는 통합 환경도 있는데 이것은 도무지 익숙해지질 않는다. 설치만 몇 번 하고는 여러차례 써 보려 했으나 손이 잘 가지 않는다.

나는 별도의 서버가 있어서 CMG-Biotools를 설치만 해 두고 그동안 잘 쓰지 않았다. 오랜만에 재설치를 하면서 공식 매뉴얼에는 잘 드러나지 않은 팁을 정리해 두고자 한다.


  • 기본 계정은 student이다. 웬만하면 그대로 두자.
  • VirtualBox에서 공유 폴더의 이름(리눅스쪽; 예를 들어 vboxshare)를 설정한 뒤에는 /home/student 홈 디렉토리 안에 vboxshare 디렉토리를 만들어야 한다. 그러고 나서 sudo /etc/rc.local을 실행한 뒤 재부팅하라.
  • vi 같은 것은 기본 설치되지 않는다. sudo apt-get install vim을 해야 된다. 다행히도 gedit는 기본으로 설치되어 있다.
  • 가상머신 저장소가 허락한다면 꼭 필요하다고 생각되는 것들을 설치한다. 예를 들자면 emboss 같은 것.
  • [계속 추가 예정...]

귀여운 진공관 앰프 발견

알리익스프레스를 뒤적거리다가 USB DAC을 겸한 미니 싱글 앰프를 발견하였다(링크). 좀 색다른 책상 위 장난감을 가지고 싶은 욕구를 떨쳐내기가 정말 어렵다. 크기는 200 x 110 x 118 mm(5.5 kg).


현재로서는 음악 감상을 위한 장비에 추가적으로 투자를 해야 할 이유가 별로 없다. 그저 새로운 것에 대한 호기심에 지나지 않는다. 변덕스런 마음은 단 하루도 편안히 좌정하지를 못한다. LM1875 게인클론, 헤드폰 앰프, USB DAC 겸용 미니 진공관 싱글 앰프...

원래 가장 관심을 갖고 있던 것은 게인클론 부류의 앰프였다. 비록 입문기급이지만 진공관 앰프와 class D 앰프는 하나씩 있기 때문이다. 독특한 진공관앰프라고 해서 너무 싼 것을 고르면 여러가지 면에서 후회를 할 가능성이 크다.

알리 익스프레스 사이트를 기준으로 했을 때 "Gold LM1875 amplifier"라는 키워드로 검색이 되는 완성 앰프가 있다. 이것에도 꾸준히 관심이 가고 있다. 가격은 75달러 선이고 크기는 155 x 60 x 261 mm(3.5 kg)이다.

혹은 기판만 저렴하게 구입하여 직접 나만의 앰프를 만드는 것도 가능하다. 그러려면 전원 트랜스포머와 단자 및 볼륨 포텐셔미터를 구해서 새시에 고정하는 수고를 해야만 된다. 적절한 방열판을 칩에 다는 것도 중요하다. 위에서 언급한 완제품은 알루미늄 섀시를 방열판과 겸하고 있다.

고민은 길게, 결정은 빨리!

2015년 7월 9일 목요일

[하루에 한 R] ANI 매트릭스로 덴드로그램 그리기

오늘 작성하는 글에서 다루는 내용은 기술적으로 정확하지 않을 수도 있음을 사전에 밝히는 바이다.

다양성 측면에서 미생물 유전체를 다루는 사람이라면 서열 정보를 가지고서 두 스트레인이 동일한 종에 속하는지 혹은 그렇지 않은지를 판단해야 하는 상황에 종종 직면하게 된다. 복잡한 이론은 다 잊어버리고, 다음과 같이 4줄로 요약해 보겠다.

  • 16S rRNA gene의 similarity가 97% 미만이면, 두 균주는 서로 다른 종에 속한다. 역은 성립하지 않는다(무슨 말이냐 하면 97% 혹은 그 이상일 경우 같은 종일 수도 있고 아닐 수도 있다는 말이다).
  • 97% 16S rRNA gene similarity는 70% DDH(DNA-DNA Hybridization)에 해당한다.
  • 70% DDH에 해당하는 ANI(Average Nucleotide Identity) 값은 95~96%이다.
  • 일반적인 경우라면 동일 종에 속하는 균주는 TETRA > 0.99를 만족시켜야 한다.
종 구분을 위한 도구 중에 specI라는 것도 있다. 이는 40개의 phylogenetic marker gene을 사용하는 도구이다. annotation이 필요하지만 genome 수준의 ANI 계산이 없어서 빠르다. Nature Methods(2013)에 실린 논문은 너무 함축적이라서 읽기가 힘들다. 웬만한 것은 supplementary material을 보라고 해 놓으니...(국립국어원: '웬만해서'가 옳은 표기입니다).

ANI 값을 계산하여 행렬 형태로 만들어 주는 대단히 편리한 소프트웨어로서 JSpecies라는 것이 있다. 이 프로그램을 돌리면 다음 그림과 같은 매트릭스가 나온다. 대각선은 자기 자신에 대한 계산이므로 '---'표시되는데, 이를 100(단위는 퍼센트)으로 치환하여 보았다. 컬럼 라벨과 행(row) 라벨이 동일하다. 이 자료를 가지고 덴드로그램을 그리는 것이 오늘의 학습 목표이다.


덴드로그램(dendrogram)이란 계층적 클러스터링 결과를 가지가 달린 나무와 같은 그림으로 표현하는 것이다. 

위 그림에서 보인 데이터가 data.txt하는 파일에 저장되어 있다고 가정하자. 각 값의 구분자는 탭이다. 아무런 생각 없이 그림을 그리려면 다음과 같이 하면 된다.

> data = read.table("data.txt", sep="\t", header=TRUE, row.names=1)
> plot(hclust(dist(data)))


설정을 전혀 변경하지 않았으므로, complete agglomeration 방법이 사용되었다. hclust() 함수 안에서 method="average"라고 지정하면 UPGMA(Unweighted Pair Group with Arithmetic Mean) 방법으로 클러스터링이 된다. 이상의 경우는 대칭 매트릭스라서 상당히 간편하게 클러스터링이 되었다(엄밀히 말하면 대각선을 중심으로 각 쌍의 값이 완벽하게 같지는 않다. blast 혹은 mummer 계산을 하면서 어느 것을 query로 하느냐에 따라서 결과 수치가 매우 근소하게 차이가 나기 때문이다). 여기서 조심할 것은 각 데이터는 row를 기준으로 클러스터링을 했다는 것이다. 만약 expression data와 같이 각 데이터가 컬럼 단위로 차곡차곡 쌓인 경우라는 t() 함수로 트랜스포즈를 해야 된다. 덴드로그램은 'column dendrogram'이지만 사용되는 데이터는 row 단위임을 명심하자. mtcars라는 내장 데이터셋을 가지고 시험해 보라.

제목과 설명이 마음에 들지 않으면 plot() 함수의 매개변수를 적절히 조절하면 된다.

> plot(hclust(dist(data), method="average"), main="Title", xlab="X-label", ylab="Y-label", sub="subtitle")

UPGMA에 의한 클러스터링을 그림으로 쉽게 설명한 사이트가 있어서 링크를 소개한다. 같은 사이트 내에 distance matrix를 이용한 클러스터링 서비스 페이지가 있다. 혹은 좀 더 심오해 보이는 웹 서비스를 이용하고 싶다면 DendroUPGMA를 방문해 보라.

자, 여기서 궁금증이 생겼다. 모든 궁금증이 오늘의 포스팅 내에서 해결되지는 않을 것이다.
  1. 세로축 "Height"의 단위는 무엇인가? 공부해!
  2. 이미 대칭인 매트릭스에 dist() 함수를 적용하는 것은 중복이 아닐까? 즉, row1 = (a, b, c...)와 같은 일반적인 형태의 "비대칭" 데이터가 더 적합한 것이 아닐까?
  3. data 매트릭스를 이루는 수치는 percent identity이다. 만약 100 - data를 하면 이는 자연스럽게 dissimilarity matrix와 비슷한 것이 된다. 이것을 가지고 직접 클러스터링하면 안되나?
  4. 세로축의 단위를 실제의 difference로 나타나게 할 수는 없을까?
3을 해결해 보자. 그저 R에서 100 - data라고 하여 새로운 오브젝트에 지정하면 된다. R은 이럴 때 참으로 편리하다.


논문을 찾아보면 100 - (ANI)를 한 매트릭스를 가지고서 덴드로그램을 그렸다는 글귀가 보인다. 그렇다고 해서 무턱대로 plot(hclust(data.2))를 하면 안된다. hclust() 함수가 받는 인자는 아무 매트릭스나 되는 것이 아니라 "a dissimilarity structure as produced by 'dist'"라고 명시되어 있기 때문이다. 만약 R에서 dist() 함수를 쓴다면 인자로 data를 주든 100-data를 주든 똑같은 트리가 나온다.  백문이 불여일견이다.. 플롯 2개를 동시에 그려보자.

> par(mfrow=c(1,2))

> plot(hclust(dist(data)))
> plot(hclust(dist(data.2)))



data.2 그 자체는 dissimilarity matrix(또는 distance matrix)가 아니다. dist()함수로 넘길 것이라면 data(=ANI)면 어떻고 data.2(100-ANI)면 어떤가?

그러면 구체적인 사례로서 논문을 직접 찾아보자.

http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4154481/ 

100% - ANI를 ANI divergence로 정의하고 이를 hcluster Python package를 사용한 스크립트에 투입하였다고 한다. 이 논문의 Supplementary Data 2에 데이터와 파이썬 코드가 있다. 다음은 코드 전체이다. 결과 그림은 여기에 있다. 생각보다 그림이 예쁘다. 아마도 identity level에 따라 색깔이 입혀지도록 만든 것 같다.

# coding: utf-8
import pylab
import matplotlib.pyplot as plt
from pylab import loadtxt
from hcluster import *
from pylab import xlabel
X = loadtxt('SD2_ani_data.txt')
lab = open('SD2_ani_names.txt').read().splitlines()
Y = pdist(X)
Z = complete(Y)
dendrogram(Z,orientation='right',labels=lab,distance_sort='ascending',leaf_font_size=8,color_threshold=0)
xlabel('Euclidean Distance')
plt.savefig('ani_plot.svg')

입력물을 distance matrix로 전환한 다음 클러스터링하였다. 그렇다면 100 - ANI를 하지 않아도 상관이 없었을 것이다. 도대체 무엇이 정답일까? 구글신에게 뭐라고 여쭈어야 내가 원하는 대답이 나올까?

그렇다. Use own Distance Matrix in HCLUST? 완벽한 질문이다. 이 한 문장에 답이 들어있다. "Try to cast you distance matrix before using it in hclust()"

> data.3 = as.dist(data.2)
> par(mfrow=c(1,2))
> plot(hclust(dist(data.2)),main="Using dist() function")
> plot(hclust(data.3),main="Using as.dist() function")


100% 확신할 수는 없지만, 이제 height는 data.3 매트릭스에 실린 숫자와 동등한 것으로 보면 될 것이다. 마지막으로 원본 매트릭스와 dist()로 만들어진 distance matrix의 모양이 어떻게 다른지 확인해 보자. 아래 그림에서 data.2는 9x9 크기의 원본 매트릭스이고, data.3은 8x8로 줄어든 distance matrix이다. 원본에서 대각선에 위치한 자료는 distance = 0이므로 이를 제거한 조작이 가해진 것이다.


오늘도 예상외로 많은 지식을 쌓았다. 휴!






2015년 7월 7일 화요일

원핵생물(prokaryote) 유전체에 대한 NCBI의 RefSeq 정책이 어떻게 변해가고 있는가

RefSeq, 즉 Reference Sequence database는 공개된 염기서열과 그 단백질 산물의 curated collection이다. 새로운 미생물 유전체를 해독하여 나름대로 주석화를 하여 NCBI에 올리면 GenBank로 등록이 된다. 이 중에서 "major organism"에 해당하는 것이 RefSeq로 옮겨가는 영광(?)을 누린다.

NGS의 발달로 워낙 많은 수의 미생물 유전체가 완성 수준으로 만들어지게 되었고, 이에 따라서 RefSeq의 정책도 변하게 되었다. 원래 RefSeq에서는 GenBank에 등록된 유전자 정보를 기반으로 하여 재 주석화를 거쳐서 RefSeq에 수록하는 것으로 알고 있었는데, 요즘은 그렇지만도 않은 것 같다. 아주 뛰어난 기술을 지닌 컨소시엄에서 주석화를 한 것이 아니라면 몇 몇 중요한 유전자가 자동 주석화 과정에서 누락되는 경우가 발생하기 때문이다. 나 역시 그런 경험을 자주 겪었다.

2009년에 등록한 대장균 B 스트레인을 재주석화할 것인가, 혹은 NCBI가 자동으로 새로 주석화한 것을 그대로 쓸 것인가를 고민하다가 NCBI의 최근 정책이 어떤지 찾아보기로 하였다. 아래에 쓴 내용은 Prokaryotic RefSeq Genomes 페이지와 여기에 딸린 문서들을 세심하게 읽어보고 정리한 것임을 미리 밝힌다.

RefSeq의 모든 고세균 및 세균 유전체는 122개의 selected reference genome을 제외하면 전부 NCBI의 prokaryotic genome annotation pipeline으로 주석화가 이루어진다.

1. Reference genomes
NCBI의 스탭진과 공동연구자들의 참여에 의해 만들어진 가장 고품질의 데이터이다. 의학적 중요성(중요한 감염병 원인세균), 어셈블리와 주석화의 품질, 실험적 증거의 유무 등이 reference genome이 되는 자격 요건이 된다. 단백질 정보는 YP_ 혹은 NP_로 시작하는 accession을 갖는다. Reference genome 정보는 다음의 사이트에서 얻을 수 있다.


2. Representative genomes
이외의 중요한 유전체들은 클러스터링을 거친 뒤 종 수준의 분류(예: type strain)나 어셈블리의 품질(완성본 유전체를 선호)이라는 측면에서 주안점을 두어 선별하게 된다. 이렇게 만들어진 representative genome에서 유래한 단백질 정보는 WP_로 시작하는 accession을 갖는다. Representative genome의 정보는 다음 사이트에서 얻을 수 있다.

3. Variant genomes: 나머지 대부분의 것들
Reference나 representative는 되지 못하지만 여전히 많은 유전체이 RefSeq에 존재한다. 이들은 분류학적으로 다양한 균주를 나타내거나 혹은 조립 상태가 약간 미흡한 것들이다. 단백질 역시 WP_로 시작하는 accession을 갖는다.


RefSeq non-redundant proteins
WP_로 시작하는 단백질은 전부 non-redundant protein accession에 해당한다. 이는 2013년 중반쯤 새로 도입된 RefSeq protein record의 유형이다. 서로 밀접하게 연관된 미생물의 유전체 해독이 잦아지면서 단백질 수준에서 100% 동일한 것들이 급증하게 되었고, 이를 하나의 엔트리로 저장하기 위해 이러한 방식을 도입한 것이라 한다. 서열이 바뀔 가능성이 없으므로 버전 번호는 항상 1이다.

Prokaryotic RefSeq Genome Re-annotation Project (원문 링크)

RefSeq에 수록된 미생물 유전체는 지속적으로 NCBI의 annotation pipeline에 의해 재주석화가 이루어진다. 최고 수준의 주석화 정보를 가진 소수의 유전체를 제외하면 전부 이 과정 하에 놓여 있다고 보아도 된다. 따라서 최초에 유전체 정보를 제출한 사람이 매번 업데이트를 하지 않아도 되는 것이다. 더욱 반가운 소식은 자체적인 gene prediction을 수행하므로 GenBank 등록 당시에 누락된 유전자가 있다 하더라도 re-annotation 과정을 통해 예측될 수 있다. RefSeq의 유전자와 GenBank 유전자의 연결 고리는 바로 locus tag이다. 예전의 locus ta은 'old_locus_tag' qualifier로 확인 가능하고, RefSeq에서 새로 부여한 locus tag은 _RS<숫자>의 형식을 취한다.

2015년 7월 6일 월요일

오디오 앰프 볼륨의 잡음 제거

사무실용 앰프(Breeze TPA3116 class D amplifier)의 볼륨 조절기에서 잡음이 난다는 것을 핑계로 새로운 앰프를 하나 더 구입할까 하는 생각을 아주 잠깐 한 적이 있다. 그렇지만 새 물건을 사기 전에 직접 고쳐보려는 시늉이라도 해 보는 것이 인간이 된 도리라 생각해서 집에서 가져온 공구와 약품을 사용하여 약간의 수작업을 해 보았다.


다들 잘 아시겠지만 이런 목적으로 사용할 약품은 방청윤활제인 WD-40이 아니라 접점 개선제(contact cleaner)인 BW-100이다. 원래 분사구에 긴 빨대모양의 관을 꽂아서 좁은 영역에 뿌리게 되어있는데, 몇 번 쓰다보면 이 관을 늘 잃어버린다...

BW-100을 듬뿍 뿌리고 볼륨 놉을 여러차례 좌우로 돌렸다. 잡음이 완벽하게 사라졌다. 그러면 그렇지...

현재의 음악 감상 환경이 어떤 부족함이 있는 것은 전혀 아니다. 다만 써 보지 않은 것에 대한 호기심이 늘 있을 뿐이다. 사실은 게인클론 앰프에 늘 관심을 갖고는 있다. 손바닥만한 class D 앰프의 편리함(책상 위 앰프에게는 자리를 적게 차지하고 발열이 적으며 전기를 덜 쓴다는 것이 대단히 큰 매력이다)에 상당 부분이 가려져 있을 뿐...

2015년 7월 5일 일요일

심심풀이 오디오 구경

인터넷 시대가 참으로 좋은 것은 힘들여 발품을 팔지 않아도 마음에 두고 있는 물건들을 자유롭게 둘러볼 수 있다는 것이다. 비록 현실 세계에서 물건을 접하는 경험에 비교할 수준의 일은 아니지만 말이다.

브리즈라는 상표를 달고 있는 TPA3116 class D 앰프는 현재 내가 사무실에서 쓰고 있는 물건이다. 딱 가격만큼의 음질(혹은 그보다 조금 나은 수준?)을 들려준다. 몇가지 잘 알려진 단점이 있다.


  1. 게인이 다소 높다.
  2. 볼륨 중간 쯤에서 '쉿-'하는 잡음이 매우 높다.
  3. 볼륨 놉에 손을 대면 '웅-'하는 잡음이 유도된다. 2와 3의 문제는 제품마타 편차가 있다.


구입 초기의 상태는 내 블로그에 올린 포스팅에 나온 사진과 같다. 지금은 색상이 많이 바랬다. 2의 문제는 저항을 교체하여 게인을 내리면 완벽하지는 않지만 어느 정도 해결이 된다. 이에 대하여 내가 쓴 글들이 있다.

포스팅 1 포스팅 2

요즘은 새로운 문제가 발생하였다. 볼륨을 돌리면 오른쪽 채널에서 '치직'거리는 잡음이 들리기 시작한 것이다. 아마도 볼륨의 품질이 그다지 좋지 않은 것에서 기인한 것으로 생각된다. BW-100과 같은 접점 부활제를 뿌리거나, 그럴만한 정성이 있다면 조금 더 품질이 좋은 4각 볼륨으로 바꾸면 될 것이다. 실제로 미니 볼륨을 기판에서 떼어내는 것은 결코 쉽지가 않다. 그리고 좋은 품질의 미니 볼륨을 국내에서 구하는 것도 쉽지 않다. 아니, 정확히 말하면 서울이 아닌 곳에서 구하는 것이 어렵다고 하는 것이 맞겠다. 세운상가 근처 어디를 가면 알프스 볼륨을 판다는 글을 본 적이 있으니 말이다.

아니면 이 앰프를 대체할 새로운 장난감을 웹에서 찾아보는 것도 즐거운 소일거리가 된다.

Class D 앰프에 대한 불신이 있다면, 전력은 조금 더 소모하더라도 LM1875칩을 사용한 칩앰프가 좋은 대안이 될 것이다. 앰프 보드만 구입하면 당장은 돈이 덜 들지만, 결국은 섀시를 꾸미는 일이 너무 큰 숙제가 되고 만다.

좀 더 고상한 것을 원하는가? 그러면 채널당 3와트 조금 넘는 출력이 나오는 진공관 앰프는 어떨까?

진공관 앰프를 사게 되면 현재 갖고 있는 구 소련제 6N2P를 교체용으로 쓸 수 있다는 얄팍한 생각이 든다. 그러나 이는 갖고 있는 50원짜리 물건을 쓰기 위해 5천원을 추가로 지출하겠다는 것에 다름아니다. 

아직까지는 아무것도 지르지 않았다. 다행이다...



2015년 7월 4일 토요일

유전체 염기 서열 교정하기

1) NGS에서 유래한 짧은 read를 참조 서열 위에 정렬하는 것,
2) 이를 바탕으로 변이를 찾는 것(variant calling),
3) 그리고 최종적으로 변이 정보를 사용하여 참조 서열을 교정하는 것.

이 세가지는 모두 다른 활동이다. 만약 인간 유전체를 대상으로 연구를 한다면 3)은 그다지 접할 일이 없을 것이다. 인간 유전체 정보를 교정한다면 거창한 일을 한다면 모를까? 반면 미생물 유전체 연구를 하는 사람이라면 꽤 많이 접하게 되는 일이다.

가끔 실험 진화를 거친 미생물 균주로부터 어떤 염기서열이 바뀌었는지를 착기 위해 resequencing analysis를 할 때가 많다. 1) + 2)가 이때 필요한 작업이다.

예전에 일루미나를 이용해여 대충(?) 유전체 서열을 얻어 놓고 최근에 PacBio로 완성 수준의 유전체를 새로 얻게 되는 일이 많다. 물론 미생물의 경우이다. 결과만 놓고 보면 분명히 개선이지만 일루미나 데이터가 잘못하면 사장될 수도 있다는 것이 나의 고민이다. 일루미나의 sequencing coverage가 훨씬 높다는 것을 감안하면 쓸데가 전혀 없지는 않다. PacBio assembly에 일루미나 read를 얹어 놓고 variant를 찾으면 많게는 수십개의 염기서열 차이가 검출된다. 이를 3)번 과정을 이용하여 교정하면 된다.

이것 말고도 일루미나 데이터를 쓸 곳은 좀 더 있다. 너무 주절주절 여기에 기록하면 최근에 투고를 앞두고 있는 간단한 논문에서 다루는 내용을 미리 누설(?)하는 셈이 되니 일단은 자제력을 발휘하겠다.

나는 거의 전적으로 모든 NGS 관련 작업을 CLC Genomics Workbench에서 한다. 아직도 workflow를 다루는 방법을 제대로 배우지 못해서 마우스 클릭만으로 대량의 데이터를 하나씩 처리하려면 조금 번거로운 면이 없지는 않다. CLC에서는 2)의 기능이 최근 1-2년 사이에 많이 향상되었다.

그런데 내가 아는 바로는 3)에 해당하는 기능이 없다. 만약 국내에서 CLC Genomics Workbench를 보급하고 있는 (주)인실리코젠에서 내가 잘못 알고 있는 것이 있다면 알려 주시기를! 그동안은 consensus sequence를 추출하는 기능을 대충 사용하여 왔다. 엄밀히 말하면 다양한 방법으로 variant calling을 할 수 있지만(CLC에서는 version 8.0.x를 기준으로 quality-based variant detection과 fixed ploidy variant detection 및 low frequency variant detection 등 세가지 방법을 제공한다) consensus extraction은 특정 위치에 align된 read에서 가장 많이 나타는 염기를 기준으로 최종 서열을 뽑아주는 간단한 방법을 쓰게 된다.

가장 바람직하게는 CLC에서 찾은 variant를 VCF로 전환한 뒤 다른 프로그램을 써서 reference를 교정하면 될 것이다. 그런데 아직도 CLC에서 VCF 파일을 제대로 뽑는 방법을 찾지 못했다. 분명히 메뉴에 기능이 있는데, 이를 클릭하여 따라가다 보면 'reference track'을 설정하는 단계가 나오면서 여기에서 막히고 만다. 인간 유전체를 다루는 사람에게 친숙할 GATK 패키지를 사용하면 되겠지만 호미로 막을 것을 가래로 막는다는 기분이 든다.

그래서 어제는 아주 '무식한' 방법을 동원하고 말았다. CLC의 variant table을 텍스트 파일로 출력한 뒤, 간단한 Perl 스크립트를 작성하여 reference를 고치게 하는 것이었다. 사실 이러한 일을 이미 몇년 전에 한 적이 있었고 당시에 만든 스크립트를 다시 꺼내 쓰면 되는 간단한 일이었지만, 스크립트에 항상 충분한 설명을 달지 않는 나쁜 버릇 때문에 이를 들여다보느니 새로 짜는게 더 나은 상황이 늘 벌어진다. 아마 자기 혼자 쓸 목적으로(주로 연구자들) 스크립트를 작성하는 사람들은 전부 비슷할 것이다.

CLC가 만들어 주는 variant table이 보여주는 reference 기준의 위치는 substitution에 대해서는 매우 명백하지만 insertion이면 고민이 필요하다. Sample은 이 위치 다음에 삽입이 되어 있다는 것일까, 혹은 그 뒤에 삽입이 되어 있다는 것일까? VCF의 specification 정보를 찾아보았다. 그 이벤트가 일어난 아로 앞의 위치를 기록한다고 되어 있다.

이를 참조하여 reference를 고친 뒤 다시 read mapping을 하여 variant를 찾아 보았다. 더 이상 variant는 나타나지 않는다. 실수는 없었다.

site.genoglobe.com 사이트 관리가 어려운 이유

(이 블로그 주소는 blog.genoglobe.com이다)

내가 갖고 있는 지식을 체계적으로 정리하는 웹사이트로서 blog.genoglobe.com을 갖고 있다. 그런데 도무지 사이트의 업데이트를 하기가 어렵다. 직장에서는 로그인이 차단되어 있기 때문이다. 이 블로그는 다행히 그렇지 않다. 단순한 '놀이터'가 아니라 업무와 관련하여 세상과 나눌 지식을 올리고도 싶은데 이를 퇴근하고 집에 돌아와서만 해야 된다면 어디 능률이 오르겠는가.

잔 기술과 Perl 스크립트 조각들을 무수히 만들어 왔는데 어디 두었는지 찾기가 너무 어렵다. 가장 크게 의존하는 것은 연구노트삼아서 기록하는 문서 파일이다. 그러나 이나마도 수십개가 넘으니 작성 이후 시간이 좀 지난 다음에 찾으려면 이만저만 불편한 것이 아니다.

도메인 관리, 웹사이트 관리, 지식 관리.

이 세마리 토끼를 어떻게 잡아야 할까?

2015년 7월 1일 수요일

직업과 취미, 그리고 고객 만족

국립과천과학관에서 중학교 1학년 학생들을 대상으로 하는 진로탐구프로그램에 초빙되어 강연을 하고 돌아왔다. 생명과학자로서 내가 걸어온 길을 약 40분에 걸쳐서 이야기하였다. 주최측이 사전에 당부한 바대로 내가 종사하는 전문 분야에 대한 단순한 설명은 최대한 배제하였다. 평소에 직업에 대해서 갖고 있는 바를 즐거이 이야기해 주고 왔는데 어린 학생들에게 잘 전달이 되었는지는 모르겠다.

정말 좋아하는 일은 직업으로 하게 되면 더 이상 즐겁지 않을 수도 있다는 것이 이야기를 풀어나가는 시작점이었다. 왜냐하면 직업에는 책임이 따르기 때문이다. 취미로 하는 사람과 직업으로 하는 사람 간에 전문성에서 별로 차이가 나지 않는 분야가 분명히 있기는 하다. 나는 이렇게 생각한다. 어떤 일을 직업으로 하려면, 다음의 4가지가 갖추어져 있는지를 따져야 한다. 여기에는 내가 갖추어야 하는 요건도 있고 외부적인 조건도 있다.

- 열정 가장 기초적인 요건이다.
- 책임감 이것이 없으면 취미가 된다.
- 전문성 이것은 자기가 힘들여 갈고 닦아야 하는 것.
- 보상(혹은 보수) 그 일을 함으로써 생계를 유지할 수 없다면 올바른 직업이 아니다.

자기가 관심을 갖고 있는 일을 이 네가지 기준으로 평가한다면 그것을 직업으로 해야 하는지 혹은 취미로 해야 하는지가 분명하게 드러날 것이다.

다음으로 강조한 것은 건전한 자본주의 정신을 가지라는 것이었다. '시장'은 인류가 만든 것 중에 가장 완벽한 것은 아니지만(도처에서 시장 실패를 목도하게 되므로), 꽤 잘 만든 장치임은 틀림이 없다. 이를 통해서 많은 사람들이 풍요로운 삶을 누리게 되었고, 발전하는 기회를 마련하기도 하였다.

그 다음으로 이야기한 것은 고객 지향적인 삶의 태도이다. 고객은 재화나 서비스를 사기 위해 돈을 들고 오는 사람으로만 좁게 정의할 필요가 없다. 나는 이렇게 생각한다. 내가 일을 함으로 인해서 만족을 얻는 사람이 바로 고객이다! 그렇다면 어떤 면에서는 나 자신도 가장 중요한 고객이다. 고객이 누구인지 알 때 비로소 일을 대하는 태도가 달라지게 된다.

학생 신분의 자녀 입장에서 생각해 보자. 부모와 자녀 사이에 고객을 정의할 수 있는가? 엄마가 맛있는 요리를 하면 자녀가 만족하고 먹는다. 그러면 자녀가 부모의 고객인가? 또한 부모는 용돈을 자녀에게 주고 자녀가 좋은 성적을 내면 기뻐한다. 그러면 부모가 자녀의 고객인가? 이에 대해서는 나중에 좀 더 생각을 정리하여 별도의 글로 정리해 보련다. 간단히 중간 결론을 내려보겠다. 고객은 더 좋은 서비스, 더 낮은 가격을 제공하는 공급자가 있다면 기존의 공급자에게는 가차없이 등을 돌린다. 시장에서 신뢰가 중요한 미덕이기는 하나 결코 영원하지 않다. 따라서 모종의 거래가 오고가는 시장 개념이 먹히는 곳에서 고객을 정의하는 것이 옳다고 본다.

그리고 생명 존중과 환경 보전에 각별히 관심을 가지고, 질풍노도의 시기를 지나서 어떤 길에 들어서기로 작정했다면 그 길을 끝까지 가 보라고 당부하였다. 왜냐하면 세상이 바로 여러분을 간절히 원하고 있으므로. 이 마지막 당부는 최근 읽은 에드워드 O. 윌슨의 책에서 인용한 것이다.

프로페셔널은 돈을 받아야 일하는 사람이고,
아마츄어는 돈을 내고서라도 일하는 사람이다. 이는 내가 평소에 늘 갖고 있는 생각이다. 다른 사람이 이미 한 말, 혹은 책에서 읽은 것을 내가 재생산한 것은 아닌지 모르겠으나.

만약 이 '일'에 해당되는 것을 사고파는 사업을 시작한다고 치자. 단지 중개만 하는 사업을 해도 좋다. 역설적이게도 나는 후자를 공략하는 것이 더 큰 성공을 거두리라고 생각한다. 돈을 받아야 일하는 프로페셔널은 딱 그만큼만 일을 하기 마련이다. 또한 이윤을 생각하지 않을 수 없다. 그러나 열정적인 아마츄어는 그렇지가 않다. 앞으로 이 문제에 대해서도 탐구해 봐야 되겠다.