2019년 7월 28일 일요일

[독서 기록] 생각을 빼앗긴 세계 - 거대 테크 기업들은 어떻게 우리의 생각을 조종하는가


  • 원제: WORLD WITHOUT MIND: The Existential Threat of Big Tech
  • 저자: 프랭클린 포어(Franklin Fore)
  • 이승연, 박상현 옮김


구글 없는 삶이 가능할까? 오늘도 안드로이드가 탑재된 휴대전화를 쓰고, 인사동 나들이를 다닌 기록을 구글 포토로 공유하며, 심지어 이 글도 구글 블로거에서 쓰고 있지 않은가? 언젠가부터 우리의 삶은 완전히 데이터화되어 이러한 테크 기업을 통해 어디론가 팔려가고 있다. 약간의 편리함을 얻는 대신, 우리 삶의 기록 - 검색 흔적, 위치 정보, 쇼핑 정보 등등 - 이 제삼자에게 제공된다는 약관에 우리는 별 신경을 쓰지 않고 '동의함'을 클릭하였다. 모든 것은 공개되고 투명하게 쓰일 때 세상이 더욱 합리적으로 변하고 편리해질 것이라는 '선동'을 무감각하게 받아들이고 있지 않은가?

예를 들어 보자. 대부분의 사진을 휴대폰으로 찍게 되면서 나의 이동 기록은 고스란히 테크 기업의 저장소로 흘러들어갔다. 가끔 '컴퓨터답게' 리터칭한 사진, 수년 전 오늘 내가 여행한 곳, 과거와 지금의 내 모습 대조, 그리고 지난 주말의 행적을 엮어서 자동적으로 만든 친절한 앨범을 보며 감탄하면서 디지털화(혹은 데이터화)하지 않은 이전 사진은 마치 가치가 없는 것처럼 생각하는 경향이 생겨나기 시작했다. 검색이 안되는 기록은 기록으로서의 가치가 없는가? 나는 단 한번도 손으로 적은 기록이 무가치하다고 생각한 적이 없다. 테크 기업의 '친절한' 플랫폼을 이용하여 기록을 남기면 언제 어디서든 검색을 할 수 있으므로 나의 기억 능력은 그만큼 무뎌진다. 4차산업혁명을 선도한다는 기술인 AI는 기억을 보조하는 수준을 넘어서 판단과 창작의 주체였던 인간의 위치를 흔드는 시대가 되었다. 반면 손으로 적은 기록이나 종이책을 읽은 기억은 내 뇌의 신경회로 어딘가에 남아서 나중에 찾는 것이 그렇게 어렵지만도 않다.

프랭클린 포어의 책을 읽으면서 구글, 페이스북, 아마존 등 정보의 독점을 통해 이윤을 극대화하려는 거대 테크 기업의 폐해에 대해서 진지하게 생각해 보게 되었다. 한때 구글을 통해 내가 작성한 정보가 검색 가능하다는 사실이 놀랍고 신기하다고 생각한 적이 있었다. 그러나 요즘은 예전보다 번다하게 광고가 많이 따라붙는 구글 화면이 점점 불편하게 느껴지기 시작했다. 자신들이 제공한 체제 안에서 만들어진 정보를 가장 우선하여 보여주는 네이버보다는 훨씬 낫다고 생각했었지만(네이버는 요즘 많이 달라지기는 했을까?) 구글은 이제 확실히 돈을 벌기 위한 길로 가고 있다. '사악해지지 말자(Don't be evil)'는 구글 내부의 행동 강령 - 밖으로 알려지면서 하도 많이 비웃음을 사서 이제는 공식적으로 철회했다고 하지만 - 은 과거의 정신일 뿐이다. 구글이 휴대폰 단말기의 OS를 독점한 것은 돈을 벌어야 하는 기업의 측면에서는 이른 시기에 대단히 현명한 결정을 한 것이다. 개개인은 결국 데이터를 생산하여 구글로 고스란히 전송해 주는 충직한 센서(데이터 습득 장치)가 되고 만 것이 아니겠는가?

이 책에서는 아마존이 어떻게 해서 기존 출판 세계를 뒤흔들면서 자신들의 영향력을 행사하고 있는지도 적나라하게 보여주고 있다. 겉으로는 누구나 아마존이라는 플랫폼(예를 들어 전자책 킨들) 안에서 과거보다는 쉽게 책을 낼 수 있고 독자는 훨씬 적은 가격에 많은 전자책을 읽을 수 있다고 말하지만, 결국은 선인세 등 저작자에게 마땅히 돌아가야 하는 정당한 댓가를 주지 않으려는 속셈 아니겠는가? 이에 반하는 출판업자 혹은 작가의 책은 아마존 안에서 잘 팔리지 않게 만들어 버리면 결국은 여기에 굴복을 하지 않을 수 없다.

소비자는 과거보다 훨씬 적은 비용을 지불하거나 혹은 공짜로 이러한 혜택을 입게 되었다고 생각을 하지만, 결국은 공짜는 없다. 콘텐츠 생산자를 쥐어짜고, 소비자(센서?)의 프라이버시를 별 저항감 없이 넘겨준 결과인 것이다. 늘 크롬을 사용하고, 로그인을 한 상태에서 주소창에 검색어를 입력하는 것이 얼마나 많은 것을 구글에게 넘기는 것임을 우리는 알아야 한다.

이렇게 내 검색 흔적을 넘기는 것이 싫다면 다른 검색 엔진을 쓰는 것도 얼마든지 가능하다. 대안이 있다는 뜻이다.

구글 없이 온라인 검색하기

'덕덕고(DuckDuckGo)'라는 재미난 이름의 검색 엔진을 살펴보자. 이들이 주장하는 바는 이러하다.



  • 어떠한 개인 정보도 저장하지 않습니다.
  • 저희는 위치나 이용 기록 등을 추적해 광고를 보여주지 않습니다.
  • 사생활 보호 모드 사용 여부에 관계없이 절대로 사용자를 추적하지 않습니다.
이러한 모델로는 절대로 수익을 낼 수 없으니, 이들도 결국은 사용자의 정보를 팔아넘겨서 돈을 버는, 이른바 사악해지는 길로 접어들게 될 것인가? 이들을 지원하는 사용자가 계속 이어질 것으로 기대해 본다.

프랭클린 포어는 독점을 경계하고 종이책을 소중히 여기며 사색을 하는 시간을 갖자는 실천 방법을 제시하였다. '독점에 열렬히 반대하는 자상한 나의 아버지, 버트 포어에게 드립니다'라는 책머리의 헌정사에서 그러한 생각을 엿볼 수 있다. 페이스북이나 유튜브를 통해서만 세상을 바라본다면, 거대 테크 기업이 독점하는 채널에 의해서 적절히 취사선택된 정보를 수용함을 의미한다.

나의 소중한 권리와 정보를 지킬 수 있다면 약간의 불편을 감수하는 것은 가치 있는 일이라고 믿는다. 공짜·무료 무한 용량·편의성이라는 것에 현혹되지 말자. 어쩌면 구글의 블로그를 과감하게 중단하고, 내가 유료로 이용하는 호스팅 서버에 워드프레스를 설치하여 쓰는 것이 나을 수도 있다. 약간의 불편함을 조금 더 감수한다면 현재 깔아놓은 위키 엔진을 그대로 써도 된다. 구글 플랫폼을 벗어나게 된다면, 전세계적으로 가장 많은 사람들이 쓰는 검색 엔진에서 잘 드러나지 않게 될지도 모르고, 애드센스를 이용하여 언젠가는 발생할 기대 수익(아직 그 수준에 이르지 못했다!)도 접어야 한다. 

글을 쓰고 싶은 욕구, 이 글이 유익한 정보가 되어 세상의 도움이 되기를 바라는 마음, 그리고 이를 이용하면 나도 조금은 유명한 사람이 되고 돈도 벌 수 있다는 기대 심리. 이러한 욕구가 골고루 만족되는 조건은 찾기는 쉽지 않다. 거대 테크 기업들은 이러한 욕망의 틈새에서 용케도 돈을 벌 방법을 찾아낸다. 
어차피 이제 사생활이라는 것은 없는 세상 아닌가? 누구나 다 사진을 찍어서 여기저기 올리는데 저작권이나 초상권이 뭐 그렇게 중요한가?
이것은 정보를 손쉽게 얻기 위한 거대 테크 기업의 장난일 수도 있다. 올 하반기에는 '구글 없이 살아보기'의 가능성을 점쳐 보도록 하자.


2019년 7월 24일 수요일

cross_match를 이용한 sequence alignment의 score 이해하기

cross_match는 아주 고전적인 염기서열 정렬(alignment) 프로그램이다. 짧은 한 쌍의 염기서열을 정밀하게 비교할 때 이보다 좋은 방법은 없다고 생각한다. 사용하는 알고리즘은 word-nucleated banded Smith-Waterman comparison이다. 수 megabase가 넘어가는 (박테리아)유전체 수준의 정렬, 또는 수많은 염기서열 데이터베이스에서 원하는 서열 단편을 찾을 때에 적합한 프로그램은 따로 있다.

cross_match에서 쓰이는 score matrix는 다음과 같다. N이 아닌 동일 염기의 매치에는 1씩의 점수가 부여된다.

Score matrix (set by value of penalty: -2)
    A   C   G   T   N   X
A   1  -2  -2  -2   0  -3
C  -2   1  -2  -2   0  -3
G  -2  -2   1  -2   0  -3
T  -2  -2  -2   1   0  -3
N   0   0   0   0   0   0
X  -3  -3  -3  -3   0  -3

프라이머 서열로 쓰기에 적합한 짧은 염기서열의 매치를 찾기 위해서 cross_match를 몇 차례 실행하고 있었다. mismatch가 전혀 없는 100 bp 길이의 alignment라면 당연히 score가 100이 될 것이라고 생각했는데 결과 파일을 보니 점수는 이보다 낮았다. 왜 그럴까? cross_match 문서를 찾아보았다.

점수가 100% identical match에 대해서 alignment length보다 짧은 이유는 기본 조건에서는 complexity-adjusted score가 쓰이기 때문이었다. 염기 조성에서 편이(bias)가 존재하는 경우 alignment score는 더 낮게 조정된다는 것이다. 매우 합당한 정책이다. 만약 조정을 하지 않은 score로 표현하고 싶다면 -raw 옵션을 주면 된다. 약 20년 전에 phred/phrap/consed의 라이센스를 받아 Sanger sequencing 결과물의 de novo assembly에 처음 쓰기 시작하면서 지금까지 별로 신경을 쓰지 않던 것을 NGS 시대에 다시 들춰보려니 감회가 새롭다. Sequencing chemistry는 두어 서대 진보하였지만, 염기서열을 커맨드 라인에서 조물락거리는 것은 그때나 지금이나 별로 다르지 않다.

Banded search의 기본 조건은 -minmatch 14이고, match의 필터 과정에서는 -minscore 30이 된다. 벡터 서열을 스크리닝하는 경우에는 좀 더 민감한 검색이 이루어지도록 -minmatch 10 -minscore 20의 조건을 준다.

그러니 primer 서열(보통 30 bp 미만)을 점검하기 위해 cross_match를 쓰는 경우에는 -minmatch 파라미터를 낮게 주도록 하자.

2019년 7월 22일 월요일

독서 기록 [이스탄불], [2010 스페이스 오디세이]

참으로 오랜만에 책을 읽었다. 2006년 노벨 문학상 수상자인 오르한 파묵의 자전적 수필집 [이스탄불], 그리고 전혀 다른 장르의 소설인 아서 C. 클라크의 [2010 스페이스 오디세이]. 앞의 것은 아내가, 뒤의 것은 아들이 권한 책이다. SF 영화의 고전인 [2001 스페이스 오디세이]를 아직도 본 일이 없기에 유튜브에서 영화 해설 동영상을 미리 보고 전편의 대강을 파악한 뒤에 본격적으로 빠져들었다.


더운 일요일 네이버 그린팩토리에서, 출퇴근길 지하철에서, 그리고 근무지에서 점심식사를 걸러가면서 정말 오랜만에 몰두하여 책을 읽었다. 지나치게 빨리 읽어서 세부를 잘 놓치는 나쁜 버릇을 여전히 고치지 못했지만 말이다(그래서 외국 소설의 등장인물 이름은 수첩에 메모를 해 가면서 읽고 싶은 충동이 인다).

국내에 소개된 오르한 파묵의 책을 먼저 읽어 보는 것이 예의이겠지만 어쩌다 보니 에세이집을 먼저 읽게 되었다. 그는 이스탄불에서 태어나 평생 이곳을 떠나지 않고 살았다고 한다. 할아버지가 사업을 해서 이룬 부를 그의 아버지대에서 거의 다 소진해 버렸고, 그는 그림에 몰두하며 성장을 했다. 공과대학에 들어갔지만 자퇴를 하였고, 첫사랑에는 실패하였으며, 23세에 소설가가 되겠다는 결심을 하고 집에 틀어박혀 글을 쓰기 시작했다고 한다(새벽 4시에 잠이 들어서 정오에 일어나는 생활을 하며). '도시 그리고 추억'이라는 부제에서 짐작할 수 있듯이 그가 어떻게 소설 창작의 길에 접어들게 되었는지에 대해서는 그렇게 자세히 나오지 않는다. 어린 시절의 기억, 그가 자라난 도시에 대한 추억, 이스탄불의 역사, 보스포루스 해협의 정경, 서구화에 대한 갈등, 그리고 우리말로 번역하기 어려운 이스탄불 특유의 감정인 hüzün에 이르기까지. hüzün은 비애, 깊은 슬픔, 우울, 우수(blues, gloom, melancholy or ruefulness) 정도로 번역이 가능하다.
한 개인으로서뿐 아니라 공동체로서 우리는 모두 외국인이나 모르는 사람들이 우리에 관해 어떤 생각을 하는지에 대해 어느 정도 고민한다. 이 고민이 우리에게 고통을 주거나, 현실과의 관계를 흐리게 하여 현실 자체보다 더 중요한 차원에 이르면, 이는 우리에게 문제가 된다는 의미이다. 서양인의 눈에 나의 도시가 어떻게 보이는지에 대한 나의 관심은 - 수많은 이스탄불 사람들처럼 - 문제가 있으며, 한쪽 눈을 서양에 고정시킨 도시 작가들처럼 나도 이 문제로 인해 가끔 머리가 혼란스럽다. - 25장 서양인의 시선 아래서
나도 글을 쓰다 보면 쉼표를 이용하여 어구를 계속 나열하는 때가 많은데(별로 바람직하지는 않지만), 이 책 역시 시각적인 묘사적인 장면에서 그런 것이 많아서 터키어가 원래 그런 것인지 아니면 번역을 일부러 그렇게 한 것인지 궁금한 생각이 들었다. 제10장 '비애-멜랑콜리-슬픔'에 134쪽에 나오는 문장을 하나 인용해 보자.
나는 어둠이 일찍 깔린 저녁 변두리 마을의 가로등 밑에서 손에 비닐봉지를 들고 집으로 돌아가는 아버지들에 대해 말하고 있다. 지속되는 불황 이후 상점에서 하루 종일 추위로 덜덜 떨면서 손님을 기다리는 늙은 책방 주인, 불경기 때문에 사람들이 면도를 하지 않는다고 불평하는 이발사,,,
여러 사람들의 유형은 무려 쉰 가지를 넘게 나열되어 - 실제로 예순도 훌쩍 넘기는 수준이었겠지만 너무 많아서 세다가 말았다 - 141쪽에서 비로소 구두점을 만난다. 중간에 사진이 많이 삽입되어 있지만 문장이 참으로 길기는 길다. 파묵의 다른 작품을 읽어 봐야 이 사람이 실제로 어떤 문체로 글을 쓰는지 알 수 있을 것이다. 풍부한 사진과 그림은 마치 여행기나 역사서를 보는 느낌을 준다. 문명이 교차하는 지역이자 주인이 계속 바뀌는 유서 깊은 도시 이스탄불에 대한 배경 지식이 있다면 책을 읽는데 도움이 될 것이다. 그래야 '이스탄불이 터키화한다'는 말의 의미를 이해할 수 있다.

[2010 스페이스 오디세이]는 정말 흥미를 가지고 몰입하여 읽었다. 우주를 배경으로 하는 많은 SF 영화들이 [2001 스페이스 오디세이]에서 얼마나 많은 장면을 오마주하였던가! 지금 생각해 보니 인터스텔라의 TARS는 컴퓨터 HAL에 해당하지만, 많은 이들이 저적했듯이 외형은 2001 스페이스 오디세이의 도입 부분에서 유인원들에게 도구 사용의 지혜를 전수하고 달과 목성에서 발견되는 수수께기의 석판(monolith)을 닮았다.

Monolith vs. TARS. 출처: Interstellar

전편(영화)에서 컴퓨터 HAL이 예상하기 어려운 행동을 한 이유를 이번 편에서 어렴풋하게나마 이해할 수도 있었다. 소설책 한 권이 영화적 상상력을 불러일으키고, 어두운 밤하늘을 올려다보게 한다. 주인공인 미국인과 러시아인들은 개별적으로 개성이 있는 사람들이지만, 중국인들은 마치 폐쇄적이고 한 가지 성격을 갖는 집단처럼 카테고리화하여 취급하는게 아주 조금은 불편하였다. 유럽인과 같은 행세를 하고 싶어하는 이스탄불 현지인을 바라보는 파묵의 마음도 이와 통하지 않을까?

피로가 몰려와서 더 상세한 독후감을 쓰지 못하는 것이 아쉽다.

다음에는 다음의 책을 사서 읽어보고 싶다.

[화제의 책] 알고리즘의 손안에서 놀아나지 않으려면 '종이책'을 읽고 '사색'을 되찾아라. 
생각을 빼앗긴 세계(프랭클린 포어 지음|이승연·박상현 옮김)

2019년 7월 14일 일요일

르 몽드 디플로마티크 한국어판

오늘은 네이버 그린팩토리에서 새롭게 발견한 읽을 거리인 르 몽드 디플로마티크(Le Monde Diplomatique)를 소개해 본다. 진보 성향의 프랑스 일간지인 '르 몽드'의 자매지이자 국제뉴스를 다루는 월간지로 20개 언어로 37개 국제판이 발간되고 있다고 한다. 논조는 매우 진보적이고 비판적이어서 자칫 지엽적인 문제에 매몰되기 쉬운 우리에게 세계 곳곳에서 벌어지는 일을 자세히 바라보게 해 준다. 다음의 기사를 보면 광고가 거의 실리지 않는 매체가 한국 실정에서도 어떻게 살아남았는지를 보여준다.

[이 언론이 사는 법] 르 몽드 디플로마티크 "관점을 가진 언론만 살아 남을 수 있다"

인터넷으로 시답지않은 소식을 찾아볼 것이 아니라 이런 매체를 정기구독하는 것이 백번 나을 것 같다. '종이신문(실제로는 월간지) + 온라인 1개월' 이용료는 12,000원인데 정기 구독을 정말로 진지하게 고려하고 있다. 생각이 다른 사람들에게는 웬 빨갱이 월간지를 돈 주고 보냐는 소리를 듣겠지만 말이다. 이 뜨거운 날씨 속에서 군복 차림으로 성조기를 들고 광화문 네거리를 서성이며 구호를 외치는 사람들에게는 불온한 사상을 퍼뜨리는 신문으로 보일 수도 있을 것이다.

르 몽드 디플로마티크가 마음에 드는 것은 기사 중간에 삽입된 시의적절한 현대미술 작품 때문이다. 

2019년 1월부터 연재되는 기획기사 [새로 쓰는 '비판경제 교과서'] 몇 편을 인상 깊게 보았다. 연재 순서는 다음과 같다. 앞으로 그린 팩토리에 갈 때마다 빼놓지 않고 전체를 찾아 읽을 생각이다.

  1. 경제학은 과학인가?
  2. 생산 증대, 무조건 더 많이!
  3. 노사관계(다리와 버팀목의 관계)
  4. 부의 분배 희망과 난관
  5. 고용, 어떠한 대가를 치러야 하나?
  6. 장을 따를 것인가 명증된 법칙을 따를 것인가?
  7. 세계화 국민간의 경쟁
  8. 화폐, 금전과 현찰의 불가사의
  9. 부채 협박
  10. 금융 지속 가능하지 않은 약속
국내에서 워낙 많은 이슈가 발생하고 있어서 국외에서 발생한 일에 대하여 미국의 관점이 아닌 균형잡힌 시각으로 관심을 갖는 것이 쉽지 않다. 날이 갈수록 어려워지는 고용과 실물경제, 남북 관계, 엽기적인 가족 살해 사건, 세대·계층·성별 간 갈등, 미세먼지, 탈원전과 지속 가능한 에너지 정책, 쓰레기, 일본과의 무역 갈등... 이런 상황에서 신장 위구르 자치구에서 벌어지는 상황이 우리와 무슨 상관이 있느냐고 할 수도 있다. 그러나 모든 나라가 밀접한 관계를 맺고 사는 요즘은 더 이상 남의 일이 아니다.

이번에 집중적으로 읽은 6월호에서는 미국에서 불어오는 사회주의 열풍과 전세계를 잠식해 들어가는 마약 자본주의에 대한 기사가 실렸다(발행인 칼럼 링크). 우리에게 마약이란 아직 일부 연예인이나 재벌 2세의 방종 정도로 여겨지지만, 마약 소비자를 망가뜨림과 동시에 재배자와 말단 공급자를 계속 착취의 하부 구조에 종속시키는 글로벌한 문제가 아닐 수 없다.

미국의 사회주의 관련 기사에서 좀바르트의 저서 [사회주의는 왜 미국에 존재하지 않는가]의 일부가 실렸기에 인용해 본다.
임금 노동자는 경제적 여건과 생활환경이 나아짐에 따라 물질적 타락에 빠졌고, 온갖 쾌락을 제공하는 경제체제를 점점 선호할 수밖에 없었다. 임금 노동자는 정신적으로 점차 자본주의 경제 메커니즘에 순응했고, 결국 대부분의 사람들은 물질과 자본의 강력한 매력에 굴복해버렸다. '진보'(자본주의)를 행한 도정에서 미국이 다른 국가를 앞서간다고 생각하며 생겨난 자부심은 미국인을 검소하며 계산적인 비즈니스맨으로 만들었다. 이는 오늘날 우리가 알고 있는 상업정신을 바탕으로 형성된 미국인의 이미지다. 이렇게 모든 사회주의 유토피아는 로스트 비프와 애플파이(먹고 사는 문제를 상징함-역주)를 넘어서지 못하고 실패했다.
이 잡지와 더불어 읽은 것은 서가에서 바로 옆에 위치한 [포춘 코리아]였다. 부(富)가 최상위층에게 몰린다는 것은 어제 오늘이 일이 아니지만, 포춘 500대 기업에서도 이와 같은 일이 벌어지고 있다고 한다. 2018년 기준으로 500대 기업 전체 매출의 47.7%가 상위 50개 기업에 몰려 있는데, 이는 어느 때보다 높은 수치이다. 과연 이것이 자연적이고 바람직한 변화일까? 절대 그렇지 않다. 기득권을 가진 기업은 더욱 유리한 위치를 차지하게 만드는 제도, 그리고 과다한 인수 합병의 산물이다. 흔히 '규모의 경제'라는 말을 통해서 거대 기업에 부가 집중되면 더욱 싼 값에 물건을 만들 수 있고 이에 따라 소비자가 혜택을 보게 된다고 한다. 그러나 지나친 인수 합병은 성장도 하기 전에 가능성이 있는 작은 기업을 나꿔챔으로써 '경쟁'을 원천적으로 막는다. 이는 혁신의 열매가 열리기도 전에 새싹 수준에서 베어 먹는 것에 비유할 수 있을 것이다. 

구글의 규모가 커지면서 의사 결정 과정에서의 투명성이 사라지고 직원 통제가 강화되며, 군사 기술이나 검열이 적용된 검색 기술(독재 국가에 팔리기 좋은 기술)을 개발하게 되면서 이에 반발하는 직원이 퇴사를 하거나 적극적으로 반대 의사를 표명한다는 기사도 흥미롭게 읽었다. '사악해지지 말자'는 이러한 활동가들이 내세우는 주장이다.

6LQ8 푸시풀 앰프 - NFB(negative feedback) 실험

NFB은 세포 혹은 개체 수준의 향상성을 유지하는 주요 메커니즘으로 생물계에서 널리 찾아볼 수 있으며, 인간에 의해 공학적으로 설계된 시스템에서도 흔히 이용된다. 오디오 앰플리파이어에서는 증폭기의 왜곡 등 결점을 줄이기 위한 방법으로 응용되고는 한다. 심각한 수준으로 들어가면 NFB을 제대로 걸기 위해서 설계까지 필요하다지만, 나는 몇 킬로옴의 저항을 연결하는 것으로 마무리를 하였다. 제작 지침서에는 350옴~2k옴 수준에서 최적의 값을 결정하라고 나와 있으나 실제로 연결을 해 보니 이 값의 저항으로는 피드백 수준이 너무 커서 소리가 거의 들리지 않을 지경이었다.

출력 트랜스의 1차쪽 배선을 짧게 정리하였다. 5극관 결선 상태이다.

10k옴 가변저항을 달아서 노브를 돌려보면 음질이 가장 좋은 위치를 찾을 수 있을 것이라 생각했었지만, 최대 저항에서는 소리가 가장 크고(물론 NFB를 전혀 걸지 않은 상태보다는 소리가 줄어들었음), 최소치에서는 가장 많은 피드백이 걸리므로 음성 신호는 전혀 나지 않으나 약간의 발진이 출력되는 것을 확인하였다. 음질이 가장 좋은 중간 위치를 찾는다는 것은 계측기와 파형 발생기 없이는 알기가 힘들다는 생각이 들었다.

그래서 가장 소리가 크게 나도록 5극관 접속 상태로 만든 다음, 10k옴 고정 저항(100pF 캐패시터를 병렬로 연결)을 연결하기로 하였다. 5극관 접속 상태에서는 소리가 매우 크고 거칠다는 느낌이 분명히 있다. 다만 커넥터를 중간에 달아서 취향에 따라 NFB를 걸지 않게 만들기로 하였다.

NFB용 저항의로 10k옴은 너무 큰 것이 아닐까? 출력의 수준과 사용한 관은 다르지만 Dynaco ST35 푸시풀 앰프(6BQ5 사용)의 회로도에는 28k옴이 쓰였다.

출처: [DIY Audio Projects] Dynaco Dynakit Stereo 35 (ST35) Schematics and Manual

심지어 PCL86 푸시풀 앰프에서는 100k옴을 쓴 사례도 있었다.

[DIY Audio Projects] PCL86 - Worth a try?

10k옴 고정저항이 없어서 페놀 만능기판 위에 2k옴 5개를 직렬로 연결하였다. 보기에 그렇게 흉하지는 않다. 출력도 적절히 유지하고 어느 수준의 NFB을 적용하는 선에서 타협을 보았다. 20원짜리 10k 1/2W 메탈필름저항 두 개면 충분할 것을 무려 열 개나 쓰다니...


출력 트랜스 2차 탭의 납땜 상태가 다소 마음에 들지 않아서 조만간 다시 납땜 인두를 들게 될 것 같다. 비록 외관은 소박하지만 음질에는 만족한다.

2019년 7월 12일 금요일

pip와 conda의 행복한 동거는 어렵다

"Conda 환경 안에서 pip로 새로운 파이썬 패키지를 설치하는 것은 좋지 않다."
Unfortunately, issues can arise when conda and pip are used together to create an environment. [Using Pip in a Conda Environment]
LS-BSR에 포함된 파이썬 스크립트를 실행하는 과정에서 pandas와 관련한 에러가 발생하였다. 에러 메시지를 이용하여 구글을 검색해 보면 흔하디흔한 에러 중 하나다. 참고삼하 말하자면 나는 파이썬 초급 교육을 몇 번 받은 일이 있고 패키지 관리와 활용 정도는 하는 편이지만 파이썬 문법 자체는 잘 모른다.

$ python ../../tools/BSR_to_cluster_dendrogram.py -b bsr_matrix_values.txt
Traceback (most recent call last):
  File "../../tools/BSR_to_cluster_dendrogram.py", line 117, in <module>
    main(options.bsr_matrix,options.cluster_method)
  File "../../tools/BSR_to_cluster_dendrogram.py", line 99, in main
    write_tree(cluster_method)
  File "../../tools/BSR_to_cluster_dendrogram.py", line 76, in write_tree
    dmx = pd.read_csv("distance_matrix", index_col=0, sep="\t")
AttributeError: module 'pandas' has no attribute 'read_csv'

분명히 설치를 했는데 왜 그런 것일까?  해결책을 찾아보다가 conda 내부에서 pip를 이용하여 파이썬 패키지를 관리하는 것은 매우 바람직하지 않다는 글을 발견하였다. Conda가 애써 설치한 파일들을 pip가 건드리게 되지만, conda는 이를 알지 못하기 때문이다. 그러면 conda로 뭔가를 새로 설치하게 되고, 시스템은 뒤죽박죽이 되어 재현하기 어려운 문제를 발생하게 된다는 것이다.

프로그램 설치 기록을 살펴보았다. Conda를 썼다가 다시 pip로 설치를 하고 이어서 또 conda를 쓰는... 매우 바람직하지 않은 방법으로 컴퓨터를 관리해오고 있었다. Conda 4.6.0에서는 아직 베타 수준이지만 pip가 설치한 패키지들을 점검하여 유연한 관리를 하는 기능이 포함되어 있다고 한다.

아나콘다 웹사이트에서 제시한 "Best Practices Checklist"는 다음과 같다.
  • Conda를 써서 되도록 많은 패키지를 설치한 뒤에 pip를 써라
  • 필요하다면 Conda 환경을 새로 만들어라
  • Conda 패키지를 추가 설치하는 가장 좋은 방법은 conda environment를 새로 만드는 것이다
  • Conda와 pip 설정 상태를 텍스트 파일로 저장해 두어라
하나의 conda 환경에 되도록 많은 추가 패키지를 설치하는 버릇을 들여왔었는데, 오늘 찾은 모범답안에 의하면 그것은 매우 바람직하지 않은 일이었다. 그러나 프로그램마다 conda environment를 하나씩 만들면 오히려 관리하기는 더 나빠진다. 특히 연달아 실행해야 하는 프로그램이 전부 다른 conda environment에 있다면 그 실행 과정이 얼마나 불편할지는 불을 보듯이 뻔하다.

보다 합리적인 운용 방안을 위해서 고민해 보자.

grep의 현명한 사용법 - 검색할 패턴(파일로 제공)이 없는 라인을 출력하기

grep은 텍스트 파일 혹은 표준 입력으로부터 주어진 패턴이 존재하는 라인을 출력하는 유틸리티이다. 검색할 패턴은 보통 명령행 옵션으로 하나가 주어진다. 그런데 찾아야 할 패턴이 여러개라면, 이를 별도의 파일('FILE')로 지정해 놓고 -f FILE 옵션으로 제공하면 된다. 검색할 패턴은 FILE 내에서 각각 별도의 라인으로 저장되어 있어야 한다. 좀 더 유식하게 말하자면 FILE 내에서 newline(개행 문자 혹은 쉬운 우리말로는 새줄 문자)로 패턴들이 분리되어 있어야 한다.

이와는 반대로, 특정 패턴이 없는 라인만을 파일에서 출력하고 싶다면? 패턴이 하나라면 -v(--invert-match) 옵션을 사용하면 된다. 그렇다면 좀 더 복잡한 상황을 가정해 보자. 배제하고 싶은 패턴이 여럿이라면 어떻게 하면 되나?

ftp://ftp.ncbi.nlm.nih.gov/genomes/refseq/bacteria/assembly_summary.txt 파일을 다운로드하여 내가 연구하는 어떤 미생물종에 해당하는 라인만을 골라내어 별도로 저장했다고 가정하자(my_species_summary.txt). 그런데 상세히 조사를 해 보니 어떤 레코드는 assembly가 불량하여 배제를 해야 되겠다고 마음을 먹었다. 배제할 레코드의 assembly accession(GCF_로 시작하는)을 따로 추려서 REJECTION이라는 텍스트 파일에 저장을 하였다. my_species_summary.txt에서 이 억세션에 해당하는 라인만을 제외한 나머지를 출력하려면 이렇게 하면 된다.

grep -Fv -f <(cat REJECTION) my_species_summary.txt

-F (--fixed-strings, --fixed-regexp)가 열쇠를 쥐고 있다. grep 매뉴얼에 의하면, -F 옵션은 newline으로 분리된 패턴을 일종의 목록으로 간주하여 각각에 대하여 매치 작업을 하는 것이다. 이것이 -v와 결합된 상태이니 딱 내가 바라는 작업을 할 수 있는 것이다.

힌트는 다음의 웹페이지에서 얻었다.

[Stack Overflow] Search multiple pattern in file and delete line if pattern matches