2022년 1월 30일 일요일

아두이노 시계의 업그레이드 - 12시/24시 표시 방식 전환을 위한 스위치 부착

C++ 언어에 대한 지식이 백지와 다를 바가 없는 상태에서 간단한 기능의 프로그램을 짜는 것이 이렇게 힘들다니! 16x2 크기에 불과한 액정에 표시할 문자열을 다루는 것이 이렇게 복잡하리라고는 예상하지 못했다. 아주 오래전에 486 컴퓨터에 디지털 I/O 보드를 끼워서 스테핑 모터를 제어하는 C 프로그램을 짠 일은 있었다. 그 이후로는 생물학적 서열을 다루기 위해 Perl이나 shell script를 짜는 것이 전부였고, 요즘 인기 있는 프로그램인 파이썬은 남이 만든 라이브러리나 애플리케이션을 가져다가 설치하여 활용만 하는 수준에 불과하였다. C/C++에서 문자열을 다루는 것이 이렇게 어려운 일이었구나!

나의 최초 아두이노 프로젝트인 LCD 시계를 구동하는 소스 코드는 아직 개선할 점이 많다. Makuna의 Rtc 라이브러리를 가져다가 설치하고 예제 프로그램을 얼기설기 고친 것에 지나지 않는다. 12/24시간 표시를 전환하는 스위치는 누르는 즉시 반응하는 것이 아니라 시간이 업데이트되는 1초 단위로만 작동한다. 아마 버튼 스위치를 누를 때 인터럽트가 작동하도록 개선해야 될 것이다. 아두이노 우노에서는 2번과 3번 핀이 인터럽트를 담당한다고 하니 DS1302 모듈에 연결되었던 핀을 모두 옮겨야 한다.

버튼 스위치를 더 달아서 시간 수정을 가능하게 만들고, 매시 정각에 소리를 낸다거나 설정된 시각에 알람을 울리는 것도 되지 않을까? 알람 설정을 기억하려면 DS1302 RTC 모듈로는 부족할지도 모른다. 아직 이에 대해서는 자세히 알아보지 않았다. 여기에다 FM 수신 모듈까지 달아서 완전한 시계 라디오로 확장할 수도 있지 않을까? 아두이노 우노 하나가 제공하는 14개의 디지털 입출력핀이 이를 전부 감당할 수 있을런지...

아두이노에서 돌아가는 프로그램은 표준 입출력도 없고, 파일에 무엇을 기록하거나 읽는 일도 거의 일어나지 않는다. 표준 C++가 갖춘 기능 중에서 아주 작은 부분집합을 이용하는 것에 불과할 것이다. 아두이노를 유일한 활용 방안으로 생각하지 말고, 기왕 이렇게 관심을 갖게 되었으니 C/C++에 대해서 본격적인 공부를 해 보는 것도 좋을 것이다. 인터넷 강좌 중에서는 모두의 코드가 잘 알려져 있는 것 같은데, 여기에 소개된 C++ 강좌는 C를 기본적으로 알고 있는 사람을 대상으로 한다.

C++이 프로그래밍을 처음 배우는 사람에게 적합한가? 이런 질문에 대하여 "C++ is the best programming language"라는 대답을 쉽게 찾아 볼 수 있다. 그러나 내가 종사하는 생명공학 분야의 informatics를 위해서라면, 파이썬이 더 좋은 대안일 수 있다. 예를 들어 Quora에 올라온 질문과 답을 보면 많은 것을 생각하게 한다(Is C++ a good first programming language?).

단지 아두이노만을 위해서 C++을 익힌다면 어떤 경로를 택하는 것이 옳은가? 초보자가 객체지향 프로그래밍(OOP)의 개념을 처음부터 건드리다간 혼란만 겪을 가능성이 크다. 몇 가지 정해진 함수만 잘 쓰는 것으로 충분할 수도 있다. 아두이노 공식 웹사이트 포럼의 Learning C++ programming이라는 글도 한번은 읽어 보아야 한다. Question: Should I learn C++ for Arduio?의 질문과 함축적인 답변도 도움이 될 것이다. 몇 가지를 더 찾아 보았다. 그렇다! 너는 OOP에 약간의 관심이 있다. 물론 아두이노가 이를 학습할 최적의 동기를 제공한다거나, 이렇게 짜여진 프로그램을 실행할 최고의 환경은 아닐 수도 있다.

실무를 위한 프로그래밍 지식의 저변 확대를 위한 C++ 학습인가, 또는 어른을 위한 장난감 구동이라는 응용의 범위를 결코 넘어가지 않는 수준의  C++ 학습인가? 사실 후자를 위한 것이라 해도 불만은 없다. 어차피 소일 및 '치매 예방' 차원에서 시작한 일이 아니었던가? 진공관 앰프를 만들 때보다 납땜 연기를 덜 피우게 되어 건강에도 좋을 것이다.

2022년 2월 6일 업데이트 - 알람 시계 만들기

DS1302를 사용하되 4개의 택트 스위치를 써서 알람 시각을 설정하는 시계로 개조해 보고 싶다. 다음의 정보가 도움이 될 것이다.

Alarm clock with DS1302 RTC

2022년 1월 29일 토요일

아두이노를 이용하여 LCD 창에 표시되는 시계를 만들어 보다

아두이노를 이용한 첫 프로젝트를 마쳤다. DS1302 RTC 모듈을 사용하여 시간을 기록한 뒤 불러내는 방법을 알아내고, 1602 LCD에 이를 표시하는 방법까지를 시도하였다. DS1302 RTC 모듈을 이용하게 만드는 라이브러리가 너무나 많아서 적절한 것을 찾기가 어려웠다. 내가 고른 것은 Rinky-Dink Electronics라는 곳에서 배포하는 DS1302.zip인데, 요일을 약자로 표시한다거나 날짜를 yyyy-mm-dd의 방식으로 나타내는 것이 원활하게 되지 않았다. 이 라이브러리의 최종 버전(v2.2)은 무려 10년 전에 배포된 것으로 Arduino 1.0 IDE에 맞추져 있다. 내기 설치한 Arduino IDE는 1.8.19. 어쩌면 현재의 아두이노 우노 버전과 잘 맞지 않는 것일지도 모른다.

라이브러리를 직접 구해서 압축을 푼 뒤 IDE에 적용하려면 어느 위치에 두어야 하나? 이렇게 수작업으로 설치한 경우 왜 IDE에서 단번에 인식되지 않는가? 헤더 파일을 인클루드하려면 어떻게 해야 하나? 이런 중요한 기본 개념을 이번 프로젝트를 통해 이해하게 되었다.

요일과 날짜 표시 방식이 마음에 들지 않는다.
다른 종류의 RTC 모듈 라이브러리를 섭렵해 보고, 아울러서 아두이노 환경에서 날짜 및 시간 관련 자료를 다루는 것도 연습을 해 봐야 되겠다. 손가락 두 마디 만한 칩에서 돌릴 C++ 언어에 대한 기본도 익히는 좋은 계기가 될 것이다. 늘 Perl만 쓰다가 객체지향 언어를 맛보게 된 셈이다. 어쩌면 나에게 아두이노란 뭔가를 만드는 것이 아니라 프로그래밍 언어의 새로운 측면을 공부하는 를 제공하는 의미가 더 클지도 모른다.

아두이노 공식 웹사이트(또는 아두이노 IDE 메뉴의 라이브러리 매니저)에서 검색이 되는 라이브러리 위주로 활용하는 것이 바람직할 것이다. 오늘 소개한 DS1302.zip는 그렇지 못하다.



2022년 1월 27일 목요일

새로운 장난감, 아두이노를 가지고 놀 준비를 하다

1602 LCD 모듈과 GPS 모듈에 핀 헤더를 납땜하였다. 디스플레이 모듈은 I2C로 제어하는 것이 아니라서 핀을 많이 납땜해야 된다.

GPS 모듈에는 반대 방향으로 납땜을 하는 것이 나았을까? 각자 취향대로 알아서 할 일이다. 첫 프로젝트로는 시계를 만드는 것으로 정했다. 우선 DS1302 RTC 모듈을 사용하여 간단한 시계를 만들어 보고, 다음으로는 GPS 모듈을 이용하여 자동으로 시간을 맞추도록 할 예정이다. 작은 케이스에 만들어 넣을 것을 예상하여 아두이노 나노를 함께 구입하였다.
스테레오 FM 수신 모듈까지 넣어서 시계 라디오를 만드는 것도 가능할 것이다. 시간 조정과 방송국 선국 등의 기능은 혹시 리모콘으로 구현할 수 있지 않을까? 이 모든 것을 아두이노 우노 또는 나노 하나로 전부 감당할 수 있을지 아직은 잘 모르겠다.

인터넷에 예제가 워낙 많이 널려 있어서 공부하기에는 참 좋다. 우선 뽑아 본 과제는 다음과 같다.
아이디어에 따라 응용할 것은 무궁무진하다. 아두이노 프로젝트 허브에서 다른 사람의 아이디어를 감상해 보자.

기억해 둘 것 하나. 아두이노 우노에 내장된 LED(바로 곁에 'L'이라 인쇄됨)은 디지털 I/O 13번 핀에 연결되어 있다. 따라서 pinMode() 함수를 통해 13번 핀을 출력 모드로 만들고 digitalWrite() 함수를 이용하여 HIGH를 출력하면 이 LED에 불이 들어오므로 스케치를 테스트하는데 간단하게 이용할 수 있다고 한다.

2022년 1월 26일 수요일

MyCC 실행을 위해 VirtualBox를 다시 설치하려는데 뭐가 문제인가?

MyCC는 metagenomic contig를 자동적으로 분류(이 분야에서는 "classify"보다는 "bin"이라는 동사를 주로 사용)하는 소프트웨어이다. 2016년 Scientific Reports에 실린 논문(링크)의 제목은 Accurate binning of metagenomic contigs via automated clustering sequences using information of genomic signatures and marker genes이다. 이런 종류의 프로그램들이 지금은 하도 많이 나와서 MyCC는 거의 고전(?)의 반열에 오른 것 같다.

특정 용도의 소프트웨어가 나오면 잘 갖추어진 테스트 데이터셋을 이용하여 이를 평가하는 논문이 나오게 마련이다. 2020년 BMC Bioinformatics에 나온 논문('Evaluating metagenomics tools for genome binning with real metagenomic datasets and CAMI dataset' 링크)에서는 무려 15개의 소프트웨어를 비교 평가하였다. 12개는 original binning tool이고 나머지 3개는 refining binning tool이다. CAMI 라는 것은 Critical Assessment of Metagenomic Interpretation의 약자로, 메타게놈 업계의 Assemblathon과 유사한 취지의 활동인 것 같다. 

비교한 프로그램이 정말 많다.

도대체 metagenomic assembly의 binning에 어떤 프로그램을 써야 하는지 감이 잡히지 않는다면 이런 종류의 논문을 보면 도움이 될 것이다.

2021년 Nature Biotechnology에는 이런 논문(링크)도 나왔다. 제목은 Improved metagenomic binning and assembly using deep variational autoencoders. 프로그램 이름은 VAMB(GitHub)인데, 논문 초록에서 다음과 같이 자랑을 하였으니 이 프로그램도 한번 체험을 해 봐야 되겠다.

VAMB outperforms existing state-of-the-art binners, reconstructing 29–98% and 45% more near-complete (NC) genomes on simulated and real data, respectively. Furthermore, VAMB is able to separate closely related strains up to 99.5% average nucleotide identity (ANI)...

대부분의 binning program은 원본 read를 조립물에 다시 매핑하여 얻은 coverage data를 요구한다. 나노포어 데이터로 조립한 메타게놈에 대해서도 mapping coverage를 구하는 일이 의미가 있는지 요즘 고민을 하는 중이다. 일단은 coverage 자료 없이 무난하게 binning을 하는 도구는 무엇이 있을까 알아보다가 결국 이 글의 맨 앞에 소개한 MyCC를 찾게 된 것이다.  다음은 MyCC 논문의 일부를 인용한 것이다.

It should be noted that CONCOCT, MaxBin, and MetaBAT all utilized the coverage information when binning the metagenomic contigs. Nevertheless, in the absence of coverage information, MyCC produced noteworthy binning performance based on its primary and secondary ratings in F1 scores (among the four tools).

그렇다고 하니 믿어야지... 일루미나 raw data가 있는 경우라면 MaxBin(현재는 버전 2)이 아무런 생각 없이 돌리기에 참 편하다. MetaBAT 2도 잘 만들어진 도구라 생각된다. 이탈리아 트렌토 대학의 Nicola Segata가 주도하는 무슨무슨 PhlAn 시리즈는 그 종류가 너무 많아서 늘 헷갈린다(Segata Lab Tools 링크).

MyCC는 VirtualBox .ova 파일, 도커 이미지, 그리고 소스 파일로 공개되어 있다(SourceForge). 오랜만에 VirtualBox를 설치해 보려 했는데 라이센스 문제로 연구소 내에서 이를 쓰는 것이 금지되었다는 말을 들은 것이 기억이 났다. 심지어 연구소 내에서는 Oracle VM VirtualBox 웹사이트로 접근하는 것 자체가 차단이 된 상태였다. 이 사이트는 국가정보원에서 차단을 요청한 사이트도 아닌데 왜 이렇게까지 된 것일까? 정보보안팀 담당자와 전화 통화를 하면서 이렇게 하지 않을 수 없었던 저간의 사정을 전해 듣게 되었다. 

VirtualBox 라이선스 정책에 대한 질문과 답 웹문서(링크)에 의하면, 문제가 되는 것은 Extension pack이다. 혹시 이것이 Guest Additions와 같은 것이었던가? 그건 아니다. Guest Additions을 설치하지 않으면 예를 들어 호스트와 게스트 사이의 폴더 공유를 하지 못한다. 이건 매우 치명적인 문제이다. 그러나 Guest Additions는 'device drivers and system applications'이고, VirtualBox 소프트웨어 자체와 마찬가지로 GNU General Public License (GPL) version 2에 해당한다. 그러나 Extension pack은 Personal Use and Evaluation License(PUEL)이라서 개인적으로 평가해 보거나 교육용으로 사용할 때에만 무료인 것이다. 

Extension pack이 없다고 하여 가상 머신의 핵심 기능을 쓰지 못하는 것도 아니고, 나도 모르는 사이에 슬며시 설치가 되는 것도 아니다. 조심해서 쓰면 라이선스에 저촉이 되는 것은 아닌데...

연구소에서는 VirtualBox 웹사이트 자체에 접근이 되지 않으니, 노트북 컴퓨터를 이용하여 집에서 MyCC를 설치할 수밖에 없었다. 그러나 고맙게도 MyCC는 도커 이미지로도 제공되지 않던가? 연구소 컴퓨터에서 도커를 이용하여 실행한 뒤 결과 파일 중 MyCluster.pdf를 열어 보았다. 실행 시간도 얼마 걸리지 않는다. 예전에 PhyloPythiaS+를 테스트할 때 걸렸던 시간을 생각해 보라!

MyCC 실행 결과. Nanopore read를 metaFlye로 조립한 것(~49 Mb)을 이용하였다. 길게 퍼진 클러스터 7번은 아마도 동일 종에 속하는 strain mixture?
일루미나와 나노포어 등 다양한 read type을 어떻게 효율적으로 다룰 것인가, 그리고 균주 혼합물의 문제를 어떻게 해결할 것인가 등 binng에는 아직 산적한 문제가 많다. 심지어 assembly graph(.gfa)를 이용한 방법도 나오고 있으니 말이다!

GraphBin: refined binning of metagenomic contigs using assembly graphs (링크)

윈도우 컴퓨터에서 리눅스를 돌릴 수 있는 방법은 가상 머신 이외에도 Windows Subsystem for Linux(WSL)라는 것이 있다.  두 솔루션 사이의 차이점을 알아보려면 Should you run Linux in a Virtual Machine or WSL?을 읽어 보자.

2022년 1월 25일 화요일

집 컴퓨터(Dell Inspiron 3668)에 몇 천원짜리 오피스 프로그램 깔기

Dell Inspiron 660s(2012년 구입)에 이어 Dell Inspiron 3668(2017년 9월 구입)이 집에서 사용하는 데스크탑 컴퓨터이다. 구입 주기를 약 5년으로 잡으면 새 PC를 구입할 때가 되어 간다. 요즘은 스마트폰에서 할 수 있는 일이 워낙 많은데다가 성능이 꽤 좋은 업무용 노트북(Dell XPS 13 9310; 화면이 작은 것은 불만)을 들고 다니게 되어서 집 컴퓨터를 업그레이드해야 되겠다는 생각은 별로 들지 않는다. 기억을 되살려 보니 5년 전에는 아이들이 과제를 하느라 컴퓨터와 프린터를 꽤 많이 써야 했었지만 지금은 각자 노트북 컴퓨터를 갖고 있는 데다가 전부 집을 떠나 바려서 더욱 데스크탑 컴퓨터의 의존도가 낮아졌다.

Dell Inspiron 3668의 간단한 사양은 다음과 같다. 


조금 더 상세하게 살펴본다면...


집 컴퓨터를 최근 잘 쓰지 않게 된 가장 큰 이유는 공포를 느낄 수준으로 느린 속도 때문이었다. 전원을 넣으면 로그인 화면이 나오는데 몇 분은 걸리고, 겨우 진입을 해도 하루 종일 하드디스크 드라이브를 긁으면서 도대체 일을 시킬 수가 없었다. 아예 작심을 하고 제어판을 켠 뒤 불필요해 보이는 프로그램을 하나씩 지워 나갔다. 아들 녀석이 게임을 하기 위해 설치한 것으로 보이는 것을 싹 정리하였더니 비로소 숨통이 트이는 것 같았다.

과학기술연합대학원 대학교(UST) 교원 시절에는 마이크로소프트 오피스를 공식적으로 쓸 수가 있었다(물론 직장에서는 공식 사이트 라이센스를 받은 것을 쓴다). 기업 파견을 2년 동안 나가면서 UST 겸임교원을 더 이상 하지 않게 되면서 최소한 집 컴퓨터에서 사용할 오피스 프로그램을 마련할 필요가 생겼다. 한컴 오피스는 그렇게 비싸지 않아서 진작부터 정품을 구입하여 사용하는 중이었다.

마이크로소프트 오피스 제품군의 가격 정책이 구독제로 바뀌면서 마치 소비자는 더 큰 선택의 폭을 누리게 된 것 같지만 결과적으로 혼동만 초래하고 더 많은 돈을 들이게 된 것은 아닌지 모르겠다. 이렇게 구독제로 바뀐 제품군의 이름은 과거에 Office 365라고 잠깐 불리다가 지금은 Microsoft 365가 되었다. 

마이크로소프트 웹사이트에서도 'Microsoft 365'와 'Office'는 별도의 카테고리에 위치한다.

  • 구독제 제품: 사용 기간 동안 일정 요금 납부. 1개당 사용자 1명이 쓸 수 있으며 여러 대의 PC나 모바일 기기에 설치 가능. 클라우드 저장공간 제공. 가장 싼 것은 Microsoft 365 Personal로서 1년에 89,000원(월 요금은 8,900원, 즉 10개월치 요금이면 1년을 쓸 수 있음. 물론 부가세는 별도임)
  • 영구 라이선스 제품: 1개당 1대의 PC에만 설치 가능하며 사용 기간에는 제한이 없음. 그러나 업데이트는 영구히 제공하는 것은 아님. Office Professional 2021
  • 설치 또는 구독이 필요하지 않은 웹용 Office(무료)도 있다. 인터넷이 없으면 사용에 많은 제한이 있을 것이다. 로그인을 해야 하므로 마이크로소프트 계정 필요.

마이크로소프트 웹사이트에서는 영구 라이센스 제품 중 가장 저렴한 Office Home & Student 2021의 가격이 179,000원으로 나온다. 가정에서는 부담이 되는 금액이다. 그런데 검색을 해 보면 3만원 대의 오피스 2021도 보인다. 어떻게 하여 이런 가격에 풀리게 되는지 정말 궁금하다.

집 컴퓨터에 사용할 마이크로소프트 오피스 제품으로서 라이선스 문제가 없고 가격이 싼 것은 없을까? 오픈마켓에서 평생 사용 가능하다는 제품이 보이길래 구입을 하여 설치를 해 보았다. 광고 글에는 당연히 정품이라고 누누히 강조하였었다. 내가 지불한 돈은 3,900원이다. 사실 여러모로 말이 되지 않는 가격이기는 하다. 이런 것을 써도 될까? 혹시 라이선스 위반으로 사용 중지를 당하는 것은 아닐까? 구글에서 '가격이 싼 마이크로소프트 오피스'라는 검색어를 넣어 보았다.

엄밀히 말하자면 마이크로소프트의 라이선스 정책을 저촉하는 것처럼 보인다. 5천원짜리 MS 오피스는 사도 되는걸까?라는 글을 보면 6개월쯤 뒤에 사용 중지를 당했다는 업데이트가 실렸다. 근거로서 Microsoft 365 계정 비활성화 정보를 링크하였다.

지난 일요일 밤에 구매를 해서 어제 설치를 하였고, 이틀이 지난 오늘 아침 확인해 보니 판매글이 사라졌다. 뭔가 떳떳하지 못한 구석이 있음을 간접적으로 증명하는 것이 아니겠는가? 마이크로소프트 오피스 포털(https://portal.office.com/)에 접속하여 이 오피스 제품을 등록하느라 새로 발급받은 마이크로소프트 계정으로 로그인해 보았다. 이메일 주소는 판매자가 제공한 것이다. 마치 어떤 기관의 멤버로서 발급받은 것만 같은 모습. 이것을 완전한 허위라고 보아야 할까?

이 제품을 등록하면서 설치한 데스크탑 오피스를 열고 내가 과연 어떤 제품을 쓰는 것인지를 확인해 보았다. 혹시 이것이 공식 웹페이지에 있는 교사 및 교직원용 Office 365 A1에 해당하는 것일까? 분명한 차이점은 내가 구입한 것에는 데스크탑 앱이 포함되어 있다는 것이다. 어쩌면 과거에 잠시 유통되다가 만 것을 재판매하는 것일지도 모른다.

Office 365 A1 Plus for faculty

  • Common Data Service
  • Project for Office (Plan E1)
  • Education Analytics
  • Microsoft Kaizala Pro
  • Whiteboard (Plan 1)
  • To-Do (Plan 2)
  • Azure Active Directory Basic for Education
  • School Data Sync (Plan 1)
  • Microsoft Stream for Office 365 E3
  • Microsoft Teams
  • Microsoft StaffHub
  • Power Automate for Office 365
  • Power Apps for Office 365
  • Azure Rights Management
  • Microsoft Forms (Plan 2)
  • Microsoft Planner
  • Sway
  • Yammer for Academic
  • Office 최신 데스크톱 버전
  • Office for the Web for Education
  • SharePoint (Plan 1) for Education
  • Exchange Online (Plan 1)
  • Skype for Business Online (Plan 2)

졸지에 마이크로소프트 계정을 두 개 갖게 되었다. 자, 내가 집 컴퓨터에 설치한 오피스 제품이 과연 앞으로 어떻게 될지는 전혀 알 수가 없다. 일단은 좀 써 본 뒤에 고민하도록 하자.

2022년 1월 24일 월요일

BBMap을 제대로 쓰자(bamscript는 어디에?)

Brian Bushnell의 BBMap은 "a splice-aware global aligner for DNA and RNA sequencing reads"이다. 난 오늘까지도 BBMap이 bwa나 bowtie2를 구동하는 wrapper라고 생각했었다. 그것이 아니라 완전히 단독으로 돌아가는 프로그램임을 오늘 깨달았으니 Brian에게 약간 미안한 마음이 든다. 

BBMap의 공식 배포처는 SourceForge에 있다. 오늘 날짜의 최신 패키지는 BBMap_38.95.tar.gz이며, 압축을 풀면 196개의 Bash script가 나온다. 실제로 돌아가는 실행파일은 자바로 개발된 것으로 알고 있다. 

BBMap은 GitHub에도 비공식 repository가 있다. BBMap은 다른 생명정보학 도구 프로그램을 포함하여 BBTools이라는 이름으로 배포되기도 한다. Joint Genome Institute에서는 다음과 같이 BBMap과 BBTools에 대한 각각 별도의 가이드를 제공한다.

우분투에서 .dep package로 BBMap을 설치할 경우, 정말 BBMap 하나만 설치된다. 그러나 conda에서 설치되는 bbmap은 BBTools도 포함하고 있다. 사실 오늘은 이것 때문에 무척 혼동스러웠다.

BBMap에서 read mapping을 실시할 경우 기본적으로 출력물은 SAM 포맷이 된다. samtools가 깔려 있는 경우에는 이를 BAM으로 전환할 수 있다. 그러나 매핑과 동시에 파이프를 써서 samtools view 또는 sort를 실행하는 것이 아니라, 임시 스크립트 파일을 먼저 작성한 뒤 이를 실행하여 sort와 index 작업을 수행하도록 만들어 놓았다. 예를 들어 보자.

$ bbmap.sh in=reads_1.fq in2=read_2.fq ref=genome.fa out=mapped.sam bamscript=bs.sh; bs.sh

이 용례를 처음 접했을 때, 나는 bs.sh라는 스크립트가 도대체 어디에 있는지를 한참을 찾았다. bs.sh는 bbmap.sh이 매핑 실행을 하면서 새롭게 만드는 스크립트이다. 시스템에 메모리가 얼마나 있는지를 확인하여 안전하게 실행할 수 있는 스크립트를 작성해 주는 것이다. 실제 bs.sh의 사례는 다음과 같다.

#!/bin/bash
echo "Note: This script is designed to run with the amount of memory detected by BBMap."
echo "      If Samtools crashes, please ensure you are running on the same platform as BBMap,"
echo "      or reduce Samtools' memory setting (the -m flag)."
echo "Note: Please ignore any warnings about 'EOF marker is absent'; this is a bug in samtools that occurs when using piped input."
samtools view -bShu mapping.sam | samtools sort -m 15G -@ 3 - -o mapping_sorted.bam
samtools index mapping_sorted.bam

남들은 다 알고 있을것만 같은 기본적인 사항을 오늘 재발견하였다... 그동안 BBTools를 구성하는 유틸리티 중 stats.sh를 가끔 사용하는 것이 전부였다. 

2022년 1월 26일 업데이트

BioStars에 실렸던 BBMap 튜토리얼
  • Part I: Yes .. BBMap can do that! - Part I : bbmap (aligner), bbduk (scan/trim), repair (fix PE reads) and reformat (format conversions)
  • Part II: Yes .. BBMap can do that! - Part II randomreads (read simulation), demuxbyname/filterbyname, bbsplit (read binning/decontamination) and pileup (coverage stats)
Nanopore read의 매핑에는 mapPacBio.sh를 사용하라고 권장하였다. Part I의 시작 부분을 참고할 것.

2022년 1월 17일 월요일

gnuplot "test" 명령, 그리고 색이름에 대한 생각

Gnuplot으로 데이터를 시각화할 때, 점이나 선을 원하는 스타일로 표현하려면 매뉴얼을 찾아 보아야 한다. Cheating sheet 같은 것이 없는지 알아보다가 gnuplot prompt에서 "test" 명령어를 치면 다음과 같이 설정된 터미널에 맞추어(현재는 x11) 일목요연하게 표현한 화면이 나온다는 것을 발견하였다.


각 포인트의 크기나 색상은 별도의 방법으로 지정해야 한다. Gnuplot에서 사전 정의된 111가지 색상의 이름은 다음 웹사이트를 참고하라. 

[StackOverflow] gnuplot: apply colornames from datafile

우리말은 얼마나 다양한 색깔의 이름을 갖고 있는가? 그리고 이는 표준화된 RGB 코드에 어떻게 대응하는가? 이는 국가기술표준원에서 '색채표준정보(색동코리아 사업)'로서 제공하고 있는데 쓰기에 썩 쉽지는 않은 것 같다. 예를 들자면 다음과 같은 영문 자료는 아주 쉽게 찾을 수 있으며, 표현하는 색상의 수도 그 범위가 다양하다.

출처: https://color-hex.org/blog/color-wiki

우리나라의 색채표준정보는 개발이 완료된 시점도 꽤 오래 되었다. 우리말로 된 정확한 색상(색이름을 포함한) 체계를 수립한 취지는 좋으나 이를 현장에 보급하는데 너무 신경을 쓰지 않고 있는 것 같다. 다시 말하자면 바로 위에 보인 색상표에 해당하는 국문 정보를 찾기가 어렵는 것이다. 색채표준정보 웹사이트에서 제공하는 자료는 어떤 것은 프로그램을 설치하여 활용해야 하고, 직관적으로 이해하기도 어렵다. 데이터 시각화를 하면서 언제까지 영어 색이름을 참조해야 될까?

'파랑'은 RGB 코드로 (0,0,255)가 아니었던가? 잘 모르겠다.
늘 귀로 듣는 음악, 그리고 그 음악을 듣게 만들어 주는 장비의 자작에만 몰두하다가 이제는 색깔에도 관심을 갖게 되었다. 


2022년 1월 16일 일요일

[라즈베이 파이 3B - 볼루미오] 하드웨어 전원 스위치를 달았다

참고한 웹사이트는 다음과 같다. 첫 번째 문서에서는 RPi.GPIO 라이브러리를 설치하는 방법을 설명하지는 않는다.
누를 때에만 연결되는 버튼 스위치가 필요하다. 평소에 갖추고 있는 부속이 아니라서 어떻게 해야 할까 잠시 고민을 하다가 아두이노 키트 안에 몇 개 있었다는 것을 기억해 냈다. 케이스에 구멍을 뚫고 고정하는 형식의 것이 아니라서 선을 바깥으로 뺀 뒤 만능기판에 납땜을 하여 연결하였다.

출처: https://github.com/Howchoo/pi-power-button


pi-power-button(GitHub)를 설치하고 설명서에 나온대로 부팅 시 자동으로 실행되게 설정을 마친 뒤 테스트를 해 보았다. 음악을 재생하는 도중에 버튼을 살짝 누르면 마치 터미널에서 정상적으로 'shutdown -h now' 명령을 날린 것처럼 전원이 꺼진다. 한번 더 누르면 전원이 들어온다. 두 번째의 기능, 즉 'wake up' 기능은 미처 기대하지 않았던 것이다. 이 버튼을 이용하여 전원을 내린 뒤 다시 켜려면 어댑터를 뺐다가 다시 꽂아야 한다고 생각을 했었다.

라즈베리 파이의 핀 기능(이를 'pinout'이라 부르며, 진공관에서도 마찬가지)을 그림으로 쉽게 설명한 자료가 https://pinout.xyz/에 있으니 평소에 참고하면 될 것이다.

Howchoo 웹사이트에는 DIY를 위한 가이드가 풍성하게 실려 있는 듯하다. 호기심을 자극하기에 매우 좋은 곳이다. 구입만 해 놓고 아직 제대로 활용을 하지 못하는 아두이노를 되살리는데 도움이 될 것이라 생각한다.

바닥면에 구멍을 뚫다가 금이 간 산켄 SI-1525 HD 앰프를 보수하기 위하여 두게 2mm 포맥스 판을 붙였다. 잡음을 완벽 수준으로 줄이는 방법을 알아낸 뒤 요즘 들어서 더욱 애착을 갖게 된 반도체 앰프이다. 2022년에는 이미 만든 앰프를 개선하는 것 이상의 DIY 목표를 정하지 말아야 되겠다. 







2022년 1월 14일 금요일

[라즈베리 파이 3B] 볼루미오 3로 업그레이드하기

작년 여름부터 내 음악 생활의 좋은 동반자가 되어 준 라즈베리 파이. 설정 화면에 들어가니 볼루미오 3으로 업그레이드를 하겠느냐고 묻는다. 공장 초기화 상태가 된다는 주의 사항을 접하고 약간 주저하다가 용기를 내어 진행해 보기로 하였다. 처음부터 다시 공부한다는 생각으로 하나하나 찾아 나가면 되지 않겠는가.


설치가 진행되기를 기다린 다음 랩탑 컴퓨터의 웹브라우저에서 예전에 쓰던 IP 주소를 입력하였다. 혹시 접속이 되지 않을까 걱정을 했었는데 환영 메시지와 함께 언어 설정을 하라는 화면이 나타났다. 총 다섯 단계의 간단한 설정을 마친 뒤 재시작을 하였다. IP 주소를 암기할 필요가 없이 http://volumio.local/을 입력하면 된다는 것도 까맣게 잊어버리고 있었다.

음원이 저장된 USB 드라이브를 꽂고 인덱싱이 되기를 기다렸다. 개인 라디오(personal radio) 플러그인이 사라져서 다시 설치를 하였다. 라디오와 인덱싱이 다 끝난 음원 파일 재생에 아무런 문제가 없다. 여기까지는 OK!

포플레이의 음악을 재생 중인 볼루미오 3.

다음으로는 유튜브의 음악을 들을 수 있게 만드는 것. 볼루미오 2에서는 플러그인으로 지원이 되다가 이것이 막히면서 라즈베이 파이로 ssh 접속을 하여 직접 설치해야 하는 프로그램을 써야만 했었다. 볼루미오 3에서는 어떻게 바뀌었을까? 플러그인 목록에 YouTube Cast Receiver라는 것이 있다. 이것이 유튜브 재생을 해 주는 플러그인인가? GitHub 사이트에 가서 이 플러그인이 무엇을 하는 것인지 읽어 보았다. 유튜브 모바일 앱이나 웹사이트에서 볼루미오로 오디오 재생 스트림을 보내는 플러그인이었다. 설치 후 휴대폰의 유튜브 앱에서 볼루미오로 소리가 재생되도록 해 보니 잘 된다.

휴대폰 유튜브 앱에서 볼루미오로 재생이 이루어지게 보내면...
볼루미오에서는 이렇게 재생을 한다.


원래 내가 쓰던 것은 이게 아니라 volumio-youtube2라는 것이었다(과거 설치 기록 링크). 구글 유튜브 API를 이용하는 꽤 복잡한 방법을 통해야만 했었다. 어차피 잘 쓰는 기능이 아니니 일단 나중에 여유가 있을 때 다시 시도를 해 보기로 한다.


볼루미오로 SSH 접속을 하려면

  1. 웹브라우저에서 http://volumio.local/dev/에 접속한 뒤 SSH 항목의 ENABLE을 클릭한다. 볼루미오의 로그 메시지를 보려면 맨 아래의 Live Log 항목에서 ENABLE을 클릭한다.
  2. SSH 클라이언트(윈도우라면 PuTTY)에서 volumio.local의 22번 포트로 접속한다. ID와 비밀번호는 전부 volumio이다.


라즈베이 파이에서 볼루미오를 쓰면서 불편한 점은 다음의 두 가지이다.

  1. 전원 케이블이 너무나 쉽게 빠진다. 마이크로 USB 단자의 숙명? 이런 해결 방법도 있다(링크). 파워 케이블을 그냥 뽑으면 최악의 경우 SD 카드가 망가질 수도 있다고 한다. 라즈베이 파이를 건드렸더가 파워 케이블이 빠지는 일이 지금까지 꽤 여러 차례 있었지만 아직 고장은 나지 않아다.
  2. 눌러서 전원을 끌 수 있는 스위치가 있으면 좋겠다. 내가 불편하게 느끼는 점은 이미 누군가가 해결 방법을 제시해 놓았다. 예를 들자면 How to add a power button to your Raspberry Pi와 같은 것. 여기에서는 GPIO 기능을 이용하여 아주 쉽게 이 기능을 구현하였다. 당장 시도해 볼 수 있는 프로젝트이다.

라즈베이 파이(볼루미오 3)와 6LQ8 SE 앰프.

2022년 1월 11일 화요일

Nanopore sequencing - 무식에서 벗어나자!

"무식에서 벗어나자!"는 원래 강기동 박사님("KDK")이 진공관 앰프의 B 전원에 대해서 쓰신 글의 제목이다. 아래에 보인 두 링크의 글 내용은 동일하다. 티스토리 웹사이트의 개설 취지에 대해서는 여기를 참조하면 된다. My Audio Lab은 강기동 박사님이 그 후에 직접 개설하여 운영하는 곳이다.

내가 나노포어 시퀀싱을 처음 접한 것이 아마 2016년도일 것이다. 경험이 흐르는 물처럼 연연히 이어져 와야 되는데, 가물에 콩 나듯 이따금씩 사용하다보니 그 사이에 기술은 저만치 앞서나가고 있다. 그러니 현업에서 열심히 사용하는 분들에게 오히려 물어서 따라잡기를 해야 하는 실정이다. 

그런데 그 궁금한 것들이 결국은 나노포어 커뮤니티 웹사이트를 잘 뒤지면 문서로 정리되어 어딘가 있다는 것이 중요하다. 나에게 스스로 되묻지 않을 수 없다. RTFM! 일단 아주 기본적인 문서부터 읽어라. 단, 나노포어 커뮤니티에 게시된 정보를 읽으려면 로그인이 필요하다.


한번 자리잡은 인식은 수정에 완강히 저항한다. 예를 들어서 MinION 기기는 Mk1B와 Mk1C의 두 가지가 있는데, Mk1B = MinION이라고 처음에 받아들이고 나서는 좀처럼 바뀌지는 않는다. 아래 사진은 MinION Mk1B와 MinION Mk1C이다. 이를 자꾸 MinION과 MinION Mk1C(또는 단순히 Mk1C)라고 생각하는 것이다.


Mk1B와 Mk1C 무엇을 사용하든 flow cell은 동일하다. 이론적인 최대 throughput은 50 Gb라 하는데, typical throughput은 20 Gb 정도일 것이다. 아니, 구입한지 오래 된 flow cell을 쓴다 가정하고 10 Gb를 얻는다고 치자. 시퀀싱과 동시에 local basecall을 한 경우, 시퀀싱이 끝남과 동시에 basecall도 다 끝날까? 물론 그렇지 않다.


Fast model로 basecall을 하는 경우, MinION Mk1C와 MinION CPU(not GPU)와 의 처리 속도는 각각 0.8 및 0.13 Gb/h이다. 하루로 환산하면 19.2 및 3.12 Gb에 해당한다. 만약 이틀 동안시퀀싱을 하여 10 Gb가 생겼다면, MinION Mk1C에서는 basecall이 종료된 상태이지만 CPU 환경에서는 6 Gb 조금 넘게 처리가 된 상태라서 하루 이상을 더 기다려야 한다.

HAC model을 사용한다면 어떨까? 처리 속도는 0.07 Gb/hr(Mk1C) 및 0.014 Gb/hr(MinION CPU)이다. 24시간에 대해 환산하면 1.68 및 0.336 Gb에 그친다. 시퀀싱을 마쳐 놓고 basecall이 끝나기까지 4일을 더 기다려야 한다고 생각해 보라(Mk1C의 경우). 물론 이는 이론에 해당하는 예상치이고 실제로는 더 오래 걸릴 것이다.

따라서 Mk1C라 해도 fast basecall만 쓰는 것이 현실적일 것이다. 결국은 GPU가 달린 성능 좋은 컴퓨터를 구매하는 것이 현명한 선택이 될지도 모른다. Mk1C에 너무 많은 것을 기대했었다. 일루미나 read로 교정을 할 수 있다면, fast model로 충분할 것이다. 그러나 모든 것을 long read로 해결하려면 고민에 빠지게 된다.

아무런 생각 없이 Xeon E5520이 하나 달린 컴퓨터(메모리 12GB)에서 Mk1B를 물리고 시퀀싱을 한 것이 화근이었다. 시퀀싱 개시일은 지난 금요일(1/7) 오후 3시 7분이다. 이제 거의 4일째가 되어 가는데 아직도 basecalling 진행도는 35%에 불과하다. 추산되는 목표량은 8.09 Gb.

같은 연구원에서 나노포어 시퀀싱을 이미 활발하게 진행하는 두 연구팀에 물어보니 NVIDIA사의 GeForece RTX 3090Titan RTX를 장착한 컴퓨터에서 여유 있게 guppy HAC basecalling을 하고 있다고 한다. 부럽다! 

2022년 1월 10일 월요일

gzipped fastq 파일 여러개를 cat으로 합칠 수가 있다니!

다음의 명령어가 작동을 하리라고는 전혀 생각하지 못했다.

$ cat file1.fastq.gz file2.fastq.gz file3.fastq.gz > all.fastq.gz

당연히 압축을 풀어서 파이프로 날린 뒤 다시 합치는 명령어, 즉 'zcat files... | gzip -c > all.fastq.gz'을 써야 한다고 생각했는데 그게 아니었다. zcat - gzip 명령어를 쓰면 40배는 느리다고 한다.

이에 대한 근거는 다음의 URL에서 찾을 수 있다. 가끔씩은 이렇게 생각지도 않은 효율적인 방법을 발견하기도 한다. 


처음에는 이렇게 파일을 연결할 수 있다는 것이 믿어지지 않았다. 그러나 Pierre Lindenbaum이 이미 8년 전에 확인을 해 주었다.

Sanken SI-1525HD 앰프의 잡음 개선

반도체를 이용한 오디오 앰프라고 해서 진공관 앰프 자작에 비하여 월등히 편한 것만도 아니다. 간혹 매우 듣기 싫은 잡음이 나는데(간혹이 아니라 나의 자작 경험으로는 거의 항상), 이것을 완벽하게 해결하기가 참 어렵다.

Sanken SI-1525HD IC를 이용한 앰프도 그러했다. 교류 전원을 타고 들어오는 60 또는 120 Hz의 잡음과는 다른, 매우 듣기 싫은 소리가 난다. 뭐라고 표현하면 좋을까, 마치 서늘한 얼음 동굴 안에서 냉장고를 가동하는 소리라고나 할까. 앰프부에 손을 가까이 가져가면 이 잡음은 더욱 커진다. 기본이 갖추어지지 않은 앰프라고 고백을 하는 것이다.

도대체 어디가 잡음의 '안테나' 역할을 하는 것일까? 내가 얻은 해답은 IC의 방열판이었다. 방열판에 볼트를 끼운 뒤 그라운드에 연결하니 귀에 거슬리던 잡음이 사라졌다.

이런 앰프 칩은 보는 재미가 있다. 기판은 에폭시가 아니라 페놀 수지 재질인 것으로 보인다. 쓰인 부품의 질이 고급은 아니지만 실용적으로는 별 문제는 없을 것이다. 
그러나 아직도 손을 가져가면 잡음이 더 커지는 포인트가 있었으니 바로 볼륨 포텐셔미터였다. 중국제 사각 미니 볼륨의 본체도 접지에 연결을 해야 하는 것이다. 이것이 납땜이 되는 재질인지는 알기 어렵다. 납땜이 어려우면 와셔를 이용하면 된다.

2016년에 Sanken IC가 조립된 보드를 사서 앰프를 만들면서 이 부품에 대한 정보를 알아내기 위해 무던히 노력했지만, Sanyo power pack만큼의 정보가 남아있지 않았다. 마침 제이앨범에서 유튜브 동영상을 하나 소개해 주었다. 이 부품이 내장된 AIWA AX-7300E리시버의 분해와 관련한 것으로서 2020년에 업로드된 것이었다.
도대체 이 리시버 앰프는 언제 만들어진 것일까? 독일어 사이트에서 1979-1981 사이에 생산이 되었음을 확인하였다. 다른 웹사이트에서는 1977-1979라고도 하고... 아마 모델명 뒤에 붙은 'E'가 더 나중에 개발되었음을 의미하는지도 모른다. 충분히 빈티지 제품이라 불릴만한 오디오이다.

테스트를 하느라 보드에 연결되는 전선을 다시 납땜하였는데 순간의 판단 착오로 원래 고정 상태로 되돌리기가 어렵게 되었다. 어차피 테스트를 위한 작업이었으니 좀더 나은 케이스에 재조립을 하는 것이 바람직하다. 이번에도 다이소 플라스틱 케이스를 쓸 것인가? 아니면 조금 비싸더라도 국내 메이커(예: 케이스포유)에서 만든 양질의 케이스를 쓸 것인가? 케이스포유의 SNM 시리즈 알루미늄 케이스가 좋아 보이는데 최대 높이가 60mm라서 산켄 앰프의 방열판의 높이와 동일하니 수납은 곤란하다.


2022년 1월 11일 업데이트

하루가 지나서 다시 소리를 들어 보니 잡음이 그대로이다. 입력선의 결선 방식을 바꾸었지만 특별히 달라질 것은 없는데, 다시 좌절 사이클인가? 입력 커플링 캐패시터(마일러 제품)에 손을 가까이 가져가 보니 잡음이 유도된다. 커플링 캐패시터가 안테나도 아니고 이건 무슨 조화인가.

허, 핵심 부품이 기판에 다 꽃힌 상태의 부품을 가지고도 이렇게 형편없는 앰프밖에 만들지 못한단 말인가. 진공관 앰프보다 잡음을 잡기가 더 어려워서야 어디 말이 되는가? 정녕 해결할 방법은 없을까...

고민 끝에 회로의 그라운드와 전원부의 접지를 연결해 보았다. 어라? 잡음이 완전히 사라졌다. 캐패시터를 통해서 AC 커플링을 해도 효과가 같았다. 어떤 앰프는 콘센트의 접지에 회로의 접지를 연결하면 잡음이 더 심해지기도 하는데, 이 경우는 그렇지 않았다. 

원래 오디오 기기는 2종 기기(class II appliance)의 요건을 갖추는 것이 옳다. 즉 보호접지를 필요로 하지 않게 만드는 것이 맞고, 보호접지에 본 회로의 그라운드를 연결하여 노이즈가 줄었다면 그것은 결과적으로는 좋은 일이겠지만 정답은 아니다. 만약 새로 케이스를 주문하여 재조립을 한다면 다시 처음부터 면밀하게 검토를 해야 되겠다.


2022년 1월 6일 목요일

2022년 새해 두 번째 MinION Mk1B 시퀀싱 성공 - Guppy v6을 따로 설치하지 말고 MinKNOW에 포함된 것을 쓸 것!



생물자원센터(KCTC)에 근무하는 연구원께서 정확하게 문제를 짚어 주었다. MinKNOW와 같이 설치되는 guppy를 써야만 한다. 만약 다른 컴퓨터에서 guppy만을 따로 돌릴 것이라면 그렇게 해도 상관이 없을 것이다.

수백, 수천의 코어를 가진 컴퓨터를 곁에 두고 있지 않다면, 어떻게 해서든 Mk1C를 정상화 궤도에 올려서 시퀀싱과 동시에 high accuracy basecalling을 하는 것이 좋을 것이다. 아래 그림(MinION Mk1C user manual version MKC_2005_v1_revQ_27Nov2019 1쪽에서 발췌)에서 보인 256 core GPU라는 것이 바로 CUDA core라는 이름으로 표현되는 것과 동일한 것인가? 이 분야를 잘 모르니 답답할 따름이다. 회사에서 파견 근무를 하면서 나노포어 시퀀싱 용도로 맞추었던 컴퓨터에는 GeForce 1660 Ti 그래픽스 카드(1536 CUDA core, 6GB)가 장착되어 있었는데, 단순 계산으로 이것이 Mk1C보다 6배(1536/256) 많은 코어를 갖고 있는 것인가? 잘 모르겠다... 채굴 광풍이 불어서 그래픽스 카드를 구하기가 어려우니 참 별난 세상을 살고 있다. 

MinION Mk1C의 하드웨어.


2022년 1월 5일 수요일

헌혈하기


오늘 생애 세 번째 헌혈을 하였다. 남자들이라면 누구나 신병교육대에서 헌혈을 한 경험이 있으니 그 후로 겨우 두 차례를 더 한 것에 불과하다. 특별히 마음을 먹고 헌혈의 집을 찾아간 것도 아니고, 연구소에 찾아온 헌혈차에서 별로 어렵지 않게 팔을 걷어붙였다. 소매나 바짓자락을 말아 올리는 것을 '걷어부치다'로 잘못 알고 있는 경우가 있는데, '걷어붙이다'가 옳은 표현이다.

내가 헌혈에 관심을 갖게 된 것은 어떤 사연이 있기 때문이다. 가족사와 관련한 일이라서 상세하게 적기는 그렇고, 어렵지 않게 사랑을 실천할 수 있는 일이 바로 헌혈이 아닌가 한다. 

헌혈은 70세까지 가능하지만, 60대 후반에 하려면 60-65세 사이에 헌혈을 한 경험이 있는 경우에만 가능하다고 한다. 왜 그런지에 대한 설명은 듣지 못했다. 전혈을 헌혈한 경우 80일 정도 시간이 흘러야 또 할 수 있다고 한다. 헌혈을 위해서라도 건강한 몸을 유지할 필요가 있다.

연구소에 헌혈차가 오는 경우에 맞추어서 해도 될 것이다. 아마 1년에 1-2회 정도 차량이 방문하는 것으로 알고 있다. 코로나19에 의해 헌혈 참여가 크게 줄고 단체 헌혈 취소도 많아서 어려움이 많다고 한다.

다음은 대한적십자사 헌혈 홍보 동영상 "I'M BLOODONOR"이다. 블러도너! 이름을 짓는 센스가 돋보인다.

한때 부실한 혈액 관리, 그리고 고지서처럼 오해하게 만든 적십자 회비 납부용 지로용지, 전임 총재의 부적절한 행동과 발언 등으로 대한적십자사의 위상이 예전과 같지는 않은 것 같다. 그래도 사회의 그늘진 곳을 돌보는 일을 하는 곳이니 관심과 지원은 필요하다.


2022년 새해 첫 MinION Mk1B 시퀀싱에 실패하다 - guppy 최신 버전(v6)은 이전의 MinKNOW와 호환되지 않는가?

작년 여름(혹은 가을 무렵)에 우분투 18 기반의 데스크탑 컴퓨터에서 마지막 시퀀싱을 한 뒤 바로 어제, guppy를 최신 버전(6.x)으로 업데이트한 뒤 2022년 첫 시퀀싱을 실시하였다. 하드웨어와 flow cell 체크까지 마친 뒤 라이브러리를 로딩하고 시퀀싱을 개시하는 순간, 러닝에 실패하였으니 'contact support'하라는 메시지와 함께 중단되었다. 무엇이 잘못되었다는 메시지는 전혀 나오지 않았다.

두 대의 컴퓨터를 번갈아 가면서 계속 재시도를 해 보았지만 결과는 같았다.

부랴부랴 다른 연구팀의 MinION Mk1C(Mk1B 아님)를 빌려다가 flow cell을 갈아 끼우고 러닝을 재개하였다. 우리 연구팀에서 갖고 있던 Mk1C는 고장이 나서 수리를 의뢰한지 꽤 되었다.

열심히 근무 중인 MinION Mk1C.

일반 컴퓨터에서 MinION Mk1B를 구동하면서 방화벽 설정 등으로 인해 꽤 애를 먹었다. 지난 2년 동안 회사에서 파견 근무를 할 때에는 전산팀과 실제 이를 관리하는 외부 협력업체를 두 단계를 거쳐 연락하면서 MinION을 연결한 컴퓨터에 대한 모든 네트워크 관련 보안을 풀어달라고 하였었는데, 사실 이는 그렇게 바람직한 상황은 아니다.

MinION Mk1B IT requirement(PDF file)

이 문서에서 요구하는 네트워크 접근 권한을 다시 한번 알아보자.

  • HTTPS/port 443 TCP access to AWS-eu-west-1 IP ranges. 이것은 Telemetry feedback와 EPI2ME 분석을 위한 것이다. 근무지에서는 외부 상용 클라우드 접속이 불가하다. Telemetry와 EPI2ME는 쓰지 않으니 이를 활성화하지 않아도 상관이 없지 않을까?
  • HTTPS/port 443 and HTTP/port 80 for software update (178.79.175.200과 96.126.99.215에 접속이 가능해야 함). 이것 역시 마음에 들지 않는 상황이다. Flow cell의 pore 수 체크까지 다 마친다음에 소프트웨어 업데이트를 확인하지 못하여 시퀀싱을 개시하자마자 멈춘다는 것은 이해가 가지 않는다.
위의 두 요구 사항을 충족하기 위해 특별히 한 일은 아직 없다. 이러한 상태에서 작년에는 분명히 성공적인 러닝을 했었다는 점이 중요하다. 그 후에 연구소의 네트워크 보안 정책이 강화되었는지는 알 수 없다.

Telemetry는 말 그대로 원격 측정을 뜻한다. 이 문서에 따르면, "원격 측정(telemetry) 정보는 실험 성능을 모니터링하고 문제 해결 사례를 지원하기 위해 이용 약관에 따라 MinKNOW 시퀀싱 실행에 의해 수집됩니다. 이 정보 중 일부는 자유 형식 텍스트 입력 필드에서 가져오기 때문에 개인 식별 정보를 포함해서는 안 됩니다. 시퀀스 데이터는 수집되지 않습니다."라고 하였다. Telemetry를 위해서는 아마존 AWS-eu-west-1 리전에 있는 IP 주소에 접근 가능해야 되는데, 이는 여기에 나온다. 실제 IP 주소 대역 정보는 별도의 json 파일에 수록되어 있는데, eu-west-1에 해당하는 라인은 무려 822개이다. 

만약 어제의 실패가 IT requirement에서 요구하는 외부 네트워크 접근 차단에 의한 것이 맞다면, 전산 보안 관리자에게 이를 전부 풀어달라고 해야 되는데 이것 역시 여간 성가신 일이 아닐 것이다. 아마 컴퓨터와 MinION Mk1B를 집에 들고 가서 시퀀싱을 하면 될 것만 같다. 흠, 그러면 고정자산 무단 반출에 해당한다. 

컴퓨터 설정이 너무 번거로워서 인터넷에 물리지 않고도 작동 가능한 MkIC를 갖추게 된 것인데, 하필이면 고장이 날 것이 뭐람?

여기까지 쓴 뒤 '게시' 버튼을 클릭하는 것을 깜빡 잊고서 연구소의 다른 MinION 사용자와 의견을 주고받았다. 연구소의 방화벽 정책은 outbound에 대해서는 허용을 하므로 외부 서버와의 접속 차단 문제는 아닌 것 같고, 대신 Guppy의 최신 버전이 Mk1B용 MinKNOW software와 호환이 되지 않을 수도 있다는 힌트를 얻었다. Guppy v6 릴리즈와 관련한 공식 문서(링크 - Nanopore community 로그인 필요)에서 이를 명시적으로 나타내지는 않았지만, 여기에 이어지는 질문과 답을 보니 나와 비슷한 문제에 직면한 사람들이 있었고, 이에 대하여 MinKNOW(Mk1B 구동용)는 자체 포함된 guppy하고만 호환이 된다는 글이 달려 있었다. 이 문제는 다음번 버전의 MinKNOW가 나올 때 해결이 될 것이라는 뜻이다.

이 말이 맞다면 guppy v6을 지우고 MinKNOW software(v21.10.4)를 새로 설치하여 여기에 포함된 guppy v5.0.17을 쓰도록 하면 정상적인 시퀀싱이 될 수도 있음을 뜻한다. 이에 따라서 MinKNOW를 재설치하였다. 이틀쯤 후어 두번째 러닝을 컴퓨터+MinION Mk1B에서 해 보면서 정상 작동을 하는지 확인해 보면 될 것이다.

Bacillus velezensis GB03의 유전체 염기서열을 등록하여 공개하고 보니 오타가 보인다(링크). 아니 이런... Sequencing technology: Oxford Nanopore MiniION이라니... 이 유전체 정보는 2년 전에 제출하고 공개를 기다리던 것인데 무슨 이유인지 NCBI에서 처리를 해 주지 않았다. 신년이 되어 이메일로 공개를 촉구하였더니 즉시 반영이 되었다. 

2022년 1월 3일 월요일

라즈베리 파이를 끌어안은 나토 밴드

내가 음악 감상용으로 매일 사용하는 라즈베리 파이 3B는 5핀 마이크로 USB 단자를 통해서 전원을 연결하도록 되어 있다. 케이블의 문제인지는 잘 모르겠으나 조금만 힘을 주면 단자에서 빠져 버려서 여간 불편한 것이 아니었다. 라즈베리 파이도 일종의 컴퓨터이므로 명령어를 통해서 제대로 셧다운을 하는 것이 아니라 별안간 전원을 뽑아 버리면 파일 시스템이 깨지는 등의 문제가 생길 수 있을 것이다. 아직까지는 재부팅을 하였을 때 이상이 발견되지는 않았다.

전원 케이블이 빠지지 않게 하려면 어떻게 하는 것이 좋을까? 케이블의 일부를 본체에 테이프로 고정하여 한나절 정도 쓰다가 보기가 영 좋지 않아서 검정 고무줄로 케이블을 묶은 뒤 그 위에 안쓰는 나토 밴드를 둘렀다. 이제 안심이 된다.

올해에는 오디오 앰프 자작에서 또 어떠한 엉뚱한 일을 저질러 볼 것인가? 기능성에 대해서는 별로 내세울 것이 없고, 장식성과 희소성이 높은 그 무엇인가를 시도해 보아야 되겠다.