2021년 9월 23일 목요일

2021년 9월에 올림푸스 DSLR E-620을 쓴다는 것은...

디지털 카메라의 시장이 해가 갈수록 쭈그러들고 있다는 것은 누구나 다 아는 사실이다. 레트로 감성에 필름 카메라와 바이닐(LP)이 잠시 인기를 얻고 있지만 산업의 흐름을 바꿀 정도는 되지 못하는 것으로 안다.

스마트폰이 일반인을 위한 카메라 수요를 흡수하면서 소위 전문가용 카메라로 불리던 DSLR은 아예 판형을 풀프레임(과거 필름의 크기와 같은 36 x 24mm)으로 키우거나 혹은 동일한 센서 크기를 갖는 미러리스로 체제를 바꾸어서 진지한 아마추어 계층을 흡수하고 있다. 그래도 과저 필름 DSLR의 전성기에 비교할 바는 아니다. 여전히 글로벌 시장에서는 캐논이 가장 큰 비중을 차지하고 있지만, 풀프레임 미러리스라는 새로운 유행을 불러 일으킨 데에는 소니가 크게 기여한 것 같다.

나도 한때는 꽤 진지하게 사진을 찍고 직접 암실 작업(흑백)을 하던 사람이었다. 그런데 그게 벌써 30년 가까운 과거의 일이 되고 말았다. 거실 장식장에는 이제 작동 상태를 신뢰할 수 없는 카메라 본체와 렌즈가 꽤 많이 잠을 자고 있다. 나 역시 뒷주머니에 꽂고 다니던 휴대폰을 꺼내어 사진을 찍고, 특별한 후처리 없이 구글 포토에 그냥 자동 업로드하는 사진 생활에 익숙해졌기 때문이다.

나의 첫 DSRL은 올림푸스의 E-620이다(PRREWIEW에 실린 정보 링크). 2010년 11월 초에 두 개의 줌렌즈를 포함한 키트를 할인 행사 가격에 구입하여 한동안 잘 사용하였으나, 만 4년째가 되면서 IS(image stabilization) 기능에 문제가 생기면서 점점 쓰지 않게 되었다(관련 글 링크). 그런 일이 벌어진 직후 가족 여행을 위해 펜탁스 Q 10(5-15mm 렌즈킷)을 구입하여 조금 쓰다가 현재와 같이 스마트폰으로만 사진을 찍는 체제로 굳어지게 되었다. E-620은 다른 필름 카메라와 마찬가지로 거실 장식장 속에 갖인 상태로 몇 년을 그대로 지내고 있었다. 

어떤 일이 갑작스런 계기가 되었는지는 잘 기억이 나지 않는다. 이번 추석 연휴를 보내면서 문득 (D)SLR의 감성이 그리워지기 시작했다. 터치 스크린이 아니라 손으로 직접 하드웨어 버튼(또는 다이얼)을 조작하고, 아이 레벨 뷰파인더에 직접 눈을 대고 피사체를 바라보며 셔터 릴리즈 버튼을 누르는 경험을 다시 해 보고 싶었다. 배터리를 충천하여 실로 오랜만에 카메라를 조작해 보았다. 확실히 Ansmann의 호환 배터리는 문제가 있었다. 충분한 시간을 충전하였지만 충전기의 표시등이 녹색으로 바뀌는 것이 아니라 적색 상태에서 깜빡거리는 것을 발견하였다. 그러나 정품 배터리는 제대로 작동을 하였다. 넥 스트랩의 중간에 덧댄 미끄럼 방지용 인조 가죽(?)은 부스러지기 시작하였고, USB 단자를 덮는 고무 마개는 케이블을 꽂기 위해 젖히는 순간 탄성이 다 없어져서 툭 부러져 버렸다.

비록 오랜 세월을 견디면서 일부 외장재는 이렇게 부스러지는 상태였으나, 2014년 11월에는 분명히 문제가 있던 E-620가 마치 잠에서 깨어나듯 조금씩 제 기능을 되찾기 시작하였다. 처음에는 작동이 되다 안되다는 반복하는 것으로 여겨졌으나, 그것은 상태가 나빠진 호환 배터리를 충분히 충전하지 못해서 생긴 문제였던 것 같다. 


어댑터를 통해서 헬리오스 수동 렌즈를 끼워 보았다.

올림푸스한국은 2020년 5월, 국내에서 카메라 사업을 완전히 종료함을 밝힌 바 있다. 사후 서비스는 2026년 3월 31일까지 한시적으로 운영된다. 한국 소비자들이 유난히 센서의 크기에 집착하는 것이었을까? 공식적으로는 한국 시장에서 물러나는 것이지만, 올림푸스가 계속 카메라를 생산할지는 알 수가 없다. 마이크로 포서즈 형식의 카메라 및 호환 렌즈는 앞으로 나온다고 해도 해외 직구를 통해 사는 것 말고는 구입할 방법이 없다. 게다가 E-620은 훨씬 전에 버림받은 '포서즈' 형식이 아니겠는가? 올림푸스의 마이크로 포서즈 시스템 바디 모델 번호 체계는 너무나 헷갈리므로 별도의 문서를 참조하는 것이 낫다. OM-D는 E-M# 형태의 바디에 해당하는 것 같다.

다행스럽게도 어제 하루 동안의 출사에서 배터리 문제를 제외하면 E-620은 별 문제가 없이 작동하는 것처럼 보였다. 2014년 늦가을 당시에는 왜 IS 불량 현상이 빚어졌는지 이해할 수 없을 정도였으니 말이다. 하지만 '가전제품'과 다를 바가 없는 DSLR 본체가 앞으로 얼마나 잘 작동할지는 예측하기 어렵다. 만약 E-620 본체가 정말로 수리가 어려울 정도로 망가진다면, 14-42 mm및 40-150 mm의 두 줌렌즈는 어디에 쓴단 말인가? 예비용으로 적절한 마이크로 포서즈 바디와 렌즈 어댑터(MMF-1/2/3)을 구해 두는 것이 옳을까? 아니면 차라리 캐논의 보급형 DSLR 바디를 사서 역시 놀고 있는 EF 렌즈를 끼워서 쓰는 것이 바람직할까?

추석 연휴 마지막 날에 군산에서 올림푸스 E-620으로 찍은 사진 몇 장을 올려 본다. 휴대폰으로 찍은 세로 사진 혹은 좌우로 긴 사진만 보다가 오랜만에 4:3 비유의 이미지를 보니 정말 느낌이 새롭다. 촬영 정보를 살펴보면 해상도는 휴대폰보다 더 낮다. 최대 해상도인 4032 x 3024 픽셀로 촬영해도 구글 포토의 무제한 업로드 기준인 1,600만 화소에 미치지 못한다.




자작 오디오 앰프가 제자리를 잡으면서 여가 시간에는 영화를 보는 것 말고는 별로 할 일이 없게 되었으므로 자연스럽게 다시 사진(장비)에 관심을 갖게 된 것일까? 다음에 관심을 갖게 될 대상은 혹시 자전거는 아닐까? 몇 가지 되지 않는 분야를 빙글빙글 돌아다니는 것만 같다.


2021년 9월 17일 금요일

박테리아 분류의 새로운 바람

그동안 Bacillus라는 genus는 최신의 잣대로는 별로 관계가 없는 박테리아까지 한데 품어주는 넉넉한 집 역할을 해 왔었다. 작년이었던가, 유전체학 시대에 걸맞는 분석 결과를 근거로 이렇게 많은 식구를 거느리던 바실러스 가족은 새로운 genus로 하나 둘 독립해 나가가기 시작하였다. 가장 큰 집안이었던 Bacillus subtilisBacillus cereus clade는 변화가 없지만, 나머지 것들은 생소한 genus 명을 갖게 된 것이다.

이러한 혁명적(?) 수준의 변화를 가져다 준 2020년의 주요 논문을 직접 찾아서 읽어보는 것이 올바른 자세임에는 틀림이 없다. 그러나 그것이 성가시다면, 중요한 사실을 요약하여 작성한 가벼운 글을 인터넷에서 찾아서 읽는 것도 나쁘지 않을 것이다. 다음의 글은 찰스 리버 연구소에서 근무하는 Christine Farrance라는 사람이 지난 7월에 게재한 글이다.

Reclassification of Bacteria Happens 

이 글이 실린 Eureka: a dose of science라는 웹사이트는 찰스 리버 연구소의 과학 블로그라고 한다. 블로그를 방문해 보면 히스패닉 문화나 흑인 과학자에게 경의를 표하는 등 과학 그 이상의 정신을 담고 있었다. 별 영양가도 없는 유튜브에서 이상한 뉴스, 해괴한 동영상을 보느니 이런 곳에 올라온 자료를 보는 것이 훨씬 나을 것이다.

새롭게 제안된 분류 체계에서 B. velezensisB. siamensis는 어떻게 자리를 잡고 있는지 아직 상세하게 살펴보지는 못하였다. Farrance가 소개한 논문(Patel and Gupta, Int. J. Syst. Evol. Microbiol. 2020;70:406–438 링크)의 그림을 보면 이들은 전부 B. subtilis clade에 속하므로 그 분류학상 위치가 달라지지는 않을 것이다.

Clostridium botulinum도 더하면 더했지 바실러스보다 나은 상황이 아니다. 내가 몇 가지 분석을 해 보았을 때 genus 수준에서 재분류를 해야 함이 명백하다. 그런데 누군가 이를 논문으로 정식으로 제안을 하여 미생물 분류학계에서 인정을 받는다면, 질병관리청과 같이 이 세균을 법률로써 다루어야 하는 공식 기관에서는 많은 어려움을 겪게 된다. 예를 들어서 보툴리눔이 4개의 새로운 종으로 나뉜다고 가정해 보자. 몇 가지 법에서 정의한 고위험성병원체 체계를 이에 맞추어 고쳐야 한다.

대장균(Escherichia coli)는 세균성 이질을 일으키는 Shigella와 유전체학적 기준으로는 다를 바가 없다. 그러나 이를 만약 한 종으로 합쳐 버린다면? 식품에는 허용하는 대장균의 수가 있지만 내가 알기로 이질균은 있어서는 안된다. 그러나 과학적으로 상당한 근거가 있다 하더라도 그 경계를 허물거나 혹은 새롭게 만드는 것의 파급 효과는 상당히 크다. 미생물 분류의 문제가 과학만으로 끝나는 것이 아니라 국민의 안전 및 보건을 다루는 영역까지 건드린다는 것이 엄연한 사실이다.

'아버지를 아버지라 부르지 못하는' 안타까운 일이 미생물 학계에서도 벌어지고 있다. 

EMBOSS "msbar" 명령어는 좀 이상하다

$ wossname msbar
Find programs by keywords in their short description
SEARCH FOR 'MSBAR'
msbar  Mutate a sequence

EMBOSS의 mabar 명령으로 박테리아 유전체 염기서열에 인위적으로 SNP를 도입한 뒤 몇 가지 계산 작업을 하였다. SNP의 수는 10개에서 200까지 총 20 단위로 하였고, 30번씩을 반복하였다. msbar는 도입한 염기 변이의 위치를 별도로 제공하지는 않는다. 

SNP 검출 프로그램을 사용하여 내가 과연 제대로 일을 하고 있는지 궁금하여 각 변이 유전체에 대하여 최종 점검을 해 보았다. 결과는 너무나 이상하였다. msbar를 통하여 도입한 수에 비하여 약 75%에 불과한 숫자가 나오는 것이 아닌가. Sensitivity나 PPV(positive predictive value) 전부 99%를 훨씬 넘는 프로그램을 썼는데 이럴 수는 없다.

T. Seemann의 snp-dists를 사용하여 원본 유전체와 돌연변이 유전체를 직접 비교해 보았다. insertion/deletion은 전혀 없이 염기 치완 돌연변이만 도입하였으므로, 두 파일을 합쳐 놓으면 aligned FASTA 파일과 다를 이유가 없기 때문이었다. 결과는 역시 이상하게 나왔다. 모든 샘플을 다 건드리지는 않았지만 도입한 변이 수의 80%만이 실제로 존재하는 것으로 확인되었다. 이런 결과를 이용할 수는 없다.

CFSAN SNP Pipeline(PeerJ Computer Science 2015년 논문 링크)에서 성능평가용으로 개발한 SNP Mutator 프로그램을 써 보기로 하였다. 설정할 파라미터가 많지만 무엇보다도 돌연변이를 도입한 위치와 염기 정보를 고스란히 제공하기 때문에 결과물을 믿을 수 있다. 이 프로그램으로만든 돌연변이 유전체를 이용하여 필요한 계산을 하고 확인을 위해 SNP를 검출해 보았다. 놀랍게도 도입한 숫자가 거의 그대로 검출되었다. 결국 성능이 의심스러운 돌연변이 도입 프로그램을 쓰는 바람에 일주일을 허비한 셈이 되었다. 하지만 모든 과정을 일괄적으로 실행하는 스크립트와 결과 분석용 R 코드를 그런대로 잘 정비해 두었기에 SNP Mutator로부터 새로 시작하는 것은 그렇게 어렵지 않았다.

SNP Mutator의 중요한 특징은 다음과 같다.

  • Mutations can be any number of single-base substitutions, insertions, and deletions at randomly chosen positions, uniformly distributed across the genome.
  • Mutations can be chosen from a subset (pool) of all possible positions.
  • Replicates can be partitioned into multiple groups with each group sharing a pool of eligible positions.

의심의 눈초리를 거두지 말아야 한다. 언제 어떤 실수를 할지 모르므로.

2021년 9월 14일 화요일

[하루에 한 R] for loop를 이용하여 데이터프레임 생성하기

Column/Row를 구성하는 벡터가 전부 준비된 상태에서 데이터프레임을 만드는 것은 비교적 쉽다. 기존에 존재하는 데이터프레임을 cbind() 함수로 합치는 것도 마찬가지이다. 그런데 합쳐야 할 벡터가 수십 개 이상 된다고 하자. 이를 일일이 타이핑하기는 곤란하다. 반복문을 쓰지 않고서는 매우 어렵다. 

EMBOSS의 msbar 명령을 이용하여 박테리아 유전체 서열에 염기치환돌연변이를 일정하게 도입하였다. 그 각각이 원본 유전체 서열('ancestor'에 해당)에 대하여 얼마나 멀어졌는지를 Mash로 측정해 보았다. 목표로 하는 돌연변이 수에 대하여 msbar는 총 30회를 실시하였고, 돌연변이의 수는 10, 20, 30..200으로 하였다. 결과물은 전부 하나의 파일(dist.tab)에 저장하였다. 

$ head -n 5 dist.tab 
GCF_000008445.1.010.00.c.fnm	GCF_000008445.1.fna	1.61302e-06	0	9999/10000
GCF_000008445.1.010.01.c.fnm	GCF_000008445.1.fna	4.8398e-06	0	9997/10000
GCF_000008445.1.010.02.c.fnm	GCF_000008445.1.fna	0	0	10000/10000
GCF_000008445.1.010.03.c.fnm	GCF_000008445.1.fna	1.61302e-06	0	9999/10000
GCF_000008445.1.010.04.c.fnm	GCF_000008445.1.fna	9.68178e-06	0	9994/10000

첫번째 컬럼이 돌연변이 유전체 FASTA 파일의 이름이다. fna라는 흔한 확장자를 fnm('m' for mutation)으로 고쳤다. 파일명 중간쯤에 '010'이라는 숫자가 바로 돌연변이 수에 해당한다. 만약 10, 20...으로 표기를 했다면, 100을 넘어가는 결과와 함께 다룰 때 sort에 주의해야 한다. 그래서 약간 귀찮지만 이런 파일명을 쓴 것이다. 

하나의 돌연변이 숫자에는 총 30개의 Mash distance(위 자료에서 세번째 컬럼)가 있다. 이것을 뽑아내어 각기 다른 컬럼으로 만들고자 하는 것이 오늘의 목표이다. 돌연변이의 수는 총 10에서 200까지 10 단위로 증가하므로 20개가 되고, 이것이 목표로 하는 데이터프레임의 전체 컬럼 수가 된다. Row의 수는 30개가 된다.

일반적인 슬라이싱을 통해서 원본 데이터프레임의 일부를 잘라낸 뒤 새 데이터프레임에 한 컬럼씩 붙여 넣는 방법이 있을 것이라 생각했는데 잘 되지 않았다. 검색을 거듭한 결과 리스트를 써야 함을 알게 되었다. 참조했던 웹사이트가 어디였는지는 기억을 하지 못하겠다. do.call() 함수를 쓰는 방법을 잘 알아야 될 것이다.

> header = sprintf(seq(10,200,10), fmt='%03d')
> header
 [1] "010" "020" "030" "040" "050" "060" "070" "080" "090" "100" "110" "120"
[13] "130" "140" "150" "160" "170" "180" "190" "200"
> df = read.table("dist.tab", sep="\t", row.names=1) > datalist = list() > for(i in header) { + pattern = paste(".", i, ".", sep="") + datalist[[i]] = df[grepl(pattern, row.names(df)), 2] + } > df.2 = do.call(cbind, datalist) > View(df.2)

최적화된 R code라고 확신을 할 수는 없다. '.010.' 형태의 패턴을 추출할 때, 앞뒤의 점은 정규표현식에서 임의의 문자 하나에 대응하는 점이 아니라 문자 그대로의 '.'임이 중요한데, 이것이 grepl() 함수에서 정확히 인식되고 있는 것인지를 잘 모르겠다. grep()은 인덱스를 반환하지만 grepl()은 TRUE 또는 FALSE를 반환한다고 한다. 어쨌거나 View(df.2)로 확인을 하면 다음과 같이 내가 의도한 데이터 변환이 이루어졌음을 알 수 있다.

나의 '데이터 주무르기'는 그야말로 마음 내키는 대로이다. 모든 조작을 Perl에서 하던 시절도 있었고, 요즘은 bash script와 awk/sed 등을 적절히 섞어서 쓰는 빈도가 늘어났다. 그러다가도 예외 사항이 별로 없이 매트릭스 형태로 잘 짜여진 데이터 파일을 보면 R에서 작업을 하고 싶어진다. 사용했던 코드를 노트 파일과 컴퓨터 작업 공간에 잘 저장해 두는 것도 좋은 버릇이라고 자평한다.

점점 까다로와지는 공공기관의 전산 보안

주말에 집에서 일을 하기 위해 사무실에서 쓰던 노트북 컴퓨터를 들고 퇴근하였다. 월요일(어제) 외부에서 있을 과제 중간 점검 발표를 준비하기 위해 파워포인트 자료를 마지막으로 점검하려는데 보안 정책에 위배된다면서 와이파이 접속이 차단되는 것이었다. 아, 드디어 이런 날이 오고 말았구나! 집에서 이더넷 케이블을 직접 연결해 보지는 않았다. 와이파이 접속이 안되는 노트북이 무슨 쓸모가 있는가?

컴퓨터 전원을 껐다가 다시 켰더니 이제는 얼굴 인식을 위해 작동하던 내장 카메라도 제 기능을 하지 못하여 PIN을 입력해야만 했다. 노트북이 연구소 전산망 내에 있지 않은 상황이라면 이를 잠재적인 위험 환경으로 간주하고, 입출력이 이루어질 수 있는 주변 기기를 통제하는 보안 강화 모드를 강제하는 것으로 여겨진다. 그것이 이제는 너무나 당연하게 여겨지는 와이파이라 해도 말이다.

연구소 안에서 상용메일 접속이 차단된 것은 꽤 오래 전의 일이다. 아마존웹서비스와 같은 클라우드도 당연히 되지 않는다. USB 매체 사용도 매우 까다로와서 아예 쓰지 않는다. 리눅스를 설치한 컴퓨터는 상황이 약간 낫지만, 이런 사실을 함부로 발설(?)하다가는 그나마도 쓰지 못하게 될까 두렵다. 이러다가 USB 마이크로폰도 작동이 안되는 날이 오는 것은 아닐까? 사무실 데스크탑에 연결한 웹캠은 다행스럽게도 아직 작동을 잘 한다.

공공기관에서 접속하면 안되는 '나쁜' 웹사이트를 국정원에서 직접 관리하는 것이 정말 옳은 일인지 잘 모르겠다.

공공기관의 전산망 보안은 외부의 해킹 시도나 악성 코드 침투를 방지하는 것으로부터 한층 더 강화되어 근무자가 내부의 자료를 외부로 가져가지 못하게 하는 것으로 바뀌어 가는 추세이다. 물론 일반 회사는 이보더 더 강도 높은 보안 정책을 유지한다. 가장 대표적인 것은 문서에 자물쇠를 거는 DRM이 있고(보안 해제 권한은 몇몇 높은 사람들만 갖고 있음), 프린터도 철저하게 통제한다. 휴대폰은 당연히 보안 프로그램이 깔려 있어서 출근을 하여 회사 공간에 들어가면 카메라가 작동되지 않는다.

정부 조직은 내가 근무하는 출연연보다는 불편하고, 일반 기업보다는 약간 느슨한 정책을 쓰는 것으로 알고 있다.

아마도 노트북 컴퓨터의 경우 외부 반출을 위해 공식적으로 거치는 절차가 있을 것이다. 문제는 연구비로 구입한 노트북이든 개인이 구입한 노트북이든 연구소 내에서 전산망에 접속하려면 보안 솔루션을 깔아야 한다는 것이다. 아주 엄격하게 말하자면, 개인 노트북을 연구소에 가져와서 연구소 전산망에 접속하면 안 된다. 회의실 근처에 있는 공개형 와이파이 정도만 써야 한다. 그러나 이것으로는 내부 리눅스 서버에 접속을 할 수 없다. 코로나 시대를 맞아서 재택 근무를 권장하면서도 실제 환경은 이를 따라가지 못한다.

민감한 정보를 다루는 정보 기관이나 민간 기업이 아니라면 약간은 유연한 정책을 실행하면 안 되는 것일까? 모처럼 연구비로 성능이 좋은 노트북을 구입하였는데 외부에서 쓰지 못한다면 여간 안타까운 일이 아니다. 

공식 반출 허가를 받지 않고 노트북을 외부에 너무 들고 다니는 것도 문제가 될 소지는 있다. 아예 집에다 가져다 놓고 가정용(=개인용)으로 쓰거나, 심지어는 퇴직 이후에도 반납을 하지 않는 철면피 같은 사람도 있으니 말이다.

2021년 9월 9일 목요일

정말 마시기 싫은 음료

새벽 4시에 일어나서 벌컥벌컥 들이마시는 쿨프렙 산.정말 먹기 싫은 맛이다. 누군가 평하기를 이온음료에 조미료를 탄 것 같은 시큼하고 느끼한 맛이라고 했는데, 그 말이 딱 맞다. 1리터를 조제해서 1시간 안에 마시고, 이어서 맹물 1리터를 또 1시간 안에. 이 과정을 어제 저녁 일곱 시에도 했고, 새벽 네 시에도 한 차례를 더 해야 한다. 

으아! 이 찝찌름한 액체를 아직 250ml 더 마셔야 한다. 그러고 나서 또 화장실을 들락거리게 될 것이다. 아침에는 일찍 병원 건강검진 센터로 가야 하니 그 사이에 잠을 제대로 자기는 틀렸다.

폴리에틸렌 클리콜과 아스코르빈산을 주성분으로 하는 장세척 용도의 의약품이다. 아마도 엄청난 삼투압에 의햐여 설사를 유발하는 것일 게다. 안전성은 충분히 입증된 의약품이지만, 장에 큰 부담을 주는 일은 아닐까? 장내 미생물 살림터를 홀랑 뒤집어 엎는 일이니 말이다. 

장이 깨끗한 편이라 이제 겨우 생애 두 번째 대장 내시경 검사를 받는다. 최초 검사는 5년 전이었다. 만약 이것을 매년 받으라면? 정말 내키지 않는다. 어차피 의식하 진정(소위 '수면') 내시경이라서 검사 과정 자체는 괴롭지 않은데, 전날 밤부터 당일 새벽까지 의식처럼 치러야 하는 '쿨프렙 대잔치'는 여간 고역이 아니다. 아픔을 유발하는 것은 아니지만 결코 유쾌하지 못한 자극을 통한 괴로움이란...

맹물이 가장 맛있게 느껴질 때는? 격하게 땀을 흘리고 나서 마실 때가 아니다. 쿨프렙을 1리터 마시고 나서 바로 뒤에 맹물을 마실 때이다.

마지막 남은 쿨프렙을 다 마셔버렸다. 뱃속이 다시금 요동을 친다.

2021년 9월 3일 금요일

[독서 기록] 다정한 무관심 및 내 친구 압둘와합을 소개합니다

다정한 무관심(함께 살기 위한 개인주의 연습) 지은이: 한승혜

개인주의는 이기주의와 동의어가 아니다. 개인주의의 반대발이 전체주의라는 것을 떠올린다면 이런 오해는 쉽게 풀릴 것이다. SNS에 짧게 쓴 글들을 정리하여 책으로 묶었다. 나는 블로그를 제외하면 남들이 다 한다는 SNS를 거의 하지 않는 사람이라서, 이런 공간에서 의견을 올리고 공감을 얻어가 토론을 한다는 것 자체를 중요하게 생각하지 않는다. 나에게는 '없는 세상'이라고나 할까... '메타버스'도 그런 것이 아닐까한다. 여담이지만 세상에 가장 쓸모없는 것은 공개 게시판이나 덧들이라고 생각한다. 어쨌거나 이것도 책을 만드는 한 방식이 될 수도 있겠다.

내 친구 압둘와합을 소개합니다(어느 수줍은 국어 교사의 특별한 시리아 친구) 지은이: 김혜진

시리아의 좋은 집안에서 태어난 청년이 자국을 방문했던 한국인 여행자와 겪은 일을 계기로 국교도 없던 한국으로 법학 공부를 하러 내한하게 된다. 그 사이에 시리아에서는 민주화 혁명과 내전이 일어나고 가족들은 난민 신세가 된다. 우연한 기회에 압둘와합을 알게 된 저자는 얼떨결에 시리아를 돕기 위한 단체를 만들게 되고, 어려움 속에서도 난민 어린이들을 가르칠 수 있는 학교까지 설립을 하게 된다. 

중간 중간에 시리아를 소개하기 위해 압둘와합이 직접 쓴 글이 삽입되어 있다. 만약 내가 한국을 소개하는 글을 써 달라는 부탁을 받는다면, 정확하고도 공정한 글을 쓰기 위해 얼마나 고민을 하게 될까? 어쩌면 소심한 나는 부담스럽다고 거절을 할지도 모른다.

현재진행형인 아프가니스탄 사태에 밀려서 시리아에서 일어났던 일에 대해 한국인들이 관심을 덜 갖게 된 것 같다. 한국과 시리아는 여전히 미수교 상태이고, 압둘와합은 한국인으로 귀화하였다.

교양으로 읽는 세계 종교사 지은이: 시마다 히로미, 옮긴이 김성순

이리저리 건너뛰어가면서 읽다가 대여 기간이 다 되어서 부득이하게 손을 놓게 된 책이다. 최근 불교에 대한 관심을 갖게 되고, 이슬람 세계에서 벌어지는 일을 이해해 보고자 빌리게 되었다. 여름날 산사에 들르면 백중절(음력 7월 15일)과 관련한 행사로 분주한 것을 볼 수 있다. 사후세계나 지옥, 윤회와 관련한 개념은 원래 석가모니가 처음 가르침을 시작하던 당시에는 없는 개념이 아니었을까? 삼국시대때 우리나라에 전래된 불교는 중국을 거치면서 원래의 모습과는 다르게 된 것이 아니었을까? 이런 궁금증을 해결해 보려고 책을 읽기 시작했으나 아직 답을 얻지는 못했다.


똑똑한 다중서열정렬(multiple sequence alignment, MSA) 트리밍 도구, ClipKIT

이발소를 연상하게 하는 ClipKIT의 로고부터 살펴보자. 논문은 2020년 PLoS Biology에 "ClipKIT: A multiple sequence alignment trimming software for accurate phylogenomic inference"라는 제목으로 발표되었다.

계통수를 그리려면 Clustal 시리즈의 소프트웨어, 혹은 muscle, mafft, prank 등의 프로그램이 만든 다중서열정렬(MSA) 결과물을 이용해야 한다. MSA 내부에 존재하는 무의미한 gap 등을 처리하는데 보통 'trimAl -automated1'을 즐겨 사용하였다. 문제는 십만 개가 넘어가는 바이러스 게놈의 MSA를 trimAl에 밀어넣으니 도무지 끝이 날 조짐이 보이지 않는 것이었다. 이 소프트웨어는 다중 쓰레드를 지원하지도 않으므로 그냥 기다리는 것 외에는 방법이 없었다.

대안을 찾기 위하여 검색을 거듭한 결과 몇 달 전에 ClipKIT이라는 소프트웨어를 알게 되었다. 트리밍 전략이 매우 단순하고, 상식적인 시간 안에 결과를 내어놓기 때문에 즐겨 사용하게 되었다. 

MSA를 트리밍하려면 각 컬럼(즉 염기 위치)에 갭이 몇 개인지, 서로 다른 염기가 있는지, 혹은 동일한 염기가 있는지 등을 수치화해야 한다. MSA의 품질을 나쁘게 만드는 가장 중요한 요인은 갭이므로(물론 진화적인 의미가 있는 갭도 있겠지만), 이것이 MSA 트리밍 도구에 제공하는 옵션에서 매우 중요한 역할을 한다.

갭과 관련한 수치는 그 정의를 명확하게 이해하는 것이 중요하다. 이것을 제대로 알지 못해서 초창기에 많은 혼란을 겪었다. 예를 들어서 100개의 염기서열을 정렬하였더니 어느 위치에서 15개는 염기가 있고 85개는 갭이 있다고 하자. trimAl에서 사용하는 gap score는 0.15가 된다. 이 프로그램에서 사용하는 gap score의 정의는 얄궂게도 갭이 없는 것들의 비율이다.
Sg = 1.0 - (number of sequences with a gap / n)

정의를 이렇게 해 놓으니 갭이 많을수록 gap score는 작아진다. 상식적으로 생각해도 이해가 잘 안된다. 갭이 많으면 gap score도 크게 나타나는 것이 자연스럽지 않을까? 어쩌면 'score가 커야 좋은 것'이라는 인식에 맞추어서 이렇게 정의를 내렸는지도 모른다. 이를 트리밍에 적용하려면 'trimal -gt 0.190'과 같이 적용한다. 즉, gap score가 최소한 0.19가 되지 않는 컬럼은 MSA에서 잘라(트림)내라는 뜻이다. 100개의 시퀀스 중에서 19개 혹은 그 이상이 염기를 제시하고 있어야 트리밍을 당하지 않는다는 것이다. '-nogaps'는 '-gt 1'과 동등하며, 어느 한 시퀀스라도 갭이 있으면 그 컬럼을 제거한다는 뜻이다. 반대로 '-noallgaps'는 모든 염기서열이 갭으로만 구성된 컬럼을 제거하게 된다.

CipKIT에서는 gappyness라는 지표를 쓴다. gapyness의 정의는 다음과 같다.

Gappyness = number of gaps / entries in alignment

갭이 많으면 gappyness도 커진다. Gap score보다는 직관적으로 이해하기 더 좋은 지표이다. 그리고 gap score + gappyness = 1.0이 됨을 쉽게 알 수 있다. ClipKIT에서 gappyness를 기준으로 트리밍을 하려면 'clipkit -m gappy 0.8'이라고 옵션을 제공하면 된다. 기본 gappyness는 0.9이다. 

정해진 threshold 값을 옵션으로 주지 않고 프로그램이 스스로 결정하게 만들 수도 있다. CipKIT에서는 smart-gap이라는 방법이 이에 해당한다. 이를 사용하면 일정한 값을 주어서 실행한 것보다 트리밍한 뒤 남는 MSA의 길이가 더 길다고 한다.

ClipKIT의 개발자에게 경의를 표하는 바이다.

2021년 9월 2일 목요일

그래도 마우스패드는 필요하다

마이크로소프트 스컬프트 에고노믹 데스크탑 무선 마우스키보드 세트를 구입하여 사용하면서부터 마우스패드가 별로 필요하지 않을 것이라 생각하고 옆에다 밀쳐 두었다. 그런데 전혀 그렇지가 않았다. 책상 위에서 마우스가 움직이는 느낌이 뭔가 서걱거리는 듯 별로 좋지 않았고, 무엇보다도 마우스와 접촉하는 책상 윗면에 자꾸 때가 끼어서 지저분해지는 것이었다. 도대체 이 더러움의 근원은 무엇일까? 유기물, 즉 내 신체에서 떨어져 나오는 그 무엇일까?

인쇄물 더미에 처박혀 있었던 마우스 패드를 다시 찾아다가 바닥에 깔았다. 직물 타입의 부드러운 면 위에서 마우스가 매끄럽게 움직인다.

사랑하는 사람보다 더 오랜 시간을 어루만지는 물건, 그것은 바로 마우스와 키보드이다. 휴대폰? 그럴 수도 있겠다. 

신체의 일부처럼 사용하는 물건이라면 가끔은 사치를 부려도 좋다. 


경제 활력은 성장보다 중요하다

2021년 8월 한달 동안의 블로그 포스팅은 단 10편에 불과하다. 최근 몇 년의 기록을 볼 때 최저 수준이다. 그만큼 마음에 여유가 부족했다는 뜻도 된다. 정보가 넘쳐나는 요즘 현실에 비추어 볼 때 내가 블로그에 글을 몇 편 쓰지 못했다는 것은 전혀 티가 나지 않는 일이다. 

과연 내가 유익한 글을 남기고 있는 것일까? 이것이 정말로 의미있는 행동일까? 차라리 이런 일에 신경을 쓰지 않고 평온한 마음 상태를 유지하는 것이 나 개인에게 더 나은 일은 아닐까?

경향신문에서 상당히 공감이 가는 기고문을 발견하여 그 링크를 남긴다. 송기호 변호사의 글이다.

카카오, 경제 활력 높이고 있나(2021년 9월 1일)

어제 수원에 위치한 산림생명자원연구부에서 있었던 [신산업 육성을 위한 산림미생물 소재 발굴과 산업화 심포지엄]에서 나는 다른 사람이 건드리기 어려운 포괄적이고도 강력한 미생물 관련 특허를 짤막하게 소개한 일이 있다. 정작 비즈니스와는 매우 거리가 먼 나와 같은 사람이 이런 말을 한다는 것은 매우 우스운(?) 일인지도 모른다. 오늘 국가과학기술연구회로부터 이메일을 통해 배포된 소식지에도 연구원 창업을 독려하는 듯한 내용이 하나 가득이었다.


이 건물은 놀랍게도 목조 건물이다.
송기호 변호사의 글에서는 시민들이 꿀벌과 같이 밤낮없이 '빅 데이터'를 만들어 주었지만 소수 기업의 대두주를 한국 최고의 부자로 만들었음을 강조하였다. 중요한 것은 경제가 얼마나 성장했는가를 묻는 것이 아니라 경제의 활력이 높아졌는가에 있다고 하였다. 경제 활력이란 더 많은 시민이 경제활동에 참여할 기회를 갖는 것을 말한다.

독점의 힘은 무섭다. 특허라는 것도 발명의 내용을 공개하는 대신 특허권을 가진 사람에게 일정 기간 동안 독점권을 부여하는 것이다. 그 독점권이라는 것은 물건이나 탄소배출권과 마찬가지로 거래의 대상이기도 하다. 메디톡스와 대웅제약의 보툴리눔 균주 관련 분쟁이 최근 새로운 국면을 맞으면서 과연 기업은 무엇으로 돈을 벌기를 원하는가하는 심오한 문제를 생각해 보기도 하였다.

지금은 잊혀저가는 구글의 회사 설립 모토(라고 알려진) Don't be evil이라는 말이 떠오른다. 

2021년 8월 31일 화요일

'sort -g'의 힘

보통의 숫자와 지수형으로 표현된 숫자가 혼재하는 파일을 정렬하고자 한다. sort -n으로는 잘 되지 않는다. 이러한 경우에 sort -g 명령을 쓰면 된다. 다음의 사례를 보자.

$ cat numbers
0.002
1E-4
0.003
1
3
10
2E-4
3E+2
$ sort -n numbers
0.002
0.003
1
1E-4
2E-4
3
3E+2
10
$ sort -g numbers
1E-4
2E-4
0.002
0.003
1
3
10
3E+2

만약 역순으로 나타나게 하려면 'sort -gr'이라고 명령을 내리면 될 것이다. 매뉴얼에 의하면 '-g'는 일반적인 숫자 값에 따라 비교를 하며, '-b' 옵션을 내포한다고 하였다. '-b' 옵션은 앞부분의 공백을 무시하는 기능을 한다.

bash 환경에서 awk와 같은 '고급' 언어를 쓰지 않아도 sort나 join 등으로 꽤 많은 일을 할 수 있다. cut과 paste도 그러하다. 위에서 다룬 numbers 파일의 숫자를 콤마로 이어붙이는 문자열을 만들어 보자.

$ VAR=$(paste -sd, numbers)
$ echo $VAR
0.002.1E-4.0.003.1.3.10.2E-4.3E+2
$ VAR=$(paste -sd, <(sort -g numbers))
$ echo $VAR
1E-4,2E-4,0.002,0.003,1,3,10,3E+2

여기에서 보였듯이 process substitution을 사용하여 정렬한 숫자를 paste 명령으로 보낼 수 있다. 저수준 유틸리티를 잘 알고 있으면 간단한 자료 파일을 다루기에 아주 편리하다.


2021년 8월 30일 월요일

바쁜 일상 - 셀 스크립팅

100줄 조금 넘는 shell script를 짜느라 이틀을 꼬박 투자하고 있다. 일요일이었던 어제는 노트북 컴퓨터에서 쭈그리고 앉아서 작업을 했더니 목덜미가 뻐근하다. 스크립트 중간에 here document를 써서 R code를 삽입하고, 이를 데이터에 맞추어 실행 순간에 R script로 출력하게 만든 다음 실행하는, 나로서는 꽤 '고급' 테크닉을 구사해 보았다.

80:20의 법칙은 거의 모든 일상 생활에서 적용할 수 있다. 80%의 기능을 구현하도록 스크립트를 만드는데 20%의 시간이 든다면, 나머지 20%를 완성하는 데에는 80%의 시간이 든다. 미처 몰랐던 오류를 고친다거나, 항상 일어나는 예외 상황을 처리하기 위한 것 들이 여기에 해당한다. 

Pandas를 잘 쓴다면 R을 들락거리는 불편함이 없이 원하는 기능을 구현할 수도 있을 것이다. 나의 행동 반경을 제약하는 것은 바로 파이썬을 잘 모른다는 것. 웬만한 것은 Perl, awk, sed, R 등으로 처리하는 수준이다.

파이썬 환경을 그렇게 많이 설치하고, 이것으로 만들어진 유틸리티를 그렇게 자주 쓰면서 정작 파이썬 자체를 이해하고 직접 스크립트를 짜 보려는 노력을 하지 않는 자세는 분명히 개선의 여지가 있는데... 이렇게 게으름을 피다가 결국 '치매 예방을 위한 파이썬 강좌' 같은 것을 듣는 날이 오지 않을까?

Bash의 인수 파싱 방법을 친절하게 설명한 글이 있어서 인용하고자 한다. 앞부분에서는 getopt(s)를 사용하는 비교적 단순한 방법을, 뒷부분에서는 별도의 라이브러리를 쓰지 않고 모든 것을 구현하는 방법, 즉  단순한 flag과 인수를 동반하는 flag을 구별하고 예외 상황은 물론 , 게다가 positional argument를 동시에 처리할 수 있다.

Bash: Argument Parsing

2021년 8월 24일 화요일

Perl 스크립트 작성의 나쁜 습관을 버려야 하는데..

아직도 use strict/use warnings를 전혀 쓰지 않는 나쁜 버릇이 있다. 20년 전에 대충 독학으로 익힌 펄 실력이니 오죽하겠는가.

[Perl Maven] 언제나 use strict!

strict는 펄에서 사용하는 'pragma'이다. 이것은 컴퍼일러(펄에서는 인터프리터라고 하는 것이 더욱 정확할 것이다)에게 어떤 일을 하라고 지시하는 전처리명령이라고 한다. strict pragma는 비정상적인 동작을 유발하거나 디버그하기 어려운 상황을 에러로 전환해 준다. 다음의 코드를 보자.

$ cat test.pl
#!/usr/bin/perl
#
use strict;

$var = 1;
my $VAR = 2;
$ perl test.pl
Global symbol "$var" requires explicit package name (did you forget to declare "my $var"?) at test.pl line 5.
Execution of test.pl aborted due to compilation errors.

만약 use strict를 선언하지 않았다면 이 코드를 실행할 때 아무런 에러가 발생하지 않았을 것이다. Package name을 명시적으로 선언하지 않았다는 에러 메시지가 나온다. 패키지라고 하면 코드나 라이브러리의 '묶음' 또는 '배포 단위'를 떠올리기 쉬운데, 여기에서는 그것을 의미하는 것이 아니다.

변수의 활동 영역은 네임스페이스이고, 이들 사이의 전환을 가능하게 하는 키워드가 패키지라고 이해하면 될까? 패키지 키워드를 사용하지 않았다면, 기본 네임스페이스는 main이다. 

$ cat test.pl
#!/usr/bin/perl
use strict;

$main::x = 42;
my $x = 13;
print "$x\n";
print "$main::x\n";
$ perl test.pl
13
42

위의 사례에서 $main::x(package variable)과 $x(lexical variable)은 완전히 다르다.

쓰기 위해서 안전하게 파일을 여는 방법에도 익숙해져야 한다.

[Modern Perl Programming] Thre-arg open() (Migrating to Modern Perl)

펄 5.010 이후부터 등장한 say() 함수도 종종 써야 되겠고... Modern Perl 문서를 프린트해 놓은 것이 있는데 어디에 있는지를 모르겠다. 인터넷에서 PDF 파일을 찾아서 다운로드해 두었다. O'Reilly에서 발간한 펄 관련 서적의 PDF가 종종 인터넷에 그대로 공개된 사연은 무엇일까? 이 회사의 Open Books Project 웹사이트를 가 보아도 펄 관련 서적은 보이지 않는다. 아무튼 고마운 일이다. 공개 라이선스의 여러 형태에 대하여 공부할 필요성을 느낀다. 

좋은 펄 코딩 습관을 들이기로 마음을 먹은 후 처음 작성한 짧은 코드는 POCP(percentage of conserved sequences)를 계산하는 쉘 스크립트의 wrapper였다. 그런데 shell의 올바른 국문 표기는 '쉘'인가, 혹은 '셀'인가? 검색 결과는 후자가 맞다고 한다.

POCP는 미생물 균주가 동일 속(genus)에 속하는지를 판별하는 지표로 제안된 것이다. 이에 대해서는 2019년에 블로그에 글을 쓴 일이 있다(링크). 원본 스크립트인 POCP.sh는 오직 한 쌍의 유전체(정확하게는 아미노산 서열 집합)만을 받아들인다. 따라서 10개 정도의 데이터를 처리하려면 두 유전체의 가능한 모든 조합을 만들어서 POCP.sh에 제공해야 된다.

하나의 디렉토리에 모든 유전체 파일을 복사해 넣은 다음,  펄 모듈 Math::Combinatorics을 사용하여 모든 조합을 구성한 다음 POCP.sh에게 인수로 제공하는 간단한 펄 스크립트를 만들어 보았다. 현대적인 펄 코드 작성 스타일을 따르기 위해 노력을 한 것은 물론이다.

좀 있어 보이는 펄 코드를 짜려면 명령행 인수를 잘 처리해야 하고, 도움말 메시지를 보여주는 친절도 베풀어야 한다. 이에 대해서는 다음 웹사이트를 참고하도록 하자. 대단히 간결하면서도 유용하다.

[Perl.com] Professional scripts are a snag with Getopt::Long

2021년 8월 21일 토요일

[독서 기록] 가이 스탠딩 - 불로소득 자본주의

휴가와 밀린 업무 처리 등으로 거의 열흘만에 글을 쓴다. 도서관에서 대여한 책을 시간적인 여유를 갖고 모두 읽기 위해 기간 연장까지 했지만 1.5권을 읽는 것에 그쳤다. 이번에 읽는 내내 큰 울림과 충격을 준 책은 가이 스탠딩(Guy Standing)의 『불로소득 자본주의』였다. 부제는 '부패한 자본은 어떻게 민주주의를 파괴하는가'이고 원제는 'The Corruption of Capitalism'이다.


여담: 도서관에서 소장한 책에서는 디자인의 요소를 일부 상실한 상태로 만날 수밖에 없다. 겉표지(보통은 '자켓'으로 부른다고 한다)와 띠지를 전부 제거한 뒤에 서가에 꽂히기 때문이다. 그나마 책날개에 인쇄된 저자 및 옮긴이 소개 문구는 그대로 오려서 표지 안쪽에 붙여 놓는다. 책 디자인과 관련된 용어는 책을 알아보아요: 1. 책의 외부명칭에서 참조하면 된다.

가이 스탠딩은 프레카리아트라는 새로운 계급의 개념을 체계화한 사람이다. 

프레카리아트는 ‘불안정한(precarious)’과 ‘프롤레 타리아트(proletariat)’를 합성한 말이다. 출처: 노동자 연대

57쪽을 보면 세계화, 신자유주의 정책, 제도 변화와 기술혁명이 서로 결합하여 새로운 글로벌 계급구조를 창출하게 되었다.

  • 극소수의 부호 계급
  • 엘리트 계급
  • 샐러리아드(salariat):  상대적으로 안정된 봉급 생활자 계급
  • 프로피시언(profician): 프리랜서 전문가 그룹
  • 프롤레타리아: 핵심 노동 계급. 여기부터 아래 계급은 불로 소득이 전혀 없다.
  • 프레카리아트
  • 룸펜-프레카리아트

마침 모 연구소에서 심포지엄 발표자로 초청을 받아서 미생물과 관련된 발명을 인정받기 위한 특허에 관한 내용을 아주 조금 다루려던 참이었다. 청구항을 포괄적으로 작성하여 출원인이 더 많은 이익을 확보하게 된 '바람직한(?)' 사례가 슬라이드 한 장에 담겼다. 그런데 이 책에서 저자는, 특허권으로 창출한 시장 지배력을 불로소득의 가장 중요한 원천으로 보았다(84쪽). 

인간의 모든 행동의 근원을 경제적 동기에서 기인한 것으로 보고, 이를 극대화할 수 있는 사람을 추앙하고, 돈이 돈을 벌게 하는 이른바 '불로소득 자본주의'가 피할 수 없는 사회의 발전 방향이라고들 생각한다. 그러나 가이 스탠딩은 이것을 자본주의의 부패로 보았다.

우리에게는 지금 케인스가 말한 '불로소득자의 안락사'가 필요하다.(490쪽)

그가 내세우는 바람직한 사회는 기본소득을 바탕으로 하는 다단계 사회보호제도를 구축하는 것이다. 대통령 선거에 후보로 나오겠다고 선언한 어느 인사가 '국민의 삶을 왜 정부가 책임집니까?'라고 발언을 하여 큰 물의를 빚었던 것을 우리는 다 알고 있다. 아무리 일을 해도 생활이 나아지지 않는 하층 계급의 삶은, 그들이 노력을 덜 하고 자격을 갖추지 못해서 자초한 당연한 귀결이라고 말할 수 있는가? 1980년대 이후 생산성이 증가하였음에도 불구하고 실질 임금이나 세수는 증가하지 않았다고 한다. 저임금 일자리만 늘어난 때문이다. 휴대폰 하나만 갖추고 플랫폼에 종속되어 고된 노동 끝에 세상을 달리하는 노동자를 얼마나 많이 보았는가?

 두 번째 책인 임철의 지음 『누가 말끝마다 권력을 입에 담는가』(표지에 새겨진 글: 말 함부로 하지 마라. 말은 문자로 남는 글이 그렇듯 바람에 뜻을 새겨 영속한다)는 처음에 잠시 몰입하여 읽었다가 뒷심 부족으로 다 읽지 못하였다. 저자는 가짜 타동사인 '한자어+시키다'를 사례로 들어 잘못된 언어 생활을 통해 정신까지도 병들게 되는 현실을 고발하였다. 상당히 수긍이 가는 내용이었다. 나도 불편한 국어현실에 대하여 나름대로 생각해 둔 바 있어서 언젠가는 별도의 글로 쓰고자 한다. 나는 특히 최근 겪고 있는 급격한 억양 또는 발음의 변화를 더욱 심각하게 생각한다.



2021년 8월 11일 수요일

[R] ANI dataframe을 뒤집으면 매트릭스가 되지만...

흥미로운 산수 하나.

> class(ani)
[1] "data.frame"
> class(t(ani))
[1] "matrix"
> class((ani + t(ani))/2)
[1] "data.frame"

숫자로만 구성된 데이터프레임을 t() 함수로 뒤집으면 매트릭스가 된다. 그러나 이것을 원본과 더하여 평균을 내면 데이터프레임이 된다. 

이런 해괴한 연산이 왜 필요한가? ANI matrix를 다룰 때, 그 값이 대각선에 대하여 대칭이 되도록 만들기 위해서이다. 대각선이 전부 '1'이면 컬럼과 로(row; '로우'라고 쓰고 싶은 유혹이...)의 라벨은 동일한 순서임을 직관적으로 알 수 있다. 그러나 실제 값은 대각선에 대하여 대칭이 아닐 수도 있다. query와 subject를 어떻게 두느냐에 따라서 blast 혹은 nucmer의 값이 약간 다르게 나올 수 있으니 말이다. 따라서 평균치를 구하는 것이 안전하다. 이렇게 만든 데이터프레임의 실제 값은 대각선에 대하여 대칭을 이룬다.

데이터 m이 매트릭스임에도 불구하고 특정 row를 반환하기 위해 m["A"]를 입력하는 실수를 저지른다. 중고생 시절에는 영문법이 싫었는데 나이가 들어서는 R문법 익히기가 여간 어려운 것이 아니다. 마치 율법학자가 된 느낌이랄까...

2021년 8월 10일 화요일

12DT8 쌍삼극관의 용도 찾기

엊그제 개조를 마친 PCL86 싱글 앰프는 파워가 예전보다 더 크고, 험도 적어진 것 같다. 그러면 다 잘 된 것이 아니냐고 생각할 수도 있다. 소리는 큰데, 듣기에 약간 거북하고 부담스러움도 느껴진다. 한 마디로 표현하자면 소리가는 크지만 거칠다고나 할까? '까실까실한 소리'라고도 표현할 수 있다. 그동안 사용해 온 진공관 앰프가 대부분 싱글이었지만 부귀환 또는 UL 접속을 해서 왜곡을 억눌렀기에 그렇게 거칠게 느껴지지 않았던 것 같다. 이번에 만든 PCL86 싱글 앰프에는 부귀환을 걸지 않은 아주 단순한 타입이다.

실용오디오의 오디오Q&A 게시판에 진공관앰프는 싱글이 PP보다 음질이 우수하다는 것과 삼극관이 5극관보다 좋다는 것이 사실인지요?라는 질문이 있다. 이에 대한 황보석 님의 댓글은 고개를 끄덕거리게 한다.

싱글앰프가 우수하다는 주장에는 거의 언제나 "현의 까슬까슬한 소리"라는 말이 들어가는데, 그 소리는 사실상 저역과 고역이 심하게 찌그러지는 소리입니다.

그건 그렇다 치고, 과거 내 PCL86 앰프에서 쓰이던 12DT8 쌍삼극관이 일자리를 잃었다. 이것 어디에 활용한다. 혹시 43 싱글 앰프의 드라이브단에 쓰이는 6N2P와 바꾸어 보면 어떻까? 

'NEC'라는 마킹이 선명하다. PCL86 앰프에서는 소켓 고정 방향이 달라서 이런 글씨가 있다는 것을 그다지 인식하지 못하고 있었다.

이 앰프에서는 24V 직류 어댑터가 43 오극관의 히터에 전원을 가하는 동시에 DC-DC 스텝다운 컨버터를 통해서 6.3V로 바뀌어 6N2P로 연결된다. 드라이버 하나만 있으면 컨버터의 출력 전압을 간단히 올릴 수 있다. 

12.6이라는 숫자가 선명하다.
드라이브단에 쓰인 진공관 교체의 효과는 매우 확실하였다. 전에는 울트라리니어 접속 상태로는 소리가 너무 작아서 불만이었는데 - 오극관 접속으로 해도 책상 위에서 가까이 들을 때에나 적당할 수준이었지만 - 6N2P를 12DT8로 바꾸니 한결 음량이 커졌다. 그렇다고 하여 음색이 거칠어 지지도 않았다. 큰 스피커에 연결하고 몇 미터 떨어진 곳에서 침대에 길게 누워 듣기에도 충분한 크기의 소리가 나온다.

데이터 시트에 나온 수치나 특성 곡선을 통해서 객관적으로 확인한 것은 아니지만, 내 귀가 더 낫다고 느낀다면 그 느낌을 따라서 행동하면 될 것이다. 다소 성급하게 앰프를 해체하고 다시 만드는 만행(?)을 저질렀으나 그 결과로 얻은 것이 더 많았다. 앞으로 오디오 기기 '자작 놀이'를 해 나가는 방식과 마음가짐에 대해서도 뭔가 확실한 기준을 만들었다는 자평을 해 본다.

약간의 혼란한 시기를 거쳐서 43 및 PCL86(=14GW8) 싱글 앰프는 전부 쓸 만한 상태가 되었다.


2021년 8월 8일 일요일

부순 앰프 다시 만들기 - PCL86 싱글 앰프

인터넷에서 구한 ECL86/PCL86 싱글 앰프용 회로도(diyAudio 링크; tubman813의 포스팅 - 로그인을 해야 첨부한 회로도 이미지 파일을 볼 수 있음)를 참조하여 며칠에 걸쳐 실체 배선도를 그렸다. 상판에 이미 진공관 소켓 고정용 구멍이 뚫려 있어서 고정 방향을 바꿀 수가 없었다. 이 앰프를 STC(super triode connection) 싱글 앰프로 만들어 주었던 제작자는 소켓 주변에 러그 단자를 전혀 쓰지 않고도 아주 간결하고 아름다운 부품 배치를 하였었다. 나는 진공관 하나에 대하여 5핀 러그 단자를 하나씩 세우는 배선 계획을 세웠는데, 소켓을 고정하는 각도가 정해진 상황에서는 최적의 실체 배선도를 그리기가 참으로 어려웠다. 그렸다가 고치기를 몇 번이나 반복했는지 모르겠다. 

PCL86 싱글 앰프의 배선도
여기에 보인 그림과 같이 계획한대로 일이 흘러가지는 않았다. 신호 입력 경로에 위치한 0.22uF 커플링 캐패시터는 부품 구입을 빼먹은 터라 과감하게 생략하였고, 캐소드 저항은 기존에 장착되어 있는 것을 그대로 쓰느라 180R에서 220R로 바뀌었다. B전압도 제작 완료 후 실제 측정해 보면 260V에 가깝게 나온다.

저항을 전부 2와트급으로 마련했더니 리드가 두꺼워서 단자 구멍을 통과한 다음 한 두 차례 둘러 감는 일을 제대로 하지 못했다. 게다가 다른 부품을 다 납땜한 상태에서 7번 단자(5극관 캐소드 + 서프레서 그리드)에 부품을 연결하려고 보니 인두 팁이 들어갈 공간이 잘 나오지 않는다. 아, 이걸 히터 배선과 더불어 가장 먼저 연결하는 건데... 원본 회로도에는 저항의 와트 수는 나오지 않는다. 비슷한 앰프인 'Piccolo'(원본 글은 사라지고 인터넷에는 회로도가 유물처럼 돌아다님)에서 전부 2W 저항을 사용했기에 이걸 그대로 따라서 했는데 다소 과하다는 생각이 든다.

이전 제작자가 상당히 큰 전력을 감당할 수 있는 캐소드 저항과 바이패스 캐패시터를 별도의 위치에 설치해 두었기에 이를 그대로 사용하되 전선을 통해서 7번 단자에 연결하도록 만든 것이 그나마 다행이었다. 만약 부품을 소켓에 직접 고정할 생각이었다면 자리가 나지 않아서 정말 난감했을 것이다. 앞으로 같은 앰프를 한번 더 만든다면 그때는 오늘의 시행착오를 발판으로 삼아 매우 수월하고도 아름다운 배선을 하게 될 것이다. 언제가 될지는 모르지만.

Point-to-point wiring이 이렇게 힘들구나! 만약 푸시풀 앰프를 이런 방식으로 만들려고 한다면 아마도 며칠이고 씨름을 하다가 지쳐 쓰러졌을지도 모른다. 여담이지만 나는 앰프 자작의 한 방법으로 일컬러지는 하드 와이어링(hard wiring)이란 표현을 별로 좋아하지 않는다. 하드 와이어링은 물리적인 배선을 실제로 했다는 뜻이고, 이것의 반대 개념이라면 무선을 통한 접속 또는 프로그래밍으로 구현된 소프트 와이어링, 또는 커넥터를 이용한 접속 등을 떠올릴 수 있다. 우리가 앰프를 만드는 재래식 방법으로 여기는 '하드 와이어링'은 전선 피복을 벗겨서 부품 다리를 감은 뒤 납땜으로 연결하는 방법을 뜻하는데, 내가 조사한 것에 따르면 영미권에서는 이를 point-to-point 와이어링이라고 부르는 것 같다. 

배선을 마무리하고 소스 기기와 전원을 넣었다. 히터는 빨갛게 달아 오르는데 소리가 전혀 나지 않았다. 멀티미터로 그라운드와 플레이트 사이에 걸리는 전압을 측정해 보았다. 전혀 전압이 잡히지 않는다. 이게 무슨 일? 이건 필시 내가 만들지 않은 구역에서 문제가 있다는 뜻이다. 그 원인은 전혀 상상하지 못한 곳에 있었다. 앰프의 중간을 가로지르는 굵은 그라운드 동선과 전원회로의 그라운드가 전기적으로 도통된 상태가 아니었다. 당연히 전선을 통해 연결되어 있을 것으로 생각하고 대수롭게 생각하지 않았는데, 아무리 살펴 보아도 연결된 곳이 없었다.

어째서 이럴 수가 있나? 정류부의 그라운드는 러그 단자의 고정용 핀에서 끝나 있었다. 아니, 그러면 상판 전체를 그라운드로 쓰고 있었단 말인가? 이전 제작자가 만든 회로를 걷어낼 때, 진공관 소켓 하나의 본체에 전선이 납땜이 되어 있던 것을 기억한다. 생각해보니 소켓과 상판이 닿는 곳에 납땜을 한 것으로 생각된다. 그리고 여기서여 인출된 선이 그라운드용 동선으로 연결되었던 것 같다.

그렇다면 상판 전체를 그라운드로 썼었다는 이야기가 된다. 이건 별로 바람직하지 않은 구성이다. 잔도성 상판을 접지에 연결하는 것은 안전이나 잡음 방지를 위해 중요하지만, 이를 회로 전체의 그라운드로 삼아서 모든 전류가 되돌아가는 길로 쓰는 것은 썩 좋지는 않은 설계라고 생각된다.

한 걸음 더 나아가자면, 이 앰프는 무접지 전원 케이블을 사용하고 있다. 접지가 부착된 전원 케이블을 사용하고, 섀시는 전원 소켓의 접지에 연결하는 것이 올바른 방법이라 생각된다.

회로의 그라운드를 제대로 연결한 다음 다시 작동 테스트를 실시하였다. 비로소 소리를 들을 수 있었다. 

상판 앞쪽에는 구멍을 뚫으려다 실패한 상처만 남았다. 상판의 재질은 아마도 페인트를 입한 스테인레스 스틸이 아니었을까?

중간을 가로지르는 그라운드 동선에 아래쪽으로 납땜된 부품부터가 이번에 새로 만들어 넣은 영역이다. 라이터가 없어서 수축튜브를 제대로 마무리하지도 못했다. 바깥쪽 소켓은 이전에 쓰던 것을 그냥 끼워 넣은 상태이다.
이전에 만들어진 상태에 대한 나의 관찰과 해석이 잘못되었을 수도 있다. 그러나 중요한 것은 이제부터는 내가 이해하고 통제할 수 있는 상태로 앰프를 다시 만들어 놓았다는 점이다. 개작 전의 잡음 원인은 앞으로 영영 알 수 없게 되었다. 좌우 채널의 진공관을 바꾸어 끼워도 여전히 잡으미 한쪽에서 났다는 것은, 오늘 발견한 다소 납득이 되지 않는 접지 방식, 즉 어느 하나의 초단관(12DT8) 소켓 본체와 상판 결합 부위에 납땜을 하여 그라운드를 인출한 곳에서 접촉 불량 등의 상황이 발생한 것에 원인이 있는지도 모른다.

유리관 하나에 3극관과 5극관이 함께 들어 있으니 단 두 알이면 스테레오 앰프를 만들 수 있다는 것이 복합관의 장점이다. 내가 만든 싱글 앰프의 소리는 어떠한가? 전원을 넣는 순간 들리기 시작하는 험은 예전보다는 나은 것 같다. 이번에는 NFB도 걸지 않았으니 싱글 특유의 까실까실함이 더 크게 느껴지는 것 같다. 어차피 이전 앰프와 이번 개작 앰프의 소리를 객관적으로 비교할 수는 없다.

아직도 PCL86 관은 몇 개가 남아 있다. 이번에 개작을 하면서 새 관을 쓰지 않았기 때문이다. 진공관 앰프를 처음 장만하면서 언젠가는 필요할 것으로 생각하여 교체용 관을 마련하고 싶은 생각이 드는 것은 당연한 심리이지만, 7년이 지난 지금 생각해 보니 그럴 필요가 전혀 없었다고 생각한다. 가격은 약간 올랐어도 PCL86은 여전히 구할 수 있기 때문이다. 괜히 여분의 관을 써서 뭔가 만들어야 한다는 강박 관념에 시달리기만 한다. 예비용으로 이베이에서 한꺼번에 10개나 샀다가 처분했던 부끄러운 과거가 생각난다. 그리고 이번 개작을 하는 과정에서 여분의 관이 있다는 사실은 전혀 동기가 되지 못했다.


앞으로의 계획은 단순하다. 6LQ8(SE & PP)과 PCL86(SE)이나 유지 보수하는 수준에서 만족하련다. 어차피 거실의 주력 앰프는 인터M R150PLUS가 자리를 잡았으니... 43 SE 앰프는? 글쎄, 잘 모르겠다. 6P1 SE 앰프는? 이미 이 세상 물건이 아니다.

갖고 있는 여분의 부품을 이용해서 뭔가 해야 된다는 강박을 벗어나는 것이 무엇보다 중요하다.



2021년 8월 6일 금요일

반가운 COG 2020

COG(Clusters of Orthologous Groups)는 미생물 유전체를 다루는 사람들에게는 매우 잘 알려진 데이터베이스이자 분석 도구이다. 오리지널 페이퍼가 1997년에 나왔으니(링크) 이제는 고전이 된 '지식'이라고 보아도 무방할 것이다. 2014년에 마지막 업데이트가 된 이후로 거의 신경을 쓰지 않고 있었다. 왜냐하면 매우 편리한 유전체 주석화 도구(RAST server, Prokka or PGAP)이 있어서 특별히 진화적 관점에서 각 유전자를 살펴볼 것이 아니라면 COG 체계를 다시 열어볼 필요가 없었기 때문이다. Protein set이 준비되어 있을 때 각각에 대하여 COG를 할당하는 소프트웨어가 그렇게 친절하지 않다는 것도 한 원인이 되었다. 웹사이트에다 단백질 세트를 밀어 넣으면 알아서 계산을 해주는 방식이 아니기 때문이다.

COG 개발자들은 방대한 박테리아의 유전체 자료를 다루면서 각 단백질 패밀리의 구조와 기능, 진화적 관련성, 이들 단백질이 관여하는 대사 기능 등에 대해서 얼마나 많은 지식을 알고 있을까? 항상 시급한 과제에 매달려서 각 종에 대한 단편적인 지식만을 쌓고 있는 나는 이런 연구자들이 정말 부럽다. 얼마 되지 않는 목초지(과제, 예산, 탑-다운 방식으로 떨어지는 키워드...)가 황폐해져서 맨땅을 드러내면 양떼를 몰고 다른 땅을 찾아 떠도는 유목민과 같은 신세가 바로 한국 과학자들의 처지가 아닐까? 유목민이 부러운 것은 무엇이 있을까? 자유? 

식품의약품안전평가원에서 발간한 『건강기능식품 기능성 원료 프로바이오틱 안전성 평가 가이드(민원인 안내서)』(2021년 6월) PDF를 보면 3쪽에 'General Report for Genome Sequence Analysis'가 나온다. 여기에서는 각 유전자의 기능을 COG 체계에 맞추어 집계한 표 사례를 볼 수 있다. 와우, 언제적 COG란 말인가? 아마도 시퀀싱 raw data 생산에서 조립, polishing, genome annotation까지 결과를 만들어 주는 서비스 업체의 보고서를 그냥 갖다 붙인 것은 아닐까하는 생각이 든다.

혹시 COG 할당 소프트웨어(COGcognitor, COGlse, COCmakehash, COGreadblast & COGtriangles)가 좀 더 편리한 것으로 바뀌었는지 궁금하여 웹을 검색해 보니 2021년 Nucleic Acids Research Database issue에 후속 논문이 나온 것을 알게 되었다. 최근 소식을 전해 듣는데 비교적 느린 나로서는 이만하면 정말 빨리 소식을 접한 셈이다. COG 업데이트가 계속 나오는 것을 보니 1956년생인 Eugene V. Koonin이 아직 건재한 모양이다.

COG database update: focus on microbial diversity, model organism, and widespread pathogens. Nucleic Acids Research, Volume 49, Issue D1, 8 January 2021, Pages D274–D281, https://doi.org/10.1093/nar/gkaa1018

이제는 퇴출된 유전자 ID 등 이전 2014년 버전에는 손질할 부분이 매우 많았다. 요즘의 필요성에 맞게 적절히 업데이트가 된 것 같다. 논문의 초록에는 어떠한 사항이 새로워졌는지를 다음과 같이 소개하였다.

  • gi(gene index) 번호를 RefSeq 또는 GenBank.ENA/DDBJ CDS accession number로 바꾸었다.
  • 200개 이상의 새로운 단백질 패밀리를에 관한 COG 주석을 업데이트하였고, PDB 링크가 있는 경우 이를 연결하였다.
  • Pathway로 그룹을 지은 COG 체계를 만들었다.
  • CRISPR-Cas immunity, sporulation(Firmicutes) 및 광합성(남세균)에 관여하는 266개의 새로운 COG를 추가하였다.
  • 이로써 2020년 최신 버전의 COG는 4877개가 되었다.

FTP 사이트 https://ftp.ncbi.nih.gov/pub/COG/COG2020/data/에서 제공하는 새로운 파일이 아직 기존 상태로 머물러 있는 COG software와 호환이 되는지는 테스트를 해 봐야 한다. DB를 구성하는 단백질 세트는 1,785,722개('prot2003-2014.fa')에서 3,213,025개('cog-20.fa')로 약 1.8배 증가하였다.

분명히 몇 년 전에 COG software를 사용하여 COG를 할당하는 방법을 문서로 만들어 둔 것 같은데 기억이 나질 않는다. 내 스크립트 모음 디렉토리를 가서 COG라는 이름으로 검색을 하니  process_COG_query.sh라는 이름의 스크립트가 눈에 뜨였다. 이게 어디서 난 것일까? 번거로운 psiblast 및 COG software 실행 방법을 스크립트 한 방으로 끝낼 수 있게 잘 만들었구만... 누가 만든 거지? 스크립트 이름을 사용하여 구글을 검색해 보았다. 웹 상에 분명히 존재하는 것이었다. 어디 클릭을 해 보자...

NCBI COG software를 이용한 query protein의 COG assignment 방법

뭐야, 이건! 내 위키 사이트 아닌가? 내가 필요에 의해서 스크립트를 만든 다음 이를 사용하는 방법을 웹에 공개한 문서를 만들어 놓고 까맣게 잊고 있었다. 정말로 내 머릿속의 신경 회로 패턴이 많이 낡은 모양이다. 당장 이 스크립트의 맨 위에 'written by Haeyoung Jeong'이라는 코멘트 한 줄을 삽입해 넣었다. 앞으로는 아무리 간단한 스크립트를 만들어도 내 이름을 적어 놓아야 되겠다. 그렇지 않으면 내가 만든건지 다른 곳에서 입수한 것인지 알기가 어려워진다. 하긴 다른 곳에서 입수한 대부분의 스크립트에는 작성자가 이름이나 이메일 주소를 써 놓기도 하니까...

위키 문서에서는 process_COG_query.sh의 앞부분, 즉 query sequence의 ID를 바꾸는 것만 소개가 되어 있다. 현재 내 컴퓨터에 존재하는 스크립트는 psiblast 및 COG software를 실행하는 것까지 포함된 완성 상태이다. 그래 봐야 몇 줄 되지 않지만... 

COG2020 자료를 기존의 COG software로 돌리는 방법을 정리해는 것이 숙제로 남았다. 자칫하면 주말을 앞두고 게을러질 수 있는 뜨거운 여름날의 금요일 오후에 새로운 원석을 발견한 기분이다.

2021년 8월 5일 목요일

앰프를 부수다

보다 나은 가치를 위한 창조적 파괴? 공간 확보를 위한 부득이한 조치? 화풀이? 앰프의 제작자에게는 미안한 마음이 든다. 7년 반 정도 사용한 진공관 앰프가 아무런 문제가 없을 수는 없다. 한쪽 채널에서 묘한 잡음이 발생하기 시작했는데, 진공관을 좌우 채널을 바꾸어 끼워도 잡음이 따라 다니지를 않는다. 심지어 새 관을 꽂아도 잡음은 그대로이다! 앰프를 엎어놓고 뚜껑을 열어 봐야 저항과 캐패시터만으로 이루어진 회로일 뿐이고, 어차피 내가 이해하지 못하는 약간의 변형 초삼결(super triode connection) 회로라서 달리 손을 쓸 수가 없었다. 터지거나 망가진 전해 캐패시터가 있는 것도 아니요, 납땜이 떨어진 곳이 있는 것도 아니다. 내가 알고 있는 초삼결 회로에는 트랜지스터를 쓰는 것으로 아는데, 이 앰프의 한쪽 채널 구성은 반도체 소자 없이 12DT8 + PCL86이다.

원 제작자에게 보수를 요청하기에는 구입 후 너무 많은 시간이 지났고, 이 무거운 것을 보내고 받는 번거로움이 있다. 차라리 내가 이해할 수 있는 단순한 싱글 앰프로 바꾸기로 하고 전원부를 제외한 회로를 전부 걷어냈다. ECL/PCL86 싱글 앰프의 회로도는 인터넷에 널려 있다. 며칠에 걸쳐서 배선 밑그림을 그려 본 다음, IC114에 필요한 부품을 주문하였다.

바깥쪽 구멍 두 개는 비워두지 말고 빈 소켓을 꽂도록 하자.
6N1+6P1 싱글 앰프도 쓰레기통으로 들어갔다. 부끄럽지만 화풀이를 좀 심하게 했다. 사실 이 앰프는 결정적인 하자가 있는 것은 아니었다. 소켓 어댑터를 사서 남들은 한번씩 다 거쳐 간다는 6V6 싱글 앰프로 전환해 보겠다고 여러 차례에 걸쳐 궁리를 하였으나 그것도 그만 두기로 했던 참에 약간의 극단적 선택을 하고 말았다.

43 앰프는 소리를 조금 더 키워 보고 싶지만 오실로스코프의 상태가 매우 좋지 않아서 실험을 하기가 어렵다. 

올해로 8년째, 진공관 앰프를 가지고서 소소한 즐거움을 누린 것은 사실이다. 그러나 50W+50W 반도체 파워 앰프가 뿜어내는 당당한 출력 앞에서 더 이상 음악적 쾌감을 느끼기가 어려웠다는 것이 솔직한 결론이다. 앞으로는 6LQ8 싱글 및 푸시풀 앰프, 그리고 오늘 쓰는 글의 주제인 PCL86 싱글 앰프를 마지막 진공관 앰프 경험으로 삼고자 한다. 헌 전선과 뜯어낸 부품으로 가득한 정크 박스도 그 크기를 줄여 나가련다. 앞으로는 음악 자체에 몰두하고 싶다.

그동안 즐거웠다!



NCBI의 assembly 정보 파일로 접근하는 URL이 살짝 바뀐 듯하다

예전에는 다음 URL을 통해서 RefSeq에 등록된 유전체 정보의 요약본 파일(assembly_summary.txt)을 다운로드했었다.

ftp://ftp.ncbi.nlm.nih.gov/genomes/refseq/assembly_summary_refseq.txt

이 파일은 리눅스 명령행에서 curl이나 wget을 통해서 여전히 잘 다운로드할 수 있다. 그런데 이 주소를 웹브라우저에 넣으니 파일이 열리거나 다운로드로 이어지지 않는다. 웹 브라우저를 통한 FTP 접근을 막은 것일까? NCBI의 Genome Download (FTP) FAQ로 접속하여 16번째 항목인 'How can I download RefSeq data for all complete bacterial genomes'를 확인해 보았다. assembly_summary.txt 파일의 접근 경로는 ftp://가 아니라 https://로 시작한다.

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

물론 이 텍스트 파일의 20번째 컬럼인 ftp_path의 값은 당연히 ftp://로 시작한다. 그러면 이번에는 NCBI 웹사이트에서 특정 미생물 균주의 assembly를 다운로드하기 위해 클릭하여 접속하는 URL은 무엇으로 시작하는가? 아래 그림에서 빨간색으로 표시된 곳을 클릭하면 여전히 웹 브라우저에서 파일 목록을 볼 수 있다.


이때 주소창에 나타나는 URL이 당연히 ftp://로 시작할 것으로 생각했었는데 오늘 확인해 본 결과 https://였다. 음? 원래 이랬었던가? 아니면 최근에 바뀐 것인가? 보안이나 네트워크 대역폭 등 여러 사항을 감안하여 주소 체계를 바꾸는 것으로 이해할 수 있다. 

공공 데이터를 ftp가 아니라 https를 통해서 전송한다면 암호화-복호화 등의 인증 작업을 거쳐야 하므로 시간이 더 걸릴 것이다. ftp://로 시작하는 주소를 누군가 해킹하여 악성 코드를 심은 엉뚱한 파일을 다운로드하게 만들 수도 있지 않을까? 충분히 가능한 이야기라고 생각한다. 내가 접속한 ftp 서버가 악의적으로 만들어진 가짜일 수도 있다! 인간 유전체 GRCh38이라고 되어 있는 ftp 주소를 클릭하였더니 악성 코드가 담긴 엉뚱한 파일이 내 컴퓨터로 다운로드될 수도 있는 것이다. 'ncbi'라 생각하고 클릭을 했더니 'nc6i'였고, 'kobic'이라 생각했더니 'ko6ic'으로 연결되는 일도 있을 수 있다.

무엇을 상상하든 그 이상의 일이 벌어지는 세상이니... 조심하자.

2021년 7월 30일 금요일

[독서 기록] 『공포가 과학을 집어 삼켰다』와 『디자인은 어떻게 세상을 만들어가는가』


탈핵과 코로나바이러스 감염증. 얼핏 보면 서로 관계가 별로 없는 분야의 주제이다. 전문가들이 흔히 하는 말 있지 않은가? 
'제 분야가 아니라서..(별로 할 말이 없습니다 또는 괜히 이야기해서 구설에 오르고 싶지 않습니다)' 
누가 나에게 원전 문제에 대해서 묻는다면, 나 역시 비슷한 논리로 이를 회피할 것이다. 난 생명과학자니까. 아니, 코로나바이러스 감염증에 대해 물어도 또 내 전공을 세분화하여 살짝 피해 나갈 구실을 찾을 것이다. 나는 미생물, 특히 세균의 유전체를 연구하는 사람이니까..
  • 공포가 과학을 집어삼켰다(원제: Radiation and Reason - The Impact pf Science on a Culture of Fear)
  • 지은이: 웨이드 앨리슨
  • 옮긴이: 강건욱·강유현
두 공역자는 부녀 관계이다. 학술 논문에 부모와 나란히 공저자로 이름을 올리는 일이 과연 올바른 일인지에 대하여 사회적으로 한바탕 홍역을 치렀고 이제는 누구나 조심하는 시대가 되었다. 그럼에도 불구하고 당당하게 부녀 관계임을 밝히면서 공동 작업을 했음을 밝혔다는 것은 그만큼 각자가 제 몫을 충분히 했음을 반증한다고 생각한다. 강유현이 쓴 역자 서문의 일부를 소개한다.
많은 물리과 대학생들 또한 대학 졸업 후 대다수가 금융, 회계, 컨설팅 분야로 진출하며, 비전문가뿐만 아니라 전문가마저 남에게 해를 끼치지 않는 생각, 즉 정사유(正思惟)를 벗어난 자본주의적인 욕심으로 치우쳐져 있습니다. 전문가로서 활약을 할 수 있는 많은 인재들이 욕심을 앞세워 사회와 인류를 위한 생각은 하지 않습니다. 결국 개인 투자자들이나 기업가들이 올바른 투자의 선택을 하기 위해서는 통찰력과 과학적 지식과 논리가 필요하게 되었습니다. (287쪽)

연구분야에 종사하던 사람들에게 자본주의적 영감을 불어넣어 사업화의 길을 걷도록 하는 것이 마치 올바른 길이고 국민에게 봉사하는 것처럼(혹은 내 욕망을 채우는 길인가?) 느껴지는 요즘의 분위기에서는 매우 신선한 시각이 아닐 수 없다. 

2011년 동일본 대지진에 이은 후쿠시마 원전 사고를 겪고도 어떻게 이런 책이 나올 수 있느냐고 반문하는 사람도 있을 것이다. 이 책은 원래 2009년에 쓰여진 책이다. 그러나 후쿠시마 방문기를 에필로그 형태로 다루었다. 원전 방사선 유출에 의한 직접적인 피해보다 '패닉' 자체가 더 큰 문제였다. 사실 인명피해는 쓰나미에 의한 것이 비교할 수 없이 더 컸음에도 불구하고.

저자는 방사능에 대한 공포가 지나치게 높고 안전 규제 역시 실제적인 위해성을 입증할 수 없는 수준에서 너무나 강한 현실을 바로잡아야 한다고 주장한다. 안전에 대한 새로운 기준은 ALARA(As Low As Reasonable Achievable)에서 AHARS(AS High AS Relatively Safe)가 되어야 한다는 것이다.

쟁점은 저선량 피폭이 암 발생 등의 위험 가능성을 현저히 높이는가에 관한 것으로 귀결된다. 저자의 입장은 그렇지 않다는 것이다. 암 치료를 위해 방사선 요법을 택하는 경우 그 부작용은 환자가 충분히 이해하고 감내하겠다는 조건으로 치료를 받는 것이다. 지난 7월 27일 그린란드에서는 8억톤은 빙하가 녹아 내렸다고 한다(관련 기사). 과연 신재생에너지만으로 인류가 요구하는 수준의 복지를 달성하면서 빙하를 지킬 수 있을까? 선진국 국민들은 전부 에너지를 덜 쓰기로 합의하고, 이제 막 자동차나 에어콘의 혜택을 입기 시작한 인구 폭발 중의 개발도상국 국민들에게는 그냥 현재 수준의 삶을 살라고 설득할 수 있겠는가? 이에 대한 가장 합리적인 대안은 원자력 발전 뿐이라는 것이다.

두 번째 이야기.

딸아이가 디자인 관련 대학을 목표로 입시를 준비하던 시절, 입시 설명회 등을 통해서 기존의 대학에서 어떤 문제를 내는지 설명을 들은 일이 있다. 나의 느낌은 이러했다. 디자인을 공부하는 대학에서는 세상의 모든 문제를 해결하려고 도전하는구나! 나의 전공인 생명과학도 감히 그렇게 하지 못하는데...

  • 디자인은 어떻게 세상을 만들어가는가(원제: How design makes the world)
  • 지은이: 스콧 버쿤(Scott Berkun) https://scottberkun.com/
  • 옮긴이: 이정미

제한된 자원만을 가지고서 최대의 효율을 힘겹게 추구해야만 했던 과거(그렇게 먼 과거도 아니고, 어쩌면 지금도 별로 바뀌지 않았는지도)에는 '디자인'이란 다분히 시각적인 것이었고 또 이를 감안하여 일을 한다는 것은 일종의 사치처럼 여겨지기도 했었다. 디자인이라는 낱말이 담고 있는 뜻이 워낙 광범위하고 시대에 따라서 조금씩 변하다보니 '세상의 모든 것을 바꿀 수 있는 계획'까지도 포괄할 수 있는 수준이 된 것 같다. 제 1 장의 제목은 감히 이러하다. '모든 것은 디자인을 담고 있다'

책의 말미에서는 다음과 같은 체크 리스트를 제시하였다. 이른바 4가지 질문이다. 꼭 디자인과 관련한 것이 아니더라도 내가 현재 하고 있는 모든 일에 대해서 이런 4가지 질문을 던질 수 있다. 

  1. 무엇을 개선하고자 하는가?
  2. 누구를 위해 개선하려고 하는가?
  3. 당신의 디자인 결정이 옳다는 것을 어떻게 확인할 것인가?
  4. 당신이 한 일로 현재 혹은 미래에 피해를 볼 수 있는 사람은 누구인가?
만약 지금 하고 있는 일이 잘 풀리지 않는다면, 이 4가지 질문을 한번 던져 보자. 특히 2번 질문은 어떠한 과업의 고객을 명확히 하고자 할 때 유용한 질문이다. 주어진 과업에 대해서 비용을 지불하는 사람이 바로 그 결과물을 직접적으로 활용하지는 않는 경우가 종종 발생한다. 정부에서 발주하는 많은 사업이 그러하다. 국민의 세금이 들어가는 일이므로 사양서에 맞추어 제대로 목표가 달성되었는지를 꼼꼼히 점검하는 것은 중요하다. 그러나 그 사업의 결과물을 실제로 활용하는 대상은 발주처(정부)가 아닌 일반 대중인 경우가 많다. 돈을 직접 대는 사람에게만 초점을 맞추게 되면, 정작 실제 사용자의 공감을 불러 일으키지 못하게 된다. 여기까지만 이야기하면 아마 정부출연연구소에서 근무하는 사람은 대략 감을 잡을 것이다.

자작 진공관 싱글 앰프의 빈약한 소리에 실망을 하다 - 7년 반만의 결론

진공관 앰프의 소리가 남다른 감동을 줄 것이라는 막연한 기대를 갖고 주문 제작을 의뢰하기도 하고 - 들인 비용을 생각하면 결코 큰 기대를 할 수 없는 - 많은 시행 착오를 겪으면서 직접 자작을 해 보기도 하였다. 그런데 남은 것은 무엇인가? 수북하게 남은 처치 곤란한 부품들, 그리고 자작 과정에서 느꼈던 희열 정도가 될 것이다. 정녕 진공관 (싱글) 앰프가 나에게 최고 수준의 음악을 들려주었나? 답은 '아니올시다'라고 해 두겠다. 특히 최근에 출력이 충분한 반도체 앰프로 다시 돌아서게 되면서 이러한 결론은 거의 확고하게 굳어졌다.

자작 43 앰프(왼쪽)와 주문제작 PCL86 앰프. PCL86 앰프는 오른쪽에서 잡음이 나기 시작하였다. 2014년 설 무렵에 구입하여 지금까지 사용했으니 슬슬 문제를 일으킬 시간도 되었다. 좌우의 관을 서로 바꾸어 뀌어도 잡음은 계속 오른쪽에서 난다는 것이 골칫거리. 초단관(12DT8)을 6N2P로 바꾸면 잡음은 사라진다. 물론 이렇게 쓰기 위해 히터 배선을 약간 바꾸는 수고를 하였다. 
가장 큰 문제는 아무래도 소리가 빈약하다는 것이다. 만약 SPL 92~93 dB/W/m 수준의 고능률 스피커를 갖고 있었다면 이야기가 달라졌을 것이다. 빈약한 출력의 앰프를 만들어 놓고 여기에 맞는 새로운 스피커를 찾는다면 그것은 뭔가 목표가 잘못 선택된 것이라고 생각한다.

6LQ8 푸시풀 앰프는 그런대로 힘이 있는 소리를 내 주었지만, 본디 오디오 신호 증폭용으로 만들어진 대중적인 관을 한번도 써 보지 못했다는 것도 아쉽다.

이영건 선생님이 만들어 주신 PCL86 초삼결 앰프는 지금껏 '좋은 소리를 낸다'고 믿고 사용해 왔었다. 그런데 출력 트랜스의 모양에 대해서 제이앨범에 글을 올렸다가 갭이 없는 형태의 저 트랜스는 필시 푸시풀 출력트랜스를 원래 목적에 맞지 않게 사용한 것이 틀림없다는 의견을 받은 후 머릿속이 복잡해지기 시작하였다.

[제이앨범] 싱글용 출력 트랜스의 갭

가장 간단한 방법은 아직 휴대폰에 남아 있는 이 선생님 번호로 전화를 걸어 물어보는 것이다. 하지만 만 7년을 넘기 쓴 앰프에 대해서 이제 와서 무언가 이상하다고 문의하는 것도 예의는 아닌 것 같아 아직 궁금증을 참고 있는 것이다. 이쯤 되면 '오디오는 심리학'이라는 생각이 든다. 인간이 감각을 이용하여 영위하는 모든 활동이 다 그러하겠으나... 

적당한 수준에서 정리를 할 시간이 다가왔다고 생각한다. 객관적으로 판단하여 정말 음악 감상용으로 문제가 없다는 평가를 받지 못한 앰프는 조금씩 줄여 나가야 될 것 같다. 어느 앰프가 퇴출(?)의 대상이 될지는 아직 좀 더 지켜 보아야 하겠으나...

2021년 7월 27일 화요일

NCBI의 datasets 명령어 알아보기

평소에 NCBI에서 미생물 유전체 자료를 밥먹듯이 다운로드하는 나로서는 웹 브라우저뿐만 아니라 명령행 환경에서도 쓸 수 있는 EDirectncbi-genome-download와 같은 유틸리티가 얼마나 고마운지 모른다. Bactopia에서는 주로 ENA를 대상으로 하여 SRA 데이터를 간편하게 다운로드할 수 있는 기능을 제공한다. 물론 SRA Toolkit있지만 BioProject accession에 연결된 raw sequencing read를 다운로드하기에는 'bactopia search'를 활용하는 것이 훨씬 편리하다.

어떤 미생물 종의 유전체 해독 현황을 알아보기 위해 오늘 NCBI 웹사이트에 접속하여 검색을 해 보았다. 그랬더니 흔히 보던 검색결과 옆에 이런 안내문이 눈에 뜨인다. 오늘 처음 발견한 것은 아니다. Quickstart: command-line tools를 클릭해 보았다.

간단한 설명을 보자. datasets은 NCBI에서 대량의 생물학적 서열 데이터를 다운로드하는 명령어이고, dataformatJSON(JavaScript Object Notation) Lines 포맷의 메타데이터를 TSV나 엑셀 등 다른 형태로 전환하는 명령어이다. 이상의 두 가지 command line tool은 리눅스나 macOS 및 64비트 윈도우즈용 프로그램을 전부 제공한다.

Quickstart guides에서는 주로 인간 유전체에 대한 활용 사례를 간략하게 설명하였다. 신종코로나바이러스 유전체 서열을 다운로드하는 방법에 대한 설명도 있다. 조금만 연구해 보면 번거롭게 assembly summary 파일을 파싱하거나 다소 난해한 EDirect 명령어 조합을 만들 필요가 없을 것 같다. 

NCBI 웹사이트에서 검색을 실시한 뒤 적당한 필터로 거른 결과물을 다운로드하는 것이 불가능한 것은 아니다. 나도 최근에 신종코로나바이러스의 유전체 수십만 건을 웹사이트에서 받아 보았기 때문이다. 그러나 안내문에 의하면 1000건 이상의 유전체 혹은 15GB를 초과하는 genome data package를 다운로드하려면 datasets 명령어를 쓰라고 한다.

과학기술정보통신부의 주도로 바이오연구데이터를 등록하기 위한 시스템을 만들고자 여러 사람이 애를 쓰고 있는 것으로 알고 있다. 단지 과제 평가를 위해서 데이터 등록 자체에만 치중해서는 의미가 없다. 등록된 데이터 자체에 대한 검색이 우선 가능해야 한다. 누가 무슨 과제를 통해서 생성한 연구 성과인지를 검색하는 것은 데이터 자체가 아니라 메타데이터에 대한 검색에 해당한다. 그 다음으로는 데이터를 쉽게 가져다가 활용할 수 있어야 한다. 그러려면 오늘 소개한 것에 해당하는 유틸리티도 개발·보급되어야 한다. 이것이 결코 쉬운 일이 아님은 너무나 명백하다.

2021년 7월 25일 일요일

FM 수신용 안테나의 보수 및 재설치

튜너의 수리도 마쳤으니(관련 글 링크) 원활한 방송 수신을 위해 옥외에 설치한 안테나도 손을 보는 것이 바람직할 것이다. 파견 근무 기간을 포함하여 약 3년 이상을 안테나 상태에 대하여 전혀 신경을 쓰지 못했다. 소자가 비틀어지고, 일부는 구부러지기까지 하였다. 인터넷으로 FM 방송을 듣게 되면서 안테나를 아예 철거해 버릴 생각을 한 적도 있었다. 하지만 튜너를 수리했으니 이에 맞추어 안테나도 보수를 하는 것이 옳지 않겠는가.

안테나를 끌어내려서 구부러진 곳을 폈다. 급전부가 있는 플라스틱 케이스을 열어보니 벌레가 고치를 지은 흔적도 있어서 깨끗이 닦아냈다. 고정 볼트에는 녹이 많이 슬었고 플라스틱 부품류도 부식이 일어나고 있다. 햇볕과 비바람에 노출된 동축 케이블의 외피 역시 변색이 되고 딱딱해졌다. 몇 년이 더 지나면 전체를 비슷한 제품으로 바꾸는 것이 나을 것이다. 이런 스타일의 옥외용 FM 수신 안테나는 현재 2만원 정도에 팔린다.

이런 스타일의 안테나를 실내에 두어도 깨끗한 소리가 나는 포인트를 찾을 수는 있다. 그러나 고정할 방법이 문제이다. 또한 콘크리트 벽에 기대어 놓으면 수신 상태는 나빠진다. 발코니라고 해도 마찬가지다.
내 블로그에는 이 FM 수신용 안테나의 설치 방법을 조금씩 바꾸었던 기록이 남아 있다. 2014년 처음 구입하여(제품 링크) 사용한 것을 시작으로 하여 마지막 글은 2018년에 작성하였다(FM 수신용 안테나 보수하기). 전부 수평 설치를 기본으로 하였고, 붐대가 처지는 것을 막기 위해 발코니 난간에 설치된 화분 받침대에 걸치는 방식을 사용했었다.

이번에는 수평으로 설치를 하였다. 또한 거실쪽이 아니라 침실쪽에 면한 난간을 이용하였다. 전과 비교한다면 동쪽으로 수 미터를 이동한 셈인데, 이렇게 함으로써 남동쪽의 열린 하늘을 바라볼 수 있는 효과를 거두었다고 믿는다. 목표는 식장산 중계소(102.1 MHz, KBS Classic FM 청주). 계룡산 중계소에서 송출되는 98.5 MHz도 잘 잡힌다.




좀 더 긴 붐대를 이용하여 안테나를 창틀에서 1.5 미터 정도 떨어뜨리는 것이 바람직하겠지만 갖고 있는 재료로는 견고하게 고정할 방법이 없다. 또 그렇게까지 하지 않아도 수신 상태는 충분히 양호하다.
동축 케이블 연결 작업까지 마무리를 한 뒤 음악을 듣는다.
누가 뭐래도 나에게 가장 중요한 오디오 소스는 튜너라는 사실은 변함이 없을 것이다.

2021년 7월 23일 금요일

인켈 튜너 TX-5400 수리

2년 동안의 파견 생활을 마치고 돌아와서 인켈 TX-5400 튜너에 외부 안테나를 연결하고 전원을 넣었더니 모든 FM 방송이 모노로만 잡혔다. 전에는 KBS 1 FM의 스테레오 수신만 불량한 상태였었다.

라즈베리 파이를 이용하여 국내외의 다양한 인터넷 라디오를 듣는 것도 즐거운 일이다. 그러나 전원을 넣고 부팅이 될 때까지 결코 짧지 않은 기다려야 한다는 점이 불편하였다. '전원을 켜면 즉각 소리가 난다'는 것은 매우 강력한 장점이다. 솔직히 말해서 나에게도 라즈베리 파이로 음악을 듣는 과정이 성가시게 느껴지는데, 음악을 좋아하는 아내에게 휴대폰으로 볼류미오를 조작하라고 알려주기에는 미안하다. 비록 최근에 새로 들인 인터엠 R150PLUS 레퍼런스 파워 앰플리파이어는 보호 메커니즘 작동 때문에 전원을 넣은 뒤 몇 초를 기다려야 릴레이가 붙고 소리가 나기 시작하지만... 

음질 면에서도 특히 KBS 1 FM은 튜너로 들을 때 더 박력이 있게 느껴졌던 것으로 기억이 난다. 

모처럼 하루 휴가를 낸 금요일, 튜너를 들고 인켈·바텔 대전서비스센터를 찾아 수리를 의뢰하였다. 이곳은 단순히 소비자용 인켈 앰프를 수리하는 곳이 아니라 방송장비 대리점을 겸하고 있었다(웹사이트 링크; 인켈 공식 웹사이트의 서비스센터 정보를 찾으면 이 링크는 보이지 않음). 코일을 교체하여 정상 기능을 되찾았다. 스테레오 수신 표시를 얼마 만에 보는 것인가? 수리 비용은 생각한 것보다는 조금 비쌌지만, 아깝단 생각은 들지 않는다. 그 돈이면 TX-5400과 비슷한 등급의 중고 튜너를 다시 살 수도 있을 것이다. 그러나 작동 상태는 보장하기 어렵다. 

'앞으로 얼마나 더 쓸 수 있을까요?' 수리 기사에게 물어 보았다.
'7년쯤 지나면 앰프나 튜너의 부품이 삭기 시작할 겁니다'. 

내가 집에서 인터엠 R150PLUS 앰프를 최근에 구입하여 쓰고 있다고 했더니 매우 의외라는 듯한 표정이었다. '방송용 앰프를요?' 뭐 어떠랴.

내가 이 튜너를 중고로 구입한 것이 언제였을까? 아마도 2014년 무렵이 아니었을까? 공교롭게도 7년의 시간이 지났다. 수리 기사의 말이 맞다면, 그때 신품으로 튜너를 샀다 하더라도 지금쯤 스테레오 수신 불량 상태가 되었을지도 모른다.

신품으로 구입했던 오디오 시스템이 몇 년이 지나면서 튜너의 수신이 불량해지는 현상을 최소한 두 차례 경험했었다. 비교적 짧은 시간(내 생각일 뿐이다)이 흐르는 동안 이렇게 빨리 열화되는 부품은 도대체 어떤 녀석인가? 손가락 한 마디도 안되는 코일이 바로 문제이다.

그러면 반도체 칩 몇 개로 구현한 라디오 수신 모듈은 어떻게 하여 코일 같은 것이 없이 작동하는 것일까? '전통적'인 튜너보다 수명이 더 길까? 나도 DSP PLL stereo FM receiver module을 하나 구입하여 테스트해 본 일이 있는데, 음질은 영 꽝이다. 이런 라디오 수신 모듈과 컴포넌트 오디오를 구성하는 단품 튜너의 음질이 비슷하다면 불공평하지 않은가? 물론 이런 식의 비교 자체는 공정하지 못하다. 90년대 초반의 데스크탑 컴퓨터보다 현재의 휴대폰을 비교해 보라. 크다고 더 좋은 것이 아님은 삼척동자도 다 안다.
DSP PLL stereo FM receiver module. 사진 출처: AliExpress
내가 실제로 구입하여 갖고 있는 FM 수신 모듈.

이 FM 수신 모듈과 관련하여 블로그에 작성한 글은 다음과 같다. 둘 다 2016년에 쓴 글이다.

처남에게서 얻은 B&W DH10 스피커(관련 글 링크)를 거실에 두게 되면서 인터엠 R150PLUS 파워 앰프를 사게 되고(관련 글 링크), 거실에 늘 두고 쓸 소스 기기로서 튜너를 수리하게 되었으니 우연히 벌어진 일의 나비 효과가 이런 결과를 초래하게 될 줄은 정말 몰랐다. 인생은 예측할 수 없는 것으로 가득하다는 것이 매력 아닌가? 올해 내가 만든 두 대의 진공관 앰프가 현재 제작 중인 드라마 촬영 현장에 놓이게 될 것을 누가 상상이나 했겠는가?

2021년 7월 18일 일요일

[독서 기록] 문명의 역습

책을 도서관에 반납해 버린 후라서 정확한 기록을 남기기가 어렵다. 독서를 하면서 메모를 하는 스타일은 아니라서, 독서 기록을 쓰려면 다시 책을 손에 들고 뒤적거려야만 한다.
  • 제목: 문명의 역습('우리는 문명을 얻은 대신 무엇을 잃었는가')
  • 원제: Civilized to Death
  • 저자: 크리스토퍼 라이언
  • 역자: 한진영
지속 가능한 생태계를 위하여 인류가 언젠가는 스스로 일구어 온 문명을 버려야 할 수도 있다고 나는 믿는다. 아니, 그럴 생각은 추호도 없지만 거듭된 재앙이 인류를 반 강제적으로 저(低)기술 사회로 몰고 갈 수도 있다고 본다.

인공지능이 고도로 발달하고 - 그 과정에서 인류가 인공지능에 의해 도태되지 않는다면 - 생각만으로도 사물을 제어할 수 있는 수준으로 과학기술이 발달하여 특이점까지 도달했다가 전쟁이나 환경오염, 기후변화 등으로 인류가 멸망했다고 가정하자.

또 다른 시나리오에서는 원하든 원치 않든 지금까지의 과학기술을 버리고 듬성듬성 소규모 집단을 이루면서 수렵과 채집을 살아가는 방식으로 회귀했다고 치자. 과연 나라면 어떤 미래를 꿈꿀 것인가? 생태계의 다른 구성원과 더불어 지속 가능한 삶을 살고자 한다면 당연히 후자가 더 바람직한 모습일 것이다. 그러나 손가락 조작만으로 요즘같이 뜨거운 여름날에 시원한 에어콘 바람을 맞으며 쾌적하게 사는 모습에 더 가치를 둔다면, 수렵 채집인의 삶은 따분하고도 발전이 없는 것으로 여길 것이다.

맨 마지막 장은 무척 의외로 여겨진다. 전통 사회에서부터 쓰이던 향정신성약물의 긍정적인 면을 다루고 있기 때문이다. 우리가 흔히 마약이나 약물이라고 한데 묶어서 생각하는 것들을 진지하게 나누어 다루어야 하고, 그 중에는 쓸만한 것이 있다는 이야기인데, 아직 우리 한국 사회에서는 받아들이기 어렵다.

[독서 기록] 유닉스의 탄생 - bioneer 서버를 추억하며

1990년대 초반, 내가 다니던 대학원의 몇몇 연구실에서 조금씩 돈을 모아서 당시로서는 꽤 좋은 리눅스 서버를 조립한 일이 있다. 그 서버의 이름은 'bioneer'. 이를 한글로 표기하는 문제에 대해서는 다들 고민을 별로 하지 않았다. 월드와이드웹은 고사하고 학교에서 이메일 주소를 공식적으로 발급해 주지도 않던 시절, bioneer는 생명정보학 도구의 산실이자 학과의 모든 구성원들에게 이메일 계정을 하나씩 안겨준 귀한 자원이었다. 지금은 중앙대학교 교수로 재직 중인 한윤수 교수가 직접 코딩하여 만든 텍스트 터미널 방식의 bbs 프로그램은 학생들의 일상과 실험 노하우를 공유하는 매우 중요한 정보 교류의 장이었다. bioneer라는 이름은 우리 학과의 당시 영문 명칭인 Department of Biological Science & Engineering에서 딴 것으로 기억한다. 이 bioneer라는 이름이 우리나라 생명공학계의 최초 벤처기업인 (주)한국생공이 1996년 (주)바이오니아로 상호를 변경하는데 어느 정도는 영감을 제공하였을 것으로 믿는다.

당시 바이오니어 서버를 만드는데 주도 역할을 했던 사람은 누구였던가? 안타깝게도 정확하게 기억나지는 않는다. 아마도 홍석진, 한윤수, 홍승범 동문 등이었던 것 같다. 혹시 정확한 정보를 알고 계신 동문이 있다면 연락 주시기를! 이러한 일을 학생들의 열의만으로는 할 수 없는 노릇이었고, 박찬규 교수님이 분위기 조성에 도움을 주셨던 것으로 기억한다. 학과 선배 중에서도 기여를 한 사람이 있었을 것이다. 이 작은 역사가 나로 하여금 리눅스에 관한 관심을 갖게 만드는 계기가 되었고, 1994년 드디어 내 생애 최초로 개인 PC를 갖게 되었을 때 리눅스를 설치하여 간단하게 bbs도 운영해 보고 학위 논문 원고도 LaTex으로 쓰게 된 계기가 되었다. 컴퓨터는 계속 바뀌었지만 이때 지은 eos라는 서버명은 그 이후로도 꽤 오랫동안 사용하였다. 사실은 1993년 여름 어렵게 장만한 캐논 SLR 카메라 EOS 5에서 딴 이름이지만... 다음 주에 컴퓨터를 하나 발주할 일이 있는데 생각이 난 김에 eos라는 이름을 다시 사용해야 되겠다. AMD CPU를 쓰는 컴퓨터로는 첫 경험이 될 것이다.

학부생 때에 SSM-16에 접속하여 포트란 실습을 한 일이 있어서 리눅스의 텍스트 터미널 환경을 별로 낯설게 여길 필요가 없었던 것도 큰 도움이 되었다. 1984년에 개발된 국내 최초의 상용 컴퓨터인 SSM-16에 대해서는 ETRI 40주년 자료를 참고하기 바란다. 아, SSM은 '삼성 수퍼마이크로'의 약자였구나!(1996년 전자신문 기사) 예전보다는 SSM-16에 대한 정보를 찾기가 수월해져서 다행이라고 생각한다.

서론이 지나치게 길었다.

나의 업무에서 여전히 중요하게 쓰이는 자료 처리용 스크립트 언어 AWK의 저자 중 한 사람인 브라이언 커니핸이 쓰고 하성창이 번역한 책 『유닉스의 탄생』(한빛미디어 2020년)을 재미있게 읽었다. 훗날 누군가 짧았던, 그러나 굵게 흔적을 남긴 bioneer 서버의 역사에 대한 글을 쓰게 될지 누가 알겠는가?

UNIX와 C 언어는 미국 AT&T의 연구 개발 자회사인 벨 전화 연구소(Bell Telephone Laboratories, 혹은 단순히 '벨 연구소')에서 태어났다. UNIX가 탄생되는 순간은 이 책의 80쪽부터 나온다. MIT와 공동 작업으로 진행되었던 멀틱스(초기 시분할 운영체제의 하나, 1964~2000) 개발에서 손을 뗀 사람들이 거의 놀고 있었던 DEC PDP-7을 활용하기 위해 창의력을 발휘한 것이다. 멀틱스의 복잡성에 대한 반작용으로 탄생한 것이 유닉스라니! 켄 톰프슨은 PDP-7에 달린 특이한 디스크 드라이브의 작동 효율을 높이기 위해 새로운 디스크 스케쥴링 알고리즘을 작성했고, 이를 시험하기 위해 그의 아내가 한 살짜리 아들을 데리고 부모님을 뵈러 간 3주 동안 유닉스의 프로토타입을 만든 것이다.

당시 벨 연구소는 연구자들이 최대한 자율적으로 일할 수 있게 배려하는 분위기였고, 대학을 찾아다니며 좋은 인재를 영입하는데 많은 노력을 기울이고 있었다. 요즘 우리나라와 같이 '블라인드 채용'만이 공정한 인재 등용 방법이라면서 이를 강하게 추진하는 것과는 크게 대조가 된다. 유닉스는 벨 연구소의 모기업에 결코 재정적인 성공을 가져다주지 못했다. 주변 대학에 영업 비밀 보호 협약만 맺는 조건으로 싼 가격(명목상의 매체 수수료)에 배포를 하여 인기를 누리기 시작했다. 요즘 말하는 오픈 소스 방식은 분명히 아니었고 라이선스를 취득한 사람끼리만 유닉스와 관련된 경험을 공유할 수 있었다. 그러나 커뮤니티가 확산되고 점차 다른 종류의 하드웨어로 이식되는 것도 가능해졌다. 무엇보다도 중요한 것은 그 과정에서 호환성이 중요한 전통으로 자리잡게 되었다고 한다. 유닉스에서 직접적으로 파생되었거나 영향을 받은 후손이 지금은 시장에서 큰 비중을 차지하게 되었고, 그 한가운데에 리눅스가 있다.

벨 연구소는 소속 연구원들이 책을 발간하는 것을 장려하였다고 한다(201쪽부터). 초창기 유닉스에서는 문서 생성용 도구가 큰 비중을 차지하였고, 이로 말미암아 각종 매뉴얼이나 기술 논문 및 책이 만들어질 수 있었다. 특히 벨 연구소의 컴퓨팅 과학 연구 센터에서는 책을 집필하기 위해 별도의 개인 시간을 쓸 필요가 없었다. 덕분에 벨 연구소는 컴퓨팅과 컴퓨터 과학에 대한 권위 있는 책을 쓰는 곳으로 유명해졌다. 

비교적 규모가 작은 기업의 연구소에서 이렇게 좋은 책을 많이 낼 수 있었던 원인을 저자는 이렇게 파악하고 있다. 이를 원문에서 그대로 인용해 본다(203쪽~). 기술적인 글쓰기를 즐기는 나에게 매우 깊은 인상을 준 대목이다. 
  • 글쓰기를 진지하게 대했고, 스스로 공을 들여 썼으며, 다른 사람들이 쓴 글을 읽고 훌륭한 비평을 제시했다.
  • 연구소 경영진이 책 쓰기를 지지해 주었다... 6개월 동안 책을 몰두하여 쓸 수 있었고, 저작권은 벨 연구소가 보유하지만 저자가 인세를 받았다.
  • 프로그래밍 환경으로서 C와 유닉스, 연구 분야로서의 문서 생성, 컴퓨터 기술을 주제로 한 글쓰기를 주요 활동으로 삼은 것 간의 공생 관계다.

유닉스 개발에 가장 크게 기여한 소수의 천재를 고르라면 케네스 톰프슨과 데니스 리치로 대상을 좁히지 않을 수 없지만, 저자는 당시 벨 연구소 컴퓨팅 과학 연구센터의 분위기는 열정으로 뭉치고 우애 넘치며 자유로운 환경임을 강조하고 있다. 자유로운 연구를 지속적으로 지원하였던 부서장이라든가, 인턴 연구원으로 잠시 근무하면서 머물면서 유닉스 시스템의 성장과 발전에 기여한 사람들(예: 훗날 구글의 CEO가 된 에릭 슈미트) 등등.. 이 책을 읽으면서 그 어디에서도 치열한 경쟁이나 성과를 둘러싼 싸움 같은 것은 찾아볼 수 없었다. 오히려 관리자로 승진하기 싫어서 애쓰는 모습이 애교스럽게 묘사되기도 하였다. 혹시 일부러 저자가 낭만적으로 책을 쓴 것은 아니었을까? 

'하고 싶은 일을 열심히 했을 뿐인데, 시간이 지나고 보니 역사가 되어 있더라구요.'

언젠가 이런 말을 할 수 있는 날이 온다면 얼마나 영광일까?

2021년 7월 15일 목요일

인터엠 '레퍼런스 앰프' R150 PLUS 파워앰프(중고) 구입

인터M R150PLUS. 상세 자료는 인터엠 영문 사이트의 제품소개 페이지에 있다.

라즈베리 파이 -> USB DAC(Behringer UCA200)를 거쳐 인터넷 라디오를 재생하는 모습. DAC의 RCA 출력을 앰프의 balanced input에 연결하는 데에는 RCA to 55(TS) 케이블을 이용하였다.

'Bridged mono' 모드로 설정한 다음 빨간색 단자 두개에 8옴 스피커를 하나만 연결하면 150와트(TDH 0.05%)의 파워가 나온다. R150이라는 모델명은 파워 수치에서 딴 것으로 보인다.

볼륨 노브를 돌려보면 각 단계마다 걸리는 느낌이 난다. 좌우 채널을 별도로 조정하게 되어 있으므로 바람직한 설계이다.
인터엠(Inter-M)은 가정용 오디오로 유명한 인켈에서 오래전에 독립한 프로페셔널 오디오 전문 기업으로, 구내방송(전관방송이라고도 함)이나 공연장용 오디오 시스템을 제조하여 공급하는 회사이다. 두 분야를 통틀어서 PA(public address)라 부르기도 하고, 혹은 이를 세분하여 전자를 좁은 의미의 PA, 후자를 sound reinforcement(SR)라 부르기도 한다. 하지만 서양에서는 후자를 professional audio라고 부르는 것이 일반적이라고 한다. 한국식 의미의 PA와 SR은 용도가 다른만큼 쓰이는 장비도 크게 다르다. 요즘 가정용 오디오 시스템은 더 이상 90년대 수준의 인기를 누리지도 못하지만, PA+SR 오디오 시스템 시장은 절대 그렇지 않고 시장 규모도 훨씬 큰 것으로 알고 있다.

그러면 내가 오늘 중고로 구입한 인터엠 R150PLUS는 무슨 앰프인가? SR용 파워 앰프에 가깝지만 요즘 널리 쓰이는 것들에 비하면 비교적 출력이 작다. 작은 규모의 공연장이나 교회에서 음악과 스피치용 파워앰프로 쓰면 적당한 모델이다. 8옴 스피커에 대하여 50W+50W 파워를 내므로, 어설프게 만들어 1와트도 내지 못하는 잡음 투성이 진공관 싱글 앰프를 갖고서 능률이 떨어지는 스피커 시스템을 잘 울리지 못하여 겪었던 고생을 저 멀리 날려 버릴 수 있다.

인터엠 영문 페이지에서 R-PLUS 시리즈 'Reference Amplifier'의 소개 글을 가져다가 인용해 본다.
  • The R-PLUS Series are a dual-channel, high-performance amplifiers. Their clear, open sound and quiet operation make them ideal for reference systems and church sound applications. Inputs are via balanced XLR or 1/4” connectors, outputs are via rugged five-way binding post connectors. 
  • All units have soft-start protection circuitry and feature signal, protection and clip indicators on the front panel.  For added versatility, they may be operated in stereo, dual mono or bridged mono mode. 
  • They have front panel mounted mains switch, level controls and indicators for power, protection, clip and signal present. Convection-cooling provides noise-free ventilation for critical applications. Mains inlet is via an iec connector. The R-PLUS Series amplifiers are powered by 100-120VAC or 220-240VAC 50/60Hz(depending on country requirements) and are packaged in a 3.5” (2RU) rack mount enclosures.
이런 타입의 앰프는 가정용 하이파이 앰프와 비교하여 음질이 더 나쁠까? 그렇다고 생각하지는 않는다. 일단 SR 앰프는 밸런스 입력을 지원하고, 튼튼하며, 각종 보호 기구가 존재한다. 그만큼 가혹한 조건에서도 안정적으로 구동되도록 만든 것이다. 출력이 300~500와트를 넘어가면 일반적으로 모터로 돌리는 냉각용 팬이 장착되기 때문에 소음이 발생하여 가정에서 음악감상용으로 쓰기에는 불편함이 있을 것만 같다. 하지만 이 모델은 방열판만으로 냉각을 하기에 팬 소음이 없다.

왜 이런 앰프를 살 생각을 했을까? 가장 큰 이유는 내가 최근 몇 년 동안 직접 만든 진공관 앰프에서 만족을 하지 못했던 것에 있다. 그리고 요즘 나오는 가정용 오디오 앰프에 대해서 별로 매력을 느끼지 못했다. 가정용 오디오 전성기에 나오던 앰프 중고품은 상태가 좋은 것으로 고르기가 점점 어렵다. 반면 SR 앰프는 중고 시장이 잘 형성되어 있어서 적절한 가격의 것을 선택할 수 있다. 출력이 그렇게 높지 않은 제품이라면 새것도 그렇게 비싸지는 않다.

랙에 고정하는 앰프라서 다리는 달려있지 않다. 적당한 고무발 같은 것을 달아 주어야 되겠다. 가구 위 유리판에 얹어 놓았더니 생각보다 가벼워서 자꾸 미끄러진다. 언밸런스 오디오 기기를 입력에 연결해도 별다른 문제는 없다. 소스 자체가 언밸런스이므로 콘솔 믹서 같은 것을 중간에 일부러 삽입하여 밸런스 출력을 만들 필요가 없다. 어차피 가정에서 쓸 것이라 신호선이 길지 않아서 밸런스 연결의 장점을 누릴 일이 별로 없기 때문이다. 입력 단자는 TRS(55 type)과 XLR 두 가지가 준비된 상태인데, 갖고 있는 커넥터가 하도 많아서 문제가 없다. 과거에 믹서, 전기기타, 신시사이저 등을 조금씩 다룬 일이 있어서 온갖 타입의 커넥터를 이미 구비해 놓은 상태이기 때문이다.

자작 진공관 앰프에 대한 환상을 가지고 있었던 것은 맞다. 이제는 만든 앰프를 더 이상 둘 곳도 없다. 적은 비용으로 실패 없이 만들기 위해 소출력 싱글 앰프에만 집착을 했고(그나마 6LQ8 푸시풀 앰프를 경험한 것은 다햄임), 운명적으로 자작 싱글 앰프의 출력이 낮아서 이미 갖고 있는 스피커를 충분히 울리지 못하니 덩달아 고능률의 풀레인지 스피커 유닛을 구하여 직접 스피커 시스템을 만들어야 하나 고민하고... 이런 악순환의 고리를 과감히 끊고자 기성 반도체 앰프로 과감히 전환하기로 결심한 것이다. 그동안 고만고만한 진공관 앰프를 여럿 만드는데 들어간 노력과 비용을 제대로 된 앰프 하나에 쏟아 부었다면, 지금과 같이 실망감과 함께 더 이상의 자작을 하지 않겠다고 마음을 돌리는 일도 없었을 것이다. 최소한 소리전자의 6V6 싱글인 '돌쇠' 시리즈로 시작을 했어야 한다. 

음악적 완성도가 떨어지는 진공관 앰프는 과감히 정리하자. 43과 PCL86 앰프가 그러하다. 6LQ8 푸시풀 앰프는 그런대로 만족할 수준이니 잘 보수하면서 활용할 생각이다. 아마도 6LQ8과 6P1만이 살아남게 될 것이다. 진공관 오디오의 진정한 가치를 미처 경험하지도 못하고 어설프게 그만 두는 것 아니냐고 비판할 사람이 있을 수도 있다. 나는 이미 7년 이상 충분히 노력했고, 그만하면 되었다고 본다. 만드는 재미에서 오는 보람을 느끼는 것과 완성도 높은 앰프를 만드는 것은 완전히 별개의 목표이다.

2021년 7월 14일 수요일

NGS 시대에도 Sanger sequencing 결과물의 처리는 필요하다 - Tracy

미생물 시료의 16S rRNA sequence를 알아내기 위해 표적을 몇 개의 겹치는 PCR product 형태로 들어내어 염기서열을 판독한 경우, 또는 재조합 벡터를 새로 만든 다음 확인을 하고자 할 때 Sanger sequencing 기법은 여전히 필요하다. 단일 크로마토그램에서 염기서열을 추출하는 것이 전부가 아니다. 몇 개 되지 않는 크로마토그램을 조립할 일도 종종 겪을 것이다.

생명정보학에 대한 전문적인 기법을 아직 습득하지 못한 사람이 이러한 상황에서 비용을 들이지 않고 편리하게 쓸 수 있는 도구가 그렇게 많지는 않다. 서너 개의 크로마토그램을 조립하기 위해 2021년에 Phrap 소스를 다시 꺼내어 설치하는 것은 가혹한 면이 없지 않다. 아니, 내 컴퓨터에 phrap이 깔려 있기는 한가?

$ phrap

phrap phrap 
phrap version 1.080812

phrap version 1.080812
Reading parameters ... 1.008 Mbytes allocated -- total 1.008 Mbytes

Run date:time  210714:081805
Run date:time  210714:081805
FATAL ERROR: Sequence files must be specified on command line. See documentation.

아직도 굳건하게 남아 있다. 그러고 보니 Staden package도 여전히 배포 중이다. 1996년에 나왔던 Staden sequence analysis package에 관한 논문은 여기에서 볼 수 있으며 최신 업데이트는 20년이 지난 2016년(v2.0.0b11)까지 이루어진 상태이다. 언제 쓸 일이 있을지 모르겠지만 윈도우용 버전을 설치해 보았다. Staden package와 관련하여 기억해 둘 것은 "contig"라는 용어가 원래 어디에서 유래했는지를 잘 설명해 주기 때문이다(링크). 참고로 Staden이 근무했던 영국의 MRC Laboratory of Molecular Biology는 일종의 출연연 또는 국가연구소로서 현대 분자생물학 분야에서 너무나 많은 성과를 남겼다. Staden의 사진을 한번 찾아 보았다.

Roger Staden (LMB). "Staden devised the first DNA sequencing software." 출처: What is biotechnology? Computers, Databases and Automation

Staden package 설치 화면.
원래 오늘은 생명정보학 프로그램 박물관과 관련한 글을 쓰려는 것은 아니었다. 동료로부터 PCR로 증폭하여 판독한 16S rRNA 염기서열 유래 크로마토그램을 조립하는 방법에 관하여 이야기를 나누다가 현 시점에 쓰기 적당한 도구는 무엇이 있을지 웹을 뒤지는 과정에서 Tracy라는 도구를 접하게 되었다. 2021년에 이런 소프트웨어를 접하게 되다니 반갑기 그지없다. 특히 공공성이 강한 기관(EMBL)에서 개발하였으므로 비교적 오랜 기간 동안 업데이트가 및 서비스가 이루어질 것이라는 막연한 기대도 갖게 된다.

Tracy: basecalling, alignment, assembly and deconvolution of Sanger chromatogram trace files. BMC Genonmics 21, article no. 230 (2020) https://github.com/gear-genomics/tracy

Tracy 자체는 명령행에서 돌아가는 backend이고 별도의 웹사이트인 GEAR Genome Analysis Server(https://www.gear-genomics.com/)에서 서비스가 이루어진다. 논문에 소개된 web application은 다음의 6개이지만, 실제로 방문을 하면 훨씬 더 많은 서비스가 있다. 오늘 확인한 바에 따르면 무려 16개의 application이 있으며, 앞으로 더욱 늘어날 것이라고 한다. 마치 세련되게 다시 꾸민 EMBOSS explorer를 보는 느낌이다.

  • Teal: Viewing a trace file
  • Sage: Aligning a trace to a reference sequence
  • Indigo: Decomposing a trace, variant calling and annotation
  • Pearl: Patching FASTA sequences based on a local trace assembly that optionally uses a reference sequence
  • (Auxiliary) Sabre: a MSA viewer
  • (Auxiliary) Wily-DNA-Editor
논문의 그림 1 일부(Pearl)를 아래에 소개하였다. Reference 서열에 대하여 조립된 크로마토그램으로부터 mismatch를 잘 보이고 있다.
Full size image 원본 링크.
고전적인 DNA sequencing 이론은 이제 교과서 속으로 들어가 버리고 젊은 연구자들은 그 실체를 접할 기회가 많지 않은 것 같다. 

2021년 7월 12일 월요일

FASTA 파일 자르기 - Jim Kent의 faSplit

FASTX 파일을 조작하는 유틸리티는 그 종류가 하도 많아서 가끔씩은 내가 원하는 기능을 수행하는 명령어가 뭔지 찾는 것보다 차라리 새로 짜는 것이 더 편하다고 느낄 때가 있다. 이번에는 6G(gigabasepair가 아니라 gigabyte)가 넘는 FASTA file을 nucmer가 잘 다루지 못하는 현상을 발견하여 이를 수십 조각으로 적당히 분할하는 '남이 이미 만들어 놓은 유틸리티'가 뭔지 찾아 보았다. 다음의 글에서 저명한 전산생물학자 Jim Kent가 만들었다는 faSplit라는 것을 알게되어 설치 후 활용해 보았다.



faSplit - Split an fa file into several files.
usage:
   faSplit how input.fa count outRoot
where how is either 'about' 'byname' 'base' 'gap' 'sequence' or 'size'.  
Files split by sequence will be broken at the nearest fa record boundary. 
Files split by base will be broken at any base.  
Files broken by size will be broken every count bases.

Examples:
   faSplit sequence estAll.fa 100 est
This will break up estAll.fa into 100 files
(numbered est001.fa est002.fa, ... est100.fa
Files will only be broken at fa record boundaries

   faSplit base chr1.fa 10 1_
This will break up chr1.fa into 10 files

   faSplit size input.fa 2000 outRoot
This breaks up input.fa into 2000 base chunks

   faSplit about est.fa 20000 outRoot
This will break up est.fa into files of about 20000 bytes each by record.

   faSplit byname scaffolds.fa outRoot/ 
This breaks up scaffolds.fa using sequence names as file names.
       Use the terminating / on the outRoot to get it to work correctly.

   faSplit gap chrN.fa 20000 outRoot
This breaks up chrN.fa into files of at most 20000 bases each, 
at gap boundaries if possible.  If the sequence ends in N's, the last
piece, if larger than 20000, will be all one piece.12

faSplit는 multi-FASTA file을 각 서열 단위로 분할하는 것은물론 큰 서열을 임의의 길이(bp 혹은 바이트 단위)로 잘라준다. 리눅스에 포함된 일반 유틸리티인 cut도 이와 유사한 일을 할 수 있으나 서열 경계 부분을 지혜롭게 처리해 주지는 못한다. cut의 유용성은 다른 곳에 있다. 예를 들어서 컬럼 단위로 텍스트 파일을 분할하는 능력 말이다.

만약 fasta 파일을 조작하여 염기서열이 한 줄에 표시되게 만들면 cut과 같은 일반 유틸리티를 이용한 복잡한 작업도 가능하다. 그러려면 awk나 sed를 동원해야 될 것이다.

이렇게 블로그에 기록을 남겨놓지 않으면 내가 faSplit라는 유용한 도구를 설치하여 사용했었다는 사실 자체를 기억조차 하지 못할 것이다!

2021년 7월 9일 금요일

NCBI 신종코로나바이러스(SARS-Cov-2) 데이터 허브에 올해 등록된 유전체 염기서열에는 한국 유래 바이러스 자료가 없다

신종코로나바이러스 국내 확진자가 최근 들어서 급증하는 추세이다. 하루에 1200명이 넘는 확진자는 전혀 예상하지 못했던 수치이다. 주말에 세웠던 계획을 어떻게 하는 것이 좋을지 심히 고민이 된다.

NCBI에서는 신종코로나바이러스를 위한 SARS-CoV-2 Data Hub를 별도로 운영하고 있다. 오늘 기준으로 등록된 바이러스의 유전체 염기서열은 896,485건이고, completeness로 필터링하면 374,386건이나 된다. GISAID의 EpiCoV 데이터베이스에 비교하면 등록된 데이터는 약 절반 수준이지만 데이터 사용에 따른 제한이 적어서 좋다. GISAID는 데이터를 등록한 사람의 권한을 더 중시하는 정책을 유지하고 있어서 사용자 등록도 까다롭고, 자료를 가져다가 활용하려면 등록자를 밝히는 '감사의 글' PDF 파일을 받아야 한다. 시험삼아서 1만 건(검색 페이지에서 한번에 다운로드할 수 있는 자료의 수 - 이것마저 상한선이 있다니...)의 염기서열을 다운로드하면서 감사의 글 파일을 같이 받았더니 A4 용지 포맷으로 무려 68쪽이나 된다. 만약 논문을 쓰면 이것을 supplementary file로 붙여야 한다. 20만건 정도의 데이터를 받아서 분석한다면 어떻게 될까?

돈을 들여서 바이러스 변이체의 유전체를 연구하고 임상 데이터를 얻은 사람의 소중한 정보를 함부로 가져다 쓰지 말라는 정책인데, 백신 및 치료제 개발이라는 공익적인 목적이라면 이를 좀 더 개방해야 하지 않을까? 이를 촉구하는 공개 서한(Open letter: Support data sharing for COVID-19)에 연구자들이 서명을 하고 있지만 GISAID의 정책이 아직 변한 것 같지는 않다. BioIN 포털에서도 코로나19 바이러스 유전체 데이터 공유 이슈라는 글을 통해 이 문제를 소개하였다.

활용에 별다른 조건이 없는 NCBI의 데이터 허브에서 올해부터 지금까지 수집된 바이러스에 대한 유전체 데이터(complete)를 다운로드하였다. 바이러스 샘플을 수집한 날, 염기서열 정보를 등록한 날, 공개일(NCBI)에 차이가 있으니 주의해야 한다. 아마도 샘플 수집일이 가중 중요한 기준일이 될 것이다.

오늘 받은 것은 약 22만 건에 이르는 자료로서 FASTA file의 크기는 6.1 G에 육박한다. 그런데 한국에서 등록한 것은 하나도 없다. 어라? 수집 기간에 대한 필터를 해제하니 30개 조금 넘는 자료가 존재할 뿐이다. 왜 이렇지? 이번에는 GISAID에 가 보았다. 기간을 불문하고 검색을 한 결과 대한민국에서 유래한 것이 8,579건이고 3종 필터 세트(complete, high coverage, low coverage excl)을 적용하니 4,931개가 되었다. 일단 후자에 해당하는 세트를 전부 다운로드하였다.

왜 거의 전부의 자료를 NCBI가 아니라 GISAID에만 등록을 했을까? 위험을 무릅쓰고 바이러스 샘플을 채취하고, 유전체 데이터를 해독하고, 환자의 임상 데이터를 수집하는 등의 노고는 누구나 다 들여다볼 수 있는 NCBI에 등록하기에는 아까웠던 것일까? 데이터를 가져다가 쓰기만 하는 사람으로서 데이터 제공자의 입장을 완벽하게 이해하기는 어렵다. 나름대로의 합리적인 이유가 있겠지만 아쉬움을 금할 수가 없다.

NCBI Data Hub에서 적당한 조건으로 검색을 한 뒤 table view를 CSV 파일로 받은 후 서열 ID와 PANGO lineage를 awk로 뽑으려고 했더니 2번째 컬럼(authors)가 아주 고약하게 되어 있는 것을 발견했다. 저자가 여러명이므로 콤마를 넣어서 구분을 한 뒤 전체를 큰따옴표로 둘러싼 것이 아닌가. 이를 "awk -F,"로 조작하면 인용기호 안의 콤마를 그대로 구분자로 취급해 버리니 문제가 된다. 방법은 찾으면 나온다! 아래에 소개된 솔루션 중에서 가장 마지막에 소개된 것을 사용하였다.


다음의 코드는 1번과 4번 컬럼을 추출하게 만들어 준다.

$ awk '{while(match($0,/("[^"]+",|[^,]*,|([^,]+$))/,a)){
     $0=substr($0,RSTART+RLENGTH);b[++x]=a[0]}
     print b[1] b[4];x=0}' sequences.csv