2019년 3월 31일 일요일

새로운 기회를 준비하면서

2019년 4월부터 경기도 소재의 한 중견기업에서 일을 하게 되었다. 16년 3개월 동안 근무한 정부출연연구소를 완전히 떠나는 것이 아니라, 기업의 기술혁신 지원을 위하여 파견 발령을 받은 것이다. 기업의 요청과 나 개인의 결심이 서로 일치하여 성사된 것으로서 전례가 없는 일이라 기관 최고 책임자 수준에서 결정이 난 다음 이를 추진하는 실무자들이 꽤 많은 수고를 하였다.

국가과학기술연구회와 중소벤처기업부에서 실행하는 공공연구기관 연구인력지원사업이라는 것도 있지만, 이는 중소기업 및 벤처기업에만 해당된다.

수도권에 머물 곳을 구하고, 짐을 옮기고, 하던 일을 정리하느라 매우 분주한 3월을 보냈다. 데이터를 백업하고 컴퓨터를 정리하여 원 소속센터의 연구원들이 사용할 수 있도록 세팅을 하는 것이 특히 큰 일이었다. 마지막날까지 Oxford Nanopore 시퀀싱 실험을 하느라 정신이 없었다. 48시간 사이클로 설정하였으니 아마도 어제(토요일) 저녁 6시쯤에 모든 과정이 끝났을 것이다. 예전에 몇 차례 테스트 시퀀싱을 했을 때에는 시퀀싱이 전부 끝난 다음 별도로 Albacore basecalling을 하느라 많은 시간이 소요되었지만 이번에 새로 설치한 MinKNOW 소프트웨어에서는 자체 basecalling option이 있어서 한결 수월하였다. 하루 정도를 지켜보니 약 65%의 진도로 basecalling이 진행되는 것을 볼 수 있었다.


마지막 주말에는 집에서 공동연구자의 sequencing raw data 51건을 NCBI SRA에 올리고 있다. 연구소 전산망보다는 속도가 느려서 시간이 생각보다 많이 걸린다. 그래도 중간에 전송이 끊기지는 않으니 다행이다.

공부를 위해 마지막으로 인쇄해 혼 논문을 아직 제대로 읽지는 못했다. 10년 간격을 두고 거의 같은 제목으로 나온 리뷰 논문을 비교해 보면서 얼마나 많은 지식이 이 분야에 축적되었는지를 알아보려 한다. 나의 원래 소속 부서와 파견 기업에서 같이 관심을 기울일만한 분야이다.


The role of microbiota in infectious disease. Stecher B, Hardt WD. Trends Microbiol. 2008 Mar;16(3):107-14.

The role of the microbiota in infectious diseases. Josie Libertucci & Vincent B. Young.
Nature Microbiology volume 4, pages 35–45 (2019).

앞으로 2년 동안 이 블로그를 운영하는 방식에도 변화가 있을 것 같다. 기업에서 추진하거나 겪은 일을 마치 일기를 쓰듯이 블로그에 쓸 수는 없기 때문이다. 개인적인 일, 취미와 관련된 것, 내가 종사하는 분야의 일반 동향, 리눅스/shell script/Perl/R 등의 자질구레한 팁 정도로 그 범위와 작성 빈도가 줄어들 것이고, 이는 충분히 예견했던 바다.

직장 및 삶의 터전을 한시적이나마 바꾸어 본다는 것은 개인 차원에서 할 수 있는 매우 효과적인 혁신의 한 수단이라고 생각한다. 나의 결심이 나 개인과 가족에게도 좋은 기회가 될 것으로 믿는다.

3월이 끝나기 전에 10회의 블로그 포스트를 달성한 것이 다행이다. 원래의 목표는 월 12회 이상 글을 쓰는 것이었다. 월 15회가 목표였던가?

2019년 3월 27일 수요일

컴퓨터 청소하기

내가 소유한 물건에 대하여 진지한 성찰을 하게 되는 가장 좋은 계기는 이사를 하는 것이다. 마지막 이사를 하면서 소중하게 챙겨왔던 물건을 한번도 꺼내지 않다가 새로 이사를 준비하면서 비로소 그 존재를 확인하게 되는 경우를 많이 겪는다. 누군가 이런 말을 한 적이 있다. 정말 필요한지 아닌지가 확신이 되지 않는 물건이라면 일단 상자에 넣어서 보관하여라. 6개월이 흐른 뒤 그동안 단 한번도 그 상자를 열어보지 않고 있었다면 버려도 좋다는 것이다. 내가 한마디 첨언한다면 6개월이 지나는 날, 버릴 결심을 하는 순간 그 상자에 무엇이 들어있었는지를 확인하기 위해 열어볼 필요조차 없다.

왜 하필이면 6개월일까? 계절이 바뀌면서 넣어 둔 옷은 다시 그 계절이 돌아올 때가 되어야 꺼내 입는 것이 당연하다. 그러한 주기는 대략 6개월로 볼 수 있으니, 이는 매우 합리적인 기준이 된다. 패션에 아주 민감한 부자가 아닌 이상 계절이 바뀌면 예전에 넣어둔 옷을 다시 꺼내 입어야 하지 않는가.

파견발령을 받아 4월 1일부터 근무지를 바꾸게 되면서 내가 쓰던 물건을 정리하는 것도 비슷한 맥락에서 바라볼 수 있다. 소위 '드라이 랩' 위주로 연구실을 운영하다 보니 내가 관리하는 대부분의 장비는 컴퓨터이다. 일부는 반출 신청을 하고, 나머지는 이전 근무지에서 계속 활용할 수 있도록 정비를 하였다. 고장난 RAID array는 새로 구성하고, 먼지를 털고, 성능이 너무 떨어지는 서버는 아예 전원을 내리고...

작년에 건물 지하에서 화재가 발생하여 발생한 그을음이 서버를 보관하는 3층 골방까지 타고 올라와서 서버를 엉망으로 만들었었다. 청소를 할 엄두가 나지 않아서 그냥 방치하였다가 최소 2년 동안은 내가 관리를 할 수 없는 상태가 되었으므로 칼을 빼들기로 하였다. 아래 사진에 보인 서버는 2009년 10월에 내가 최초로 구입한 랙마운트 조립서버이다. Tyan의 S7002 보드에 인텔 E5620(2.4GHz)가 두 개 꽂혀있다. 메모리는 보드에서 지원하는 최대 용량인 64GB를 장착하였다. 서버의 별칭은 proton. 21C 프론티어 양성자공학기술개발사업단의 과제 지원으로 구입하였으므로 양성자라는 이름을 붙인 것이다. 이 서버를 구입하기 전에는 사무용 컴퓨터 수준의 것에 리눅스를 깔아서 사용했었다. 만 10년 가까이 흐르는 동안 하드디스크드라이브를 추가한 것 외에는 단 한번도 장애가 발생하지 않았고 간혹 공지된 정전기간 이외에는 전원을 내리지도 않았다. 2015년에 현재 쓰는 서버(벌써 4년이 흘렀다)를 구입하면서부터는 하드디스크드라이브를 꽉 채워서 RAID array를 구성하여 바로 오늘에 이르기까지 잘 사용하였다. 참 대견한 녀석이다.


카트에 싣고 살살 건물 밖 마당으로 나가서 뚜껑을 열고 압축공기 캔으로 열심히 그을음을 떨어내었다. 컴퓨터에 내부에 보통 끼는 먼지와는 차원이 다르다. 공기로 떨어지지 않는 것은 걸레질을 해 가면서 열심히 닦았다. 또 다른 랙마운트 서버인 microbe는 USB 3.0 인터페이스 카드를 꽂아서 Oxfor Nanopore Technologies의 MinION을 구동할 수 있게 만들었다.

가장 성능이 좋은 Dell 서버는 전산센터동의 서버실에 있어서 특별히 유지 관리를 할 필요가 없다. 사실 이것도 내년이면 구입 10년차가 된다. 전산장비를 쓰면서 그렇게 큰 장애를 겪은 일이 없다는 것이 매우 다행스럽게 여겨진다. 수백 대의 서버를 관리하는 사람이라면 늘 긴장 상태이겠지만 나는 소규모 연구를 수행하는 사람으로서 관리하는 컴퓨터의 수는 열손가락으로 충분히 헤아릴 수 있는 수준이니까.

고만고만한 수준의 서버 4대를 모아서 오라클 그리드 엔진으로 묶었었는데 실제로 이를 많이 쓰지는 못했다. 하드웨어가 제각각인지라 가장 성능이 떨어지는 계산 노드가 항상 전체 실행 시간을 잡아먹고 있어서 점점 쓰지 않게 되었다. 그리드 엔진을 해체하면서 부팅을 할 때마다 마스터 및 계산 노드 각각이 실행하는 설정 스크립트를 어느 단계에서 돌리는지 찾아보았다. /etc/profile 파일의 맨 끝에 붙어 있기에(다음의 라인) 이를 코멘트 처리하였다. 내가 직접 오라클 그리드 엔진을 설치한 것이 아니라 KOBIC의 도움을 받은 것이라서 상세히 기억을 하지는 못한다.

source /data/gridengine/default/common/settings.sh

컴퓨터에 문제가 생기면 바로 곁의 KOBIC에서 늘 많은 도움을 받았었는데 이제 새 파견지로 가면 어떻게 해야 하나? 자력갱생을 해야지 어쩌겠는가?


2019년 3월 25일 월요일

새로운 잡종 동물


그렇다. '개새'. 개의 머리와 새의 몸체를 가진 우스꽝스런 동물이다. 출시된지는 제법 되었다. '개새'라는 결코 고상하지 않은 낱말을 입에 올릴 때, 묘한 쾌감이 느껴진다. 원래 욕설이란 것이 그런 것 아니겠는가?


남부터미널 상가에 다녀온 아들의 선물이다. 캡슐뽑기 가챠샵에서 구입한 것이라서 어떤 아이템이 나올지는 순전히 운에 좌우된다. 기왕이면 시바새였으면 좋았을텐데. 개새, 시바새... 전부 상쾌한 카타르시스가 느껴지는 이름 아닌가?

가끔은 이런 존재가 필요하다.

2019년 3월 23일 토요일

Google+ 계정 정비 후 프로필 삭제

구글플러스(Google+)가 서비스를 중단하기로 한 가장 큰 원인은 작년에 있었던 이용자 50만명의 정보 유출 사건이 그 원인이라고 한다. 유출이 일어난 직후 이를 투명하게 공개하지 않은 것에 대한 비난은 피하기 어렵다. 다른 소셜미디어에 비하여 경쟁력이 떨어지는 것은 사실이고 사용자가 잘 늘지도 않으니 수익이 나지 않은 서비스를 계속 유지할 필요가 없다는 결정을 내렸을 것이다.



그런데 지난해 가을에 무려 5천만 명이 넘는 사용자의 데이터가 유출된 적이 또 있었다고 한다. 당초 2019년 8월에 중단하려던 서비스를 4개월 앞당기게 된 것도 이것 때문이라 한다.

[IT World] 구글플러스, 또 사용자 데이터 대량 유출... 프로필 삭제 필요

구글이 안내한대로 구글플러스의 데이터를 내려받고 압축을 풀었다. 구글 보관 파일이라는 것인데, 압축을 풀어도 어떻게 사용하는지를 잘 모르겠다. 압축된 보관 파일은 1.7 기가 바이트 정도였고 압축을 해체하면 Takeout이라는 폴더 내에 index.htm 파일이 생성되었는데 웹브라우저에서 열어서 글 또는 사진 항목을 클릭해도 파일을 찾을 수 없다는 메시지만 나온다. 도대체 여기에서 말하는 구글+ 스트림이라는 것은 무슨 성격의 파일인지도 잘 파악이 되지 않는다.

구글플러스 계정과 프로필을 삭제하였더니 블로거 화면의 오른쪽 위에서 표시되던 프로필도 사라지고 말았다. 이참에 내 실명이 노출된 블로그 제목도 바꾸어 버릴까? 아니다. 이것은 좀 섣부른 결정이다. 내 이름을 적절한 키워드와 같이 조합하여 구글에서 검색하면 나타나는 내 블로그가 최상위로 나타난다. 이렇게 된 것은 블로그 제목에 실명이 포함된 때문일 것이다.

블로거를 위한 프로필을 정비해야 되겠다. 오늘 저녁에 해야 할 숙제이다.


3월에 겪은 일

출장지에서 돌아오는 길, 고속도로 주행 중에 앞타이어 옆면이 터지다. 타이어의 터진 잔해가 있는 곳을 부주의하게 지나다가 '쾅' 소리와 함께 무엇인가를 밟고 지나는 느낌을 받았다. 아마도 앞서 지나던 트럭의 타이어가 터지면서 종이처럼 찢긴 휠 조각이 도로에 남은 것을 밟은 것 같았다. 타이어에 느껴진 충격을 생각하면 손상이 나지 않을 수가 없는 상황이라는 생각이 들었다. 과연 무사히 집까지 갈 수 있을까? 아니나 다를까, 몇 킬로미터를 가지못하고 '드르륵'하는 소리와 함께 심한 진동이 느껴졌다.

고속 주행 중에 앞타이어가 터지면 매우 위험하다고 들었는데, 조향이 불가능할 수준은 아니었다. 비상등을 켜고 천천히 차를 갓길로 이동하였다. 마침 휴게소 직전이라서 진입로에 비교적 안전하게 차를 대고 보험사의 긴급출동 서비스를 불렀다. 집까지 가려면 무료 견인 거리를 훨씬 초과하는지라 일단 휴게소까지 이동하여 비상용 타이어로 교체한 뒤 국도를 따라서 천천히 주행하여 대전으로 돌아왔다.

여러 장을 찍었더니 구글 포토가 장난스럽게도 애니메이션을 만들어 주었다.
타이어 옆면에는 마치 칼로 찌른 것처럼 방사상으로 길게 찢긴 곳이 세 군데나 발생하였다. 조수석 뒤편 타이어에서 자꾸 바람이 새서 뒤쪽 타이어 두 짜을 교체할지 고민하는 중이었는데 비교적 마모상태가 양호한 앞타이어가 이렇게 파손되고 말았으니 전체 네 개를 교체하지 않을 수 없었다. 출장지에서 받은 자문료가 타이어 교체 비용으로 다 들어가고도 모자랄 지경이다.

수퍼마이크로보드를 사용하는 서버 컴퓨터에 ipTIME USB 3.0 카드를 설치하느라 고생을 하였다. VIA 805 칩셋이 리눅스 커널에서 잘 지원이 된다고는 하지만 실제로 그렇지 않다는 경험담이 많았다. dmseg를 하면 인식은 되지만 USB 외장매체를 끼워도 전혀 동작을 하지 않았다. RAID array 재구성 지원을 위해 찾아온 전산팀의 근무자도 포기하고 돌아간 상황에서 마지막 시도라 생각하고 카드를 다른 PCI 익스프레스 슬롯에 꽂으니 작동을 하였다. USB 3.0 카드가 성공적으로 인식이 됨으로써 활용도가 떨어지던 기존의 리눅스 서버를 MinION 구동용으로 사용할 수 있게 되었다.




그리고 아들녀석이 4주 동안의 보충역 훈련을 마치고 집으로 돌아왔다. 감기가 잔득 걸렸지만 늠름한 모습이 정말 반가웠다. 나는 아들이 태어난지 일년도 되지 않은 아기일 때 같은 곳에서 훈련을 받았었다. 기록적으로 추운 1월달이었던 것으로 기억한다. 남자로서 꼭 거쳐가야 하는 관문 하나를 통과한 것이 기특하다. 아들에게도 좋은 경험이었을 것이다.


"쓰기는 읽기보다 기본적인 욕망이다"

오늘 글의 제목은 한겨레신문 3월 22일자 컬럼 [공감세상]에 실린 작가 손아람의 글에서 인용하였다. 의사로서의 생업을 그만두고 전업 작가가 되려는 지인의 이야기로 시작한다.

죽은 시인의 사회
생각의 실용적 가치가 작아질수록, 생각의 용도가 줄어들수록, 생각에 대한 굶주림은 커진다....사람들이 책을 읽지 않는다고 한다. 직업인으로서 작가와 출판인들이 하는 고민이다. 하지만 쓰기는 읽기보다 근본적인 욕망이다. 작가를 죽인 게 단지 풍선처럼 쪼그라든 출판시장 때문일까?
3월에 접어들면서 블로그에 글을 쓰는 빈도가 현저하게 줄어든 것에 대하여 여러 이유를 댈 수 있다. 직업 작가가 아닌 나는 '읽는 사람이 적어서'라는 핑계를 댈 필요는 없다. 마음에 여유가 없었다는 것이 그 이유이다.

4월부터 계획을 하는 일이 있다. 직업과 관련된 매우 중요한 변화일뿐만 아니라 생활의 터전을 바꾸는 일이기도 하다. 그곳에서는 지금처럼 자유롭게 생각하고 글을 쓸 자유가 주어지지 않을 것이 자명하다. 그럼에도 불구하고 변화를 받아들이려는 데에는 내 인생에서 그럴만한 가치가 있는 시도라고 여기기 때문이다. 한시적이나마 자유를 제한당할 수도 있다는 마음의 부담감이 벌써부터 글을 쓰려는 욕구를 억누르고 있는지도 모른다. 내가 사용하던 유일한 소셜미디어서비스인 Google+가 2019년 3월로 완전히 서비스를 접는다는 것도 아쉬운 일이다.

이러한 상황의 변화 외에도 생각의 변화가 일어난 것도 글의 수가 줄어든 원인이 될지도 모른다. 자신의 일상과 생각을 가감없이 공개하는 것이 과연 옳은 일인가(혹은 필요한 일인가)? 요즘은 사실상 사생활이 없는 시대라서 이에 대한 진지한 고민은 별로 하지 않는 것 같다. 그리고 빅데이터·인공지능 열풍 때문에 무엇이든 남겨진 기록은 가치 있는 정보로 탈바꿈할 수 있다는 믿음이 만연하다. 물론 그 가치는 정보의 통로를 틀어쥐고 있는 거대 기업의 눈에 누구보다 먼저 뜨여서 그 기업을 위한 이윤으로 탈바꿈하는 중이다.

아니면 관점을 약간 바꾸어서, 공개 여부는 관계없이 무엇인가를 버리지 않고 남겨두는 것은 어떠한가? 예를 들어 사진을 생각해 보자. 어르신 중에서 의외로 과거의 사진(컴퓨터나 클라우드에 저장된 것이 아니라 물리적인 실체가 있는 인화물)을 정리하려는 분들이 많다. 수년 전까지만 해도 이를 이해하기 어려웠다. 사진은 개인의 역사이고 영원히 남겨져서 사료적 가치를 갖는 것으로 후대에 인정받는 것이 나올 수도 있지 않은가? 그러나 최근에 읽은 책  죽기전까지 걷고 싶다면 스쿼트를 하라'의 저자 고바야시 히로유키는 젊을 때 사진을 단지 두어장만 남겨놓았다고 한다. 책을 쓸 때의 저자의 나이는 57세. 왜 그러한가? 젊은 날의 모습을 자꾸 지금과 비교하면서 아쉬움을 갖게 되기 때문이다. 남아있는 일생 중에 오늘은 내가 가장 젊은 날이 아닌가? 왜 과거를 돌이켜보면서 아쉬워할 것인가?

무엇을 남기고 무엇을 폐기할지는 개인이 결정할 일이다. 그것을 남겨둠으로 인하여 자꾸 뒤를 돌아보게 되고 현재의 행복을 갉아먹게 된다면 없애는 것이 낫다. 그러나 나중에 역사적으로 가치가 있는 물건으로 평가될지도 모르는 일이다. 그렇다면 그 물건을 남겼을 때 원 소유자가 감수해야 하는 불행과, 사회 전체적으로 이를 기억함으로서 얻게되는 이익을 단순히 합하여 양(+)의 가치를 갖는다면 이를 남기는 것이 옳은가? 예를 들어 일제 강점기 때에 모진 징용생활을 견디고 극적으로 생환한 사람이 있다고 하자. 징용 현장에서 원치 않게 찍은 사진이 있다면, 그는 이것을 없애버리고 기억에서 영원히 지우고 싶지 않겠는가? 그러나 사회 전체적으로 본다면 이를 기록으로서 남기고 역사 교육 현장에서 가르쳐야 하지 않는가? 개인의 입장으로만 본다면 가혹한 결정이 될 수도 있다. 단순한 공리주의적 셈법을 가지고 판단을 내리가는 어렵다.

고민이 이러한 수준이 된다면 무엇을 남기고 버릴지는 더 이상 개인 차원의 일이 아닌 것이 되고 만다. 물론 몇 개의 상자를 가득 채운 과거의 개인적 기록 - 공책, 일기장, 편지, 사진 - 과 소유물을 어떻게 할 것인가를 놓고서 이렇게까지 심각한 고민을 할 필요는 없다.

그런데 '공개'의 문제는 더 어렵다.

이미 만들어진 기록의 공개가 문제가 아니다. 쉽게 공개할 수 있는 창구(예: 소셜미디어, 블로그 등)가 있어서 과거보다 더 많이 기록을 하게 되는 것도 사실이다.

쓰는 것은 본능, 욕망과 관계된 것이고 철저히 개인적인 차원의 일이다. 쓴 것 중에서 무엇을 남기고 폐기할지는 어려운 결정이며, 세상에 공개를 함으로써 어떤 일이 벌어질지는 더욱 알기 어렵다. 쓰는 것은 내가 원하는대로 하고 싶다. 그러나 공개 여부에 대해서는 좀 더 신중하게 생각해 볼 일이다. 최소한 내가 손으로 직접 쓴 다이어리를 스캔하여 인터넷에 올리지는 않으니까 말이다.

2019년 3월 19일 화요일

커서에 한영 상태를 표시하는 작은 도구 IMECursor v0.71

참고한 사이트는 여기이다. 타자를 치기 시작하다가 백스페이스 키를 눌러서 잘못 입력된 글자를 지운 다음 [한/영] 전환키를 누를 필요가 없다.


그런데 실제 작동을 해 보면 알겠지만, '가' 또는 'a'가 작게 표시되는 것은 마우스 포인터이지 커서 자체는 아니다. 텍스트를 입력 가능한 위치에 마우스 포인터를 올리면 현재의 한/영 상태가 표시되는 것이다.

마우스 커서? 다음의 것을 마우스 커서라고도 부르는 것 같다. 마우스 포인터가 제대로 된 명칭이라고 생각했는데 영어권에서도 이런 표현을 사용한다.


아주 간단하지만 유용한 프로그램을 알게 되어 즐겁다. 기왕이면 텍스트가 입력되는 커서를 따라 이동하면서 한/영 표시가 나오면 좋을 것이다.

2019년 3월 13일 수요일

도마 위에 진공관 앰프 꾸미기

식재료를 다듬기 위해 칼질을 할 때 밑에 받치는 물건이 도마다. 순 우리말로서, 체조 경기 종목 중 하나인 도마(跳馬)와는 아무런 상관이 없다.

나무판은 앰프 자작을 할 때 부품들을 늘어놓는 용도로 흔히 쓰인다. 하지만 일부러 나무판을 재단해 오려면 상당히 귀찮은 일이라서, 주변에서 흔히 구할 수 있는 재료로 대체하는 일이 많다. 그때 쓰이는 것이 바로 나무로 만든 도마다. 요즘은 다이소에 가면 매우 저렴한 가격에 도마를 살 수 있다.

아파트의 폐기물 내놓는 곳에서 제법 쓸만한 도마를 구하게 되어 여기에 43 오극관 싱글 앰프를 올리기로 하였다. 목공을 잘 모르기 때문에 어떤 재질의 나무인지는 모른다. 나사못이 술술 들어가는 것으로 보아 굉장히 무른 재질임을 알 수 있다.


R코어 출력 트랜스의 받침대에 각재를 덧댄 다음에 공구통에서 굴러다니던 작은 경첩을 달아서 도마에 고정하였다. 경첩의 움직임을 이용하려는 것은 전혀 아니고, 다만 ㄱ자 꺾쇠를 대신한 것이다. 두 개의 코어에 케이블타이를 가로질러 묶어서 도마를 기울여도 트랜스가 쏟아지지 않게 하였다.


진공관 바로 곁에서 나사못을 박으려고 스크류 드라이버를 쓸 때에는 주의를 해야 되겠다. 자꾸 진공관을 드라이버로 툭툭 건드리게 되니 말이다. 비싼 진공관은 아니지만 깨지면 아깝다. 내가 소유한 모든 물건 중에 가장 오래된 것이니(1940년대 제조)...


소켓 가이드와 러그판 등을 사용해서 도마 위에 멋지게 재배선을 할까 여러날 고민하였지만 일단은 이대로 두기로 하였다. 심지어 출력 트랜스에 케이스를 씌우려던 생각도 접었다. 현 상태로도 소리는 매우 잘 나고, 첫 작품을 원형 그대로 보존하는 것이 의미도 있기 때문이다. 대신 6N1+6P1 싱글 앰프용 출력 트랜스(아마도 EI 코어를 쓴 기성품)은 따로 구입을 하는 것이 좋겠다. 트랜스 하나를 여러 앰프에 바꾸어 가면서 듣는 것도 한계가 있지 않은가. R코어에 다시 한번 에나멜선을 감으려니 엄두가 나질 않는다. 57 코어(싱글 5 와트) 정도를 염두에 두고 있다.

도마를 사용하여 전기기타를 만드는 사람도 있다. 물론 따라서 할 엄두는 나지 않는다.


출처: https://www.instructables.com/id/Cutting-Board-Electric-Guitar/

[Bash, shell] 구분자가 포함된 문자열의 조작 기법

예전에는 늘 Perl을 써서 작업하던 것을 shell 수준에서 구현하기 위해 노력하고 있다. 제목에서 밝힌 문자열은 사실은 파일의 제목을 의미한다. 오늘 글을 쓰는 목적은 NCBI에서 다운로드한 파일을 하나 가득 들어 놓고는 제목을 한꺼번에 변경하기 위한 방법을 정리하기 위함이다. 특정 균주(Paenibacillus polymyxa E681)에 대한 RefSeq assembly 다운로드 사이트(링크)를 방문해 보자.


파일의 이름은 '필드1_필드2_필드3_..' 형태이다. 여기서 구분자는 밑줄 문자(_, under)이다. 위치를 기준으로 하여 원하는 필드만 조합하여 파일명을 단순하게 바꾸는 사례를 알아보자. NCBI에서 유전체 정보를 일괄적으로 다운로드하여 이름을 바꾸는 방법은 나의 위키 페이지(링크)에 상세히 설명하였다. 여기에 나온대로 따라서 하면 다음과 같은 형태의 파일을 얻는다.

Rhodococcus_sp._H-CA8f_GCA_002501585.1.fna

때로는 빨갛게 표시한 부분만을 떼어서 파일명으로 삼고 싶을 때가 있다. iTOL 서버를 쓰는 경우에는 단순하게 표시된 자료로 만든 newick tree file을 업로드한 다음 실제로 표시할 label을 별도로 제공하는 것이 더 합리적이다.

그렇다면 위에서 보인 파일명을 구분자(_)로 나눈 뒤 5, 6번째 필드를 붙인 것으로 바꾸면 된다. 이때 유용한 명령어는 cut이다.

$ ls *fna | while read F
> do
> mv $F $(cut -d'_' -f5,6 <<<$F)
> done

꺾쇠 세 개가 연달아 표시된 줄이 약간 난해한데, 어쨌든 잘 작동은 한다. 그러나 이 방법은 필드의 수가 엄격하게 고정된 경우에 한하여 쓸 수 있다. 파일명의 세번째 필드, 그러니까 strain 명에 해당하는 곳에 또 밑줄이 들어간 경우가 종종 있다. 'ATCC 842'와 같이 원래는 공백이지만 파일명에 공백을 넣는 것이 별로 바람직하지 않기 때문에 밑줄을 추가적으로 넣게 된 것이다. 이러한 상황에서는 '구분자를 떼어낸 다음 몇 번째 필드를 취하라' 하는 식으로는 원하는 결과를 얻기 어렵다. 차라리 '앞에서 처음, 혹은 뒤에서 처음'하는 방법이 더 낫다. 이때 BASH의 문자열 조작 기법이 매우 유용하게 떠오른다.

상세하게 공부를 하려면 Advanced Bash-Scripting Guide의 제10장 Manipulating Variables를 숙독하라. 나는 여기에서 꼭 필요한 부분만을 골라서 설명하겠다. 다음의 예제만 잘 보면 뭐가 어떻게 돌아가는지를 잘 알 수 있다. #와 %는 앞 또는 뒤로부터 시작하는 매치를 삭제하는 것이다. *를 쓰지 않고 ${NAME#_}라고만 쓰면 앞부분부터 시작해서 첫번째 '_'가 나오는 곳까지를 삭제할 것만 강렬한 욕구가 느껴지지만 이건 오해다(사실 이것 때문에 혼동을 많이 했다). 반드시 *_라고 써야 하고, #를 사용하는 경우에는 _*라고 해야 한다. #와 ##, %와 %%의 차이는 shortest(하나) or longest match(둘)를 의미하는 것이다.

$  NAME=abc_def_123_456.txt
$ echo ${NAME#*_}
def_123_456.txt
$ echo ${NAME##*_}
456.txt
$ echo ${NAME%_*}
abc_def_123
$ echo ${NAME%%_*}
abc
$ echo ${NAME/_/XYZ}
abcXYZdef_123_456.txt
$ echo ${NAME/_*/}
abc
$ echo ${NAME/*_/}
456.txt

그러면 파일명을 구성하는 필드의 수가 일정하지 않다 하더라도 맨 뒷부분을 이용하여 assembly accession만을 떼어내는 것이 가능하다.

$ ls *fna | while read F
> do
> mv $F GCA_${F##*_}
> done

변수 F의 앞에서부터 시작하여 *_를 longest match로 삭제하면 ...GCA_의 나머지 부분이 남는다. 이렇게 얻은 값의 앞에 다시 GCA_를 붙이면 된다. 혹은 while-do 블록 내의 명령어를 mv $F GCA_${F#*_GCA_}으로 써도 결과는 같다. _GCA_는 변수 F의 값에서 단 한번만 존재하므로(철저한 사람이라면 균주명에 앞뒤에 공백을 포함하는 GCA라는 이름이 들어있지는 않은지 확인을 해 보겠지만) #를 한 번만 써도 된다.

대충 써 왔던 기법이 이제 좀 정리가 되었다.

2019년 3월 8일 금요일

밀린 윈도우즈 업데이트 - 업데이트가 되지 않을 때 해결 방법

3월 8일이 되어서야 3월의 첫 포스팅을 하게 되었다. 무엇인가 무척 바쁘거나, 심경의 변화가 있거나(개인적인 글을 인터넷에 올리는 것에 대해서 회의가 들기 시작했다거나) 등등의 핑계를 댈 수 있겠다.

언제부턴가 Windows Update가 되지 않기 시작하였다. 업데이트의 의미는 새롭고 신기한 기능을 제공하는 것도 있지만 그보다는 보안을 향상시키는 것에 있다.

도대체 문제가 무엇일까? 구글링을 하여 이런 메시지가 나올 때 대처하는 방법을 찾아보았다. 마이크로소프트 커뮤니티에서 제공하는 공식적인 해결책을 하나 찾았다.

Windows Update 확인을 할 수 없습니다

이대로 하나씩 따라서 하면 몇 달 동안 밀린 업데이트를 할 수 있으리라 생각을 했다. 그런데 세번째 단계에서 C: - WINDOWS - SoftwareDistribution 폴더의 이름을 변경할 수가 없는 것이었다. 이건 또 왜 이런가?

새로 발견한 문제를 해결하기 위해 영문으로 검색을 해 보았다.

cannot Rename SoftwareDistribution folder error "the action can't be completed because the folder or a file in it is open in another program"

될까? 여기에 나온대로 따라서 했더니 SoftwareDistribution과 softwaredostribution.old의 두 가지 폴더가 보인다. 무슨 원리인지는 모르겠으나 SoftwareDistribution 폴더는 계속 새로 만들어진다는 생각이 들었다. 여기까지 한 다음 다시 첫번째 사이트의 지시대로 나머지 과정을 진행한 뒤 윈도우즈 업데이트를 실행하였다.

20개의 업데이트가 나를 기다리고 있다! 다행이다. 밀린 숙제를 하러 공책을 펼친 기분이다. 이것이 다 끝나면 퇴근을 해야 되겠다.