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 앰프는? 이미 이 세상 물건이 아니다.

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