언제부터인가 프로그래밍을 공부하면서 하드웨어적인 용어가 많이 등장함을 느끼고 또한 그것에 대한 궁금증이 생겼다. 해서 샀던 책이 "프로그래머가 몰랐던 멀티코어 CPU 이야기" 라는 책이다. 표지나 소개와는 달리 나에게는 외계어로 느껴지는 언어로 설명을 해놨는데.. 아.. 좌절뿐..
그런데 얼마전에 좋은 blog를 발견해서 이를 포스팅한다. 회로에서 RAM, 결과적으로 cpu까지 그리고 기계어, 어셈블리어, 컴파일러등 내게 필요한 지식의 공백을 매워줄만한 내용들로 차있다. 또한 굉장히 intro적인, 그러니까 완전 생초짜를 위한 글인 듯 보인다. 물론 사이사이 전개에 설명이 부족하지만(이는 아마도 본역의 목적 "intro"의 역할을 위한 이율배반적인 것이라 느껴진다) 꼭 읽어보기를 강추할만한 블로그 인것 같다.
링크는 아래에.
http://maanu.egloos.com/
Monday, September 20, 2010
C++ part 2 (객체지향의 도입)
chapter3 : 클래스의 기본
C++에서는 구조체(struct)를 이용하여 변수를 선언할때 struct를 붙이 않아도 된다(C에서는 반드시 struct 를 붙여야 했고 이를 피하기 위해 구조체를 선언할때 typedef를 이용하였다). C++에서는 구조체에 함수를 넣을 수 있는데 이는 구조체가 class의 범주에 속하기 때문이다.
클래스 = 맴버변수 + 멤버함수
-데이터 추상화 : 현실세계의 사물을 데이터적인 측면과 기능적 측면을 통해서 정의하는 것.
-클래스 : 추상화된 데이터를 가지고 자료형을 정의 하는 것
-객체 : 클래스를 이용해서 정의된 자료형의 변수
내부접근은 같은 클래스 내의 존재하는 맴버에 의해 접근되는것, 이 이외는 외부 접근이라 한다.
private 으로 맴버가 선언되면 내부접근만 허용되는 것이고 public으로 선언되면 외부접근까지 허용하는 것이다. private도 public도 없으면 private 으로 간주한다 (단 구조체일 경우 default는 public이다).
클래스의 맴버함수가 전달 인자가 없을때 void는 보통 생략한다, 클래스의 내부를 간결하기 위하여 함수는 외부에서 정의가 가능하다(예를 들어 aa 라는 클래스가 있으면 그안에 bb라는 맴버함수가 잇을때 class aa{public: void bb();} 라고만 해놓고 외부에 aa::bb(){}식으로 외부에서 bb를 정의할수 있다). 클래스의 맴버 함수를 내부 선언 한다는 것은 그 함수를 in-line화 하고자 하는 것이다. 맴버 함수를 외부에서 정의 했을 때에 in-line화 하고 싶을 때는 외부 정의시 앞에 inline을 붙여 주면 된다.
chapter4 : 클래스의 완성
캡슐화와 정보은닉을 충족하는 클래스가 좋은 클래스이다.
캡슐화 : 관련 있는 데이터와 함수를 하나의 단위로 묶는 것.
정보은닉 : 객체 외부에서 객체의 맴버 변수에 직접적인 접근을 허용하지 않는것.
정보은닉을 위해 멤버변수의 접근을 위한 맴버함수들을 access method라고 한다.
C++에서는 클래스 선언및 정의 부분에서 맴버 변수를 초기화 할수 없다(java와 c#은 가능).
일반적으로 클래스 객체를 생성과 동시에 초기화 할수 없다(물론 맴버 변수가 public이라면 상관없다). 이럴 때 이용하는 것이 생성자 (constructor)이다.
생성자 : 1.함수이다, 2.클래스의 이름과 같은 이름을 지닌다, 3.리턴하지도 않고 리턴 타입도 선언되지 않는다.
클래스에 생성자가 하나도 정의되어 있지 않을시 default 생성자가 자동 삽입된다. 생성자 역시 함수 이므로 오버로딩이 가능하다. 디폴트 매개 변수 설정 역시 가능하다.
동적메모리가 할당된 클래스는 클래스의 객체의 소멸시 메모리를 반환해야 하는데 이를 자동화하기 위해 이용될 수 있는 것이 destructor(소멸자)이다.
소멸자 : 1.함수이다, 2.클래스의 이름 앞에 ~가 붙은 형태의 이름을 지닌다, 3.리턴하지도 않고 리턴타입도 선언되지 않는다, 4.매개변수를 받을 수 없다.따라서 오버로딩,디폴트 매개 변수 선언이 불가능하다.
소멸자 역시 생성자처럼 아무런 선언이 없을시 디폴트 소멸자가 삽입된다.
생성자 소멸자의 결론 : 클래스를 정의할때에 멤버 변수를 초기화를 위해서 생성자를 항상정의한다. 반면 객체 소멸 시 처리해야할 것(동적 메모리를 해제)이 있을때만 소멸자를 정의한다.
객체를 동적 메모리에 할당해서 생성과 소멸 시에 new와 delete가 사용된다. malloc과 free는 사용될수 없는데 이는 malloc과 free는 단순히 힙 영역에 메모리를 할당할 뿐이지 객체 생성시 필요한 생성자와 소멸시 필요한 소멸자를 호출하는 기능이 없기 때문이다.
this는 자기 참조 포인터로 이름 그대로 자기 자신을 가리키는 용도의 포인터이다.
private으로 선언된 맴버 변수는 원래 외부 접근이 불가능하나 friend로 선언된 전역 함수나 다른 클래스에 의해서 맴버 변수의 외부 접근이 가능해 진다.
chapter5 : 복사생성자
변수 초기화 하는 방법 int val = 20 이렇게 하는 방법이 있고, int val(20)이렇게 하는 방법이 있다. 첫번째 것이 두번째 것으로 묵시적 변환이 일어난 것이다.
복사 생성자 : 자기 자신과 같은 형태의 객체를 인자로 받을 수 있는 생성자 (예, class AA{public: AA(AA& a){}})
복사 생성자를 정의 할때 매개변수에 &(레퍼런스) 기호를 붙여야 한다. 그렇지 않으면 무한 루프에 빠지게 된다(레퍼런스화 되어 있지않다면 무한 반복해서 계속 복사 생성자를 call할 것이다.복사 생성자가 호출되는 시점을 고려해 보면 알수 있다).
복사 생성자 역시 정의 해주지 않아도 디폴트 복사 생성자가 생기나 이럴땐 shallow copy를 하기때문에 객체가 배열이나 스트링처럼 주소를 담고 있는 맴버 변수가 있을때 주소를 카피 하기 때문에 문제가 있을 수 있다. 이럴 땐 직접 복사 생성자를 정의해서 deep copy를 해야 한다.
복사 생성자가 호출되는 시점 : 1.기존에 생성된 객체로 새로운 객체를 초기화하는 경우, 2.함수 호출 시 객체를 값에 의해 전달하는 경우, 3.함수 내에서 객체를 값에 의해 리턴하는 경우.
chapter6 : static 멤버와 const 멤버
const 키워드의 복습 : 1.const double PI=3.14라고 선언시 PI=3.1415라고 하면 error,즉 const라고 지정한 변수는 값을 변화 할수 없다. 2. const int* pN=&n이라고 하고 *pN=20이라고 하면 error, 즉 const화한 포인터 변수는 자신이 가르키는 값을 변화 시킬수 없다(포인터 변수를 통해서 값을 바꿀수 없다). 3.int* const pN=&n1이라고 하면 *pN=20은 가능하나 pN=&n2를 하면 error, 즉 pN이 가리키는 주소가 저장한 value는 변경할수 있으나 pN이 가리키는 주소값 자첼 바꿀수는 없다.
클래스에서 값이 변하지 않는 맴버변수는 const를 지정하면 좋다. 이러한 const화 된 맴버 변수를 초기화 하기 위해서 member initializer라는 기법이 필요하다. 생성자이름(매개변수들) : const 맴버 변수(매개 변수) 꼴로 초기화 한다(예 student라는 class가 있고 그안에 id가 const int화 되어 있으면 id를 초기화 하기위한 생성자는 student(int _id) : id(_id) 가 되어야 한다).
const 함수도 만들수 있다. const화 된 함수는 맴버 변수를 참고 할수는 있으나 조작은 불가능하다. 또한 const화된 함수는 맴버 변수의 포인터를 리턴 할수도 없으며(리턴되는 포인터를 const화 시키면 가능하다, 곧 const char* func() const 라고 리턴되는 타입 char*을 const화 시킨면 가능) const화 되지 않은 함수를 호출할 수도 없다. 이는 다른 경로를 통한 맴버 변수의 조작을 방지하기 위함이다.
const 키워드를 이용해 객체도 상수화가 가능하다. 그렇게 되면 객체의 맴버 변수의 조작이 불가능 할뿐만 아니라 상수화된(const화된) 맴버 함수만 호출이 가능해 진다.
상수함수냐 아니냐에 따라 함수 오버로딩이 가능하다(매개변수가 같더라도 상수화냐 아니냐에 따라 다르게 인식).
클래스의 static 맴버의 특징 : 1.main 함수가 호출되기도 전에 메모리 공간에 올라가서 초기화된다. 따라서 public으로 선언이 된다면, 객체 생성 이전에도 접근이 가능하다(거꾸로 생각하면 static 변수를 private화하면 객체에 의한 접근만 가능해진다). 2.객체의 멤버로 존재하는 것이 아니다. 다만 선언되어 있는 클래스 내에서 직접 접근할 수 있는 권한이 부여된 것이다.
static 맴버변수, static 맴버함수는 다른말로 class 변수, class 함수라고 한다.
explicit 키워드 : 생성자 앞에 explicit를 써주면 묵시적인 생성자 호출을 허용하지 않는다는 의미이다(AA 라는 클래스가 있을때 explicit AA(int _a){}라고 생성자가 explicit 키워드가 붙어있으면 AA a(10)은 가능하나 AA a=10은 불가능)
mutable 키워드 : mutable로 선언된 맴버 변수는 맴버함수가 const라고 선언되었더라도 변경이 가능하다.
const 함수도 만들수 있다. const화 된 함수는 맴버 변수를 참고 할수는 있으나 조작은 불가능하다. 또한 const화된 함수는 맴버 변수의 포인터를 리턴 할수도 없으며(리턴되는 포인터를 const화 시키면 가능하다, 곧 const char* func() const 라고 리턴되는 타입 char*을 const화 시킨면 가능) const화 되지 않은 함수를 호출할 수도 없다. 이는 다른 경로를 통한 맴버 변수의 조작을 방지하기 위함이다.
const 키워드를 이용해 객체도 상수화가 가능하다. 그렇게 되면 객체의 맴버 변수의 조작이 불가능 할뿐만 아니라 상수화된(const화된) 맴버 함수만 호출이 가능해 진다.
상수함수냐 아니냐에 따라 함수 오버로딩이 가능하다(매개변수가 같더라도 상수화냐 아니냐에 따라 다르게 인식).
클래스의 static 맴버의 특징 : 1.main 함수가 호출되기도 전에 메모리 공간에 올라가서 초기화된다. 따라서 public으로 선언이 된다면, 객체 생성 이전에도 접근이 가능하다(거꾸로 생각하면 static 변수를 private화하면 객체에 의한 접근만 가능해진다). 2.객체의 멤버로 존재하는 것이 아니다. 다만 선언되어 있는 클래스 내에서 직접 접근할 수 있는 권한이 부여된 것이다.
static 맴버변수, static 맴버함수는 다른말로 class 변수, class 함수라고 한다.
explicit 키워드 : 생성자 앞에 explicit를 써주면 묵시적인 생성자 호출을 허용하지 않는다는 의미이다(AA 라는 클래스가 있을때 explicit AA(int _a){}라고 생성자가 explicit 키워드가 붙어있으면 AA a(10)은 가능하나 AA a=10은 불가능)
mutable 키워드 : mutable로 선언된 맴버 변수는 맴버함수가 const라고 선언되었더라도 변경이 가능하다.
Thursday, September 16, 2010
C++ part 1 (C와 C++의 기본적 차이)
연대에 있는 Bernd Burgstaller의 parallel programming 수업자료 중에 computational history에서 3개의 crisis를 설명한다.
1960에서 1970년 사이에 사람들은 assembly 언어를 사용하였다. 그 당시 각각의 하드웨어가 자신 고유의 assembly언어가 있었기 때문에 프로그램의 다른 하드웨어로의 이식이 불가능했다. 그래서 나온것이 high-level language 인 C, fortran.
그런데 컴퓨터 사향이 좋아짐으로서 컴퓨터를 완전히 활용하기 위한 프로그램을 절차지향적으로 코딩을 하다보면 수만라인, 그리고 엄청난 인력이 필요했다. 이것이 두번째 crisis이다. 그뒤 해결책으로 나온것이 OOP 를 채택하고 있는 C++ 이나 JAVA와 design pattern 기법.
이후 uni 프로세서의 발달은 다른 부과적인 하드웨어나 파워등의 문제로 인해 uni processor 가 아닌 multi processor 체제로 가기 시작한다. 이것으로 인하여 기존의 방식의 프로그램밍으로는 multi processor를 온전히 활용하지 못한다. 이것이 세번째 crisis. 이것의 해결책이 병렬 프로그래밍.
병렬 프로그래밍 수업자료를 보는데.. 난 아직 두번째 crisis의 해결책 조차 모른다는 생각이 문뜩 든다. 해서 급하게 C++을 보려 한다. 단기간에 끝내는게 목표다. 물론 코딩은 체득이 중요하다는걸 안다. 하지만 우선은 책을 한번 다 보는게 목표다. 이번 포스팅에서 기억할 만한 것을 예전의 C 포스팅에서처럼 간략하게 적는다. 참고 자료는 윤성우의 열혈강의 C++이다.
----------------------------------------------------------------------------
chapter 1 : C 기반의 C++
c++는 확장자가 cpp 이며 컴파일러가 g++이다.
기본적으로을 include 한다. #include
printf 대신 std::cout<< somthing<
scanf 대신 std::cin>>somthing;
c와 달리 함수 오버로딩이 가능하다. (return형만 다르면 오버로딩 불가)
함수에서 매개변수의 default 지정이 가능하다. 함수 선언이 먼저 될시 선언부에 default 지정을 해야 한다.
C에서는 매크로 #define을 써서 매크로 함수를 정의 하엿다. 이는 전처리 과정에서 in-line화가 되는데 C++에서는 그냥 함수 앞에 inline라고만 붙여주면 같은 효과가 생긴다.(이는 컴파일러에 의해 처리됨)
서로 다른 사람(곳)에서 만든 함수들의 이름이 겹치는 것을 방지 하기 위해 namespace 를 도입. 그래서 namespace something{void function(void){}}으로 함수를 감싸면 function이란 함수는 something이라는 이름 공간에 선언되어 잇는것이고 이를 사용하기 위해선 "::" 범위 지정 연산자 (scope resolution operator)를 사용한다.(something::function 이렇게)
using 이라는 키워드를 사용하면 함수를 사용할때 이름 공간을 명시할필요가 없다. (using something::function 또는 using namespace something 이라고 하면 그냥 function이라고 사용하면 된다.)
::를 이용하여 전역변수에 접근 할수도 있다.
chapter 2 : C 기반의 C++ 2
true와 false가 새로운 데이터 타입인 bool로 추가 되었다. int형으로 변환시 true는 1, false는 0으로 변환된다.
레퍼런스는 이름이 존재하는 메모리 공간에 하나의 이름을 더 부여하는 것으로 int &ref=val과 같이 레퍼런스(여기서 ref)앞에 &를 붙인다. 레퍼런스는 변수랑 동일하며 다만 만들어지는 차이만 있을 뿐이다. 레퍼런스 변수는 선언과 동시에 초기화가 되어야 한다.
이 레퍼런스 변수를 이용하면 swap 함수(변수 두개의 값을 서로 바꿔주는 역할)를 구현할때 함수의 매개 변수가 포인터가 아니라 레퍼런스 변수로 하면 포인터의 개념 없이 구현이 가능하다 (이는 call-by-reference인지 value인지를 구분하기 힘들기 때문에 위험할수 있다).
또한 call-by-value에서 value대신에 reference변수를 매개변수로 하면 넘기는 변수의 값이 copy되지 않아서 메모리를 아낄수 있다. (여기서도 문제가 있다. &p라는 매개변수로 받으면 함수에서 잘못된 연산으로 원본의 값이 변할수 잇기 때문에 최정적으로 매개변수를 const int &p 식으로 상수화 시켜 버린다. 그렇게 되면 매개변수 p를 통한 변수의 값이 변하는 일이 없다.)
C의 malloc과 free대신 new와 delelete를 사용한다.
int* p = (int*)malloc(sizeof(int)*size) 대신 int p = new int[size], free(p) 대신 delete []p
new를 통한 동적 메모리 할당이 실패할경우 NULL즉 0, 이 리턴된다.
1960에서 1970년 사이에 사람들은 assembly 언어를 사용하였다. 그 당시 각각의 하드웨어가 자신 고유의 assembly언어가 있었기 때문에 프로그램의 다른 하드웨어로의 이식이 불가능했다. 그래서 나온것이 high-level language 인 C, fortran.
그런데 컴퓨터 사향이 좋아짐으로서 컴퓨터를 완전히 활용하기 위한 프로그램을 절차지향적으로 코딩을 하다보면 수만라인, 그리고 엄청난 인력이 필요했다. 이것이 두번째 crisis이다. 그뒤 해결책으로 나온것이 OOP 를 채택하고 있는 C++ 이나 JAVA와 design pattern 기법.
이후 uni 프로세서의 발달은 다른 부과적인 하드웨어나 파워등의 문제로 인해 uni processor 가 아닌 multi processor 체제로 가기 시작한다. 이것으로 인하여 기존의 방식의 프로그램밍으로는 multi processor를 온전히 활용하지 못한다. 이것이 세번째 crisis. 이것의 해결책이 병렬 프로그래밍.
병렬 프로그래밍 수업자료를 보는데.. 난 아직 두번째 crisis의 해결책 조차 모른다는 생각이 문뜩 든다. 해서 급하게 C++을 보려 한다. 단기간에 끝내는게 목표다. 물론 코딩은 체득이 중요하다는걸 안다. 하지만 우선은 책을 한번 다 보는게 목표다. 이번 포스팅에서 기억할 만한 것을 예전의 C 포스팅에서처럼 간략하게 적는다. 참고 자료는 윤성우의 열혈강의 C++이다.
----------------------------------------------------------------------------
chapter 1 : C 기반의 C++
c++는 확장자가 cpp 이며 컴파일러가 g++이다.
기본적으로
printf 대신 std::cout<< somthing<
scanf 대신 std::cin>>somthing;
c와 달리 함수 오버로딩이 가능하다. (return형만 다르면 오버로딩 불가)
함수에서 매개변수의 default 지정이 가능하다. 함수 선언이 먼저 될시 선언부에 default 지정을 해야 한다.
C에서는 매크로 #define을 써서 매크로 함수를 정의 하엿다. 이는 전처리 과정에서 in-line화가 되는데 C++에서는 그냥 함수 앞에 inline라고만 붙여주면 같은 효과가 생긴다.(이는 컴파일러에 의해 처리됨)
서로 다른 사람(곳)에서 만든 함수들의 이름이 겹치는 것을 방지 하기 위해 namespace 를 도입. 그래서 namespace something{void function(void){}}으로 함수를 감싸면 function이란 함수는 something이라는 이름 공간에 선언되어 잇는것이고 이를 사용하기 위해선 "::" 범위 지정 연산자 (scope resolution operator)를 사용한다.(something::function 이렇게)
using 이라는 키워드를 사용하면 함수를 사용할때 이름 공간을 명시할필요가 없다. (using something::function 또는 using namespace something 이라고 하면 그냥 function이라고 사용하면 된다.)
::를 이용하여 전역변수에 접근 할수도 있다.
chapter 2 : C 기반의 C++ 2
true와 false가 새로운 데이터 타입인 bool로 추가 되었다. int형으로 변환시 true는 1, false는 0으로 변환된다.
레퍼런스는 이름이 존재하는 메모리 공간에 하나의 이름을 더 부여하는 것으로 int &ref=val과 같이 레퍼런스(여기서 ref)앞에 &를 붙인다. 레퍼런스는 변수랑 동일하며 다만 만들어지는 차이만 있을 뿐이다. 레퍼런스 변수는 선언과 동시에 초기화가 되어야 한다.
이 레퍼런스 변수를 이용하면 swap 함수(변수 두개의 값을 서로 바꿔주는 역할)를 구현할때 함수의 매개 변수가 포인터가 아니라 레퍼런스 변수로 하면 포인터의 개념 없이 구현이 가능하다 (이는 call-by-reference인지 value인지를 구분하기 힘들기 때문에 위험할수 있다).
또한 call-by-value에서 value대신에 reference변수를 매개변수로 하면 넘기는 변수의 값이 copy되지 않아서 메모리를 아낄수 있다. (여기서도 문제가 있다. &p라는 매개변수로 받으면 함수에서 잘못된 연산으로 원본의 값이 변할수 잇기 때문에 최정적으로 매개변수를 const int &p 식으로 상수화 시켜 버린다. 그렇게 되면 매개변수 p를 통한 변수의 값이 변하는 일이 없다.)
C의 malloc과 free대신 new와 delelete를 사용한다.
int* p = (int*)malloc(sizeof(int)*size) 대신 int p = new int[size], free(p) 대신 delete []p
new를 통한 동적 메모리 할당이 실패할경우 NULL즉 0, 이 리턴된다.
Monday, September 13, 2010
Bowtie (short read alignment program)
I should have reviewed about mapper program (maq, bowtie..) earlier. Most of the first step in NGS data analysis is mapping read to reference genome. So knowing this process is prior to the others. But I just do this work now.
Here is the PPT.
ah.. I have to confess that some of slides in PPT come from mqoqol's ppt in SEQanswers.
Thanks mqoqol!
I found a blog today.
http://hackmap.blogspot.com/2010/07/aligners-since-starting-methylcoder.html
In the blog, the owner addressed shortcoming of Bowtie. And he introduced GSNAP. Actually in our firm, we made a tentative arrangement to use GSNAP for aligner.
I will also have to review the paper (GSNAP) ASAP.
Here is the PPT.
ah.. I have to confess that some of slides in PPT come from mqoqol's ppt in SEQanswers.
Thanks mqoqol!
I found a blog today.
http://hackmap.blogspot.com/2010/07/aligners-since-starting-methylcoder.html
In the blog, the owner addressed shortcoming of Bowtie. And he introduced GSNAP. Actually in our firm, we made a tentative arrangement to use GSNAP for aligner.
I will also have to review the paper (GSNAP) ASAP.
Sunday, September 12, 2010
이보디보 (evo devo) 생명의 블랙박스를 열다.
이보디보 (evo devo), evolutionary devolepmental biology의 약자.
진화라는 키워드에 빠져 이것 저것 뒤지다가 발견한 보물 같은 책이다. 내가 보물이라고 할 정도의 책이라면 이건 진짜 보물이니 믿어도 좋다 (책읽는 걸 방청소 이상으로 싫어하는 것으로 여기니).
Sean B. Carroll 이 저잔데.. 대단한 사람인가보다. 이 정도의 지식을 단순한 사실의 전개가 아닌 자신의 철학과 함께 물흐르듯이 정리해서 책으로 내다니.. 글쓰기에 두려움을 느끼는 나로선 이 많은 내용을 한권의 책으로 매끄럽게 정리했다는 사실 조차로도 그를 우러러 보게 되는데.. 해서 그를 구글링 해보니.. 역시 CNN에서 인터뷰를 했을 정도의 과학자이다.
생물에 관련된 일을 하는 모든 사람들은 필수적으로 읽어야 하는 책인듯 싶다. 특히 한국인, 내 경험으로 비춰볼때(지극히 개인적인 의견이다) 생물학을 배우지만 철학없이, "왜" 라는 의미 없이 생물학을 단순한 사실을 찾는 정도인 양 교과서적으로 배우는 이들에게 절대적으로 필요하다.
점점 생물학 내지는 관련 분야를 공부할 수록 내가 얼마나 영혼없는 연구자(물론 아직 '연구자'라고 불릴 수 있는지는 모르겠지만)인지 느끼게 되었다. 내가 어떠한 과학적 사실을 발견했을때 그 사실이 어떠한 의미를 갖을 수 있는지 생물학의 거대한 흐름에서 어떠한 역할을 하는 것인지 의문이 생기고 그에 대한 어떠한 대답조차 할수 없다는 걸 느꼈다. 그리고 그것의 해답은 진화에 뿌리를 둠을 점차 깨달아 갔다.
이 책은 생물학을 배웠다면 익숙한 예제를 많이 포함하고 있다. 그러나 그 과학적 발견이 생물학의 큰 흐름에서 어떠한 의미를 갖었는지 명확히 보여준다. 이것이 진화라는 철학을 갖은 자와 갖지 못한자의 차이인것임을 알게된다. (내 기억으로는 분자 생물학 시간에 lactose가 있을때 E.coli가 B-galactose 를 발현시킨다는 사실을 배운적이 있었는데 그 땐 그게 그냥 그랬나보다 라고 아무 생각없었는데 그게 진화라는 개념을 가지고 접근하면 대장균에서 사람까지 굉장히 유사한 메커니즘을 가지고 있다는 사실에서 이러한 매커니즘으로 사람의 조직별 서로 다른 단백질의 발현이 가능한 이유가 될수 있다고 그 의미를 찾아가는 것에 놀랐다.)
이런 책을 읽으면 느낀 또 다른 안타까움은 이런 생물학적 "의미"를 가르치는 환경이 한국에서는 적다는 것이다. 의미를 알지못하면 결코 그들의 일에 대해 어떠한 즐거움이나 쾌감을 찾을 수 없다. 물론 일차적으로 그 책임은 내 자신에게 있겠지만 자신이 연구하는 단백질 내지는 종 하나만을 보지 않고 거시적인 통찰력을 가지고 있는 교수에게 수업을 받는다면 나와 같은 학생들도 진작에 가슴떨리는 열정을 찾을 수 있지 않을까 싶다.
이 책 정말 강추다!!
아.. 그리고 마지막 한가지.. 자연 현상을 담은 이 글이 세상의 그 어떤 픽션보다 재미 없지 않을 것임을 확신하는 저자의 머릿말이 참 인상깊다.
Thursday, September 9, 2010
The Language of Histone Crosstalk
organizing content of paper.. at first that's fun but more and more it's gonna be tiresome. below.. I just copy the sentences from paper.
이 논문을 보고 느낀게 아직 논문들이 글로벌한 패턴을 볼 수 밖에 없다는 것을 느꼈다. 같은 component 가지고 시간과 상황에 따라 다른 역할을 해버리니 각각의 position 별로 시간에 따라 정확한 기능을 알지 못한다면 잘못된 해석만이 나올 뿐이다. 그런데 이 시간과 포지션 별로의 데이터 양이 얼마나 될까? 인간 게놈이 30억인데 내 기억으로 하나의 히스톤에 감기는 dna의 길이가 백오십 베이스 정도였던거 같은데.. 물론 링커도 있지만 그렇다면 수많은 갰수의 hisone이 나오게 되고 hisone의 종류도 기본 3가지 뿐 아니라 사이드도 있고 게다가 modification도 phosphorylation과 mono-에서 tri-까지의 methylation과 histone 하나에서도 아미노산 하나하나의 modification이 가능하게 되면.. 음.. 모든 경우에 수는 우주의 원자 수보다도 많게 되는게 아닐까 (얼마전 읽은 책에서 보니까 원자수가 생각보다 적었던 걸로 기억, 물론 말도 안될 수 있지만)..
그렇다고 해석하는데 포기할수 는 없지만.. 가히 포기 하고 싶어진다.
epigenetic code (histone modification) :
revealing a nuanced and intriguing language, not
a strict code, as the basis for transcriptional regulation through
the chromatin signaling pathway

1. acetylation of histone:
A well-characterized
posttranslational modification regulating chromatin
structure is the acetylation of histone N-terminal tails, which is
thought to facilitate transcriptional activation either by charge
neutralization of the tails’ interaction with DNA or by forming
a binding site for bromodomain-containing transcription factors, some of which can remodel nucleosomes
2. methylation of H3K4:
a modification generally associated with transcriptionally
active genes and a binding site for a variety of factors that include
histone-modifying and -remodeling activities
histone crosstalk: effect of prior nearby histone modification to subsequent histone modification
examples : first picture,
point mutation in H3K14 (acetylation site) results in the specific loss of H3K4 trimethylation.
phosphorylation of H3S10 interferes with binding of HP1 (heterochromatin protein 1) to methylated H3K9
reason : histone modification enzymes are constituted with multisubunit complex
example of histone crosstalk is the stimulation of
acetyltransferase activity of GCN5 toward the histone H3 tail by prior phosphorylation
(P) of serine 10. Acetylation, Ac.
understanding the activities of these histone modification crosstalk is not simple, because the transcriptional readout depends on context and timing. Second figure represent this characteristics.
In A, show that depending on position and timing of binding of 14-3-3, a phosphoserine binding protein, to H3S10 it works differently. In B say that artificially increasing acetylation doesn't lead to productive trascription.
there is an example (fruit fly's dosage compensation study) which have different order of implementation of proteins.
이 논문을 보고 느낀게 아직 논문들이 글로벌한 패턴을 볼 수 밖에 없다는 것을 느꼈다. 같은 component 가지고 시간과 상황에 따라 다른 역할을 해버리니 각각의 position 별로 시간에 따라 정확한 기능을 알지 못한다면 잘못된 해석만이 나올 뿐이다. 그런데 이 시간과 포지션 별로의 데이터 양이 얼마나 될까? 인간 게놈이 30억인데 내 기억으로 하나의 히스톤에 감기는 dna의 길이가 백오십 베이스 정도였던거 같은데.. 물론 링커도 있지만 그렇다면 수많은 갰수의 hisone이 나오게 되고 hisone의 종류도 기본 3가지 뿐 아니라 사이드도 있고 게다가 modification도 phosphorylation과 mono-에서 tri-까지의 methylation과 histone 하나에서도 아미노산 하나하나의 modification이 가능하게 되면.. 음.. 모든 경우에 수는 우주의 원자 수보다도 많게 되는게 아닐까 (얼마전 읽은 책에서 보니까 원자수가 생각보다 적었던 걸로 기억, 물론 말도 안될 수 있지만)..
그렇다고 해석하는데 포기할수 는 없지만.. 가히 포기 하고 싶어진다.
epigenetic code (histone modification) :
revealing a nuanced and intriguing language, not
a strict code, as the basis for transcriptional regulation through
the chromatin signaling pathway

1. acetylation of histone:
A well-characterized
posttranslational modification regulating chromatin
structure is the acetylation of histone N-terminal tails, which is
thought to facilitate transcriptional activation either by charge
neutralization of the tails’ interaction with DNA or by forming
a binding site for bromodomain-containing transcription factors, some of which can remodel nucleosomes
2. methylation of H3K4:
a modification generally associated with transcriptionally
active genes and a binding site for a variety of factors that include
histone-modifying and -remodeling activities
histone crosstalk: effect of prior nearby histone modification to subsequent histone modification
examples : first picture,
point mutation in H3K14 (acetylation site) results in the specific loss of H3K4 trimethylation.
phosphorylation of H3S10 interferes with binding of HP1 (heterochromatin protein 1) to methylated H3K9
reason : histone modification enzymes are constituted with multisubunit complex
example of histone crosstalk is the stimulation of
acetyltransferase activity of GCN5 toward the histone H3 tail by prior phosphorylation
(P) of serine 10. Acetylation, Ac.

In A, show that depending on position and timing of binding of 14-3-3, a phosphoserine binding protein, to H3S10 it works differently. In B say that artificially increasing acetylation doesn't lead to productive trascription.
there is an example (fruit fly's dosage compensation study) which have different order of implementation of proteins.
Tuesday, September 7, 2010
evolution of methylome
dna methylation의 진화에 대한 생각들..
-사전에 생각해야 할점들.
methylation sequencing을 하게 되면 여러 cell들을 pool (물론 type은 비슷하겠지만)이 모여서 된다는 것. 그렇기때문에 methylation 정도가 read수로 아날로그적으로 나오게 될것. 사실 완벽하게 하나의 cell로만 한다면 0,1 식으로 정확하게 나올테지만.. 이 문제를 어떻게 고려 할 것이냐. 문뜩 떠오르는 생각 종간에 dna 시퀀스를 비교할때 어떻게 보면 종에서 한명의 dna를 가지고 비교한다. 정확하게 비교 할려면 사실 종을 대표할 수 있는 시퀀스를 비교해야 한다. 그렇다면 대표할 수 있는 시퀀스라는 건 무언인가. 쉽게 생각하면 가장 빈도수가 많이 나온 DNA. 즉 이말은 SNP를 제외하면 된다는 것. 이걸 변형 없이 고대로 methylation cell pool의 대표 sequence를 찾는 곳에 대입을 하면 SNP를 자르는 기준을 넣던지 아니면 50%이상의 리드에서 methylation이 나왔을때 이를 1로 표현하는것. 이는 경험론 적으로 접근해야 할것 같다.
genome의 범위? sims의 논문을 보면 intron인가 intergenic 부위만 가지고 phylogeny를 그렸다. 이것으로 충분하다고. 그러면 methylation은 genome의 어떤부위를 가지고 그려야 할까?기본적으로 논문에 나온것처럼 transposon부위와 gene의 부위만 본다. 아니면 그런거에 상관없이 CpG가 있는 부위, 아니면 methylation이 조금이라도 나오는 부위만 모아서
tissue별 methylation이 다른데 이는 어떻게 할것이냐? tissue 별 methylation이 얼마나 다른가? 다른 정도가 심각한가? 곧 profile의 변화가 큰가? 그렇지 않다는걸 보이고 특정 데이터를 선택해서 사용
genome의 범위? sims의 논문을 보면 intron인가 intergenic 부위만 가지고 phylogeny를 그렸다. 이것으로 충분하다고. 그러면 methylation은 genome의 어떤부위를 가지고 그려야 할까?기본적으로 논문에 나온것처럼 transposon부위와 gene의 부위만 본다. 아니면 그런거에 상관없이 CpG가 있는 부위, 아니면 methylation이 조금이라도 나오는 부위만 모아서
tissue별 methylation이 다른데 이는 어떻게 할것이냐? tissue 별 methylation이 얼마나 다른가? 다른 정도가 심각한가? 곧 profile의 변화가 큰가? 그렇지 않다는걸 보이고 특정 데이터를 선택해서 사용
다른 하나는 methylated dna 를 M이라고 표현한다면, 상보적인 DNA인 G는 어떻게 할것인가.
가장 기본적으로 떠오르는 생각은 상보적인 G를 표현하는 다른 alphabet을 추가한다. 그렇게 했을 때 profile의 변화는 어떻게 될것인가?... 생각이 필요
-methylated DNA 를 다섯번째 DNA로 생각해서 얻을 수 있는 궁극적인 결과가 무엇인가?
두가지 가설 DNA methylation을 시퀀스에 넣는다면
1.phylogeny가 변화가 없다.
2.dna 만 가지고 그린 phylogeny와 다르게 tree가 그려진다.
예상하기론 phylogeny의 트리는 변화가 없을것으로 생각되어진다. 그럼 만약 1번의 경우처럼 나온다면 어떻게 해석을 해야 할것이냐. 우선 methylated DNA 를 넣는다 하더도 A,G,T,C에 의한 종간의 sequence similarity의 영향이 커서 별로 영향이 없어서 그렇다.그럼 여기서 봐야 할점, methylated cytosine의 영향력 정도. random하게 methylation pattern을 넣었을때에 비해 어떠한 효과가 나타나느냐. 최고의 결과는 가까운 것들 (species) 간에 거리가 타이트 해진다. 그러면 methylation을 넣음으로서 확실한 관계도가 나타나는 것이나. 아무래도 예상하기로 tree의 section 별로 어떤 section은 가까워 지고 어떤 section은 멀어지고 하는 경향이 나올것으로 예상.
만약 2번의 상황이 벌어진다면.. 음..
-ffp를 disease의 diagnostic classification에 쓸수 잇는가?
-만약 위의 것이 가능하다면 database화도 생각할수 있다. 그러니까 bisulfite-sequencing을 하고 나서 이것이 어떠한 individual 내지는 어떠한 series의 experiment와 유사한가를 찾아주는 database
-만약 위의 것이 가능하다면 database화도 생각할수 있다. 그러니까 bisulfite-sequencing을 하고 나서 이것이 어떠한 individual 내지는 어떠한 series의 experiment와 유사한가를 찾아주는 database
-development에서의 현상을 species의 evolution과 연관시 킬수 있는가?
이게 맞을 지 모르겠지만 development의 여러단계의 cell의 methylated cytosine의 정보를 넣은 시퀀스를 phylogeny에서 가장 가까이 분기한 종과 비교햇을때... 음..
추가적으로 between species 를 고려 하는게 아니라 아예 human 관련 데이터만 가지고 해본다. developmental stage 별로 나온 데이터, tissue 별 데이터 disease별 데이터릍 통으로 하면 어떤 결과가 나올까? 혹시 cancer의 methylation 패턴이 hESC과 비슷하게 나오지 않을까? 아예 DNA 알파벳을 methylated cytosine과 그 이외의 것 이렇게 두개로만 하면 어떻게 될까?
###################
우선은 human의 bisulfite-seq을 한 데이터를 다 모은다.(카페나 site를 만들어서 공유). 좀더 멀리 보면 SRA나 GEO에서 automatic 하게 bisulfite data를 모으는 방법을 생각한다.
우선은 tissue별 methylation의 차이를 반드시 확인해야 한다. 왜냐면 특정 데이터를 쓸때 그것의 methylation이 영향력이 크게 bias 되어 있다면 그걸 종간 비교로 쓰기에 문제가 있기때문에.
그리고 methylation rate 에 대해서는 다른 논문에서와 같이 5단계로 frequency를 나누고 각 단계별로의 profile을 따로 만든 다음에 각각의 profile에 대한 distance에다가 frequency에 따라 weight를 줘서 sum을 한다.
###################
논문을 보다가 느낀건데 여러군데서 methylation의 영향이 bimodal 하다는 경향이 많이 나타난다. evolution에서도 그러한 경향을 찾을 수 있고 유전자의 expression에 따른 percentile로 나눠서 methylation정도와의 그래프를 그려도 그렇고 promoter부위는 methylation 이 많이 된 반면 exon부분은 오히려 intron보다 methylation이 많이 되어 있는 예가 그러하다. methylation은 expression과 영향이 있다. 또한 분명 위에서의 예와 같이 bimodal한 성향이 있다. 그러면 이걸 구분해 주는 무언가가 있어야 한다. dna 시퀀스에 찾아야 하나 아니면 다른 epigenetic factor (histone modification)과 연관지어 설명을 해야 하나.. 전혀 감이 오지 않는다. 이 또한 좋은 연구 주제가 될것 같다.
##################
histone modification과 methylation이 transcriptional regulation에 작용을 한다고 생각한다. 이게 사실이라면 histone modification을 methylation 처럼 base resolution으로 나타낼수 있다면 이것 역시 시퀀스로 표현이 가능하고 그렇게 된다면 expression을 보지 않고 오히려 histone modification과 methylation이 들어가 잇는 시퀀스를 가지고 diagnostic test가 타당 할수 있겠다.
GSE19418
추가적으로 between species 를 고려 하는게 아니라 아예 human 관련 데이터만 가지고 해본다. developmental stage 별로 나온 데이터, tissue 별 데이터 disease별 데이터릍 통으로 하면 어떤 결과가 나올까? 혹시 cancer의 methylation 패턴이 hESC과 비슷하게 나오지 않을까? 아예 DNA 알파벳을 methylated cytosine과 그 이외의 것 이렇게 두개로만 하면 어떻게 될까?
###################
우선은 human의 bisulfite-seq을 한 데이터를 다 모은다.(카페나 site를 만들어서 공유). 좀더 멀리 보면 SRA나 GEO에서 automatic 하게 bisulfite data를 모으는 방법을 생각한다.
우선은 tissue별 methylation의 차이를 반드시 확인해야 한다. 왜냐면 특정 데이터를 쓸때 그것의 methylation이 영향력이 크게 bias 되어 있다면 그걸 종간 비교로 쓰기에 문제가 있기때문에.
그리고 methylation rate 에 대해서는 다른 논문에서와 같이 5단계로 frequency를 나누고 각 단계별로의 profile을 따로 만든 다음에 각각의 profile에 대한 distance에다가 frequency에 따라 weight를 줘서 sum을 한다.
###################
논문을 보다가 느낀건데 여러군데서 methylation의 영향이 bimodal 하다는 경향이 많이 나타난다. evolution에서도 그러한 경향을 찾을 수 있고 유전자의 expression에 따른 percentile로 나눠서 methylation정도와의 그래프를 그려도 그렇고 promoter부위는 methylation 이 많이 된 반면 exon부분은 오히려 intron보다 methylation이 많이 되어 있는 예가 그러하다. methylation은 expression과 영향이 있다. 또한 분명 위에서의 예와 같이 bimodal한 성향이 있다. 그러면 이걸 구분해 주는 무언가가 있어야 한다. dna 시퀀스에 찾아야 하나 아니면 다른 epigenetic factor (histone modification)과 연관지어 설명을 해야 하나.. 전혀 감이 오지 않는다. 이 또한 좋은 연구 주제가 될것 같다.
##################
histone modification과 methylation이 transcriptional regulation에 작용을 한다고 생각한다. 이게 사실이라면 histone modification을 methylation 처럼 base resolution으로 나타낼수 있다면 이것 역시 시퀀스로 표현이 가능하고 그렇게 된다면 expression을 보지 않고 오히려 histone modification과 methylation이 들어가 잇는 시퀀스를 가지고 diagnostic test가 타당 할수 있겠다.
GSE19418
Subscribe to:
Posts (Atom)