<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>PGK</title>
    <link>http://www.gnome.or.kr/PGK</link>
    <description>Planet GNOME Korea</description>
    <language>ko</language>
    <pubDate>Thu, 09 Sep 2010 03:47:22 GMT</pubDate>
    <dc:date>2010-09-09T03:47:22Z</dc:date>
    <dc:language>ko</dc:language>
    <image>
      <title>logo</title>
      <url>http://www.gnome.or.kr/image/image_gallery?img_id=176&amp;t=1205173969894</url>
    </image>
    <item>
      <title>perky : 후배를 찾습니다~</title>
      <link>http://feedproxy.google.com/~r/hyeshik/~3/3o4RDNqi5O0/</link>
      <description>&lt;p&gt;몇 군데에 이미 전에 올린 적이 있어서 이미 보신 분들도 있겠지만, 좀 더 많은 홍보를 (;ㅁ;) 위해서 잠잠한 블로그에도 올려봅니다. ^.^;;&lt;/p&gt;
&lt;p&gt;제가 공부하고 있는 실험실에 새로 석사과정, 통합과정 또는 박사과정 대학원생으로 참여할 대학원생을 모집합니다.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://narrykim.org"&gt;저희 실험실&lt;/a&gt;은 동물 RNA의 유전자발현 조절 분야를 주로 연구합니다. 특히 microRNA의 생합성 경로와 조절 경로의 주요 단백질들의 기작을 밝힌 것으로 많이 알려져 있습니다. (&lt;a href="http://news.donga.com/90th_List/3/0300000001/20100511/28249482/1"&gt;지도교수님 최근 기사와 인터뷰&lt;/a&gt;, &lt;a href="http://bric.postech.ac.kr/myboard/read.php?id=158&amp;amp;Page=&amp;amp;Board=interview&amp;amp;itv_flag=1"&gt;조금 오래된 인터뷰&lt;/a&gt; 참조)&lt;/p&gt;
&lt;p&gt;이번에 찾고 있는 대학원생(1명)은 실험실에서 하는 분야 중 유전체학과 생물정보학 쪽을 주로 하도록 뽑을 예정이고요. 따라서, 학부나 석사 전공으로 컴퓨터과학, 통계학, 생물정보학 등을 전공하신 분을 기대하고 있습니다. 원하는 경우에는 실험도 배워서 스스로 데이터 만들어서 분석하는 요즘 유행하는 스타일로 공부할 수도 있습니다.&lt;/p&gt;
&lt;p&gt;특히 유전자 발현 조절 분야는 대규모 전사체/유전체 실험으로 계속 커지는 추세라서 대용량 데이터를 정량적으로 다뤄서 생물 연구를 할 수 있는 기회가 계속 늘고 있습니다.
실험실에서 최근에 많이 하는 high-throughput 실험들을 많이 도입해서 하고 있고, 원하는
실험을 필요하다면 웬만큼은 부담이 되더라도 할 수 있을 정도의 여유는 되기 때문에
연구할 데이터와 기회가 풍부하고요.  실험실의 주요 연구분야가 아직 미지의 영역이 매우 많은
분야라서 머리를 쥐어짜서 연구분야를 찾아 헤멜 필요도 없어서 연구 측면에서는 국내에서
대학원 생활하기에는 아주 좋은 여건이 될 것입니다~&lt;/p&gt;
&lt;p&gt;입학전공은 &lt;a href="http://biosci.snu.ac.kr/"&gt;생명과학부&lt;/a&gt;, &lt;a href="http://ipbi.snu.ac.kr/"&gt;생물정보학 협동과정&lt;/a&gt;, &lt;a href="http://ipge.snu.ac.kr"&gt;유전공학 협동과정&lt;/a&gt;, &lt;a href="http://cri.snu.ac.kr"&gt;종양생물학 협동과정&lt;/a&gt; 중 하나를 선택할 수 있습니다. 2011년 후기 이후 입학 가능하며 입시 이전에 협의가 되어야하고, 연구원으로 미리 일할 수도 있으므로, 되도록이면 빨리 연락을 주시는 편이 좋습니다. (보통 1년 이전에도 많이 연락하는 편입니다.)&lt;/p&gt;
&lt;p&gt;실험실에 관한 정보는 &lt;a href="http://narrykim.org"&gt;홈페이지&lt;/a&gt;를 참조하시고, 문의사항이나 지원에 관련된 것은 모두 저한테 자유롭게 보내주세요. 메일 주소는 &lt;a href="http://openlook.org/blog/site_profile#contact"&gt;제 자기소개 페이지 맨 끝&lt;/a&gt;에 있습니다. ^.^; 혹시 주변에 관심 있을 것 같은 학생이 있으면 알려주세요~ (나쁜 아저씨 아니에요~;;)&lt;/p&gt;</description>
      <category>&lt;a href='/blog/tag/life/'&gt;life&lt;/a&gt;</category>
      <pubDate>Thu, 19 Aug 2010 14:54:33 GMT</pubDate>
      <guid isPermaLink="false">http://openlook.org/blog/2010/08/19/looking-for-a-new-colleague/</guid>
      <dc:creator>Hye-Shik Chang</dc:creator>
      <dc:date>2010-08-19T14:54:33Z</dc:date>
    </item>
    <item>
      <title>perky : 10월 13일 - 16일, 하이델베르크</title>
      <link>http://feedproxy.google.com/~r/hyeshik/~3/IWcpH3UaN8I/</link>
      <description>&lt;p&gt;10월 13일부터 16일까지 독일 하이델베르크에서 하는 &lt;a href="http://www.embo-embl-symposia.org/symposia/2010/EES10-03/"&gt;The Non-Coding Genome&lt;/a&gt; 학회에 갑니다. &lt;br /&gt;
이히히. ^__^ 좋은 경험 있으시면 추천 바랍니다! (처음 가는 유럽이라 두근두근~)&lt;/p&gt;
&lt;p&gt;&lt;img alt="하이델베르크" src="http://farm1.static.flickr.com/101/303339926_ca5d0dbd6e.jpg" /&gt; &lt;br /&gt;
&amp;copy; &lt;a href="http://www.flickr.com/photos/junnn/"&gt;Junnn&lt;/a&gt;. &lt;a href="http://creativecommons.org/licenses/by-nc-sa/3.0/"&gt;CC-BY-NC-SA&lt;/a&gt;&lt;/p&gt;</description>
      <category>&lt;a href='/blog/tag/life/'&gt;life&lt;/a&gt;</category>
      <pubDate>Sun, 18 Jul 2010 13:40:03 GMT</pubDate>
      <guid isPermaLink="false">http://openlook.org/blog/2010/07/18/heidelberg-in-october/</guid>
      <dc:creator>Hye-Shik Chang</dc:creator>
      <dc:date>2010-07-18T13:40:03Z</dc:date>
    </item>
    <item>
      <title>perky : 생물정보 태동기의 재미있는 사실들</title>
      <link>http://feedproxy.google.com/~r/hyeshik/~3/sVathaNFtuI/</link>
      <description>&lt;p&gt;어느 학문 분야든 성숙하다보면 해당 분야의 역사와 철학에 대한 연구가 따라오게 된다.
학문이 생기게 된 배경과 발전 과정, 패러다임의 변화, 다른 학문에 대한 영향, 연구자들의 분야
고유적인 연구 방법을 관찰하는 것은 재미있지 않을 수가 없다.&lt;/p&gt;
&lt;p&gt;최근에 PLoS Computational Biology에 &lt;a href="http://www.ploscompbiol.org/article/info:doi/10.1371/journal.pcbi.1000809"&gt;생물정보학의 뿌리&lt;/a&gt;라는 
기사가 올라왔다.
유전체 모델이나 RNA 2차구조 같은 것을 촘스키식 문법으로 다룬 것으로 유명한
David Searls가 쓴 생물정보학의 역사에 대한 글인데, 깊게 잘 다루었다.&lt;/p&gt;
&lt;p&gt;철학적인 생각은 글에 남겨두고, 의외로 모르고 지나가기엔 너무 아쉬웠을 만한 재미있는 사실 몇 가지만 추려보면,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;컴퓨터를 생물 연구에 처음으로 쓴 사람은 너무 뻔해서 약간은 재미없게도(?) &lt;a href="http://en.wikipedia.org/wiki/Ronald_Fisher"&gt;Ronald Fisher&lt;/a&gt;인데, EDSAC을 개발한 Wilkes와 Wheeler가 직접 작업을 돌려주었다. (1950년)&lt;/li&gt;
&lt;li&gt;소개가 필요없는 &lt;a href="http://en.wikipedia.org/wiki/Alan_Turing"&gt;Alan Turing&lt;/a&gt;은 말년에 주로 발생학 연구를 했으며 (1952년~), 역시 정보이론과 논리회로의 창시자격인 &lt;a href="http://en.wikipedia.org/wiki/Claude_Shannon"&gt;Claude Shannon&lt;/a&gt;은 심지어 박사학위를 계산유전학에 대한 연구로 받았다. (1940년)&lt;/li&gt;
&lt;li&gt;빅뱅이론으로 유명한 이론물리학자 &lt;a href="http://en.wikipedia.org/wiki/George_Gamow"&gt;George Gamow&lt;/a&gt;와 Monte Carlo 시뮬레이션으로 유명한 이론물리학자 &lt;a href="http://en.wikipedia.org/wiki/Nicholas_Metropolis"&gt;Nicholas Metropolis&lt;/a&gt;는 유전코드의 상세한 기전이 밝혀지기 전에, 서열의 통계적 분석과 시뮬레이션으로 유전코드의 이론적 특성 연구를 했는데 이 연구가 거의 역사 최초의 생물정보학 연구로 보통 받아들여진다. (1954년)&lt;/li&gt;
&lt;li&gt;역시 초기에 컴퓨터를 가장 널리 사용한 것은 결정학자들이었는데, 1952년에 이미 EDSAC으로 계산한 논문이 나왔다.&lt;/li&gt;
&lt;li&gt;또 다른 생물정보학의 주세부분야 중 하나인 계통분류계산은 1957년에 처음 시작되었다. 요즘 화학유전체학에서 거의 표준처럼 쓰이는 &lt;a href="http://en.wikipedia.org/wiki/Tanimoto_coefficient#Tanimoto_coefficient_.28extended_Jaccard_coefficient.29"&gt;타니모토 계수&lt;/a&gt;는 1960년에 IBM의 수학자인 타니모토가 세균 분류를 위해 개발했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;보통 어디서 트렌드따라 뚝 떨어진 신생융합듣보잡 취급을 많이 받는 생물정보학이지만 의외로 뿌리는 깊다. +_+ &lt;/p&gt;</description>
      <category>&lt;a href='/blog/tag/book/'&gt;book&lt;/a&gt;</category>
      <pubDate>Thu, 15 Jul 2010 15:52:09 GMT</pubDate>
      <guid isPermaLink="false">http://openlook.org/blog/2010/07/16/fun-facts-on-early-bioinformatics/</guid>
      <dc:creator>Hye-Shik Chang</dc:creator>
      <dc:date>2010-07-15T15:52:09Z</dc:date>
    </item>
    <item>
      <title>perky : 시퀀싱 데이터에서 3' 어댑터 서열 제거</title>
      <link>http://feedproxy.google.com/~r/hyeshik/~3/UfkPi_OeZ7U/</link>
      <description>&lt;p&gt;small RNA 시퀀싱에서는 리드보다 RNA가 더 짧아서, 5' 끝부터 읽을 경우에는 3' 어댑터 시퀀스가 나오고, 프라이머를 뒤집어서 3' 끝부터 읽으면 5' 시퀀스가 나올 수 밖에 없다. small RNA가 아니더라도 &lt;a href="http://linkinghub.elsevier.com/retrieve/pii/S1046202305001787"&gt;CLIP&lt;/a&gt;에서는 보통 바인딩 사이트를 정확히 알기위해 짧게 쳐내서 시퀀싱하는 경향이 있어서, 보통 30nt 안쪽으로 들어오는 편이라 시퀀싱한 뒤에 어댑터 제거가 꼭 필요하다.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;AACTGTTTGCAGAGGAAACTGAATCTCGTATGCCGT  - hsa-miR-452 뒤에 Illumina SRA 1.5 3' 어댑터
&amp;lt;----- miR-452 ------&amp;gt;&amp;lt;-- 3' adapter&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;그렇지만 역시나 PCR 오류, 시퀀싱 오류, 어댑터 불량 등등 수많은 잡음때문에 역시 단순 문자열 비교로는 잘 안 통한다. 그래서 정규식을 쓰기도 하는데 영 속도가 만족스럽지 못하고, 모든 자리에서 어댑터 시퀀스랑 비교해서 미스매치를 세는 등의 방법(&lt;a href="http://www-huber.embl.de/users/anders/HTSeq/doc/overview.html"&gt;HTSeq 패키지&lt;/a&gt;)을 쓰기도 하는데, 갭을 전혀 허용하지 않아서 어댑터 합성 품질이 안 좋은 경우는 놓치는 것이 너무 많아서 결과를 보면 답답~하다.&lt;/p&gt;
&lt;p&gt;최근 많이 쓰이는 방법으로 &lt;a href="http://en.wikipedia.org/wiki/Needleman%E2%80%93Wunsch_algorithm"&gt;Needleman-Wunsch&lt;/a&gt;와 &lt;a href="http://en.wikipedia.org/wiki/Smith-Waterman_algorithm"&gt;Smith-Waterman&lt;/a&gt;을 섞어서 어댑터의 5' 끝에게는 지역정렬처럼 아무데서나 시작하게 하고, 3' 끝에는 전체정렬처럼 끝까지 가게 하는 것이 있다. 그런데, 소프트웨어는 홈페이지에 오거나, 저자에게 말하면 준다고 다들 써 놓고서는 정작 홈페이지에 가면 아무 것도 없고, 메일 보내면 묵묵부답이라, 1년 넘게 정규식으로 불쌍하게 쓰다가, 결국 큰 마음먹고 토요일 밤을 투자했다. +_+&lt;/p&gt;
&lt;p&gt;&lt;a href="http://openlook.org/src/1007/rnarryext-0.1.tar.gz"&gt;소스코드 받기 (파이썬용 C 확장 모듈)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;실제로는 affine gap penalty를 써서 행렬이 3개지만, 그냥 linear gap penalty를 쓴 경우라고 하고 행렬을 예를 들어 보면,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;시퀀스 리드: CCAGTCCA&lt;/li&gt;
&lt;li&gt;어댑터 시퀀스: CCAG&lt;/li&gt;
&lt;li&gt;점수: match 2, mismatch -3, gap penalty -3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="3&amp;apos; 어댑터 떼기" src="http://farm5.static.flickr.com/4094/4782042142_8b73a6bffb.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;이렇게 하면 짠~&lt;/p&gt;</description>
      <category>&lt;a href='/blog/tag/happyhacking/'&gt;happyhacking&lt;/a&gt;</category>
      <pubDate>Sun, 11 Jul 2010 03:26:47 GMT</pubDate>
      <guid isPermaLink="false">http://openlook.org/blog/2010/07/11/trimming-3p-adapters-from-illumina-reads/</guid>
      <dc:creator>Hye-Shik Chang</dc:creator>
      <dc:date>2010-07-11T03:26:47Z</dc:date>
    </item>
    <item>
      <title>perky : 구글 리더에서 Papers로 URL열기</title>
      <link>http://feedproxy.google.com/~r/hyeshik/~3/rHyS1SgMfwM/</link>
      <description>&lt;p&gt;대학원생의 친구, &lt;a href="http://mekentosj.com/papers/"&gt;Papers&lt;/a&gt;!
공부하는 척 할 때 참 좋은 녀석이지만, RSS기능이 없어서 새 글을 받아보려면 반드시 나머지
반쪽이 필요한 어정쩡한 녀석이죠~&lt;/p&gt;
&lt;p&gt;&lt;a href="http://netnewswireapp.com/"&gt;NetNewsWire&lt;/a&gt;에 연결해서
보면 구글리더와 동기화해서 돌아다니면서 버스에서도 볼 수 있고 참 좋긴 한데.. 문제는
구글리더가 최근 글 10개만 주는 바람에, AOP feed가 없거나 글이 한꺼번에 잔뜩
올라오는 &lt;a href="http://www.pnas.org/"&gt;PNAS&lt;/a&gt;나 &lt;a href="http://www.plosone.org"&gt;PLoS ONE&lt;/a&gt;같은 경우에는 거의 글을 대부분 놓쳐버려서
가끔 구글리더 들어가서 확인해야해서 여러모로 귀찮습니다.&lt;/p&gt;
&lt;p&gt;결국 그냥 구글리더로 싹 읽으면 깔끔하고 좋기는 하지만, Papers에 논문 가져다 넣으려고 긁어 넣고 붙이고
하기가 귀찮아서 결국은 NNW에 남아있다가, 오늘 마음잡고 오랜만에 GreaseMonkey로 정리해 봤습니다~&lt;/p&gt;
&lt;p&gt;&lt;a href="http://openlook.org/src/1006/ggreader-papers.user.js"&gt;Google Reader에서 c 눌러서 지금 글 Papers열기 (그리스몽키)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;설치하시면 C 누르면 Papers에서 글이 열립니다~&lt;/p&gt;</description>
      <category>&lt;a href='/blog/tag/happyhacking/'&gt;happyhacking&lt;/a&gt;</category>
      <pubDate>Wed, 23 Jun 2010 11:58:35 GMT</pubDate>
      <guid isPermaLink="false">http://openlook.org/blog/2010/06/23/send-to-papers-on-google-reader/</guid>
      <dc:creator>Hye-Shik Chang</dc:creator>
      <dc:date>2010-06-23T11:58:35Z</dc:date>
    </item>
    <item>
      <title>perky : BSD에서 타임머신처럼 백업 관리하기</title>
      <link>http://feedproxy.google.com/~r/hyeshik/~3/yFP0XZVFO44/</link>
      <description>&lt;p&gt;엊그제 큰일날 뻔했습니다. 연구실 홈페이지 고치다가 www디렉토리를 복사한 다음에 지운다는 것이, 제 홈디렉토리에서 지워버리는 바람에 제 홈페이지가 몽땅 날아가 버린 것. --;
다행히도 작년 5월 백업도 있었고, 그 이후로는 업데이트를 거의 하나도 안 해서 간신히 살릴 수 있었지만 초등학교 때 만들었던 프로그램을 고등학교 다닐 때 모두 날린 이후로 최대 사건이 될 뻔 했습니다.;&lt;/p&gt;
&lt;p&gt;데스크탑은 &lt;a href="http://www.apple.com/macosx/what-is-macosx/time-machine.html"&gt;타임머신&lt;/a&gt;으로 잘 백업하고 있었는데 작년에 서버 옮기고 설정하기 귀찮다고 작업서버 홈 디렉토리 백업을 설정해 두지 않았는데요. 그래서 이참에 &lt;a href="http://blog.interlinked.org/tutorials/rsync_time_machine.html"&gt;rsync로 타임머신하고 거의 똑같이 쓸 수 있다&lt;/a&gt;는 얘길 들은 생각이 나서, 설정했습니다. 잘 되더군용! ^_^ 안심&lt;/p&gt;
&lt;p&gt;물론 파일은 대부분 하드링크 덕에 용량을 크게 차지하지는 않지만, 디렉토리 구조가 계속 복사되는 통에 생각보다는 용량을 꽤 차지했습니다. 타임머신은 최근 하루는 1시간 간격, 1주일은 하루 간격, 1달은 1주일 간격 이런 식으로 오래된 시간일 수록 띄엄띄엄 저장할 수 있도록 돼 있는데요. 그래서 이걸 어떻게 해야하나 검색을 좀 해 보다가 적당한 것이 안 보여서 간단하게 만들어 봤습니다.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://openlook.org/src/1003/cleanup-tm.py.txt"&gt;소스파일 다운로드 (파이썬 2용)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;음 마음이 편안하군요.~&lt;/p&gt;</description>
      <category>&lt;a href='/blog/tag/happyhacking/'&gt;happyhacking&lt;/a&gt;</category>
      <pubDate>Sun, 21 Mar 2010 05:48:32 GMT</pubDate>
      <guid isPermaLink="false">http://openlook.org/blog/2010/03/21/time-machine-like-rsync-backup/</guid>
      <dc:creator>Hye-Shik Chang</dc:creator>
      <dc:date>2010-03-21T05:48:32Z</dc:date>
    </item>
    <item>
      <title>perky : 근황</title>
      <link>http://feedproxy.google.com/~r/hyeshik/~3/MjL2KWrx0dg/</link>
      <description>&lt;p&gt;거의 한 해 동안 글을 안 썼습니다. 바쁜 일도 많았지만 안 쓰다 보니 안 들어오고, 안 들어오니 안 쓰고 순환의 연속으로... 크크.
그래도 여지껏 RSS 구독을 남겨두신 분들께 혹시 궁금하시면 요즘 어떻게 살고 있는지
알려드리려고 근황을 남겨둡니다.&lt;/p&gt;
&lt;p&gt;&lt;img alt="셀카질" src="http://farm5.static.flickr.com/4005/4413754870_b56200c279.jpg" /&gt;&lt;br /&gt;
&lt;strong&gt;&lt;em&gt;올림푸스 E-P1 산 기념으로 시험 셀카;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;작년 2월 말에 대전에서 졸업하고, 서울로 이사했습니다. 요즘은 낙성대역 근처에 삽니다. 보기보다 꽤 살 만한 동네입니다. 언덕이 많아 눈 쌓이면 매우 곤란한 점만 빼면. 처음 몇 달 간은 아침에 바삐 출근하는 사람들을 보기가 좀 갑갑했죠. 대전에선 하늘이 넓은 곳에서 여유롭게 돌아다녔는데 아무래도 서울은 좀 달라요.&lt;/p&gt;
&lt;p&gt;&lt;img alt="직접(?) 구운 RNA 쿠키~" src="http://farm5.static.flickr.com/4035/4412985367_8fd0090a61.jpg" /&gt;&lt;br /&gt;
&lt;strong&gt;&lt;em&gt;직접(?) 구운 RNA 초코쿠키&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;작년 9월부터는 &lt;a href="http://www.narrykim.org"&gt;일하고 있던 연구실&lt;/a&gt;에서 박사과정을 시작했습니다. 2009년 2학기 시작이니까, 보통 4~5년 정도 한다고 생각하면 2013년이나 2014년 정도까지는 계속 학생입니다. (히히) 새로 옮긴 연구실은 &lt;a href="http://en.wikipedia.org/wiki/MicroRNA"&gt;microRNA&lt;/a&gt;라는 생분자를 연구하는 곳입니다. 실험실 분위기가 아주 좋아서 매일 출근하는 게 즐겁습니다. 지도교수님은 잘 모르는 분야의 얘기라도 호기심을 가지고 항상 관심있게 들어주시고, 학문적으로도 놀랍도록 식견이 있으시지만 인품도 모두가 내가 연구책임자가 되어도 저렇게 할 수 있을까 싶을 정도로 좋으셔서, 일할 수 있는 가장 좋은 환경에서 행복하게 일하고 있습니다. ^_^&lt;/p&gt;
&lt;p&gt;&lt;img alt="실험실 설정샷" src="http://farm5.static.flickr.com/4068/4413753418_f4e7f80a54.jpg" /&gt;&lt;br /&gt;
&lt;strong&gt;&lt;em&gt;일하는 척 설정샷. ㅋㅋ;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;연구실에서 생물정보를 전공한 사람은 혼자라서, 여러 프로젝트에서 나오는 대용량 자료 처리는 대부분 맡아서 하고 있습니다. 그 덕에, 많은 사람들과 많은 연구주제에 동시에 참여할 수 있어서, 다양한 분야를 배울 기회가 됐습니다. 혼자하는 주력 연구로는 새로운 작은 RNA 발견을 위한 유전체학적 분석을 하고 있습니다. 돈도 많이 들고 유독물질과 방사능도 많이 접하게 돼서 원래 하던 일처럼 편하지는 않지만, 이제 실험도 어느 정도는 적응이 돼서 재미있게 하고 있습니다. 이히&lt;/p&gt;
&lt;p&gt;&lt;img alt="내 자리" src="http://farm5.static.flickr.com/4067/4412989485_eb1397d6bc.jpg" /&gt;&lt;img alt="내 실험대" src="http://farm3.static.flickr.com/2701/4413756252_138cde63d6.jpg" /&gt;&lt;br /&gt;
&lt;strong&gt;&lt;em&gt;공부하는 자리와 실험대. 사진 찍을 때는 HHKB였지만 지금은 Filco 쓰고 있어요. 파이펫은 길슨.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;그리고 토요일마다 실험실원 여러 명에게 프로그래밍을 가르쳐드리고 있습니다. 요즘 생물 데이터가 워낙 대용량화되는 추세라서 뭘 하려면 정보의 흐름을 다루는 능력이 필요해서 다들 흥미를 가지고 참여하고 있습니다. 파이썬으로 하고 있는데, 전에 C++을 잠시 배운 적이 있었던 사람들이 "프로그래밍이 이렇게 재미있는 것인 줄 몰랐어요!"라고 합니다. 역시 파이썬! ㅋㅋ;&lt;/p&gt;
&lt;p&gt;&lt;img alt="연구실 밖 풍경" src="http://farm3.static.flickr.com/2602/4158635719_42e802ffd8.jpg" /&gt;&lt;br /&gt;
&lt;strong&gt;&lt;em&gt;연구실 자리에서 보이는 바깥 풍경. 쭈욱 오르막이라 모두 가까이 보여서 좋음 +_+&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;주 5일제 하던 곳에서 주 6일제인 곳으로 옮기다보니, 사실 대전에서 서울에 왔어도 오히려 사람을 만날 수 있는 시간이 더 줄었습니다. 그래서 거의 모임이 있어도 못 가고, 점점 사회에서 떨어져서 산에 사는 사람이 되는 느낌이.. &amp;gt;_&amp;lt;.&lt;/p&gt;
&lt;p&gt;저도 작년 예약판매할 때 아이폰을 샀습니다. 원래 아이팟 터치를 늘 친구처럼 데리고 다녀서 소지품 수를 줄이는 효과도 좋지만, 거의 생활을 완전히 바꿔놓은 놀라운 기계네요. 화장실에서 책을 안 읽게 되었다는 슬픈 단점도 있습니다만.. 크... 몇년간 IT 관련해서는 뭘 배운 것이 없었는데, 아이폰 프로그래밍도 조금씩 해 보고 있습니다. 꼭 뭐 만들어 봐야지! 히히&lt;/p&gt;
&lt;p&gt;&lt;img alt="스탠포드 로댕 미술관" src="http://farm5.static.flickr.com/4008/4413025221_59ab0b6ba0.jpg" /&gt;&lt;br /&gt;
&lt;strong&gt;&lt;em&gt;스탠포드 로댕 미술관 앞에서 실험실 동생과 동상 따라하기~&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;올해 초엔 처음으로 미국에 갔습니다. 아 말로만 듣다가 직접 가 보니 음식도 맞고 사람들도 괜찮고 좋네요. 다음에 또 가려면 열심히 연구해서 학회에 뭔가를 꼭 내야겠어요. (동기유발 효과가 불끈불끈) 콜로라도에 있는 &lt;a href="http://en.wikipedia.org/wiki/Keystone_Resort"&gt;키스톤 리조트&lt;/a&gt;에서 &lt;a href="http://www.keystonesymposia.org/meetings/viewmeetings.cfm?meetingid=1062"&gt;관련분야 학회&lt;/a&gt;에 참가한 뒤 샌 프란시스코에 갔습니다. 샌 프란시스코는 항상 날씨가 좋고 좀처럼 비가 오지 않는다는데, 제가 갔던 기간 중엔 폭풍우가 몰아치더군요.; 스탠포드 로댕 미술관. 그동안 미술관에 여러 번 갔지만 감동을 느끼기는 처음이었습니다. 작가가 그리면서 느꼈던 감정을 그대로 느끼는 듯한 감동! 이히히 다른 미술 전시회도 다시 가야 겠어요.&lt;/p&gt;
&lt;p&gt;이제 봄 입니다. 돌아올게요. 종종 또 보아요!&lt;/p&gt;</description>
      <category>&lt;a href='/blog/tag/life/'&gt;life&lt;/a&gt;</category>
      <pubDate>Sun, 07 Mar 2010 12:07:22 GMT</pubDate>
      <guid isPermaLink="false">http://openlook.org/blog/2010/03/07/updates-2010-march/</guid>
      <dc:creator>Hye-Shik Chang</dc:creator>
      <dc:date>2010-03-07T12:07:22Z</dc:date>
    </item>
    <item>
      <title>perky : 군집이룬 자료의 비모수 두 표본 차이 검정 (C 구현)</title>
      <link>http://feedproxy.google.com/~r/hyeshik/~3/nxEwCoDdTUk/</link>
      <description>&lt;p&gt;두 표본 집단의 차이가 의미가 있나 알아볼 때 보통
   &lt;a href="http://en.wikipedia.org/wiki/T-test"&gt;t-검정&lt;/a&gt;을 많이 씁니다.
   t-검정에서는 값의 분포가 정규분포라는 가정이 있어서, 자료의
   분포를 모르거나 정규분포로 바꾸기 매우 난감한 경우에는 t-검정을
   할 수 없어서 &lt;a href="http://en.wikipedia.org/wiki/Non-parametric_statistics"&gt;비모수 검정&lt;/a&gt;을 사용하는데요, 이쪽으로 가장 인기있는
   검정법은 아무래도 &lt;a href="http://en.wikipedia.org/wiki/Mann-Whitney_U"&gt;Mann-Whitney U test&lt;/a&gt;입니다.
&lt;/p&gt;
&lt;p&gt;어느날 MW-U로 재미나게~♪ 통계를 하다가~ 아니!! 결과가 엄청 편향되어 나오는 것입니다!
   비모수라더니!! &lt;a href="http://en.wikipedia.org/wiki/MiRNA"&gt;마이크로RNA&lt;/a&gt;
   &lt;a href="http://en.wikipedia.org/wiki/DNA_microarray"&gt;마이크로어레이&lt;/a&gt;로 나온
   결과를 분석하고 있었는데, 마이크로RNA가 염색체에서 떼로 몰려 있어서
   한 놈이 올라오면 같이 우루루 올라오는 특성이 있다보니 군집이 엄청 큰
   놈들에 의해 전체가 흔들려서, 아 무슨 좋은 방법이 없을까! 하다가 
   군집을 이룬 자료들에 쓸 수 있게 변형한 것
   (&lt;a href="http://www.ncbi.nlm.nih.gov/pubmed/10399203"&gt;Rosner and Grove, 1999&lt;/a&gt;,
   &lt;a href="http://pubs.amstat.org/doi/abs/10.1198/016214504000001583"&gt;Datta and Satten, 2005&lt;/a&gt;,
   &lt;a href="http://portal.acm.org/citation.cfm?id=1518517"&gt;Haataja et al., 2009&lt;/a&gt;)
   들을 발견했습니다. +_+
&lt;/p&gt;
&lt;p&gt;오.... 다 괜찮아 보이지만, 결국은 코드가 공개돼 있는
   &lt;a href="http://www.somnathdatta.org/software/Rank_Sum_2_Groups.txt"&gt;Datta와 Satten의 것&lt;/a&gt;으 로 해서 일단 결과를 뽑았습니다. 매우 만족스럽군요! ^_^
&lt;/p&gt;
&lt;p&gt;그런데 문제는 순수 &lt;a href="http://www.r-project.org/"&gt;R&lt;/a&gt;로 구현되어 있다보니
   속도가 엄청나게 느려서, 자료가 별로 크지도 않은데 거의 2시간씩 돌려야
   돼서 시험삼아 돌려볼 때도 마음을 크게 먹고 돌려야 해서, 바로바로
   결과를 확인하는 재미가 없었습니다.
&lt;/p&gt;
&lt;p&gt;그래서 쭉 벼르고 있다가, 주말에 여자친구가 기말고사 공부해야 해서, 같이 공부하는
   척 하느라 짬이 난 김에
   &lt;a href="http://openlook.org/src/0906/cranksum.c.txt"&gt;C로 새로 코딩했습니다 (다운로드)&lt;/a&gt;. 
   R이나 &lt;a href="http://www.scipy.org/"&gt;SciPy&lt;/a&gt;같은데서 쉽게 쓸 수 있게 외부 의존성을 없애려고, Z-통계치에서
   p-value구하는 부분은 빼서 의존성을 줄였습니다. 그냥 libm만 있으면 됩니다.
   (파이썬에서는 &lt;a href="http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.norm.html"&gt;scipy.stats.norm.pdf&lt;/a&gt;를 써서 Z에서 p-value를 구할 수 있습니다.)
   대략 돌려봤더니 2시간 걸리던게 30초로 줄었군요! 이히히 ^__^*
   간단하게 컴파일한 다음에 파이썬에서 쓰려면 이렇게 쓸 수 있습니다~
&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;ctypes&lt;/span&gt;
&lt;span class="n"&gt;cranksum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ctypes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cdll&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LoadLibrary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;./cranksum.so&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;crs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cranksum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;clustered_rank_sum&lt;/span&gt;
&lt;span class="n"&gt;crs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;restype&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ctypes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;POINTER&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctypes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c_double&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;freecrs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cranksum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;free_clustered_rank_sum_result&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;clustered_rank_sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;grp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;ret&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;crs&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;ctypes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c_double&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctypes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c_int&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;grp&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
              &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctypes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c_int&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;contents&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;S&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ret&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;E.S&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ret&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;Var.S&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ret&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;z.stat&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ret&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;
    &lt;span class="n"&gt;freecrs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ret&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;

&lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;grp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;cluster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;print&lt;/span&gt; &lt;span class="n"&gt;clustered_rank_sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;grp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;으음.. R에 붙이는 것은... 아직 잘 몰라서... (나중에..;)
&lt;/p&gt;</description>
      <category>&lt;a href='/blog/tag/happyhacking/'&gt;happyhacking&lt;/a&gt;</category>
      <pubDate>Tue, 09 Jun 2009 09:26:46 GMT</pubDate>
      <guid isPermaLink="false">http://openlook.org/blog/2009/06/09/optimized-implementation-of-non-parametric-rank-sum-for-clustered-data/</guid>
      <dc:creator>Hye-Shik Chang</dc:creator>
      <dc:date>2009-06-09T09:26:46Z</dc:date>
    </item>
    <item>
      <title>taznux : 정치 성향 테스트</title>
      <link>http://tazb.tistory.com/2855672</link>
      <description>&lt;img src="http://cfs1.tistory.com/upload_control/download.blog?fhandle=YmxvZzE2NTcwQGZzMS50aXN0b3J5LmNvbTovYXR0YWNoLzAvNy5naWY%3D" alt="TAZblog" align="right"/&gt;아래는 측정된 제 정치 성향 입니다.&lt;br /&gt;&lt;br /&gt;&lt;A title="[http://www.pncreport.com/series/poll.html?lm=04]로 이동합니다." href="http://www.pncreport.com/series/poll.html?lm=04" target=_blank&gt;http://www.pncreport.com/series/poll.html?lm=04&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style="PADDING-BOTTOM: 20px; PADDING-LEFT: 20px; PADDING-RIGHT: 20px; PADDING-TOP: 20px" bgColor=#ebf2f3 align=middle&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0 width="100%" bgColor=#ffffff&gt;
&lt;TBODY&gt;
&lt;TR height=60&gt;
&lt;TD style="COLOR: rgb(16,161,188); FONT-WEIGHT: bold" width="20%" align=middle&gt;시장 자유&lt;/TD&gt;
&lt;TD style="FONT-FAMILY: 'Verdana'; COLOR: rgb(16,161,188); FONT-SIZE: 20pt; FONT-WEIGHT: bold" width="30%" align=left&gt;-19&lt;/TD&gt;

&lt;TD style="COLOR: rgb(16,161,188); FONT-WEIGHT: bold" width="20%" align=middle&gt;개인적 자유&lt;/TD&gt;
&lt;TD style="FONT-FAMILY: 'Verdana'; COLOR: rgb(16,161,188); FONT-SIZE: 20pt; FONT-WEIGHT: bold" width="30%" align=left&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://cfile3.uf.tistory.com/original/1940D91B4A2246365CC36A" rel="lightbox" target="_blank"&gt;&lt;img src="http://cfile3.uf.tistory.com/image/1940D91B4A2246365CC36A" alt="" filemime="image/jpeg" filename="pt.png" height="379" width="368"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;A title="[http://www.politicalcompass.org/test]로 이동합니다." href="http://www.politicalcompass.org/test" target=_blank&gt;http://www.politicalcompass.org/test&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;
&lt;H1&gt;The Political Compass&lt;br /&gt;&lt;/H1&gt;
&lt;H2&gt;Economic Left/Right: -3.88&lt;br /&gt;Social Libertarian/Authoritarian: -3.03&lt;/H2&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://cfs13.tistory.com/original/15/tistory/2009/05/31/17/33/4a2240d762594" rel="lightbox" target="_blank"&gt;&lt;img src="http://cfs13.tistory.com/original/15/tistory/2009/05/31/17/33/4a2240d762594" alt="사용자 삽입 이미지" height="400" width="480"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;두개의 그래프가 위아래만 뒤바뀌고 나머지 좌표는 동일합니다.&lt;br /&gt;국내의 정치 성향 테스트에서는 시장 자유에 대한 것이 심하게 좌측인데 반해 영국의 정치성향 테스트는 조금 좌측이군요. &lt;br /&gt;그리고 개인의 자유에 대한 평가는 비슷합니다.&lt;br /&gt;&lt;br /&gt;심심하면 한번씩 해보세요.&lt;br /&gt;&lt;fieldset style="margin:20px 0px 20px 0px;padding:5px;"&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이선스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style="float: left; width: 88px; margin-top: 3px;"&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.0/kr/" target=_blank&gt;&lt;img alt="Creative Commons License" style="border-width: 0" src="http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-left: 92px; margin-top: 3px; text-align: justify;"&gt;이 저작물은 &lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.0/kr/" target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이선스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"&gt;
			&lt;Work rdf:about=""&gt;
			&lt;license rdf:resource="http://creativecommons.org/licenses/by-nc-sa/2.0/kr/" /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about="http://creativecommons.org/licenses/by-nc-sa/"&gt;
			&lt;permits rdf:resource="http://web.resource.org/cc/Reproduction"/&gt;
			&lt;permits rdf:resource="http://web.resource.org/cc/Distribution"/&gt;
			&lt;requires rdf:resource="http://web.resource.org/cc/Notice"/&gt;
			&lt;requires rdf:resource="http://web.resource.org/cc/Attribution"/&gt;
			&lt;permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/&gt;
			&lt;requires rdf:resource="http://web.resource.org/cc/ShareAlike"/&gt;&lt;prohibits rdf:resource="http://web.resource.org/cc/CommercialUse"/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
      <category>etc.</category>
      <category>나는 좌빨인가</category>
      <category>잡담</category>
      <pubDate>Sun, 31 May 2009 08:32:00 GMT</pubDate>
      <guid isPermaLink="false">http://tazb.tistory.com/2855672</guid>
      <dc:creator>태즈</dc:creator>
      <dc:date>2009-05-31T08:32:00Z</dc:date>
    </item>
    <item>
      <title>perky : 한 리스트를 빙글 빙글 돌면서 빈 자리 찾기</title>
      <link>http://feedproxy.google.com/~r/hyeshik/~3/f14reAukaLU/</link>
      <description>&lt;p&gt;요즘 블로그에 통 글을 안 써와서 거의 폐가와 같이 되어 가고 있었는데요.. ^_^
   다름이 아니라, 제가 &amp;quot;이러면 좋겠다!&amp;quot;하고 생각해왔던 바로 그런 성격의 너무 좋은 분을
   만나게 되어서 다른 곳에는 신경 쓸 시간이 없었네요. 이히히;
&lt;/p&gt;
&lt;p&gt;그래도, 1달에 1개 정도는 유지해 두고자;; 쌓아뒀던 코드 단편 하나를 올려 봅니다. 헤헤.
&lt;/p&gt;
&lt;p&gt;종종 아주 긴 리스트에서 자원관리를 하면서, 자원을 &lt;a href="http://en.wikipedia.org/wiki/Sequential_search"&gt;순차탐색&lt;/a&gt;으로 할당해야하는 경우가 있습니다.
   주로 자원이 직접 사람이 쓰는 것이거나 해서, 순서대로 가는 것이 인지적으로나 쓰고 있는
   자리가 모아지는 점에서 유리한 경우에 그런데요. 도서관 같은 곳에서 좌석을 배정한다거나,
   &lt;a href="http://en.wikipedia.org/wiki/DHCP"&gt;DHCP&lt;/a&gt;서버에서 IP 주소를 나눠준다거나, 순차적으로 나눠주는 큐 관리 시스템에서 작업을
   나눠줄 빈 큐를 찾는다거나 생각보다 제법 많습니다.
&lt;/p&gt;
&lt;p&gt;이런 경우에, 10번째부터 순차검색하기 시작했으면 끝까지 돈 다음에 처음부터 9번째까지 돌아야
   하는 것이 중심원리(?)인데요. 구현하는 방법은 물론 클래스 인스턴스가 최근 찾은 인덱스를
   변수로 들고 있다가 그 인덱스부터 끝까지 한 번 돌리고, 처음부터 시작한 인덱스까지 다시
   돌리는 방법이 가장 평범하겠습니다. 완전 순서대로 배정할 필요는 없고 대충만 맞으면 되는
   경우다 싶으면, &lt;a href="http://en.wikipedia.org/wiki/FIFO"&gt;FIFO&lt;/a&gt; 큐 같은 것도 괜찮은데, 이걸 쓰면 시간이 지날 수록 여기저기 듬성 듬성
   나와서 원래 목적과는 달라질 수도 있고요~
&lt;/p&gt;
&lt;p&gt;그래서 range 2번 돌리는 폼 안 나는(?) 코드 대신 보통 끊임없는 &lt;a href="http://en.wikipedia.org/wiki/Iterator"&gt;이터레이터&lt;/a&gt;에서 개수 제한하는
   트릭으로 많이 쓰이는 zip을 섞어서 이렇게 하면 비교적 폼 나게(;;) 연속 검색이 가능한
   순차검색이 되겠습니다~
&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;itertools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;izip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cycle&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;contiters&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;cycleiter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cycle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;lambda&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;elem&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;elem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;izip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cycleiter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c"&gt;# 여기부터는 테스트&lt;/span&gt;
&lt;span class="n"&gt;itgen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;contiters&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;abcdef&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;g&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;itgen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;print&lt;/span&gt; &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="n"&gt;print&lt;/span&gt;

&lt;span class="n"&gt;g&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;itgen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;print&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;
&lt;span class="n"&gt;print&lt;/span&gt;

&lt;span class="n"&gt;g&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;itgen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;print&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="n"&gt;print&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;실행하면 이렇게 나옵니다.
&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;a b c
d e f a b
c d e f a b
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;못 찾으면 전체를 한 번 돌고, 찾으면 거기서 중단하면 그 다음에 시작하면 거기서부터 시작합니다~
&lt;/p&gt;
&lt;p&gt;여기서 종종 마지막으로 돌았던 놈에서부터 다음에 찾을 때 시작하고 싶은 경우가 있는데요. 비슷한 것이 아쉬운 사례로, &lt;a href="http://docs.python.org/library/itertools.html"&gt;itertools&lt;/a&gt;.takewhile을 쓰면 처음엔 조건이 맞을 때까지 다 가져오는 것은 좋은데, 그 다음 원소를 가지고 오고 싶어서 .next()하면 이미 조건 맞는지 보려고 갖고간 바람에, 조건 안 맞는 것 가져오는 목적으로 그 다음 이터레이터를 쓰지 못하는 것이 엄청 불편합니다.
&lt;/p&gt;
&lt;p&gt;그래서 전에 찾았던 부분에서 다시 시작하도록 해 보자면~
&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;itertools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;izip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cycle&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;contiters&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;cycleiter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cycle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;indicesnonfirst&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;xrange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;geniter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;keeping&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;cycleiter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;()]):&lt;/span&gt;
        &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="n"&gt;keeping&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;elem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;izip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cycleiter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indicesnonfirst&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;keeping&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;elem&lt;/span&gt;
            &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="n"&gt;elem&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;geniter&lt;/span&gt;

&lt;span class="c"&gt;# 테스트 부분은 동일&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;네~ 좀 지저분하긴 해 졌는데요;; 실행하면 이렇게~
&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;a b c
c d e f a b
b c d e f a
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;모르는 것을 보면 전혀 못 알아볼지라도 찾아보기 좋아하는 어떤 분(^_^)을 위해 용어에 좀 과도하게 링크를 걸었습니다 ^^;&lt;/em&gt;
&lt;/p&gt;</description>
      <category>&lt;a href='/blog/tag/python/'&gt;python&lt;/a&gt;</category>
      <pubDate>Mon, 30 Mar 2009 16:18:38 GMT</pubDate>
      <guid isPermaLink="false">http://openlook.org/blog/2009/03/31/multiple-sequential-iteration-of-lists/</guid>
      <dc:creator>Hye-Shik Chang</dc:creator>
      <dc:date>2009-03-30T16:18:38Z</dc:date>
    </item>
  </channel>
</rss>

