Linux 및 Mac OS X의 POSIX 기반의 운영체제에서 작동하는 wxPython Module은 기본적으로 문자셋을 지정해줘야 인식함
문자셋 지정 예
# -*- coding: utf8 -*-
# -*- coding: ansi -*-
Linux 및 Mac OS X의 POSIX 기반의 운영체제에서 작동하는 wxPython Module은 기본적으로 문자셋을 지정해줘야 인식함
문자셋 지정 예
트랙백은 내가 이전에 생물 공부를 했었을 때 신기한 내용이 있어서 포스팅한 것이다. (벌써 2년하고도 4개월이 되었다.) 블로그 이웃분이랑 이야기하면서 전 생명과학을 하고 싶어요라고 이야기했었고 블로그 이웃분도 열심히 하라고 했던 기억이 새록새록 나는데...
어느덧 POSTECH 생명과학과 학생이 되어 생명과학을 공부하고 있다는게 감회가 새로워진다.
오늘 포스팅할 내용은 이전에 ATPase의 비밀이라는 포스트를 다시 한 번 배운거에 기초하여(?) 제대로 서술해 보려고 한다. 제목도 좀 거창하게.. (실은 Stryer Biochemistry에 나와있는 제목이다.) 그림은 Stryer책의 CD판이 없어, 이전에 썼던 그림을 그대로 이용하여 설명한다. (하지만 내용은 다르다는거..-_-;;)
왼쪽 그림은 ATP Synthase가 matrix와 intermembrane space사이의 Proton의 Gradient (intermembrane space의 charge가 +)에 의해 ADP + Pi가 ATP로 합성되는 모식도를 나타내는 그림이다. 오른쪽은 역으로 intermembrane charge가 상대적으로 -를 띨 때 ATP가 ADP+Pi로 분해되는 모식도를 나타내느 그림이다.
(이러한 Enzyme의 특성을 reversible하다고 한다.)
왼쪽 그림은 F1에서 alpha, beta, gamma Subunit complex를 보여준다. 실제적으로 gamma subunit의 모양이 non-symetric, 한마디로 대칭성을 이루고 있지 않기 때문에 gamma와 conformational한 interact ion을 가지고 있는 beta subunit들은 gamma의 회전으로 인해 각각 3개의 다른 conformational formation을 가지게 되고 3개의 다른 formation은 ATP 합성 반응의 각각 다른 상태를 보여주게 된다.
이게바로 3개의 Status를 나타내는 것인데 각각 T, L, O form이라고 한다. T form은 Tight Binding이 되어 있어 ATP <-> ADP+Pi의 반응이 reversible하게 교차적으로 일어나는 상태라고 할 수 있다. 여기서 Proton의 Gradient에 의해서 위의 reversible한 반응이 ATP쪽으로 쏠리게 되고 3개의 Proton에 의하여 gamma subunit이 120도 회전하는 순간 O form으로 바뀌어 ATP가 빠져 나오게 된다. L form은 loosing binding으로 ADP + Pi가 Covalent Bonding에 의하여 beta subunit에 느슨한 결합을 하는 form이라고 보면 된다.
(여기서 중요한 것은 alpha, beta subunit이 회전하는 것이 아니라 gamma subunit의 회전으로 각각 alpha subunit의 conformational한 chage가 일어나 form이 각각 T->O->L, L->O->T, O->L->T순으로 3개의 beta subunit이 돌림노래처럼 conformation이 바뀐다는 것이다.
위의 그림은 ATP Synthase의 전체 Structure을 나타낸 그림이다. 오른쪽의 mitochondral ATP Synthase로 설명하자면 b, delta subunit은 높은 nickel에 대한 affinity로 alpha, beta subunit을 고정하고 (내 생각이지만 아직 구조가 밝혀지지 않은 beta subunit에 nickel center가 존재할 거라고 추측한다.) epsilon은 ring of subunit c의 회전력을 gamma subunit에 전달하는 역할을 한다.
자 이제 제목에 대한 설명을 해야 겠다. gamma subunit에 actin filament를 달고 flourscent molecule을 taging하면 (발광 물질을 달면) 현미경으로 오랜시간에 걸쳐 여러 사진을 찍어 돌려보면 gamma subunit의 회전을 눈으로 확인할 수 있다. 바로 이러한 나노단위의 모터, 세계에서 가장 작은 Molecular Motor라고 하는 이유가 바로 그것이다.
기나긴 설명의 시간이 끝났다. 이번 포스트를 적으면서 이전에 적은 포스트와 한 번 비교해 보았다. 몽땅 영어로 바뀐 term들, (이건 전공책 덕분-_-;;이다..) 내가 이전에 틀리게 생각하고 있던 것들을 수정해 보면서 배움의 과정은 계속 진행되어야 한다고 생각한다. (아마 몇년 후에 학사 졸업 후, 석박사 때도 블로그를 하고 또 이에 대한 포스팅을 하게 된다면 그동안 생명과학에서 수정되었던 사항들과 아직 모르는 실체들을 추가적으로 설명할 수 있을 것이다.)
개인적으로 이 내용은 내가 생명과학에 대한 전공을 결심하게 된 계기이고, 상당히 뜻깊게 생각한다. (그리고 이번에 생화학에 대한 공부를 하면서 더욱더 자세 알게 되었기도 하다.)
더위가 잠시 주춤 하는 듯 하더니 날씨도 선선하고....
무엇보다도 까치의 울음소리가 너무 좋다 ~_~
역시 시험기간이다 보니까 평소에 관심을 두지 않은 것들이
눈에 들어오는듯 하다...
그리 어둡지 않은 적당한 햇빛에 시간도 정오전의 딱 좋은 시간..
거기에 좋은 음악까지...
그냥 쉬고 싶은 기분이다...ㅎㅎ
C에서는 String을 character array로 처리하기 때문에 분명 다른언어보다 문자열 처리가 어려운 반면에 Low Level의 문자처리가 가능한 장점이 있다.
보통 C에서 쓰이는 gets()함수는 New Line Character ('\n')까지 글자를 받아들일 수 있는 장점이 있지만 Character Array의 저장공간이 넘어서 메모리에 까지 Character을 저장하기 때문에 주로 BOF Hacker의 공격대상이 된다. 이에 대한 버그를 수정하고 char을 array가 아니라 pointer로 처리하여 메모리의 낭비를 적게한 gets함수를 나름대로 수정해 보았다.
/* 입력된 글자가 저장되어 있는 양만큼의 메모리 포인터를 return */
/* Argument에 입력된 integer pointer에 입력된 문자의 수 return */
char *get_line2mem(int *char_num) {
int n = -1;
char temp;
char *input;
while(1) {
temp = getch_linux();
input = realloc(input, ++n * sizeof(char));
input[n] = temp;
if(temp == '\n') {
input[n] = '\0';
break;
}
}
*char_num = n;
return input;
}
Windows/DOS 환경에서 지원하는 Turbo C에서는 "conio.h"라는 패키지에서 getch(), getche()함수를 지원한다. 하지만, gcc를 이용한 컴파일에 사용되는 glibc에는 stdio.h/stdlib.h를 눈을 뒤집어 쓰고 찾아봐도 위 함수를 지원하지 않는다.
그럼 리눅스에서는 이런함수를 어떻게 대체해서 쓸까? 찾아본 결과, 아래와 같이 대체하여 쓸 수 있다고 한다!!
/* 꼭 include 해주도록 한다. */
#include <termios.h>
#include <unistd.h>
char getche_linux(void) {
struct termios oldt, newt;
int ch;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
ch = getchar();
printf("%c", ch);
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
return ch;
}
위의 진한 소스코드 부분을 조금더 응용하여, 진한 부분을
printf("*");로 치환하게 되면 비밀번호를 입력하는 형태의 입력 방식을 구현할 수 있다. 또한 printf()명령을 사용하지 않으면 getch함수를 구현할 수 있다. (위의 함수는 getche()함수를 구현한 것이다.)
사실.. 아는 사람이 Tistory.com으로 이주했다는 소식을 들었는데..