2018년 10월 12일 금요일

figshare에 데이터 파일을 올리고 공유하기

Elsevier의 학술지 Data in Brief에 소개된 어떤 유전체 서열 데이터셋의 파일을 받기 위해 URL을 확인하니 figshare였다. figshare는 (파워포인트) 문서 파일 정도를 올려서 공유하는 사이트가 아니었던가? 아, 그건 slideshare였던가? 그런지도 모르겠다.

웹사이트를 방문하니 Store, share, discover research라는 문구가 보였다. Elsevier와 협정을 맺고서 이 저널에 출판되는 논문에 부속되는 대용량 데이터에 한해서 업로드 및 공유가 가능한 것인지, 혹은 이 저널과 관계없이 누구나 회원 등록을 하면 데이터를 올릴 수 있는 것인지는 잘 모르겠다. 데이터 등록 요령 사이트를 방문해 보았다.

How to upload and publish my data

개인 공간에는 20 GB를, 공개하는 경우에는 용량에 제한이 없다고 한다. 한번에 올릴 수 있는 파일의 크기는 5 GB이다. 그러면 어떻게 수익을 창출하는지 매우 궁금하다. 혹시 이것 역시 공공 기관에서의 접속이 막혀있는 것은 아닌지 모르겠다. 구글 드라이브나 드롭박스가 그랬듯이 말이다. 백문이 불여일견이다. 회원 등록을 하고 웹 인터페이스에 논문 PDF 파일을 하나 드래그하여 넣었다. 나에게 저작권이 있는 것이 이나니 'Publish' 버튼을 클릭하지는 않았다.

잘 들어간다. 채워야 하는 메타데이터는 다음과 같다.


남들도 다 아는 것을 뒤늦게 발견한 것은 아닌지 모르겠다. 공공 목적이 큰 데이터라면 여기에 올리는 것도 좋을 것 같다는 생각이 들었다. 학술 목적이 아닌 것이면 또 어떠랴.

Publish or perish가 아니고 이제는 Share or perish의 시대가 되었는지도 모르겠다. 약간 냉소적으로 말한다면 공개는 곧 미덕이므로 '사생활도 없다'.

Awk를 이용한 간단한 텍스트 파일 조작

Awk는 개발자 세 사람 - Alfred Aho, Peter Weinberger 및 Brian Kerninghan - 이름의 머리글자를 따서 명명된 프로그래밍 언어이다. 이들은 전부 1940년대 초반에 출생하신 원로이다. 아마추어 무선을 하는 사람을 일컫는 ham (ham radio)역시 무선통신의 역사를 세운 세 사람의 이름인 Hertz, Armstrong, Marconi에서 왔다는 설도 있으나 이는 근거가 없다고 한다(Etymology of ham radio). 여담이지만 우리나라에서는 radio라 하면 공중파 방송을 듣는 라디오 수신기만을 생각하지만, 미국에서는 무선을 이용한 모든 활동을 뜻하는 것 같다. 무전기(휴대용 및 거치형 전부)를 two-way radio라고도 부른다고 하니 말이다.

우선 첫번째 AWK 사례를 설명해 보자. 왼쪽과 같이 의 조합으로 이루어진 단순한 텍스트 파일이 있다고 가정한다. 이를 오른쪽처럼 변환하려면 어떻게 하면 좋을까?


이때 awk의 associative array(예제 링크)가 쓰이게 된다. Associative array는 숫자가 아닌 것도 인덱스로 사용할 수 있는 배열을 의미한다. Perl에서 흔히 사용하는 hash와 매우 유사하다. 위에서 기술한 매우 간단한 과업을 수행하려면 다음의 명령어 한 줄이면 된다.
$ awk -F, '{a[$1] = a[$1] FS $2} END{for (i in a) print i a[i]}' file
-F,는 입력 파일의 field separator를 쉼표로 지정한다는 뜻이다. {}으로 둘러싼 AWK 명령어 내부에서는 FS가 같은 의미로 쓰였다.

다음으로는 약간 복잡한 응용 사례이다. Using Awk to join two files based on several columns를 참조하였다. 여러 컬럼으로 이루어진 두 개의 텍스트 파일 file_a.bed와 file_b.bed가 있다고 가정하자. 첫번째 파일의 컬럼 1-2와 두번째 파일의 컬럼 3-4가 동등한 종류의 내용을 담고 있다. 빨갛게 표시한 것은 값 자체가 같은 것이다. 컬럼을 구분하는 것은 공백이 아니고 탭문자이다.

$ cat file_a.bed
chr1 123 aa b c d
chr1 234 a b c d
chr1 345 aa b c d
chr1 456 a b c d
$ cat file_b.bed 
xxxx abcd chr1 123 aa c d e
yyyy defg chr1 345 aa e f g

이때 다음과 같이 두번째 파일에서 동일한 라인에 해당되는 결과를 끌어다가 첫번째 파일의 해당되는 라인에 출력하는 것이 목적이라고 하자. 아래 그림에서는 파랑색으로 표시하였다.

chr1 123 aa b c xxxx abcd
chr1 234 a b c
chr1 345 aa b c yyyy defg
chr1 456 a b c

다음과 같이 awk 명령어를 작성하면 된다.

$ awk 'NR==FNR{a[$3,$4,$5]=$1OFS$2;next}{$6=a[$1,$2,$3];print}' OFS='\t' file_b.bed file_a.bed

먼저 awk의 내장 변수에 대해서 이해를 넓힐 필요가 있다. NR는 현재 처리 중인 라인 번호를 의미한다. Awk가 여러 파일을 처리하는 경우 NR은 전체 파일에 대한 라인 번호를, FNR은 각 입력 파일에 대한 라인 번호를 의미한다. 다음을 실행해보면 감이 잡힐 것이다.

$ awk '{print FILENAME, NR, FNR}' file_a.bed file_b.bed
file_a.bed 1 1
file_a.bed 2 2
file_a.bed 3 3
file_a.bed 4 4
file_b.bed 5 1
file_b.bed 6 2

NR==FNR{}은 첫번째 인수로 주어진 파일(file_b.bed)에 대해서 {} 내의 명령을 실행하라는 뜻이다. next는 그 다음에 따라오는 {} 명령어 블록을 실행하지 말라는 뜻이다. 이것은 약간 어려운 개념이다. 그림으로 설명을 해 보겠다. 부디 내가 이해한 것이 옳기를 바란다.

numbers라는 파일은 각 라인에 1..10까지의 숫자를 수록하고 있다. 각 라인의 수와 홀수 또는 짝수줄 여부를 화면으로 프린트하려면 어떻게 하는지를 다음의 그림에 설명하였다. next가 왜 중요한지를 잘 보여준다.


그러면 다시 원래의 awk 문으로 돌아가자. 두번째 인수로 주어진 file_a.bed에 대해서는 NR==FNR이 FALSE가 된다. 따라서 두번째 {} 내부의 명령어를 수행하게 된다. 즉 file_a.bed를 읽어서 마지막 필드($6)를 associative array의 값으로 바꾸어서 프린트하게 된다.

어쩌면 if..else를 쓰는 것이 좀 더 명확할지도 모르겠다.

$ awk '{if(NR==FNR){a[$3,$4,$5]=$1OFS$2}else{$6=a[$1,$2,$3];print}}' OFS='\t' file_b.bed file_a.bed

첫번째 주어진 답을 다르게 표현하면 이렇게 된다. 오히려 이것도 이해하기 쉬운 해결책이다.

$ awk 'NR==FNR{a[$3,$4,$5]=$1OFS$2}NR!=FNR{$6=a[$1,$2,$3];print}' OFS='\t' file_b.bed file_a.bed

awk에서 다음을 잘 구별하는 노력이 필요하다.
  • 조건{...} {...} <= 조심해서 써야 한다!
  • 조건1{...} 조건2{...}
  • if문을 사용하는 것

2018년 10월 9일 화요일

43번 오극관(43 power pentode) 싱글 앰프 프로젝트 - [6] 최종 마무리

얼핏 보아서는 어제 찍어서 올린 사진과 별로 다르지 않다.


전원 트랜스와 정류회로 사이를 배선을 납땜으로 처리하였다. 오늘 아침까지는 악어클립 케이블이었다. 그리고 스피커 연결을 위한 바인딩 포스트를 아예 출력 트랜스 받침대에 고정해 버렸다. 출력 트랜스를 다른 앰프에도 연결하여 사용하기 쉽게 만들기 위한 사전 포석이다. 어수선한 배선들도 케이블 타이로 조여서 정리하였다. 전선을 깔끔하게 잘라내지 못하고 길게 유지하는 좋지 못한 버릇이 있다. 그러나 이렇게 프로토타입 형태로 만든 상황에서는 나무판에 고정한 부품을 잠시 떼어서 손을 볼 때 배선이 너무 짧으면 불편하다.


https://www.vivatubes.com/ 에서는 Super Silvertone을 포함한 브랜드의 43번 중고 5극관을 판매한다. 이베이 등에서도 이따금 눈에 뜨인다. 43번 오극관은 40번대 두자릿수 출력관 중에서 그렇게 고급 취급을 받지는 못하는 것 같다.

2018년 10월 8일 월요일

43번 오극관(43 power pentode) 싱글 앰프 프로젝트 - [6] 전원 스위치 장착

43번 오극관 싱글 앰프는 계속 변화의 길을 걷고 있다. 이번에는 전원 스위치를 달았다. 각재로 만든 R-core 출력 트랜스 받침대도 미처 설명을 하지 않았지만 개조를 하여 바닥 면적을 좁혔다. 이 시리즈물의 다섯번째 글(링크)의 사진을 보면 트랜스 받침대에 하얀 신발끈을 묶어 놓은 것이 보일 것이다. 톱질을 하여 길이를 줄인 뒤 목공용 접착제를 발라서 고정해 놓은 것이다.

아래의 사진은 어제까지의 작업 결과물이다. 약간 다른 각도에서 두 장의 사진을 촬영하였다.



왼쪽 끝의 전원 스위치 고정대는 'ㄱ'자형 알루미늄 판에 1t 포맥스판을 순간접착제로 붙인 것이다. 알루미늄판에 실톱으로 가공을 하다가 구멍을 너무 크게 뚫어버리는 바람에 이렇게 된 것이다. 포맥스는 가공성이 매우 좋으며 그 위에 글씨를 쓰거나 도색을 하기에 아주 좋지만 아무 처리를 하지 않으면 때가 잘 탄다.

램프형 파워 스위치(정식 명칭은 SPST illuminated rocker switch; SPST = single-pole, single-throw = 단극단투 스위치)를 달다가 실수를 하였다. 전원이 들어올 때 불이 켜지게 하려는 것이 원래 의도였으나 배선을 잘못하여 항상 불이 켜지는 것이 아닌가. 이에 대해서는 예전에 글을 작성해 둔 적이 있다(램프형 스위치의 올바른 결선법).


그런데 제품에 따라서는 핀 번호가 다르다. 다음을 보라. 위의 그림과 달리 가운데의 공통핀이 1번이다.

출처: https://www.fasett.info/spst-illuminated-rocker-switch-wiring-diagram/unusual-lastest-collection-lighted-rocker-switch-wiring-diagram/
따라서 배선을 하기 전에 꼭 확인을 하는 것이 현명하다.

아직 납땜을 하지 않고 악어클립으로 물어 놓은 곳이 있다. 두 개의 전원 트랜스 사이, 그리고 두번째 전원트랜스와 정류회로 사이이다. 첫번째 트랜스에서 나오는 13 V를 두번째 트랜스의 12 - 15 - 18 V에 취향껏 연결함으로써 B+ 전압을 선택하는 효과를 누릴 수 있기에 아직 어느 하나의 탭에 붙이지를 않은 것이다.

저전압(그래도 100 볼트를 넘는다)에서 작동하는 진공관 앰프가 매력이 있다!


FM 수신용 안테나 보수하기

발코니 난간에 현 상태로 FM 수신용 안테나가 설치된 것은 지금으로부터 꼭 3년 전이었다.

옥외용 FM 안테나 재설치(2015.9.6.)
FM 안테나 설치 상태 변경(2015.9.20.)

붐대(커튼용 봉을 자른 것)와 안테나를 고정하는데 케이블 타이를 몇 군데 사용하였었다. 이것이 햇볕에 장기간 노출되면서 하나씩 끊어지기 시작하였고, 급기야 안테나가 한쪽으로 기울었다. 다른 곳을 노끈으로 묶어 놓았기에 안테나가 추락할 염려는 없지만 보수 작업이 필요한 상태이다. 무엇보다도 케이블 타이를 대체할 다른 고정 장치가 필요하다. 그래서 택한 것은 바로 다음의 물건이다.


붐대와 안테나 암(arm; 도파기와 방사기 엘리먼트를 고정하는 중앙의 짧고 두꺼운 봉)이 이 부속에 의해서 전기적으로 접촉 상태에 있다는 것이 안테나의 성능에 영향을 미치게 될지는 잘 모르겠다. 안테나 엘리먼트가 발코니 난간 등 다른 금속성 물체에 닿지 않게 하나는 것은 안테나 설치의 상식이다. 이번 경우는 엘리먼트 자체가 아니므로 상관이 없지 않을까? 다른 기성품 안테나의 사진을 찾아보면 내가 사용한 부품에 해당하는 것에서 절연처리를 한 것은 보이지 않는다. 원래 이 물건은 대형 모니터 고정용 부속인데 엉뚱한 곳에서 최종 용처를 찾았다.

10월 초순의 햇살은 여전히 강렬하여 땀을 뻘뻘 흘리면서 설치 작업을 하였다. 아래 사진에서 붐대와 화분 설치대를 묶은 것은 운동화 끈이다. 합성수지로 만들어진 끈(케이블타이 포함)은 이러한 조건에서 사용하기에 적당하지 않다는 것을 알았기 때문이다. 물론 힘을 많이 받지 않는 곳에는 사용해도 괜찮다.

이 안테나는 우리집 기준으로 서쪽에 위치한 계룡산 송신소를 향하고 있다. 남쪽으로는 식장산 송신소가 위치한다. KBS Classic FM 청주(식장산)과 대전(계룡산) 방송을 전부 들을 수는 있는데 MBC FM(식장산)에 비하면 방송 수신의 질이 나쁘다.

새로 만든 진공관 앰프와 보수를 마친 안테나가 FM 방송 청취의 즐거움을 더한다.

2018년 10월 7일 일요일

43번 오극관(43 power pentode) 싱글 앰프 프로젝트 - [5] 발열과 험 문제 개선

나무판 위에 부품을 얼기설기 늘어놓아 만든 앰프는 계속 손길을 필요로한다. 케이스 안에 넣어버리면 귀찮다는 이유로 사소한 문제를 방치하고 싶을 것이다. 사실은 결코 사소한 문제가 아닐 수도 있다.

이번에 만든 43번 5극관은 꽤 좋은 소리를 내고 있다. 하지만 아직 완성의 단계는 아니다. 첫번째 문제는 히터 공급용 배전압 정류장치의 전류제한 저항에서 너무 열이 많이 난다는 것이다(아래에 보인 회로도에서 빨강 타원으로 둘러친 것). 5와트의 정격을 넘는 수준은 결코 아니나, 저항과 닿은 코팅 합판의 표면이 까맣게 탈 정도라면 방열 대책을 세워야 한다. 이 저항에 다이오드를 연결하는 리드선 역시 매우 뜨겁다. 저항에서 나는 열이 리드선을 타고 다이오드까지 가는 것 같았다.


재활용 부품을 이용하여 저항에 방열판을 달아주기로 하였다. PC용 파워서플라이에서 뜯어낸 방열판과 못쓰는 그래픽 카드의 마더보드 고정용 부속을 이용하였다. 직접 연결된 저항과 다이오드 사이를 끊은 다음 두꺼운 선재를 사이에 넣어서 연결하였다. 저항에서 발생한 열이 리드선을 타고 가지 말라는 의도였다. 시멘트 저항과 방열판 사이에 방열 시트를 삽입하여 잘 밀착하게 만든 다음 사무용 악어클립으로 고정하였다.



살다보니 저항에 방열판을 다는 일이 다 생긴다. 작동을 시키면서 발열 정도를 체크해 보았다. 방열판이 손을 댈 수는 있을 정도로 뜨거워진다. 방열 처리를 하기 전에는 거의 100도에 육박했을 것이다. 그런데 이렇게 한 이후에도 다이오드는 여전히 전과 같은 정도로 뜨겁다. 그렇다! 다이오드가 뜨거워진 것은 저항과 연결한 리드선을 타고 열이 전달되는 것이 아니라 다이오드 자체의 발열이었던 것이다. 1N400x 다이오드의 최대 작동 온도는 150도 가량이다. 이를 위협할 정도로 열이 나지는 않겠지만 신경을 늘 쓰는 것이 좋을 것이다.

다음은 험(hum)을 잡는 문제이다. 트랜스를 차폐하고, 회로를 금속제 섀시에 꽁꽁 가두고, 접지를 하고... 이런 대책들이 보통 요구된다. 나무판 위에 부품을 그대로 노출시켜서 만들면 온갖 잡음이 유입된다는 의견을 모르는바 아니지만, 합리적으로 잘 만들어진 앰프라면 충분히 극복 가능하다고 생각한다.

현재의 상태에서는 분명히 험이 들린다. 이는 볼륨 폿(프리앰프에서 조절)의 위치와는 무관하고, B 전압을 낮추면 줄어든다. 이를 어떻게 잡아야 하나? 해결책은 전원부에 RC 필터를 하나 더 추가하는 것이었다. 다음 회로도에서 빨강 점선 박스로 둘러싼 부분을 삽입하여 험을 사실상 제거하였다. 처음 설계할 때에는 이 필터를 사용하지 않았었다.


위의 그림에서 'Rectifier & filter'라고 표현된 파랑 상자는 PC의 파워서플라이 기판에서 잘래낸 것을 활용함을 의미한다. 이 회로의 출력부에 대용량의 전해 캐패시터가 이미 존재하므로 추가적인 캐패시터는 없어도 될 것이라고 생각했었다. 하지만 PC 파워서플라이에서는 입력 전압을 정류하여 반분한다. 다음 그림을 보면 빨강 원으로 표시한 곳에서 전선을 뽑아내어 진공관 B 전압용으로 쓰는 셈이다. 대용량의 캐패시터가 두 개 있지만 이들 각각은 출력 전압을 반분하는 곳에 걸쳐있다. 빨강색에 해당하는 곳을 직접 가로지르는 캐패시터는 없는 셈이다. 내가 삽입한 47 uF 캐패시터(100R 저항과 함께)가 정류후 남은 리플을 제거하는 효과가 있다고 생각하기로 했다. 대부분의 진공관 앰프용 전원회로가 이러한 형식을 따르고 있음을 물론이다.

그림 출처: https://www.pocketmagic.net/wp-content/uploads/2012/05/simple_smps_5.png

내가 만드는 진공관 앰프는 모두 이렇게 초크 코일이 없는 구조를 하고 있다. 그러나 음질에 특별한 문제가 느껴지지 않는다.

여기에 보인 RC 필터가 잡음 제거에 결정적인 역할을 하였다.



어제까지 끝낸 작업의 결과물이다. 오른쪽에 보이는 프리앰프도 나무판 위에 고정하였고, 남는 외가닥 인터케이블(노랑색 RCA 커넥터를 보라)을 잘라서 프리앰프를 연결하였다. 스피커를 연결하는 바인딩 포스트의 고정 방법도 바꾸었다.

하루 종일 소스를 연결하여 음질과 발열 상태 등을 점검하고 있다. 내 막귀로는 충분히 듣기 좋은 소리가 난다. 솔직히 말해서 다른 앰프와 무엇이 다른지를 잘 모르겠다. 6N1+6P1 싱글 앰프에 비하면 조금 더 부드러운 것 같기도 하다.

남은 일은 전원 스위치를 다는 일 정도이다. 이 앰프는 앞으로도 계속 실험의 대상이 될 것이므로 당분간은 섀시에 넣지는 않을 것이다. 순전히 호기심으로 시작된 프로젝트였지만 지금 생각해보니 뛰어들지 않았더라면 정말 후회했을 것이다.

2018년 10월 4일 목요일

43번 오극관(43 power pentode) 싱글 앰프 프로젝트 - [4] 조립 및 테스트

글 제목을 결정하기에 앞서서 약간의 고민을 하였다. '완성'이라고 할까, 아니면 '가조립'이라고 할까? 매우 간단한 5극관 전력증폭회로의 이해와 실습을 겸한 이번 프로젝트는 애초에 멋진 섀시를 꾸미는 것을 목표로 하지 않았었다. 따라서 현재의 상태로도 충분히 '완성'이라고 말해도 틀린 것은 아니다.

그러나 나무판 위에 대충 올려진 부품들을 보면 - 완벽한 소리를 들려주고 있다 하여도 - 언젠가는 싫증이 날지도 모르는 일이다. 그래서 앞으로 후속 작업이 있을 수도 있다는 여운을 남기기 위해 '조립'이라고만 하였다. 먼저 회로도를 소개한다. 오른쪽 위에 보인 5극관 전력증폭회로의 기본 모양은 Harry Lythall의 웹사이트("Valve basics")에서 빌려온 것이다.


전력증폭회로 앞에는 소위 초단 혹은 드라이브단에 해당하는 회로가 있어야 한다. 이번 프로젝트에서는 이미 내가 갖고있던 프리앰프를 쓰기로 했기에 이렇게 간단하게 앰프를 꾸미는 것으로 충분했다. 실제로 이 회로에 튜너를 직접 연결했더니 스피커(89 dB SPL/W/m)에서 미약하게 소리는 남을 확인하였다.

전원부를 미리 만들어 두었었기에 개천절 휴일 오전을 투자하여 조립을 마쳤다. 너무나 간단한 회로라서 오배선을 할 여지가 없었고 소리가 나오는 것을 확인하였다. 43번 5극관 두 개의 특성이 똑같지는 않아서 같은 고전압을 걸었지만 그리드와 플레이트에 배분되는 정도가 다르다. 그리드 전압은 대충 -13 ~ -15 V 수준이 나왔다. 플레이트 전압은 105 V 정도였다. 아마 출력은 1 와트 내외가 될 것이다.

저녁때에는 튜닝(이라는 표현을 쓰기에도 부끄럽지만...)을 하여 만족할만한 소리를 내게 만들었다. 오전 작업 때에는 스크린 그리드와 접지 사이에 아무런 캐패시터를 연결하지 않았더니 '웅~'하는 소리가 매우 심하게 나는 것이었다. 험(hum)인가? 아니면 발진인가? 고전압부의 정류 및 평활회로를 다른 것으로 바꾸어도 소용이 없었다. 초크 코일을 쓰지 않아서 그렇다고 생각하기는 싫었다. 제이앨범을 비롯한 다른 웹사이트를 방문한 기억을 되살려 스크린 그리드와 접지 사이에 47 uF 캐패시터를 삽입하였더니 이 잡음은 상당한 수준으로 줄어들어서 실제 음악감상에는 별 문제가 없을 수준으로 되었다. 아주 잘 만든 진공관 앰프의 배경 잡음과는 비교할 수 없겠지만, 취미 수준으로 만드는 앰프에서는 참을 수 있는 정도라고나 할까?



차마 보이기 부끄러운 배선 모습.



광활한(?) 합판을 이렇게 비능률적으로 사용하다니, 배선 모습을 보이기에는 너무나 부끄럽다. 데스크탑 앰프로 쓰기에는 너무나 크다. 물론 처음부터 그럴 생각은 별로 갖고 있지 않았다.

앞으로 어떤 일이 남았는가? 우선 전원 계통의 배선은 아직 악어 클립으로만 연결한 상태이므로 확실하게 납땜을 해야 한다. 필요하다면 전원 스위치(스파크 킬러를 넣으면 더욱 좋을 것이다)도 설치해야 한다. 그리고 프리앰프부를 이렇게 두지 않고 다른 실험을 할 수도 있다.

라디오에 널리 쓰이던 골동품 수준의 진공관을 사용하느라 히터 전압을 만들기 위해 전원부가 예상보다 복잡해졌다. 그러나 HV 자체가 ~120 V 수준으로 별로 높지 않아서 비교적 안전하게 사용 및 개조를 할 수 있다.

매우 즐거운 경험이었다. 기획부터 실행 완료까지 걸린 시간이 생각보다 길지 않았다. 연말까지는 더 이상 일을 벌이지 말아야 되겠다.