Monday, February 7, 2011
ActivePython, Tkinter
Tkinter 모듈? 인터페이스? 아직 정체를 잘모르겠다. 책을 하나 샀는데 python and tkinter programming이라고..앞에 1부가 전체적인 것을 보는것 같은데 솔직히 책이 해석에 초점을 맞춰서.. 영 뭔소린지.. 아직 그정도의 백그라운드가 내가 없는듯. 여튼 따라 할려니까 Tkinter 모듈을 import 해야 한다. 헉.. 안된다. 대충 보아하니 tcl이라는 스크립트 언어를 python으로 이용하게 하는 모듈인거 같은데 그래서 tcl과 tk를 설치 했다. 헉 그래도 안된다. 근데 최근 버젼의 python에는 원래 들어가 있다고 한다. 서버 python이 2.6 버젼인데 왜 없는거냐고.. 해서 다시 깔려고 한다. 그런데 ActivePython이 많이 언급됨을 본다. 그래서 ActivePython을 설치(아직 정확히 그냥 python이랑 activepython이랑 뭐가 다른지는 모르겠다). 여튼 아래 url (http://www.activestate.com/activepython/downloads) 에서 다운 받아서 설치. 아.. 그런데 왠걸 이거 왠지 fancy하다. easy-install도 잘돌아가고 sys.path도 잘 잡혀 있어서 easy-install로 깔는게 지금 돌리는 버젼에 맞게 모듈이 설치된다. 그리고 tkinter 역시 기본적으로 들어 있다. 좋다. 이 책은 다 볼 생각은 없고 목표한 바. 그러니까 버튼 몇개 만들고 그거에 맞춰서 특정 프로그램이 돌아가는 스크립트 하나 만들어 보고 치울 생각이다. 이거 보니 예전 visual c++인가 그걸로 네이버 접속해서 블로그웹페이지 소스 글어다가 wma 파일 url 알아내가지고 음악 다운 받았던 프로그램 짯던 것이 생각난다. 어느 순간 네이버에서 음악 파일을 쪼내 놓는 바람에 버려졌지만.
Saturday, February 5, 2011
뇌를 자극하는 프로그래밍 원리
예전에 한번 link programming to hardware라는 제목으로 포스팅을 한적이 있는데 그 때 cpu는 어떻게 구성되어 있는지 궁금해서 한 블로그의 글을 본 기억이 있다. 캐쉬 메모리랑, os에 대한 내용이 대략적으로 나오기에 산 책. 프로그래밍을 하는데 그 소스가 돌아가는 컴퓨터는 어떻게 되어있고 또 그 하드웨어는 프로그램에서 어떻게 이용되는지 알고 싶을 때 보면 좋은 책 같다. 저자의 말처럼 자동차를 운전할때 자동차에 대해 조금이라도 알고 운전 하는거랑 그냥 운전만 하는거랑은 차이가 있는 것처럼 하드웨어적인걸 알고 프로그래밍을 하는게 머리속에 그려지는게 더 명확하지 않을까 한다.
한 반절 본거 같은데 좋은 책인거 같다. 프로그래밍을 할때 변수를 잡고 수를 대입하고 연산하고 함수를 만들고 하는것들이 어셈블리어로는 어떤식으로 변하고 그리고 이것이 인스트럭션으로는 어떻게 되고 그래서 cpu회로에서는 어떤식으로 돌아가는 정리해놨다. 그렇기에 1부에서는 cpu의 회로에 대한 대략적인 내용을 그리고 2부에서는 이 기초를 바탕으로 C언어가 어떻게 돌아가게 되는것인지 마지막 3부에서는 os 에대한 내용이 나온다.
한 반절 본거 같은데 좋은 책인거 같다. 프로그래밍을 할때 변수를 잡고 수를 대입하고 연산하고 함수를 만들고 하는것들이 어셈블리어로는 어떤식으로 변하고 그리고 이것이 인스트럭션으로는 어떻게 되고 그래서 cpu회로에서는 어떤식으로 돌아가는 정리해놨다. 그렇기에 1부에서는 cpu의 회로에 대한 대략적인 내용을 그리고 2부에서는 이 기초를 바탕으로 C언어가 어떻게 돌아가게 되는것인지 마지막 3부에서는 os 에대한 내용이 나온다.
Monday, January 31, 2011
chapter 13 (다양한 입출력 함수들)
-send & recv 입출력 함수-
리눅스에서의 send & recv
MSG_OOB : 긴급 메시지의 전송
Urgent mode의 동작원리
입력버퍼 검사하기
-readv & writev 입출력 함수-
readv & writev 함수의 사용
리눅스에서의 send & recv
MSG_OOB : 긴급 메시지의 전송
Urgent mode의 동작원리
입력버퍼 검사하기
-readv & writev 입출력 함수-
readv & writev 함수의 사용
install yum
flx analysis 서버에 biopython이 없어서 깔려고 하는데 easy_install도 없고 yum도 없다. 그래서 전부 다 깔아놔야해서..
yum 깔기 :
http://techtrouts.com/how-to-install-yum-on-red-hat-enterprise-linux-4/
easy_install 깔기 :
http://www.question-defense.com/2009/03/16/install-easy_install-via-yum-on-linux-centos-server
biopython 깔기 :
http://www.biopython.org/DIST/docs/install/Installation.html
정리하자면 yum 깔려면 5가지정도의 rpm 패키지를 깐다음에 yum 깔고 update하면 yum 사용가능하고 easy_install 깔려면 yum으로 python-setuptools를 까면되고 그러고 나서 easy_install을 이용해서 biopython을 깐다. 주의 해야 할것은.. python 버젼 확인해야 한다. 보통 biopython은 2.4 이상에서 도는데 위의 것을 python 버젼의 고려 없이 깔고 나면 예전버젼에 다 깔린다. 아.. 2.3 어떻게 제거하지..
그래서 다시 python2.6 버젼에 맞게 easy_install을 깔려면
http://pypi.python.org/pypi/setuptools 을 참고하는데 여기서 아래 python version 2.6에 맞는 egg를 받아서 prefix로 정확하게 깐다.
yum 깔기 :
http://techtrouts.com/how-to-install-yum-on-red-hat-enterprise-linux-4/
easy_install 깔기 :
http://www.question-defense.com/2009/03/16/install-easy_install-via-yum-on-linux-centos-server
biopython 깔기 :
http://www.biopython.org/DIST/docs/install/Installation.html
정리하자면 yum 깔려면 5가지정도의 rpm 패키지를 깐다음에 yum 깔고 update하면 yum 사용가능하고 easy_install 깔려면 yum으로 python-setuptools를 까면되고 그러고 나서 easy_install을 이용해서 biopython을 깐다. 주의 해야 할것은.. python 버젼 확인해야 한다. 보통 biopython은 2.4 이상에서 도는데 위의 것을 python 버젼의 고려 없이 깔고 나면 예전버젼에 다 깔린다. 아.. 2.3 어떻게 제거하지..
그래서 다시 python2.6 버젼에 맞게 easy_install을 깔려면
http://pypi.python.org/pypi/setuptools 을 참고하는데 여기서 아래 python version 2.6에 맞는 egg를 받아서 prefix로 정확하게 깐다.
Sunday, January 30, 2011
파이썬 문서고
TCP/IP 소켓 프로그래밍 책을 보다가 너무 지겨워서.. 웹 서핑.. 그러다가 음.. python의 실력을 늘리기 위한 책 없을까라고 뒤지다가 찾게된 사이트. 보아하니 파이썬을 잘 아는 이가 원서를 번역한 사이트인듯. 요즘 느끼는게.. 내가 영어 진짜 못한다다. 아.. 아무리 책이 쉽게 씌여 있어도 한글로 된 책 읽느니만 못하다. 아쉽다. 원서를 읽으면 속도가 한참 반감되는 내자신이. 여튼 한풀이는 이정도로 하고 목표는 틈나는 대로 아래 사이트 뒤적 거리고 한 강좌씩 읽기다.
http://coreapython.hosting.paran.com/pygnudoc.html
예전에 찾은 것인데 이것도 혹시나 해서 붙여 놓는다
django 설명
http://www.hannal.net/think/01-python_django_lecture/
http://coreapython.hosting.paran.com/pygnudoc.html
예전에 찾은 것인데 이것도 혹시나 해서 붙여 놓는다
django 설명
http://www.hannal.net/think/01-python_django_lecture/
chapter 12 (IO 멀티플렉싱(Multiplexing))
-IO 멀티플렉싱 기반의 서버-
멀티프로세스 서버의 단점과 대안
멀티프로세스 서버의 단점 : 프로세스 생성에 많은 양의 연산, 메모리 공간 요구. IPC (inner process communcation) 방법도 복잡하다.
멀티플렉싱이라는 단어의 이해
그럼 멀티프로세스의 해결방법은 무엇인가? IO 멀티플렉싱 서버가 그 답이 될수 있다.
그럼 멀티 플렉싱이란 뭐냐? 이건 책의 그림을 보아야 할듯. 말로 하자면.. 책보자. 사전적으로 이야기 하자면 하나의 통신채널을 통해서 둘 이상의 데이터(시그널)를 전송하는데 사용되는 기술
멀티플렉싱의 개념을 서버에 적용하기
하나의 프로세스를 이용해서 둘 이상의 클라이언트에게 서비스를 제공하는 방법인데..
IO 멀티플렉싱 서버에서는 하나의 프로세스가 데이터가 수신된 소켓이 있는지 확인하고 그 소켓을 통해서 전송된 데이터를 수신하게 된다.
-select 함수의 이해와 서버의 구현-
select 함수를 이용하는 것이 멀티플렉싱 서버의 구현에 대표적인 방법이다.
select 함수의 기능과 호출순서
select 함수를 이용하면 한곳에 여러 개의 파일 디스크립터를 모아놓고 동시에 다음을 관찰할 수 있다.
관찰 항목(event) :
1.수신한 데이터를 지니고 있는 소켓이 존재 하는가?
2.블로킹되지 않고 데이터의 전송이 가능한 소켓은 무엇인가?
3.예외사항이 발생한 소켓은 무엇인가?
이와 같은 관찰 항목을 이벤트(event) 라고 한다. 관찰 항목에 속하는 상황이 발생 하였을때 이를 이벤트가 발생하였다라고 표현한다.
select 함수의 사용이 상당히 복잡한데 이를 정리하면 다음과 같다.
step1 : 파일 디스크립터의 설정, 검사의 범위 지정, 타임아웃의 설정
step2 : select 함수의 호출
step3 : 호출결과 확인
파일 디스크립터의 설정
select함수가 여러개의 파일 디스크립터를 동시에 관찰 할수 있기 때문에(곧 여러 소켓을 동시에 관찰) 우선 파일 디스크립터를 모아야 한다. 모을때도 이벤트(관찰 항목; 수신, 전송, 예외)에 따라 구분해서 모아야 한다.
이 파일 디스크립터는 fd_set이라는 구조체에 모으는데 비트단위로 이뤄진 배열이라고 생각하면 된다.그러니까 첫번째 배열의 값 (index 0인 값)은 0번의 파일 디스크립터를 의미하고 이것이 1이면 관찰 대상에 있는 파일 디스크립터라는 의미이다. select 함수 이후 변화가 없는 파일디스크립터의 fd_set 구조체의 1은 0이 된다. 그래서 select 후 여전히 1값을 갖는 fd_set 구조체의 component를 찾으면 그것이 관심있는 변화가 생긴 파일 디스크립터이다.
검사(관찰)의 범위지저오가 타임아웃의 설정
select는 함수는 다음과 같다. int select(int maxfd, fd_set *readset, fd_set *write_set, fd_set *exceptset, const struct timeval * timeout); 형태로 오류시 -1 timeout 지정시간보다 시간이 지났는데 변화가 있는 fd_set이 없으면 0을 변화가 있으면 변화된 파일 디스크립터의 수를 리턴한다.
select 함수호출 이후의 결과확인
최종! select 함수를 호출하는 예제의 확인
멀티플렉싱 서버의 구현
전체적으로 select 를 이용한 멀티플랙싱을 들여다보니, 이게 어떻게 진행되는거냐 하면 우선은 프로세스가 하나이고 전에는 한 프로세스가 하나의 파일 디스크립터만을 감당했는데, 이제는 fd_set이라는 구조체를 이용해서 파일디스크립터들을 fd_set 구조체에 묶고 fd_set을 하나하나 for문으로 들여다 보면서 관심 대상의 변화가 있는 파일디스크립터를 골라내서 특정 작업을 하는 것이다.
멀티프로세스 서버의 단점과 대안
멀티프로세스 서버의 단점 : 프로세스 생성에 많은 양의 연산, 메모리 공간 요구. IPC (inner process communcation) 방법도 복잡하다.
멀티플렉싱이라는 단어의 이해
그럼 멀티프로세스의 해결방법은 무엇인가? IO 멀티플렉싱 서버가 그 답이 될수 있다.
그럼 멀티 플렉싱이란 뭐냐? 이건 책의 그림을 보아야 할듯. 말로 하자면.. 책보자. 사전적으로 이야기 하자면 하나의 통신채널을 통해서 둘 이상의 데이터(시그널)를 전송하는데 사용되는 기술
멀티플렉싱의 개념을 서버에 적용하기
하나의 프로세스를 이용해서 둘 이상의 클라이언트에게 서비스를 제공하는 방법인데..
IO 멀티플렉싱 서버에서는 하나의 프로세스가 데이터가 수신된 소켓이 있는지 확인하고 그 소켓을 통해서 전송된 데이터를 수신하게 된다.
-select 함수의 이해와 서버의 구현-
select 함수를 이용하는 것이 멀티플렉싱 서버의 구현에 대표적인 방법이다.
select 함수의 기능과 호출순서
select 함수를 이용하면 한곳에 여러 개의 파일 디스크립터를 모아놓고 동시에 다음을 관찰할 수 있다.
관찰 항목(event) :
1.수신한 데이터를 지니고 있는 소켓이 존재 하는가?
2.블로킹되지 않고 데이터의 전송이 가능한 소켓은 무엇인가?
3.예외사항이 발생한 소켓은 무엇인가?
이와 같은 관찰 항목을 이벤트(event) 라고 한다. 관찰 항목에 속하는 상황이 발생 하였을때 이를 이벤트가 발생하였다라고 표현한다.
select 함수의 사용이 상당히 복잡한데 이를 정리하면 다음과 같다.
step1 : 파일 디스크립터의 설정, 검사의 범위 지정, 타임아웃의 설정
step2 : select 함수의 호출
step3 : 호출결과 확인
파일 디스크립터의 설정
select함수가 여러개의 파일 디스크립터를 동시에 관찰 할수 있기 때문에(곧 여러 소켓을 동시에 관찰) 우선 파일 디스크립터를 모아야 한다. 모을때도 이벤트(관찰 항목; 수신, 전송, 예외)에 따라 구분해서 모아야 한다.
이 파일 디스크립터는 fd_set이라는 구조체에 모으는데 비트단위로 이뤄진 배열이라고 생각하면 된다.그러니까 첫번째 배열의 값 (index 0인 값)은 0번의 파일 디스크립터를 의미하고 이것이 1이면 관찰 대상에 있는 파일 디스크립터라는 의미이다. select 함수 이후 변화가 없는 파일디스크립터의 fd_set 구조체의 1은 0이 된다. 그래서 select 후 여전히 1값을 갖는 fd_set 구조체의 component를 찾으면 그것이 관심있는 변화가 생긴 파일 디스크립터이다.
검사(관찰)의 범위지저오가 타임아웃의 설정
select는 함수는 다음과 같다. int select(int maxfd, fd_set *readset, fd_set *write_set, fd_set *exceptset, const struct timeval * timeout); 형태로 오류시 -1 timeout 지정시간보다 시간이 지났는데 변화가 있는 fd_set이 없으면 0을 변화가 있으면 변화된 파일 디스크립터의 수를 리턴한다.
select 함수호출 이후의 결과확인
최종! select 함수를 호출하는 예제의 확인
멀티플렉싱 서버의 구현
전체적으로 select 를 이용한 멀티플랙싱을 들여다보니, 이게 어떻게 진행되는거냐 하면 우선은 프로세스가 하나이고 전에는 한 프로세스가 하나의 파일 디스크립터만을 감당했는데, 이제는 fd_set이라는 구조체를 이용해서 파일디스크립터들을 fd_set 구조체에 묶고 fd_set을 하나하나 for문으로 들여다 보면서 관심 대상의 변화가 있는 파일디스크립터를 골라내서 특정 작업을 하는 것이다.
chapter 11 (프로세스간 통신(Inner Process Communication))
-프로세스간 통신의 기본 개념-
프로세스간 통신의 기본 이해
예를 들어 프로세스 A가 프로세스 B의 특정 변수를 통해서 프로세스 B의 상태 내지는 값을 알려고 할때 이것이 프로세스 간의 통신다. 그런데 fork 함수를 통해서 프로세스를 생성하게 되면 부모 프로세스의 내용을 새로운 메모리 공간에 복사 하기 때문에 두 프로세스 간에는 공유하는 메모리 공간이 없기 때문에 두 프로세스 간에 통신이 이루어 지기 위해서는 별도의 방법이 필요하다.
파이프(PIPE) 기반의 프로세스간 통신
이렇듯 두 프로세스가 통신하기 위해서는 파이프 라는 것을 생성해야 한다. 이는 운영체제의 자원, 즉 메모리 공간으로 fork에 의해 복사 되는 것이 아니다(다만 그 파이프를 의미하는 파일 디스크립터가 복사 된다). 이 파이프 생성 함수로 int pipe(int filedes[2]); 가 있으며 int형 배열 filedes에 [0]인자를 파이프의 출구에 해당하는 파일 디스크립터가 [1]에는 입구에 해당하는 파일 디스크립터가 저장된다. 이 파이프를 이용해서 두 프로세스간에 통신이 가능하다.
파이프 기반의 프로세스간 양방향 통신
*책의 예제를 반드시 살펴라. pipe 사용시 주의 해야 할 점이 코딩되어 있다.
파이프 하나를 놓고 두 프로세스에서 통신할때 두 프로세스 모두 read write 함수를 호출해서 pipe에다가 메시지를 주고 받을때, 코딩에 따라 자기가 보낸 메시지를 자기가 받는 경우가 생긴다. (책의 예제를 보게 되면 알게 되는 점이 부모 프로세스가 끝나면 자식 프로세스의 실행 코드의 유무에 상관없이 명령 프롬프트로 돌아오게 된다. 또 하나 A라는 프로세스에서 read를 호출하기 전에 B라는 프로세스에서 write가 호출되어야 파이프에 B에서의 메시지가 써져서 A 프로세스에서 읽혀지게 되는데 write 함수가 호출되기전에 read함수가 호출되면 어떻게 되나 생각이되는데 이는 read가 함수가 pipe의 내용을 읽을때까지 대기하게 된다.) 그럼 자기가 보낸 메시지를 자기가 받지 않고 반드시 상대방이 받게 하는 방법은 두개의 파이프를 사용하는 것이다.
-프로세스간 통신의 적용-
메시지를 저장하는 형태의 에코 서버
무엇인가 더 큰걸 만들어보고 싶다면
프로세스간 통신의 기본 이해
예를 들어 프로세스 A가 프로세스 B의 특정 변수를 통해서 프로세스 B의 상태 내지는 값을 알려고 할때 이것이 프로세스 간의 통신다. 그런데 fork 함수를 통해서 프로세스를 생성하게 되면 부모 프로세스의 내용을 새로운 메모리 공간에 복사 하기 때문에 두 프로세스 간에는 공유하는 메모리 공간이 없기 때문에 두 프로세스 간에 통신이 이루어 지기 위해서는 별도의 방법이 필요하다.
파이프(PIPE) 기반의 프로세스간 통신
이렇듯 두 프로세스가 통신하기 위해서는 파이프 라는 것을 생성해야 한다. 이는 운영체제의 자원, 즉 메모리 공간으로 fork에 의해 복사 되는 것이 아니다(다만 그 파이프를 의미하는 파일 디스크립터가 복사 된다). 이 파이프 생성 함수로 int pipe(int filedes[2]); 가 있으며 int형 배열 filedes에 [0]인자를 파이프의 출구에 해당하는 파일 디스크립터가 [1]에는 입구에 해당하는 파일 디스크립터가 저장된다. 이 파이프를 이용해서 두 프로세스간에 통신이 가능하다.
파이프 기반의 프로세스간 양방향 통신
*책의 예제를 반드시 살펴라. pipe 사용시 주의 해야 할 점이 코딩되어 있다.
파이프 하나를 놓고 두 프로세스에서 통신할때 두 프로세스 모두 read write 함수를 호출해서 pipe에다가 메시지를 주고 받을때, 코딩에 따라 자기가 보낸 메시지를 자기가 받는 경우가 생긴다. (책의 예제를 보게 되면 알게 되는 점이 부모 프로세스가 끝나면 자식 프로세스의 실행 코드의 유무에 상관없이 명령 프롬프트로 돌아오게 된다. 또 하나 A라는 프로세스에서 read를 호출하기 전에 B라는 프로세스에서 write가 호출되어야 파이프에 B에서의 메시지가 써져서 A 프로세스에서 읽혀지게 되는데 write 함수가 호출되기전에 read함수가 호출되면 어떻게 되나 생각이되는데 이는 read가 함수가 pipe의 내용을 읽을때까지 대기하게 된다.) 그럼 자기가 보낸 메시지를 자기가 받지 않고 반드시 상대방이 받게 하는 방법은 두개의 파이프를 사용하는 것이다.
-프로세스간 통신의 적용-
메시지를 저장하는 형태의 에코 서버
무엇인가 더 큰걸 만들어보고 싶다면
Subscribe to:
Posts (Atom)
