#action Blog 블로그 더하기
##Blog
{{{#!blog hyacinth 2009-08-19T21:01:27 지도자의 가치
{{| 나는 정치를 하는 사람으로서 하나의 신조를 가지고 있다. 그것은 지도자라는 사람의 가치가 도대체 어떻게 결정되느냐 하는 점이다. 위대한 지도자는 바로 그 사람이 얼마나 오랫동안 권력을 잡고 있었느냐, 또는 얼마나 높은 지위를 차지하고 있었느냐, 그리고 얼마나 많은 업적을 남겼느냐에 따라 결정되는 것이 아니라, 어떤 자세로 국민을 대했었느냐에 따라 결정되는 것이라고 생각한다. 다시 말해서 그 사람이 얼마나 많이 자기 나라 국민을 존경하고 사랑했느냐, 그리고 국민들에게 이득이 되는 올바른 방향과 정책들이 어떤 것이라고 생각했으며, 또 그런 정책을 실현시키기위해 노력했는가 (후략)
─ <행동하는 양심으로>(1973,김대중)
|}}
[http://www.ddanzi.com/articles/article_view.asp?installment_id=267&article_id=4654 http://www.ddanzi.com/articles/article_view.asp?installment_id=267&article_id=4654]
대통령의 "존경하는 국민여러분"
이명박의 저 말에서 진심이 느껴질까?
난 전현직 대통령중에서 저 말에 진심이 느껴지는건 노무현 정도밖에 없는거 같다.
김대중의 위 글은 진실이 담겨 있다. 정치적 철학이 다르면 방식은 다를 수 있어도 국민을 생각하는 마음이 있다면 지도자의 신념을 갖추었다 말할 수 있을 터...
}}}
[[HTML(
)]]
http://hyacinth.byus.net/img/flower.jpg
[[HTML()]]
{{{#!blog hyacinth 2009-08-08T19:15:07 MATLAB 다중접속(Multiple Access) 프로토콜 시뮬레이션
이제 지난번 보인 시뮬레이션 프로그램에서 초기 조건들을 변화시켜 보면서 다중접속 프로토콜의 시뮬레이션 과정을 살펴 보자.
먼저 단말 대수를 한대로 설정하고 패킷 충돌이 없는 경우 내부 변수가 어떻게 변화하는지 확인하며 프로그램 흐름을 살펴보도록 하겠다.
main.m
42 : Mnum = 100; –> 42 : Mnum = 1;
[[HTML( )]]
그림1-1. 단말 대수가 1대일 때의 전송률과 평균지연시간
모든 시간단위에 거쳐 전송된 모든 패킷이 성공적으로 전송되므로 부하(G;프레임 전송 시간에 생성되는 프레임의 비율. 즉, 200kbps의 공유 채널에서 200비트의 프레임을 전송하려 하면 전송 시간은 1ms이다. 시스템이 매초 500개의 프레임을 만들어낸다면 이는 1ms마다 1/2개의 프레임이다. 부하는 1/2이다.)가 1일 때 당연히 전송률은 1이 된다. 그런데 G가 전송률을 넘어서 버리면 프로그램을 종료시키는 부분이 있어 이를 확인하기 전에 프로그램이 종료되어버리고 만다. 그 부분에 대한 주석처리를 하고 다시 확인해 보았다.
main.m
80 : for G=[0.1:0.1:1,1.2:0.2:2]
81 : % if G >= Mnum
82 : % break
83 : % end
[[HTML( )]]
그림1-2.
부하가 1일 때 전송률이 1이 되고 이를 넘지 않는다(당연히 전송률이 1을 넘을 수 없다. 있지도 않은 패킷을 보낼 수 없으니). 이론값 그래프는 조금 다른데 이는 이론적인 전송률(S=G*e^-2G) 유도과정에서, 접속지점으로 단위시간 내 전송되는 패킷의 기대값을 구할 때 생성되는 패킷의 수가 Poisson 분포를 따른다고 가정했기 때문에, 접속지점이 늘어나면 시뮬레이션 결과가 이론값에 수렴할 것으로 생각된다.
단말 대수를 두대로 늘려보면.(충돌이 생기는 경우)
main.m
42 : Mnum = 100; –> 42 : Mnum = 2;
[[HTML( )]]
그림2. 단말 대수가 2대일 때의 전송률과 평균지연시간
최소한의 충돌이 생기는 경우이지만 최적 부하 G는 역시 1/2로 단말 대수가 100대일 때와 크게 다르지 않다.
시뮬레이션에서 핵심이 되는 부분은 now_time과 next_time 변수인데 now_time에서 각 단말별 패킷 전송 시간에 대한 정책을 결정하고 충돌여부를 판단하게 된다.
https://hfwx6w.blu.livefilestore.com/y1mAaxBVIoWCDsZ2bh62U4YNHi57GaX6BbqjOFLQbytDE1Nve2GfC9EqoU7AgY2tl6WESAnQk9y6qP6jNBxrsc5kDf1ISr87y1HqNx8rnZq7TTf4Pb2TdoVPkmPO6I-GH8OhflSzZ-6NbqZB35E0mW5pQ/p02_02_thumb3.gif
그림3. 순수 ALOHA의 프레임 전송
main.m
80 : for G=[0.1:0.1:1,1.2:0.2:2]
…
92 : now_time = feval(char(protocol(pno)),-1);
93 :
94 : while 1
95 : next_time = feval(char(protocol(pno)),now_time);
while 루프 안에서 next_time = feval(char(protocol(pno)),now_time); 이 반복되면서 next_time 을 구한다. feval은 MATLAB에서 문자열로 함수를 호출하는 함수인데 protocol(pno)가 'paloha'일 때 paloha(now_time);과 완전히 동일하다. next_time은 가장 빠른 접속 단말의 다음 전송 시간이다. 즉, 그림3에서 프레임 1.1 전송 시작시간 –> 프레임 3.1 전송 시작시간 –> 프레임 2.1 전송 시작시간 … 이 될 것이다.
{{{#!folding paloha.m
% Program 6-6
% paloha.m
%
% Pure ALOHA System
%
% Input argument
% now_time : now time but, now_time<0 initialized the access
% terminals
% Output argument
% next_time : next stae change time
%
% Programmed by M.Okita
% Checked by H.Harada
%
function [next_time] = paloha(now_time)
global STANDBY TRANSMIT COLLISION
global Srate Plen
global Mnum Mplen Mstate
global Tint Rint
global Spnum Splen Tplen Wtime
persistent mgtime mtime
if now_time < 0
rand('state', sum(100*clock));
mgtime = -Tint * log(1-rand(1,Mnum));
mtime = mgtime;
Mstate = zeros(1,Mnum);
Mplen(1:Mnum) = Plen;
next_time = min(mtime);
return
end
idx = find(mtime==now_time & Mstate==TRANSMIT);
if length(idx) > 0
Spnum = Spnum + 1;
Splen = Splen + Mplen(idx);
Wtime = Wtime + now_time - mgtime(idx);
Mstate(idx) = STANDBY;
mgtime(idx) = now_time - Tint * log(1-rand);
mtime(idx) = mgtime(idx);
end
idx = find(mtime==now_time & Mstate==COLLISION);
if length(idx) > 0
Mstate(idx) = STANDBY;
mtime(idx) = now_time - Rint * log(1-rand(1,length(idx)));
end
idx = find(mtime==now_time);
if length(idx) > 0
Mstate(idx) = TRANSMIT;
mtime(idx) = now_time + Mplen(idx) / Srate;
Tplen = Tplen + sum(Mplen(idx));
end
next_time = min(mtime);
\}}}
paloha.m 함수가 하는 일은 각 단말의 패킷 전송 시간과 각 단말의 현재 상태를 비교해 전송 상태(충돌 여부)를 결정하고, 충돌이 일어나면 정책(1-persistent 혹은 P-persistent)에 따라 다음 전송 시간을 정하고, 대기 상태면 전송을 시작하고(상태를 전송으로 바꾸고), 전송이 완료 되면 상태를 대기 상태로 바꾸고 다음 시간 전송 시간을 정한다. 즉 프로토콜의 기능을 구현하는 모든 부분이다. paloha.m 외 saloha.m, npcsma.m, carriersens.m 파일(함수)이 각각 Slotted ALOHA, non-persistent CSMA, Slotted np-ISMA 프로토콜을 정의한다.
paloha.m 의 초기화 부분을 잠깐 살펴보면,
28 : mgtime = -Tint * log(1-rand(1,Mnum));
패킷이 생성되는 시간이다. rand(1,Mnum));는 접속 단말 수만큼 균등 분포의 난수 행렬을 생성한다.
29 : mtime = mgtime;
패킷이 전송되는 시간이다. 이 부분만 보면 mgtime과의 차이가 무엇인지 잘 이해가 안 갈 수도 있는데 Slotted ALOHA에 관련되는 부분이라 하면 이해가 갈 것이다. 패킷이 생성된 시간과 전송되는 시간은 다를 수 있다. 순수 ALOHA는 패킷 생성이 일어나는 즉시 전송된다.
30 : Mstate = zeros(1,Mnum);
{{{>> help zeros\}}}
{{{ZEROS Zeros array.\}}}
모든 단말의 상태를 0(STANDBY)
32 : next_time = min(mtime);
다음 시간은 가장 빠른 다음 전송 시간이 된다.
가장 처음 수행되는 초기화 부분 아래로 전송 상태(TRANSMIT), 충돌 상태(COLLISION), 대기 상태(STANDBY)의 행동을 결정하는 부분이 이어져 있다.
36 : idx = find(mtime==now_time & Mstate==TRANSMIT);
find 함수는 행렬을 성분 대 성분(element-by-element)으로 비교해 조건에 만족하는 성분의 위치를 값으로 갖는 행렬로 반환한다.
시간을 슬롯화하여(Time Slotted) 충돌을 줄이려 하거나, 신호 감지로 충돌을 피하려하는(Carrier Sense) 프로토콜 등 여러가지 필요한 조치가 추가되나 큰 틀에서 경합(Contention) 프로토콜(혹은 랜덤 접속;Random Access) 종류의 프로토콜은 위 과정은 동일하다.
----
그림은 Windows Writer에서 작성하여 Windows Live 블로그에 올린 것을 위지윅으로 복사하여 태그를 붙여 넣었다. 보기.. 좋나? 확대창이 뜨는 걸 만들면 더 좋을텐데. -- [hyacinth] [[DateTime(2009-08-09T13:12:42)]]
}}}
[[HTML()]]
http://hyacinth.byus.net/img/flower.jpg
[[HTML()]]
{{{#!blog hyacinth 2009-08-06T19:14:55 Rainlendar.
Windows 사이드바 가젯 중 달력은 이름은 일정인데 일정 기능이 없다. 혹시나 내가 못 찾나 했지만 정말 달력 기능만 있다.
|| attachment:08_01.png ||
[[HTML(왜 이름이 일정인가요.)]] -_-
달력에 표시하는 일정 관리나 일정 기억은 지금까지 휴대폰에 있는 걸 사용했다. 그렇지만 어제 노트북을 구입했기에 PC용을 찾아보았다. 구글 후 처음 찾은 앱은 TransPlan ver 1.60G([http://windspxe.cafe24.com/zbxe/?document_srl=4332 link])인데, 이게 설치하고 보니 저번주 박은찬 교수의 고진샤 바탕화면에서 본 것이다. 그 때 보고 깔끔해 보여서 어플 이름이 뭔가 물어볼까 하다 그만두었는데 이것이다. 문제 없으면 이걸 쓰려고 했는데 문제가 있다. Windows 사이드 바와 같이 쓰려고 하니 곂친다. 위치를 옮겨보려고 했는데 이동이 안 된다!! 조금 옆으로 움직일 수 있으면 쓰려고 했는데 바탕화면에 완전히 고정돼서 쓸 수 가 없다. 일단 삭제하고 더 찾아보았다.
|| attachment:08_03.png ||
[[HTML(TransPlan - Windows 사이드바와 곂친다.)]]
다음으로 찾은 앱은 Rainlendar([http://rainlendar.net/ link1] [http://badnom.com/315 link2])인데 이게 아주 마음에 든다. 일단 아주 예쁘다. 외관, 기능 모두 지금까지 써본 달력 일정관리 어플 중 최고다.
http://hyacinth.byus.net/img/reply/1.jpg
|| attachment:08_02.png ||
EVENTS와 TO DO 두 가지 항목을 기록할 수 있다. EVENTS는 달력에 표시할 일이고 TO DO는 기본적으로 메모사항이다(달력 표시도 옵션으로 가능하다). EVENTS에 등록할 때 분류(카테고리)도 선택 할 수 있고 분류에 따라 다르게 달력에 아이콘이 표시된다. 아이콘 종류도 다양하고 표시 색도 분류에 따라 몇 가지(파란색, 녹색 등)로 나뉘어 쓰기 편하다.
|| attachment:07_04.png ||
}}}
[[HTML()]]
http://hyacinth.byus.net/img/flower.jpg
[[HTML()]]
{{{#!blog hyacinth 2009-08-04T14:23:24 배터리의 종류와 사용 방법
http://sw30th15.egloos.com/876425 노트북 배터리에 관한 모든 것
http://k.daum.net/qna/view.html?qid=0sxev 니켈카드뮴전지와 니켈수소전지의 차이점..?
http://woodenshoe.tistory.com/32 껌전지의 역사
요즘 사용되는 배터리(2차 전지)는 크게 니켈-카드뮴(니카드), 니켈-수소, 리튬-이온 배터리로 나뉜다.
이 중 니켈-카드뮴, 니켈-수소는 AAA,AA 규격 충전지, 껌전지, 연식(?)이 오래된 노트북 배터리 등에서 쓰이며 메모리 이펙트 현상이 있다. 배터리 일정량을 소모하고 충전을 반복하다보면 일부 소모한 용량을 최대 용량으로 인식해 용량이 줄어든다. 이것들은 ''' 완전 방전, 완전 충전 '''을 하는 것이 배터리를 오래 이용하는 방법이다.
리튬-이온은 핸드폰, MP3, PMP, 노트북 등 요즘 쓰이는 모바일 기기에서 가장 일반적으로 볼 수 있는 배터리다. 리튬-이온 배터리는 메모리 이펙트 현상이 없어 막 사용해도 크게 무리가 없다. 오히려 완전 방전과 충전을 반복할 경우 배터리가 사망한다. 조금 썼다 싶으면 그때 그때 충전을 하는 것이 좋다. 단순히 말해 ''' 그냥 막 쓰는 것이 오히려 배터리 수명에 좋다. '''
니켈-카드뮴과 니켈-수소, 리튬-이온 중 어느게 메모리 이펙트 현상이 있었는지 항상 헷갈렸다. 그리고 얼마전 내 PMP(코원 A3) 배터리가 사망해서 잘 알아보고 정리했다. [[HTML()]](오래 쓴다고 일부러 완전 방전을 하고 충전 하기를 몇 달간 계속했는데 그 때문에 사망했다고...)[[HTML()]]
오늘도 새로운 지식을 배웠다. 이제 헷갈릴 이유가 없다.
}}}
[[HTML()]]
http://hyacinth.byus.net/img/flower.jpg
[[HTML()]]