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의 하드웨어.