2015년 8월 25일 화요일

awk의 매력

awk는 개발자(Alfred V. Aho, Peter J. Weinberger, Brian W. Kernighan)의 머릿글자를 딴 유틸리티로서 그 자체로 완벽한 "pattern-scanning & processing language"이다. 쉼표나 탭으로 구분된 필드를 지닌 텍스트 파일을 줄 단위로 읽어들여서 패턴을 탐색한 뒤 그 여부에 따라 조작된 결과를 내보내는 도구이다.

(바이오)펄이나 (바이오)파이썬을 사용하여 훨씬 고차원적인 일을 할 수 있음이 당연하다. 반면 awk는 매우 간단한 문법으로도 이에 버금가는 일을 하기에 부족함이 없다. 요즘은 Next-Gene Sequencing 데이터를 비롯한 염기서열 데이터를 awk로 조작하는 방법에 대한 문서를 작성하고 있다. 오류를 수정하고 테스트가 끝나면 인터넷을 통해 공개할 계획이다. 약 10쪽 내외의 분량이 될 것이다.

내가 처음으로 Perl을 익히면서 독학용 교재로 삼은 것은 바로 다음의 자료이다.

Perl in 20 pages by Russell Quong

1998년에 만들어진 이 문서의 원본 사이트는 더 이상 존재하지 않는 듯. 그 이후로 제대로 돈을 주고 산 Perl 관련 책은 [펄 쿡북] [Programming the Perl DBI] [Official Guide to Programming with CGI.pm]이 전부이다. 대부분의 자잘한 실무적인 기법들은 인터넷을 뒤져셔 구한것이 전부이다. 항상 부족하지만 그래도 개인적으로는 약 15년간에 걸쳐서 많은 발전을 이루었다고 자부한다.

2015년 8월 24일 월요일

이유 있는 게으름

나는 마감 일정에 쫒기어 일을 하는 것을 무척 싫어하는 성격이라서, 여유를 두고 일정을 짠 뒤에 업무를 처리하는 것이 습관이 되어 있다. 역설적인 현실이지만 가끔은 너무 빨리 일을 처리하여 도리어 손해를 보는 일이 생기기도 한다.

마감일이 멀찌감치 남은 일은 그만큼 많은 시간을 두고 심사숙고하여 알차게 내용을 채우라는 뜻이다. 그렇지만 이런 일은 항상 긴급을 요하는 일에 밀려서 계속 뒤쳐지게 된다.

'시간적 여유가 있으니까 급한 일 먼저 하지 뭐.'

이러다 보면 결국은 마감일이 다 되어서야 이 일을 하게 된다. 길었던 시간적 여유는 이 일에 거의 소용이 되지 못한다. 어쩌면 이렇게 일을 하는 것이 시간을 가장 효율적으로 쓰는 방법인지도 모른다.

늘 내일이나 주간의 할 일을 기억하거나 기록하려 애쓰고, 다이어리를 들고 다니면서 잠자리에 들기 전에도 떠오르는 일거리를 메모하고... 이런 생활 방식이 최선이라 생각했었는데, 요즘은 이런 태도가 나의 정신적 건강을 자꾸 갉아먹고 있다는 생각이 들었다. 시간적 여유가 있음에도 불구하고 빨리 일을 처리하고 다른 일을 하려다 어처구니없는 실수도 가끔 저지르기도 하고, 머리속은 늘 생각으로 꽉 차서 마음의 여유를 갖지 못한다.

스스로를 자꾸 채찍질하고 있다는 느낌을 지울 수가 없는 것이다.

조바심은 피로감을 낳는다. 생각해 보니 그렇게 살아야 할 이유가 별로 없는 것이다. 쉼표를 찍고 간다는 생각으로 여유를 갖자. 내 스스로에게 관대하지 못하면 다른 사람에게도 어느새 짜증을 내는 나 자신을 발견하게 된다.

업무용 서버 랙 구입


인증샷에 내 발이 찍혔다.

일반적인 사무용 책상의 높이에 해당하는 12U짜리 미니 서버 랙을 구입했는데 깊이가 생각보다 깊다는 것을 미처 생각하지 못했다. 전체적인 모양은 마치 가정용 냉장고를 눕혀놓은 것과 유사하다. 앞의 문짝만 제외하면 캐비넷과 같은 구조라는 기분이 영 들지 않는다. 지난주에 납품과 함께 설치가 일부 완료되었지만 내부 구조를 마음에 들게 직접 바꾸다가 정말 쓰러지는 줄 알았다! 고정용 사각 볼트는 왜 이렇게 끼워지질 않고 또 선반은 왜 이렇게 무거운지.. 땀을 뻘뻘 흘리며 손톱이 부러지도록 고정 작업을 하였다. 무척 힘이 들었지만, 그러면서도 '흠, 적성에 맞는군'하는 생각이 드는 것은 왜일까?

지금은 기가비트 스위치와 1U 서버가 장착이 된 상태이다. 연구소내 다른 서버실에서 가동되는 2U 서버를 내일쯤 가져올 예정이다. 그러면 이산가족처럼 이곳저곳에 흩어져 있던 서버들이 한 자리에 모인다. 모니터 뒤에는 NAS가 얹혀있다. 무척 소박한 전산 시스템이지만 일개 생물학자에게는 원심분리기와 딥프리저, PCR 머신을 돌리는 실험실과 같은 매우 소중한 자산이다. 서버를 숨겨놓은 골방(원래 통신설비가 있는 방)과 내 사무실 말고는 별도의 실험 공간이 없으니 이것이 내 실험실인 셈이다.

이렇게 서버 랙을 살 줄 알았더라면, 올해 신규 구매한 서버(오른쪽의 타워형)도 랙 마운트 타입으로 살 것을... 그러면 전부 말끔하게 서버 랙  하나에 수납이 될텐데. 

언제 일어날지 모를 비상사태에 대비하면서 서버 작동 소음과 냉방기 소리로 귀가 따가운 서버실에서 애쓰는 전산실 종사자들의 노고를 0.1% 정도 이해할 수 있었다.

요즘 생활의 활력을 주는 세 가지 활동

첫번째, 음악.

악기를 연주하는 것, 음악을 만드는 것(작곡 혹은 레코딩), 음악을 감상하는 것. 최근 2년 간의 활동은 주로 음악을 듣기 위한 환경을 만드는데 지나칠 정도로 쏠려있다. 기타와 건반아, 미안해! 집과 사무실에서 좀 더 양질의 음악을 듣기 위해 앰프와 스피커를 마련하는 것에 큰 재미를 느끼는 중이다. 진공관 앰프, class D 앰프, 어설프게 만든 full-range 스피커 시스템 등. 음악을 만드는 일은 제대로 시작도 해보지 못했는데 계속 나의 일정에서 멀어져만 간다.

두번째, 컴퓨터.

동료들에게 컴퓨터를 이용한 미생물 유전체 분석 기법을 전수하면서 자연스럽게 리눅스의 기초와 활용 기술을 다시금 공부하게 된다. awk가 이렇게 멋진 기능이 많은 유틸리티였구나! 더구나 전산실 전문인력이 아니면서 직접 서버를 몇 대 운용하는 과정에서 자잘한 노하우를 많이 익히게 되고, 많은 즐거움과 보람을 느낀다. 지난주에는 조그만 서버 랙을 구입하여 흩어져있던 서버들을 모으고 있다. 조금 전에는 기가비트 네트웍 스위치에 랙 고정용 날개를 달아서 랙 맨 위칸에 고정하고 왔다. 땀을 뻘뻘 흘리면서...

세번째, 집 보수하기(DIY).

스피커 인클로저를 만들면서 남은 페인트가 일의 발단이 되었다. 습기에 노출되어 검게 썩어서 떨어져 나가던 욕실문을 보수하면서 집안의 다른 문과 창(틀)에 자꾸 관심이 간다. 한번에 다 해치우기는 어렵지만 주말을 이용하면 문 2~3개 정도는 작업이 가능할 것 같다. 테인트를 바르고 마르는 동안 다른 문짝을 작업하면 되니까 말이다. 물론 몸은 꽤 고단하겠지만 말이다. 스피커통을 마감하는 과정에서 자연스럽게 목재의 마감에 대한 관심이 늘어나게 되고, 살면서 조금씩 낡아가는 집을 다른 사람의 손을 빌리지 않고 직접 보수하는 일에 도전하는 재미가 쏠쏠하다.

2015년 8월 22일 토요일

욕실 문 보수하기

스피커 2호기를 만들면서 전면판을 칠하고 남은 수성 흰색 페인트를 활용하기로 하였다. 바로 욕실문을 보수하는 것. 욕실문은 물기에 노출되기 십상이라 페인트가 들뜨고 노출된 목재가 부식되는 일이 흔하다. 이걸 도대체 어떻게 보수를 해야 할지 항상 고민이었는데 벼르고 별러서 주말을 이용한 작업에 돌입하였다.

가장 간단하게는 근처 인테리어 업자에게 의뢰하여 문을 새로 마추어 다는 방법이 있겠고, 옥션등에서 ABS 욕실문을 주문하는 방법도 있겠다. 완전히 새로 만드는 것은 비용이 가장 높을 것이 뻔하고, 옥션에서 주문하면 상처 없이 무사히 배송이 이루어질 것인지 확신하기 어렵다.

직접 보수를 하려면 우선 문을 잘 말리고, 부식된 부분을 제거한 뒤 적당한 충전재로 매운다음 사포질 후 도료를 바르면 될 것이다. 그럼 깎아낸 부분은 무엇으로 메우나? 핸디코트 메꾸미 등 여러가지가 있는데, 철물점에서 하필이면 퍼티를 산 것이 잘못된 출발점이었다. 치약 튜브처럼 생긴 것에 들어있는 퍼티는 목재 틈에 써서 안 될 것은 없지만, 굳으면 평평하게 갈아내기가 어렵고 무엇보다 가격이 너무 비쌌다. 자동차 표면의 미세한 상처와 같이 상처의 면적이 좁고 성형 후에도 충분한 강도가 필요한 곳에 쓰는 것이 적합하다고 생각한다. 핸디코트는 너무 대용량으로만 파는 것 같고, 지금 생각해 보니 우드필러가 가장 적당한 것 같다. 메꿈재에 대해서는 좀 더 공부가 필요하다.

부식된 부분을 긁어내고 퍼티로 채운지 일주일이 지나 비로소 주말이 되었다. 마트에 가니 연마용 수세미가 있어서 그것을 구입하였다. 사포는 손가락이 너무 아파서... 다음부터는 마스크를 쓰고 하자. 떨어지는 가루로부터 눈을 보호하기 위해 보안경도 필요할지 모른다. 문짝과 문틀을 전반적으로 가볍게 연마한 뒤 주변에 마스킹용 테이브를 발랐다. 젯소는 생략하였다. 문에는 원래 백색 페인트가 발라져 있었는데, 퍼티로 성형한 곳(회색)과 페인트가 벗겨진 하부(나무색)에 새로 칠을 하려면 아무래도 젯소를 먼저 바르는 것이 유리할 것 같기는 했지만, 비용 절감 차원에서 과감히 생략하였다.


아쉬움이 많이 남는 결과물이다. 마른 후 붓 2종으로만 덧바르기를 계속하여 최종 결과물을 얻었다. 과감하게 롤러로 바르는게 더 나을 것 같다. 욕실 문을 수성 페인트로 칠한 것이 정말 제대로 한 작업인지는 아직도 모르겠다. 유기용제 냄새가 나지 않아서 작업을 하기에는 아주 좋았다. 아내는 이정도면 아주 괜찮다고 하지만 내 스스로 점수를 매긴다면 65점 정도? 바니쉬로 마감을 하면 80점은 될 것이다. 그러나 집에서 자가 수리를 하면서 뭐하려 페인트 + 바니쉬까지 바르겠는가. 도막의 보호가 필요하다면 모르겠지만.


왼쪽이 오늘 작업한 페인트. 약 반 정도가 남았다. 문짝 하나를 다 칠하고도(욕실문이라서 약간 작다) 반 밖에 쓰지 않았다면 너무 소심하게 아껴쓴 것이 아닐까? 오른쪽은 혹시 부족할지 몰라서 오늘 하나 더 사다 놓은 페인트이다. 마찬가지로 수성 반광 백색이다. 

매주 조금씩 시간을 투자한다면 집의 모든 출입문과 창문에 대한 도장 작업에 도전을 해도 될 것이라는 자신감이 생겼다. 다만 마스킹 테이프 작업을 꼼꼼하게 하는 것이 중요하다.

기존의 페인트가 심하게 벗겨져서 두께 차이가 눈에 뜨이게 나타나는 경우는 준비 작업을 어떻게 해야 할까? 들뜬 페인트는 소위 '헤라'라고 불리는 스크래퍼로 벗겨내면 된다. 그러나 아래와 같은 상태라면 아무리 사포질을 해도 울퉁불퉁할 것이 뻔한데 말이다.


페인트에 대해 공부를 좀 해보자. 수성 페인트는 아크릴이 바인더이고 주로 벽에 바르는 용도이고, 에나멜은 철이나 목재에 적합하다. 어쩌면 가정에서 나무에 바르기에는 수성 에나멜이 가장 적합할지도 모른다. 가격은 가장 비싼 편이다... 오늘은 여기까지만.





2015년 8월 15일 토요일

2호기 스피커 제작 마무리하기

스피커 유닛을 살 때 얻었던 그릴을 붙였다. 전면 배플판(MDF)은 수성 페인트(제비표페인트 A 워터락 반광 백색, 자작나무 합판은 문구점에서 파는 교재용 바니쉬('니스')를 여러번 칠했다. 아마 5-7회는 칠했을 것이다. 소품을 칠하기에 적당한 붓은 하나밖에 없고 유성 바니쉬를 씻을 신너도 없어서 스폰지에 묻혀서 칠해 보았다. 

전면 배플은 원래 네 귀퉁이에 나사못을 박아서 고정하려 하였었는데, 저 새하얀 판에 나사못이 노출되어 있으면 너무나 어울리지 않을 것 같아서 아직도 고정을 하지 않았다. 


철물점에서 구입한 외경 38mm PVC 파이프로 포트를 만들어 보았다. 길이를 제대로 재지 않고 접착제로 고정한 다음 앞면을 닫으니 아뿔싸! 스피커가 포트에 닿는다... 뒷판에 단단히 붙은 포트를 다시 떼어내느라 고생을 좀 했다.


옆에서 찍으니 검정색 그릴이 확실하게 잘 드러난다.


마르면서 얼룩이 진다. 아니, 정확히 말하자면 바니쉬를 여러번 칠하면서 약간 어두운 색조를 띠다가 시간이 흐르니 군데군데 밝아지기 시작한다. 이게 마르는 과정인지?


마감재를 구입하느라 배보다 배꼽이 더 큰 제작이 되고 말았다. 스피커 시스템을 만들기 위한 음향학적 고려와 계산보다 나무통 마감이 더 어렵다! 나무 재료에 따라서 무엇을 발라야 하는지, 어떤 번호의 사포를 가지고 갈아내야 하는지...

원래 전면판은 검정색 무광 락카를 칠하려 했었는데 흰색 수성 페인트를 여러차례 바른 것이 더 멋진 배색을 보여주고 있어서 만족한다. 측면에는 수성 바니쉬를 바르는 것이 가장 좋았을 것이다.  

남은 수성 페인트는 어디에 쓴다지? 욕실문이 일부 삭아서 보수를 해야 하는데, 수성 페인트는 영 넌센스다. 공부할 것이 하나 가득 남았다.

2015년 8월 13일 목요일

3인치 유닛을 이용한 스피커 2호기 제작

나의 자작 스피커 2호기와 2.5호기는 종이(하드보드지)로 매우 어설프게 만든 것이었다. 그래서 이번에 나무를 이용하여 제대로 통을 만들면서 여기에 공식적인 2호기 명칭을 붙이기로 한다. 종이로 만든 2호기와 2.5호기는 역사에서 지운다!

휴대용 카세트라디오에 스피커 유닛이 하나만 들어있다고 해서 이를 full-range 유닛이라고 하지는 않는다. 이번 제작에 사용한 유닛은 정격 4옴/50와트(86 dB)의 3인치급 제품이지만 풀레인지라고는 부르기 곤란하다. 재생 주파수 범위가 300~10,000 Hz에 불과하기 때문이다. 자작용으로 흔히 쓰이는 삼미 CW-77B10K(8옴/10와트)도 사양표 상에는 20,000 Hz까지 재생하는 것으로 되어 있는데, 내가 사용한 유닛은 이보다 가격이 더 싸다.

이번 2호기의 컨셉트는 매우 단순하다. 저렴한 유닛을 담아 책상 위에서 들을 작고 귀여운 스피커통을 만들자는 것. 용적이 어쩌고 포트 직경과 깊이가 어쩌고... 그런것은 완전히 무시한다. 전체적인 모양은 정육면체에 가깝게 하였다(폭 130 mm x 높이 145 mm x 깊이 150 mm). 전체적인 모양과 외형 수치에 대한 스케치를 전문 업체에 보내어 재단된 목재를 받았다. 측면은 12 mm 자작나무 합판, 전후판은 15 mm MDF로 하였다. 직경 79 mm로 뚫은 전면 배플판이 스피커에 딱 들어맞는다.


재단된 목재를 테이프로 붙여서 가조립을 해 보았다.


뒷면에는 직경 38 mm의 구멍이 뚫려있다. PVC 파이프를 쓰서 덕트를 달 예정이다. 단자대를 달 구멍은 내가 직접 뚫을 생각이다.


손바닥을 펼친 정도의 크기에 지나지 않는 소품이지만 사선으로 절단된 측판 4개를 어떻게 붙이는 것이 가장 적합할지 감이 도무지 잡히지 않았다. 뒷판을 바닥에 놓고 측판을 둘레에 목공본드로 접착한 뒤 운동화 끈으로 붙들어 묶었다. 나름대로 평평한 바닥에서 기준을 잡겠다고 식탁 유리에서 조립을 했는데 본드가 다 굳고 보니 약간의 단차가 발생하였다.


위 사진에서 네모 형태의 틀은 전면판이 쑥 들어가지 않게 하는 지지대이다. 전면판을 고정할 나사못이 여기에 박히게 된다. 전후판을 측판의 단면을 덮게 하는 방식과 내부로 들어가게 하여 측판의 단면이 노출되게 하는 방법이 전부 가능한데, 자작나무 합편 특유의 단면이 노출게 하기 위해서 내부로 넣는 방식을 택하였다. 단 좀 더 예뻐보이게 하려고 측판보다 3 mm 정도 더 들어가게 하였다.

전면판의 지지대를 측판 조립과 동시에 해야 하는지, 혹은 통을 조립한 다음에 넣어야 하는지를 고민하다가 후자의 방법을 택했다. 접착제가 다 굳은 뒤 지지대를 통에 넣으니 너무 뻑뻑하여 한참을 사포질을 하였다. 지지대를 정확히 18 mm 내부에 붙이기 위해 버니어 캘리퍼를 사용하였다.

스피커를 고정한 전면판은 아직 정식으로는 고정하지 않고 살짝 밀어넣은 상태이다. 이제 소리를 들어보자. 소스는 아이패드(멜론) + 최근 딸아이와 함께 만든 TPA3125D class D 앰프이다.


오잉? 생각보다 저음이 약하다. 전에 종이로 만든 인클로저보다 오히려 조금 더 가볍다는 느낌이 든다. 그때는 덕트가 전면에 있어서 그런 것일까? 아니면 사무실에서 매일 듣는 1호기(4.5인치급)보다 직경이 줄어서 그런가?  내 귀에는 한참 부족한데 딸아이는 소리가 좋다고 해 주니 고마울 따름이다.

재단을 외부에 맡겼으므로 이번 제작은 종이로 통을 만들 때보다 훨씬 수고가 덜 들어갔다. 그래도 명색이 나무인데... 저가 유닛은 어차피 안고 가야 할 운명이니 그대로 두고, 포트와 흡음재 정도로 최종 튜닝을 해 보겠다. 마감은 또 어떻게 한담! 인클로저 설계에 대한 이론은 전부 건너뛰고 만들었지만 마감(사포질+칠)을 위해 또 공부를 해야 한다...