2012년 2월 7일 화요일

RAM 업그레이드 후 Debian (wheezy) 시스템의 자원 사용 현황

먼저 gnome-system-monitor에서  보여준 결과는 다음과 같다.


실행한 프로그램은 rythmbox, crome(active 30 tabs), virtualbox, 관리자 터미널,  libreoffice등이다. 평소에 사용하는 조합이다. 가장 큰 가변 요인은 virtualbox의 램 사용률이다 설정은 1G로 설정해 놓았지만, 실제 그렇지는 않는 것 같다. 유동적으로 나눠 쓰는 모양인지 모르겠다. 아무튼 살펴본 봐는 위와 같다.

swap 파일 시스템은 전혀 사용하지 않는다.  CPU는 어쩔 수 없지만 메모리는 1G정도 여유가 있는 것 같다. 그레서 crome의 cache 저장용으로 ramdisk나 tmpfs을 만들어서 사용해야 겠다.

우선 ramdisk와 tmpfs의 차이점에 대해서 살펴 봐야 겠다. 둘다 RAM을 디스크로 사용하는 기법인 것 같은데 구체적인 구현이 다른 것 같다. 그리고 둘을 지원하는지 살펴 보아야 겠다. 이것 당장 해 보았다.

tmpfs을 지원하는지 살펴보기
# grep tmpfs /proc/filesystems
nodev tmpfs
nodev devtmpfs

RAMDISK를 지원하는지 살펴보기
#  dmesg | grep RAMDISK
[    0.000000] RAMDISK: 36cc6000 - 3765b000

음. tmpfs이나 RAMDISK는 지원하는것 같다. 아래 출력은 이미 사용중이라는 생각이 들긴하지만 자세히 무엇을 의미하는지 모르겠다. 용량으로 살펴 볼땐 그래픽 모듈이 사용하는 것 같긴하다.


다음은 RAMDISK 만드는 법이다.
http://shibuvarkala.blogspot.com/2009/09/howto-create-ramdisk-in-ubuntu-debian.html
http://www.techtach.org/using-and-mounting-a-ram-disk-in-ubuntu-the-easy-way
http://securfox.wordpress.com/2009/03/14/how-to-create-a-ram-disk/

Ubuntu나 Fedora 배포판의 Firefox나 Crome에서 RAM을 cache로 설정하는 법
http://www.linuxreaders.com/2011/01/11/firefox-chrome-cache-on-ram-drive-fedora-ubuntu/

인터넷 전화기(LG U+ 070) 준비


새것으로 구매하려고 하였으나 매달 행사로 나오는 물건들도 따지고 보면 많은 손해를 보도록 되어 있다.
삼년약정에 공유기 대여비 추가 부담.
그러니 행사가 아닌 물건은 도대체 누가 사는 것인지 궁금하다.

중고로 물건을 샀다. 평균가격이 3만원이었다만 여기저기 전화하고 그러는게 귀찬아 그냥 4만원짜리 샀다.
인내심을 시험하는 ARS 전화를 거쳐 중고기계를 사용한다는 사정 설명과 귀찮은 개인정보 동의 같은 것들.

그래서 결론은 월 2200원에 설치비 11000원이 든단다.
이놈의 설치비 라는 것은 전화한통으로 해결되는 mac주소 불러주는 것을 이야기하는 것이 었다.

음. 근데 동작을 안한다. MAC주소 받아 적는데 착오가 있었거나 뭔가 전산 착오라고 유추한다.
어쨌든 월요일에 설치기사가 온단다. 기다려 보자.

* mylg070로 기본 SSID가 설정되어 있는것 해제하여 다른 공유기를 사용하기
http://clien.career.co.kr/cs2/bbs/board.php?bo_table=lecture&wr_id=41561

2012년 2월 6일 월요일

Suspend to Ram에 생긴 그간의 문제 해결

그 동안 debian wheezy의 hibernation은 잘 동작하였다.
그러니 suspend에 필요한 기본적인 동작들은 완벽하다.
하지만 Suspend to Ram에서 복구하는 기능은 마우스 커서가 살아있는 상태에서
멈춰서 버린다. 그래서 Ctrl+Alt+F1으로 관리자 터미널을 띄워서 재부팅하였다.
그리고 /var/log/pm-suspend.log의 기록들을 확인해 보았다.
다음과 같은 실패 항목들이 나타난다.


/etc/pm/sleep.d/10_unattended-upgrades-hibernate suspend suspend: success.
Running hook /usr/lib/pm-utils/sleep.d/55NetworkManager suspend suspend:
Having NetworkManager put all interaces to sleep...Failed.

/usr/lib/pm-utils/sleep.d/55NetworkManager suspend suspend: success.
Running hook /usr/lib/pm-utils/sleep.d/60_wpa_supplicant suspend suspend:
Failed to connect to wpa_supplicant - wpa_ctrl_open: No such file or directory

자세한 내용들을 찾아 보려고 googling을 해보았지만, 시원한 해결책은 없었다.
그져 네트워크 문제라고 유추해 볼 뿐이다.

네트워크의 가장 기초적인 설정을 살펴 보았다. 다음과 같이 되어있었다.


# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
#NetworkManager#iface eth0 inet dhcp

#auto wlan0
#iface wlan0 inet dhcp
# wpa-ssid networkname
# wpa-psk password

아. 이 모든 것들은 필요에 따라 조금씩 수정해 보왔던 내 탓이다.
그래도 잘 동작했었다. 가끔씩 resume이 안되었을 때가 있었지만.
그리고 suspend to Ram은 잘 사용하지도 않는다.

그래서 다시 되돌려 놓았다. 문제되는 NetworkManager와 wpa-ssid, wpa-psk항목들을 제외하고, 그러니 되돌아 왔다.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
#NetworkManager
iface eth0 inet dhcp

auto wlan0
#iface wlan0 inet dhcp
# wpa-ssid networkname
# wpa-psk password

이로써 Suspend to Ram도 잘 동작하였다.

2012년 2월 3일 금요일

미래에 대처하는 나의 자세

나는 불안정하고
때로는 위로 받고 싶다.

가끔은 이런게 모자라 정체되곤한다.
그래서 바보가 되곤한다.

그래도 계속 가야한다.
그러니 가끔 멍하게 지내야한다.

2012년 1월 25일 수요일

Eigenvector(고유벡터) 와 Eigenvalue(고유값) 구하기

책속에서 존재하는 eigenvector와 eigenvalue구하기의 난제는 다항식을 푸는 문제로 귀결된다.
하지만, 컴퓨터로 구현하고자 한다면 다항식을 푸는 문제 자체도 대단히 어려운 일이다.
해가  있는지 (허근인지 실근인지) 무엇보다도 소인수 분해와 같은 암호 해독과 같이 어려운 문제에 봉착하게 된다.

그래서 다항식 해법으로 접근하지 않고 eigenvetor와 eigenvalue의 property(속성)을 이용하여 반복적인 연산을 통하여 실제 eigenvector와 eigenvalue에 수렴할 수 있는 근접한 값을 찾아 내는  방법을 사용한다. 여기에는 여러가지 방법들이 존재한다. power iteration method, shifted inverse iteration method, Rayleigh quotient method, simultaneous iteration method, QR method  이와 같은 반복적인 연산을 이용한 방식은 eigenvalue와 eigenvector가 존재한다는 가정하에 다음과 같은 속성을 이용한다.

 존재한다고 가정한 eigenvalue들은 {q_{i}}이고 eigenvalue들은 {lambda_{i}}이다.
여기서,

 | lambda_{1} | > | lambda_{2} | > ... > | lambda_{n} |  

의 조건을 갖는다.

 그리고 추정하고자하는 eigenvector는 실제 eigenvector의 span으로 표현할 수 있다. 왜냐하면 eigenvector는 해당 공간의 basis가 되기 때문이다. 그래서 다음과 같이 eigenvector의 linear combination으로 표현할 수 있다.

  v_{0} = c_{1} * q_{1} + ... + c_{n} * q_{n}.  

 이와같은 추정치가 eigenvector라고 한다면 실제의 eigenvector의 정의에 해당하는 조건식에도 부합되어야한다.

 A * x = lambda *x  

에서 부터

 A * v_{0} = c_{1} * lambda_{1} * q_{1} + ... + c_{n} * lambda_{n} * q_{n}  

그리고

  A^k * x = lambda^k * x  

 의 확장된 속성에 이르기 까지로 부터 다음과 같이 유도 된다.

 A^k * v_{0} = c_{1} * lambda_{1}^k * q_{1} + ... + c_{n} * lambda_{n}^k * q_{n}  
          = lambda_{1}^k * [ c_{1} * q_{1} + c_{2} * (lambda_{2} / lambda_{1})^k * q_{2} + ... + c_{n} * (lambda_{n} / lambda_{1})^k * q_{n} ]  

즉 위와 같은 방정식으로 전제할 수 있다. 여기서 주의 깊게 살펴보아야할 부분은 (lambda_{i} / lambda_{1})^k의 부분이다. 분모에 해당하는 lambda_{1}는 가장 큰 절대값을 갖는 eigenvalue이기 때문에 k값이 커질 수록 0의 값으로 수렴하게 된다. 그럼 나머지 항들은 사라지고  lambda_{1}에 해당하는 eigenvector의 값으로 v_{0}의 값은 수렴하게 된다. 기본적으로 이러한 개념하에 위의 반복적인 연산이 이루어진다.

그리고 이러한 기본 개념하에 power iteration방식과 shifted inverse iteration방식이 설명된다. 기타 다른 방식들도 이 방식에서 확장해 나아가는 형식을 취하고 있다.

power iteration

이 방식은 eigen value중 가장 큰 값에 해당하는 eigen vector만 구할수 있다.

psudo code of power iteration

 v = random vector with its norm "1"  
 do {  
  w = A * v;  
  if (w == v) break;  
  v = w / |w|;  
 } while (1);  

inverse iteration

 이 방식은 eigen value중 가장 작은 값에 해당하는  eigen vector만 구할 수 있다. power iteration 방식은 A의 eigen value가 lambda_{i}라면 A^{-1}의 eigen value이 1/lambda_{i}가  되는 특성을 이용하여 A^{-1}에 power iteration을 적용한다.

psudo code of inverse iteration

 v = random vector with its norm "1"  
 do {  
  w = A^{-1} * v;  
  if (w == v) break;  
  v = w / |w|;  
 } while (1);  

shifted inverse iteration

A의 특정  eigen value에 근접하는 값을 임의로 선택한 값이 u라고 하면  (A - u * I)의 eigen value은 lambda_{i} - u가 된다. 그리고 (A - u * I)에 inverse iteration을 적용하면 u값에 근접하는 eigen value에 해당하는 eigen vector를 구할 수 있다.

psudo code of shifted inverse iteration (finding eigen vector corresponding to eigen value closed to u)

 v = random vector with its norm "1"  
 do {  
  w = (A - u * I)^{-1} * v;  
  if (w == v) break;  
  v = w / |w|;  
 } while (1);  

Rayleigh quotient iteration

 이 방식은 shifted inverse iteration에서 u값과 v값을 동시에 근사화 시켜서 연산 시간을 줄여주는 방식이다.

psudo code of Rayleigh quotient iteration (finding eigen vector corresponding to eigen value closed to u)

 v = random vector with its norm "1"  
 do {  
  w = (A - u * I)^{-1} * v;  
  if (w == v) break;  
  v = w / |w|;  
  u = v^{T} * A * v;  
 } while (1);  

Simultaneous iteration

이 방식은 이전의 방식들이 한번에 하나의 eigen vector만을 구할 수 있지만 한번에 모두 구할 수 있다.

psudo code of simultaneous iteration


  V = [v_{i} : random vector with its norm "1" and i = 1..n]; // QR decomposite Q * R = QR_decomposite(V); do {  W = A * Q;  
  Q * R = QR_decomposite(W);  
  if (Q is not changed) break;  
 } while (1);  
 the columns of Q will converge towards a basis of eigenvectors of A  

The QR method

 이 방식은 QR 분해를 반복적으로 수행하는 것이다. 이론이고 뭐고 orthogonal column vector들은 항상 Q 행렬에 모이게 되고 Upper triangular 행렬은 R에 모이는 QR 분해를 Q 행렬에 반복적으로 recursive하게 적용하면 뭔가 유일한 orthogonal columns vector가 나올 법하게 느껴진다.

psudo code of QR method

 B = A;  
 do {  
  Q * R = QR_decomposite(B);  
  B = R * Q;  
  if (Q is not changed) break;  
 } while (1);  

2012년 1월 24일 화요일

무모한 클릭질


모니터에 불을 댕기고
수십번 클릭질을 해보아도
맘맞는 사람과 이야기하는 것만큼
허기가 풀리지는 않는구나

2012년 1월 15일 일요일

Must buy !


 잠비나이 - 나부락




이슈타르 - All of You ( 여자 블루스 디킨슨 )