2021년 9월 30일 목요일

SLR의 펜타미러 정렬 틀어짐에 관해 검색을 해 보다

지난 일요일, 올림푸스 DSLR E-620 뷰파인더의 문제점에 대하여 글을 쓴 일이 있다(링크).  뷰파인더 상에서 피사체를 정중앙에 놓고 사진을 찍었지만 실제로 찍힌 이미지에서는 오른쪽 아래로 심하게 치우치는 현상을 카메라 구입 11년째에 확인했다는 내용이었다.

국외 사이트에서 나와 같은 문제에 대한 질문과 답을 찾았다. 

[DPREVIEW] Viewfinde lost its accuracy.. please help.

...Sounds like the viewfinder pentamirror is out of alignment.

카메라 제조사의 서비스 센터에 가서 조정을 받으라는 것이 답변이었다. 그렇군! 왜 그런 생각을 못했을까? 부품을 교체할 필요는 없을 것이다. 오래 전에 단종이 된 모델이라서 수리를 위한 부품이 있을 것 같지도 않다.

그러나 만약에 조정을 할 수 있는 여지가 없다면? 예를 들어 나사를 돌려서 각도를 조절할 수 있는 것이 아니라 펜타미러 어셈블리가 접안부에 완전히 접착된 상태라면? 별로 생각하고 싶지 않는 상황이다.

올림푸스 카메라의 국내 A/S는 2026년 3월 말에 완전히 종료된다. 서비스점은 용산 한 곳밖에 남지 않았다. 완전히 문을 닫기 전에 가 봐야 되겠다.

2021년 9월 27일 월요일

캐논 EOS 5는 살아나기 어려울 것 같다

EOS 5D가 아니라 1992년 11월 출시된 EOS 5 이야기이다. 135 포맷의 필름을 넣어 사용하는, 구식 SLR 카메라 말이다. 뷰파인더 내에 세로로 배치된 5개의 포커싱 표식 중 원하는 곳을 눈으로 바라보면 알아서 초점을 맞추어 주던 기능이 당시에는 정말 놀라웠었다.

EOS 5 QD + EF 28-105 mm 1:3.5-4.5 USM 렌즈
이 카메라를 마지막으로 쓴 것이 언제인지는 잘 기억이 나지 않는다. 1993년에 종로에서 구입을 하여 나의 주력 카메라가 되었고, 2006년 미국 출장길에서도 열심히 쓴 것이 아마도 마지막 활용 기억인 것 같다. 그 후로는 조금씩 디지털 카메라에서 휴대폰으로 사진 촬영용 도구구의 취향이 바뀌면서 장식장 안에서 고이 잠을 자고 있었다.

필름을 넣고 사진을 찍지 않는다 해도 가끔 셔터를 눌러 보든지 하면서 동작을 시켜 보았다면 훨씬 더 좋은 상태로 보존이 되었을 것이다. 배터리(2CR5)를 일부러 사기도 귀찮아서 그냥 방치한 채로 벌써 몇년이 흘렀을까. 어제는 6V 어댑터에 악어 클립을 연결하여 전원을 넣어 보았다. 오디오 앰프를 만드느라 납땜질을 꽤 하는 편이니 이런 수준의 연결 작업은 일도 아니다. 상부 액정창에 표시는 뜨는데 배터리가 부족하다는 경고가 나타난다. 멀티미터로 찍어 보니 전압은 잘 나오는데 왜 그럴까? 전류량이 부족한가? 요즘은 구하기 어려운 신품 2CR5 배터리를 구입하여 넣으면 과연 렌즈가 '삐리릿' 소리와 함께 힘차게 돌아가면서 '철커덕'하면서 셔터가 작동할 것인가? 혹은 배터리 값만 날리는 일이 되려나?

렌즈를 분리하니 거울면이 뿌옇다. 오랜 시간이 지나면서 먼지가 많이 묻었으리라. 전원 연결 시험에 실패했으니 본체와 렌즈의 작동상태를 전부 알 수 없는 상황이다. 차라리 적당한 가격의 중고 DSLR 바디만을 구입하여 소장 중인 몇 개의 EF 렌즈 꽂아 활용하는 것이 나을 수도 있다. 그러나 곧바로 풀프레임이냐 혹은 크롭 센서(APS-C) 바디냐의 선택 문제에 직면하게 된다. 만약 크롭 센서 바디라면, 광각과 표준을 아우를 EF-S 렌즈를 추가적으로 구입해야 한다. 차라리 초기 세대의 EOS 5D 바디를...?

이래도 돈, 저래도 돈이 든다.

두물머리의 풍경. 올림푸스 E-620으로 촬영.


2021년 9월 26일 일요일

올림푸스 E-620 광학 파인더 시야(율)의 문제 - 왜 한쪽으로 치우쳐서 찍히는가? (뷰파인더 쏠림 현상의 뒤늦은 발견)

올림푸스 DSLR E-620의 광학 파인더 시야율은 약 95%라고 한다. 고급형 카메라에서는 100%에 가까운 시야율을 제공하는 것이 일반적이다. 최근 여행길에 이 카메라를 이용하여 사진을 찍으면서 분명히 피사체를 화면 정가운데에 놓고 촬영을 했음에도 불구하고 결과물에서는 한쪽으로 몰리는 경향이 있음을 발견하였다. 2010년 11월에 구입하여 이 카메라를 열심히 사용하던 당시에는 그저 부족한 시야율 문제라고 생각했던 것 같다. 시야율이 아무리 낮아도 정중앙 영역이 잘 유지되면 괜찮을 것이다. 그러나 한편으로 치우친다면 여간 심각한 문제가 아니다. 사용자 매뉴얼을 놓고 화면에 거의 차게 맞춘 다음 촬영한 결과를 보자. 렌즈는 표준 줌인 Zuiko Digital 14-42 mm 1:3.5-5.6 ED을 사용하였다.

42 mm에서 촬영.

14 mm에서 촬영. 광각렌즈 특유의 왜곡('barrel distortion')이 선명하다.  

뷰파인더에서 분명히 큐브를 정가운데 놓고 촬영을 하였다. 그러나 실제로 찍힌 이미지에서 큐브는 어디에 위치하고 있는가?

이게 뭐람! 최소한 중앙은 맞추어 줘야 하는 것이 아닌가? 보이는 그대로 찍는다는 (D)SLR의 장점이 무색해지는 순간이다. 렌즈를 망원계 줌으로 바꾸어도 결과는 마찬가지이다. 물론 미러를 들어올리고 라이브 뷰 촬영을 하면 이런 문제는 생기지 않는다. 설계의 문제인가, 제조 공정상의 문제인가? 카메라를 떨어뜨려서 펜타미러가 뒤틀린다 해도 이런 일은 벌어지지 않으리라.

만약 충분한 여유를 두지 않고 화면을 꽉 차게 구성을 한다면 오른쪽 아래 구석이 이미지 경계선에 바싹 붙어서 매우 어색한 사진이 될 것임이 자명하다. 그렇다면 매번 촬영 후에 이미지 편집 프로그램에서 크로핑을 해야 된단 말인가? 아니면 뷰파인더에 프레임이 표시되거나 보정되지 않는 레인지파인더 카메라를 쓰는 기분으로 촬영을 해야 하는 것인지... 화면을 구성한 다음 카메라를 살짝 움직여서 찍어야 하는가?

카메라 구입 후 11년째에 재확인한 문제점이라니! 비슷한 문제점에 대한 글을 구글 검색에서 찾기가 어렵다. 올림푸스 E-620 고유의 제조 결함이라면 사용자 커뮤니티에서 난리가 났을 것이다. 운 나쁘게 내 카메라만 그렇다고 봐야 할 것이다. 이 정도의 문제라면 제조 후 검수 과정에서 걸려졌어야 할 터인데 당시에는 시야율이 적어서 그런 줄로만 알았지 중앙에서 이렇게 한참 떨어진 곳을 뷰파인더가 겨냥할 것이라고는 생각도 하지 못했다.


2021년 9월 23일 목요일

2021년 9월에 올림푸스 DSLR E-620을 쓴다는 것은...

디지털 카메라의 시장이 해가 갈수록 쭈그러들고 있다는 것은 누구나 다 아는 사실이다. 레트로 감성에 필름 카메라와 바이닐(LP)이 잠시 인기를 얻고 있지만 산업의 흐름을 바꿀 정도는 되지 못하는 것으로 안다.

스마트폰이 일반인을 위한 카메라 수요를 흡수하면서 소위 전문가용 카메라로 불리던 DSLR은 아예 판형을 풀프레임(과거 필름의 크기와 같은 36 x 24mm)으로 키우거나 혹은 동일한 센서 크기를 갖는 미러리스로 체제를 바꾸어서 진지한 아마추어 계층을 흡수하고 있다. 그래도 과저 필름 DSLR의 전성기에 비교할 바는 아니다. 여전히 글로벌 시장에서는 캐논이 가장 큰 비중을 차지하고 있지만, 풀프레임 미러리스라는 새로운 유행을 불러 일으킨 데에는 소니가 크게 기여한 것 같다.

나도 한때는 꽤 진지하게 사진을 찍고 직접 암실 작업(흑백)을 하던 사람이었다. 그런데 그게 벌써 30년 가까운 과거의 일이 되고 말았다. 거실 장식장에는 이제 작동 상태를 신뢰할 수 없는 카메라 본체와 렌즈가 꽤 많이 잠을 자고 있다. 나 역시 뒷주머니에 꽂고 다니던 휴대폰을 꺼내어 사진을 찍고, 특별한 후처리 없이 구글 포토에 그냥 자동 업로드하는 사진 생활에 익숙해졌기 때문이다.

나의 첫 DSRL은 올림푸스의 E-620이다(PRREWIEW에 실린 정보 링크). 2010년 11월 초에 두 개의 줌렌즈를 포함한 키트를 할인 행사 가격에 구입하여 한동안 잘 사용하였으나, 만 4년째가 되면서 IS(image stabilization) 기능에 문제가 생기면서 점점 쓰지 않게 되었다(관련 글 링크). 그런 일이 벌어진 직후 가족 여행을 위해 펜탁스 Q 10(5-15mm 렌즈킷)을 구입하여 조금 쓰다가 현재와 같이 스마트폰으로만 사진을 찍는 체제로 굳어지게 되었다. E-620은 다른 필름 카메라와 마찬가지로 거실 장식장 속에 갖인 상태로 몇 년을 그대로 지내고 있었다. 

어떤 일이 갑작스런 계기가 되었는지는 잘 기억이 나지 않는다. 이번 추석 연휴를 보내면서 문득 (D)SLR의 감성이 그리워지기 시작했다. 터치 스크린이 아니라 손으로 직접 하드웨어 버튼(또는 다이얼)을 조작하고, 아이 레벨 뷰파인더에 직접 눈을 대고 피사체를 바라보며 셔터 릴리즈 버튼을 누르는 경험을 다시 해 보고 싶었다. 배터리를 충천하여 실로 오랜만에 카메라를 조작해 보았다. 확실히 Ansmann의 호환 배터리는 문제가 있었다. 충분한 시간을 충전하였지만 충전기의 표시등이 녹색으로 바뀌는 것이 아니라 적색 상태에서 깜빡거리는 것을 발견하였다. 그러나 정품 배터리는 제대로 작동을 하였다. 넥 스트랩의 중간에 덧댄 미끄럼 방지용 인조 가죽(?)은 부스러지기 시작하였고, USB 단자를 덮는 고무 마개는 케이블을 꽂기 위해 젖히는 순간 탄성이 다 없어져서 툭 부러져 버렸다.

비록 오랜 세월을 견디면서 일부 외장재는 이렇게 부스러지는 상태였으나, 2014년 11월에는 분명히 문제가 있던 E-620가 마치 잠에서 깨어나듯 조금씩 제 기능을 되찾기 시작하였다. 처음에는 작동이 되다 안되다는 반복하는 것으로 여겨졌으나, 그것은 상태가 나빠진 호환 배터리를 충분히 충전하지 못해서 생긴 문제였던 것 같다. 


어댑터를 통해서 헬리오스 수동 렌즈를 끼워 보았다.

올림푸스한국은 2020년 5월, 국내에서 카메라 사업을 완전히 종료함을 밝힌 바 있다. 사후 서비스는 2026년 3월 31일까지 한시적으로 운영된다. 한국 소비자들이 유난히 센서의 크기에 집착하는 것이었을까? 공식적으로는 한국 시장에서 물러나는 것이지만, 올림푸스가 계속 카메라를 생산할지는 알 수가 없다. 마이크로 포서즈 형식의 카메라 및 호환 렌즈는 앞으로 나온다고 해도 해외 직구를 통해 사는 것 말고는 구입할 방법이 없다. 게다가 E-620은 훨씬 전에 버림받은 '포서즈' 형식이 아니겠는가? 올림푸스의 마이크로 포서즈 시스템 바디 모델 번호 체계는 너무나 헷갈리므로 별도의 문서를 참조하는 것이 낫다. OM-D는 E-M# 형태의 바디에 해당하는 것 같다.

다행스럽게도 어제 하루 동안의 출사에서 배터리 문제를 제외하면 E-620은 별 문제가 없이 작동하는 것처럼 보였다. 2014년 늦가을 당시에는 왜 IS 불량 현상이 빚어졌는지 이해할 수 없을 정도였으니 말이다. 하지만 '가전제품'과 다를 바가 없는 DSLR 본체가 앞으로 얼마나 잘 작동할지는 예측하기 어렵다. 만약 E-620 본체가 정말로 수리가 어려울 정도로 망가진다면, 14-42 mm및 40-150 mm의 두 줌렌즈는 어디에 쓴단 말인가? 예비용으로 적절한 마이크로 포서즈 바디와 렌즈 어댑터(MMF-1/2/3)을 구해 두는 것이 옳을까? 아니면 차라리 캐논의 보급형 DSLR 바디를 사서 역시 놀고 있는 EF 렌즈를 끼워서 쓰는 것이 바람직할까?

추석 연휴 마지막 날에 군산에서 올림푸스 E-620으로 찍은 사진 몇 장을 올려 본다. 휴대폰으로 찍은 세로 사진 혹은 좌우로 긴 사진만 보다가 오랜만에 4:3 비유의 이미지를 보니 정말 느낌이 새롭다. 촬영 정보를 살펴보면 해상도는 휴대폰보다 더 낮다. 최대 해상도인 4032 x 3024 픽셀로 촬영해도 구글 포토의 무제한 업로드 기준인 1,600만 화소에 미치지 못한다.




자작 오디오 앰프가 제자리를 잡으면서 여가 시간에는 영화를 보는 것 말고는 별로 할 일이 없게 되었으므로 자연스럽게 다시 사진(장비)에 관심을 갖게 된 것일까? 다음에 관심을 갖게 될 대상은 혹시 자전거는 아닐까? 몇 가지 되지 않는 분야를 빙글빙글 돌아다니는 것만 같다.

IS 기능이 망가진 것은 확실하다. IS 설정을 하면 빨간 경고 표시가 깜빡거린다.



2021년 9월 17일 금요일

박테리아 분류의 새로운 바람

그동안 Bacillus라는 genus는 최신의 잣대로는 별로 관계가 없는 박테리아까지 한데 품어주는 넉넉한 집 역할을 해 왔었다. 작년이었던가, 유전체학 시대에 걸맞는 분석 결과를 근거로 이렇게 많은 식구를 거느리던 바실러스 가족은 새로운 genus로 하나 둘 독립해 나가가기 시작하였다. 가장 큰 집안이었던 Bacillus subtilisBacillus cereus clade는 변화가 없지만, 나머지 것들은 생소한 genus 명을 갖게 된 것이다.

이러한 혁명적(?) 수준의 변화를 가져다 준 2020년의 주요 논문을 직접 찾아서 읽어보는 것이 올바른 자세임에는 틀림이 없다. 그러나 그것이 성가시다면, 중요한 사실을 요약하여 작성한 가벼운 글을 인터넷에서 찾아서 읽는 것도 나쁘지 않을 것이다. 다음의 글은 찰스 리버 연구소에서 근무하는 Christine Farrance라는 사람이 지난 7월에 게재한 글이다.

Reclassification of Bacteria Happens 

이 글이 실린 Eureka: a dose of science라는 웹사이트는 찰스 리버 연구소의 과학 블로그라고 한다. 블로그를 방문해 보면 히스패닉 문화나 흑인 과학자에게 경의를 표하는 등 과학 그 이상의 정신을 담고 있었다. 별 영양가도 없는 유튜브에서 이상한 뉴스, 해괴한 동영상을 보느니 이런 곳에 올라온 자료를 보는 것이 훨씬 나을 것이다.

새롭게 제안된 분류 체계에서 B. velezensisB. siamensis는 어떻게 자리를 잡고 있는지 아직 상세하게 살펴보지는 못하였다. Farrance가 소개한 논문(Patel and Gupta, Int. J. Syst. Evol. Microbiol. 2020;70:406–438 링크)의 그림을 보면 이들은 전부 B. subtilis clade에 속하므로 그 분류학상 위치가 달라지지는 않을 것이다.

Clostridium botulinum도 더하면 더했지 바실러스보다 나은 상황이 아니다. 내가 몇 가지 분석을 해 보았을 때 genus 수준에서 재분류를 해야 함이 명백하다. 그런데 누군가 이를 논문으로 정식으로 제안을 하여 미생물 분류학계에서 인정을 받는다면, 질병관리청과 같이 이 세균을 법률로써 다루어야 하는 공식 기관에서는 많은 어려움을 겪게 된다. 예를 들어서 보툴리눔이 4개의 새로운 종으로 나뉜다고 가정해 보자. 몇 가지 법에서 정의한 고위험성병원체 체계를 이에 맞추어 고쳐야 한다.

대장균(Escherichia coli)는 세균성 이질을 일으키는 Shigella와 유전체학적 기준으로는 다를 바가 없다. 그러나 이를 만약 한 종으로 합쳐 버린다면? 식품에는 허용하는 대장균의 수가 있지만 내가 알기로 이질균은 있어서는 안된다. 그러나 과학적으로 상당한 근거가 있다 하더라도 그 경계를 허물거나 혹은 새롭게 만드는 것의 파급 효과는 상당히 크다. 미생물 분류의 문제가 과학만으로 끝나는 것이 아니라 국민의 안전 및 보건을 다루는 영역까지 건드린다는 것이 엄연한 사실이다.

'아버지를 아버지라 부르지 못하는' 안타까운 일이 미생물 학계에서도 벌어지고 있다. 

EMBOSS "msbar" 명령어는 좀 이상하다

$ wossname msbar
Find programs by keywords in their short description
SEARCH FOR 'MSBAR'
msbar  Mutate a sequence

EMBOSS의 mabar 명령으로 박테리아 유전체 염기서열에 인위적으로 SNP를 도입한 뒤 몇 가지 계산 작업을 하였다. SNP의 수는 10개에서 200까지 총 20 단위로 하였고, 30번씩을 반복하였다. msbar는 도입한 염기 변이의 위치를 별도로 제공하지는 않는다. 

SNP 검출 프로그램을 사용하여 내가 과연 제대로 일을 하고 있는지 궁금하여 각 변이 유전체에 대하여 최종 점검을 해 보았다. 결과는 너무나 이상하였다. msbar를 통하여 도입한 수에 비하여 약 75%에 불과한 숫자가 나오는 것이 아닌가. Sensitivity나 PPV(positive predictive value) 전부 99%를 훨씬 넘는 프로그램을 썼는데 이럴 수는 없다.

T. Seemann의 snp-dists를 사용하여 원본 유전체와 돌연변이 유전체를 직접 비교해 보았다. insertion/deletion은 전혀 없이 염기 치완 돌연변이만 도입하였으므로, 두 파일을 합쳐 놓으면 aligned FASTA 파일과 다를 이유가 없기 때문이었다. 결과는 역시 이상하게 나왔다. 모든 샘플을 다 건드리지는 않았지만 도입한 변이 수의 80%만이 실제로 존재하는 것으로 확인되었다. 이런 결과를 이용할 수는 없다.

CFSAN SNP Pipeline(PeerJ Computer Science 2015년 논문 링크)에서 성능평가용으로 개발한 SNP Mutator 프로그램을 써 보기로 하였다. 설정할 파라미터가 많지만 무엇보다도 돌연변이를 도입한 위치와 염기 정보를 고스란히 제공하기 때문에 결과물을 믿을 수 있다. 이 프로그램으로만든 돌연변이 유전체를 이용하여 필요한 계산을 하고 확인을 위해 SNP를 검출해 보았다. 놀랍게도 도입한 숫자가 거의 그대로 검출되었다. 결국 성능이 의심스러운 돌연변이 도입 프로그램을 쓰는 바람에 일주일을 허비한 셈이 되었다. 하지만 모든 과정을 일괄적으로 실행하는 스크립트와 결과 분석용 R 코드를 그런대로 잘 정비해 두었기에 SNP Mutator로부터 새로 시작하는 것은 그렇게 어렵지 않았다.

SNP Mutator의 중요한 특징은 다음과 같다.

  • Mutations can be any number of single-base substitutions, insertions, and deletions at randomly chosen positions, uniformly distributed across the genome.
  • Mutations can be chosen from a subset (pool) of all possible positions.
  • Replicates can be partitioned into multiple groups with each group sharing a pool of eligible positions.

의심의 눈초리를 거두지 말아야 한다. 언제 어떤 실수를 할지 모르므로.

2021년 9월 14일 화요일

[하루에 한 R] for loop를 이용하여 데이터프레임 생성하기

Column/Row를 구성하는 벡터가 전부 준비된 상태에서 데이터프레임을 만드는 것은 비교적 쉽다. 기존에 존재하는 데이터프레임을 cbind() 함수로 합치는 것도 마찬가지이다. 그런데 합쳐야 할 벡터가 수십 개 이상 된다고 하자. 이를 일일이 타이핑하기는 곤란하다. 반복문을 쓰지 않고서는 매우 어렵다. 

EMBOSS의 msbar 명령을 이용하여 박테리아 유전체 서열에 염기치환돌연변이를 일정하게 도입하였다. 그 각각이 원본 유전체 서열('ancestor'에 해당)에 대하여 얼마나 멀어졌는지를 Mash로 측정해 보았다. 목표로 하는 돌연변이 수에 대하여 msbar는 총 30회를 실시하였고, 돌연변이의 수는 10, 20, 30..200으로 하였다. 결과물은 전부 하나의 파일(dist.tab)에 저장하였다. 

$ head -n 5 dist.tab 
GCF_000008445.1.010.00.c.fnm	GCF_000008445.1.fna	1.61302e-06	0	9999/10000
GCF_000008445.1.010.01.c.fnm	GCF_000008445.1.fna	4.8398e-06	0	9997/10000
GCF_000008445.1.010.02.c.fnm	GCF_000008445.1.fna	0	0	10000/10000
GCF_000008445.1.010.03.c.fnm	GCF_000008445.1.fna	1.61302e-06	0	9999/10000
GCF_000008445.1.010.04.c.fnm	GCF_000008445.1.fna	9.68178e-06	0	9994/10000

첫번째 컬럼이 돌연변이 유전체 FASTA 파일의 이름이다. fna라는 흔한 확장자를 fnm('m' for mutation)으로 고쳤다. 파일명 중간쯤에 '010'이라는 숫자가 바로 돌연변이 수에 해당한다. 만약 10, 20...으로 표기를 했다면, 100을 넘어가는 결과와 함께 다룰 때 sort에 주의해야 한다. 그래서 약간 귀찮지만 이런 파일명을 쓴 것이다. 

하나의 돌연변이 숫자에는 총 30개의 Mash distance(위 자료에서 세번째 컬럼)가 있다. 이것을 뽑아내어 각기 다른 컬럼으로 만들고자 하는 것이 오늘의 목표이다. 돌연변이의 수는 총 10에서 200까지 10 단위로 증가하므로 20개가 되고, 이것이 목표로 하는 데이터프레임의 전체 컬럼 수가 된다. Row의 수는 30개가 된다.

일반적인 슬라이싱을 통해서 원본 데이터프레임의 일부를 잘라낸 뒤 새 데이터프레임에 한 컬럼씩 붙여 넣는 방법이 있을 것이라 생각했는데 잘 되지 않았다. 검색을 거듭한 결과 리스트를 써야 함을 알게 되었다. 참조했던 웹사이트가 어디였는지는 기억을 하지 못하겠다. do.call() 함수를 쓰는 방법을 잘 알아야 될 것이다.

> header = sprintf(seq(10,200,10), fmt='%03d')
> header
 [1] "010" "020" "030" "040" "050" "060" "070" "080" "090" "100" "110" "120"
[13] "130" "140" "150" "160" "170" "180" "190" "200"
> df = read.table("dist.tab", sep="\t", row.names=1) > datalist = list() > for(i in header) { + pattern = paste(".", i, ".", sep="") + datalist[[i]] = df[grepl(pattern, row.names(df)), 2] + } > df.2 = do.call(cbind, datalist) > View(df.2)

최적화된 R code라고 확신을 할 수는 없다. '.010.' 형태의 패턴을 추출할 때, 앞뒤의 점은 정규표현식에서 임의의 문자 하나에 대응하는 점이 아니라 문자 그대로의 '.'임이 중요한데, 이것이 grepl() 함수에서 정확히 인식되고 있는 것인지를 잘 모르겠다. grep()은 인덱스를 반환하지만 grepl()은 TRUE 또는 FALSE를 반환한다고 한다. 어쨌거나 View(df.2)로 확인을 하면 다음과 같이 내가 의도한 데이터 변환이 이루어졌음을 알 수 있다.

나의 '데이터 주무르기'는 그야말로 마음 내키는 대로이다. 모든 조작을 Perl에서 하던 시절도 있었고, 요즘은 bash script와 awk/sed 등을 적절히 섞어서 쓰는 빈도가 늘어났다. 그러다가도 예외 사항이 별로 없이 매트릭스 형태로 잘 짜여진 데이터 파일을 보면 R에서 작업을 하고 싶어진다. 사용했던 코드를 노트 파일과 컴퓨터 작업 공간에 잘 저장해 두는 것도 좋은 버릇이라고 자평한다.

점점 까다로와지는 공공기관의 전산 보안

주말에 집에서 일을 하기 위해 사무실에서 쓰던 노트북 컴퓨터를 들고 퇴근하였다. 월요일(어제) 외부에서 있을 과제 중간 점검 발표를 준비하기 위해 파워포인트 자료를 마지막으로 점검하려는데 보안 정책에 위배된다면서 와이파이 접속이 차단되는 것이었다. 아, 드디어 이런 날이 오고 말았구나! 집에서 이더넷 케이블을 직접 연결해 보지는 않았다. 와이파이 접속이 안되는 노트북이 무슨 쓸모가 있는가?

컴퓨터 전원을 껐다가 다시 켰더니 이제는 얼굴 인식을 위해 작동하던 내장 카메라도 제 기능을 하지 못하여 PIN을 입력해야만 했다. 노트북이 연구소 전산망 내에 있지 않은 상황이라면 이를 잠재적인 위험 환경으로 간주하고, 입출력이 이루어질 수 있는 주변 기기를 통제하는 보안 강화 모드를 강제하는 것으로 여겨진다. 그것이 이제는 너무나 당연하게 여겨지는 와이파이라 해도 말이다.

연구소 안에서 상용메일 접속이 차단된 것은 꽤 오래 전의 일이다. 아마존웹서비스와 같은 클라우드도 당연히 되지 않는다. USB 매체 사용도 매우 까다로와서 아예 쓰지 않는다. 리눅스를 설치한 컴퓨터는 상황이 약간 낫지만, 이런 사실을 함부로 발설(?)하다가는 그나마도 쓰지 못하게 될까 두렵다. 이러다가 USB 마이크로폰도 작동이 안되는 날이 오는 것은 아닐까? 사무실 데스크탑에 연결한 웹캠은 다행스럽게도 아직 작동을 잘 한다.

공공기관에서 접속하면 안되는 '나쁜' 웹사이트를 국정원에서 직접 관리하는 것이 정말 옳은 일인지 잘 모르겠다.

공공기관의 전산망 보안은 외부의 해킹 시도나 악성 코드 침투를 방지하는 것으로부터 한층 더 강화되어 근무자가 내부의 자료를 외부로 가져가지 못하게 하는 것으로 바뀌어 가는 추세이다. 물론 일반 회사는 이보더 더 강도 높은 보안 정책을 유지한다. 가장 대표적인 것은 문서에 자물쇠를 거는 DRM이 있고(보안 해제 권한은 몇몇 높은 사람들만 갖고 있음), 프린터도 철저하게 통제한다. 휴대폰은 당연히 보안 프로그램이 깔려 있어서 출근을 하여 회사 공간에 들어가면 카메라가 작동되지 않는다.

정부 조직은 내가 근무하는 출연연보다는 불편하고, 일반 기업보다는 약간 느슨한 정책을 쓰는 것으로 알고 있다.

아마도 노트북 컴퓨터의 경우 외부 반출을 위해 공식적으로 거치는 절차가 있을 것이다. 문제는 연구비로 구입한 노트북이든 개인이 구입한 노트북이든 연구소 내에서 전산망에 접속하려면 보안 솔루션을 깔아야 한다는 것이다. 아주 엄격하게 말하자면, 개인 노트북을 연구소에 가져와서 연구소 전산망에 접속하면 안 된다. 회의실 근처에 있는 공개형 와이파이 정도만 써야 한다. 그러나 이것으로는 내부 리눅스 서버에 접속을 할 수 없다. 코로나 시대를 맞아서 재택 근무를 권장하면서도 실제 환경은 이를 따라가지 못한다.

민감한 정보를 다루는 정보 기관이나 민간 기업이 아니라면 약간은 유연한 정책을 실행하면 안 되는 것일까? 모처럼 연구비로 성능이 좋은 노트북을 구입하였는데 외부에서 쓰지 못한다면 여간 안타까운 일이 아니다. 

공식 반출 허가를 받지 않고 노트북을 외부에 너무 들고 다니는 것도 문제가 될 소지는 있다. 아예 집에다 가져다 놓고 가정용(=개인용)으로 쓰거나, 심지어는 퇴직 이후에도 반납을 하지 않는 철면피 같은 사람도 있으니 말이다.

2021년 9월 9일 목요일

정말 마시기 싫은 음료

새벽 4시에 일어나서 벌컥벌컥 들이마시는 쿨프렙 산.정말 먹기 싫은 맛이다. 누군가 평하기를 이온음료에 조미료를 탄 것 같은 시큼하고 느끼한 맛이라고 했는데, 그 말이 딱 맞다. 1리터를 조제해서 1시간 안에 마시고, 이어서 맹물 1리터를 또 1시간 안에. 이 과정을 어제 저녁 일곱 시에도 했고, 새벽 네 시에도 한 차례를 더 해야 한다. 

으아! 이 찝찌름한 액체를 아직 250ml 더 마셔야 한다. 그러고 나서 또 화장실을 들락거리게 될 것이다. 아침에는 일찍 병원 건강검진 센터로 가야 하니 그 사이에 잠을 제대로 자기는 틀렸다.

폴리에틸렌 클리콜과 아스코르빈산을 주성분으로 하는 장세척 용도의 의약품이다. 아마도 엄청난 삼투압에 의햐여 설사를 유발하는 것일 게다. 안전성은 충분히 입증된 의약품이지만, 장에 큰 부담을 주는 일은 아닐까? 장내 미생물 살림터를 홀랑 뒤집어 엎는 일이니 말이다. 

장이 깨끗한 편이라 이제 겨우 생애 두 번째 대장 내시경 검사를 받는다. 최초 검사는 5년 전이었다. 만약 이것을 매년 받으라면? 정말 내키지 않는다. 어차피 의식하 진정(소위 '수면') 내시경이라서 검사 과정 자체는 괴롭지 않은데, 전날 밤부터 당일 새벽까지 의식처럼 치러야 하는 '쿨프렙 대잔치'는 여간 고역이 아니다. 아픔을 유발하는 것은 아니지만 결코 유쾌하지 못한 자극을 통한 괴로움이란...

맹물이 가장 맛있게 느껴질 때는? 격하게 땀을 흘리고 나서 마실 때가 아니다. 쿨프렙을 1리터 마시고 나서 바로 뒤에 맹물을 마실 때이다.

마지막 남은 쿨프렙을 다 마셔버렸다. 뱃속이 다시금 요동을 친다.

2021년 9월 3일 금요일

[독서 기록] 다정한 무관심 및 내 친구 압둘와합을 소개합니다

다정한 무관심(함께 살기 위한 개인주의 연습) 지은이: 한승혜

개인주의는 이기주의와 동의어가 아니다. 개인주의의 반대발이 전체주의라는 것을 떠올린다면 이런 오해는 쉽게 풀릴 것이다. SNS에 짧게 쓴 글들을 정리하여 책으로 묶었다. 나는 블로그를 제외하면 남들이 다 한다는 SNS를 거의 하지 않는 사람이라서, 이런 공간에서 의견을 올리고 공감을 얻어가 토론을 한다는 것 자체를 중요하게 생각하지 않는다. 나에게는 '없는 세상'이라고나 할까... '메타버스'도 그런 것이 아닐까한다. 여담이지만 세상에 가장 쓸모없는 것은 공개 게시판이나 덧들이라고 생각한다. 어쨌거나 이것도 책을 만드는 한 방식이 될 수도 있겠다.

내 친구 압둘와합을 소개합니다(어느 수줍은 국어 교사의 특별한 시리아 친구) 지은이: 김혜진

시리아의 좋은 집안에서 태어난 청년이 자국을 방문했던 한국인 여행자와 겪은 일을 계기로 국교도 없던 한국으로 법학 공부를 하러 내한하게 된다. 그 사이에 시리아에서는 민주화 혁명과 내전이 일어나고 가족들은 난민 신세가 된다. 우연한 기회에 압둘와합을 알게 된 저자는 얼떨결에 시리아를 돕기 위한 단체를 만들게 되고, 어려움 속에서도 난민 어린이들을 가르칠 수 있는 학교까지 설립을 하게 된다. 

중간 중간에 시리아를 소개하기 위해 압둘와합이 직접 쓴 글이 삽입되어 있다. 만약 내가 한국을 소개하는 글을 써 달라는 부탁을 받는다면, 정확하고도 공정한 글을 쓰기 위해 얼마나 고민을 하게 될까? 어쩌면 소심한 나는 부담스럽다고 거절을 할지도 모른다.

현재진행형인 아프가니스탄 사태에 밀려서 시리아에서 일어났던 일에 대해 한국인들이 관심을 덜 갖게 된 것 같다. 한국과 시리아는 여전히 미수교 상태이고, 압둘와합은 한국인으로 귀화하였다.

교양으로 읽는 세계 종교사 지은이: 시마다 히로미, 옮긴이 김성순

이리저리 건너뛰어가면서 읽다가 대여 기간이 다 되어서 부득이하게 손을 놓게 된 책이다. 최근 불교에 대한 관심을 갖게 되고, 이슬람 세계에서 벌어지는 일을 이해해 보고자 빌리게 되었다. 여름날 산사에 들르면 백중절(음력 7월 15일)과 관련한 행사로 분주한 것을 볼 수 있다. 사후세계나 지옥, 윤회와 관련한 개념은 원래 석가모니가 처음 가르침을 시작하던 당시에는 없는 개념이 아니었을까? 삼국시대때 우리나라에 전래된 불교는 중국을 거치면서 원래의 모습과는 다르게 된 것이 아니었을까? 이런 궁금증을 해결해 보려고 책을 읽기 시작했으나 아직 답을 얻지는 못했다.


똑똑한 다중서열정렬(multiple sequence alignment, MSA) 트리밍 도구, ClipKIT

이발소를 연상하게 하는 ClipKIT의 로고부터 살펴보자. 논문은 2020년 PLoS Biology에 "ClipKIT: A multiple sequence alignment trimming software for accurate phylogenomic inference"라는 제목으로 발표되었다.

계통수를 그리려면 Clustal 시리즈의 소프트웨어, 혹은 muscle, mafft, prank 등의 프로그램이 만든 다중서열정렬(MSA) 결과물을 이용해야 한다. MSA 내부에 존재하는 무의미한 gap 등을 처리하는데 보통 'trimAl -automated1'을 즐겨 사용하였다. 문제는 십만 개가 넘어가는 바이러스 게놈의 MSA를 trimAl에 밀어넣으니 도무지 끝이 날 조짐이 보이지 않는 것이었다. 이 소프트웨어는 다중 쓰레드를 지원하지도 않으므로 그냥 기다리는 것 외에는 방법이 없었다.

대안을 찾기 위하여 검색을 거듭한 결과 몇 달 전에 ClipKIT이라는 소프트웨어를 알게 되었다. 트리밍 전략이 매우 단순하고, 상식적인 시간 안에 결과를 내어놓기 때문에 즐겨 사용하게 되었다. 

MSA를 트리밍하려면 각 컬럼(즉 염기 위치)에 갭이 몇 개인지, 서로 다른 염기가 있는지, 혹은 동일한 염기가 있는지 등을 수치화해야 한다. MSA의 품질을 나쁘게 만드는 가장 중요한 요인은 갭이므로(물론 진화적인 의미가 있는 갭도 있겠지만), 이것이 MSA 트리밍 도구에 제공하는 옵션에서 매우 중요한 역할을 한다.

갭과 관련한 수치는 그 정의를 명확하게 이해하는 것이 중요하다. 이것을 제대로 알지 못해서 초창기에 많은 혼란을 겪었다. 예를 들어서 100개의 염기서열을 정렬하였더니 어느 위치에서 15개는 염기가 있고 85개는 갭이 있다고 하자. trimAl에서 사용하는 gap score는 0.15가 된다. 이 프로그램에서 사용하는 gap score의 정의는 얄궂게도 갭이 없는 것들의 비율이다.
Sg = 1.0 - (number of sequences with a gap / n)

정의를 이렇게 해 놓으니 갭이 많을수록 gap score는 작아진다. 상식적으로 생각해도 이해가 잘 안된다. 갭이 많으면 gap score도 크게 나타나는 것이 자연스럽지 않을까? 어쩌면 'score가 커야 좋은 것'이라는 인식에 맞추어서 이렇게 정의를 내렸는지도 모른다. 이를 트리밍에 적용하려면 'trimal -gt 0.190'과 같이 적용한다. 즉, gap score가 최소한 0.19가 되지 않는 컬럼은 MSA에서 잘라(트림)내라는 뜻이다. 100개의 시퀀스 중에서 19개 혹은 그 이상이 염기를 제시하고 있어야 트리밍을 당하지 않는다는 것이다. '-nogaps'는 '-gt 1'과 동등하며, 어느 한 시퀀스라도 갭이 있으면 그 컬럼을 제거한다는 뜻이다. 반대로 '-noallgaps'는 모든 염기서열이 갭으로만 구성된 컬럼을 제거하게 된다.

CipKIT에서는 gappyness라는 지표를 쓴다. gapyness의 정의는 다음과 같다.

Gappyness = number of gaps / entries in alignment

갭이 많으면 gappyness도 커진다. Gap score보다는 직관적으로 이해하기 더 좋은 지표이다. 그리고 gap score + gappyness = 1.0이 됨을 쉽게 알 수 있다. ClipKIT에서 gappyness를 기준으로 트리밍을 하려면 'clipkit -m gappy 0.8'이라고 옵션을 제공하면 된다. 기본 gappyness는 0.9이다. 

정해진 threshold 값을 옵션으로 주지 않고 프로그램이 스스로 결정하게 만들 수도 있다. CipKIT에서는 smart-gap이라는 방법이 이에 해당한다. 이를 사용하면 일정한 값을 주어서 실행한 것보다 트리밍한 뒤 남는 MSA의 길이가 더 길다고 한다.

ClipKIT의 개발자에게 경의를 표하는 바이다.

2021년 9월 2일 목요일

그래도 마우스패드는 필요하다

마이크로소프트 스컬프트 에고노믹 데스크탑 무선 마우스키보드 세트를 구입하여 사용하면서부터 마우스패드가 별로 필요하지 않을 것이라 생각하고 옆에다 밀쳐 두었다. 그런데 전혀 그렇지가 않았다. 책상 위에서 마우스가 움직이는 느낌이 뭔가 서걱거리는 듯 별로 좋지 않았고, 무엇보다도 마우스와 접촉하는 책상 윗면에 자꾸 때가 끼어서 지저분해지는 것이었다. 도대체 이 더러움의 근원은 무엇일까? 유기물, 즉 내 신체에서 떨어져 나오는 그 무엇일까?

인쇄물 더미에 처박혀 있었던 마우스 패드를 다시 찾아다가 바닥에 깔았다. 직물 타입의 부드러운 면 위에서 마우스가 매끄럽게 움직인다.

사랑하는 사람보다 더 오랜 시간을 어루만지는 물건, 그것은 바로 마우스와 키보드이다. 휴대폰? 그럴 수도 있겠다. 

신체의 일부처럼 사용하는 물건이라면 가끔은 사치를 부려도 좋다. 


경제 활력은 성장보다 중요하다

2021년 8월 한달 동안의 블로그 포스팅은 단 10편에 불과하다. 최근 몇 년의 기록을 볼 때 최저 수준이다. 그만큼 마음에 여유가 부족했다는 뜻도 된다. 정보가 넘쳐나는 요즘 현실에 비추어 볼 때 내가 블로그에 글을 몇 편 쓰지 못했다는 것은 전혀 티가 나지 않는 일이다. 

과연 내가 유익한 글을 남기고 있는 것일까? 이것이 정말로 의미있는 행동일까? 차라리 이런 일에 신경을 쓰지 않고 평온한 마음 상태를 유지하는 것이 나 개인에게 더 나은 일은 아닐까?

경향신문에서 상당히 공감이 가는 기고문을 발견하여 그 링크를 남긴다. 송기호 변호사의 글이다.

카카오, 경제 활력 높이고 있나(2021년 9월 1일)

어제 수원에 위치한 산림생명자원연구부에서 있었던 [신산업 육성을 위한 산림미생물 소재 발굴과 산업화 심포지엄]에서 나는 다른 사람이 건드리기 어려운 포괄적이고도 강력한 미생물 관련 특허를 짤막하게 소개한 일이 있다. 정작 비즈니스와는 매우 거리가 먼 나와 같은 사람이 이런 말을 한다는 것은 매우 우스운(?) 일인지도 모른다. 오늘 국가과학기술연구회로부터 이메일을 통해 배포된 소식지에도 연구원 창업을 독려하는 듯한 내용이 하나 가득이었다.


이 건물은 놀랍게도 목조 건물이다.
송기호 변호사의 글에서는 시민들이 꿀벌과 같이 밤낮없이 '빅 데이터'를 만들어 주었지만 소수 기업의 대두주를 한국 최고의 부자로 만들었음을 강조하였다. 중요한 것은 경제가 얼마나 성장했는가를 묻는 것이 아니라 경제의 활력이 높아졌는가에 있다고 하였다. 경제 활력이란 더 많은 시민이 경제활동에 참여할 기회를 갖는 것을 말한다.

독점의 힘은 무섭다. 특허라는 것도 발명의 내용을 공개하는 대신 특허권을 가진 사람에게 일정 기간 동안 독점권을 부여하는 것이다. 그 독점권이라는 것은 물건이나 탄소배출권과 마찬가지로 거래의 대상이기도 하다. 메디톡스와 대웅제약의 보툴리눔 균주 관련 분쟁이 최근 새로운 국면을 맞으면서 과연 기업은 무엇으로 돈을 벌기를 원하는가하는 심오한 문제를 생각해 보기도 하였다.

지금은 잊혀저가는 구글의 회사 설립 모토(라고 알려진) Don't be evil이라는 말이 떠오른다.