2017년 6월 25일 일요일

세상에서 가장 간단한 스피커 지연회로

인켈에서 제조한 P878이라는 미니 컴포넌트 시스템의 리시버 앰프부(RX878)를 3년 전에 중고로 구입했다가 즉시 반품한 일이 있다(당시 올린 글). 출력과 스피커 사이를 연결하는 릴레이가 노후하여 접촉 불량이 있어났던 것이다. 이는 오래된 앰프 기기에서 흔히 발생하는 문제이다. 이 릴레이가 음질을 열화시킨다고 주장하는 사람들도 간혹 있다. 스피커를 연결하는 선재가 음질을 좌우한다는 진지한 논의는 정말 그 기원이 오래되었고, 심지어 전원부의 퓨즈도 중요하다고 한다. 물론 나는 여기에 동의하지는 않는다.

스피커 보호회로의 필요성은 크게 두 가지 정도로 생각할 수 있을 것이다. 하나는 증폭 소자가 망가져서 단락이 일어나면 출력쪽에 갑자기 DC 대전류가 흘러서 스피커의 보이스코일이 파손되므로 이를 감지하며 짧은 시간 안에 스피커쪽으로 가는 연결을 끊는 것이다. 또 하나는 전원이 들어온 뒤 몇 초가 지난 뒤에 스피커가 연결되게 하는 단순한 지연 회로이다. 앰프에 따라서는 전원을 켜거나 끈 직후 스피커에서 '퍽'하는 popping noise를 발생하는 것이 있다. PC용 증폭 스피커를 사용하는 사람은 아주 흔하게 경험하는 현상이다. 이 잡음이 실제로 스피커를 망가뜨리게 되는 일은 없지만,  분명히 기분 좋은 소리는 아니다. 발생 원인이 의외로 매우 다양하여 이를 근본적으로 없애기는 어렵다. 대신 스피커측 연결을 단순히 지연시키는 회로를 추가하여 해결할 수 있다.

출력 트랜스포머를 사용하는 앰프에서는 증폭부에서 심각한 고장이 발생해도 스피커까지 영향을 미치는 일은 거의 생기지 않는다. 그리고 칩앰프의 증폭 소자는 다양한 오류 상황에 대처할 수 있는 자체 보호회로를 내장하고 있는 경우가 많다. 하지만 팝 노이즈까지 항상 없애주는 것은 아니다.

집에서 사용하는 자작 앰프(산켄 SI-1525HD 칩 사용)는 팝 노이즈가 꽤 크다.  책상위에서 쓰는 소출력 스피커에서는 참을 수 있을 정도이지만 대출력 스피커를 연결하여 전원을 넣으면 상당한 타격감의 큰 소리가 우퍼에서 발생한다. 시판되는 스피커 보호회로 또는 지연회로 보드(예: FK650; 알리엑스프레스에는 훨씬 다양한 제품이 있음)를 구입하여 사용할 것을 여러번 고민해 보았으나 전원을 인가할 적당한 방법이 없다는 것이 문제였다. 스피커 보호회로 보드는 보통 정류회로를 내장하고 있어서 12~16 V 정도의 교류 전압을 연결하면 된다. 그러나 내 앰프에 들어있는 파워 트랜스포머는 두 조의 0-18 V 출력 단자만 제공하기에  스피커 보호회로를 구동하기에 적당하지 않다. 무엇이 문제인가? 앰프보드에서는 양전원이 필요하므로 파워트랜스포머의 출력을 직렬로 연결하여 +18 V 0 V -18 V를 만들었으니 이중에서 한쪽 절반만에서 선을 뽑아서 18 V를 만들면 양전원의 균형이 깨질 것이다. 만약 이 문제가 해결된다고 해도 18 V를 스피커 보호회로 구동에 맞게 강하시키는 것도 쉬운 일이 아니다. 오히려 스피커 보호회로를 위한 파워 트랜스포머를 하나 더 다는 것이 더 나을 수도 있다.

그래서 아주 단순한 방법을 택하였다. 스피커로 가는 출력선측에 4P 스위치를 달아버리는 것이었다. 아래 사진에서 보였듯이 볼륨 조절 놉 바로 왼쪽에 보이는 검정색 로커 스위치가 바로 그것이다. 망가진 외장 HDD의 전원부에서 적출한 파워 스위치를 재활용하였다.


이보다 더 간단한 - 그러나 성가신 - 스피커 지연회로는 있을 수가 없다. 


2017년 6월 20일 화요일

Oxford Nanopore sequencing, 기껏 조립을 했더니 박테리오파지 람다였다

어제 세 번째의 ONT(Oxford Nanopore Technologies) 시퀀싱을 실시하였다. 최초의 두 번은 lambda control DNA에 대한 것이었고 이번에는 실제 세균 유전체 DNA를 가지고 만든 라이브러리였(다고 믿었)다. 어제 오후 3시쯤에 러닝을 시작하였으니 48시간의 표준 러닝을 마치려면 하루를 더 기다려야 한다.

MinKNOW 실행 화면을 보면 실제로 DNA가 통과하는 구멍, 즉 'strand'로 표시되는 nanopore의 수가 그렇게 많지 않다. 특히 하루를 넘어가면서 얻어지는 read의 수가 줄어드는 것이 확연히 드러났다. 48시간 러닝에 대한 전형적인 read의 수 혹은 염기쌍의 수는 얼마라고 이야기하는 것이 가능할까? 초창기에 나온 어떤 논문에서는 매 4시간마다 라이브러리를 리필하라는 말까지 있지만 ONT community에서 아직 이와 관련한 정보를 찾지는 아니하였다.

러닝 수 22시간쯤이 경과했을 때, fast5 파일을 다른 위치에 복사하여 base calling을 한 뒤 reference mapping을 실시하였다. 이 샘플은 예전에 일루미나로 시퀀싱을 한 적이 있어서 200개 수준의 contig 서열을 확보한 상태이다. 플라스미드와 트랜스포존 등이 많아서 contig의 수가 불가피하게 많다.

 Mapping 및 QC는 NanoOK를 사용하였다. PDF report를 열어보니 성적이 너무 나쁘다. 어떻게 된 것일까? 내가 알고 있는 세균의 유전체 염기서열이 맞나? 2 kb짜리 read를 아무거나 하나 선택하여 NCBI에서 BLASTN을 해 보았다. 결과는 전혀 예상하지 못한 것이었다. 박테리오파지 람다의 유전체 서열이 나오는 것 아닌가?  Percent identity는 93% 수준이었다.

De novo assembly를 하면 정확한 진단이 될 것 같았다. Canu를 사용하여 조립을 하니 약 47 kb 크기의 contig가 떡하니 나왔다. 같이 만들어진 3 kb 짜리 contig는 depth도 낮고 서열 자체도 GTT의 반복이라서 의미 없는 서열로 판단된다.

이번에는 람다 DNA 서열을 reference로 하여 다시 NanoOK을 실행해 보았다.  Reference  전체가 depth > 30 수준으로 잘 매핑되었다. 아마도 라이브러리를 만든 연구원이 실제 세균 샘플 DNA와 람다 콘트롤 DNA를 혼동하여 서로 바꾸어서 실험을 한 것 같다.

어떻게 해야 하나의 flowcell에서 러닝을 하여 좀 더 많은 read를 얻을 수 있을까? ONT community에 잠복하여 다른 사용자들이 올린 글과 답변을 전부 읽어봐야 되겠다.

2017년 6월 18일 일요일

영화 <악녀>를 보다

흥행의 보증수표, 톰 형이 주연하는 미이라를 볼 것인가, 새로운 여전사(실사 영화로 말하자면)인 원더우먼을 볼 것인가? 최종 선택은 한국 영화인 '악녀'였다. 잔혹한 싸움 장면이 워낙 많아서 옆자리의 아내는 보는 내내 고개를 돌리고 있다시피 하였다. 영화는 낮 1시가 조금 지나서 끝났는데, 점심으로 무엇을 먹어야 할지 약간은 고민이 되기도 하였다. 여담이지만 식욕을 떨어뜨리는 영화라면 '곡성(2016)'이 더하면 더했지 덜하지는 않았다.


김옥빈이 연기한 킬러 '숙희'는 최소한 시각적으로는 여러모로 스칼렛 요한슨이 연기한 블랙 위도우를 떠올리게 한다. 일부러 그런 효과를 노린 것인지는 알 수 없다. 밀라 요보비치(영화 '레지던트 이블')을 연상하는 사람도 있겠으나 나는 그 영화를 제대로 본 적이 없어서 뭐라고 말하기는 어렵다. 권력 기관의 철저한 훈련을 통해 만들어진 여성 킬러로서 그저 지시에 의해서 충실하게 살인을 행하는 인간 병기라면 물론 '니키타(1990)'가 원조의 자리를 차지할 것이다.


영화의 시작 부분에서 악녀 '숙희'가 혼자 건물로 침투해 들어가서 수십명의 남자들을 해치우는 장면은 정말 대단했다. 5분 동안 약 70명을 죽였다고 하던가? 마지막 한 사람을 끝장내면서 건물 밖으로 떨어져 사뿐히(그건 아니고 아마 기진맥진했다고 보는 것이 맞을듯) 착지하는 장면 역시 블랙 위도우의 전투 장면을 연상하게 하였다.


아마 이 영화를 본 많은 사람들은 다른 유명한 영화의 여러 장면들을 떠올릴 것이다. 죽을 운명이나 다름없다가 정부 비밀 조직에 의해 킬러로 다시 태어나는 장면은 뤽 베송의 '니키타'를, 긴 칼을 이용한 거침없는 액션신은 쿠엔틴 타란티노의 '킬 빌'을, 초반 1인칭 시점의 장면은 비교적 최근 영화인 '하드코에 헨리'를. 이 영화들과 다른 점은 멜로적인 요소가 상당히 많이 섞였다는 것이다. 겉으로 풍기는 이미지 - 검은색 타이트한 복장 - 은 분명히 블랙 위도우를 떠올리게 하지만 섹시함은 그다지 강조되지 않았다.

롯데 시네마의 영화 평점은 오늘 현재 7.5(10점 만점), 예매율은 4위이다. 일부 조연급 배우들의 연기가 약간 어색하고, 스토리 자체도 완벽하지는 않다. 냉혹한 살인기계인 숙희를 움직인 원동력은 복수와 딸을 지키기 위한 모성애, 그리고 사랑으로 위장하여 자기를 한갖 수단으로만 취급한 중상(신하균 분)에 대한 배신감을 오간다. 그녀를 둘러싼 인물 중 진실된 남자는 단 한사람이었다. 더 언급하면 스포일러가 될지 모르니.. 마지막 장면은 결국 개인적 차원의 복수를 마무리하는 것으로 끝나지만, 기왕이면 자기를 이용하여 이렇게 만든 국가적 권력에 대한 응징까지 이어졌더라면 좋았을 것이다. 중상의 조직이 개인적인 것인지 국가 차원의 것인지는 잘 알기 어렵지만, 이것도 포함해서다.

여러가지로 아쉬운 점도 있고 기성 영화의 장면이 자꾸 떠오르는 것은 피할 수 없으나 정성들여 만든 액션 신이 모든 것을 용서하게 만든다. 이만하면 잘 만든 영화라고 평한다.

2017년 6월 17일 토요일

CentOS 7의 첫경험

CentOS 7이 처음 나온 것은 2014년 7월이니 벌써 만으로 3년 가까운 시간이 흘렀다. ISO 파일을 내려받아 DVD-ROM을 구운 것은 바로 어제이고, 이를 컴퓨터에 처음으로 설치한 것은 오늘 오전이다(글을 쓰는 동안 자정이 지났으니 하루씩을 더해야 정확할 것이다). 나는 그동안 몇 대의 서버에서 CentOS 6을 주력으로 사용해 왔다. OS를 재설치하고 숙달하기 위해 노력하는 것은 상당히 번거로운 일이라서 CentOS 7을 접하는 것을 계속 미루고만 있었다.  귀찮음 이외에도 CentOS 7에서 달라진 것이 꽤 많아서(비교표) 관리자 입장에서는 신경을 쓸 것이 많다는 소문을 들어온 터라 지레 겁을 먹고 있었던 것도 사실이다. 엄밀하게 말하자면 나 혼자서 쓰는 서버들이고 복잡한 설정이 필요한 서비스를 하는 것도 아니기에 이 부분은 그렇게 마음에 담아둘 일은 아니었다.

OS의 업그레이드를 처음으로 생각하게 된 것은 일년쯤 전에 맞닥뜨렸던 python과 gcc의 버전 문제였다. 생명정보학쪽에서는 상당히 많은 유틸리티들이 파이썬으로 제공되는데, CentOS 6에 기본으로 따라오는 파이썬 2.6으로는 돌아가지 않는 것들이 점점 많아지는 추세이다. Linuxbrew 혹은 pyenv를 설치하면 상위 버전의 파이썬을 설치할 수는 있다.

하지만 최근 일주일 동안  nanopore sequencing 데이터의 분석용 프로그램을 검토하다가 이제는 CentOS를 버전 7로 올려야 되겠다고 결심을 하게 되었다.  Nanopore sequencing raw data(.fast5 file)를 직접 다루는 poretools가 제대로 작동하지 않는 것을 알게 된 것이다.  이 프로그램은 파이썬 2.7 이상에서 돌아가므로, pyenv를 통해서 먼저 해당 버전의 파이썬을 갖춘 다음 poretools를 실행해 보았다.  Basecalling(Albacore를 먼저 실행해서 .fast5 내부에 baseball 정보를)이나 기타 다른 수치 추출은 잘 되지만, QC와 관련한 plot을 그려내는 명령을 실행하면 파이썬의  Tk configuration이 제대로 되지 않았다는 에러 메시지가 나온다.

구글을 검색해 보고 인실리코젠 김형용 수석 개발자에게도 문의하여  tcl-devel/tc-devel(우분투에서는 다른 이름) 및 tkinter라는 패키지를 설치하면 된다는 정보를 접하여 몇 번 이를 그대로 따라서 해 보았지만 파이썬은 여전히 똑같은 메시지를 출력하였다. 한동안 시행착오를 겪으면서 알아낸 것은 yum은 시스템에 기본적으로 설치된 파이썬 버전과 동일한 tkinter만을 설치한다는 것이었다. 즉 내가 아무리 pyenv를 통해서 파이썬 2.7을 설치해 봐야 CentOS 6에서는 tkinter-2.7을 깔 수가 없는 것이었다.  tkinter-2.7은 CentOS 7용 패키지이고, 당연히 파이썬 2.7을 요구한다.

사실은 어제 DVD-ROM을 들고 서버를 숨겨둔(?) 방에 갔다가 기기에서 발생하는 열기로 너무 더워서 일단은 포기하고 사무실에 있는 다른 컴퓨터에 CentOS 7을 설치하여 테스트를 하는 것으로 전략을 수정하였다. 집에서 사용하다가 최근에 퇴역한 Dell Inspiron 660s가 테스트를 위한 희생양이 되었다. CentOS 7을 설치한 뒤 뒤이어 필요한 rpm과 poretools를 깔았다.  poretools 설치 과정에서 의존성 패키지를 자동으로 다 깔아주지를 못해서 간간이 pip를 돌려야 했다. 최종 결과는 성공적이어서 poretools를 이용하여 QC plot들이 잘 만들어졌다.  pyenv로 약간 높은 버전의 파이썬을 설치한 뒤 이를 배경으로 poretools를 깔았다. 여기서도 그림을 잘 만들어 냄을 확인하였다.

우분투나  Mac에 비교할 바는 아니지만  CentOS의 Genome Desktop 환경도 꽤 쓸만하다고 느꼈다. 아무리 선호하는 리눅스가 있다고 해도 다른 배포판(Ubuntu vs. CentOS)과 버전(CentOS 6 vs. CentOS 7)을 조금씩은 다 같이 다루어 보는 것이 유리함을 알게 해 준 경험이었다.

서버실 - 원래 용도와는 거리가 있지만 - 에는 냉방 시설이 없음에도 불구하고 올해 초에 한 대의 서버를 옮겨두었으니 컴퓨터들이 벌써 시작된 더위를 잘 버텨낼지 걱정이 된다. 온도 체크용으로 디지털 온도계를 하나 갖다 두었다.

2017년 6월 15일 목요일

Oxford Nanopore sequencing 매핑 및 시각화 연습

Real data로 매핑한 결과를 보이면 정말 좋겠으나 첫 nanopore sequencing 경험은 이를 도저히 시퀀싱이라고 부를 수 없는 처참한 결과로 끝나고 말았다. 그래서 안타깝지만 PoreCamp2016에서 사용한 에볼라바이러스 교육자료를 가지고 연습을 해 보았다.

처음으로 만들어낸 .fast5 파일에서 basecalling을 하는 것부터 쉽지 않았다. Metrichor(EPI2ME desktop agent를 통한)의 basecalling을 이제 별로 의미가 없는 것 같다. ONT 고객상담실에서도 Albacore를 사용하라고 했으니 말이다. 이것이 nanopore sequencing의 공식적인 basecaller가 되어가는 느낌이다. MinKNOW에서는 live basecallig을 하지 않는 이상(1D sequencing에서만 가능) fast5 파일 내에 염기서열 정보가 존재하지 않는다. Albacore는 이를 읽어들여서 fastq 형태의 파일을 만들기도 하고, 염기서열 정보를 새겨넣은 fast5 파일을 만들기도 한다. poretools로 QC를 하려면 염기서열 정보가 들어간 fast5 파일이 필요하다.

poretools는 매우 감동적인 도구이다. 다양한 diagnostic plot을 만들어내는 것은 물론이거니와 각종 집계와 fastq/fasta 파일 추출(basecall 결과가 수록된 fast5로부터)도 가능하기 때문이다. 그렇지만 진단용 그림을 뽑아내려면 Tcl/Tk 및 tkinter라는 것과 관련한 파이썬 설치 문제가 보통 복잡한 것이 아니다. CentOS 6.x에서 어떻게 해서든 설치를 해 보고 싶었지만(pyenv 환경) 결국은 실패하고 MinKNOW가 깔린 우분투 서버에서 겨우 성공하였다. 이것은 추후에 다시 한번 진지하게 도전해 볼 영역으로 남겨두겠다. 어쩌면 poretools을 계기로 하여 CentOS 7로 넘어가거나 혹은 Docker를 쓰는 단계로 넘어가게 될지도 모른다. Docker의 기본 개념은 여기에서 잘 설명하고 있다.

PoreCamp 교육 자료에 나온대로 ENA에서 자이레 에볼라바이러스의 MinION raw data를 몇 개 다운로드하였다. 임의로 하나를 골라서 pass 서브디렉토리 아래의 fast5 파일로부터 fasta 서열을 뽑아내었다. 다음은 poretools stats의 결과이다.
total reads 20787total base pairs 21,929,768mean 1054.98median 1013min 288max 3711N25 1060N50 1019N75 981
이를  bwa로 매핑을 하여 bam 파일로 출력, 소팅과 인덱싱을 한다. samtools 0.1.18과 1.2를 번갈아 사용하였지만 다음의 명령이 소팅 단계에서 도무지 먹지를 않는다.
bwa mem -x ont2d EM_079517.fasta Ebola2D.fasta | samtools view -bS - | samtools sort -o Ebola2D.sorted.bam -
samtools sort의 용법이 내가 알던 것과 약간 다르다. 구글을 열심히 뒤져서 이해해보려고 무던히 노력을 했지만 속 시원한 설명은 별로 없고 samtools sort 명령어 문법은 기괴하다('bizarre')는 글과 이를 수정하겠다는 개발자의 글만 발견할 수 있었다. samtools를 1.4.1로 업그레이드하여 모든 문제를 해결하게 되었다.

다음으로는 매핑 결과를 직접 눈으로 살펴보았다. tablet이나 IGV 등 몇 가지 솔루션이 있지만 나는 CLC Genomics Workbench를 이용하였다. track으로 전환한 다음 reference sequence(역시 track으로 전환)과 함께 track list를 만들어서 확대해 보았다. ONT 특유의 insertion error가 많이 보이지만 reference와 잘 맞는 consensus sequence를 볼 수 있다.
이번주 안에 실제 데이터를 이용한 성공적인 nanopore sequencing 결과를 보고 싶었는데 벌써 목요일이 다 지나가고 있다.

개발도구와 라이브러리의 버전 문제로 인하여 CentOS 7의 도입을 정말 진지하게 고민해 볼 시점이 되었다. 피할 수는 없는 대세이지만, 관리자 측면에서 너무나 많은 것이 변해서 공부를 하려면 또 얼마나 애를 먹게 될지...

2017년 6월 13일 화요일

GRUB를 이용한 리눅스 멀티부팅 꼼수 부리기

멀티부팅은 일반적으로 서로 다른 OS(예: 리눅스와 윈도우즈)를 하나의 컴퓨터에서 운영하기 위해서 쓰인다. 때로는 동일한 OS를 서로 다른 버전으로 각자 설치해 놓고 이를 선택하여 부팅하는 용도로 쓸 수도 있다.

멀티부팅을 능수능란하게 쓰려면 OS의 설치 순서가 매우 중요하다. 특히 리눅스와 윈도우를 선택적으로 부팅하려면 윈도우를 먼저 깔고 나서 리눅스를 나중에 설치한 뒤, 리눅스의 GRUB를 통해서 OS를 선택하는 것이 불문율로 여겨지고는 한다.

오늘 나는 매우 엉뚱한 시도를 해 보았다. 지난 5년간 사무용(윈도우 7)으로 쓰이다가 일선에서 물러난 데스크탑 컴퓨터가 하나 있다. 오래된 Xeon CPU에 수퍼마이크로 마더보드로 구성된, 나름대로 서버급의 컴퓨터이다. 여기에는 우분투 12.04를 설치하여 이따금 PhyloPythiaS+(PPSP) 구동용으로 사용하였다. PPSP 또는 PPS+는 metagenomic read의 taxonomic binning 프로그램이다. 최신 우분투를 기반으로 한다면 모니터의 해상도를 최적화하여 훨씬 편리하게 컴퓨터를 쓸 수 있겠지만 우분투 12.04에서 PPSP를 설치하는 것이 가장 편리하기에 개발자가 권장하는 환경을 그대로 맞추어 사용한 것이다.

얼마 전부터 Oxford Nanopore sequencing을 접하게 되면서 MinION 구동을 위한 컴퓨터가 필요하게 되었다. 바로 어제까지는 노트북 컴퓨터(윈도우 10)에 필요한 프로그램들을 깔아서 연습삼아 사용을 해 오고 있었으나 화면도 너무 작고 약간 답답한 감이 없지 않아서 우분투가 깔린 데스크탑을 사용할 생각을 조금씩 하던 중이었다. MinION 구동 프로그램은 컴퓨터의 하드웨어 성능을 좀 가리는 편이다. 그래서 Xeon CPU에 메모리 16 GB가 장착된 데스크탑에 눈이 가기 시작하였다. 여기에는 이미 우분투 12.04가 설치된 상태이고, MinION을 구동하려면 14.04가 필요하다. 어찌할 것인가? 이미 우분투 12.04가 설치된 디스크에 상위버전의 우분투를 덮어쓰지 않는 조건으로 설치를 하려니 파티션 등 문제가 복잡해진다. 아예 속 편하게 하드 디스크를 분리한 다음 새 디스크(사실은 쓰던 것)을 단독으로 연결하여 우분투 14.04를 설치하였다. 그 다음 MinION 구동에 필요한 프로그램(MinKNOW, EPI2ME Desktop Agent, Albacore basecaller)를 설치하고 configuration test를 성공적으로 진행하였다.

MinION이 연결된 모습.
그러면 필요한 OS 버전에 따라서 하드 디스크 연결을 바꾸어가면서 부팅을 할 것인가? 불가능하지는 않지만 너무나 번거로운 일이다. 디스크 두 개를 전부 연결하고 Grub 설정을 어떻게든 하면 일반적인 멀티부팅과 같은 환경이 조성될 것으로 기대하고 AskUbuntu 사이트를 뒤져서 나와 비슷한 상황에 대한 질문과 대답을 검색하여 보았다.

두 개의 하드디스크를 연결하고 무작정 어느 한쪽 우분투로 부팅을 한 뒤 sudo grub-update라고만 입력하면 될 것만 같은 생각이 들기 시작하였다.

그래, 한번 해 보는 거야. 디스크가 망가질 일은 없으니.

기대는 완벽하게 들어맞았다. 커넥터 연결, 부팅, 그리고 명령어 한줄로 모든 것이 끝났다. 기본 부팅은 우분투 14.04로 되었고, grub를 업데이트한 뒤 재부팅을 하니 너무나 낯익은 grub 화면이 뜨는 것이었다. 오늘도 이렇게 잔기술 하나를 익혔다.

실험 진화에서 유래한 여러 분리균주(동일 조상 유래)의 연구를 NCBI BioProject에 등록하는 요령

가톨릭대학교와 중앙대학교에 근무하는 동료들과 같이 수행한 공동 연구 성과가 최근 Microbial Cell Factories 저널에 게재 승인을 받았다. 대장균 W3110에 어떤 외래 유전자를 도입하여 chemostat에서 장기간 배양하여 얻은 변이주의 특성을 유전체 서열 해독을 포함하여 탐구한 것이 주된 내용이다. 대장균을 매일 플라스크에서 계대배양하면서 진화의 궤적을 추적하는 이른바 long-term experimental evolution(LTEE)은 미국 미시건주립대의 리처드 렌스키 교수로부터 시작되어 많은 생명과학자들에게 영감을 주었다. 프로젝트의 공식 웹사이트는 여기이다. 우리 연구 그룹에서는 chemostat라는 멋진 장비를 사용하고 있지만 아직도 많은 연구실에서는 50 ml 들이 삼각 플라스크(배지는 10 ml이 들어있음)에 1:100(v/v)으로 이전 배양액을 옮기는 고전적인 방법으로 실험을 진행하고 있다. 이렇게 하면 하루에 약 6.67 세대가 진척되는 것으로 계산이 된다. 물론 플라스크는 하나만 쓰는 것이 아니다. REL606(Ara-)과 REL607(Ara+) 2개의 클론을 각각 6개의 플라스크에 나누어 계대배양을 시작했으니 총 12개의 집단이 각자 다른 방식으로 진화를 해 나가는 것이다. 1980년대에 실험을 시작하여 40,000 세대에 이르렀을때 막 대중화의 길로 접어든 next-generation sequencing 기법을 접목하여 실제 유전체 서열 상의 변화와 fitness의 변화가 보조를 맞추어 나가지 않는다는 논문이 2009년 Nature에 실렸었다(Genome evolution and adaptation in a long-term experiment with Escherichia coli). 나도 이 논문에 공저자로 참여하였던 것을 매우 기쁘게 생각하고 있다.

그러면 글 도입부에서 소개한 원래의 이야기로 돌아가보자. 진화 실험을 개시한 원균주와 변이균주의 유전체 시퀀싱 raw data를 NCBI의 SRA(sequence read archive)에 등록하려 한다. 하나의 원균주에서 유래한 여러 샘플의 데이터를 어떻게 등록하는 것이 현명한지를 논하려는 것이 오늘 포스팅의 주제이다. 나는 지금까지 단일 미생물 유전체 프로젝트(monoisolate)만을 NCBI에 등록해 왔었다. 하지만 실험 진화에서는 서로 '직계' 혹은 '사촌' 관계에 있는 여러 isolate에 대한 유전체 시퀀싱을 하게 된다. 이를 하나의 BioProject로 묶는 것이 자연스럽지 않을까?

우선 서열 데이터베이스와 논문의 연결 관계를 간단하게 적어보도록 한다. 생물학적 서열을 새로 발견하여 이를 논문에서 다루려면(예: 신종 미생물의 유전체 해독 논문) 서열 자료가 DDBJ/ENA/GenBank와 같은 공공 데이터베이스에 등록이 되어 발급받은 accession number를 논문에 적시해야 한다. Microarray나 RNA-seq과 같은 발현 관련 데이터는 GEO에 등록을 해야 한다. 그러나 이번 연구의 경우는 일종의 resequencing 개념으로서 contig나 scaffold 형태로 서열을 제공할 필요는 없고 다만 논문의 본문에서 표 형태로 어떤 변이가 발생했는지를 언급하는 것으로 충분하다. 대신 sequencing raw data를 등록하여 공개하면 이를 활용하려는 다른 연구자에게 도움이 될 것이다.

렌스키 교수는 작년에 50,000 세대째를 맞는 대장균의 유전체 진화를 다룬 대규모 연구tjd과를 Nature에 발표하였다(Temp and mode of genome evolution in a 50,000-generation experiment). 2016년은 렌스키 교수가 환갑을 맞는 해이기도 하니 그 의미가 남달랐을 것이다. 12개의 집단에서 뽑은 총 264개나 되는 변이균주을 일루미나 장비로 시퀀싱을 하여 분석을 하고 또 이를 전부 NCBI에 등록을 하려니 정말 손이 많이 가는 일이었을 것이다. 우선 BioProject는 어떻게 등록이 되어있는지를 찾아보았다. 논문에서는 long-term evolution experiment with E. coli(PRJNA294072)를 언급하였는데 이는 실제로는 umbrella project이고 그 아래에 총 11개의 정규 BioProject가 존재한다. 가장 많은 데이터(224개의 SRA experiments와 BioSample)을 포함하는 PRJNA295605가 바로 작년의 Nature 논문에 직접적으로 관련된 것으로 보인다. Project scope는 monoisolate이지만 200개가 넘는 균주의 유전체 시퀀싱 데이터가 하나의 프로젝트 아래에 개별적인 biosample과 SRA experiment로 존재하는 것이다.

다음으로는 연세대학교에서 등록한 Acinetobacter baumannii 유전체 시퀀싱 데이터를 살펴보자. 이 연구는 실험 진화와는 무관하며, 환자에서 개별적으로 분리한 blaOXA-23 함유 Acinetobacter 균주에 대한 유전체 시퀀싱 결과를 등록한 것이다. BioProject PRJNA380857의 scope는 multisolate로 선언되어 있고 총 13개의 assembly가 각자 별도의 BioSample 정보화 함께 보여진다. 그렇다면 multiisolate는 어떤 경우에 선택하는 것이 옳은가? BioProject FAQ에서는 다음과 같이 설명하였다.

  • 단일 종에서 유래한 여러 개체 혹은 스트레인을 비교하는 것이 목적이라면 multiisolate를 선택하라.
  • 서로 다른 종을 연구하는 것이라면 multispecies를 선택하라.
  • DNA 혹은 RNA source가 여러 개체에서 온 것이라 해도 그 목적이 단일 genome 혹은 transcriptome의 assembly라면 monisolate를 선택하라.
이 지시를 충실히 따르자면 렌스키의 50,000 세대 유전체 연구를 위한 BioProject는 monoisolate가 아니라 multiisolate가 되는 것이 맞다. 그러면 이 글의 맨 처음에서 소개한 우리 연구 그룹의 시퀀싱 데이터는? Multiisolate로 정의한 단일 BioProject 아래에서 두 개의 BioSample과 SRA experiment(조상 균주 및 변이 균주 각각에 해당)을 선언하여 SRA 데이터 파일을 등록하면 되는 것이었다. 그러나 나는 완전히 두 개의 BioProject를 만들고 말았다. 하나의 BioProject에 복수의 BioSample이 연결될 수 있다는 것을 미처 몰랐기 때문이다. NCBI에 일단 등록한 데이터는 그 어떤 요청을 해도 수정을 해 주므로 일단은 이것을 믿어보지만, 처음부터 단일 바이오프로젝트로 묶었다면 연구의 개요 전체를 좀 더 쉽게 파악할 수 있었을 것이다. 각 균주에 대한 시퀀싱 프로젝트를 개별 바이오프로젝트로 등록할 당시에는 나중에 umbrella bioproject로 묶어줄 것을 요청할 생각을 했었던 것이 사실이다. 하지만 단일 유형(raw sequencing data)의 소량 데이터로만 구성된 바이오프로젝트를 umbrella로 묶는다는 것은 격이 맞지 않는 일이다.






2017년 6월 9일 금요일

CLC Genomics Workbench - Microbial Genomics Module의 유용한 기능(workflow)

MGM이라고도 줄여서 부르는 CLC Genomics Workbench의 microbial genomics module(매뉴얼)은 꽤 가격이 나가는 유료 모듈이다. 평소에 이 모듈이 제공하는 몇가지 툴을 이용하여 분석을 진행해 오다가 오늘부터 본격적으로 workflow를 이용한 분석 작업에 빠져들게 되었다. 연속적으로 수행해야 하는 도구의 입력과 출력을 서로 연결하여 입력물과 출력물을 정의하는 것으로 만들어지는 워크플로우는 잘만 다루면 번거로운 작업을 정말 편하게 할 수 있다. 이미 만들어진 워크플로우를 쓰는 것은 매우 쉬우나, 사용자의 요구에 맞추어 새로 작성려면 익숙해지기까지 약간의 노력을 필요로 한다. 이번의 분석 작업을 계기로 워크플로우의 신규 작성과 수정에 관한 경험을 쌓지 않을까 기대를 하고 있다.

물론 이런 마음가짐을 갖기 직전에는 '왜 이렇게 편한 것을 진작에 익혀서 쓸 생각을 하지 못했을까!'하는 안타까운 마음이 있었다.

100건이 넘는 어떤 감염성 세균 유전체의 MiSeq sequencing data를 가지고서 트리를 그리고 여기에 메타데이터를 입혀서 적당히 장식을 하는 것이 이번 과업의 목표이다. 늘상 하듯이 mapping을 하고 variant를 추출하여 SNP tree를 그려 놓은지는 꽤 시간이 지났다. 메타데이터를 CLC에서 다루는 것이 아직 익숙하지 않아서 이를 가장 나중에 해야 할 일로 미루어 놓은 것이 현명하지 못한 선택이었다. CLC의 기능을 이리저리 살펴보니 메타데이터 테이블을 잘 정의하여 놓은 뒤 분석 작업을 시작하는 것이 훨씬 현명하다는 생각이 들었다.

이러한 분석 기능은 NGS core tools를 제외하면 전부 MGM의 Typing and Epidemiology(beta) 섹션에 포함되어 있다. 구글을 뒤지면서 적당한 튜토리얼이 없는지를 찾아보았다. Typing and epidemiological clustering of common pathogens (beta)이라는 튜토리얼을 찾아서 천천히 읽어보았다. 아니? 필요한 모든 작업 컴포넌트를 한번에 실행할 수 있는 워크플로우가 이미 존재하는 것 아닌가?


Type Among Multiple Species를 쓰면 되는 것이었다. 시퀀싱 샘플이 다양한 종으로 이루어진 것은 아니니 몇 개 종의 representative genome만을 골라서 reference DB를 만들고, 필요한 MLST scheme과 resistance gene을 받아 놓은 다음 튜토리얼에 나온 그대로 설정만 하면 간단하게 모든 작업이 이루어진다. 단, 트리를 그리는 것은 이 결과를 가지고 따로 실행하면 된다. 그리고 설명과는 다르게 Type a Known Species 워크플로우를 실제로 열어보면 de novo assembly - find resistance로 이어지는 가지는 포함되지 않았다. 이는 내가 직접 수정하면 될 것이다. 다음 그림은 Type Among Multiple Species 워크플로우 전체의 다이어그램이다. 상당히 복잡한 모습이 마치 DB schema를 보는 듯하다. 그 존재를 전혀 모르고 있었던 Local Realignment(in NGS core tools)가 두번이나 연속하여 실행된다. InDel & Structural Variant를 먼저 찾은 뒤 이를 참조하여 두번째의 alignment를 하는 것이다. 만약 내가 재래식(?) 작업 방법만 고집했다면 이러한 탁월한 기능이 존재하는지를 아예 모르고 살았을지도 모른다.



30분 정도 작업이 진행된 지금 5개째의 샘플에 대한 분석이 진행되는 중이다. Result metadata table에 결과가 차곡차곡 쌓여 나가는 것이 재미있다. 주말이 지나면 모든 샘플에 대한 결과가 나올 것으로 예상한다. 오염된 샘플에 대한 사전 정보를 이미 갖고 있으므로 실제 워크플로우의 결과를 비교해 보면 흥미로울 것이다.

Oxford Nanopore sequencing 첫 시도는 실패로 끝나다

오랜 기간 준비를 하여 큰 기대를 갖고서 첫 샘플을 올렸다. 그러나 결과는 처참한 실패였다. 2D lambda control experiment kit(SQK-LSK208)로 만든 것이라서 소중한 실제 샘플을 허무하게 낭비하지는 않았다. 모든 여건이 최적의 상태는 아니었다. 필요한 반응액과 소모품 등이 Oxford Nanopore에서 권장하는 '바로 그것'은 아니었다. 그렇다 하더라도 데이터 처리 쪽에서는 나름대로 오래 공부를 하여 준비하느라고 애를 썼는데 아직도 그 과정에서 아리송함을 갖고 있다는 것이 내 자존심을 많이 건드렸다.

Oxford Nanopore Technologies라는 회사명을 줄여서 ONT라고 부른다. 실험 노트 파일을 열어보니 OTN으로 잘못 타이프를 한 것이 눈에 뜨였다. OTN, OTZ, OTz. OTL... 어디서 많이 본 약자이다. 아, 그렇구나! 좌절한 모습을 영문자로 표현한 것이었다. 바로 지금 나의 모습을 그대로 보여주는 문자열이다.

다양한 배리에이션은 여기에서: http://moyaa44.blogspot.kr/2011/02/otl.html
EPI2ME desktop agent가 돌아가는 방식도 아직 완벽하게 이해하지 못한 상태이다. 처음에 Input Directory를 개별적인 run folder로 설정하는 바람에 새로운 시퀀싱 결과가 생성되어도 이를 자동적으로 업로드하지 못하는 우스꽝스런 상황이 되고 말았다. 문제는 이것을 고칠 방법을 모르겠다는 것이다. 그저 단순하게 C:\data\reads로만 해 두면 될 것을.

Live basecall은 1D 시퀀싱에서만 지원한다고 하여 basecall 없이 fast5 파일을 만들었다. Metrichor(EPI2ME) 서비스를 통한 basecall을 하지 않았다 해도 다른 방법으로 어떻게든 될 것이라 생각을 했던 것이다. 그래서 third party basecaller로는 잘 알려진 poretools를 리눅스에 설치하여 fast5 파일을 공급하니 유효한 시퀀스가 전혀 없다고 나온다. 이런? 프로그램 설치를 잘못했나? 패키지에 포함된 샘플 read에 대해서는 결과가 잘 나오니 그렇게 말하기는 어려웠다. 이번에는 ONT 커뮤니티 사이트에서 보급하는 basecaller인 Albacore를 설치하여 MinION을 구동한 윈도우 10 컴퓨터에서 실행을 하여 fastq 파일을 뽑아내었다. 하나의 pore를 DNA 가닥 하나가 통과하면서 얻어진 염기서열 정보에 해당하는 하나씩의 fast5 파일 여러개를 묶어서 fastq file하나가 만들어지는 것은 꽤 마음에 든다. 얻어진 Fastq file을 CLC로 임포트하여 read length 분포와 quality를 보았다. 처참하다! Lambda DNA sequence에 대한 매핑 결과는 물론 말할 것도 없다. Nanopore sequencing read에 좀 더 특화된 mapper를 쓰지 못한 탓도 있겠지만 근본적으로 이건 시퀀싱이 아니다!

다음으로는 EPI2ME에 업로드한 결과가 어떻게 되었는지를 살펴보았다. 웹사이트에서는 아예 리포트가 나오질 않았고, 다운로드한 read는 전부 fail 디렉토리에 존재한다. 이걸 보면 input directory를 띨띨하게 만들긴 했어도 클라우드쪽이 분석 작업은 잘 돌았다는 뜻이다. 그러나 결과는 매우 좋지 않다! poretools를 이용하여 fast5 파일 내에서 염기서열 이전의 정보를 뽑아내 보았으나 아무것도 반환되는 값이 없다. 

Albacore가 사기를 치지는 않았을 것이니 분명히 미약하나마 염기서열 신호가 나온 것으로 여겨진다. 다만 멀고 먼 최적화의 길이 앞에 펼쳐져있을 따름이다. 좀 더 경험이 쌓이면 MinKNOW 작동 화면만 보고서도 '아, 이번 러닝은 망했구나!'하고 판단이 될 것이다. 국내에는 대리점도 아직 없고, Nanopore community에 직접 질문을 올려서 다른 사용자가 답을 주기를 기다려야 하는 현실에서 troubleshooting을 하기란 참으로 난감하다. 이러한 여건에서 어떻게 KAIST 조병관 교수팀에서는 이미 1년 전 Scientific Reports에 Analysis of the mouse gut microbiome using full-length 16S rRNA amplicon sequencing이라는 논문을 냈는지 신기하기만 하다. 

수십년 전 대학원생 시절로 돌아가서 최초의 plasmid prep을 하다가 깨진 염색체 DNA만 길게 끌린 전기영동 사진을 얻은 기억을 되살리자. 누구나 실수는 할 수 있는 법이니...

2017년 6월 12일에 추가한 글


양질의 시퀀싱 결과를 만들어냈다는 자랑스런 글을 보니 배가 아프다! 이러다가 long read 만들기 경연대회라도 열리는 것은 아닌지?

2017년 6월 4일 일요일

건반을 고치고 싶다(6) - 부품의 배송이 늦어지다

Korg X2 music workstation의 LCD 표시창에 맞게 절단된 EL 백라이트를 구매하면서 예비용으로 10x10cm의 EL sheet를 구동 회로와 함께 알리익스프레스에서 구매하였다(링크).  만약 먼저 구매한 백라이트에 문제가 있으면 이것을 크기에 맞게 잘라서 사용할 생각이었다. 배송이 너무 늦어서 혹시 분실된 것이 아닌지 걱정이 들 무렵에 겨우 배달이 되었다. 다음의 배송 추적 기록을 보자.


5월 17일에 셴젠 우체국(코드명 CNSZXA, 전체 코드는 여기 참조)에 도착한 물품은 5월 31이 되어서야 한국에 들어왔다. 우편물이 비행기 안에서 14일씩 있었을 것 같지는 않다. 아마 Shenzhen 우체국 창고 어딘가에서 한동안 대기하고 있다가 뒤늦게 비행기를 타고 온 것이 아닐까 한다.

그러면 Fatar keyboard controller를 고치기 위한 rubber key contact(링크)는 비슷한 시기에 ebay에서 주문을 넣었음에도 불구하고 아직도 오질 않는다. 나의 ebay 경험으로는 아무리 길어도 18일 정도면 물건이 도착하였었다. 이 물품은 5월 10일 미국 아리조나 세도나의 USPS 사무실에 접수되어 5월 13일에 LA까지 온 것으로 되어있다. 배송 상태는 여전히 IN TRANSIT이다. 예상 배송 기한은 이미 지난지 오래되었다.

아직 LA의 USPS 사무실에 처박혀 있는지, 아니면 비행기를 타고 오는 중인지, 혹은 재수가 없어서 선편으로 오는 것인지 알 수가 없다. 우편물 등급은 가장 싸지만 매우 느린 First-Class Package International Service 되겠다. 판매자에게 배달이 너무 늦다고 불평을 했더니 최대 4-6주 정도 기다려 달라는 답장을 받기는 했었다.

혹시 분실된 것은 아닐까? 인터넷을 뒤지면 터키, 독일, 폴란드 등 다양한 국가에서 비슷한 물품을 판매한다. 분실된 것이 확실하면 환불을 요청하고 차라리 다른 곳에 다시 주문을 내고 싶은 마음이 굴뚝같다.

누구를 위한 의전(儀典)인가?

의전(儀典, protocol)이란 네이버 사전에 의하면 '행사를 치르는 일정한 법식'을 말한다. 일상생활에서는 무엇인가를 의전에 맞추어 할 일도 없고, 의전이라는 낱말을 쓸 일도 별로 없다. 내가 영단어로서 protocol이란 말을 처음 접한 것은 대학교에 들어와서 전공(생물학) 실험 과목을 수강하면서부터이다. 생물학에는 실험 단계에서 어떤 조작을 해야 하는지 그 순서와 방법을 상세하게 적어놓은 것을 실험 프로토콜이라고 부른다. 예를 들자면 이런 것이다.

  1. 시료를 상온에서 3,500 rpm으로 원심분리한다.
  2. 상등액을 새 시험관으로 옮긴다.
  3. Reagent A를 15 ml 가하여 vortex mixer에서 혼합한다.
적어놓고 보니 요즘 널리 쓰이는 '레시피', 즉 조리법과 거의 같은 성격의 문서가 된다. 이는 생물학 실험이 일종의 요리를 만드는 것과 유사하기 때문이다. 컴퓨터 공학을 전공하는 사람에게 프로토콜이란 전혀 조리법이라는 느낌이 들지 않을 것이 분명하다. 무술인이 대련을 준비하면서 합을 맞추는 것도 프로토콜이라는 말로 표현할 수 있을지 모르겠다.

정치와 권력이 오고가는 세계에서 의전이란 말은 그 딱딱한 본연의 뜻을 발위하게 된다. 손님이 오면 어떤 방식으로 맞이하여 어떤 동선으로 이동하도록 안내하고, 어떤 자리에 앉히고(상석이 어디인가?)... 이런 것과 관련한 절차 또는 양식을 의전이라고 부른다. 법률로 규정된 것은 아니지만 외교 현장에서는 매우 중요한 문제가 된다. 

정치 또는 외교와 관련이 없는 분야라 하더라도 권력에 따른 위계질서가 중요시되는 사회에서는 의전 역시 중요하다. 우리가 흔히 예절 또는 에티켓이라고 생각하는 것이 극단으로 치달아서 '갑질'로 막 넘어가려는 그 경계에 바로 의전 문제가 존재한다. 흔히 의전이라 하면, 행사를 준비하는 사람들이 윗분들을 모시고 대하는 순서 또는 방식에 관한 것이라 생각하기 쉽다. 하지만 소위 윗분들이 관례라는 것을 내세워서 어떤 정형화된 행동을 한다면 그것 역시 의전화된 양식으로 - 물론 부정적인 의미이다 - 보아도 무방할 것이다. 대학 교수로 근무하는 어느 친구에게 들은 이야기이다. 어떤 행사가 열리면 내외빈이 축사를 한다(축사는 대개 행사 진행하는 곳에서 알아서 준비한다). 그러고 나서 본 행사가 시작되기 전, 그 내외빈은 누구나 알아볼 수 있게 벌떡 일어나서 퇴장한다. 아무나 그렇게 할 수 있는 것은 아니고, 그 자리에 초청된 내외빈 중에서 가장 높은 사람만 가능하다. 따라서 행사를 준비하는 입장에서는 격이 맞는 손님들을 초청하고, 그 중에서도 누가 가장 높으냐에 대해서 다툼이 벌어지지 않도록 미리 조정을 해 놓아야 능력이 있는 사람으로 인정을 받는다. 워낙 바쁘고 높으신 분이니 초청한 자리에 와서 축사 한마디 하시는 것만으로도 감지덕지이고, 이제 다음 일정을 위해서 부득이하게 자리를 떠야 한다. 일반인이라면 행사에 방해가 되지않게 조용히 퇴장하는 것이 당연하겠으나, 이 높으신 분들은 '중요한 이 몸이 나가는 것'을 온 청중에게 보여야 한다. 아니, 아주 선명하게 과시하고 떠나야 한다. 이렇게 하는 것이 관행이라고 한다.

새로운 정부가 출범하면서 격식을 차리지 않는 문재인 대통령의 모습이 신선한 바람을 일으키고 있다. 노무현 정권 당시에는 대통령의 격에 어울리지 않는 언행을 한다고 그렇게 비난을 받던 일들이 이제는 당연하게 받아들여진다. 그만큼 시민들의 의식이 바뀌었다고 볼 수 있다. 요즘 경향신문에서는 [의전공화국]의 그늘진 단면을 보여주는 기획 기사를 연재하는 중이다(링크). 의전은 국가간 외교 의례와 관련한 영역에서만 엄격히 지키는 것으로 충분하다. 중요한 것은 의전이란 당사자가 갖고 있는 권한(정치적 영역이라면 국민으로부터 위임된)을 위해 주어지는 것이지 사람 자체를 위해 존재하는 것이 아니라는 것이다. A라는 공화국 대통령을 대하는 의전은 A라는 공화국 국민을 위한 것이지 대통령 개인을 위함이 아니라는 것이다. 이것을 이해한다면 과도한 의전을 둘러싸고 벌어지는 갈등은 대폭 줄어들 것이다. 그리고 일반 단체나 개인을 대상으로 하는 영역에서는 더 이상 의전을 운운하지 말고 상식과 에티켓 수준에 따라서 행동하는 것이 합리적일 것이다.

2017년 5월 31일 수요일

Oxford Nanopore의 MinION 사용을 준비하면서

Nanopore sequencing이란 단일 가닥의 DNA가 단백질 포어를 통과하면서 나타나는 미세한 전위차이를 이용하여 염기서열 정보를 실시간으로 읽어내는 기술을 말한다(수정: 걸려진 전압은 180mV 정도로 일정하다. 실제로는 단일가닥 DNA 분자가 구멍을 통과하면서 염기에 따라서 전류량이 미세하게 변하는 것을 측정한다). 컴퓨터 그래픽으로 표현한 작동 원리를 이곳에서 감상해 보자. 우리 연구팀에서 구매한 것은 컴퓨터의 USB 3.0 포트에 꽂아서 사용하는 MinION이라는 제품이다. 구글에서 minion으로 검색을 하면 주로 나오는 결과는 이러하다는 것이 함정이지만.



원래 오늘 러닝을 할 예정이었으나 여러 사정으로 인하여 내일로 미루어졌다. 시간적 여유가 생겨서 컴퓨터를 점검하던 중, MinKNOW 프로그램이 정상작동을 하지 않는 것을 발견하였다. MinKNOW는 최신 사양의 컴퓨터가 꼭 필요한 것은 아니지만 윈도우를 갓 설치한 깨끗한 상태가 아니면 설치가 잘 안된다. MinION 장비 구동을 위한 컴퓨터의 사양은 다음과 같다.

출처: https://nanoporetech.com/sites/default/files/s3/2016-10/Computer%20requirements%20v4.2%20Sep2016.pdf

MinION Compatibility 프로그램을 먼저 실행해서 작동 소프트웨어의 설치가 가능하다고 판정을 내려도 정작 MinKNOW 단계에서 다음과 같은 오류와 함께 설치가 더 이상 진행되지 않는다. 구글을 뒤지면 레지스트리를 건드려서 해결할 수가 있다지만 너부 복잡한 방법이라 엄두가 나지 않았다.


이러한 이유로 사양이 매우 좋은 데스크탑 컴퓨터를 뒤로하고 비교적 최근에 구입한 신선한 노트북 컴퓨터에 프로그램을 설치하였었다. 그러고나서 한달 반쯤이 지났을까? Configuration test를 다시 실시하기 위하여 MinION Mk 1B를 컴퓨터에 연결하고 MinKNOW를 실행하니 에러 메시지가 뜨는 것이었다. 소프트웨어를 업데이트하면 나아질까 싶어서 최신본을 받아서 설치를 하려는데 바로 위에서 보인 익숙한 메시지가 나타나는 것이다. 그 사이에 노트북 컴퓨터에 지저분하게 별로 깐 것도 없는데 벌써 이렇게 되었단 말인가? 노트북의 초기화 말고는 별다른 해결 방법이 생각나지 않았다. 평소에 대부분의 업무를 데스크탑에서 하기에 노트북에는 백업할 자료가 하나도 없다는 것이 다행이었다. 아무런 주저함이 없이 초기화를 실시하였다.

이번에는 제대로 화면이 나와야 한다. 그렇지!! Configuration test를 통과하였다. 내일은 platform QC를 해서 포어가 몇 개나 살아있는지를 확인한 뒤 시퀀싱 러닝을 하면 된다. 하지만 이 노트북 컴퓨터는 이제 범용으로 쓰는 것을 포기해야 할 것 같다.


나의 맥북 프로에서는 MinION이 인식되지 않는다. macOS 버전이 Sierra라서 그런가? 아직은 가야 할 길이 멀다. Cloud 서비스를 이용한 실시간 분석과 자체 컴퓨터에서 실시하는 local 분석의 개념 차이를 이해해야 하고, 무척 빠른 속도로 바뀌는 프로토콜도 따라잡아야 하니 말이다. 어제 Oxford Nanopore의 Associate Director인 James Brayer가 직접 방문하여 소개한 자료를 보면(행사 기록 사진) 제품들이 너무나 귀엽고 앙증맞아서 갖고 싶다는 욕구가 인다. 특히 microfluidics를 사용하여 시료를 자동적으로 섞는 장비의 비디오는 정말 환상적이었다.

2017년 5월 28일 일요일

건반을 고쳐보자(5) - Korg X2의 액정 백라이트 교체

Fatar 키보드 콘트롤러의 rubber key contact는 판매자가 5월 11일쯤에 USPS로 보냈다는데 아직까지도 내 손에 들어오지 않았다. 2주 정도면 넉넉하게 배송이 될 것으로 예상한 것에 비하여 너무 오래 걸린다. 만약 한 달이 넘어가도록 오지 않으면 본격적인 문제 제기 혹은 환불을 요청하기로 하고 가장 먼저 입수된 Korg X2 Music Workstation의 액정용 EL 백라이트부터 갈기로 하였다.

침대 위에 엎어놓고 나사를 풀기 시작한다. 나사가 너무 많아서 드라이버로 일일이 돌려서 풀어내려니 손이 아프다. 전동 드라이버가 아쉬운 순간이다.



맨 아래쪽에 위치한 회로판(메인보드)을 분리하고 정전기 쉴드로 여겨지는 보호막을 열어야 비로소 액정 디스플레이 회로의 뒷면이 드러난다.


귀퉁이의 나사를 풀었다. 오른쪽에 보이는 I/O 커넥터를 분리하는 방법을 몰라서 그대로 작업을 진행한다.


새 백라이트와 같이 사진을 찍었다. 전원쪽 연결선 두 개의 납땜을 녹여서 떼어냈으나 EL 백라이트는 아무리 잡아당겨도 나올 생각을 하지 않는다. 전체를 둘러싸고 있는 금속 프레임의 고정 부분을 롱 노우즈 플라이어로 펼쳐서 고정 프레임과 액정, 그리고 회로기판을 분리하였다.


낡은 EL 백라이트는 양면 테이프로 붙어 있었다. 사진은 아직 기판에서 분리하기 전의 모습이다. 새것과는 바탕 색이 매우 다르다. 


새 EL 백라이트를 납땜하는 것은 별 어려움이 없었다. 단지 리드선의 위치가 회로판의 패턴과 딱 맞지 않아서 약간 구부려서 납땜을 하였다. 디스플레이 뭉치를 재조립할 때에는 액정을 거꾸로 끼우지 않도록 주의해야 한다. 백라이트가 닿는 후면과 실제 표시가 나타나는 전면은 쉽게 구별할 수 있으나 위아래를 반대로 끼울 가능성이 있다. 표시면을 잘 살펴서 혼동하지 않도록 하자. 재조립을 마치고 전원을 넣었다.


화면이 밝게 나타났다. 원래 X2 액정 백라이트는 무슨 빛이었더라? 녹색이었나? 이젠 그것조차 기억이 나지 않는다. 좀 더 크게 화면을 담아보자.


사진으로 보니 표시창 매부 여기저기에 검은 점들이 보인다. 재조립 전에 투명창 안쪽을 닦아냈으면 좋았을 것을. 약간의 아쉬움이 있지만 큰 숙제 하나를 덜었다.


2017년 5월 25일 목요일

비닐봉지를 먹어치우는 나방 애벌레

우리가 흔히 비닐봉지라고 부르는 것은 주로 폴리에틸렌으로 만들어진다. 내가 사는 아파트에서는 일주일에 한번 재활용 쓰레기 분리수거를 실시하는데, 항상 산더미같이 쌓이는 물품을 보면 이를 수거해서 어떻게 처리를 할지 늘 경이롭기만 하다. 점점 늘어나는 재활용 쓰레기 중 식품 포장재의 양도 엄청나다. 아직까지는 그 무게가 많이 나가지 않으나 부피가 너무 커서 문제다.

이러한 비닐봉지를 갉아먹는 나방 애벌레가 발견되어 흥미를 끌고 있다. 꿀벌부채명나방(학명: Galleria mellonella)은 벌집에 알을 낳는데, 여기에서 부화한 애벌레가 벌집의 주요 성분인 밀랍(wax)를 먹어 소화시킨다. 따라서 양봉업에서는 아주 골칫거리인 곤충이 되겠다. 이 유충이 폴레에틸렌으로 이루어진 비닐봉지를 먹는다는 것은 비교적 최근에 알려졌다. 밀랍과 폴리에틸렌이 구조적으로 비슷해서 가능한 일로 풀이된다. 이러한 분해 기능이 꿀벌부채명나방 자체가 갖고 있는 것인지, 혹은 이 곤충의 장내에 서석하는 미생물에 의한 것인지는 아직 명확하지 않다. 연구 성과가 소개된 것은 지난 4월이다.

Polyethylene bio-degradation by caterpillars of the wax moth Galleria mellonella. Current Biology 27(8):R292, 2017.
[국내 뉴스] 환경 파괴 주범 비닐봉지 먹어치우는 애벌레 발견



원래 이 나방의 유충은 감염병 연구의 모델로 생물학계에서 널리 쓰이고 있다. 키우기가 쉽고 사람의 체온 정도에서 가장 잘 자라기 때문에, 유충에 병원성 미생물을 주입하여 반응을 관찰하는 것이다. 곤충이라서 면역체계는 사람과 매우 다르지만, 선천적 면역체계를 이용한 여러가지 연구에 쓰인다. 우리 연구 그룹에서도 이를 사용한 감염병 연구를 수행하고 있다. 그러한 꿀벌부채명나방이 폐기물 처리라는 전혀 다른 분야에서 가능성을 보일 줄은 누가 알았을까? 만약 이 연구가 성공한다면 쓰레기 처리 분야에서 획기적인 일이 될 것이다.

비닐봉지를 먹고 자란 수많은 애벌레는 무엇에 쓰나? 예전에 잠시 이런 상상을 한 적이 있다. 모든 생활쓰레기를 먹어치우는 '개'가 있다고 하자. 그런데 그 개가 엄청난 '똥'을 싼다면? 그 똥을 처리하는 것이 더 어려운 문제라면? 요즘 곤충을 새로운 식량 자원으로 쓰려는 움직임이 늘고 있다. 비닐봉지를 먹여 키운 꿀벌부채명나방의 유충은 새로운 바이오매스로서 활용할 방법을 찾는 일이 그 다음 숙제가 될 것이다.

2017년 5월 24일 수요일

[R] prop.table()을 이용한 비율 계산

지극히 초보적인 수준의 R 코드를 가지고 잠시 혼란에 빠졌다가 해결책은 찾은 이야기를 기록으로 남기고자 한다. 다음 그림의 (A)와 같은 가상 데이터를 조작하여 열(B) 혹은 행(C) 합계에 대한 proportion으로 나타내는 것이 원래의 작업 목표였다. 각각의 계산에서 분모로 들어갈 수치들은 표 (A)의 노랑색(column 합) 혹은 파랑색(row 합) 마진에 표시되어 있다. 실제 데이터는 shotgun sequencing 방식으로 얻은 metagenome read의 taxonomic composition이다. 참고한 사이트는 Making heatmaps with R for microbiome analysis이다. 이 예제에서는 각 샘플의 데이터를 row로 나타나는 반면 나는 column으로 표현하고자 하였다. Microarray data analysis 사례에서 흔히 나타나듯 서로 다른 샘플을 컬럼으로 나타내는 것이 매우 일반적이다.


먼저 데이터 매트릭스를 만들어 보겠다.
> x = cbind(c(2,5,3), c(9,7,4), c(4, 3, 13))
> colnames(x) = c("A", "B", "C")
> rownames(x) = c("John", "Tom", "Bart")
> x
     A B  C
John 2 9  4
Tom  5 7  3
Bart 3 4 13
내가 원하는 proportion 수치는 각 셀의 값을 컬럼 합으로 나누는 것이다. 따라서 위의 표 (B)의 결과를 얻는 것이 목표였다. 예제 사이트에서는 샘플이 서로 다른 row로 배열되어 있으므로 row 합으로 나누는 것을 기준으로 설명하였다. 여기에서 사용된 명령은 data.prop <- all.data="" colsums="" div="" rowsum="" rowsums="">
> x.prop = x/colSums(x)
> x.prop
        A    B    C
John 0.20 0.90 0.40
Tom  0.25 0.35 0.15
Bart 0.15 0.20 0.65
> x.prop.2 = x/rowSums(x)
> x.prop.2
             A         B         C
Jone 0.1333333 0.6000000 0.2666667
Tom  0.3333333 0.4666667 0.2000000
Bart 0.1500000 0.2000000 0.6500000
전혀 의도하지 않은 결과가 나온다. 처음에는 예제가 잘못 짜여진 것이 아닌가 의심을 했었다. 일단은 인터넷 검색을 통해 prop.table() 함수가 (B) 및 (C) 모두의 경우에 쓰일 수 있음을 알았다. margin=2로 설정하면 column 합에 대한 비율을, margin=1로 두면 row 합에 대한 비율이 나온다.
> x.prop = prop.table(x, margin=2)
> x.prop
       A    B    C
John 0.2 0.45 0.20
Tom  0.5 0.35 0.15
Bart 0.3 0.20 0.65
> x.prop = prop.table(x, margin=1)
> x.prop
             A         B         C
John 0.1333333 0.6000000 0.2666667
Tom  0.3333333 0.4666667 0.2000000
Bart 0.1500000 0.2000000 0.6500000
물론 이보다 훨씬 미련한 방법을 이용하여 계산하는 것이 가능하다. 그러나 prop.table()이 가장 완벽한 해답을 제공한다. 그러면 왜 x/colSums(x)가 원하는 결과를 내지 못했는지를 알아보자. 매트릭스에 대한 연산을 왜 조심스럽게 해야 하는지도 이번 논의를 통해 알 수 있을 것이다.

매트릭스의 모든 셀에 같은 값을 더하거나 빼는 것은 대단히 쉽다.  그러나 row 혹은 column 단위로 계산을 할 때에는 매우 조심해야 한다. 원래 목표했던 것은 (10, 20, 20)을 각 컬럼의 값에 대해 나누는 것이었다. 즉 첫번째 컬럼A/10, 컬럼B/20, 컬럼C/20이 계산되기를 바랐던 것이다. 그러나 매트릭스를 벡터로 나누면 R은 그렇게 행동하지 않는다. John-A는 10으로 나누고,  Tom-A는 20으로 나누고, Bart-A는 20으로 나눈다. 그 다음으로는 컬럼 B로 넘어가서 각 셀에 대해서 같은 값이 아닌 (10, 20, 20)을 분모로 할당하여 나누고 또 컬럼 C로 넘어가는 것이다.  다시 말하자면 A, B, C 컬럼의 값을 일렬로 세운 다음 (10, 20, 20), (10, 20, 20), (10, 20, 20)..의 값을 순차적으로 대입하여 나눗셈을 한 것이다. rowSums() 함수가 원하는 값이 나왔던 것은 값을 대입하는 순서와 잘 맞아떨어졌기에 가능했던 것이다. 기억을 돌이켜보니 예전에 수강했던 R 강좌에서 이러한 내용을 다루었던 것 같다. 병합된 table은 low frequency row를 제거한 뒤 hclust2로 heatmap을 그리면 된다.

비록 시간이 많이 걸리더라도 실수를 통해 배우는 것이 가장 확실한 방법이 된다. 왜냐하면 같은 실수를 다시 반복하지 않을테니까 말이다.

2017년 5월 23일 화요일

dRep을 이용한 metagenome data set의 중복 제거

동일한 생태계에서 수집한 관련성 있는 메타게놈 샘플을 shotgun 방식으로 시퀀싱을 하는 것은 요즘 매우 흔히 볼 수 있는 연구 방법이다. 예를 들자면 어떤 항생제를 투여한 뒤 장내 microbiome을 일정 시간 간격으로 샘플링하여 분석함으로써 외부에서 주어진 변동 요인(항생제)에 따라서 미생물 군집이 어떻게 변화하는지를 살펴 보는 것이다. 일반적으로 거의 동일한 미생물들이 단지 그 비율만 샘플링 시점에 따라서 달라질 것임을 예상할 수 있다.

실제 분석에서는 각 샘플에서 생성된 read를 모두 합쳐서 조립을 한 다음(co-assembly) 이를 바탕으로 각 샘플 read를 다시 매핑하는 방법을 많이 사용한다고 들었다. 이러한 방법에서는 데이터의 규모가 커지고 이에 따라서 복잡성이 증가하며, 동일 species의 서로 다른 strain이 존재하면 fragmented assembly를 유발하게 된다.

그렇다면 각 샘플을 독립적으로 조립하는 것이 유리할지도 모른다. 그러나 이렇게 얻어진 assembly간의 중복을 제거하는 de-replication 과정이 필요하게 된다. 뿐만아니라 각 replicate set에서 가장 품질이 좋은 게놈 데이터를 선발하는 일도 필요해진다. UC Berkeley의 Banfield lab에서는 이러한 필요성을 충족시킬 수 있는 새로운 도구인 dRep을 bioRxiv에 발표하였다(학과 소식 사이트). 논문의 제목은 "dRep: A tool for fast and accurate genome de-replication that enables tracking of microbial genotypes and improved genome recovery from metagenomes(링크)"이다.

이 도구는 당장 나에게도 큰 도움이 된다. 입원 환자에게서 분리된 소위 'emerging pathogen'에 해당하는 어떤 세균의 MiSeq sequencing data를 분석할 일이 최근 생겼다. 총 112개 스트레인의 시퀀싱 결과로서 단일 프로젝트로 나에게 주어진 것으로는 가장 큰 규모이다. 그중에는 분명히 엉뚱한 균주도 몇 개는 섞여있을 것이다. 이를 점검하는 용도로 dRep을 활용하자는 것이다. 실은 reference sequence 하나에 대해서 112개 균주의 데이터를 1:1로 비교하면 별로 많은 시간이 걸리지는 않는다. 하지만 각 샘플 간의 거리는 알기 어려워진다. pyani를 돌려서 ANI(average nucleotide identity) matrix를 만드는 것도 가능하나, 모든 샘플 사이에서 1:1 비교를 해야 하므로 나의 소박한 컴퓨터로는 엄청난 시간이 걸린다. dRep도 pair-wise 비교를 하는 것은 마찬가지이다. 그러나 빠르기로 소문난 Mash를 이용하여 primary cluster를 신속하게 만든 뒤, MUMmer를 이용하여 각 cluster 내에서 ANI를 계산하는 전략을 취하고 있다.

설치는 생각보다 까다로왔다. 필요로 하는 다른 프로그램의 목록은 별로 길지 않으나 이를 설치하려면 또 다른 dependency가 있어서 꼬리에 꼬리를 무는 느낌이다. 게다가 dRep은 파이썬 3.x이 필요한 반면에 같이 실행되는 checkm 파이썬 2.x이 필요하여 pyenv를 잘 활용해야만 한다. 내 리눅스 시스템은 linuxbrew와 pyenv 등으로 뒤죽박죽이 된 상태라서 계정을 새로 만들어가면서 시행착오를 겪은 끝에 겨우 테스트 러닝에 성공하였다. 설치 방법을 문서로 정리해야 하는데 하도 실타래처럼 꼬여서 잘 기억이 나질 않는다... 패키지에 포함된 예제를 통과했으니 다음은 22개 genome set를 투입해 보았다. Primary 및 secondary cluster의 덴드로그램을 소개한다.


checkm은 genome completeness & contamination을 점검하는 도구이다(소개).

2017년 5월 21일 일요일

Dell Inspiron 660s의 은퇴(2012-2017)

지메일에 남아있는 Dell Inspiron 660s의 구매 내역을 찾아보았다. 주문 내역서가 만들어진 것은 2012년 10월 4일. 아직 만 5년은 되지 못했다. 경제적 상황이 좋은 경우 업무용 PC의 교체 주기는 보통 3-4년, 가정용은 5-6년으로 보는 것이 일반적이다. 요즘은 운영체제가 많이 좋아져서 교체 주기가 과거보다 늘어난 추세이다(인텔 CEO "PC 교체주기 5~6년으로 더 늘어났다"). 나의 경우는 업무용이나 가정용 모두 5년 정도에 교체를 하는 편이다.

Dell Inspiron 660s를 2012년에 구입할 당시에는 윈도우 7이 설치된 상태였다. 2103년 초에 윈도우 8 Pro K를 프로모션 가격 16,300원에 구입하여 써 오다가 나도 모르는 순간에 윈도우 10으로 바뀌게 되었다. 비록 매우 저렴한 가정용 PC 제품이지만 윈도우 7을 쓰던 당시에는 별 불편한을 느끼지 못하고 그런대로 잘 사용하였다. 그러다가 상위 윈도우로 바뀌면서 속도가 점점 느려지는 것을 경험하였다. 지난주에는 아예 부팅이 되지 않는 상태가 발생하여 본체 뚜껑을 열고 커넥터를 한번씩 뺐다가 꽂는 것으로 문제가 해결되었다 생각했으나(먹통이 된 Dell Inspiron 660s 되살리기) 그 상태는 오래 가지를 못하고 또다시 부팅 불능 상태가 되었다. 하다못해 윈도우 매체를 ODD에 넣으면 부팅이라도 되어야 할 것 아닌가? 비프음 없이 첫화면(Dell 컴퓨터 로고)까지는 나오니 하드웨어에 특별한 장애는 없어 보이는데 그 다음으로 진행이 되지를 않는 것이다.  Dell의 <부팅 후 시스템 진단 유틸리트>를 작동하면 CPU 체크 단계에서 아예 진도가 나가지 않는 이해하지 못할 상황이 계속되었다. CPU가 고장이 날 가능성은 매우 낮은데...

최근 약 일년 동안의 기억을 더듬어보니 화면이 꺼진 상태로 컴퓨터가 쉬고 있을 때 갑자기 큰 소리와 함께 CPU 팬이 돌다가 조용해지는 일이 지속적으로 반복되곤 하였다. 어쩌면 이것이 시스템 부조화의 전조증상이었는지도 모르겠다.

이번에는 CPU 쿨러를 한번 떼었다가 붙여 보았다. 그러고나서 다시 시스템 진단 유틸리티 실행. CPU 테스트가 무사히 끝나고 모든 하드웨어에 이상이 없다는 진단이 나왔다. 부팅을 시도하니 무사히 진행이 된다. 그런데 이번에는 윈도우 10의 인증이 되지 않았다는 표시가 나온다. 지난주까지 인증 상태에 대해서는 아무런 일이 없었는데 갑자기 이건 무슨 일이란 말인가? 대대적인 하드웨어 교체가 벌어진 것으로 인식한 것일까? 마이크로소프트 고객지원 센터의 하드웨어 변경 후 Windows 10 다시 정품 인증이라는 글이 도움이 될 것 같기는 하지만, 되살아난 컴퓨터는 느려도 너무 느리다. 이번 장애를 겪기 이전에도 느린 것은 마찬가지이나 이렇게 꼬박 주말을 매달리고나니 짜증이 밀려오면서 느린 속도를 견디기 어려워졌다.

이 컴퓨터는 이제 퇴역을 할 시기가 되었다! 약간의 데이터가 들어있는 HDD는 떼어내고, 굴러다니던 다른 HDD를 연결하여 우분투 데스크탑 16.04를 설치해버렸다. 이 글도 한글 입력 환경을 세팅한 뒤에 쓰는 것이다.


이렇게 되면 윈도우 라이센스는 어떻게 해야 하는 것일까? 보통 PC 구매시에 딸려온 OS(OEM,  COEM 혹은 DSP 제품)는 해당 PC에서만 사용 가능한 것으로 알려져있다. 그러면 나의 경우와 같이 윈도우를 업그레이드한 경우에도 그러할까? 즉, 컴퓨존 등에서 OS가 없는 조립 PC를 구매하면 여기에 내가 갖고있는 윈도우 8이 정식으로 설치될 것인가? 윈도우 7은 Dell Inspiron 660s와 운명을 같이 하는 것이니 안 될 것이다.

윈도우 8 사용자를 위한 무료 10 업그레이드는 이미 오래전에 종료되었지만  보조 기술을 사용자를 위하여 그 혜택을 입을 수 있는 길을 계속 열어놓은 것으로 보인다(링크).

2017년 5월 18일 목요일

Goodbye genome paper, hello genome report

이것은 2016년 6월 23일에 Brief Funct Genomics라는 학술지에 실린 리뷰의 제목 일부이다. 저자는 David Roy Smith.

Goodbye genome paper, hello genome report: the increasing popularity of 'genome announcements' and their impact on science. PMID: 27339634

인간 게놈 프로젝트가 가져다준 기술 혁신, 이어서 차세대 유전체 염기서열해독기술(NGS)의 등장으로 유전체 시퀀싱 데이터가 그야말로 쏟아지는 세상이 되었다. 이제는 유전체 시퀀싱 결과를 논문에 싣기도 어려운 상황이다. 그래서 500-1500 영단어 수준의 짧은 '논문'을 출판하는 것이 유행이 되었다. Peer review는 있기도 하고 없기도 하다. 기본적인 서열 데이터는 DDBJ/ENA/GenBank에 등록이 되지만, 연구의 목적이나 실험 방법 및 복잡한 유전체 구조를 다루려면 문서화된 정보, 즉 논문이 필요하다. Accession number 말고도 인용 가능한 문헌 자료가 필요하다는 뜻이다. 문제는 너무나 많은 사람이 너무나 쉽게 이런 일을 하게 되었다는 것이다. 그래서 announcement(발표 또는 공고 정도로 번역하자)류의 저널이 어쨌든 필요하게 되었고 또 인기를 끈다.

David R. Smith는 이에 대해서 몇 가지의 문제점과 대안을 다음과 같이 논하였다.

  • 게재료가 너무 비싸다. $1-2/word라는 출판 비용은 이제 염기서열당 시퀀싱 비용을 훨씬 상회하고 있다.
  • Peer review를 거치지 않는 것도 많다. 따라서 announcement류의 논문은 취업용(혹은 이직용) 이력서를 장식하거나 연구신청서를 쓰는데 도움이 되는 업적으로 취급받지는 못한다.
  • Peer review가 꼭 필요한 것이 아니라면 open preprint server를 쓰는 것도 고려해봄직하다. 이에 대해서는 내 블로그에 두 건의 글을 올린 적이 있다(생명과학 분야의 프리프린트 학술지, 처음으로 bioRxiv에 논문을 제출하다).
연구 환경의 변화가 기술 혁신 및 상업주의와 적절히 어우려저 현재와 같은 상황이 되었다고 보는 것이 맞을 것이다. 확실하게 말할 수 있는 것은 시퀀싱은 이제 대단히 규모가 큰 시장이 되었다는 것인데, 그 성과물의 학술적 가치는 예전과는 매우 달리 낮아진 것이 현실이다. 앞으로 어떤 돌파구가 생길지는 아무도 모른다. 최소한 기술이 부족해서 하고 싶은 일을 하지 못하는 세상은 아니다. 그럼에도 불구하여 여전히 새로운 기술은 눈길을 끈다. 이번달 말에 Oxford Nanopore의 관계자가 방한하여 기술 세미나를 하게 되었다. Illumina와 PacBio의 기술도 따라잡기가 쉽지 않았는데 여기에 Nanopore까지 공부를 하지 않을 수없는 상황이 되고 말았다. 

참으로 빠르게 변하는 세상이다.


2017년 5월 17일 수요일

FASTX-Toolkit의 이상한 행동(fastq_to_fasta)

어제 남세균(Phylum: Cyanobacteria, NCBI Tax ID: 1117)의 MiSeq sequencing read를 다루다가 pair의 수가 맞지 않아서 무척 애를 먹었다. 그 원인은 FASTX-Toolkit에 포함된 fastq_to_fasta 명령어의 작동이 원활하지 않아서 그런 것으로 잠정적인 결론을 내렸었다. 오늘은 이 문제를 심층적으로 다루어 보려고 한다.

이제 고전이 된 FASTX-Toolkit은 2010년에 공개된 버전 0.0.13이 최신판일만큼 업데이트가 되지 않고 있다. 이는 다른 관점에서 보면 더 이상 손을 댈 필요가 없을 정도로 완벽하다는 뜻도 되겠다. 물론 마지막 버전 공개 당시에는 quality encoding이 phred64인 시퀀싱 결과물이 상대적으로 많았기에, 요즘의 표준인 phred33 데이터를 다루려면 -Q33이라는 옵션을 별도로 주어야 한다는 점이 좀 불편하다. FASTX-Toolkit을 능가할 수준의 유틸리티가 요즘 많이 있겠지만, 표준 입출력을 지원하여 파이프 구성이 편리하고, 심플하며 일관성있는 인터페이스를 갖고 있어서 아직도 쓸모가 많다.

어제 사용한 read의 길이 분포를 알아보자. MiSeq에서 유래한 것이라서 HiSeq read처럼 모든 서열의 길이가 일정하지 않다. 내가 원했던 작업은 280 bp 미만의 read는 제거하고, 그보다 긴 것은 앞부분 280 bp만을 취하여 paired read 형태로 정리하는 것이었다. 종종 고정된 길이의 read를 요구하는 후속 프로그램이 있었기 때문이다.


기준 길이 이상의 read만을 선별하고자 할 때 나는 SolexaQA++을 이용한다. CLC Genomics Workbench에서도 이 작업이 가능하지만(Microbial Genomics Module의 Fixed Leng Trimming) read를 불러들여서 작업을 하고 다시 파일로 내보내는 것이 귀찮아서 명령행 인터페이스를 이용하고자 한 것이다.
$ SolexaQA++ lengthsort -l 280 -c MA-KW_1.fastq MA-KW_2.fastq
리포트에 의하면  4244152 + 4244152 read가 만들어졌다고 한다. 실체 출력 파일을 확인해 보면 이 수치가 잘 맞는다. 그러면 다음과 같이 한 줄 명령어를 만들면 원하는 일이 다 이루어질 것으로 생각하였다. '_2' 파일에 대해서도 같은 방식으로 실행을 하였다.
$ fastx_trimmer -Q33 -l 280 –i MA-KW_1.fastq.paired | fastq_to_fasta -Q33 > temp_1.fastq
그런데 최종 파일이 수록한 read의 수가 달라졌다. 이 명령어에서는 필터가 전혀 작동하지 않으므로 최초에 공급한 파일의 read 수(4244152 + 4244152)를 그대로 유지해야 정상이다. 하지만 실제 결과 파일에서는 4244144 + 4244137가 되었다. file 1과 file 2에서 전부 read 수가 조금씩 줄어든 것이었다. 세부적으로 조사를 해 보니 fastq_to_fasta를 거치면서 read가 변했다. fastq_to_fasta 대신에 fastq2fasta.pl(by Brian J. Knaus)를 사용하면 read 수는 전혀 바뀌지 않았다.

좀 더 궁극적인 해결 방법은 없을까? 파일 조작의 마지막 단계에서 pair 여부를 다시 한번 점검하는 것이 필요할 것으로 생각된다. 이런 용도에 딱 맞는 도구가 무엇이 있을지 조사를 해 보았다.  DOE Joint Genome Institute의 BBTools에 포함된 여러 shell script 중에서 repair.sh를 쓰면 될 것 같다. BB는 이 프로그램을 만든 Brian Bushnell의 이니셜이다. 흥미를 가지고서 사용법을 조사해 보니... 쓸 수가 없다. 왜냐하면 repair.sh가 인식하는 입력 파일은 fasta가 아니라 fastq이기 때문이다. BBTools는 정말 쓸모가 많은 다양한 기능의 명령어를 포함하고 있으니 좀 더 시간을 두고 공부를 해 보자.

FASTX-Toolkit의 fastq_to_fasta가 가장 중요한 용의자이므로, 표준 입출력을 지원하는 다른 종류의 포맷 전환기를 사용해 보자. seqtk가 적당하겠다.
$ fastx_trimmer -Q33 -l 280 -i MA-KW_1.fastq.paired | seqtk seq -a > temp_1.fa
$ fastx_trimmer -Q33 -l 280 -i MA-KW_2.fastq.paired | seqtk seq -a > temp_2.fa
4244152 + 4244152 read라는 완벽한 결과가 나와주었다.


2017년 5월 16일 화요일

기타 넥 수리기

밤늦게 야간자율학습을 마치고 집에 돌아온 딸아이가 거실장 곁에 기대어 놓은 액자를 넘어뜨리면서 스탠드에 세워둔 일렉기타도 같이 쓰러뜨렸다. 기타에서 가장 취약한 부분인 넥과 헤드 사이 부분이 똑 부러졌다. 2000년 초에 갤러리아 타임월드 근처의 비바체 악기(지금은 없어짐)에서 구입한 나의 삼익 세미 할로우바디 일렉기타가 이렇게 망가지고 말았다. 10대 시절 생일 선물로 막내 작은아버지로부터 받은 클래식 기타도 이것과 똑같은 상황에서 부러진 일이 있다.

어쩌겠는가. 얄팍한 목공 기술을 가지고 고치는 수밖에는. 이런 순간에는 수도권에 거주하지 못하는 현실이 안타깝다. 주말에 시간을 내어 낙원상가를 가면 기타를 고치는 장인들이 수두룩할텐데 말이다. 이곳 대전에도 검색을 해 보면 수리를 하는 업자가 있겠지만, 마침 목공 본드를 갖고 있어서 직접 수리하기로 마음을 먹었다. 깨진 마감재는 어쩔 도리가 없다.

스트링을 전부 풀고 부품 일부를 제거한 뒤 부러진 부분에 목공본드를 붙이고 노끈으로 잘 묶어서 24시간 정도를 두었다. 목공용 클램프 같은 것이 있을 턱이 없으니 접합 부분을 완벽하게 맞추는 것은 사실상 불가능하다. 갈라진 틈은 대충 검정색 매니큐어로 칠하였다. 아쉬운대로 사진과 같이 잘 붙었다.


MADE IN KOREA라 새겨진 모습이 선명하다. 시리얼 번호로 추정하건대 아마도 99년에 제작한 것으로 보인다. 프로토타입으로 만들어진 것이라 삼익 마크는 없다.



예전과 같은 강도를 유지하는 것은 어려울 것이다. 만약 다시 부러진다면 전문 수리점에 보내야 될 것이다. 줄을 다시 매어 놓고 상태를 지켜보다가 줄의 장력을 이기지 못하고 다시 부러지면 다음 링크와 같은 대규모의 수리를 해야 될 것이다. 수리가 불가능하여 결국 기타를 버려야 한다고는 결코 생각하지 않는다.

기타수리 넥 부러짐 - 수리 불가능한 넥 살리기

이번 일을 기회로 지판용 오일과 피니시 제품도 구비하여 관리를 하는 시늉이라도 해야 되겠다.

오늘은 Korg X2의 액정 디스플레이를 위한 EL 백라이트도 배달되었다. 본의 아니게 악기 수리에만 몰두하는 일주일이 되었다.




2017년 5월 14일 일요일

먹통이 된 Dell Inspiron 660s 되살리기

Dell Inspiron 660s는 집에서 사용하는 데스크탑 컴퓨터이다. 2012년에 구입하여 지금까지 그럭저럭 사용을 해 왔다. 처음에는 윈도우 7이 설치된 상태였는데 프로모션 가격으로 윈도우 8로 업그레이드를 했었고, 어느날 나도 모르게 윈도우 10으로 자동으로 업그레이드가 되었다. 다음의 화면 캡쳐에 잘 나타났듯이 분명히 정품을 사용하는 중이다.


예전에서는 제품 키를 매우 중요하게 관리해야 했지만 윈도우 10이 되면서 그럴 필요가 없어졌다. 이에 대한 글을 인용해 본다.

윈도우 10으로 업그레이드하면 제품 키를 찾을 수 없는 이유

어제 외출 후 집에 돌아오니 컴퓨터가 부팅이 되지 않는 것을 발견하였다. 전원을 넣으면 Dell Inspiron 660s라는 화면이 나오기까지는 하였는데, OS로 넘어가지를 않는 것이었다. DVD ROM drive로 부팅히 되도록 바이오스 셋업을 바꾼 다음 보유한 윈도우 DVD 매체를 넣고 재부팅을 시도하였으나 상황은 전혀 달라지지 않았다. 하드디스크 문제라면 최소한 DVD 매체로 부팅이 되어야 할 것 아니겠는가? 컴퓨터가 하드웨어적으로 완전히 망가진 것일까? 딸아이는 요즘 극성을 부리는 랜섬웨어에 감염된 것이 아니냐고 한다. 하지만 돈을 버는 것이 목적인 랜섬웨어가 아무런 협박 메시지 없이 컴퓨터를 단순히 부팅 불능에 빠지게 할 것 같지는 않다.

최근 들어서 컴퓨터가 대기 모드에서 갑자기 주기적으로 쿨링팬이 돌다가 다시 조용해지는 일을 종종 경험하였다. 벌써 5년이나 사용을 했으니 이제 컴퓨터를 바꿀 때도 되었다는 생각이 들었다. 작년 말에는 컴퓨터가 너무나 느려지고 프린터가 그 어떤 방법을 동원해도 인식이 되질 않아서 완전히 초기화를 한 일이 있다. 정확한 원인은 아직 알 수 없지만 아마도 딸아이가 너무나 많은 이미지 파일을 하드디스크에 저장해서 그랬던 것으로 생각한다.

가정용으로 구입한 최저 사양의 컴퓨터를 이제 버리고 새로 구입해야 하는가? 컴퓨터를 좋아하고 늘상 업무용으로 끼고 살지만, 막상 새로 구입을 하기 위해 하드웨어 사양을 결정하는 일은 너무 어렵다. 직장에서 업무용으로 쓸 컴퓨터를 새로 구입하는 일은 차라리 쉽다. 적당한 예산 범위를 선정한 다음 납품업체에게 '적당한 것으로 하나 조립해 주세요' 하면 그만이니까.

컴퓨터를 새로 구입하기로 마음을 먹었다 해도 내부를 열어서 점검조차 한번 안하고 이를 내친다는 것은 내 자존심이 허락하지 않는다. 어쩌면 커넥터를 한번씩 뺐다가 다시 연결하면 부팅이 될지도 모르니까 말이다. 진공청소기를 준비하고 나서 컴퓨터 분해에 돌입하였다. Dell 컴퓨터는 분해가 매우 쉽다는 것이 장점이다. ODD와 HDD 뭉치까지 꺼내서 커넥터를 다시 꽂은 다음 진공청소기로 먼지를 빨아내었다. CPU 쿨링 팬을 떼어내야 쿨러 냉각핀 사이사이에 붙은 먼지를 제거할 수 있을텐데, 도저히 그 방법을 알 수가 없었다. 이쑤시개로 큰 먼지 덩이를 떼어내는 정도로 만족하기로 하였다. 아직 옆판을 덮지 않은 상태에서 부팅을 시도해 보았다.

'삑삑 삑삑 삑삑'

이번에는 화면도 전혀 나오지 않고 2회의 비프음이 연속해서 발생하였다. Inspiron 660s의 사용 및 문제 해결 방법 웹문서에 의하면 2회 비프음(연속)은 RAM이 인식되지 않을 때 발생하는 것이라 하였다. 모듈램을 소켓에서 뽑은 뒤 다시 장착한 다음 다시 전원을 넣었다. 이번에는? 무사히 부팅이 되었다! 이 글도 성공적인 재부팅 후 Inspiron 660s에서 작성하는 것이다. 분해 전에는 비프음이 분명히 들리지 않았었다. 그런데 분해하여 커넥터를 한번씩 다시 꽂은 뒤에는 메모리 인식 불가에 따른 비프음이 나고, 메모리를 다시 꽂으니 완벽하게 부팅이 되었다. 도대체 무엇이 문제였단 말인가? 미세먼지에 의해서 몇군데의 커넥터에서 접촉 불량이 발생했던 것이었을까?

이로써 5년만의 컴퓨터 업그레이드는 없던 일이 되었다. 어쩌면 아이들은 아쉬워할지도 모르겠다.

2017년 5월 11일 목요일

건반을 고쳐보자(4) - 전도성 잉크 만들기

Korg X2의 어두워진 LCD를 비출 EL 백라이트, 그리고 Fatar SL-990 건반의 접촉 문제를 해결할 rubber key contact는 오늘까지 전부 선적이 완료되었다는 연락을 받았다. 다음주쯤 배송이 완료되면 교체작업에 착수하여 작동이 잘 되는지를 확인하면 그만이다. 하지만 호기심이 발동하여 건반의 key contact를 보수할 전도성 잉크를 직접 만들어 보기로 하였다. 외국에서 conductive ink  또는 wire glue라는 이름의 물건을 사는 것이 가장 확실할 터이나, 인터넷에 널린 정보를 이용하여 흑연 가루와 물감을 섞어서 자가 제조를 시도한 것이다.

어제 퇴근길에 미술 재료를 파는 큰 문구점에 들러서 6B 흑연 연필(전체가 연필심), 용기, 그리고 아크릴 물감을 구입하였다. ebay에서 소용량으로 담긴 카본 베이스 wire glue를 겨우 6-8 달러 수준에 배송료를 포함해서 살 수 있는데 내가 괜한 헛수고를 하는 것은 아닌지... 제대로만 작동한다면 완제품 wire glue보다는 조금 더 싸게 먹힐 것이라는 기대를 한 것이다.



사포로 연필(심)을 갈아서 통에 담았다. 320방 사포를 사용하였는데, 조금만 갈아내면 사포에 고운 가루가 잔뜩 들러붙어서 생각만큼 가루가 많이 생기지를 않는다. 막자사발로 갈면 좋을텐데 이미 7천원을 넘게 썼으니 더 이상 지출을 하기가 싫다. 주변에 있는 것들만을 이용하여 좀 더 쉽게 고운 흑연 가루를 만들 방법을 생각해 봐야 되겠다.



흑연 가루와 아크릴 물감(혹은 폴리비닐 아세테이트 성분의 목공용 접착제도 됨)을 인터넷에서 권장한대로 부피 비율로 1:1이 되게 섞었다. 그런데 생각보다 너무 뻑뻑하게 뭉쳐서 혼합이 잘 되지 않을뿐만 아니라 얇게 펴 바르는 것도 거의 불가능할 지경이었다. 그래서 이를 좀 묽게 만들기 위해 물을 과도하게 섞은 것이 화근이었다. 시험삼아 몇 군데 표면에 발라서 말린 뒤 멀티 테스터로 저항을 측정하니 무한대가 나온다. 흑연 가루의 비율이 너무 낮았던 것 같다.

혹시 내가 구입한 통심 흑연 연필의 전도성에 문제가 있지는 않았을까? 연필에 멀티 테스터를 대 보았다. 3-4 cm 간격으로 프로브를 찍었는데 수 옴에 지나지 않는 매우 낮은 저항이 나왔다. 전도성 잉크를 제조하여 쓰기에 전혀 문제가 없는 수준이다. 


전도성 잉크는 분명 쓰임새가 많은 물건이지만, 지속적으로 기계적인 접촉이 이루어지는 부분의 접점 용도로도 적당한 물건인지 확신하기가 어렵다. 금속 분말을 에폭시 수지에 혼합한 전도성 잉크(금이나 은가루가 포함된 것은 상당히 비싸다)를 발라둔다면 기계적 강도는 매우 높을 것이다. 아래 사진에서 접점을 형성한 재료는 무엇일까? 분명히 탄소 가루를 적당한 바인더에 혼합해서 스크린 인쇄로 찍어서 굳힌 것임에 틀림없다. 건반에 사용하는 것이니 분명히 충분한 기계적 강도를 보장할 것이다. 앞으로 그럴 가능성은 높지 않지만, 실리콘 러버쪽이 아니라 만약 기판쪽의 접점이 손상되면 어떤 방법으로든 보수를 해야 한다. 내가 집에서 제조하는 카본 베이스의 전도성 잉크를 저 기판 위에 발라도 제 역할을 할까?


흑연 가루와 아크릴 물감의 최적 혼합 비율을 찾는 것이 앞으로의 숙제이다.


What is Quora?

정확히 이틀 전부터 Quora Digest라는 제목의 이메일이 구글 메일함으로 오기 시작하였다.

클릭을 하니 http://www.quora.com/이라는 사이트로 연결된다. 간단한 질문을 올리면 회원들이 자유롭게 답을 쓰는, 마치 네이버의 지식인과 비슷한 사이트로 여겨진다. 위키피디아를 검색해보니 2010년에 서비스를 시작했다고 한다. 얄궂게도 어제 배달된 것은 - 4시간이 채 지나지 않았지만 자정이 넘었으니 어제라고 치자 - 한국에서 산다는 것의 어두운 면에 대한 매우 불편한 질문에 대한 답이 가장 위에 올라와 있었다.

분명히 가입을 통해서 이용하는 서비스 같은데, 왜 내가 Quora에 구글 계정으로 가입이 되었는지를 도무지 모르겠다. 맥북 프로에서 음악 관련 프로그램을 다운로드하는 과정에서 자세히 읽어보지 않은 상태로 가입 버튼을 클릭한 것인가? 도무지 기억이 나지 않는다.

Quora에는 당연히 이에 대한 질문도 있었다. 답변은 그다지 신통치 않았지만.

How did I get subscribed to Quora?

살다보니 별의별 서비스를 다 만나게 된다. 얼마나 영양가가 있는 사이트인지는 좀 더 지켜볼 일이다.


2017년 5월 8일 월요일

건반을 고쳐보자(3) - 소리가 안나는 키 살리기

소리가 안나는 키('dead keys')를 수리하려고 분해를 했다가 실리콘 멤브레인(contact strip, rubber contact 등으로 불림)을 제대로 끼우지 못해서 그냥  방치해 둔 건반이 있다. Fatar Studiologic SL-990이라는 해머 액션의 88건 마스터 키보드이다. 족히 7-8년은 손을 대지 않고 둔 것 같다. 소리가 안나는 키에 네임펜으로 표시를 해 두었었는데 이제는 알콜로도 지워지질 않는다. 네일 리무버로 지워봐야 되겠다.


오랜만에 다시 분해를 해 볼까? 재조립을 미처 못한 부품을 키보드 안의 빈 공간에 그냥 넣어 두었었다. 전원 어댑터가 어디로 갔나 했더니 에어캡에 정성스레 싸여서 부품과 같이 숨어있었다. 워낙 심플한  MIDI controller keyboard라서 내부에는 빈 공간이 많다. 핵심 부품만을 꺼내어 연결하여 보았다. 사진에 보이는 종이 클립과 연필이 가장 유용한 수리 도구였다. 일부를 펼친 종이 클립은 멤브레인을 기판에 원래대로 끼우는데 최적의 도구이다. 과거에 이 요령을 몰라서 좌절을 하고 말았던 것이다.


MIDI 케이블은 Alesis NanoPiano에 연결하였다. 이건 고장날 일이라고는 없는 피아노 음원이다.



전자 키보드의 일부 키가 작동하지 않는 현상은 매우 흔한 고장이다. 회로기판과 실리콘 멤브레인이 서로 접촉하는 양쪽 면에 존재하는 탄소 접점에 문제가 생기는 것이다. 보통은 지우개나 알콜(91% 이소프로판올 추천)로 양쪽의 접점을 닦아내는 것으로 충분하다. 일반적인 전기접점 부활제(BW-100; WD-40은 절대 아님!!)은 여기에 적합하지 않다.

아래 사진을 보라. 기판에서 분리되어 뒤집힌 상태의 실리콘 멤브레인이 위에 살짝 보인다. 가장자리에 돌기 모양으로 튀어나온 것을 나중에 조립할 때에 기판의 구멍에 끼워야 한다. 종이 클립이 이런 용도로 제격인 것이다. 회로기판쪽의 검정색 접점은 아마도 도전성 카본 페이스트를 스크린 프린팅하여 발라 굳힌 것으로 보인다.


그런데 나의 경험으로는 접점을 아무리 잘 닦아도 여전히 소리가 잘 나지 않는 경우가 많았다. 인터넷을 검색하면 탄소 접점의 표면에 산화가 일어나서 그렇다는데, 이것이 알콜이나 지우개로 제거가 될까? 며칠 전 유튜브에서 연필로 탄소 접점을 칠해서 되살리는 것이 가능하다는 정보를 접하고 흉내를 내 보았다. 정말 된다! 하지만 그 효과가 오래 지속되지는 않을 것이다. 전도성 탄소 가루를 붙들어두는 접착제와 같은 성분이 없기 때문이다. 5B 연필을 쓰라느니, 연필심을 갈아서 문구용 풀에 개면 전도성 페이스트/페인트가 된다느니(혹은 마르면 전기가 통하지 않으므로 쓸 수 없다느니) 등등 여러가지 정보가 있다.

How to fix a MIDI keyboard with a pencil

집에서 전도성 페인트를 만드는 방법은 유튜브에서 찾아볼 수 있다(링크). 하지만 이렇게 불완전한 가내수공업을 하느니 아래에서 소개하는 것을 쓰는 것이 훨씬 나을 것이다.

탄소 접점의 보수를 위한 목적으로 conductive carbon paste/paint/ink라는 제품(예: CaiKote 44)이 있다고 한다. 리모콘이나 키보드 등을 수선하는데 적합하도록 작용 용량으로 포장된 제품이다. 우리나라에도 DIYer를 위해 이런 제품이 나오면 얼마나 좋을까? 전도성 페인트/페이스트 등의 이름으로 검색을 하면 공장 규모에서나 쓸만한 대용량 포장밖에는 보이질 않는다. 그것도 이런 소비재의 수리용으로 팔리는 것은 아니다.

CaiKote 44는 기판쪽이 아니고 rubber contact쪽에 매우 얇게 발라야 한다.

접점 세척 도구와 카본 페이스트 등을 함께 담은 rubber keyboard repair kit라는 것도 외국에서는 꽤 팔리는 모양이다. 심지어 실리콘 러버쪽의 닳은 접점을 떼어내고 새로 붙일 수 있는 교체용 카본 전도성 패드(혹은 'pill'이라고도 함. 알약 모양이므로)도 있다. 일반 전자제품의 키보드/키패드용과 전자 키보드용 수리 키트가 엄격히 구별될 필요는 없다고 생각한다.

이도저도 안되면 rubber key contact를 교체해 버리면 된다. Fatar 키보드용 contact는 12 키, 즉 한 옥타브용이 5달러 정도에 팔린다(링크).  심지어 회로 기판을 통째로 교체해버리는 가장 근본적인 방법도 있는데 대신 비용이 많이 든다. 88 건반용 기판은 무려 $155이다.

일단은 '연필 신공'으로 임시 수리를 해 본 다음, rubber contact를 구입하여 교체하는 것을 목표로 해 보자.

좀 더 생각을!

접촉 불량의 원인은 회로 기판쪽일까 혹은 rubber contact쪽일까? 기판쪽의 카본 접점과 rubber쪽의 접점은 완전히 동일하지는 않다. rubber쪽에는 버튼 형태의 말랑말랑한 검은색 전도체(conductive pad or conductive pill)가 붙어있는데, 이는 기판쪽의 전도성 '잉크'와는 분명 다르다(참고). 어쩌면 패드를 이루는 전도성 물질이 지속적인 접촉에 의해 소모되어 그런지도 모른다. 연필로 기판쪽을 칠하는 것은 이를 일시적으로 보충해 주는 효과를 줄 것이다. 기판쪽의 접점은 검정색 상태를 유지한 상태라면 양호한 것이 아닐까? 

Conductive pill의 마모 정도를 눈으로 알기는 어렵다. 가장 정확한 것은 저항치를 멀티 테스터로 측정해 보는 것이다. 카본 pill의 경우 통상 100 옴 이내여야 한다. 오늘의 실험 결론은 연필로 칠을 해 두어도 효과가 오래 가는 것 같지 않다는 것이다. 불량한 키의 기판쪽 접접과 contact pad 각각에 대해 저항을 측정해 보자. 어느쪽이 더 높은지를 알게되면 전체적인 상황이 쉽게 이해가 갈 것이다.

다음 링크의 글을 읽어보니 rubber contact를 새것으로 갈지 못할 바에는 conductive pad를 교체하는 것이 가장 확실한 방법으로 보인다.

Fixing Yamaha PSR-18 synthesizer keyboard

2017년 5월 7일 일요일

건반을 고쳐보자(2) - LCD backlight

기기의 표시창으로 널리 쓰이는 액정 디스플레이(LCD)는 스스로 빛을 내지 못하므로 가장자리를 따라서 혹은 뒷부분에 백라이트를 두는 것이 일반적이다. 요즘은 백라이트용 발광 소자로서 LED가 널리 쓰이지만 과거에는 EL(electro luminescent) 백라이트가 많이 쓰였다. LED는 점광원이라서 가장자리를 따라 일직선으로 또는 표시기 뒷편에 매트릭스 형태로 여럿을 배열하는 것에 비하여 EL 디스플레이는 순수한 면광원이다. 따라서 적당하게 잘라서 디스플레이 뒷편에 삽입하면 된다. 워낙 얇고 구부릴 수도 있어서 그 나름대로 특색이 있는 광원이다. 그러나 휘도가 높지 않고 수명이 비교적 짧으며(원래 휘도의 1/2로 떨어지는 때까지를 일반적인 작동 수명으로 치는데 대략 3천 시간 정도) 구동을 위해 교류 고전압을 공급해야 하므로 전용 인버터가 있어야 한다. 그래서인지 요즘은 표시장치의 백라이트보다는 광고나 차량 인테리어, 파티용 장식 등으로 나름대로 쓰이고 있다(사례).

Korg X2는 대략 1995년에 발매된 신시사이저이다.  EL 백라이트가 이제는 거의 빛을 내지 못한다. 현재 상황은 이러하다. 외부에서 조명을 비추지 않으면 전혀 표시된 내용을 알아볼 수가 없는 수준이 되었다. 바로 다음 사진과 같은 상태가 요즘 나의 X2의 모습이다. 낮에 휴대용 LED 전등을 켜고 찍어서 저 정도라도 보이는 것이다.


당연하게도 Korg 본사에는 교체를 위한 EL 백라이트 재고가 있을 턱이 없다. 요즘의 전자악기는 이보다 수명히 훨씬 긴 LED를 백라이트로 쓰는 액정 디스플레이를 탑재하기 때문이다. 그래도 이 작은 틈새 시장을 노리고 옛날 악기를 위하여  EL 백라이트를 파는 곳이 존재하다. 예를 들지면  backlight4you와 같은 곳이다. 내가 알기로는 Korg X2/X3/X3R/N264/N364는 전부 같은 규격의 표시창(39 mm x 93 mm, 링크)을 사용한다. 이곳 말고도 이베이나 알리익스프레스에서 어렵지 않게 호환 EL 백라이트를 파는 곳을 찾을 수 있다. 과거보다는 기술이 발달해서 수명이 좀 더 늘어났다고 한다.

물론 이런 곳에서 백라이트를 사면 간단히 교체가 가능하지만 가격이 약간 비싸다는 것이 문제이다. 전자악기 LCD용으로 크기를 맞춘 EL backlight는 비싸지만, 장식/인테리어/광고 용으로 파는 것은 오히려 값이 싸다. 그러니 차라리 이런 것을 싸게 구입하여 잘라서 쓰면 되지 않을까? 절단면은 주변의 도체와 닿아서 단락이 일어나는 것을 피하기 위해서 테이프를 붙이면 된다.

알리익스프레스를 찾아보았다. 10 cm x 10  cm 제품이 AA 전지 2개로 구동되는 인버터를 포함하여 7.19 달러에 불과하다(링크). 이걸 구입하여 리드선을 포함한 가운데 부분을 적당히 잘라서 사용하면 되지 않을까? 

국내 사이트에서는 '발광시트'라는 이름으로 팔리기는 하는데(링크) 면적이 큰 만큼 가격도 높다. 사이트를 둘러보면 알 수 있듯이 더 이상 백라이트 용도는 아니고 광고 등에 쓰이는 것으로 보인다. 단위 면적당 가격은 알리익스프레스에서 소개한 것이 비하면 쌀 것이다. 

액정 디스플레이의 백라이트 문제는 어찌보면 가장 사소한 것일지도 모른다. 약간 불편하지만  극복할 방법은 있기 때문이다. 앞서도 언급했듯이 작은 LED 스탠드를 놓으면 되니까 말이다. 작동을 잘 하지 않는 버튼 스위치는 세게 누르면 어쨌든 작동은 된다. 가장 심각한 문제는 키 입력이 잘 되지 않는 것 아니겠는가? 가장 단순한 기계적인 문제이지만 - 장비 노후화에 따라서 필연적으로 나타나는 접촉 불량 현상 - 장비 활용에서 가장 큰 지장을 주는 것이다. 이것 말고도 앞으로 여러해 동안 유지 보수를 명목으로 충분히 재미나게 장비를 가지고 놀 거리는 많이 있다.

추가 작성한 글

Korg X3(X2)용으로 재단된 EL 백라이트 제품 중 저렴한 것을 찾았다(링크).



2017년 5월 5일 금요일

건반을 고쳐보자

현재 나는 각각 두 대의 전기 기타와 키보드를 갖고 있다. 지난 4년 동안 음악을 듣는 일에 너무 치중하다 보니 악기에 손을 대는 일이 현저히 줄어들어서 항상 미안한 마음을 갖고 있었다. 기타에는 늘 먼지가 수북하게 쌓여있고, 아주 드물게 앰프를 기타에 연결하면 픽업 전환 스위치와 잭 부분을 몇 번 매만져야 소리가 제대로 날만큼 관리상태가 아주 열악하다. 비교적 단순한 악기인 전기 기타가 이러한 상태이니 가동 부품과 스위치가 가득한 키보드는 어떠하겠는가.

키보드에 대해서는 가슴 아픈 기억도 있다. 2000년대 초반에 꽤 비싼 값을 주고 신품을 구입하여 정말 열심히 쳤던 88건 해머액션 건반의 Fatar SL-990(현재 팔리는 모델은 PRO version)이 바로 그것이다. 이것은 자체적으로 소리가 나지 않는 MIDI controller keyboard라서 같이 구입한 Alesis NanoPiano 모듈에 연결하여 사용했었다. 정확한 기억은 나지 않지만 3-4년 정도 사용했을 무렵 한두개의 키에서 소리가 나지 않게 되었다. 건반을 직접 분해하여 PCB와 실리콘 멤브레인 접점(silicon rubber contact)을 닦아내기도 하고 대전의 악기 수리점에 힘겹게 들고가서 수리를 맡기기도 하였다. 그러나 소리가 나지 않는 키가 점점 늘어났다. 이에 나는 본격적으로 건반 접점을 대대적으로 청소하기로 작정을 하고 분해를 했다가 멤브레인의 조립이 너무 힘들어서(요령을 잘 몰라서 그랬던 것이다) 결국은 포기하고 대충 조립하여 팽개쳐 두었다. 그 이후로는 중고로 구입한 워크스테이션인 Korg X2(76 건반)에 완전히 자리를 내어 주었다. 그러면 X2는 지금 어떠한 상태인가? 책장과 책상을 방에 들이면서 더 이상 놓을 자리가 없어서 필요한 때만 사용하려고 벽에다가 길게 세워 놓은 채로 또 몇 년이 흐르고 있다.

구조적으로 보자면 synthesizer + keyboard + sequencer에 해당하는 Korg X2가 Fatar SL-990보다 훨씬 복잡한 기기이다. X2 역시 손을 볼 곳이 몇군데 있다.
  • 데이터 저장/복원용 FDD가 수명을 다함(MIDI cable을 연결하여 컴퓨터에서 SysEx를 전송하는 방법이 있다)
  • 액정 백라이트가 어두워짐
  • 세게 눌러야 작동되는 스위치가 몇 개 있음
  • E3 키의 벨로시티가 약간 낮음
이에 비하면 SL-990은 매우 간단한 기기이다. 엄청나게 무겁다는 것을 제외하면! 주 회로기판과 리본 케이블, 건반 뭉치, 88개의 접점을 갖는 회로기판이 전부이다. 키 몇개에서 소리가 나지 않는다고 해서 이렇게 속수무책으로 방치하는 것은 정말 부끄러운 노릇이라는 생각이 들었다. 이제는 인터넷을 조금만 검색하면 교체용 부품을 파는 곳과 건반 수리 동영상을 쉽게 찾을 수 있다. 왜 처음 고장 증세가 나기 시작했을 때 진작 이러한 정보를 찾아볼 생각을 안했을까? 당시에는 구입처 또는 전문 수리점 정보만을 알아보다가 너무나 무거운 건반을 보내고 받을 방법이 없어서 그만 두고 말았었다.

미국의 MIDI Store라는 곳에서는 Fatar 건반용의 '모든' 부품을 취급한다. 쉽게 말해서 케이스를 제외한 모든 것을 다 판매한다고 보면 된다. 여기에서 rubber contact만 필요한 만큼 구입해서 교체하면 그만이다. 만약 contact를 교체하지 않고 접촉면을 청소하는 정도의 수리만 하겠다면 다음의 사이트(at bustedgear.com)를 참조하면 된다.  유튜브에는 관련 동영상이 너무 많아서 적당한 것을 고르기가 어려울 지경이다.
접촉면을 닦을 때 사용하는 세정제로는 91% 이소프로판올(IPA)을 쓰라고 한다. 시중에서 91% 재품을 구할 수 있을지는 잘 모르겠다. 약국에서 소독용으로 파는 것은 70% 이소프로판올이기 때문이다. 

올해의 목표는 이제 확고해졌다. 나의 건반들을 예전의 상태로 되돌리는 것. 다만 전동 드라이버를 하나 구입해야 되겠다. 수십 개의 볼트를 손으로 풀 생각을 하면 벌써부터 손목이 아프다.

2017년 4월 29일 토요일

카메라를 꺼내는 일이 점점 줄어들다

디지털 카메라가 휴대폰에 밀려서 시장 규모가 점차 줄어드는 것은 어제 오늘의 일이 아니다. 국민 모두가 '복합 휴대형 장비'인 스마트폰을 들고 다니게 되었으니 사진기를 휴대할 일도, 수첩을 휴대할 일도 없다. 늘 들고 다니다가 기념이 되거나 기록할 일이 없으면 주머니에서 꺼내면 그만이다. 요즘 스마트폰은 워낙 크기가 커져셔 주머니에 넣기 힘든 경우가 많다. 그래서 어딜 가든 소중하게 손에 들고 다닌다. 캠코더라는 물건도 요즘 일반인에게는 별로 필요가 없다. 간혹 바깥 활동을 즐기는 사람들에게 튼튼한 동영상 전용의 액션캠이 인기를 끌기도 하는 것 같다.


여행의 기록을 위해 가장 최근에 구입했던 카메라(펜탁스 Q10)이다. 몇 대의 디지털 카메라가 더 있지만 촬영 상황에 즉각적으로 맞게 세팅을 할만큼 기능을 완벽하게 숙지하고 사용한 것은 별로 없다. 수두룩한 버튼과 다이얼에 갇혀서 내가 지금 무슨 모드로 사진을 찍고 있는지를 망각하는 순간이 많았다.

기능을 철저히 익히는 것도 문제지만 찍어 놓은 이미지 파일을 체계적으로 관리하는 것은 더 큰 일이다. 오늘 아침 문득 생각이 나서 컴퓨터를 뒤적이는데 그동안 찍은 파일들을 찾을 수가 없었다. 갑자기 근심이 밀려오기 시작하였다. 컴퓨터가 잘못되어서 다 날린 것인가? 컴퓨터 책상의 서랍을 열어서 백업용으로 쓰는 외장 하드디스크를 꺼내어 컴퓨터에 연결해 보았다. 작년 12월에 컴퓨터를 완전히 초기화하면서 안전하게 백업을 해 둔 상태였다. 그 이후로는 카메라를 컴퓨터에 연결하여 새로 찍은 사진 파일을 정리할 일이 전혀 없었다. 그저 휴대폰으로만 사진을 찍었기 때문이다. 그러면 알아서 구글 포토로 사진이 전부 전송된다. 촬영 시각은 물론 위치 정보까지 알아서 기록이 된다. 몇 년 전에 경주 여행을 하면서 찍은 사진을 다시 보고 싶다면? 구글 포토에서 '경주'라는 검색어로 찾으면 사진을 직은 곳의 지도까지 친절하게 보여준다. 구식 디지털 카메라로 사진을 찍어서는 도저히 따라갈 수 없는 놀라운 기능이다.

과거에 아날로그 사진기로 촬영을 하던 손맛을 아직도 잊지 못한다. 널찍하고 시원한 뷰 파인더에 눈을 대고 렌즈를 조절하면 선명하게 초점이 맞고, 신중하게 셔터 릴리즈 버튼을 누른 뒤 와인더 레버를 끼리릭 감는다. 사진을 찍은 빈도는 일주일에 한두번, 주말 무렵이 전부였고 36매짜리 필름 한통이면 충분했었다. 그렇게 해서 현상과 인화를 하면 건질만 한 사진은 많지 않았다. 늘 무거운 가방에 삼각대를 들고 다녀도 좋았고. 생각해보면 지금보다 돈이 많이 드는 취미였다. 필름과 후처리에 늘 꾸준한 돈을 써야 했으므로. 그래도 손바닥만하게 인화한 사진을 보는 것이 좋았고, 지금처럼 찍은 이미지 파일들이 어디 있는지 고민할 필요가 없었다.

너무나 많이 변해버린 생태계를 어찌하겠는가? 이에 맞추어 생존할 수밖에는...  파일을 생성하고 클라우드를 사용하여 체계적으로 관리하는 나만의 방법을 고안해 볼 시점이 되었다. MP3 파일까지 따로 수집하지 않는 것이 정말 천만다행이다. 몇 장 되지 않는 오디오 CD는 리핑을 하지 않고 직접 CD 플레이어로 듣는 것을 좋아하고, 라디오 방송을 즐겨 들으니 말이다.

2017년 4월 27일 목요일

대전시립무용단 제62회 정기공연 <덕혜>를 관람하다


음악회에 비해서 무용 공연을 보러 다닌 경험은 그렇게 많지 않다. 음악보다 좀 더 어렵다고 느껴지는 것이 무용 문외한의 솔직한 심정이다. 그래서인지는 몰라도 아주 가끔 무용 공연을 보면서 단원들의 춤사위보다 무대 장치, 조명 또는 음악에 더 빠져드는 편이다. 국악-재즈 크로스오버 앨범인 <바리 abandoned>(한승석 & 정재일, 2014)에 경탄하게 된 것도 대전시립무용단의 공연을 보고 나서였다. 첨단 기술을 충분히 이용한 요즘의 화려한 무대 장치와 조명도 감상의 즐거운 포인트가 된다.

2016년 영화로도 개봉되었던 덕혜옹주의 이야기를 무용으로 꾸민 <덕혜>를 관람하였다. 스케일도 꽤 크고 내가 중요하게 여기는 무대와 음악도 인상적이었으나 무용 자체가 만들어가는 본질적인 요소에 더욱 집중할 수 있었던 좋은 공연이었다. 막이 오르면 어둠 속에 격자 모양으로 비치는 좁은 조명은 질곡의 인생을 살아야 했던 덕혜를 평생 가둔 굴레를 연상하게 하였다. 그리고 처연하게 흐르는 배경음악(홍난파의 '봉선화'). 해설용 책자를 굳이 참조하지 않아도 궁궐에서 행복한 시절을 보내던 유년기, 일제 강점기가 되어서 일본으로 끌려가다시피 건너가서 억지로 한 결혼, 그리고 해방과 혼란기... 어떤 장면을 그려내고 있는지를 충분히 이해할 수 있었다. 특히 중후반부의 절도있는 군무가 인상깊었다. 그리고 마지막 장면. 거대한 무대장치가 마치 도개교가 내려오듯 무대로 회전하여 천천히 내려오면서 무대 좌우에서는 꽃잎(눈?)을 연상하게 하는 하얀 가루가 흩날린다. 덕혜는 천천히 다리 위로 오르면서 돌아오지 못할 길을 떠나면 막이 내린다. 아마도 세상을 떠나는 모습을 그려낸 것이리라. 아, 이 감성 중년은 무용 공연을 보면서 또 눈물을 흘릴뻔 하였던 것이다.

궁중에서 보낸 덕혜의 어린시절을 연기한 박자현(충주여중)의 신들린듯한 회전도 인상적이었다. 공연을 마치고 나니 관객들의 박수가 끝없이 이어졌다. 에술감독 겸 상임안무자(김효분)가 무대에 나와서 모든 출연진과 마주하고 서로 다소곳이 인사를 하는 모습 또한 감동적이었다.

'그동안 수고 많았어요. 여러분을 믿습니다.'
'감독님 감사합니다.'

아마 마음속으로 이런 대화를 나누었을 것이다.

창작 현대무용을 감상하면서 왜 우리의 전통적인 한과 갈등을 주제로 다루는 작품이 왜 이렇게 많은가에 대한 불편한 마음이 없지는 않았다. 그러나 오늘의 공연은 마땅히 우리가 어루만져야 할 역사적인 아픔을 다루었기에 충분히 공감할 수 있었던 좋은 경험이었다.

맥북에 Office 365 설치

UST(과학기술연합대학원대학교)의 교직원과 학생에게 MS Office 365를 제공한다는 유용한 정보(UST 소식 20호)를 접하고 그냥 지나칠 수 없었다. 실은 이러한 정보를 전혀 알지 못하고 있었으나 맥북의 기초적인 사용법을 알려주러 잠시 내 사무실에 들렀던 동료 이 모 박사가 알려준 것이다. 안내문을 참조하여 UST 포털에 접속, 해당 메뉴를 찾아서 즉각적으로 설치하였다. 클라우드 기반의 서비스이므로 인터넷에 연결만 되어 있으면 언제 어디서나 문서를 편집하고 저장할 수 있으며(http://www.office.com/), 프로그램을 직접 맥북에 다운로드하여 사용하는 것도 가능하다. 맥북에 앱 형태로 설치된 오피스로 작성된 문서는 클라우드와 맥북의 하드 드라이브 중에 원하는 저장소를 선택할 수 있다. 두 가지 형태의 서비스 화면을 같이 늘어놓고 캡쳐를 해 보았다.


나의 근무지는 공공기관이라서 어차피 클라우드 접속은 되지 않는다. 그러므로 1 TB나 되는 저장소를 알뜰하게 사용하려면 약간의 트릭이 필요할 것이다. 또는 철저히 개인 용도의 문서만 저장을 하든가.

점점 많은 프로그램들이 사용하는 기간 동안 일정 주기로 요금을 지불하는 가입형으로 바뀌는 추세이다. 일회성으로 비용을 지불하고 구입하는 방식과 비교하자면 가입 기간 중에는 항상 최신 버전을 유지할 수 있다는 장점이 있으나, 전체적인 사용 기간을 고려하면 적지않은 부담이 된다. 이러한 현실에 비추어 볼 때 내가 겸직으로 근무하는 UST에서 오피스 365 무료 사용 혜택을 주는 것은 너무나 고마운 일이다. 사실 근무처에서는 윈도우와 오피스를 자유로이 쓸 수 있는 라이센스가 있지만 맥을 사용하는 사람들까지 배려해 주지는 못하는 실정이었다.

맥용 오피스, 그리고 윈도우(VirtualBox) + 한컴오피스 NEO까지 설치해 놓았으니 업무에 필요한 웬만한 환경은 다 갖춘 셈이 되었다.

맥북의 단축키에 익숙해지기

내 블로그를 꾸준히 살펴보면 관심의 흐름이 그대로 드러난다. 2014년 이후를 모니터링해 보면 매우 초보적인 수준의 오디오 자작을 거쳐서 시계로 갔다가 이제는 맥북이 되었다. 컴퓨터는 내가 늘 좋아하는 물건이었으니 변덕이 죽 끓듯 한다고 평가할 필요는 없겠다.

'맥(Mac)이 아니면 안되는 일'을 주제어로 웹 검색을 하였지만 뚜렷한 결론을 내리지 못하였다. 전공분야와 일상과 관계된 일 모두 그러하다. 어차피 나의 필요에 의해서 새로운 컴퓨터 환경을 접한 것이 아니기 때문에, 더 이상 Mac으로 무엇을 할까 고민하지 말고 그저 재미를 추구하는 쪽으로 생각을 바꾸는 것이 나으리라.

어제는 VirtualBox에 윈도우 10을 설치한 다음 한컴오피스 NEO를 설치하였다. 이 소프트웨어는 한번 구입하여 최대 3대의 PC에 설치하는 것이 가능하다. 가상머신 안에서 한/영 전환을 하는 방법을 찾다가 mackeybind.exe라는 간단한 유틸리티를 발견하여 이를 사용하여 해결하였다.

맥북의 장점 중 하나는 트랙패드와 단축키를 사용하여 작업의 능률을 올릴 수 있다는 것이다. 마우스를 쓰기 어려운 환경 - 예를 들어 소파에 기대듯이 누워서 몸 위에 컴퓨터를 올려놓고 게으른 자세로 맥북을 쓸 때 - 에서도 큰 불편함 없이 일(놀이?)를 할 수 있다는 것이다.


그러나 이런 편리함이 거저 얻어지는 것은 절대로 아니다. 위에 삽입한 그림과 같은 메뉴판 없이도 자유자재로 단축키를 쓰려면 손에 익을 때까지 꾸준하게 맥북을 이용해야만 한다. 마치 자전거 타기나 수영을 배우듯, 암묵지 수준이 될 정도로 써야만 한다. 

웹에서 긁어모은 맥(북) 활용 팁만 해도 리딩 리스트가 꽉 찰 지경이 되었다. 이것을 따로 정리하여 내 블로그 상에 별도의 글을 쓰는 것은 어쩌면 인터넷 공간의 낭비인지도 모르겠다. '맥(북)의 전도사' 노릇을 할 생각은 전혀 없으니 말이다. 어떤 팁은 너무 사소해서 다음과 같이 간단히 정리해도 될만하다.
  • 마우스 포인터가 눈에 안뜨인다면 빠르게 흔들어 보라. 화살표가 커질 것이다.
  • 같은 프로그램 안에서 열어놓은 여러 창을 전환하려면 command + `  단축키를 활용하라.
외부 모니터를 연결한 상태에서 마우스 포인터를 움직이지 않고 단축키를 사용하여 다른 스크린으로 휙 보내는 방법은 없을까? 창 간 전환은 단축키로 쉽게 되지만 마우스 포인터까지 덩달아 이동하지는 않기 때문이다.


한가지만 더 기억해 두자. 맥북은 뚜껑을 닫으면 환풍구가 막히는 구조이다. 따라서 외부 모니터를 연결한 상태로 뚜껑을 닫고 쓰면 방열 측면에서 좋지 않다는 글들을 꽤 접하였다. 이 점은 유념할 필요가 있겠다.


썬더볼트-이더넷 어댑터 구입은 미련한 짓?

평소에 잘 보지 않던 썬더볼트 모니터의 뒷편을 우연히 돌려보았다. 맨 오른쪽의 랜 케이블은 모든 상황이 정리된 후에 꽂은 것이다.


어라? 이더넷 포트가 있네? 그러면 여기에 랜 케이블을 꽂고 모니터와 맥북 프로를 썬더볼트 케이블로 연결하면 네트워크에 연결이 된다는 뜻이 아니겠는가? 네트워크 설정창을 열어보았다.


그렇구나... 썬더볼트가 양방향이라는 이점을 확실히 보여주는 사례이다. 모니터에 랜선을 연결하고 모니터와 맥북을 케이블로 접속하여 세팅만 건드리니 이렇게 간단하게 네트워크에 연결이 되었다. 괜한 지출을 하고 말았다.

모니터를 항상 쓰는 것은 아니니까!

...라고 스스로 위로를 해 보지만 이렇게 한심할 데가 있나. 정말 비싼 수업료를 내고 말았다.