유전체에 연결된 실수형 자료 빨리 접근하기

유전체에 연관된 데이터는 매우 많고 타입도 다양합니다. 그 중에 실수형 데이터가 쫙 깔린 것도 몇가지 있는데, 대표적으로 보존도(conservation score), ChIP이나 RNA-seq, DNase-seq 등에서 나온 시퀀싱 데이터의 리드 수, 짧은 리드의 매핑 가능 정도, 예측된 유전자에 관련된 점수, GC 비율, RNA의 2차구조 안정성 같은 것들이 있겠죠.

예를 들어서, CLIP-seq로 얻은 단백질에 붙을 걸로 예측되는 부분의 리드 주변 보존도가 다른 부분에 비해서 진화 속도가 더 빠른지 보존이 잘 되는지, 구조적으로 안정한지, 크로마틴이 풀려있다거나, RNAPol II가 멈춰있는 근처에서 막 붙는지 그런 것들을 정량적으로 보려면, 이런 것들을 미리 정리해 놓은 데이터를 쉽게 가져오면 좋지요.

다행히도 UCSC느님께서 정리를 정말 잘 해두셔서 긁어오기만 하면 바로 짠 하고 쓸 수 있는데!
주로 bigWig 포맷으로 되어 있어서 파이썬에서 접근하려면 좀 번거롭죠. 다행히도 요새 전세계 실험생물학자들의 구세주로 떠오른 Galaxy가 파이썬으로 개발되면서 이런 대용량 포맷에 접근하는 모듈을 아주 깨끗하게 잘 만들어두었습니다~ 소스도 잘 공개되어 있어서 쉽게 깔 수 있구요. 다만 매뉴얼이 전혀 없다는 문제가 있는데.. 그래도 직접 다 만드는 것 보단..;

그래서 쓰는 방법은.. 이렇게 대충 할 수 있습니다. (Lin28의 3’UTR 일부에서 36nt short read의 매핑 가능 점수를 가져오는 코드)

Tabix: 엄청 빠르게 탭으로 구분된 1차원 좌표계 검색하기

시퀀싱 데이터를 대량으로 뽑아놓고 후속 통계 처리를 하자면,
각 태그가 각각 어느 영역에 들어가는지 분류하는 과정을 거쳐야 합니다.
요즘 cufflinks 같이 자동으로 요약해주는 녀석들이 많이 나와서 그냥 단순히 RNA-seq이나 ChIP-seq에서 보통 많이 하는 분석만 하는 것은 간단해졌지만, CLIP-seq처럼 어디로 분석이 튈지 모르는 다른 대부분의 경우엔 매핑된 곳이 뭔지 대량으로 정확히 분류하는 것이 중요합니다.

예를 들어 생쥐 유전체 mm9 버전에서는 Igf2가 chr7의 149,836,673부터 149,845,394까지 있습니다. 사이에 인트론이 3개있고요. 여기서 만약에 14984050 근처에 어떤 태그 하나가 매핑되었다고 치면, 이게 어느 유전자인가 물어봐서 “Igf2의 2번째 인트론입니다”하는 대답하는 것을 수천만번 매우 빠르게 할 수 있어야 하는데요. 여기서 좀 더 복잡해지는 것은 Igf2 인트론에 mmu-mir-483이 껴 있듯이, 여러 주석이 겹쳐서 시작과 끝이 순서가 달라질 수 있어서, 단순히 정렬된 리스트의 이진 탐색이나 B+ tree같은 것으로는 인덱싱이 불가능합니다.

이 문제를 해결하려면 가장 간단하게는 SQLdb에 모두 집어넣어놓고 SELECT절에 BETWEEN을 써서 검색하는 것이겠는데, UCSC Genome Browser도 이 방법으로 MySQL에 넣고 쓰고, RNA-seq 초창기 분석 도구로 유명했던 ERANGE도 sqlite에 넣고 계속 SQL 질의를 보내서 해결합니다. 간단하긴 한데 써 보면 엄청나게 느려서 분석을 구경하는 사람들에게 NGS란 이렇게 오래걸릴 정도로 대단한거구나 하는 환상을 심어주기 쉬울 정도가 되죠.

그렇지만 물론 BETWEEN을 수천만번 하는 것 보다 훨씬 빠른 인덱스를 만드는 방법이 많이 있겠죠. 대표적으로 R+treekd-tree 같은 2차원 공간 탐색이 가능한 인덱스를 쓰는 것도 있겠고요. 겹치는 녀석들끼리 링크드 리스트로 묶어서 서로 안 겹치는 클러스터로 만든 다음, 클러스터를 이진 탐색하는 방법도 있습니다. 알고리즘은 전자가 훨씬 멋있지만, 실제로 벤치마크해보면 후자가 압도적으로 빠릅니다.;; 이 방법을 구현한 파이썬 라이브러리로 Pygr의 NLMSA가 널리 쓰입니다. 그런데 이 쪽 구현은 내부적으로 깔끔하게 구현하느라 그랬는지, 메모리 소모나 인덱싱 속도, 검색 속도 모두 생각보다 훨씬 많이 먹고 느리고 그렇습니다. 특히 인덱스 들고 있는 데에 파이썬 객체를 너무 많이 만들어내서… 물론 SQL쓰는 것보단 훨씬 빠르지만 말이죠.

그러다 괜찮은 것을 발견했습니다. +_+ 어느날 samtools 새 버전이 나왔으면 받으려고 갔는데, tabix라고 처음 보는 게 올라가 있길래 궁금해서 보니까 바로 이 기능을 하는 것이더군요! 이건 좀 더 범용으로 만들어서 탭으로 구분된 모든 텍스트파일을 인덱싱 가능하도록 만들었고, 게다가 원본 그대로 gzip한 다음에 원본에서 찾아주는 것이라 여러 도구에 쉽게 녹아들어갈 수 있게 만들었네요. (압축파일 안에서 랜덤액세스가 가능하도록 하는 도구도 물론 들어있습니다.)

써보니 속도도 상당히 빠릅니다. 매우 만족! 그래서 파이썬에서 쓰려면 어떻게 해야하나 보니까, 이미 펄, 파이썬, 자바 바인딩이 들어있더군용. 그러나 파이썬 바인딩이 ctypes를 쓰게 돼 있어서, 설치나 관리가 여러모로 번거롭고 속도도 (아주 약간) 느려지고.. 흐흐 예전부터 들어왔던 Cython을 배워볼 절호의 기회다! 하고 Cython으로 한참 다시 바인딩하는 작업을 해 봤는데, 아무리 찾아봐도 이터레이터 객체를 구현할 때 __next__에서 NULL을 리턴할 방법이 없어서 깔끔하게 만들어 줄 수가 없네요.. 결국은 그냥 포기하고 C 모듈로 만들었습니다. (tabix 0.2.3용 패치) 패치는 tabix 원저자에게 보냈습니다. 파이썬 2/3 겸용이죠. 호호호;

이렇게 쓸 수 있습니다~ 일단 인덱스 만들고 확인하기.

파이썬에서도 똑같이 접근하기.

원래 pygr.NLMSA쓰고 있던 곳을 요걸로 바꾸니까 거의 10배 이상 빨라졌네요. ^__^

RNA 연구에서의 시퀀싱 활용 (시작)

대용량 시퀀싱(high-throughput sequencing; 다음부터 시퀀싱)이 폭발적으로 널리 쓰이기 시작하고도 이미 한참 지나서, 네이처 주요 논문들의 그림 구성, Affymetrix 주가, 학회장의 질문들 어느 것 하나 예전과 같은 게 없어졌습니다. 그래서 이제 논문 읽을 때 유전체학이나 전사체학 용어와 개념에 익숙하지 않고서는 읽기 힘든 논문이 한 둘이 아니게 됐는데…

시퀀싱의 주요 수요처인 유전체 DNA 시퀀싱은 워낙 뻔하고 여기 저기서 늘 얘기하고 있는 것이니 넘어가고, 역동성이 넘치는(-O-) RNA 분야에서의 시퀀싱 활용에 대해서 대략 정리해 볼까 합니다. 한꺼번에 다 올리면 읽기 압박이 있으니 여러 회로 끊어서 찔끔찔끔 올리겠습니다~ (히히)

순서는 모두 9번으로 나눠서,Roblox HackBigo Live Beans HackYUGIOH DUEL LINKS HACKPokemon Duel HackRoblox HackPixel Gun 3d HackGrowtopia HackClash Royale Hackmy cafe recipes stories hackMobile Legends HackMobile Strike Hack

  1. RNA 시퀀싱 기본 지식
    1. Illumina mRNA-seq 프로토콜 대충 보기
    2. Illumina SRA 프로토콜 대충 보기
    3. 여러가지 RNA/DNA ligase
  2. RNA 프로파일링
    1. RT하는 방법에 따라 다른 것
    2. 조각내는 방법에 따라 다른 것
    3. CAGE, SAGE에서 파생된 프로파일링 기법들
    4. 작은 RNA 프로파일링
  3. 번역효율 측정하기: ribosome profiling
  4. RNA와 단백질의 상호작용 보기
    1. RIP-seq
    2. CLIP-seq (UV cross-linking and immunoprecipitation), PAR-CLIP
    3. miRNA 타겟 보기: Ago HITS-CLIP
  5. RNA 간의 상호작용 보기: CLASH
  6. RNA 잘리는 부분 알아내기: degradome sequencing
  7. RNA 2차구조 보기: Kertesz et al.과 FragSeq
  8. RNA 5′ 3′ 끝 알아내기: High-throughput 5’/3′ RACE와 PET
  9. mRNA 3′ UTR 끝 알아내기: 3P-seq

로 올리도록 하겠습니다. ^__^

(다음 시간에 계속~)

시퀀싱 데이터에서 3′ 어댑터 서열 제거

small RNA 시퀀싱에서는 리드보다 RNA가 더 짧아서, 5′ 끝부터 읽을 경우에는 3′ 어댑터 시퀀스가 나오고, 프라이머를 뒤집어서 3′ 끝부터 읽으면 5′ 시퀀스가 나올 수 밖에 없다. small RNA가 아니더라도 CLIP에서는 보통 바인딩 사이트를 정확히 알기위해 짧게 쳐내서 시퀀싱하는 경향이 있어서, 보통 30nt 안쪽으로 들어오는 편이라 시퀀싱한 뒤에 어댑터 제거가 꼭 필요하다.

그렇지만 역시나 PCR 오류, 시퀀싱 오류, 어댑터 불량 등등 수많은 잡음때문에 역시 단순 문자열 비교로는 잘 안 통한다. 그래서 정규식을 쓰기도 하는데 영 속도가 만족스럽지 못하고, 모든 자리에서 어댑터 시퀀스랑 비교해서 미스매치를 세는 등의 방법(HTSeq 패키지)을 쓰기도 하는데, 갭을 전혀 허용하지 않아서 어댑터 합성 품질이 안 좋은 경우는 놓치는 것이 너무 많아서 결과를 보면 답답~하다.

최근 많이 쓰이는 방법으로 Needleman-WunschSmith-Waterman을 섞어서 어댑터의 5′ 끝에게는 지역정렬처럼 아무데서나 시작하게 하고, 3′ 끝에는 전체정렬처럼 끝까지 가게 하는 것이 있다. 그런데, 소프트웨어는 홈페이지에 오거나, 저자에게 말하면 준다고 다들 써 놓고서는 정작 홈페이지에 가면 아무 것도 없고, 메일 보내면 묵묵부답이라, 1년 넘게 정규식으로 불쌍하게 쓰다가, 결국 큰 마음먹고 토요일 밤을 투자했다. +_+

소스코드 받기 (파이썬용 C 확장 모듈)

실제로는 affine gap penalty를 써서 행렬이 3개지만, 그냥 linear gap penalty를 쓴 경우라고 하고 행렬을 예를 들어 보면,

  • 시퀀스 리드: CCAGTCCA
  • 어댑터 시퀀스: CCAG
  • 점수: match 2, mismatch -3, gap penalty -3

3' 어댑터 떼기Watch movie online The Transporter Refueled (2015)

이렇게 하면 짠~

구글 리더에서 Papers로 URL열기

대학원생의 친구, Papers!
공부하는 척 할 때 참 좋은 녀석이지만, RSS기능이 없어서 새 글을 받아보려면 반드시 나머지
반쪽이 필요한 어정쩡한 녀석이죠~

NetNewsWire에 연결해서
보면 구글리더와 동기화해서 돌아다니면서 버스에서도 볼 수 있고 참 좋긴 한데.. 문제는
구글리더가 최근 글 10개만 주는 바람에, AOP feed가 없거나 글이 한꺼번에 잔뜩
올라오는 PNASPLoS ONE같은 경우에는 거의 글을 대부분 놓쳐버려서
가끔 구글리더 들어가서 확인해야해서 여러모로 귀찮습니다.

결국 그냥 구글리더로 싹 읽으면 깔끔하고 좋기는 하지만, Papers에 논문 가져다 넣으려고 긁어 넣고 붙이고
하기가 귀찮아서 결국은 NNW에 남아있다가, 오늘 마음잡고 오랜만에 GreaseMonkey로 정리해 봤습니다~

Google Reader에서 c 눌러서 지금 글 Papers열기 (그리스몽키)

설치하시면 C 누르면 Papers에서 글이 열립니다~

BSD에서 타임머신처럼 백업 관리하기

엊그제 큰일날 뻔했습니다. 연구실 홈페이지 고치다가 www디렉토리를 복사한 다음에 지운다는 것이, 제 홈디렉토리에서 지워버리는 바람에 제 홈페이지가 몽땅 날아가 버린 것. –;
다행히도 작년 5월 백업도 있었고, 그 이후로는 업데이트를 거의 하나도 안 해서 간신히 살릴 수 있었지만 초등학교 때 만들었던 프로그램을 고등학교 다닐 때 모두 날린 이후로 최대 사건이 될 뻔 했습니다.;

데스크탑은 타임머신으로 잘 백업하고 있었는데 작년에 서버 옮기고 설정하기 귀찮다고 작업서버 홈 디렉토리 백업을 설정해 두지 않았는데요. 그래서 이참에 rsync로 타임머신하고 거의 똑같이 쓸 수 있다는 얘길 들은 생각이 나서, 설정했습니다. 잘 되더군용! ^_^ 안심

물론 파일은 대부분 하드링크 덕에 용량을 크게 차지하지는 않지만, 디렉토리 구조가 계속 복사되는 통에 생각보다는 용량을 꽤 차지했습니다. 타임머신은 최근 하루는 1시간 간격, 1주일은 하루 간격, 1달은 1주일 간격 이런 식으로 오래된 시간일 수록 띄엄띄엄 저장할 수 있도록 돼 있는데요. 그래서 이걸 어떻게 해야하나 검색을 좀 해 보다가 적당한 것이 안 보여서 간단하게 만들어 봤습니다.

소스파일 다운로드 (파이썬 2용)

음 마음이 편안하군요.~

군집이룬 자료의 비모수 두 표본 차이 검정 (C 구현)

두 표본 집단의 차이가 의미가 있나 알아볼 때 보통
t-검정을 많이 씁니다.
t-검정에서는 값의 분포가 정규분포라는 가정이 있어서, 자료의
분포를 모르거나 정규분포로 바꾸기 매우 난감한 경우에는 t-검정을
할 수 없어서 비모수 검정을 사용하는데요, 이쪽으로 가장 인기있는
검정법은 아무래도 Mann-Whitney U test입니다.

어느날 MW-U로 재미나게~♪ 통계를 하다가~ 아니!! 결과가 엄청 편향되어 나오는 것입니다!
비모수라더니!! 마이크로RNA
마이크로어레이로 나온
결과를 분석하고 있었는데, 마이크로RNA가 염색체에서 떼로 몰려 있어서
한 놈이 올라오면 같이 우루루 올라오는 특성이 있다보니 군집이 엄청 큰
놈들에 의해 전체가 흔들려서, 아 무슨 좋은 방법이 없을까! 하다가
군집을 이룬 자료들에 쓸 수 있게 변형한 것
(Rosner and Grove, 1999,
Datta and Satten, 2005,
Haataja et al., 2009)
들을 발견했습니다. +_+

오…. 다 괜찮아 보이지만, 결국은 코드가 공개돼 있는
Datta와 Satten의 것으 로 해서 일단 결과를 뽑았습니다. 매우 만족스럽군요! ^_^

그런데 문제는 순수 R로 구현되어 있다보니
속도가 엄청나게 느려서, 자료가 별로 크지도 않은데 거의 2시간씩 돌려야
돼서 시험삼아 돌려볼 때도 마음을 크게 먹고 돌려야 해서, 바로바로
결과를 확인하는 재미가 없었습니다.

그래서 쭉 벼르고 있다가, 주말에 여자친구가 기말고사 공부해야 해서, 같이 공부하는
척 하느라 짬이 난 김에
C로 새로 코딩했습니다 (다운로드).
R이나 SciPy같은데서 쉽게 쓸 수 있게 외부 의존성을 없애려고, Z-통계치에서
p-value구하는 부분은 빼서 의존성을 줄였습니다. 그냥 libm만 있으면 됩니다.
(파이썬에서는 scipy.stats.norm.pdf를 써서 Z에서 p-value를 구할 수 있습니다.)
대략 돌려봤더니 2시간 걸리던게 30초로 줄었군요! 이히히 ^__^*
간단하게 컴파일한 다음에 파이썬에서 쓰려면 이렇게 쓸 수 있습니다~

으음.. R에 붙이는 것은… 아직 잘 몰라서… (나중에..;)

정수선형계획법으로 팀 짜기

2006년의 한 워크숍을 진행하면서
팀을 짜는데, 모든 팀이 비슷한 조건을 갖도록 잔기술을 썼던 적이 있습니다.
기준은 평균 실력, 평균 연령, 성비 같은 것들을 모두 비슷하게 맞추고
가능한 다른 곳에서 온 사람들이 섞이도록 했는데요. 이게 손으로 대충해도 되지만
문제는 신청을 한 분이 모두 오는 게 아니라, 몇몇 분들이 빠지거나 지각해서
미리 팀을 짜도 헛수고라 빨리빨리 모두 고려해서 좋은 팀 구성을 해야해서
자동화를 해야 했습니다.

그래서 당시에는 학교에 사이트 라이선스가 있어서
ILOG OPL정수계획(IP)
했었는데요. 얼마 전에 창준형이 그 소스를 참고하고 싶어 하셔서
찾았는데 소스가 없어졌더군요. 크흐. 그래서 생각난 김에 한 번 오픈소스 선형계획 툴킷인
GLPK용으로 만들어 봤습니다.

모델 코드, 데이터 예제

예제는 누구나 쉽게 데이터 성질을 해석할 수 있도록(;;) 소녀시대, 브라운 아이드 걸스, 원더걸스를 모아놓고 수학캠프를 하는 것을 가정하고(;;;)
최대한 다른 그룹끼리 섞이게, 팀 간 평균 나이, 수학실력, 성비는 비슷하게 하도록 하는데,
수학실력은 몰라서 관련이 있을리는 만무하지만 epg 스타정보에서 인기순위로 대충 매기고, 성비는 모두 여자라
제 맘대로 다수를 남자로 바꿨습니다. ^.~

자 그러면 시험삼아 예제 데이터를 한 번 해 볼까요! 팀은 6개로 나누는 것으로 하고, 우선 제대로 돌아가는지 보기
위해 멤버 수만 같게 맞추는 걸 조건으로 해 보면 결과가..

구성 성비(가상) 평균 나이 평균 EPG 인기
A 제시카 써니 티파니 1:2 21.0 4.33
B 가인 제아 선미 2:1 22.7 2.7
C 태연 윤아 예은 2:1 20.7 5.0
D 수영 서현 선예 2:1 20.0 3.0
E 효연 미료 소희 2:1 22.0 3.0
F 유리 나르샤 유빈 3:0 23.3 3.0

팀 안의 인원 수만 맞지, 어느 하나도 비슷하게 흩어진 게 없습니다. 특히 B, C팀은 여러모로 차이가 많이 나서 비슷한 팀구성 목표에 맞지 않고요, A팀은 소녀시대만 있죠. 그럼 앞에서 언급한 4가지 조건 모두를 맞춰서 최적화한 결과는.. (120초 제한으로 풀어서 최적해는 아님)

구성 성비(가상) 평균 나이 평균 EPG 인기
A 제시카 가인 예은 2:1 21.7 3.7
B 태연 서현 유빈 2:1 20.7 3.7
C 티파니 제아 선미 2:1 22.0 3.7
D 유리 나르샤 소희 2:1 22.0 3.3
E 효연 수영 선예 2:1 20.7 3.3
F 써니 윤아 미료 2:1 22.7 3.3

그런대로 비슷비슷한 팀들로 구성이 됐습니다~ 재미있는 수학시간이 될 것 같네요. -ㅇ-;

사실 이 문제 같은 경우에는 결정하는 변수가 모두 정수라서 (정수가 적을수록 쉽게 구할 수 있음) 사실 전수조사에 주먹구구 좀 넣어서 돌리는 거나 큰 차이는 안 납니다만.. 그래도 재미로~ ^.^;;

자주 보는 논문 저자 찾기

저는 논문 관리를 Papers로 하고 있습니다. 순전히 이 프로그램 때문에 맥을 사는 사람이 있을 정도로 정확하게 타게팅을 해서 나온 놈이라 정말 편리합니다. 다만 DevonThink같이 정보를 자동으로 모아서 못 보는 패턴까지 파악하게 해 주는 기능이 많이 아쉬운데요. 그래서 갑자기 자주 보는 저자들의 PubMed 자동 알리미 설정을 한 번 해 볼까하고 저자를 생각해 봤는데, 아무래도 빼먹은 게 있을 것 같아서 Papers에 등록해 놓은 논문 전체에서 가장 많이 쓴 사람들을 찾아봤습니다.

소스코드 – 다행히도 CSV 출력을 지원해서 BibTex 파싱 같은 것은 안 해도 됐고요. 이름은 중간이름을 간혹 생략하는 경우도 있어서 그냥 성과 이름 첫 글자만 가지고 비교를 했습니다. 하는 김에 가장 많이 보는 잡지 이름도 출력했습니다. 결과를 보니까 오! 간단하게 알리미 설정할 사람들 목록이 나왔습니다. ?

제 상위 저자, 잡지는 이렇게 나오는군요.

여러분의 Papers 책꽂이는 누가 많이 차지하고 있나요!Watch movie online The Transporter Refueled (2015)

MacOS X에서 들리는 것 녹음하기

종종 컴퓨터에서 들려주는 소리를 녹음하고 싶을 때가 있습니다. 구체적인 용도를 노골적으로 얘기하기엔
부적절하지만 (ㅎㅎ;;;)… 제가 쓰는 iPod 셔플 1세대 는 국내에 음악을 사기가 매우 어려운 장비인 관계로,
어쩔 수 없지요!

원래는 WireTap이라는 아주 깔끔한 프로그램을 썼는데, 시험사용기간이 다 돼서 이제 녹음하면 친절한 여자가 리듬에 맞춰 "트라이얼 버전으로 녹음한 곡입니다." 이렇게 읽어주더군요. 크흐. 기능에 비해서 가격이 좀 비싼 것 같아서, 그냥 공짜로 할 수 있는 방법을 없나 좀 찾아보니, 역시 있네요!

이 조건을 만족하는 분들은 한 번 시도해 보세요~

  1. 내가 쓰는 MP3 플레이어가 국내 DRM들하고 호환이 잘 안 된다.
  2. 무슨 녹음기 프로그램이 FotoMagico Pro랑 가격이 같고 VMware Fusion보다 거의 두 배 값이라니 말이 되냐!
  3. MacPortsfink 중 하나는 깔아 뒀다.
  4. 삽질은 언제나 즐겁다.

먼저 들리는 걸 녹음하는 기능을 지원하는 사운드 드라이버를 깔아야하는데요, 소리꽃 (Soundflower)이라는 예쁜 이름의 GPL 가상 사운드 장치가 있습니다. 자기가 가짜 사운드 장치로 잡혀서 들어오는 소리를 다른 프로그램에 보내주거나 다른 사운드 장치에 보내주는 일을 합니다. Nicecast라는 맥용 icecast 오디오 방송 프로그램이 내부적으로 Soundflower를 씁니다. Soundflower 원저자가 올린 버전은 최근 MacOS X에서 약간 문제가 있다고 합니다. 다른 사람이 개선한 버전이 따로 배포되고 있습니다. 그냥 드라이버만 설치하면 소리가 안 나서 좀 답답한데, 원본에서 Soundflowerbed라는 관리 프로그램을 따로 받아서 깔면 출력을 내장 사운드 카드로 바꿀 수 있습니다.

Soundflowerbed

이제 스파이 노릇을 하는 드라이버가 마련이 됐으니, 녹음을 하면 됩니다. 관련 프로그램으로 역시 소리 관련된 놀이에는 EsounD가 빠지지 않는군요. 다른 팁 두 개 (macosxhint, heynberg)를 참조해서 요새 버전에서도 되게 좀 고쳐보면 이렇게 하면 되더군요.

짠! 이 셸 스크립트를 돌리면 아무 프로그램이나 (vmware를 포함해서~) 들리는 소리가 모두 녹음됩니다.
MacPorts에서 esound, sox, lame 을 깔아 둔 상태여야 합니다. sox를 안 쓰고 바로 lame에서 받아보려고 했는데, 옵션을 조절해 봐도 잘 안 되더군요.

기왕 녹음한 것 자르는 것도 자동으로 되면 좋겠지 하고 찾아보니 역시 mp3 잘라 주는 프로그램도 좋은 게 있네요. Mp3splt는 재인코딩 하지 않고도 원하는 범위에서나, 자동으로 조용한 부분을 찾아서 여러 개로 나눠줍니다.

모아서 셸 스크립트 하나로 만들어 두면 편합니다. 🙂

기왕 하는 김에, 옛날에 많이 하던 윈앰프 방송들처럼 다른 사람들이 들을 수 있게 보내는 것도 쉽게 할 수 있는데요, icecast의 libshout 안에 들어있는 "example" 프로그램을 쓰면 편합니다.

또 하나 보통 흔히 하는 소리가지고 장난이, 다른 기계를 스피커로 쓰는 AirTunes 같은 기능이 있는데, 공유기 중에 개조해서 사운드카드를 달 수 있는 놈에다가 돌리면 아주 쓸모있겠죠~

사무실에 esd를 띄워두고 새벽 2시에 집에서 접속해서 귀신 소리를 낸다거나… 집에서 영화보거나 WoW하면서 회사로 소리를 들려준다거나… (;;)