2020년 1월 31일 금요일

Jvarkit: Java utilities for Bioinformatics

오늘의 글은 jvarkit라는 자바 응용프로그램을 소개하기 위함이 아니다. javakit에 포함된 blastn2snp라는 것을 컴퓨터에서 컴파일하는데 겪었던 어려움과 그 해결 경험을 공유하기 위함이다.

Perl은 가끔 코딩을 하고, python은 기초 수준의 교육만 두어 차례 받은 상태라서 코딩을 직접 할 수준은 아니지만 수도 없이 많은 package와 application을 설치하여 사용하지만, Java에 대해서는 부끄럽게도 지식이 전무하다는 것이 나의 현 상태이다. JRE가 설치된 컴퓨터에서 겨우 Java 응용프로그램을 설치하여 쓰는 정도이다. 정확히 말하자면 설치라기보다는 압축을 푸는 정도의 일이다. 서로 다른 Java 환경을 관리하기 위해 alterenatives 명령어를 쓰는 것도 포함해서이다. JVM(Java Virtual Machine)까지 들어가면 머리가 아파진다. 난 자바 개발자가 아니고 그렇게 되고 싶지도 않다. 그런데 상황은 나를 그렇게 만들지 않는다.

"JDK란 무엇인가" 자바 개발 키트 소개와 설치하기

아주 드물게 Java 소스 코드로 배포되는 것을 사용하려면 골치가 아프다. 최근에 자바 응용프로그램으로서 첫 좌절을 안겨준 것은 Sanger Institute에서 개발하고 배포하는 Artemis의 최신버전이었다(소스코드는 GitHub에 있음). Windows에서는 아주 깔끔하게 잘 돌아간다. 그런데 Git의 최신 버전을 클로닝하여 쓰려고 하면 mvn(Apache Maven)이라는 것을 사용하여 빌드를 해야 되는데, 여기서부터 지식이 부족하여 애를 먹게 된다. 물론 과거에는 .jar 파일을 배포했으니 메이븐이든 뭐든 알 필요가 없었다.
아파치 메이븐(Maven)은 자바용 프로젝트 관리 도구이다. 아파치 앤트의 대안으로 만들어졌다.
뭔 말인지 이해가 잘 안되니 이미 컴파일이 되어 배포되는 artemis-unix-release-18.1.0.tar.gz를 가져다가 테스트해 보자. 실행은 되는데 염기서열 view에서 글꼴 폭이 맞지 않아 아주 보기가 싫다. 윈도우에서는 이렇지 않다. 이건 어떻게 해결해야 하는지 잘 모르겠다.

Fastq file(raw sequencing read)이 아니라 완성된 유전체 서열을 레퍼런스와 비교하여 SNV 관련 정보를 뽑을 일이 생겼다. Fake read를 만들어서 일반적인 variant analysis를 하거나, snippy를 돌리거나(이것도 fake read를 사용하는 점은 마찬가지), 아니면 유전체 서열 그대로 nucmer를 실행하여 SNV 정보를 뽑는 것은 익숙하다. 하지만 비교 대상인 두 유전체 서열(bacterial complete chromosome)이 머리부터 발끝까지 거의 그대로 정렬된다는 것을 알고 있는 상태라서 이런 간접적인 방법은 쓰고 싶지 않았다. BLAST를 실시하여 HSP의 위치를 잘 파악한 다음, 그 결과물에서 SNV 정보를 추출하는 방법이 적당하다고 생각하여 어떠한 도구를 쓰면 되는지 검색을 해 보았다. 개인적으로는 Phil Green의 cross_match를 가장 좋아하지만 alignment 출력물을 처리해주는 Perl 혹은 Python 라이브러리가 없다. 구글 검색을 해 보니 Jvarkit 패키지의 blastn2snp('print indel/mismatch in a blastn stream)가 아주 적당해 보였다. Jvarkit는 누가 만들었나? GitHub 주소에 보이는 'lindenb'이라는 문자열이 왠지 낯설지 않다. 아! BioStar 커뮤니티에서 가장 크게 기여한 Pierre Lindenbaum이었다(구글 스칼라). 내가 2016년에 작성한 글(링크)에서 Pierre Lindenbaum을 잠시 언급한 일이 있다. BLAST 결과물을 XML로 출력하여 blastn2snp에 제공하면 된다. 설치 방법을 알아보자.

$ git clone "https://github.com/lindenb/jvarkit.git"
$ cd jvarkit
$ ./gradlew blastn2snp

gradlew? 이건 또 뭔가? 그레이들(gradle)이라는 프로그램을 돌리는 wrapper 같은데..
Gradle은 Groovy를 이용한 빌드 자동화 시스템이다.
어이쿠, 내가 이것까지 알아야 하나?
gradle이라는 것을 알았을 때 일단 한숨이 나왔다. 이제 겨우 maven에 적응되었는데 또 다른 툴이라니 오 마이 갓! 그런데 권남님의 블로그에서 [maven을 넘어 gradle로 가자]라는 글을 읽고 공감되었다. 출처: 와이케이의 마구잡이 
사실 명령행에서 복사하여 붙여넣기만 할 줄 알면 자바 소스를 컴파일하는데 별 어려움은 없다. maven이든 gradle이든 개발자가 아니라 단순한 사용자 입장에서는 그 깊숙한 얼개를 알 필요는 없는 것이다. 그런데... 문제는 gradlew 실행 시 파일 다운로드가 안된다는 것이다. 파견 근무지에서 1년 가까이 내 속을 썩이던 SSL/HTTPS/인증서 문제가 고스란히 남아있었다. 그래도 솟아날 구멍이 이제는 있으니 바로 아마존 웹 서비스 EC2이다. 시험 삼아 돌리고 있는 인스턴스에서 설치를 하니 아무런 문제가 없다. Lindenbaum이 만든 수많은 자바 응용프로그램을 이제 순조롭게 빌드하여 쓸 수 있게 되었다.

blastn2snp의 사용법은 다음과 같다.

$  java -jar dist/blastn2snp.jar < blast.xml | column -t

생소한 명령어가 또 하나 등장하였다. column? 'man column'을 쳐서 매뉴얼을 읽어봐도 샘플이 없으니 잘 이해가 가질 않는다. Linux column command tutorial for beginners (with examples)라는 글이 도움이 되었다.

여담이지만 무인도에 가지고 가고 싶은 소프트웨어 10개를 꼽으라면 나는 cross_match와 artemis 두 개를 최우선적으로 선택할 것이다.

Phil Green은 1997년 Genome Research에 이런 글을 기고했었다(링크).

Against a Whole-Genome Shotgun


Long read sequencing technology를 이용하여 플라스미드 라이브러리 제작 과정 없이 인간 유전체를 금방 읽어버리는 2020년, Phil Green이 이 글을 읽으면 어떤 생각이 들까? 아주 죄송스런 말이지만 요즘 쓰는 저속한 말로 평가하자면 '꼰대의 뻘글' 정도 취급을 당할지도 모르겠다. 웃자고 쓰는 말이니 이 글을 읽으시는 분은 불쾌하게 생각하지 마시길... 하지만 NGS 시대에도 Phil Green의 유산은 당당하게 남아있다. 지금도 쓰이는 Phred score라는 용어는 1시대 시퀀싱 시대의 basecaller인 phred라는 프로그램에서 온 것이고, phred를 만든 사람이 바로 Phil Green이니까. Phred는 Phil Green's (혹은 Phil's) read editor에서 온 것이다. 지금은 구글을 뒤지면 Phred가 무엇을 의미하는지를 묻고 답한 글이 쉽게 보이지만, 나는 이 정보를 Consed의 개발자 David Gordon에게 직접 이메일로 물어서 알아낸 것이다. Consed와 David Gordon은 내 블로그에 몇 차례 소개되었다. 이러다가 온라인에 '유전체 탑골공원'이라도 만들어서 이 분야의 원로들을 소개하는 것 아닌지 모르겠다.

2020년 1월 30일 목요일

[2020년도 43 5극관 싱글앰프 리모델링] 1. 기본 계획 수립 및 자료 정리

43 5극관이라고 적어 놓으니 이상하게 보일지도 모르겠다. 12AX7과 같이 진공관 형번이 제대로 자리잡기 이전에 개발된 것들은 41, 42, 43처럼 단순한 숫자로만 된 이름을 갖고 있었다. 43은 오디오 앰프에서 출력용으로 사용된 오래된 5극관(pentode)으로 주로 라디오 수신기에 쓰인 것으로 알고 있다. 43 극관이라고 쓰면 더욱 명확할 터인데, 국어에서는 아라비아 숫자를 직접 붙여서 한 단어로 쓰는 일이 워낙 많아서 대세를 따랐다.

2018년에 호기심을 채우기 위해 오래된 43을 구입하여 직접 싱글앰프 회로를 구성하여 듣다가 - 엄밀히 말하자면 인터넷에 떠도는 회로를 짜깁기한 것에 불과하지만(예를 들어 https://www.radiomuseum.org/tubes/tube_43.html에 기본 회로가 나온다) - 2020년 전면적인 개보수를 실시하기로 결심하였다. 개보수의 목표는 제대로 '섀시'를 만들자는 것이다. 그런데 창틀(흔히 삿슈라고도 부르는)과 차대(섀시)는 영단어 철자가 다르다는 것을 매우 최근에 알았다. 전자는 sash, 후자는 chassis. 두 단어 모두 불어에서 온 것인데, 정작 불어의 chassis는 창틀과 자동차 차대를 전부 포함한다나? 원, 이럴 수가!(나무위키) 간혹 앰프 케이스라는 말을 쓰기도 하는데, 이는 옳지 않다. 악기 케이스, 시계 케이스를 생각해 보자. 케이스란 것은 어떤 물건을 보관하거나 이동하기 위해 담는 통이다. 케이스에 넣은 상태로 쓰는 것이 아니라는 뜻이다. 앰프 인클로저(enclosure)가 더 합당한 듯.

섀시라고 하면 금속이 재질로 쓰인다는 느낌이 강하게 든다. 나만 그런가? 만약 나무판이나 플라스틱으로 앰프의 통을 만들면 이것도 섀시가 맞는가?

그런데 구글에서 sash를 검색하면 생각하지 못한 물건이 나온다(영문 위키피디아). 아, 나도 모르겠다.

앰프 리모델링의 본론으로 들어가겠다. 단지 '통'을 만들어 넣겠다는 것이 전부가 아니다. 전원부의 대대적인 교체가 있을 것이며, 이에 대해서는 기본적인 실험을 완료한 상태이다(이전 글 링크). SMPS + DC-DC booster의 기본 조합을 전원트랜스를 사용하는 전통적인 전원회로 + 리플 제거 기판으로 바꾸는 것이 골자이다. DC-DC booster가 망가지기도 했고, 부품통에서 자리만 차지하던 전원 트랜스포머 두 개를 사용해 버리려는 의도도 있었다. 이렇게 함으로써 이전 세팅에 비하여 조금 더 높은 B+전압 제공이 가능하다. 다음 그림은 지금까지 사용해 왔던 6N2P + 43 싱글 앰프의 회로도이다. 펜과 파워포인트로 직접 그린 소박하고 단순하기 짝이 없는 회로도이다. 이번 개보수에서는 전원부를 제외하면 바뀔 곳이 없다. 예전 제작기는 내 블로그에 '43번 오극관(43 power pentode) 싱글 앰프 프로젝트'라는 제목으로 1번(2018.9.26.)부터 18번(2019.1.8.)까지 이어진다. 물론 이 제목을 철저하게 지키지 않은 것도 있을 것이다. 작년, 그러니까 2019년에는 6LQ8 푸시풀 앰프를 만들면서 즐거운 시간을 보냈었다.

출처: 내 블로그(링크)

앰프 '통'은 나무판으로 만든 상자 위에 알루미늄판을 가공하여 부품을 얹는 것을 목표로 한다. 두께 10 mm의 나무판을 재료로 한 상자 반제품(옥션 미가데코 링크)이 있어서 이를 구입하여 조립한 뒤 적당히 마감을 하면 될 것이다. 알루미늄 상판은 도면을 그려서 가공을 의뢰하는 것(네이버 카페 사운드머신)과 직접 구멍을 뚫는 것 사이에서 고민을 하고 있다. 홀쏘를 이용하여 케익 틀에 직경 31 mm의 구멍을 세 개 뚫어본 경험으로는 이것이 얼마나 위험하고 어려운 일인지를 잘 안다!

드라이브단은 6N2P 하나를 쓴 대단히 단순한 회로를 페놀 만능기판 위에 꾸며서 사용하고 있다. 꼭 1년 전에 실험을 거쳐서 43 앰프의 드라이드단으로 채용하였었다.





이 기판에서 RCA 단자만 제거하여 그대로 사용할까? 그러려면 자리를 많이 차지한다. 아니면 9핀 소켓을 새로 구입하여 알루미늄판에 고정한 다음 직접 point-to-point 배선을 할까?

마지막으로 가장 중요한 변화는 출력 트랜스이다. 지금까지 써 온 것은 전원트랜스를 개조한 것이었다. DHT 사운드에서 Z코어(57 규격)를 사용한 5k 싱글 트랜스(링크)를 주문할 생각이다. 67코어는 너무 크고, 62코어는 제품 리스트에 없다. 나중에 다른 싱글 앰프를 만들때 사용할지도 모르니 조금 더 큰 코어로... 하는 욕심은 버리자. 만약 그럴 일이 생긴다면 내가 직접 만든 R코어 출력트랜스(힘겨운 제작 과정은 여기에)를 쓰고 말겠다.

그라운드 결선법에 대한 자료를 모아 보았다.

2020년 2월 24일 현황

상판 가공을 전문가에게 맡기기 위하여 LibreCAD를 열심히 공부하고 있다. 유튜브를 보니 직접 홀쏘를 사용하여 진공관 앰프용 상판에 구멍을 뚫는 동영상이 있길래 소개해 본다. 판이 돌아가지 않도록 고정하는 나무틀 아이디어가 매우 좋다. 동영상을 올리신 DS1MFC(유튜브 채널)상당히 수월하게 작업을 하신다!

DS1MFC [진공관앰프] 상판에 소켓구멍따기(홀커터 사용법)


2020년 1월 27일 월요일

2020년의 오디오 DIY 첫 실험 - 6N2P + 43 싱글 앰프의 전원부 개선

엄밀히 말하자먄 개선이 아니고 고장 수리에 가깝다. 작년에 다른 실험을 하다가 DC-DC 스텝업 컨버터를 망가뜨린 이후 대전 집에 그냥 팽개쳐 둔 상태인 것을 수리한 것에 지나지 않는다. 예전 모습 그대로 되돌린 것은 아니니 개선이라 볼 수도 있겠다.

원래 이 앰프의 B+전원은 직류12V(주변에 흔한 SMPS 어댑터)에 DC-DC 스텝업 컨버터를 연결한 것이었다. 43 오극관은 트랜스포머가 없는 라디오 수신기 등에 쓰이던 것이라 +150~160V 정도만 공급하면 된다. 물론 최대 출력은 2와트 정도로 낮은 편이다. 여기에 사용했던 스텝업 컨버터를 작년에 만든 푸시풀 앰프에 시험삼아 연결하여 출력전압을 조금씩 올리다가 완전히 망가뜨리고 만 것이다.

이 컨버터가 그렇게 마음에 들지는 않았었다. 매우 작고 경량이지만 약간의 험도 들리는 문제가 있었다. 완제품 보드로 파는 리플 필터를 달아서 테스트를 하기 전에 망가졌으니...

좀 다른 방식을 택하면 안될까? 작년 6월에 미리 세워 둔 구상(링크)을 이제 실천에 옮기기로 하였다. 용량이 다소 부족하여 울림이 있던 전원 트랜스, 그리고 실수로 구입한 단권 트랜스를 직렬로 연결하면 115V를 얻을 수 있다. 이를 일반적인 회로로 정류한 다음 리플 필터를 달아 보는 것이다.

생애 최초로 주문제작한 40W급 전원트랜스(원래 글 링크)

두 트랜스를 직렬로 연결하자.

실험은 결코 순탄하지 않았다. 입력 단자쪽 납땜이 덜렁거리다가 떨어진 것을 모르고 6N2P 드라이브단에 고장이 난 줄로만 생각했기 때문이다. 저항, 메탈 캐패시터, 그리고 진공관으로만 구성된 단순한 회로에 무슨 고장이 나겠는가. 중도에 포기하고 다 정리하여 넣어버렸다가 아쉬운 마음에 재도전하여 원인을 찾았다. 그리고 전원트랜스포머를 두 개 연결하는 실험도 성공적으로 마쳤다. 작년에 테스트를 해 본 일이 있지만 험이 너무 심해서 쓰기 힘들었었다. 그러나 리플 필터가 들어가면서 이 문제도 완벽히 해결되었다. 오늘의 교훈: 함부로 포기하지 말자!

2020년 설 연휴의 실험. 43 오극관의 히터용 DC 24V에 감압용 컨버터를 달아서 6.3V를 만들었다. 이것은 작년까지 사용하던 구성이다. 그런데 생각해보니 이번에 사용하기로 결정한 전원트랜스에 히터용 2차(AC 6.3V)가 있지 않은가. 부품을 하나 더 줄일 수 있다.

주워온 와인 상자를 이번에 활용해 보려 한다.

단권 트랜스는 1차 440-380-0V, 2차 220-110-0V 구성이라서 첫번째 트랜스의 2차(230V)를 어디에 연결하느냐에 따라 다른 전압을 얻을 수 있다(50% 혹은 57.9%). 나중에 진공관의 플레이트 전압을 실제로 측정해 본 뒤 전원트랜스의 어떤 탭 조합을 사용할지를 결정하겠다.

수리 작업을 끝내고 아내와 오후 내내 튜너를 연결하여 음악을 들었다. 전원 트랜스를 개조하여 만든 싱글 출력 트랜스는 그냥 그러려니 하고 들으면(라디오니까!) 그런대로 음질이 괜찮다.

나만의 섀시를 만드는 문제, 그리고 출력 트랜스를 개선하는 문제가 올해의 주요 과제이다. 출력 트랜스는 기성품 싱글 트랜스를 쓸지, 혹은 R코어를 마지막으로 생각하고(겨우 두번째인데!) 감을지 아직 결정하지 않았다.

2020년 1월 22일 수요일

오디오 자작 궁리 - 진공관 앰프용 출력 트랜스(OPT)를 한번 더 감아보자

오늘 인용하는 대부분의 자료는 제이앨범에서 가져온 것임을 미리 밝힌다.

앰프 자작에 들어가는 주요 부품 중에서 직접 만들 수 있는 것은 트랜스포머가 유일하다. 이것은 증폭의 핵심 소자인 진공관보다 더 비싸다. 기성품을 사든, 직접 수고스럽게 만들든. 2018년에는 J-50 코어를 사용했었고, 올해에는 이보다 약간 작은 KD33 코어를 사용할 계획이다.

출처: http://jalbum.com/ADM01/141

수동 권선기를 사용할 때 R 코어는 EI 코어에 비하여 감기가 수월하다. 그러나 원통 모양의 보빈을 직접 만들어야 한다는 것이 번거롭다. 직경 19 mm인 R 코어가 들어갈 수 있는, 그러나 지나치게 두껍지 않은 플라스틱 파이프를 잘라서 쓰면 금상첨화인데 주변에서 찾기가 어렵다. 두꺼운 종이(절연지 혹은 명함 등)를 잘라 둥글게 말아서 보빈을 만들어도 된다.

출처: http://jalbum.com/board_Wiyi60/62848

원통의 양 끝에는 감은 에나멜선이 풀려 나오지 않도록 바퀴 같은 것을 만들어 달아야 한다. 상세한 공작 요령은 여기에 잘 설명되어 있다. 제대로 설계한 보빈의 외형 치수는 다음과 같다.

출처: http://jalbum.co.kr/ADM01/1010

7.5K:8짜리 OPT를 만들려면 1차 1350T(AWG#30:0.25mm), 2차 44T(AWG#24:0.507mm를 두 겹으로 감음, 이를 bifilar winding이라 부른다), UL 40% (540T)로 감으면 된다. 나는 5K:8을 만들 생각이니 권선비는 25:1로 맞추면 된다. 그러면 1차 1350회, 2차 54회가 된다.

다음 사진은 내가 2018년에 만든 수동 권선기이다. 이번까지만 트랜스를 감은 다음 권선기는 해체할 생각이다. 실제로 사용하기에 매우 불편한 이 물건은 트랜스 감기의 경험용으로는 제몫을 다했다고 생각한다. 만약 세번째의 트랜스 감기를 하게 된다면, 그때에는 제대로 만들어진 수동 권선기를 구입하여 쓰는 것이 현명할 것이다.


이 물건을 사용한 기록은 여기를 참조하라.
하나의 트랜스포머를 만들려면 보빈 두 개에 동선을 감아야 한다. 한 조의 코일을 결선하는 요령은 여기를 참조한다.

유튜브에서 찾은 트랜스포머 코일을 감는 동영상을 보면 시작과 끝을 어떻게 처리하는지에 대한 아이디어를 얻을 수 있다.



시간이 걸리더라도 제대로 준비하여 세상에 하나밖에 없는 출력트랜스를 만들어 보자. 1차용 에나멜선, 절연테이프, 그리고 보빈을 만들 재료를 찾아보자.

논문 저자의 책임은 어디까지인가

황우석 및 조국 '사태'를 겪으면서 연구진실성에 대한 일반 대중의 이해 수준이 과거와는 비교할 수 없을 수준으로 올라갔다. 정당하지 못한 방법으로 만든 논문을 이용하여 실익을 취하는 일은 앞으로 점점 더 어려워질 것이다. 여기서 말하는 실익이라 함은 연구자로서 이름을 알리거나, 승진·채용 혹은 연구비 신청에서 업적으로 활용하는 것 또는 상급학교 진학을 위한 자료로 쓰이는 것을 말한다. 위조 또는 변조한 데이터를 이용하여 만든 연구 논문은 제3자가 이를 적발하거나 권위를 갖춘 기관에 의해 재현을 거쳐 위·변조가 있었음을 검증하는 것도 가능한, 비교적 이해하기 쉬운 연구 부정 행위이다. 종종 BRIC 사이트에서는 '매의 눈'을 가진 네티즌들이 논란이 되는 논문으로부터 날카롭게 위·변조된 그림을 찾아내고는 한다.

올바른 저자 표기를 판별하는 것은 그보다 조금 더 어렵다. 쉽게 말해서 정당하게 제 몫의 일을 하지 않고 논문에 저자로 무임승차를 한 것을 가려내는 일 말이다. 논문 자체를 과학적으로 조사하는 것만으로는 이를 알기가 대단히 어렵다. 물론 정황만으로 의심을 하기는 쉽다. '어라? 고등학생이 논문의 제1저자네? 소문에 의하면 교신저자가 아버지라며? 뭔가 수상하다!' 그러나 이를 입증하는 것은 매우 까다롭다. 각 저자의 연구 노트를 점검하여 실제로 어떤 일을 했는지 소상히 파악하거나, 연구 혹은 논문 작성 당시의 상황을 깊숙하게 아는 사람이 아니라면 문제를 제기하는 것도 쉽지 않고, 그에 따라서 잘잘못을 가려내는 것 역시 어렵다.

일고여덟명의 저자가 참여한 논문이 만들어지는 과정을 생각해 보자. 모든 저자가 수시로 한데 모여서 얼굴을 익히고, 연구와 논문 작성을 점검하며, 각 저자가 어떤 부분을 기여했는지를 만장일치로 확인하는 그런 절차를 거치는 것도 아니다. 한번도 직접 만난 일도 없는 사람들이 태평양을 사이에 두고 이메일을 주고받으면서 한 편의 논문을 만드는 일도 비일비재하다. 저자 그룹에 포함되는 순서라든가 업적 관리에서 가장 중요한 주저자(보통 제1저자와 교신저자)는 최종 투고본이 만들어지기 전까지 서로간에 자연스럽게 합의가 이루어진다. 이 과정에서 종종 정치적인 고려가 이루어지기도 한다. 너무 많은 공동 제1저자와 공동 교신저자가 남발되는 일도 적지 않으며, 이러한 현실은 썩 바람직하지는 않다. 그러나 대부분 그 합의는 암묵적인 것이지 합의서 양식을 돌려서 사인을 받거나 하지는 않는다.

어쩌다가 미성년 저자가 포함된 논문에 연루되어 곤욕을 치르고 있다. 나는 중간쯤에 위치한 정당한 공저자로서 연구 과정에 직접 참여하였고(그 누구의 손을 거치지 않고 내 손으로 시퀀싱 데이터를 분석하고 그림과 표를 만들었으며 논문의 본문을 작성함) 당시에는 미성년 저자가 있다는 사실을 알지 못하였다. 그런데 이제와서 내가 이 논문에 대해서 어떤 기여를 했는지를 소상히 적어내야만 했다. 그것도 한번이 아니라 족히 세 번은 소명 자료를 냈던 것 같다.

이 논문은 미성년 저자가 포함되어 있다고 하여 수준이 낮은 논문도 아니다. 미성년 저자와 특수 관계에 있는 저자(두 명의 교신저자 중 하나임)는 다른 기관 소속이다. 그런데 그 소속기관에서는 문제를 삼지 않기로 했음에도 불구하고 미성년자가 저자로 포함되는 과정에 아무런 영향을 미치지 않은(막지 못한?) 단순 공저자인 나는 정부연구기관 소속이라는 이유로 몇 차례에 걸쳐 소명 자료를 내야만 했다. 흠, 그것을 사전에 알고 막았어야 하는 것인가? 그 미성년 저자가 정말 연구에 참여를 했고 저자로서 합당한 위치에 있었음을 입증할 책임은 교신저자, 특히 특수 관계에 있는 교신저자라 생각한다. 그런데 지난번 조사에서는 내가 그 미성년 저자와 특수관계라는 것이다. 그 교신저자와 내가 아는 사이라서 그렇다는 것이다. 나는 그 미성년자가 누군지도 모르는데?

내가 생각하는 조사 시나리오는 이러하다. 조국 사태를 통해서 미성년 저자가 포함된 논문이 대학 입시에 부정하게 쓰일 수 있다는 것이 국가적 이슈로 부각되어 더 이상 덮어둘 수 없는 상태에 이르렀으니 각 부처에서는 이를 전수 조사하게 되었을 것이다. 조사 후 조치를 취했다는 보고를 남기는 것이 가장 중요하니까. 논문은 하나인데 책임을 질만한 저자가 대학 소속이면 교육부에서, 정부출연연구소 소속이라면 과학기술부(일반인에게는 생소한 NST라고도 불리는 국가과학기술연구회로 토스했을 것임)를 통해서 따로 조사를 하게 만들었을 것이다. 슬프게도 두 상급기관이 하나의 논문을 다루는 심각함이 다르다! 동일한 논문에 대해서 미성년 저자 포함에 가장 큰 책임이 있는 저자(대학 소속)는 교육부를 통해서 더 이상 문제를 삼지 않기로 한 반면, 단순 공저자인 나는 NST를 통해서 몇 번에 걸쳐 집요한 조사를 받는 것이다. 아, 정말 조사하시느라 대단히 수고가 많으십니다...

[연합뉴스] 수상한 미성년 저자 논문 22건...과기부 정밀검증 2019년 12월 9일 기사. 교육부는 뭐 하시나요?

나의 책임은 도대체 무엇일까? 논문의 최종 원고가 투고될때 모든 저자의 이름과 소속 기관을 꼼꼼히 훑어보고 왜 이런 사람이 석연치 않게 저자로 포함되어 있느냐고 따졌어야 하는가? 아니, 내가 넘겨받은 raw data가 진실한 것인지 혹은 아닌지를 따져야 하나? 불행하게도 모든 저자가 논문의 투고용 최종본을 점검할 기회를 가지는 것도 아니다. 내가 담당한 부분의 본문과 그림 혹은 표를 보내고, 투고 이후에 비로소 저널 웹사이트로부터 제출본을 다운로드하여 전체 원고를 보게 되는 일도 허다하다. 많은 저자가 참여하여 분업화가 이루어는 요즘 추세로는 이상한 일도 아니다. 공저자는 대개 자기가 작성한 부분과 이름, 소속, 그리고 연구비 사사가 제대로 표기되었는지 점검하기에 바쁘다. 내가 주저자가 아니라면 다른 저자에까지 신경을 쓸 겨를이 없는 것이다.

저널에 따라서는 다르겠지만, 투고 시점에 교신저자에게 '모든 저자는 최종 투고되는 원고의 내용에 동의하였음'을 확인을 받기도 한다. 넓게 본다면 저자 포함 여부, 순서 및 역할도 동의의 대상이 된다. 그러나 이러한 확인 절차는 보통 교신 저자 선에서 마우스 클릭으로 처리되고는 한다. 참여한, 아니 참여할 연구자의 서명을 개별적으로 받아서 제출하는 것은 정부 지원 연구 과제에 신청서를 낼 때 정도이다. 만약 다음에 공동 작업을 통해서 논문을 같이 쓰게 되면 문제가 불거지기 전에 미리 따져봐야 되겠다.

연구 논문의 Acknowledgment에 보통 표기하는 '과제 사사' 역시 연구 부정 행위의 잣대로 조사하면 웃지 못할 일이 많이 벌어질 것이다...

2020년 1월 21일 화요일

PuTTY가 잘 끊어지는 현상 해결하기 - Seconds between keepalives를 조정하라

Amazon EC2 인스턴스를 생성하여 이것저것 테스트를 하느라 즐거운 1월을 보내고 있다. AWSome Day 온라인 컨퍼런스에도 참석하고, 입문서(권영환 저 아마존 웹 서비스 AWS Discovery Book 예스24)도 한 권 구입하여 읽으면서 기초적인 사항을 습득해 나가고 있다. 나와 같이 리눅스를 오래 써 온 사람도 기본적인 개념을 잡는데 약간의 진입 장벽이 있었다. 일단 회사 법인카드를 통해서 요금을 처리하도록 만들어 놓으니 과금에 대한 부담을 느끼지 않고 업무에 적용할 수 있어서 좋다.

지난주에는 몇 번의 시행착오를 거쳐서 r5.4xlarge(memory optimized, 16 vCPUs/128 GiB memory) 타입의 인스턴스를 생성하여 sequencing data 분석용 프로그램을 설치하였다. 금주의 목표는 EC2 인스턴스에 SSH로 접속할 수 있는 새 사용자를 추가하는 것이다. ssh-keygen으로 새로운 키 페어를 만들고 처리하는 일이 핵심이다.

PuTTY를 사용하여 접속이 되게 만든 다음 잠깐 한눈을 팔고 돌아오니 "Server unexpectedly closed network connection" 메시지(PuTTY Fatal Error)와 함께 접속이 끊어진 것이 아닌가. 대부분의 리모트 서버 접속 작업에는 xshell을 사용하고 있는데, 이때에는 별 문제를 느끼지 못했다. PuTTY를 사용할 때 종종 이런 일이 벌어졌음을 기억한다.

구글에 물어보자.

[Putty] 사용 중 연결이 끊기는 현상 해결 방법

출처: https://webinformation.tistory.com/81

PuTTY Configuration -> Connection -> Seconds between keepalives (0 to turn off)를 기본값이 0으로 두지 말고 적절히 올리면 된다고 한다. 이 지침은 Amazon EC2 리눅스 인스턴스 사용 설명서 중 PuTTY를 사용하여 Windows에서 Linux 인스턴스에 연결에도 수록되어 있다.

간단하지만 대단히 중요한 기법을 오늘 알게 되었다. 너무 늦게 알게 된 것이 부끄럽기만 하다.


2020년 1월 15일 수요일

2019년의 오디오 DIY 계획

작년에 만든 6LQ8 PP 앰프가 워낙 잘 작동하고 있어서 완전히 새로운 앰프를 만들 욕심은 별로 없다.


전원 보드가 망가진 상태로 대전 집에 방치된 43 오극관 싱글 앰프를 수선하는 것이 가장 현실적인 목표라 할 수 있다. 인터넷을 뒤져보면 직류 고전압을 얻을 수 있는 컨버터가 예전보다는 조금 더 늘어났다. 아래 사진에서 A는 상용 교류전원을 넣어서 직류 250V를 출력하는 것이고(eBay), B와 C는 DC-DC 컨버터로서 출력 전압을 조정할 수 있다(AliExpress).


완제품 전원장치를 해외에서 구매할 수도 있고, 2018년에 자작한 SMPS를 써도 된다. 43 싱글 앰프는 직류 155V 정도가 필요하므로 고주파 트랜스포머의 2차에 연결된 배전압 정류장치를 브리지 정류장치로 바꾸면 얼추 해결될 것으로 믿는다.


설 명절이 지나야 추진을 할 수 있을 것이다. 그때쯤이면 딸아이의 대학입시도 결판이 난 상태가 되었을 것이고.

2020년 1월 13일 월요일

Windows 10으로 업그레이드하기

Windows 7이 2009년 출시된 이후 10년 동안의 제품 지원 기간을 거쳐 드디어 내일이면 종료가 된다.

[관련 글] 2020년 1월 14일에 Windows 7 지원 종료

집에서 쓰는 컴퓨터와 업무용 노트북에서는 이미 Windows 10을 써 왔지만 사무실 PC에서는 업그레이드를 계속해서 미루고 있었다. 제조사의 지원이 종료되는 마당에 더 이상 예전 버전의 운영체제를 고집할 수는 없어서 업데이트를 추진하였다. 전산실 관리자에게 부탁하여 설치파일 경로를 입수하여 다운로드를 하고, WinCDEmu를 통하여 가상 드라이브를 만든 다음 setup 프로그램을 실행하였다. 문서 파일은 전부 네트워크 드라이브에 있고, 사용자 영역을 그대로 두는 방식으로 업그레이드를 진행하였기에 설치 후 손을 볼 곳이 없었다.

업그레이드를 차일피일 미뤘던 것은 복잡한 보안 프로그램, VPN 프로그램 들이 꼬여서 설치 후 컴퓨터가 제대로 돌아가지 않을까 걱정을 했던 때문이었다. 내가 사용하는 컴퓨터는 원 소속 기관에서 공식적으로 반출을 해서 가져온 것이라서 오피스나 윈도우는 전부 그쪽의 라이센스 관리를 받고(인증을 받으려면 VPN으로 연결해야 함), 지금 일하는 파견 기관에서는 또 이쪽 사정에 따라서 DRM 소프트웨를 설치한 상태이다.

그런데 의외로 업그레이드 과정은 순탄하였다. 이전 상태의 환경이 그대로 보존이 되었던 것이다. 미련하게도 괜한 걱정을 하면서 업그레이드를 너무 오랫동안 미루어 온 셈이다.

아직 혼동스러운 것은 윈도우 계정의 개념이다. 윈도우 10이 설치된 컴퓨터 여러대를 한꺼번에 통제한다는 것이 익숙하지 않다. 그리고 노트북에 설치되었던 오피스 365가 업무용 PC에서도 보이게 되면서 원래 깔렸던 오피스(2013 버전)와 약간의 불편함이 생긴 것 같다. 정 문제가 된다면 PC의 오피스를 일단 삭제한 다음 원 소속기관에서 오피스 설치파일을 받아서 깐 다음 인증과정을 다시 거치면 된다. 오피스 365 구독시 사용한 이메일과 윈도우 계정에서 사용한 이메일이 같아야 하던가? 현재로는 같지 않다. 공부가 아직 많이 부족하다.

오피스 365를 사용할 수 있는 자격이 있는 동안은 그 기능을 충분히 활용하는 것이 좋을 것이다. 예를 들어 총 다섯 대의 기기에 설치할 수 있다거나, 원드라이브를 사용한다거나. 원드라이브를 쓰려면 윈도우 계정을 이용한다. 아이구 헷갈려라... 패스트푸드점의 자동주문기 앞에 선 시골뜨기 같은 기분이다.

2020년 1월 10일 금요일

리눅스에서 여러 개의 이미지 파일을 하나로 합치기

2020년에 접어든 이후 겨우 5일에 한번 정도의 글을 쓰고 있다. 매우 바쁘거나, 또는 마음에 여유가 없다는 뜻이 되겠다. 업무와 집안일에 파묻혀서 이렇게 건조한 나날을 보내서는 안되겠다.

수십 개의 시퀀싱 라이브러리에 대한 QC 관련 이미지 파일을 하나로 병합하고 싶다. 어떻게 하면 좋을까? 정답은 바로 ImageMagick이 갖고 있었다. 파워포인트에서 이미지 파일들을 늘어놓고 간격을 맞춘 다음 이를 묶어서 export하는 대단히 미련하고도 끔찍한 방법은 이제 버리도록 하자. ImageMagick의 강력한 기능을 이제 알게 되다니 그동안 겪은 어리석은 경험이 너무나 안타깝다.

$ convert +append image1.png image2.png out.png # 가로로 붙이기
$ convert -append image1.png image2.png out.png # 세로로 붙이기
$ convert +append -geometry 240x a.png b.png output.png # 크기 변환

이 방법으로는 이미지를 가로나 세로 한 줄로만 배열할 수 있다. 만약 타일 형태로 늘어놓고 싶다면? montage 명령을 쓰면 된다.

$ montage -mode concatenate -tile 3x8 *png output.png

-mode와 -tile 옵션을 주지 않으면 최종 이미지의 크기와 가로 및 세로로 늘어놓을 이미지의 수를 알아서 결정한다.

이것으로도 상당히 일손을 덜 수 있다. 그런데 처리할 원본 이미지는 LMT1-2.png, LMT1-10.png, LMT12-2.png와 같은 형태의 이름을 갖고 있다. 이를 *png 형태로 montage 명령의 인수로 공급하면 원하는 순서대로 정렬이 되지 않는다. sort -V 명령을 쓰면 이를 해결할 수 있다.

$ sort list 
LMT13-37
LMT15-1
LMT15-24
LMT15-4
LMT15-6
LMT16-16
LMT17-25
LMT17-31
LMT17-36
LMT17-40
LMT17-43
LMT17-62
LMT17-74
LMT17-75
LMT19-13
LMT19-27
LMT19-3
LMT19-32
LMT19-36
LMT19-37
LMT19-6
LMT2-17
LMT2-3
LMT7-21
$ sort -V list
LMT2-3
LMT2-17
LMT7-21
LMT13-37
LMT15-1
LMT15-4
LMT15-6
LMT15-24
LMT16-16
LMT17-25
LMT17-31
LMT17-36
LMT17-40
LMT17-43
LMT17-62
LMT17-74
LMT17-75
LMT19-3
LMT19-6
LMT19-13
LMT19-27
LMT19-32
LMT19-36
LMT19-37

힌트는 How do I sort mixed text & numbers (eg hostnames)?에서 얻었다. 기본 가정은 GNU coreutils ≥ 7.0이어야 한다는 점이다.

그러면 현 디렉토리에 있는 모든 png 파일을 이러한 방식으로 정렬한 다음, 이를 ImageMagick montage 명령어에 인수로 공급하려면 어떻게 하면 좋을까? 바로 작년 10월에 포스팅했었던 process substitution을 응용하면 된다.

$ montage -mode concatenate -tile 3x8 `sort -V <(ls *png)` output.png

난해한 것 같으나 대단히 아름답고도 간결하다. ls *png의 결과물을 sort -V에 공급하고, 그 출력물이 montage 명령어의 인수로 제공된다. `sort -V <(ls *png)`라 쓰지 않고 대신 <(sort -V <(ls *png))라고 해도 되지 않을까 생각했었지만 테스트를 해 보니 중첩해서 쓸 수는 없었다.

구글에서 'imagemagick covert 사용법'으로 검색을 하면 오래전인 2008년 12월 31일에 작성된 [개발자팁] 이미지매직(ImageMagick) 명령어 예제 및 설명이 나온다. 그만큼 많은 사람들이 이 글을 참조했었다는 이야기가 된다.

2020년 1월 5일 일요일

2020년 첫 포스팅, 그리고 독서 기록 <워커홀리즘>

2020년에 접어든지 벌써 5일째를 맞는다. 1818, 1919, 2020, 2121, 2222... 앞 두자리와 뒤 두자리의 숫자가 같은 해가 돌아오려면 약 100년의 주기가 필요하다. 살아있는 동안 한 세기가 바뀌는 연도를 맞거나, 앞뒤 숫자가 같은 연도를 맞는 행운을 모두가 누리는 것은 아니다. 2020년. 기억하기도 쉽고 뭔가 의미가 있을 것도 같은 연도이다. 1970년대에 초등학교를 다니면서 2000년은 참 먼 미래라고 생각했었다. 그런데 벌써 2020년이 되고 말았다!

새해를 맞는 감흥은 예전보다 많이 단순해졌다. TV를 통해 별 시덥지 않은 시상식 프로그램을 생방송으로 보면서도 보신각을 치는 현장 중계 순간을 놓치지 않으려 했던 열정도 많이 식었다. 연말 방송국 시상식에서는 왜 그렇게 공동 수상을 많이 하는지? 게다가 연말에 불거져나온 집안의 여러 소소한 사건들이 새해를 맞는 기분을 많이 가라앉게 하였다.

2019년의 가장 큰 변화는 근무지를 바꾼 것이었다. 직장을 바꾼 것이 아니라 파견 제도를 활용하여 민간 기업의 연구개발 및 기술혁신 지원을 위해 2년간 자리를 옮긴 것이다. 출연연과는 다른 일반 기업의 분위기를 익히고 나의 역량을 이용하여 기업에 기여한 흔적을 남기기 위해서 나름 열심히 일을 하고 있다. 그러한 와중에도 외부 생명정보학 기초 강의나 논문 마무리를 하는 것이 큰 도전이었다.

파견 근무지 숙소의 쓰레기 및 재활용품 배출장소에서는 종종 쓸만한 물건을 특템(?)하는 일이 생긴다. 가구, 의류, 가전제품, 책 등이 그러하다. 이러한 물건이 완전히 소각 또는 매립을 통해 완전히 폐기되거나 갈갈이 찢기어 다른 용도로 쓰일 물질로 환원되기 전에 생명을 연장하도록 만드는 것도 보람이 있는 일이다. 이번에는 읽을만한 책을 많이 구해왔다.


올해 첫 독서는 브라이언 로빈슨 지음/박정숙 옮김 '워커홀리즘(2009)'이었다. 일을 하는 것은 가족을 부양하고 자기계발 및 사회에 기여하기 위함이고 게으른 것은 악이므로, 주어진 할당량보다 더욱 넘치도록 일을 하는 것은 미덕이요, 이를 권장하고 독려하는 사회 분위기는 당연한 것으로 생각을 했었다. 그러나 일을 더 하기 위하여 거짓말을 하고 일거리를 몰래 싸들고 퇴근을 하게 된다면? 몰래 가져온 일이나 몰래 숨긴 술병이 동등한 것이라고 생각해 보자. 이러한 수준에 이른다면 일중독도 역시 병적인 상태인 것이다. 벅찬 일거리를 처리하면서 아드레날린이 분비되는 것을 즐기고 있다면('워커오르가즘'을 느끼기 위하여) 이는 분명히 중독 증세이다. 81쪽에 나온 '일중독의 실체'를 인용해 본다.

  • 일중독은 일중독자가 직장으로 가져오는 강박장애이다. 즉 일중독은 직장에서 발생하는 것이 아니다.
  • 일중독은 정신건강상 문제이며 미덕이 아니다. 그것은 직장에서 해결할 수 있는 문제보다 더 많은 문제를 야기한다.
  • 수퍼히어로의 얼굴은 일중독자가 성취와 업적을 이용하여 숨기고 있는 깊은 내면의 감정을 조절하지 못한 채 문제를 은폐한다.
  • 일중독자는 일을 위해 자유시간과 가족을 희생하는 것이 아니다. 그들은 자기만족을 위해 일을 한다.
  • 대부분의 일중독자들이 일을 즐긴다고 말하지만 일에서 얻는 만족은 일중독의 필요조건이 아니다.
  • 일중독자들은 그들이 스스로 야기한 스트레스로 분비되는 아드레날린에 화학적으로 중독되어 있다. 그들은 일로 느끼는 황홀감을 유지하기 위해 지속적인 위기를 갈망한다.
  • 일중독은 1차적 중독이 될 수도 있고 다른 중독과 섞인 2차적 중독이 될 수도 있다.
  • 직장에 고용된 상태에서만 일중독이 발생하는 것은 아니다. 일중독은 모든 강박적 활동에서 일어날 수 있다.
  • 일중독에서 벗어나 삶의 균형을 회복했을 때 업무의 질과 생산성은 향상되고 일중독자들은 직장에서 행복해지고 더욱 능률적으로 일할 수 있다.
  • 일중독을 줄이고 삶의 균형을 회복하기 위해서는 단순한 업무시간 축소 그 이상이 요구된다. 지금까지 무시해왔던 삶의 다른 부분들에 대한 관심뿐만 아니라 진지한 자기반성과 통찰이 필요하다.

주50시간 근무니 최저임금제 도입과 관련하여 사회 전체가 들썩이는 것을 보면 아직 우리 사회는 최저 수준의 생계를 위해 과도하게 일을 하지 않을 수 없는 사람이 많다는 것을 알 수 있다. 이러한 수준을 지나서 선진국 수준의 보편적인 복지가 이루어진 사회라면 이 책이 좀 더 널리 받아들여지리라는 점이 다소 아쉬었다. 지금 한국 사회의 모습을 보면 경제상황이 너무나 불투명하여 앞으로 근로 및 복지 여건이 더욱 나아지리라는 예상을 전혀 할 수가 없다는 것이 나무나 안타깝다.

일중독은 꼭 직장의 일하고만 연결된 것은 아니다. 다른 유형의 일중독 중에는 돌봄중독(careholic workaholic)이라는 것이 있다고 한다. 이는 타인에게 과도한 책임감을 느끼고 타인의 감정을 지나치게 이해하며 타인을 위해 노력해야 한다는 강박적인 욕구를 느끼는 것을 말한다. 대부분의 부모는 이렇지 않던가? 그리고 이러한 태도는 아무리 과다해도 전혀 문제가 없는 것이라고 생각해 오지 않았던가?

일과 놀이의 경계가 흐려지고, 각종 스마트 기기에 의해서 가정 또는 휴식의 순간에도 일이 침투해 들어오는 것도 일중독을 만연하게 만드는 주요 요인이 된다. 기독교·자본주의적 노동관, 그리고 첨단 기술이 우리를 점점 더 일에 중독되게 만드는 것이 아닐까? 노동은 신성하다는 생각에 더하여 우리의 노력을 통해 좀 더 '부강한(아, 이 70년대스러운 용어여!)'나라를 만들게 한 다음에야 개인의 여유와 행복을 찾자는 전체주의적인 발상이 우리를 더욱 일에 몰두하게 만들고 있다. 우리는 북한과 대치한 상태이고 - 때로는 경쟁국 전체가 우리의 적이 되기도 한다 - 이렇게 게으르게 살면 뒤처지고 '나라가 통째로 넘어간다'는 말을 얼마나 많이 들어왔던가?

다음의 표에서 정말 일을 잘 하는 사람(특히 리더의 미덕을 갖춘 사람)과 단순한 일중독자의 차이를 알아보자.



퇴근 무렵 가방을 챙기면서 인쇄한 논문 등 일할 거리를 늘 조금씩 담는 나의 모습도 어딘가 모르게 일중독자의 모습을 닮았다. 하지만 대부분의 경우 집에서 이를 꼼꼼하게 챙겨 읽지는 못한다. 파견기업의 업무용 이메일을 집에서 열어보지 않는 것도 지나친 일중독을 막기 위한 장치가 된다. 정확히 말하자면 서버 주소를 암기하고 있지 않아서 그런 것이지만!

인에이블러(enabler: 다른 사람을 돕고 있다고 생각하지만 실제로는 그들의 나쁜 행동의 개선을 막는 사람.36쪽에 처음 등장)에 대하여 좀 더 알아볼 필요가 있다는 생각과 함께 2020년 첫 포스팅을 마치고자 한다.