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년 12월 24일 업데이트 - 원드라이브에 로그인이 안 됨

어제 확인해 보니 랩탑(ThinkPad E14 G3)으로부터 이 오피스 프로그램에 연결된 원드라이브로 로그인이 되지 않는다. 


오피스 프로그램에서 로그인하여 문서를 작성하는 데에는 아직 지장은 없다. 단지 로컬 컴퓨터에 작성한 문서를 저장하는 것이 상당히 번거로울 뿐이다. 실은 몇 달이 넘도록 이 계정으로 접속을 하지 않고 있었다. 그런데 트래픽이 높다는 것이 무슨 의미인지를 모르겠다. 애초에 우려했듯이 올바르지 않은 계정이라 생각하고 마이크로소프트측에서 원드라이브 접속을 불활성화한 것은 아니었는지 모르겠다.

오피스 사용 환경을 바꾸어야 할지도 모른다. 심각하게 고민을 할 때가 되었다.



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)가 아니었던가? 잘 모르겠다.
늘 귀로 듣는 음악, 그리고 그 음악을 듣게 만들어 주는 장비의 자작에만 몰두하다가 이제는 색깔에도 관심을 갖게 되었다.