2020년 2월 27일 목요일

(주)벨톤연구소의 진공관 소켓

국내 전자부품 제조업체인 (주)벨톤연구소에서 9핀 진공관 소켓을 몇 개 구입해 보았다. 진공관을 끼울 때 상당히 뻑뻑하게 맞는다는 말은 들었지만 설마 끼우다가 진공관 유리가 깨지기야 하겠는가? 품질은 좋고, 가격은 싸다.

왼쪽은 바텀 마운트, 왼쪽은 탑 마운트.


이것은 기판용 제품이다. 갖고 있는 6LQ8 싱글 앰프 보드에 꽂아 보았다.

43 오극관 싱글 앰프를 리모델링하기 위한 부품이 거의 다 모였다. 주말에는 LibreCAD로 설계한 상판을 종이에 인쇄하여 대전 집에 가지고 가서 트랜스포머의 고정용 구멍이 잘 맞는지 확인한 다음 다음주 중에 가공을 의뢰할 예정이다. 그리고 가능하다면 나무로 된 틀을 주말에 조립하고 오일 스테인까지 발라서 마무리를 하고 싶다. 오일 스테인은 오늘 주문했으니 내일 받을 수 있을 것이다.

알루미늄 상판의 가공을 전문가에게 맡기게 되니 직접 구멍을 뚫을 일이 없다. 나무틀에 스피커 연결용 바인딩 포스트를 고정할 구멍을 뚫는 것 정도가 전부이다.

필요한 모든 물품을 인터넷으로 편리하게 주문하면서도 물건을 전달하는 사람의 수고와 포장재 처리에 약간의 죄책감을 느꼈다. 이번주에만 총 다섯 차례였고 꽤 많은 쓰레기가 나왔다. 본격적인 납땜 작업에 들어가면 아마도 필요한 저항이나 캐패시터가 더 나올지도 모른다. 그러면 엘레파츠/디바이스마트/IC114에서 몰아서 구입하면 된다. 기왕이면 6LQ8 싱글 앰프 PCB에 올라갈 부품도 포함해서 구입하자.

앗차, 고무발도 사야 되는데...

2020년 2월 25일 화요일

[2020년도 43 5극관 싱글앰프 리모델링] 4. 부품이 들어오기 시작하다

2020년 2월 24일(어제)부터 온라인으로 부품 구입을 시작하였다. 구입한 물건이 입수되는 순서대로 기록을 남긴다.

전원 스위치(2월 25일)


250V 6A(AC) 정격의 스위치. 국산품이라서 가격은 조금 비싸다.

  • 구입처: 인트레이드(링크)
  • 품목명: 2P2단 원형 스위치(5020번), 3P2단 원형램프 스위치(5021번, 5021-1번)

평철 등(2월 26일)



  • 구입처: 아이베란다(링크)

나무 상자(2월 26일)




  • 구입처: 미가데코(링크)
  • 크기: 300 x 200 x 60 mm (나무 두께는 12 mm)

가조립 상태. 목재라서 최소한의 마감 처리가 필요한데 이에 대해서 별로 아는 바가 없다. 사포로 가볍게 문지른 다음 다이소에서 소량으로 판매한다는 수성 바니쉬나 두어번 발라 주면 될 것이다. 보강용 각재는 제품 구성에는 들어있지 않다. 일부러 따로 주문한 것이다(위에서 두번째 사진 참조).

진공관 소켓(2월 27일)


몇개 되지도 않는 부품을 주문하였는데 지나칠 정도로 꼼꼼하게 포장이 되었다. 내가 다 미안할 지경이다. 패널 탑마운트용과 바텀마운트용 각 2개, 그리고 PCB용을 2개 구입하였다.

벨톤 소켓의 품질은 매우 우수해 보인다.

이것은 퓨즈를 내부에 넣을 수 있는 AC 파워 소켓이다. 패널에 뚫어야 하는 구멍은 작지만 퓨즈가 내부에 들어가므로 길다!

  • 구입처: 벨톤연구소(링크)
  • 크기: 300 x 200 x 60 mm (나무 두께는 12 mm)

수용성 스테인(3월 1일)



  • 구입처: 본덱스코리아(링크)
  • 품목명: 743 레드우드 250 ml

투명 유광 바니쉬 등(3월 2일)





  • 다이소에서 구입. 수성 바니쉬 소용량(60 ml)와 도장할 때 쓸 스폰지.

고무발(3월 5일)




Fastq 파일로부터 read의 번호를 이용하여 일부분을 취하는 방법 - 또 Pierre Lindenbaum에게 빚을 지다

Fastq 파일로부터 2번, 4번, 100번째 read를 추려낸 subset을 만들고 싶다. 어떻게 하면 될까? 추출할 read의 이름이 목록으로 존재한다면 BBMap package의 filterbyname.sh을 쓰면 된다. SEQanswers의 소개 페이지에서 Filterbyname.sh에 대한 설명을 찾아보라. JGI의 프로그램 소개에서는 오히려 이 기능을 찾기가 어렵다.

잠깐, BBMap인가 혹은 BBTools인가? 나도 헷갈린다.

추출해야 할 read가 1로부터 시작하는 번호의 목록으로 주어진다면 다른 방법을 써야 한다. PhyloSift에서는 시퀀싱 리드로부터 marker gene profile에 붙는 일부분만을 떼어내서 quality가 제거된 fasta 파일만을 제공한다. 나는 원본 파일로부터 fastq read의 부분집합을 떼어내고 싶었다. PhyloSift 결과물에서는 원래의 read ID가 사라지고 일련번호가 붙는다.

스크립트를 새로 짜려고 생각했다가 '바퀴를 다시 발명하지 말라'는 금언을 떠올렸다. 누군가 멋진 방법을 이미 구현해 놓았을 것이 뻔하기 때문이다. 약간의 검색 끝에 또다시 Biostars에서 Pierre Lindenbaum의 아주 짧은 스크립트를 발견하였다. 리눅스의 기본 유틸리티를 기가 막히게 조합한 것이다. 약 세 달밖에 되지 않은 신선한(?) 질문과 대답이었다.

Question: Subset Fastq file from list of read numbers

스크립트는 매우 간단하다. 사실상 one-liner이다.

$ join -t $'\t' -1 1 -2 1 \
   <(gunzip -c input.fq.gz | paste - - - - | awk '{printf("%d\t%s\n",NR,$0);}' | sort -T . -t $'\t' -k1,1 ) \
   <(sort -T . numbers.txt) | \
sort -t $'\t' -k1,1n |\
cut -f 2- |\
tr "\t" "\n" > subset.fastq

이것을 그대로 복사한 다음 input.fq와 numbers.txt 및 subset.fastq를 사용자가 원하는대로 고쳐서 명령행에 붙여넣고 엔터를 치면 그대로 실행이 된다. 단, 스크립트 파일에 내용을 복사해 넣은 뒤 실행하면 안된다. 아마도 process substitution의 복잡한 사정 때문에 그러한 것으로 보인다. join의 두 인수에 해당하는 process substitution을 임시 파일로 대체하도록 스크립트를 만들어서 파일로 저장한 다음, 이를 실행하면 잘 돌아감을 확인하였고 실무에도 아주 유용하게 사용하였다. Thanks, Pierre!

paste와 awk의 신비한 결합에 대해서는 아무리 공부해도 부족하지가 않다. join 명령어도 마찬가지이다. 샘플 파일을 만든 뒤 파이프 기호('|')를 제거한 다음 어떤 출력물이 나오는지를 살펴본다면, 이 명령행이 어떻게 돌아가는지를 알게 될 것이다. Fastq 파일을 분해하여 한 read에 해당하는 네 줄을 한 줄로 표현하고(탭으로 구분), 여기에 다시 숫자를 붙이고, 숫자를 기준으로 정렬하고, 그리고 번호를 참조하여 서로 매칭이 되는 것을 join 명령어로 뽑아내고, 다시 new line 문자를 넣어서 fastq 파일 형태로 환원하고... 정말로 배울 것이 그득한 명령행이다. 오늘도 이렇게 Pierre Lindenbaum에게 한 수를 배웠다. 어쩌면 그는 내 블로그에서 가장 많이 언급하는 인물이 될지도 모르겠다.

awk를 이용한 join, 그리고 join 명령어(join lines of two files on a common field) 자체의 활용은 정말 요긴하게 쓸 수 있는 것이라서 사용법을 잘 익혀두면 파이썬이나 펄로 직접 코딩을 하는 수고를 덜 수 있다.

특별히 이 활용례에서 눈여겨보아야 할 것은 탭문자를 명령어의 인수로 제대로 제시하기 위해 $'\t'라고 표시하는 트릭이다. 이에 대해서는 예전에 블로그에 기록한 일이 있다(Bash에서 탭을 표현하기 어려운 경우의 해결 방법).

2020년 2월 23일 일요일

LibreCAD로 앰프 상판 디자인하기

인터넷에서 문서 및 동영상으로 된 설명서를 보면서 더듬더듬 익힌 솜씨로 주말에 대전 집에 머무는 동안 43 오극관 앰프의 상판 디자인을 시작하였다. 보조선을 그어서 어느 정도는 원하는 치수의 원이나 선분을 그을 수는 있었는데 이들의 거리를 맞추는 요령은 아직 제대로 익히지를 못하였다. 'Snap'의 오묘함은 이루 말할 수가 없다(설명 페이지). 내가 이해하는 snapping이란 새로운 개체를 만들거나 이동할 때 drawing area의 어느 위치를 기준으로 할 것인지를 결정하는 행위이다. 기준점은 그리드일 수도 있고, 이미 그려져 있는 다른 개체일 수도 있다.

다음은 주말에 그렸던 초기 작업본의 화면이다. 너무나 불완전하여 일요일 밤에 전부 다시 그리기는 했지만.


트랜스포머는 도면이 없어서 직접 치수를 재서 얼추 도면을 그렸는데, 분당 숙소에 돌아와서 확인을 하니 치수를 적어놓은 수첩을 가져오지 않은데다가 도면상에서 측정한 치수와 내가 기억하는 숫자가 다르다! 이런, 낭패다. 아들에게 전화를 걸어서 침대 위에 펼처놓고 온 수첩을 사진으로 찍어서 보내라고 부탁을 하였다. 사진을 토대로 다시 도면을 그렸다. 이번에는 작업 속도도 현저히 빨라졌고 위치와 크기 결정도 제대로 되었다.

주말 작업이 완전히 무위로 돌아간 것은 아니다. 상판에 구멍을 뚫고 고정할 AC 소켓과 전원 스위치를 선정하고 가공을 위한 수치를 확인해 두었기 때문이다. 월요일부터는 필요한 나머지 부품을 주문하는 일만 남았다.

2020년 2월 21일 금요일

중학교의 제도(製圖) 교육

네이버 국어사전에서 '제도'라는 낱말의 뜻을 찾아보았다.

  1. 제도(制度): 관습이나 도덕, 법률 따위의 규범이나 사회 구조
  2. 제도(製圖): 기계, 건축물, 공작물 따위의 도면이나 도안을 그림
오늘 글감으로 삼은 것은 두번째의 제도이다. LibreCAD를 익히면서, 중학교 기술 시간에 제도를 배웠던 것이 생각이 났다. 남학생은 모두가 제도기를 구입하여 도면을 그리는 실습을 했었다. 중학생 수준에 맞는 제도기라는 것이 결코 고급 제품은 아니었지만 80년대 초반에 중학교를 다닌 나에게는 가장 비싸게 구입해야 했던 '문구'가 아니었을까 한다. 컴퍼스, 디바이더, 먹줄펜 등으로 구성된 도구 일습이 파랑색 완충재가 채워진 납작한 케이스 안에 단정하게 갖추어진... 로트링이라는 브랜드를 알게 된 것도 이때였다. 지금 구글에서 '제도기'를 검색하면 과거에 제도판이라 불리던 것에 다리와 각도 조절 장치가 달린 물건의 이미지가 나온다. 

제도기. 구글에서 이미지 찾기 어려웠다. 출처는 경남교수학습지원센터(링크).
'제1각법', '제2각법'이라는 용어도 어렴풋하게 기억이 난다. 컴퓨터로 모든 것을 디자인하고 심지어 3D 프린터로 물건을 찍어내는 시대가 되어서 더 이상 손으로 뭔가를 설계하는 일은 거의 하지 않게 되었고 중등 교육에서도 다루지 않게 되었을 것이다. 그래도 도면을 그리는 일의 기본에 대해서는 기억을 되새겨야 할 것 같다. 예를 들어서 선의 모양과 굵기는 어떻게 선택하는지 등등.

LibreCAD의 실습 자료를 보면 모든 용어가 영문으로 되어 있다. 각각에 해당하는 국문 용어도 있을 것 같은데 일부러 찾기가 어렵다. 예를 들어 construction line은 뭐라고 할 것인가?

어제는 트리밍의 신비한 기능을 공부하였다. 교차하는 곳을 기준으로 어떤 선을 자르는 것뿐만이 아니라 그리다 만 선을 연장하는 기능까지 있다는 것이 놀라웠다. 또한 적절한 'snap' 방법을 빨리 찾아서 적용하는 것이 초보자에게 가장 중요한 일이라고 생각한다.

나의 취미생활이 엉뚱한 길로 계속 흘러들어서 CAD까지 익히게 되었는지 알 수는 없지만 좀 더 빨리 이 세계에 입문하지 못한 것이 너무나 안타깝다. 

2020년 2월 20일 목요일

특정 문자를 구분자로 하는 문자열의 효과적인 조작 방법

일루미나 시퀀싱 장비에서 생산된 raw fastq file은 밑줄 문자('_', underscore)를 구분자로 하여 몇 개의 필드가 연결된 이름이 붙는다. 여기에서 꼭 필요한 필드만을 취하여 보다 간결하고 읽기 쉬운 파일명으로 고치려면 어떻게 하면 좋을까? 다음의 간단한 사례를 보자.

$ VAR=1_2_3_4_5
$ echo $VAR
1_2_3_4_5
$ echo $(cut -d_ -f1,3,5 <<<$VAR)  #1번 방식
1_3_5
$ echo $(cut -d_ -f1,3,5 <(echo $VAR)) #2번 방식
1_3_5

1번이나 2번 방식 전부 결과는 같다. 2번 방식(process substitution)은 비교적 최근에 알게 되었다(링크). 이를 활용하면 반복문을 통해서 현재 디렉토리에 있는 fastq 파일의 이름을 일괄적으로 바꿀 수 있다. 다음은 실제 사례이다. 밑줄 문자를 경계로 하여 첫번째 필드와 네번째 필드(R1 or R2)만이 최종 파일 이름에 남는다.

$ ls *fastq.gz | while read f
> do
> mv $f $(cut -d_ -f1,4 <<<$f | sed 's/_R/_/').fastq.gz
> done

그러면 이를 조금 더 응용해 보자. 여러 미생물의 시퀀싱 샘플에 대하여 SPAdes 조립을 실시하여 현 위치에 각 샘플에 대한 spades 결과 디렉토리를 여러 개 갖고 있다고 가정하자. 각각의 하위에는 scaffolds.fasta라는 동일한 이름의 결과 파일이 존재한다. 후속 분석을 위하여 이를 꺼내어 한데 모으되, 파일 명에 샘플 이름이 반영되게 바꾸고 싶다면 어떻게 하면 좋을까? 어쩌면 예전에 블로그에 이미 그 해결 방안을 작성해 주었을지도 모른다. 중복이 될지도 모르겠지만 지금 작성하는 해결법이 더 '성숙한 방법'이라고 믿고 싶다.

원본 파일의 일반 명칭이 spades_sample1/scaffolds.fasta라고 가정하자. 이를 현 디렉토리에 spades_sample1_scaffolds.fasta라고 이름을 바꾸어 복사하려면 다음 스크립트를 활용하라. SPAdes 결과 디렉토리에는 k-mer의 크기를 달리하여 조립한 서브 디렉토리가 하위에 공존하므로, find를 통한 검색의 깊이(-mindepth 및 -maxdepth 옵션으로 설정)를 잘 조정해야 한다.

$ find spades_* -maxdepth 1 -name scaffolds.fasta | while read f
> do
> cp $f $(sed 's/\//_/' <<<$f)
> done

실용에 문제가 없는 스크립트이다. 좀더 복잡한 규칙으로 파일 명칭을 바꾸려면 do 블록 내 cp 명령어의 두번째 인수에 해당하는 명령어를 적절히 고치면 된다. tr, sed 등 알고 있는 명령어를 조합하고 몇 개의 pipe 처리를 해도 된다.

2020년 2월 18일 화요일

LibreCAD 최초 작품

LibreCAD 튜토리얼을 보면서 A4 용지 템플레이트를 만들어 보았다. 오늘의 실습에서는 활용하지 않았지만 보조선을 그은 다음 snap 기능을 이용하여 텍스트를 중앙에 위치시키는 기법에 감동하였다! 사각형을 그리기 위하여 머릿속으로 2차원 좌표를 빨리 생각해 내는 일을 반복하다 보면 치매 예방에 좋을 것 같다.

A4 용지의 실제 크기(297 x 210 mm)보다 10 mm 작게 그릴 영역을 선정한 뒤 왼쪽 아래 꼭지점을 원점(0,0) 위치에 놓았다. 그리고 왼쪽과 아래의 기준선 바깥방향으로 2 mm 여백을 두고 선을 더 그었다. PDF로 내보내기를 하여 Adobe Acrobat Reader로 확인해 보았다. 그림 영역이 종이의 정중앙에 놓일 것을 기대하였는데 LibreCAD의 원점은 문자 그대로 종이의 물리적 한계에 딱 맞는다. 원래 이렇게들 하는 것인지, 혹은 LibreCAD 안에서 다시 조정을 해야 하는지 잘 모르겠다.


조금만 더 연습을 한다면 진공관 앰프 상판 가공을 맡기기 위한 도면은 충분히 그릴 수 있을 것 같다. Command box를 적극 활용하고 snap 기능을 잘 이해하는 것이 중요하다. 이틀 전까지는 도무지 감이 잡히지 않았던 것을 생각하면 큰 발전을 이루었다!

2020년 2월 25일 업데이트


지금까지 혼자 익힌 LibreCAD의 기능을 총동원하여 전원 스위치를 고정할 구멍의 세부를 그려 보았다. 스위치의 바깥쪽에 튀어나온 돌기가 상판에 잘 들어가도록 구멍의 한 귀퉁이에 턱(?)을 만든 것이 오늘 수정한 도면의 핵심이다.

마젠타색 기준선은 construction layer에서 그리는 것이 더욱 바람직할 것이다. Construction layer에서 그린 선은 기본적으로 길이가 제한되지 않고, 프린트 화면에서는 보이지 않는다고 한다.

2020년 2월 16일 일요일

[2020년도 43 5극관 싱글앰프 리모델링] 3. 섀시 설계

도면은 설계자와 제작자(가공자?)를 연결하는 언어에 해당한다. 아이디어를 손으로 그린 스케치가 아니라 정확한 도면으로 만들어 낼 줄 아는 능력은 메이커 시대를 맞이하여 '있으면 좋은 것'이 아니라 필수라고 해도 과언이 아닐 것이다. 도면이란, 음악에서 악보와 같은 것이다. LibreCAD를 수년 전에 받아서 설치를 해 놓고도 진도를 나가지 못하고 있으니 한심할 뿐이다. LibreCAD 위키 사이트튜토리얼을 참조하여 끈기있게 따라가 보는 노력을 들여야 되겠다. 튜토리얼 페이지에 소갠된 Johnny Heikell의 "LibreCAD for Real Dummies"(97쪽)이 학습하기에 좋은 자료라고 여겨진다. 유튜브에 소개된 동영상 튜토리얼도 괜찮다. 아마도 작년에 내가 처음으로 인쇄하여 앞부분을 조금 읽었던 자료는 Jasleen Kaur의 "Quick Start Guide to LibreCAD"(29쪽)가 아니었었나 한다. 인쇄를 해 놓은 것이 어디로 갔는지 모르겠다.

모든 가공 업체에서는 AutoCAD의 기본 형식인 DWG 파일로 주문을 받는다. LibreCAD는 DWG 파일을 읽을 수는 있지만 이 형식으로 출력을 하지는 못한다. LibreCAD의 결과물을 PDF로 출력한 뒤 다른 서비스(웹사이트)를 이용하여 DWG로 바꿀 수 있다는 글은 간혹 보이는데, 실제로 얼마나 잘 돌아가는지는 모르겠다. 2D 도면이라면 별 문제가 없을 것이라는 희망을 가지고 곧 LibreCAD를 공부해 보도록 하겠다. 진공관 앰프 상판 가공용 도면 정도는 LibreCAD를 며칠 배우지 않아도 가능할 것만 같은데 너무 쉽게 생각하는 것은 아닌지 모르겠다.

올해 계획하고 있는 43 오극관 싱글앰프 리모델링에서는 나무로 뚜껑이 없는 상자 모양의 틀을 만들고 두께 2 mm 알루미늄 상판을 가공하여 부품을 얹을 생각이다. 나무 틀은 다음과 같이 반제품으로 파는 것을 사용하려 한다. 미가데코라는 곳에서 판매하는 300 x 200mm짜리 반제품 수납함이 적당해 보인다. 재질은 소나무이고 두께는 12 mm로 알고 있다. 마감은 동봉된 사포로 문지르는 것까지만 할까? 너무 무성의하니 바니쉬라도 몇 번 칠할까? 그게 낫겠다.



일반적으로 알루미늄 상판은 나무틀보다 조금 작게 만들어서 턱이 지게 가공한 틀 위의 안쪽에 고정하는 방식을 취한다. 백문이 불여일견이니 실제 사례를 보자. 상판이 돌출되지 안아서 보기에 좋다.

출처: 소리전자 판매장터 게시판(링크)

하지만 나의 경우는 기성품 상자를 사용하는 데다가 나무의 두께가 두껍지 않아서 그런 멋을 부리기가 곤란하다. 따라서 나무틀의 외곽 치수와 같은 상판을 쓰려고 한다. 다음은 파워포인트로 대충 그린 스케치이다. 파워 소켓을 포함한 모든 부품을 상판에 고정하게 만들지, 혹은 일부 입출력 단자는 나무틀(옆면)에 고정할지를 놓고 한참을 고민하였다. 어제 출력 트랜스가 배송되어서 구멍 위칭에 대한 수치는 얻었지만 전원 트랜스는 대전 집에 있어서 아직 확인을 하지 못하였다.

주황색 자작나무 각재는 나무틀의 아랫쪽에 길이 방향으로 약간 내부에 고정하여 아랫판을 고정할 지지대로 사용할 것이다.

스피커 출력선을 연결할 단자는 가구 DIY용 평철을 구입하여 구멍을 넓힌 뒤 여기에 고정한 다음, 나무틀 뒷편에 붙일 생각이다. 가장 오래 고민한 것은 입력용 RCA 단자의 위치이다. 상판에 고정하면 배선이 간단해지지만 보기에 별로 좋지 않다. 아래 그림에서는 스피커 연결 단자와 같은 평철에 고정하는 아이디어를 소개한 것이다. 스테인리스 스틸이 아니라서 가공에는 별로 어려움이 없을 것이다. 적당한 알루미늄판을 잘라서 구멍을 내고 표면처리까지 할 수 있다면 얼마나 좋을까? 이번의 가공 의뢰 목표는 상판까지만이다.



2020년 2월 14일 금요일

콤마로 구분된 파일 목록을 만들기

De novo assembly를 통하여 얻은 여러 결과 파일(contig 또는 scaffold)을 한번에 비교하는 도구로서 QUAST(오, 러시아의 기술이여!)나 BBMap의 statswrapper.sh를 종종 사용한다. 소련, 즉 소비에트 연방은 요즘 더 이상 존재하는 국가는 아니지만 그 당시에 만들어진 기술이 아직도 우리집 오디오의 부속으로서 힘을 발휘하고 있다.

구 소련의 전자공학 기술로 만들어진 오디오 신호 증폭용 초단관 6N2P(6Н2П). 출처는 내 블로그. 진공관을 켜 놓고 있으면, 정말로 내가 '전자(electron)'를 부려먹고 있다는 것을 느낄 수 있다. 따라서 진공관보다는 전자관 혹은 열전자관이라고 부르는 것이 더 정확하다. 진공 자체는 중요한 조건이지만 실제 일을 하는 것은 전자니까 말이다. 진공관 표면에 찍힌 OTK라는 표식은 군용관임을 의미하는데, 이걸 볼 때마다 자꾸 한국생명공학연구원 전임 원장님이신 오태광 박사님이 떠오른다^^
매뉴얼에 의하면 QUAST는 'contig1.fa contig2.fa contig3.fa'와 같이 비교할 조립 결과물을 공백으로 구분하여 인수로 주어야 하고, statswrapper.sh는 'in=contig1.fa,contig2.fa,contig3.fa'처럼 콤마로 구분하여 공급해야 한다. 이것 때문에 작년에 생명정보학 교육을 하면서 입력 파일 목록을 만드는 짧은 스크립트를 만드는 수고를 해야만 했다. 그런데 아주 최근, 두 프로그램을 실행하면서 그냥 *.fa라고만 인수를 제공하니 멀쩡하게 잘 돌아가는 것이 아닌가. 리눅스에서 돌아가는 모든 명령어가 와일드카드를 받아먹을 수 있는 것은 아니라서 아예 시도를 해 볼 생각을 하지 않았다. 이것을 알고 난 뒤 얼마나 허탈하던지...

콤마로 구분된 파일 목록을 만들어서 인수로 제공해야 하는 다른 유틸리티도 많이 있다. 어떻게 하면 이를 좀 더 간편하게 할 수 있을까? ls -m이 바로 그런 기능을 수행한다. 하지만 콤마 뒤에 공백을 삽입하는 것이 문제이다. 이것은 없애면 된다(tr -d ' ' 이용). 그런데 여기까지만 하면 목록이 너무 길어서 한 줄을 넘어가는 경우 저절로 삽입된 줄바꿈이 드러난다. 이를 제거하기 위해 tr -d '\n'을 한번 더 실행하면 된다.

$ ls -m / | tr -d ' '
bin,boot,data,dev,etc,home,lib,lib64,lost+found,media,mnt,nas,opt,
proc,root,run,sbin,srv,sys,tmp,usr,var
$ ls -m / | tr -d ' ' | tr -d '\n'
bin,boot,data,dev,etc,home,lib,lib64,lost+found,media,mnt,nas,opt,proc,root,run,sbin,srv,sys,tmp,usr,var

대단히 간결하고도 아름답지 않은가? 실제 활용 사례를 하나 들어 보겠다. 나는 조금 전에 메타게놈 데이터를 strain 수준에서 분석하는 프로그램인 MIDAS를 실행하였다. 샘플은 13개였고, midas_sample1, midas_sample2...와 같이 개별적인 디렉토리에 결과가 수록되었다. 여기에서 만들어진 snps 분석 결과를 집계하기 위해 mergy_midas.py snps 명령을 실행하려고 한다. 전단계에서 생성한 13개의 MIDAS 결과 디렉토리를 콤마로 묶어서 인수로 제공해야 하니 다음과 같이 명령어을 내리면 된다.

앗차, 안 된다. 현 디렉토리에 여러 파일과 디렉토리가 섞인 경우 ls -m으로는 midas로 시작하는 디렉토리만을 묶을 수가 없다. ls -m midas_*는 원하는 결과가 나오지 않는다. 이렇게 하면 midas로 시작하는 디렉토리가 아니라 그 하위의 것들이 묶여서 나오는 결과를 빚는다. 내가 원하는 것은 이게 아니다.

다른 방법이 없을까? 구글을 뒤지니 'ls | grep midas | paste -s -d ',' -'가 원하는 결과를 만들어 주는 것 같았다. 좀 복잡하지만 다음의 명령이 잘 돌아가는 것을 확인하였다.

$ merge_midas.py snps outdir -i $(ls | grep midas | paste -s -d ',' -) -t list --site_depth 10

paste 명령에서 -s를 생략하면 목록이 한 줄에 출력되는 것이 아니라 저마다 new line을 달고 세로로 출력된다. paste 명령 맨 끝의 '-'는 없어도 별 상관은 없다. 오늘도 이렇게 하여 한 꺼풀의 무식함을 벗겨냈다.

2020년 2월 13일 목요일

출근길에 읽는 시집 - 칫솔 든 돈키호테

반갑고도 안타까운 시집 한 권을 선물로 받았다. 故 유석종 박사의 유작 시집 [칫솔 든 돈키호테]. 그가 2013년 문예지를 통하여 정식으로 등단한 시인이라는 것을 미처 알지 못했다. 이 시집은 그의 첫번째이자 마지막 시집이 되고 말았다.


오아시스가 아름다운 것은
곁을 지켜주는 야자수의 뿌리가
오아시스에 이어져 있어도
세상은 그 비밀을 모른다는 것 ('오아시스를 찾아서' 중에서)
기억을 더듬어 보니 그가 시인으로 등단했을 즈음부터 故 유석종 박사를 알게 된 셈이었다. 과제 기획이나 세미나 등의 인연으로 1년에 한 번 정도는 만났었다. 많은 시간을 함께 하지는 못했지만, 차분하고 맑은 정신을 가진 사람으로 기억한다. 할 일 많은 세상에 가족들만 남기고 먼저 떠나다니, 야속한 사람. 부디 편히 가시오.
얼굴에 묻은 꿈의 조각을 털어내며
중세의 기사가 성문을 열듯
화장실 문을 열고 거울 앞에 섰다
저기 나를 비웃는
그대의 송곳니를 처단하기 위해
장창을 들듯 칫솔을 들어 올리고
함락되지 않는 성을 향해 돌진이다
어제저녁 먹었던
어금니와 송곳니 사이
몇 시간째 버둥거리는 고기 한 점
창으로 찍어 세치 혀 위에 밀어냈다
오늘도 성은 함락되지 못하고
애꿎은 고기 한 점만
아등바등 세면대 위에서 태풍 같은
물줄기 속으로 사라진다
그리고 거울 저편
돈키호테의 옷을 벗고
도시의 빌딩 속으로 들어가는
그대의 뒷모습도
('칫솔 든 돈키호테' 전문)

2020년 2월 11일 화요일

2008년 강적 OB 공연 포스터

월요일에 둘째의 대학 정시 합격 소식을 들었고, 지난주 금요일 저녁에는 초등학교 6학년 때 동창들의 모임을 40년 만에 처음 참석하였었다(이렇게 써 놓고 보니 내 나이에 대한 강력한 증거가 드러나고 말았다). 1년 동안의 인연, 그리고 40년 동안의 단절.. 과연 이 1년 동안의 인연을 되살리는 일이 내 남은 인생에 얼마나 긍정적인 변화를 가져다 줄까? 아이의 대입과 관련된 스트레스와 동창회의 의미를 생각하면서 복잡한 감정이 뒤섞인 머릿속을 정리하고자 동창 모임 다음날, 아무런 준비 없이 차를 몰고 아내와 함께 무작정 춘천으로 향했다. 점심으로 막국수와 닭갈비를 먹고 의암호 스카이워크를 거닌 뒤 즉흥적으로 동해 바닷가로 가기로 했다. 낙산 해수욕장에서 끔찍하도록 거센 바닷바람을 맞고 휴대폰으로 설악산 초입에 있는 숙소를 구하여 1박을 하였다. 춘천 방문은 꼭 20년 만이었고, 아내는 40년도 훨씬 전에 들렀던 낙산사를 두번째로 방문하였다(나는 처음). 오랜 시간이 지났다는 느낌을 새삼스럽게 느끼면서 문득 과거의 기록을 찾고 싶어졌다. KAIST rock band "강적"의 졸업생 밴드 연주회의 기록을 더듬고 싶어졌다.

공연이 있었던 것은 2008년 늦가을이니 벌써 12년 전의 일이다. 학번 상으로 17-19년 차이가 나는 후배들과 모여서 급조한(?) 밴드의 이름은 "별안간밴드"였다. 강적 2기 멤버였던 나는 참가자 중에서 최고령이었다! 나는 1학년 때 키보드로 오디션을 보았지만 독학으로 피아노를 두드리는 정도로는 부족하였다. 지금은 한양대 교수로 있는 김 모 동문이 그 자리에 들어갔고, 나는 나중에 리드 기타 포지션에 들어가게 되었다. 멤버가 여러 사정으로 밴드를 탈퇴하는 것은 매우 흔한 일이었다. 지금으로 따지면 추가합격과 비슷한 꼴이었다.

다니는 직장이 모교와 바로 붙어있는 곳이라는 점은 나를 이 공연에 참석하게 만든 가장 큰 원인이었다. 구글을 뒤적거리다가 당시 공연 알림 게시글(2008 강적 OB 콘서트)이 있는 것을 발견하고 글이 없어질 것을 대비하여 포스터 파일을 다운로드하였다.



별안간밴드

2g 정해영/ 19b 이태호/ 19d 김지훈/ 20v 조수영/ 20k 김선영 / 21g 이경태

  1. 예감좋은날/ 럼블피쉬
  2. 도마뱀/ 시베리안허스키
  3. 바보같은미소/ 왁스

연주한 곡은 세 곡이다. 아들녀석이 6 mm 비디오로 녹화했던 동영상을 유투브에 올려 놓았는데 차마 부끄러워서 공개는 못하겠다. 나는 '예감좋은 날에'서는 건반을, 나머지 두 곡에서는 기타를 쳤었다. 구글 포토에 남아있던 공연 및 연습 사진을 공개하고 그 링크를 여기에 남긴다. 같이 연주를 한 후배들이 지금은 어떤 모습이 되었을지 궁금하다. 생각해 보니 내 블로그의 글 중에서 "강적"을 태그로 한 글은 이것이 최초이다. 그동안 내가 너무 무신경하지 않았었나 싶다.

강적 제7회 OB 공연 "별안간 밴드" 2008년 11월 1일





해매다 봄이 오면 신입생들 소개한다고 전화가 오고는 했었다. 이제는 내 큰아이도 대학을 졸업할 나이가 되었으니 나도 그만큼 나이를 많이 먹은 셈이고, "해영이 형~"을 찾는 강적 2학년 후배들의 전화는 더 이상 오지 않는다. 남는 것은 기록과 기억뿐이다.


2020년 2월 6일 목요일

스포츠 리터러시(sports literacy)

참고: 영어권에서는 복수가 아닌 단수를 써서 sport literacy라고 한다.
"과거 스포츠는 신체활동만 중시했다. 스포츠를 신체적으로 할 수 있다는 과거 개념을 넘어 스포츠를 알 수 있고, 느낄 수 있는 자질을 통틀어 스포츠 리터러시라고 정의한다. 스포츠 리터러시는 운동능, 운동지, 운동심으로 구성된다... 운동능은 기본적인 동작과 기술을 활용해 스스로 운동할 수 있는 재능과 자질이다. 운동지는 운동에 대한 지식을 이해하고 적용하는 인지적 능력과 지성적 자질이다. 운동심은 운동하는 사람이 가지는 다양한 심성적 태도나 마음의 자질을 의미한다." 
지난 2월 2일 스포츠경향에 실린 서울대 최의창 교수의 인터뷰 기사에서 발췌하였다. 기사 원문은 여기(서울대 최의창 교수 "영·유아  체육은 생애체육의 주춧돌...국가가 나서야")에 있다. 이 기사를 읽으니 체육 활동에 대해서는 평생 그늘로 남아 있었던 내 지난 인생이 더욱 아프게 다가왔다.

왜 나는 어려서 밖에 나가 땀흘려 뛰어노는 즐거움을 누리지 못하였을까? 인생을 살아오면서 왜 그런 선택을 했을까, 또는 다른 길을 갔더라면 더 나은 현재가 되지 않았을까하는 생각을 전혀 갖지 않을 수는 없다. 가령 남들처럼 학위를 마치고 외국으로 포스트닥 연수를 나가지 않은 일, 그리고 다소 경솔하게 택했던 첫 직장(삼개월이나 근무했었을까) 등. 물론 이런 선택을 한 것을 100% 후회하는 것은 아니며, 아직까지도 인생에서 그러한 선택을 한 것에 대한 긍정적인 의미를 찾기 위해 노력하고 있다. 그러나 그중에서도 가장 뼈아프게 후회가 되는 것은 바로 체육 활동에 전혀 관심을 갖지 않았다는 것이다. 지금 생각하면 이것은 전혀 옳은 선택이 아니었다.

어린 시절의 체육 수업 시간이란 그저 아이들에게 공 몇개를 나누어 주고 알아서 놀게 하는 것이었다. 운동 경기의 룰에 약하고 경쟁심이 부족했던 나는 어쩌다가 발야구 외야수라도 맡게 되면 그 시간이 정말 공포스러웠다. 내 앞에 떨어지는 공을 잡지 못했을 때의 비난이 너무나 두려웠기 때문이다. 잘 하는 아이 몇몇만이 돋보이는 체육시간은 나에겐 정글과 같은 곳이었다. 바로 얼마 전, 40년 만에 연락이 닿은 초등학교 동창생은 친구들과 축구하면서 운동장을 뛰어다닌 기억 밖에 없다고 하였지만, 나에게 운동장은 별로 기억하고 싶은 곳이 아니었다.

80년대가 되어 프로 스포츠가 시작되면서 체육이란 보는 스포츠, 엘리트 육성을 통해 국위선양을 위한 것, 또는 비즈니스라고만 여기는 부정적인 시각이 자리잡게 되었다. 형편없는 체력의 소유자로서 지금까지 살아오게 된 것이 바로 여기에 기인한다.

최의창 교수가 소개한 캐나다의 생애 체육 정책은 정말 놀라웠다. 스포츠를 모두가 해야 하는 기본적인 활동, 즉 인간이 갖추어야 할 기초 소양의 하나로 정의한 뒤 어릴 때부터 운동을 하면서 나이가 들수록 경쟁적으로 운동할 그룹과 즐기면서 할 그룹으로 나누게 된다. 그러다가 노년층이 되면 자연스럽게 즐기는 그룹으로 대부분 옮겨가게 된다는 것이다.



거창하게 운동 또는 체육이라고 하지 말고 '신체 활동'이라고 여기자. 신체 활동은 선택을 할 수 있는 일이 아니라 생존을 위해서 반드시 해야 하는, 다른 것으로 대체할 수 없는 일이라는 생각을 가져야 한다. 신문 기사 하나가 나의 지난 생애 전체를 반추하게 만들 줄은 꿈에도 몰랐다. 이제는 달라져야 한다. 그리고 지금 당장 바뀌지 않으면 소용이 없다.

최의창 교수가 2018년 출간한 책 [스포츠 리터러시]를 소개한 현직 체육 교사의 블로그를 소개한다(링크).

[2020년도 43 5극관 싱글앰프 리모델링] 2. 부품 구입 시작

5K:8 싱글 출력트랜스를 주문하였다. 제이앨범에서 공동으로 주문하는 형식을 따랐다. 아마도 일신전기에서 제작하는 것이 아닐까 한다.

출처: 제이앨범 밴드
제원은 66 Z코아, 양카바, 검정 도장, 1차전류가 150 mA 이고 2차 출력은 8 W까지 가능하다고 들었다. 43 오극관으로 만드는 앰프로서는 차고 넘친다. 양질의 부품을 구입해 놓으면 나중에 더 좋은, 혹은 더 높은 출력을 낼 수 있는 출력관으로 앰프를 만들 때 이용할 수 있다는 기대감을 갖게 된다. 그렇다면 이번에 개작을 추진하는 43 싱글 앰프는 한갓 거쳐가는 물건이란 말인가? 나는 43 앰프를 만들면서 여분의 진공관 1조를 마련해 놓았다. 진공관의 수명은 의외로 길어서, 초기 불량만 만나지 않으면 꽤 오랜 시간을 쓸 수 있다. 2014년 초에 장만한 PCL86 초삼결 앰프는 초기에 진공관 하나를 교체하고 나서 지금까지 잘 작동하고 있다. 교체용으로 필요할지도 모른다는 생각에 여분의 진공관을 10개 가까이 구입했다가 결국은 절반은 팔아버리곤 하는 미련한 짓을 반복할 수는 없는 노릇이다.

개작한 앰프에서 출력 트랜스포머를 다시 적출해서 쓴다는 것은 별 문제 없이 작동하는 상태의 앰프를 해체하겠다는 의미가 된다. 그런 가능성을 전부 감안하여 쉽게 해체가 가능한 - 다시 말해서 완성도가 떨어지는? - 작품을 만드는 것은 별로 바람직하지 않다.

이러저러한 가능성을 놓고 궁리를 하는 순간이 가장 즐겁다. 막상 제작에 들어가면 몸이 힘들다. 과정을 즐기는 것, 특히 뇌 이상의 도구를 쓸 필요가 없는 구상 과정이 가장 즐겁지 아니하던가?

이 글의 후반부에는 부품 구입과 관련한 정보를 추가하여 작성해 나갈 것이다.

국내 업체인 (주)벨톤연구소에서 진공관 소켓을 판매한다. 가격이 상당히 저렴하다. 43 오극관에 맞는 고전 6핀 소켓은 당연히 만들어지지 않지만...

2020년 2월 15일 업데이트

6LQ8 진공관 10개와 5K 싱글 출력트랜스가 도착하였다.




2020년 2월 5일 수요일

최초의 새벽 배송 이용

얼마 전 색소폰 마우스피스를 구입하면서 쿠팡의 로켓와우 멤버십을 가입하게 되었다. 매달 약간의 비용을 내면서 일부 품목에 대한 무료배송 혜택을 입을 수 있다는 조건에 대하여 한참을 고민하다가 멤버십 자격을 유지하기로 하고 바로 어제 첫 구매를 해 보았다. 출입이 제한된 오피스텔에서 어떻게 수령인의 잠을 깨우지 않고 새벽 배송이 이루어지는지 무척 궁금했었는데, 주문을 하는 과정에서 그 방법을 비로소 알 수 있었다.

"요즘 누가 마트에 가서 물건을 사요?"

남들이 편하게 자고 있을 시간에 신선식품을 문앞까지 가져다 준다니! 그 편리함의 이면에는 배송 노동자들의 고단함과, 포장재를 처리해야 하는 또 누군가의 한숨이 서려 있을 것이다. 아내의 증언에 의하면 엊그제는 쓰레기가 갑자기 너무 많이 나와서 처리가 어려우니 그날 하루는 쓰레기 배출을 하지 말아달라는 구내 방송을 들었다고 한다. 생활 쓰레기가 아니라 대부분 이렇게 배달받은 물건의 포장재임을 너무나 잘 알고 있다.

총각김치 2.5 kg을 배송하기 위해 커다란 종이 상자 하나와 아이스팩 두 개가 쓰였다. 이것은 고스란히 오피스텔 1층의 쓰레기 배출장소로 옮겨져서 산을 이룰 것이다. 내가 평소에 비판적으로 느껴왔던 일을 결국은 편리함에 굴복하여 실행에 옮겼다고 생각하니 마음이 씁쓸하였다.

기술은 편리함을 가져다 주지만 환경에도 큰 부담이 된다. 그리고 인공지능은 미래의 직업을 위협한다는 우려를 낳는 것도 사실이다. 그러나 이를 피할 수 있을까? 어제 경향신문에 실린 기사를 보자.

[녹아내리는 노동]자율차·드론 배달 연구에 내 세금이...나는 동의했는가 ④기술변화 거부할 수 없나

변화의 속도를 늦추거나 보다 인간적인 방향으로 바꿀 수 있다고 믿고 싶지만, 전문가들에 의하면 기술 발전에 따른 사회 변화는 결코 바뀔 수 없는 '상수'라고 한다. 기술은 분명히 사람들이 만들어내는 것인데, 그것 자체가 스스로 흘러가는 큰 흐름이 되어 우리의 생활과 생각까지 바꾸어야 한다는 것이 서글프다.