Tuesday, March 20, 2012

jQuery:: Namespaced event

Javascript, jQuery 에서 하나의 event에 여러개 handler function을 연결하고 컨트롤 할 수 있다.
이를 좀 더 쉽게 사용할 수 있도록 jQuery에선 Namespaced Event 기능을 제공한다.
간단히 요약하자면 event와  handler 의 '연결'을 class 로 name을 주고 이를 컨드롤 할 수 있게 하는 형태다.

흔히 쓰이는 event와 handler 연결 형태는

 $('#button').click( handler1 );
 $('#button').bind('click', handler2);
 $('#button').bind('click', handler3);

와 같은 형태인데, 위의 경우엔 id=button인 element를 클릭하면 handler1, 2,3 세개 handler 함수가 동시에 호출 된다. 경우에 따라서 handler 들을 개별적으로 컨드롤 해야할 경우가 생긴다. 이런 경우 namespaced event 를 사용하면 매우 편리하다.


사용자 로그인 전과 후의 기능을 차별화 하려고 하는 상황을 가정해 보자.
버튼 A를 누르면

1. 로그인 전에는

  • 로그인 창을 띄워준다.
  • 버튼 색깔을 빨간색으로 지정한다.

2. 로그인 후에는

  • 버튼 색깔을 빨간색으로 지정한다. 
  • 사용자 정보 창을 띄워준다. 
아래와 같이 버튼이 지정되어 있다면,

<button id="login">Button</button>


로그인 전 버튼 클릭이 담당하는 모든 handler 함수를 버튼에 연결하고,

 $('#login').bind('click.loginPageShow', loginPage );
 $('#login').bind('click.changeColor',changeColor );



로그인 하는  경우 로그인 페이지 창 띄우는 handler를 버튼 '클릭' event에서 삭제하고, 사용자 정보 창 띄우는 handler를 버튼에 아래와 같이 연결할 수 있다.

 if( login() ) {
    $('#login').unbind('click.loginPageShow' );
    $('#login').bind('click.showUserinfo',showUserinfo );
 }

Wednesday, February 22, 2012

신약개발 실질적 비용은 4조에서 11조

최근 들어 신약 개발 비용은 천문학적으로 높아졌고, 또 높아지고 있다. 보통 신약 하나 개발하는데 1조원 든다 정도로 얘기들을 하는데, Forbes의 Matthew Herper 라는 기자가 이에 관해 심도 있는 조사를 해 본 결과 실제로는 1조가 아니라 약 4조~11조 정도가 소모된다고 한다. (Forbes 기사 )

흔히 알려진 것과 다른 결과가 도출된 이유는 '실패한 신약'에 대한 소모 비용까지 계산에 포함했기 때문이다. 예를들어 2011년 노바티스가 10개의 신약 개발을 추진했고 이 중에 8개가 실패했다면 2개의 신약 성공에 들어간 비용은 10개의 신약 개발 비용과 같다고 놓고 신약 1개 개발 비용을 계산했다는 이야기다.



실질적 신약 1개당 개발 비용


가장 효율적으로 신약 개발을 한 회사는 Amgen 으로 1개당 $ 3.6 billion ( 우리돈 4조 정도) 를 썼고, 그 다음이 Novartis 로 $3.9 billion 이고, 가장 비효율적으로 비용을 소모한 회사는 AstraZeneca 로 개당 $11 billion ( 우리돈 약 11조 이상), 그 다음이 GlaxoSmithKline 으로 $8.1 billion( 우리돈 8조 이상 ) 을 소모했다.

잘 알려져 있는 사실이지만, 신약 개발 비용의 90%는 임상시험에 소모된다. 1,2,3차 임상을 거치면서 소모되는 비용은 엄청난데, 이 과정에서 reject 되면 그 동안에 소모된 모든 노력과 비용은 그냥 거품 처럼 사라져 버린다.

FDA의 신약 허가 기준은 Vioxx 등의 시장 실패 신약 ( 시장에 출시되고 5년이 지난 시점에서 독성이 인정되어 시판이 중지된 신약으로, 단일 약 실패로 인한 피해액이 최고로 알려져 있고, 이로 인해 피해를 본 환자들의 추산 숫자도 수만명 단위 ) 등으로 인해 점점 더 강화되고 있으니, 신약 개발 비용이 쉽사리 줄어들 것 같지 않아 보인다.

과도한 신약 개발 비용을 낮추어줄 가능성은 전혀 없는 것일까?


개인유전정보를 활용한 신약 개발
FDA에서 허가되는 신약의 임상 시험 결과를 본 적이 있는가? 일반인들이 기대하는 수준은 100명이 먹으면 적어도 90명정도는 효과를 보는 수준을 기대할 것이다. 하지만 실제로 시장에 나오는 약의 효과 수준은 이런 기대를 전혀 충족시키지 못하는 경우가 많다. 특히나 Chronic disease에 대한 약들이 대게 이런 결과를 보여주는데, 100명중 플라시보를 복용한 환자들 20명이 효과를 본다면, 신약 허가를 받는 약은 이 보다 조금 높은 25명 30명 수준만 되어도 통과된 사례가 있다.

 즉, 신약으로 개발이 되어도 이를 통해 효과를 보는 사람은 그리 많지 않은 수준이라는 것이다. 여기서 중요한 포인트는 '100명 중 30명에서는 왜 효과가 나타나는가' 이다. 이 30명은 나머지 70명과는 다른 특성을 가진 그룹일 가능성이 있다. 유전적으로 특이한 패턴을 공유한 그룹일 수도 있고, 이와 더불어 특정한 생활 습관을 가진 그룹일 수도 있다.

 지금까지는 이런 그룹에 대한 특성을 분석하기가 쉽지 않았다. 이들의 개인유전정보를 분석하는 것도 엄청난 비용 때문에 어려웠고, 개인의 전방위적 healthcare information 같은건 아예 축적되어 있지도 않았기 때문이다.

하지만 앞으로는 이런 분석들이 절대 불가능한 일이 아니다. 이미 30X Human whole genome 분석 비용은 소비자 가격 기준으로 미국에서 이미 2000달러( 200만원) 대로 떨어졌다. 이는 실험 분석+기초적 분석 까지 포함된 가격이다. 또 스마트 기기들과 다양한 sensor 들의 발전은 개인의 전방위적 개인의료정보 ( EMR or EHR ) 를 수집하여 분석 가능한 형태로 축적할 수 있게 한다.

임상 초기 단계에 실패할 만한 결과를 얻었다고 해보자. 예컨데 100명 중 10명에서만 효과가 나타났다고 하면, 기존에는 그냥 여기까지 소모된 모든 비용을 날리게 되지만, 앞으로는 개인유전정보/의료정보를 가지고 효과가 나타난 그룹 10명을 분석해 볼 수 있다. 분석을 통해 10명의 그룹에서 특징적인 유전적 혹은 특이적 의료정보를 발견하게 되면, 신약의 타겟 환자 그룹을 더욱 명확하게( 그리고 좀 더 협소한 그룹의 환자들에게) 정의하여 새롭게 임상 시험을 하고 기준을 통과할 가능성이 생겨난다.

개인유전정보/의료정보의 활용은 천정부지로 올라간 신약개발 비용을 낮추고, 효율적으로 신약이 개발될 수 있도록 하는 형태로 앞으로 이용되게 될것이고, 이런 형태로 제약 회사들과 접점이 생겨나게 될 것으로 생각한다. 그렇게 되면 신약 개발은 더이상 거대 글로벌 제약사들만의 전유물이 아니게 될 것이고, 비로소 신약개발의 봄이 오게 되지 않을까... 하는 생각을 해본다.

Friday, February 10, 2012

jQuery 에서 동적 이벤트 등록시 이벤트 중복 문제

Javascript 에서 addEventListener 그리고 jQuery에서 .bind , .click 등 으로 다양하게 이벤트를 등록할 수 있다. 하지만, 어떤 DOM에 이벤트가 등록되는지에 따라 이벤트는 원하는 대로 동작하지 않는 경우가 발생할 수 있다. 몇가지 상황을 들어 본다.

1. 동적으로 생성되는 DOM에 대한 이벤트 등록
동적으로 새롭게 생성되는 이벤트에 대한 등록은 상대적으로 안전하다고 본다. 생성되는 이벤트에 대해 이벤트가 1:1로 등록이 되게 코딩을 한다는 가정 하에서. 하지만, DOM이 여러번 생성되고 동적 생성시 동적 삭제가 제대로 동반되지 않을 때 문제가 발생할 수 있다.

$('#create').click( function(){
     $('<div id=button >Button</div>').appendTo('body');
     $('#button').click( function(){
          alert('good');
     });
  });

위의 코드는 어떻게 동작할까? create 을 누르면 id=button인 버튼이 생성이 되고, 버튼을 누르면 'good' 이란 문구를 띄우는 창이 발생하는 이벤트가 등록된다. create를 두번 누르면 어떻게 될까?

버튼이 하나더 생긴다! 하지만, 새로 만들어진 버튼에는 이벤트가 등록되지 않는다. 동시에 처음에 만들어졌던 버튼을 누르면 alert 창이 두번 뜬다. id=button를 가진 첫번째 엘리먼트에 이벤트가 등록되므로 이후로 만들어지는 버튼에는 이벤트가 등록되지 않는다.

id 가 같은 엘리먼트가 여러개 만들어지는 건 피해야하지만, 그럼에도 불구하고 굳이 이 상황을 해결하고 싶다면, 즉 만들어지는 버튼 각각에 대해 이벤트를 등록하고 싶다면? 아래와 같이 각 엘리먼트 발생시 직접 이벤트를 연결해주면 된다.

$('#create').click( function(){
     $('<div id=button>Button</div>').appendTo('body').click( function(){
          alert('good');
     });
  });

2. 존재하는 DOM에 대한 이벤트 등록
보통 문제는 존재하는 DOM에 대한 이벤트 등록이다.
$('#button').click( function(){
       $('#start').click( function(){
               alert('What?');
       });
  });

위의 코드는 버튼( id=button인 엘리먼트)을 클릭하면, id=start 인 엘리먼트에 alert 를 띄우는 이벤트를 등록한다. 버튼을 한번 누르고 나면 이후에 start 를 눌렀을 때, 한번 alert 창을 띄운다, 이것이 이 코드를 작성한 사람의 의도일 것이다.

그런데 버튼을 두번 누르면 어떻게 될까?

start 엘리먼트에 이벤트가 두번 등록된다. 그래서 start 를 누르면 두번 alert 창이 뜬다. 한번 더 버튼을 누르면? 당연히 세번 alert 창이 뜬다.
이 문제를 해결하는 가장 간단한 방법은 버튼을 누를 때 마다 아래와 같이 기존에 등록된 'click' 이벤트를 제거하는 것이다.

$('#button').click( function(){
       $('#start').unbind('click');
       $('#start').click( function(){
               alert('What?');
       });
  });

기본적으로 동적 생성되는 DOM 이 아닌 경우라면 이벤트 등록을 중복하지 않는 것이 후폭풍을 막는 지름길이 아닐까 생각하고, 써야하는 상황이라면 항상 이벤트 중복이 되지 않게 주의를 기울여야 함을 기억해 놓자!!

Wednesday, December 21, 2011

Google PageRank 로 뽑아보는 인기 Blog 글

 한해를 정리하며 자신이 일년간 쓴 블로그 글들이 얼마나 impact가 있었는지 체크해보는 것도 의미 있으리라... Google analytics 등 분석 툴을 이용해 각 글들의 클릭수, 읽은 시간 등을 체크해 볼 수도 있지만, 여기서는 각 블로그 글의 Google PageRank 를 이용해 인기순위를 체크해 보는 간단한 Perl script 를 만들어 본다.

준비
WWW::Google::PageRank
Web::Query
두개의 Perl 모듈

1. Blogger 에서 BlogID 얻어내기
Google 에서 제공하는  Blogger API 를 보면, 각 Blogger 블로그에 대한 feed를 얻기 위해, blogID를 알아야 한다. 이를 확인 하는 방법은 아래 두가지를 꼽아 볼 수 있다.

 a) 디폴트 feed 페이지( http://blog-name.blogspot.com/feeds/posts/default )에서 id 태그에 blog-'blogID' 형태로 삽입된 blogID 를 얻어내는 방법

b) feedburner 등으로 디폴트 feed 페이지를 변경하여 a) 방법이 불가능한  경우, 블로그 대문 html 파일 하에 item-action 클래스로 묶인 태그 하의 링크 주소에 blogID='blogID' 형태로 삽입된 blogID를 읽어오는 방법

위 두가지 방법으로 이 블로그의 blogID 를 얻어내는 코드는 아래와 같다.

# Blogger계정의 블로그 feed 주소 ( goldbio 부분에 자신의 블로그 주소 앞부분을 넣으면 된다 )
my $blog_add=qq|http://goldbio.blogspot.com/feeds/posts/default|;
# a 방법 wq($blog_add)->find('id')->text=~/blog-(\d+)/; my $id=$1; # b 방법  wq($blog_add)->find('.item-action')->find('a')->attr('href')=~/blogID=(\d+)/; my $id=$1;




위의 코드에는 Web::Query 를 이용해 html 페이지를 파싱했는데, 이 모듈은 jQuery와 같은 방식으로 태그 이름, 클래스 이름 등을 사용해 간편하게 html 페이지 요소에 접근할 수 있도록 하는데, 같은 기능을 하는 모듈로 pQuery 라는 모듈도 있다.  ( 이 모듈은 올해 진행되는 서울 펄 크리스마스 트리에 언급되어 알게 되었는데, jQuery 를 최근에 많이 쓰다보니 다른 모듈들 보다 훨씬 편한 느낌^^)




2. 각 블로그 글의 PageRank 얻어내기
  
blogID 를 얻어낸 후엔 이를 이용해 해당 블로그의 feed를 아래 주소를 통해 접근할 수 있다.
http://www.blogger.com/feeds/blogID/posts/default ( blogID 부분에 해당 블로그 id를 넣으면 된다 )
이 주소로는 대문 페이지에 보이는 글들만 얻어올 수 있기에, 한해 동안의 블로그 글을 얻어내려면 옵션을 추가해야 한다. 


&published-min=2011-01-01-T00:00:00 을 위의 feed 주소 뒤에 붙이면 2011년 1월 1일 0시 부터 쓴  모든 글들에 접근할 수 있다. 2011년에 쓴 글들이 꾀나 많다면 &max-results=100000 과 같이 적당한 최대 검색값을 덧붙인다.  


www.blogger.com/feeds/$id/posts/default?published-min=2011-01-01T00:00:00&max-results=100000000


위의 주소로 접근하면 이 블로그에 2011년 한 해 동안 업데이트된 글들이 모두 포함된 feed 를 확인할 수 있다.  이제 각 글들의 Pagerank 를 확인하면 된다. 먼저  각 글들의 URL 을 얻어내고, 얻어진 URL 을 WWW::Google::PageRank 를 이용해 확인하면 된다.


글의 URL 은 아래와 같은 형태로 각 블로그 글 마다 삽입되어 있는데, 
<link rel='alternate' type='text/html' href='http://goldbio.blogspot.com/2011/09/jquery.html' title='jQuery::이미지 크기 동적으로 변경'/>

여기서 href 아래 주소만 Web::Query 를 이용해 얻어내는 코드는 
$feed->find('link')->attr('href') 와 같이 쓸 수 있다.  $feed에는 이와 같은 link 가 블로그 글 숫자 만큼 들어 있고, 이를 모두 얻어내야 하므로 코드는

$feed->find('link')->each ( sub {
   my $i=shift;
   my $post_link=$_->attr('href');
});
와 같이 쓸 수 있다. 

WWW::Google::PageRank 사용법은 간단하다.

주어진 URL 에 대해 아래와 같은 코드로 pagerank를 확인할 수 있다.

my $pagerank=WWW::Google::PageRank->new;
my $pagerank= scalar( $pagerank->get( URL ) ) ; 

최종적으로 Feed 페이지를 Web::Query 모듈을 이용해 파싱하여 각 블로그 글들의 URL 을 얻고, 해당 URL 을 이용 Pagerank 를 얻어내는 코드를 종합해 보면 아래와 같이 쓸 수 있다. 




## 2011년 블로그 Feed 주소
my $blogger_API=qq|http://www.blogger.com/feeds/$id/posts/default?published-min=2011-01-01T00:00:00&max-results=100000000|;



## 각 블로그 글에 해당하는 Google Pagerank 출력
my $q=Web::Query->new( $blogger_API );
$q->find('link')->each( sub{
    my $i=shift;
    next if $_->attr('rel')!~/alternate/;
    my $post_link=$_->attr('href');
    my $post_title=$_->attr('title');
    my $post_pagerank=scalar( $pr->get($post_link) );
    print "$post_title\t$post_link\t$post_pagerank\n" ;
});




3. 종합

인기 블로거가 아닌 이상, 각 블로그 글들은 아마 대부분의  글의 Pagerank 가 0 일 것이다. (참고로 이 블로그의 모든 글 108개 중 pagerank 가 1 이상인 글은 2개 뿐이다 -pagerank 는 10점이 최고 점수) 그러니 결론적으로 블로그 글 인기순위 메기기에 pagerank 는 부적합해 보인다. 따라서 다른 용도로 pagerank 수치를 적절하게 결합해서 사용하는 것을 추천!

Monday, November 21, 2011

뭔가 배우고 싶다면 6개월 지속하자!!


3-4년 전 쯤 읽었던 책 'The brain that changes itself' 는 뇌과학의 흥미로운 연구결과들을
대중의 입맛에 맞게 맛나게 풀어써 놓은 책인데, 오늘 책장을 뒤적거리다 이 책을 뽑아들고
휙휙 넘겨보다 기억해 둘 만한 내용이 있어 나눠 본다. 

1. 만시간 법칙

학습 이론에 관해선 수많은 연구결과들이 발표되어 왔는데, 그 중 유명한 것이
에릭슨의 '만시간 법칙' 으로, 현재 전세계에서 가장 잘 팔리는 논픽션 작가
말콤 글래드웰의 책 '아웃라이어' 에 소개되어 널리 알려졌다. 

만시간 법칙은 어떤 분야의 전문가가 되기 위해선 만시간, 10년 정도의 시간을
꾸준히 노력해야 한다는 내용이다. 에릭슨의 이 연구 결과는 다양한 분야의
전문가들을 꼼꼼히 연구한 결과 밝혀진 내용으로 상당히 신뢰할 만 하다. 
단, 여기에 조건이 있는데, '10년 동안 그냥 했던거 반복' 만 하면 안 되고, 
자신의 실력을 향상 시키기 위한 '잘 조직된 연습' ( Deliberated effort ) 로서의
만시간이 필요하다는 것이다. 

2. 'Monday-Friday' 법칙
The brain that changes itself 에 담긴 연구 결과는 의사이자 생리학 박사인 Alvaro Pascual-Leone 이란
사람이 하버드 의대에서 수행한 것으로, '읽기 능력' 의 수행 능력 향상과 학습의 지속 시간 그리고
뇌의 변화를 관찰한 결과로 얻어진 것이다. 

간단하게 결과를 요약하면, 주중에 월요일 부터 금요일 까지 열심히 익히고 배우면 금요일까지
수행 능력이 매일 향상이 된다. 하지만 토요일, 일요일을 쉬고 월요일에 수행 능력은 다시 연습을
시작하지 전과 같은 레벨로 떨어진다. 

하지만, 장기간 이런 수행능력 향상 연습을 반복하면 평균 6개월이 지나면 '월요일 효과' 가 사라진다.
즉, 몇일 쉬어도 수행 능력은 꾸준히 유지가 된다. 이 상태에서 2달 정도가 지나도 수행 능력은 
약간의 '회복 시간' 이 지나고나면 다시 원상태로 회복된다.

6개월 동안의 연습 시간이 지나고 나서, 뇌 fMRI 사진을 찍어보면, 연습한 과업을 수행할 때
뇌가 관여하는 형태가 6개월 전과 확연히 다르다. 즉, 6개월 정도의 '꾸준한 노력' 이 지속되면
뇌 자체가 이 과업을 '빠르고 효과적으로 수행할 수 있을 만큼' 새로운 뇌 세포간 네트워크를
만들어 내게 되고, 한번 이렇게 '뇌 구조가 바뀌고 나면' 이 과업은 이제 쉽게 잊지 못하는
언제든지 익숙하게 수행할 수 있는 일이 된다는 것이다. 


3. 6개월 지속 법칙

이 연구 결과를 따르자면 '평범한 보통사람' 으로서 어떤 일을 제대로 익히기 위해서는 6개월
정도를 꾸준히 지속하는 노력이 필요하다. 생각해 보면, 대게 우리는 몇주 열심히 혹은
한두달 열심히 하고 나서 조금 시간이 지나서 그 동안 열심히 한걸 새까맣게 까먹고
자신의 우둔함을 한탄하는 경우가 아주 빈번하지 않나? 

하지만, 그게 당연한 것이니 그럴 필요가 없다. 뭐든 6개월 정도를 꾸준히 지속하면
그 일 자체가 우리 뇌속에 각인이 되고, 우리 몸의 일부분이 된다. 
'빡세게 짧은 기간 열심히' 보다는 '꾸준한' 노력이 필요하다. 


4. 전문가의 뇌

예전에도 전문가가 일을 처리할 때의 뇌에 관한 글을 많이 썼었는데, 
다시 한번 더 언급해 본다. 전문가는 흔히 생각하듯 '창의적' 인 사람과는
거리가 멀다. 반대로 전문가는 어떤 특정한 일을 수행하는데 보통 사람이
믿지 못할 만큼 빠르고 효율적으로 일을 처리할 수 있다. 

이것이 가능한 것은 앞서 언급했던것 처럼 뇌 자체가 그 일을 빠르고
효율적으로 처리할 수 있는 새로운 뇌구조를 만들어 두었기 때문이다.

대게 여기는 '장기기억' 에 관련한 뇌가 관련한다. 전문가들은 엄청나게
많은 경우의 수, 그리고 필요한 정보를 장기기억에 저장해 놓고 언제든지
빠르게 꺼내 쓰고, 또 효율적으로 조합할 수 있다. 반면에 비전문가들은
어떤 정보가 필요한지 모르는 경우가 많고, 또 안다 하더라도 이런 정보들을
확인해서 확보하고, 또 이들을 어떻게 적절히 조합해서 문제를 해결해야하는지
에 대해 엄청나게 머리를 쓰면서 에너지를 소비해야 한다. 

그래서 실제로 비전문가들이 전문가들에 비해 머리를 훨씬더 많이 쓴다. 
뭔가를 잘 못하는 사람한테 '머리 좀 써라' 라고 전문가가 핀잔을 주는 건
사실 잘못된 말이다. 전문가는 비전문가에 비해 같은 일을 수행할 때
20% 정도 밖에 뇌를 쓰지 않는다. 


5. 마무리
나이탓, 머리탓 하는 사람들 무지 많다. 
뭐든 6개월은 지속해서 노력하고 나서 그런 소리 하자. 


실제로 자기가 '나이가 들어서 이런저런 일들을 할 수 없다' 라고 
생각하면 실제로 그렇게 된다는 최근 연구 결과가 있다. 그런 사람들이
평균적으로 훨씬 건강 상태도 안 좋고, 평균 수명도 짧았다고 한다.  

그딴 핑계는 대지 말고 젊게, 항상 배우고 살자. 

Thursday, September 1, 2011

jQuery::이미지 크기 동적으로 변경

아래와 같이 이미지를 표현하고 난 후,

<img src='yes.jpg'>


상황에 따라 이미지 사이즈를 동적으로 변경해야 하는 경우가 종종 발생한다.
한 예로, 이미지의 가로와 세로의 길이를 비교해서 긴 쪽 이미지를 100px 로 바꾸는 경우를 jQuery 를 이용하면 어떻게 될까.


var img=$('img');
if( img.width()  > img.height() ) {
   img.width('100px');
}else{
  img.height('100px');
}


작동해야 할 것 같은 이 코드는 원하는 대로 작동하지 않는다.
원인은 이미지가 완전히 로딩되지 않은 상태에서 이미지의 가로, 세로 길이를 비교했기 때문이다. alert 를 이용해 img.width() 와 img.height() 를 찍어보면 값은 0으로 나온다.

따라서 위의 코드를 이미지가 완전히 로딩되고 난 이후에 동작하도록 고쳐야 한다.
load 함수를 이용해 이를 고려한, 완전히 동작하는  코드는 아래와 같다.



var img=$('img');

img.load( function() {
   if( img.width()  > img.height() ) {
     img.width('100px');
   }else{
     img.height('100px');
   }
}



PS::
위의 코드를 이용한 이미지 사이즈 변경은 한가지 문제점을 가지고 있는데,
.load 함수의 실행은 이미지가 완전히 로딩된 후에 일어난다는 사실이다.

즉, 큰 이미지가 로딩되어 화면에 표시된 후( 네트웍 속도가 느릴 수록 이 효과는 극대화),
load 함수에 따라 이미지 리사이징이 일어난다.
문제 해결은간단한데, .load 함수 이전에 이미지 표시를 막으면 된다.

1. css 파일에 이미지 표시를 하지 않는 것으로 default 설정을 한다.

img{
  visibility:hidden;
} 


2. .load 함수에서 이미지 표시 제한을 풀어준다.

img.load( function() {
   if( img.width()  > img.height() ) {
     img.width('100px');
   }else{
     img.height('100px');
   }
   img.css('visibility','visible');

}

Saturday, August 6, 2011

GigaScience :: BGI 가 출간하는 저널

BGI 가 BioMedCentral 과 합작하여 GigaScience라는 새로운 저널을 출간한다는 소식이다.  ( http://www.gigasciencejournal.com/ )

'Big Data' 에 기반한 생의학 연구들의 출판을 목표로 하고 있고, 리뷰 과정에서 기존의 '학문적 의미'에 대한 잣대와 동시에 데이터의 유용성과 재연성을 중요한 잣대로 할 계획이라고 한다.

또하나 흥미로운 점은 '데이터셋' 자체에 DOI 를 부여하여, 데이터가 하나의 연구 논문에서 분석되는데서 벗어나 넓리 퍼져나가 다양한 연구에 이용될 수 있도록하여 데이터의 가치를 극대화하겠다는 점을 공언한 점이다.

"데이터의 '저장'과 함께 데이터의 효과적인  '전파' 도 중요한 문제다  "
- GigaScience 저널의 편집장 Scott Edmunds( BGI 소속)

데이터셋 자체에 DOI 를 부여하는 건 정말 '학계' 에서 보기 드문 획기적인 발상이다.  또한 이는 지난 10년 간의 Genomic data 들의 낮은 재사용성을 NGS data에 대해 답습하지 않을 수 있는 가능성을 어느 정도 열어 준다고 평가한다.

Microarray database인 NCBI 의 GEO에는 현재 24,000여개의 독립된 dataset (GSE 단위) 이 존재하지만, 두번 이상 재분석 된 dataset은 손에 꼽을 정도다. 기본적으로 어떤 논문에 어떤 GSE data가 쓰였는지 논문 본문을 검색하거나, 반대로 geo 데이터를 검색하지 않는 이상 알 수 없고, 해당 논문이 인용이 되어도, 논문에 딸린 dataset에 대한 인용인지를 평가하는 것도 어려운 등의 문제가 존재하여, dataset 자체에 대한 평가가 어려웠다는 문제가 있었기 때문이다.

1. Dataset 자체에 DOI 가 붙으면, 이를 분석한 논문과 별개로 dataset 자체에 대한 citation 이 가능해진다. 따라서 어떤 Dataset 이 퀄리티 높고, 재연성이 높은 dataset 인지를 일목요연하게 search하고 분석하는 것이 가능해 진다.

2. 인용이 가능해짐은 곧, dataset 자체로 높은 citation 을 얻을 수 있다는 얘기. 이는 곧, 높은 품질의 dataset 생산과 '전파' 에 대한 연구자들의 '동기'를 유발하게 하는 효과를 불러 일으킬 수 있다.
이는 다시 재연가능하고 유용한 dataset 숫자의 증가라는 긍정적인 결과로 이어진다.

2010년이 넘어가면서 본격적으로 생물학은 data dependent information science 로 넘어왔다. 바야흐로 bioinformatics 의 전성시대가 열리고 있고, dataset 자체가 논문과 상응하는 DOI 를 가질 수 있는 시대가 열렸다는 것은 이런 '시대의 흐름'을 보여주는 한 단면이 아닐까