'전체'에 해당되는 글 322건

  1. 2011.01.11 :: 우분투 리눅스에서 USB 키보드에 달린 터치패드를 disable 하고 싶을 때 (2)
  2. 2010.12.10 :: 아이패드용 케이스 초허접 비교
  3. 2010.12.10 :: vim 에서 regular expression의 greedy/non greedy matching
  4. 2010.11.04 :: 즉흥적 컴퓨팅
  5. 2010.11.04 :: 상황인지 컴퓨팅의 근본 문제
  6. 2010.08.31 :: 다섯 줄로 쓴 블루투스 헤드셋 모토로라 MOTOROKR S9-HD 사용기
  7. 2010.08.24 :: 안드로이드 폰에서 애드 혹 네트워크 설정하기 (2)
  8. 2010.08.23 :: 안드로이드 개발 환경에서 HTC Desire 인식 시키기
  9. 2010.08.23 :: 아들의 독후감
  10. 2010.08.18 :: 컴퓨터와 공간의 진화
  11. 2010.08.18 :: 유비쿼터스 컴퓨팅과 사람
  12. 2010.06.08 :: Empathy에서 Network Error가 날 때
  13. 2010.06.04 :: 리눅스에서 UPnP/Bluetooth 가지고 음악 재생하기 기본 지식
  14. 2010.03.05 :: 키보드 공유와 키보드 매핑 (Synergy+KeyTweak+KeyLock) (2)
  15. 2010.03.03 :: 칠레 지진 -- 재건을 도웁시다
  16. 2010.02.16 :: bash에서 파일 이름 갖고 놀기 (2)
  17. 2010.02.02 :: bash 명령 줄에서 편집 기능 쓰기
  18. 2010.01.15 :: 우분투 리눅스에서 이클립스가 말을 안들을 때
  19. 2010.01.14 :: samba 파일 시스템 마운트 하기
  20. 2010.01.05 :: svn으로 작업하다가 이전 버전을 보고 싶을 때
  21. 2009.12.31 :: 네이버에서 아이폰 나눠주는 경품 행사를 한대요 ^^
  22. 2009.12.28 :: 우분투에서 듀얼 화면에서 시너지 쓰기
  23. 2009.12.24 :: 꽃이 피게 하라 - '서울버스' 앱 사태를 회고한다
  24. 2009.12.18 :: vim 기반의 똘똘한 개발 환경
  25. 2009.12.03 :: Synergy(시너지)와 Shift-Space로 한영 전환하기
  26. 2009.12.01 :: Windows 환경에서 gVim을 쓸 때 설정 파일 변경하기
  27. 2009.11.20 :: 다큐멘터리 HOME 2009 한글 자막 (6)
  28. 2009.11.20 :: awk 에서 여러 파일을 동시에 다루기
  29. 2009.11.20 :: 다른 디렉토리에 있는 파일을 하나씩 가져와서 내용을 바꿔서 새 파일로 만들기
  30. 2009.10.07 :: 우분투 데스크탑 설정을 원상 복구 하기
기술을 얘기한다 2011.01.11 16:58
우분투 리눅스에 포함되어 있는 X 윈도는 워낙 훌륭해서 USB  키브드와 잘 연동된다. 예를 들어, 내가 현재 사용하고 있는 IBM Ultranav 키보드의 경우 키보드에 빨콩이라고 불리는 스틱 형태의 포인터와 터치패드가 동시에 내장되어 있다. 따라서, 이 키보드를 연결하면 이들 모두가 인식되어 빨콩으로든 터치패드로든 모두 마우스 포인터 옮기기와 클릭 등을 할 수 있다.

그런데, 가끔 키보드를 치다가 터치패드를 건드려서 엉뚱한 윈도가 활성화 된다든지 하는 맘에 안드는 경우가 생겨서 나는 항상 터치패드는 disable 시켜놓고 쓴다. 윈도의 경우 Ultranav 용 드라이버를 설치하면 선택적으로  enable/disable 할 수 있지만 우분투에서는 어떻게 할까?

물론 항상 그렇지만 여러가지 방법이 있다. 그리고 그 방법은 현재 사용하고 있는 X 윈도의 버전 등과도 관련이 있다. 어쨌든 최신판의 우분투를 기준으로 하면 다음과 같이 해결된다.

우선, 입력 장치가 뭐가 달려 있는지 본다.

newcat@newcat:~$ xinput list
⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave  pointer  (2)]
⎜   ↳ Synaptics Inc. Composite TouchPad / TrackPoint    id=12    [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                       id=14    [slave  pointer  (2)]
⎜   ↳ Macintosh mouse button emulation            id=16    [slave  pointer  (2)]
⎜   ↳ Synaptics Inc. Composite TouchPad / TrackPoint    id=11    [slave  pointer  (2)]
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard                 id=5    [slave  keyboard (3)]
    ↳ Power Button                                id=6    [slave  keyboard (3)]
    ↳ Video Bus                                   id=7    [slave  keyboard (3)]
    ↳ Sleep Button                                id=8    [slave  keyboard (3)]
    ↳ Lite-On Tech IBM USB Travel Keyboard with UltraNav    id=9    [slave  keyboard (3)]
    ↳ Lite-On Tech IBM USB Travel Keyboard with UltraNav    id=10    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard                id=13    [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                      id=15    [slave  keyboard (3)]
포인터로는 시냅틱 터치패드/트랙포인트가 두개 (id 11번과 12번) 그리고 TPPS/2 IBM 트랙포인트가 하나 보인다. (후자의 경우 현재 사용하는 노트북에 내장된 빨콩인 듯) 키보드로는 울트라나브 키브드가 두개 보이는데 하나는 외장 USB이고 하나는 IBM ThinkPad 노트북에 내장된 키보드인 것으로 추정된다.

그렇다면 내가 disable 하고 싶은 터치패드가 11번인지 12번인지 어떻게 알 수 있을까? 다행히도 해당 장치가 발생시키는 이벤트를 볼 수 있는 기능도 xinput 이 제공한다.
newcat@newcat:~$ xinput test 11
motion a[0]=2316 a[1]=549
motion a[0]=2320 a[1]=545
motion a[0]=2325 a[1]=541
...
이런 식으로 각 장치 id 를 바꿔가면서 해보면 어느 장치가 몇 번인지를 알게 된다. 나의 경우는 11번을 disable 해야 한다는 걸 알게되었고 이제는 disable 시키려고 한다. 그럼 각 장치가 제공하는 기능이 무엇이 있는지 검사한다.
newcat@newcat:~$ xinput list-props 11
Device 'Synaptics Inc. Composite TouchPad / TrackPoint':
    Device Enabled (135):    1
    Device Accel Profile (265):    0
    Device Accel Constant Deceleration (266):    1.000000
    Device Accel Adaptive Deceleration (268):    1.000000
    Device Accel Velocity Scaling (269):    10.000000
    Evdev Reopen Attempts (250):    10
    Evdev Axis Inversion (270):    0, 0
    Evdev Axes Swap (272):    0
    Axis Labels (273):    "Rel X" (143), "Rel Y" (144)
    Button Labels (274):    "Button Left" (136), "Button Middle" (137), "Button Right" (138), "Button Wheel Up" (139), "Button Wheel Down" (140)
    Evdev Middle Button Emulation (257):    2
    Evdev Middle Button Timeout (258):    50
    Evdev Wheel Emulation (259):    0
    Evdev Wheel Emulation Axes (260):    0, 0, 4, 5
    Evdev Wheel Emulation Inertia (261):    10
    Evdev Wheel Emulation Timeout (262):    200
    Evdev Wheel Emulation Button (263):    4
    Evdev Drag Lock Buttons (264):    0
옳지. 첫 줄에 있는 "Device Enabled" 가 눈에 번쩍! 이걸 1 -> 0 으로 바꿔주면 되겠다.
newcat@newcat:~$ xinput set-int-prop 11 "Device Enabled" 8 0
0 앞에 있는 8은 8 비트짜리 데이터라는 뜻.






posted by 신묘군
잡스럽게 얘기한다 2010.12.10 15:21
인케이스 제품

가죽이라 두껍다는 것이 단점 (가죽이라는 장점도 있음). 전체 테두리를 다 감싸는 구조라서 잘 고정될 것 같은 느낌을 주지만 가생이쪽을 눌러야 할 일이 있을 때 걸린다고 싫어하는 사람도 있다고 함.

비바 제품

색깔이 제일 이쁘게 나왔음. 테두리를 감싸는 구조가 아니라 플라스틱 같은 구조가 귀퉁이 쪽만 잡아주기 때문에 화면을 시원스럽게 볼 수 있다는 장점. 다양한 자세로 놓을 수 있다는 것도 매력

도도 케이스

수제작 하는 나무 케이스 구조. 무척 고급스러운 느낌. 역시나 귀퉁이만 잡아주는 구조.
얼른 봐서는 상당히 불안하게 고정되는 것 같은데 많이 팔리는 걸 보면 뭐... 잘 고정되나부지.

브라이튼넷 제품   

딱 봐서 싸구려 느낌이긴 하지만 화사하고 깜찍하고 싸고... (위의 다른 제품의 절반 정도 수준)
고정은 네 귀퉁이만.

애플 정품 케이스

마지막으로 애플에서 파는 "정품" 케이스. 가격에 비하여 영 허름하게 생겼음(원래 애플 제품은 다 비쌈 ㅠㅠ) 하지만 얇아서 막상 쓸때는 무척 편리해서 가장 많이 추천되는 제품. 뽀대는 너무 없어 보임. 
posted by 신묘군
* (0 or more) greedy matching
\+ (1 or more) greedy matching
\{-} (0 or more) non-greedy matching
\{-n,} (at least n) non-greedy matching
posted by 신묘군
기술을 얘기한다 2010.11.04 12:19

컴퓨터가 처음 만들어진 이후 지금까지 우리 삶을 여러 측면에서 바꾸어 놓았다. 아직도 변화는 진행형이다. 삶의 여러 요소를 씨줄로 그리고 충분히 작고 강력한 컴퓨터를 날줄로 서로 엮어서 세상을 지어내면 그것이 마크 와이저가 주장한 유비쿼터스 컴퓨팅이고[1] 윌리엄 미첼이 얘기하는 융합 공간(fusion space)[2]이다. 이 둘의 시각은 물론 다르다. 와이저는 컴퓨터의 도움을 받아서 사람이 일을 처리하지만 컴퓨터를 의식하지는 않아야 함을 중요시한다. 길 한가운데 무거운 바위가 있으면 그냥 사람은 자기 손으로 들어 옮기면 된다. 물론 실제로는 사람의 의도를 알아챈 컴퓨터가 그 돌을 옮기는 것을 몰래 도와주지만 사람이 그걸 굳이 알 필요는 없다. 한편, 미첼은 공간과 컴퓨터와 사람이 융합됨으로써 공간이 즉흥적인 상호작용을 일으키는 풍요로운 기회의 공간으로 바뀜에 주목하고 있다. 길을 가다 아는 사람을 만났는데 만남 김에 사업 회의를 할 수도 있고 심심하던 차에 사람들이 마침 플래시 몹을 하고 있다면 참여할 수도 있다. 물론 컴퓨터가 없어도 이런 일은 가능하지만 융합 공간에는 수많은 컴퓨터가 숨어 있기 때문에 예기치 않은 기회를 사람이 미처 알지 못하는 경우에도 이를 발견하여 사용자에게 알려주고 도와주는 것이 가능할 것이다. 요약하자면, 유비쿼터스 컴퓨팅은 어떤 일을 해내는 방법을 다룬 것인 반면에 융합 공간은 그런 일거리를 발견하는데 무게를 두고 있다. 이들 두 비전을 결합함으로써 우리의 일상에 잠재되어 있는 즉흥적인 상호작용의 기회를 찾아내고 그 기회를 실현할 수 있도록 사람, 사물, 서비스를 엮어서 활용할 수 있게 되는 것을 즉흥적 컴퓨팅이라고 부르자.

그렇다면 어떻게 즉흥적 컴퓨팅을 실현할까? 실현에 필요한 요소 기술을 살펴보기에 앞서 요소 기술을 결합할 수 있는 틀을 살펴보자. 즉흥적 컴퓨팅은 전형적인 응용의 구조(입력-처리-출력)보다는 자발적, 지능적 형태가 될 수 밖에 없을 것이다. 왜냐하면, 기존의 유비쿼터스 컴퓨팅처럼 미리 정해진 응용 프로그램을 실행하기 위해서 어느 공간의 사람, 사물, 서비스가 결합되는 것이 아니라 사람, 사물, 서비스는 각자 나름의 판단에 따라 자율적인 동작을 하고 있고 이들의 융합에 의하여 응용 프로그램이 결정되기 때문이다. 자율적, 지능적인 시스템을 만드는 데에는 잘 알려진 여러 기법이 있다. 인공지능 분야의 GPS(General problem solver), 제어 공학에서의 제어 루프(control loop) 등이 전형적인 사례이다. 즉흥적 컴퓨팅을 나타내는 틀로 가장 적절해 보이는 것은 OODA 루프(Observe, Orient, Decide, and Act loop 관찰-판단-결심-행동 루프)이다. 이 이론은 미 공군에서 전투 작전용으로 개발된 것이지만[3] 다양한 분야에서 활용[4]하고 있다. OODA 루프를 간단히 정리하자면 객관적인 정보를 수집하고 (관찰 단계) 수집한 정보로부터 현재의 상황을 인식하고 (판단 단계) 상황에 맞춰 가장 적절한 행동을 선택한 뒤 (결심 단계) 결정된 행동을 실행에 옮기는 (행동 단계) 과정으로 이뤄져 있으며 이들 과정은 서로 되먹임(feedback)을 통해 연결되어있다.

OODA 루프의 각 단계로 나눠서 즉흥적 컴퓨팅의 요소 기술을 살펴 보면 다음과 같다. 관찰은 센서 네트워크, 사물 통신(M2M communication) 등으로부터 환경을 감지하는 것과 사회 네트워크 서비스(SNS Social network service), 사용자 프로파일(user profile) 등으로부터 사람 또는 사람과 사람의 관계를 감지하는 것을 모두 포함한다. 상황을 판단하는 것은 기존의 인공지능에서 다루었던 지식/규칙 기반 추론, 이러한 지식/규칙을 표현하는 방법으로서 온톨로지(ontology) 그리고 컴퓨터에게는 부족하기 쉬운 상식을 보충하기 위한 연구(예를 들어, ConceptNet, 데이터/웹 마이닝 등)가 포함된다. 결심 단계에서는 실행 가능한 여러 과업 중 가장 적절한 것을 선택하거나 (과업 고르기 task match) 여러 과업을 결합하여 새로운 과업을 지어내는 (과업 짓기 task composition) 과정을 포함한다. 행동 단계에서는 결정된 행동을 실행하기 위해 필요한 요소(예를 들어, 네트워크, 서비스, 자원 등)를 잽싸게 결합하는 것이 필요하다.

각 요소 기술 하나 하나가 독립된 연구 분야로서 다양한 연구 주제를 담고 있지만 이 글에서는 그 중 두 가지 근본적인 이슈를 소개하는 것으로 글을 마무리 하고자 한다. 첫째 이슈는 되먹임의 모호성이다. 모든 지능적인 시스템은 판단 결과가 적절했는지를 되먹임 하는 과정을 거치면서 발전한다. 즉흥적 컴퓨팅에서도 각 단계에서 내린 결정이 적절하였는지를 판단하여 반영하여야 하는데 사용자는 관찰-판단-결심-행동의 모든 단계를 거친 결과로서 제공된 서비스에 대한 의견을 제시하는 것이므로 시스템이 제공한 어떤 서비스가 맘에 들지 않았을 때 어느 단계부터 틀렸는지를 구분하기가 어렵고 설령 단계를 안다고 하더라도 그 단계에 포함된 수많은 결정 중 어느 것이 틀려서 문제인지를 사용자가 알 수 없고 안다고 해도 알려줄 방법도 없고 설령 방법이 있어도 너무 번잡스러워 애초의 즉흥적 컴퓨팅이 달성하려는 비전 중 하나인 보이지 않는 컴퓨팅을 망치게 된다.

둘째 이슈는 과업 추상화의 불일치 문제이다. 예를 들어, 회의를 하기 위해서 탁자를 둥글게 배치하고 프로젝터를 통하여 회의자료를 보여주도록 설정하였을 때 사람들은 이러한 행동을 싸잡아 회의 준비라고 이해하는 반면에 즉흥적 컴퓨팅 시스템도 과연 이런 낱낱의 행동을 결합해서 하나의 추상화된 행동으로 기억할 것인가? 또는 시스템이 충분히 지능화하여 그런 정도의 추상화를 해낼 수 있다고 하더라도 만약 사람들이 “2011년 프로젝트 계획 회의라고 기억한다고 하면 과연 시스템도 그런 식의 이해를 할 수 있는가? 이것이 가능해야 다음 번 프로젝트 계획 회의가 열렸을 때 시스템이 알아서 지난 회의와 비슷하게 회의실을 설정하고 필요한 자료를 미리 보여줄 수 있을 것이다.



[1] Weiser, M, Gold, R and Brown, J S., The origins of ubiquitous computing research at PARC in the late 1980s. IBM Systems Journal, 1999, Issue 4, Vol. 38, pp. 693-696.

[2] W. J. Mitchell. E-topia. MIT Press Cambridge, MA, 2000.

[3] 이 글의 논지와는 무관하지만 흥미로운 사실은 OODA 루프는 한국전(6.25 전쟁)에서 소련 전투기보다 미국 전투기가 더 많은 전투에서 이긴 과정을 분석한 결과로 만들어졌다고 한다. http://en.wikipedia.org/wiki/John_Boyd_%28military_strategist%29

[4] 예를 들어, 최근 몇 년 사이에 인기를 끌고 있는 연구 주제인 인지 라디오(Cognitive radio) 기술에서도 이 루프를 확장하여 사용하고 있다.

posted by 신묘군
기술을 얘기한다 2010.11.04 12:14

너무나 당연한 것 즉, 너무 뻔해서 아무도 얘기하지 않는 것. 그래서 그 바닥에 있는 사람들은 다 알지만 가끔 깜빡깜빡하고 간과하는 것이 있다. 그러다 막상 문제를 풀다보면 "아... 맞아. 그래서 이렇게 하면 안되는거였지" 하게 되는 것들 말이다.

상황인지 컴퓨팅이 지향하는 것은 아주 분명하다. 상황을 알아내서 응용이 돌아가는 방식을 그 상황에 가장 잘 맞게 하자는 것이다. "전화가 왔는데 마침 회의 중이라 벨을 울리지 않고 램프만 깜빡인다" 라는 식이다. 이런 똘똘한 서비스가 가능하려면 일련의 과정이 필요하다.

사람이 "회의실에 앉아 있고 주변 여러 사람의 목소리가 간헐적으로 들리며 스케쥴러에 업무 회의가 그 시간에 있다고 기록되어 있다" 는 객관적인 정보를 수집하고 (관찰 단계) 이 정보로 부터 "주인님이 회의 중이구나" 라는 상황을 인식하고 (판단 단계) "전화가 왔는데 회의 중이니 벨을 울리지 말아야 한다" 는 가장 적절한 행동을 선택한 뒤 (결심 단계) 이를 실행에 옮겨 "벨소리 대신 램프를 깜빡" 이도록 하는 (행동 단계) 과정으로 표현할 수 있다. /* 설명의 편의를 위하여 관찰-판단-결심-행동 루프(Observe, Orient, Decide, and Act loop, OODA loop) 로 표현해 보았는데 굳이 이 모델이 아니라도 이와 유사한 인지 기반의 행동 모델은 수없이 많이 있고 무엇으로 표현하던 큰 차이는 없다고 본다 */

만약 우리가 개발하려는 기능이 "회의 중에 전화오면 램프만 깜빡이게 하자" 는 것 뿐이라면 인지해야 할 상황은 "회의 중이냐?" 라는 것 하나 뿐이다. 이 하나를 판단하기 위해서 필요한 정보가 무엇일까 생각을 해보고 목록을 만든다. 그런 다음 그 정보를 수집하는 기능을 구현한다. 그렇게 하면 각각의 단순한 정보 (또는 단순한 상황)을 모으거나(context aggregation)하거나 짜집기를 해서(context composition) 응용이 필요로하는 복잡한 상황을 알아내게 되는 것이다.

그런데 이런 접근 방법은 무척 소모적이다. 핸드폰이 해야 할 기능이 벨 울리는 것만 있는게 아니라 점점 더 스마트해지면서 해야 할 기능은 늘어나는데 그때마다 그 기능을 지원하는 상황을 정의하고 그 상황을 알아내는 정보를 정의하고 그 정보를 알아내는 기능을 구현하다보면 아마 시스템은 무척 비대해질 것이고 정보 수집하고 상황을 판단하느라 정작 핸드폰으로서의 기능은 뒷전이 될 수 있을 것이다.

그래서 사람들이 생각해낸 것은 어느 응용에서나 활용할 수 있는 공통 상황을 시스템 차원에서 정의하고 여러 응용이 상황을 재사용하게 하자는 것이다. 예를 들어, 사용자의 움직임 (앉아있다, 걷고있다, 뛰고있다), 사용자의 지리적 위치(위도/경도 또는 주소) 와 같은 비교적 단순한 물리적 상황이나 (주변에 누가 있는지 알아내는 방법이 있다고 했을 때) 사용자의 주변상황(윗사람과 독대중이다, 가족들과 같이 있다)과 같은 사회적 상황도 어느 정도는 알아낼 수 있을 것이다.

하지만 이런 응용에 중립적인 공통 상황은 응용의 특정한 경우에 맞춰 정의한 것이 아니므로 응용에서 그대로 활용하기는 어렵고 앞서 언급한 상황 정보의 모으기와 짜집기를 하는 것은 물론이고 상황 정보를 확대/축소할 수 있는 외부 정보를 활용하는 것이 불가피하다. 예를 들어, 온톨로지를 통해 응용이 생각하는 상황과 시스템이 제공하는 상황의 관계를 알아낸다거나 (쓸만한 것이 있다면) 상식 데이터베이스를 활용해서 시스템이 알아낸 상황에 대하여 일반인들이 대략 어떤 식으로 반응하는지를 알아내어 활용하는 식이 가능할 것이다. 물론, 시스템이 제공한 상황을 응용이 원하는 상황으로 해석하는 것이 구현하기 어렵거나 실행에 부담이 크다면 시스템에서 상황을 공통적으로 뽑기아서 부담을 줄이려던 애초의 목적을 달성하지 못할 위험도 있다.

요약하자면 하향식으로 하자니 건건이 만드는 부담이 크고 상향식으로 하자니 딱 맞질 않고 진퇴양난인 셈이다.

물론 희망이 없는 것은 아니다. 긍정적인 신호가 여기 저기서 포착된다.

1. 충분히 많은 정보 원천: 소셜 네트워크, 만물통신/사물통신 등 사람과 사람, 사람과 사물, 사물과 사물간에 일어나는 많은 일을 기록하고 접근하는 기술이 급격히 성장하고 있으며 이는 상황 파악의 범위를 넓히고 정확도를 높이는데 큰 역할을 할 것이다.

2. 응용의 동적 구성: 이때까지는 응용이라고 하면 필요한 요소를 다 때려박은 하나의 EXE 파일을 의미하고 이를 실행하는 환경은 운영체제라고 불렀다. 하지만, 서비스 지향 아키텍처 또는 웹 서비스가 상징하듯이 인터넷이 운영체제를 대체하고 단일 EXE 파일이 아니라 전지구적으로 흩어진 단위 서비스가 실행 중에 서로 연결되면서 응용을 실현한다. 따라서, 응용은 하나의 실체가 아니라 실행 중에 만들어지며 계속 새로운 버전으로 발전하는 살아있는 유기체가 되었다. 마찬가지로 이들 응용을 떠받치는 시스템 즉 인터넷도 끊이없이 확대 재편되는 실체이며 제공하는 상황정보도 계속 발전한다. 살아있는 유기체로서의 운영체제와 응용이 결합됨으로써, 인터넷(즉 운영체제 또는 시스템)이 제공하는 상황정보의 폭과 깊이가 계속 바뀐다고 하더라도 이를 활용할 수 있는 새 버전이 쉽게 나올 수 있다.

3. 뭐 더 있을텐데 막상 쓰려니 생각이 안나네...
posted by 신묘군
잡스럽게 얘기한다 2010.08.31 15:32
옆 자리에서 누가 쓰고 있길래 집어와서 써보았다. 일단 가벼워서 좋다. 딴 건 관심없고 음악 감상에 어느 정도 쓸 수 있는지 궁금해서 내 핸드폰(넥서스 원)에 페어링 해서 몇 곡 들어보았다. 린킨 파크나 라디오 헤드는 들을만 했다. 그래서 "오 꽤 괜찮네" 했는데 킹 크림슨으로 넘어가니 저음의 드럼소리가 초등학교 운동회에나 쓸 것 같은 찢어진 소고 소리로 난다. 결론: 길 거리 다니면서 신나는 음악을 듣는 사람에게는 그냥 저냥 쓸만하다.
posted by 신묘군
1. 폰의 루트 권한을 획득한다. (이건 폰 마다 다 다름)

2. 필요한 소프트웨어를 설치한다. 추가로 설치할 소프트웨어는 무선 랜을 설정하는 iwconfig 이며 android-wifi-tether 패키지에 포함된 것을 빼내서 설치하면 된다. (딴 데서도 구할 수 있을 것이다.)

android-wifi-tether 패키지를 다운로드하면 wireless_tether_????.apk 라는 파일로 되어 있는데 apk 파일은 사실 zip 파일이므로 확장자를 zip 으로 바꿔주고 압축을 풀면 raw 디렉토리 아래에 iwconfig 라는 파일이 있을 것이다.

iwconfig 파일을 폰에 넣어야 하는데 이때는 adb 명령을 사용한다. (여기서는 늘 root로 되어 있는 상태를 기준으로한다. 루팅 하는 방법에 따라 조금씩 다른 방법을 사용해야 한다.)
adb push \path\to\iwconfig /data
adb shell
chmod 700 /data/iwconfig
이렇게 하면 /data/iwconfig 파일을 이용해서 무선 랜을 설정할 수 있다.

3. 폰에서 제공하는 기능을 이용하여 무선 랜을 끈다.

4. 네트워크 드라이버 커널 모듈을 다시 로딩하고 네트워크 설정을 해줌으로써 애드 혹 모드로 무선 랜을 다시 설정한다.
adb shell
insmod /system/lib/modules/bcm4329.ko
/data/iwconfig eth0 mode ad-hoc
/data/iwconfig eth0 essid 애드혹_네트워크의_SSID
ifconfig eth0 사용할_IP_주소
사용할_IP_주소 는 아무거나 해도 되지만 외부로 라우팅 되는 것을 막으려면 사설 주소 영역(예, 192.168.xx.yy 등)을 쓰는게 바람직하다.

5. 애드 혹 모드에서 빠져나와 원래 상태로 복구하기 위해서는 다음과 같이 네트워크 드라이버 커널 모듈을 내린다음
adb shell
rmmod bcm4329
시스템 설정에서 WiFi를 켜주면 된다.

(주의: 위의 내용은 넥서스 원과 HTC 디자이어에 CyanogenMod 롬 (CM6 RC2) 을 올린 상태에서 작업한 것입니다. 참고로 HTC 의 stock 롬이나 Modaco 롬 (R8) 에서는 애드 혹 통신이 되지 않았습니다. 넥서스 원의 stock 롬과 Modaco 롬은 아직 테스트 하지 못하였습니다.)
posted by 신묘군
그 동안 쭉 넥서스 원만 갖고 놀다가 HTC 디자이어를 추가로 갖고 놀려니 개발환경(Eclipse, ADB 등)에서 디자이어를 인식을 못한다. 이럴 때 해결책은, 안드로이드 SDK 가 깔려 있는 디렉토리에서 android-sdk-windows/usb_driver/android_winusb.inf 파일을 찾아서 [Google.NTx86] 부분에 다음의 내용을 추가 한다.
;HTC Desire
%SingleAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C87
%CompositeAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C87&MI_01
그런 다음, 디자이어를 컴퓨터에 연결하고 장치 관리자를 들어간 뒤 ADB 장치를 선택하고 드라이버 새로 고침을 선택한 후 방금 수정한 inf 파일이 있는 디렉토리를 지정해주면 된다.

이 글을 작성하기 위해서 이곳저곳의 글을 참조하였다.
posted by 신묘군
세상을 얘기한다 2010.08.23 12:03
(주: 중2짜리 아들이 방학 숙제로 쓴 글이다. 나도 사놓고 읽지 않은 책인데 (부끄부끄) 아들이 대신 읽어서 정리해주니 대견스럽다.)

쎄느 강은 좌우를 나누고 한강은 남북을 가른다

난 이 책을 읽고 홍세화씨께 푹 빠졌다. 이 책을 읽으며 줄곧 “옳소!”를 외쳤다. 홍세화는 프랑스에서 ‘남민전 사건’ 때문에 귀국하지 못하고 프랑스에서 택시운전사를 직업으로 살아가며 ‘나는 빠리의 택시운전사’ 등 많은 글을 썼다. 15살인 내가 이 책을 읽기엔 어려웠을지도 모르겠다. 하지만 이 책을 읽으며 한국과 프랑스의 차이점과 배워야 할 것에 대해서 깊이 생각했다.  권위주의에 찌들어 사는 대한민국의 국민에게 추천해야하는 사람들이 바로 최고의 권위를 최초로 타파한 집단인 프랑스의 민중이다. 내가 바로 그 대한민국의 국민이여서 그런지 단번에 프랑스의 매력에 매료되었다.

프랑스는 세계 2위 농산물 수출국이다. 특히 와인은 양은 이탈리아에 약간 밀려 2위지만 질은 세계 최고를 자랑한다. 빅토르 위고가 “신(紳)은 물을 만드는 데 그쳤고 인간이 포도주를 만들었다”라고 했을 만큼 프랑스의 언덕 하나하나에는 모두 포도가 여물어가고 양조장이 있다. 음식도 미를 중시한다. 맛보다 보기에 좋아야한다는 것이다. 하지만 프랑스인들은 음식보다도 와인을 중시한다. 와인을 ‘음식에 곁들여 먹는 것’이 라니라 ‘와인을 먹기 위해 음식을 먹는다’라고 해야 옳다. 하지만 음식에도 대단한 자부심을 가지고 있어 “우리는 먹고, 너희는 집어넣는다”라고 비아냥거리기도 한다.

프랑스는 개인주의적 사회이다. “영국은 제국이고, 독일은 민족이며, 프랑스는 개인이다”라고 쥘 미슐레가 말했다. 생활방식에도 많이 표출되는 이 개인주의는 데카르트의 “나는 존재한다, 그러므로 나는 존재한다”부터 시작해 드골이 ‘프랑스의 영광’을 주장할 때도 “나 드골은......”을 앞세우고 에밀 졸라의 드레퓌스 사건 의 고발문 “나는 고발한다!”에도 드러나 있다. 그렇다. 프랑스 개인주의의 특징은 ‘나’가 가장 중요한 존재라는 것이다. 모든 5,900만 인구가 나를 앞세운다. 그래서 “프랑스는 5,900만으로 나누어져 있다”라고 표현하기도 한다. 그래서 그런지 프랑스에서는 ‘즈망푸!’ 정신이 발달했다. 이는 프랑스어인데 “상관하지 마!” 라는 뜻이다. 사람들은 사적인 것을 말하기 싫어하고 관심 갖지도 않는다. 누구네 집이 돈을 벌었다느니, 아들이 어느 대학을 갔다던 지 그것은 프랑스 아줌마들의 주요 수다거리가 아니다.

이제 프랑스의 토론문화에 대해 알아보자. 프랑스에서 가장 중요한 과목은 수학이 아니라 철학이다. 철학의 역사에 대해 배우고 철학적인 지식을 많이 요구한다. 우리나라처럼 아이들에게 수학해라 영어해라 하지 않고 아이들의 이성을 성장시키는데 노력한다. 선생님들도 자부심을 가지고 자신만의 철학으로 아이들을 성장시켜나간다. 그래서 그런지 프랑스 사람들은 토론을 많이 한다. 대통령 선거 전날에도 후보들이 모여서 토론을 한다. 우리나라는 ‘개그콘서트’나 ‘무릎팍 도사’ 따위를 보겠지만 이 토론방송은 프랑스의 최고 인기프로이다. 그런 만큼 토론이 중요하다. 카페에서도 토론이 이루어지는데 직업, 성별, 나이에 관계없이 사회에 대해서 토론한다. 이것은 정말 부러운 것이 아닐 수가 없다. 난 우리나라에 이런 모습이 찾아오길 바란다.

나는 정말 한국에서 태어난 게 잘했다는 생각이 들 때가 있다(원래는 절대 안 그런다). 바로 한글을 사용할 때이다. 크~ 한글은 세계 최고의 글자라고 해도 손색이 없을 만큼 위대한 글자다. 이 얼마나 대단한가? 세종대왕님은. 하지만 요즘은 다 영어가 대세이다. (주: 한국어와 한글을 혼동하여 쓰고 있습니다. 우리 문화 우리 말글살이의 중요성을 지적한다는 점에서 크게 이상하지 않아 고치지 말라고 했습니다.) 유아기 때부터 영어를 가르치고 영어 학원, 과외 등이 생겨난다. 내 생각엔 영어를 잘 못해도 별로 상관이 없다고 본다. 프랑스인들은 영어를 못(안)한다. 대신 불어가 있기 때문이다. 하지만 한글은 불어보다 훨씬 쉽다. 근데 왜? 이것은 우리의 문화를 자랑스러워하지 못하는 것에 있는 것 같다. 우리나라 문화가 열등하다고 생각해서 서양의 것이 좋아 보이는 건 사회의 문제이다. 나라가 그렇게 부추기고 있다. 언제 미(米)국에서 미(美)국으로 바뀌었는가? 사람들은 이제 미국을 아름다운 나라라고 숭배까지 하고 있다. 말에는 얼이 있다는 말이 있다. 아니 얼이 있다. 우리는 얼을 뺏기고 있는 게 아닐까? 침략 당하는건 아닐까?

프랑스어로 ‘똘레랑스’라는 게 있다. ‘자유, 관용’이라는 뜻이다. 이것은 프랑스 사람들에게 있어서 중요하고 또 자랑스러워하는 것이다. 하지만 우리가 그대로 따라 해서는 안 된다. 우리나라엔 이미 ‘중용’과 ‘외유내강’이라는 훌륭한 사상이 있다. 이들은 ‘똘레랑스’보다 더 폭넓은 개념이다. 하지만 우리는 이런 훌륭한 실천적 사상들을 모두 헌신짝 버리듯 버렸다.

우리가 죽어도 프랑스를 따라잡지 못하는 이유를 들어보라면(꼭 하라는 건 아니다) 프랑스인의 창조적인 개성이다. ‘집단의 단결력’도 중요한 요소이나 그런 건 다 옛날이야기이다. 이제 개개인의 능력이 중요한 시대이다. 프랑스의 개인의 능력과 창의력으로 우승을 일궈낸 98년 월드컵을 예로 들 수 있다 (하지만 독일도 이런 축구를 도입하여 남아공 월드컵에서 대단한 성적을 거두었다). 이를 우리가 따라하려면 일단 지역주의를 타파해야 한다. 우리가 내세웠던 민족주의는 이미 유명무실해졌다. 이는 독일식, 프랑스식의 민족모델도 따라 가지 못하게 막아왔다. 이 저열한 지역주의를 몰아 내야한다. (주: 우리의 지역주의가 민족주의의 패거리 문화와 연관되어 있다는 얘기를 쓰려고 했는데 마지막 탈고하는 과정에서 줄이다가 이상하게 되어 버린 듯 ㅋㅋ)

우리는 어찌해야 되는가? 우선 사회를 뜯어 고치는 게 시급하다. 태조 이성계와 정도전이 꿈꾼 ‘역성혁명’처럼 나라를 바꿔야 한다. 이것은 극우반동주의를 몰아내는 것으로 시작해야한다. (주: 음... 아이가 홍위병으로 자라지 않도록 단속해야겠습니다. ㅠㅠ) 국민을 위한 나라가 되어야지 나라가 국민의 피를 빨아 먹는 비열한 국가가 되어선 안 된다. 가슴 아파하는 재일동포, 북한의 2천만 난민들을 올바를 시선으로 바라보자. 북한과 전쟁을 일으키려는 자들에게는 전선에서 개죽음 당하는 사람에게도 가족이 있고 그들만의 삶이 있다는 걸 알려 줘야한다. 이것을 상기해야한다 남북을 가르는 한강도 S자로 흐르며 남북이 뒤바뀐다는 것을……. 그것으로서 우리들은 자랑스러운 대한민국, 위대한 대한민국으로의 한걸음을 나아간 것이다.

이제 우리나라 사회에 할 말이 많지 않은가? 당장 우리가 해야 하는 일은 자기 자신부터가 이 세상을 보는 눈을 고쳐야 한다는 것이다. 이 세상을 색안경을 끼고 보지말자. 시선을 바꿔라. 어떤 인간이든 우리의 친구이다. 모두의 벗이다. 사랑하자.   

posted by 신묘군
기술을 얘기한다 2010.08.18 16:15

컴퓨터가 처음 우리 삶의 어느 부분엔가 도입된 이후 지금까지 컴퓨터는 우리 삶을 여러 측면에서 바꾸어 놓았다. 건축학자인 윌리엄 미첼은 컴퓨터가 우리가 살아가는 공간에 미친 영향에 주목하였다[1]. 대부분의 대학은 업무처리를 위하여 컴퓨터를 들여와서 대개 전산 센터라고 부르는 공간에 설치하였다. 그 이름이 상징하듯 전산 센터는 대개 캠퍼스의 중앙에 있었다. 왜냐하면 여러 부서, 여러 연구실에서 수백 수천 장짜리 펀치 카드 꾸러미를 전산 센터에 들고 와서 데이터 처리를 의뢰하고 또 처리된 결과물을 받아가야 했으므로 캠퍼스의 중앙이 가장 합리적인 위치 선택이었을 것이다.


사람들의 책상 위에으레 데스크 탑 컴퓨터가 올라가 있던 시절은 또 어땠나? 당연히 전산 센터라는 건물은 사라지고 대신 사무실 환경이 변하기 시작했다. 화면이 번들거리면 안되니까 조명은 어두워지고 (그 바람에 개인 스탠드를 책상에 하나씩 두게 되었다) 창문에 블라인드는 필수품이 되었다.


유선 터미널, 유선 랜의 공급은 책상의 배치를 바꾸었다. 예를 들어, 초창기 이더넷은 대개 굵은 케이블을 썼는데 이건 워낙 굵어서 잘 꺾이지도 않았고 컴퓨터가 놓일 위치에 맞춰 트랜시버를 달아야 하고 케이블 전체 길이의 제약도 있고 해서 책상을 케이블 배치에 맞추는 것이 훨씬 쉬웠고 임의로 책상 배치를 바꾸는 것은 꿈꾸지도 못 할 일이었다. 이러한 제약에서 해방된 것은 UTP 기반의 허브 덕분이었다.


랩탑 컴퓨터의 보급으로 사람들은 공간을 더욱 독창적으로 활용할 수 있게 되었다. 벤치는 같이 술 마시러 나갈 친구를 꼬시는 곳에서 리포트를 같이 쓰고 (또는 베끼고) 다운로드 받은 예능 프로그램을 같이 보는 곳이라는 새로운 기능을 얻게 되었다.


그렇다면 이전의 컴퓨터보다 더 강력한 처리 능력과 통신 능력을 내장한 컴퓨터(라고 쓰고 스마트폰이라고 읽는다)를 사람들이 하나씩 들고 다니고 빌딩과 가게가 증강현실을 통해서 컴퓨터로 들어오고 사람들의 관계가 만질 수 있는 실체로 표현될 수 있는 지금 공간은 우리에게 무슨 의미인가? 미첼은 공간이 이제는 사람, 기계, 서비스, 관계 등이 모두 융합된 공간(fusion space)가 되었다고 주장한다. 이 융합 공간은 사람과 사람 사이에서 재미난 일들이 즉흥적으로 튀어나오는 곳이다. 한마디로 세상은 즐거운 기회로 가득찬 공간이 되고 있는 것이다. 그러한 기회를 포착하고 즐기기 좋은 형태로 사람들의 손 안에 쥐어 줄 수 있다면 드디어 우리는 퍼스널 컴퓨팅, 모바일 컴퓨팅을 넘어서기 시작했다고 말할 수 있을 것이다.



[1] W. J. Mitchell. E-topia. MIT Press Cambridge, MA, 2000.

posted by 신묘군
기술을 얘기한다 2010.08.18 15:50

컴퓨터는 다루려는 대상으로부터 컴퓨터가 다루기 적절한 모델을 뽑아내고 이 모델을 컴퓨터가 이해하는 내부 표현으로 바꿔서 처리한다. 데이터베이스는 손으로 쓰던 장부를 컴퓨터 안으로 옮겨 놓은 것이고 직원에게 월급을 주는 행위는 특정 데이터베이스 테이블의 특정 레코드의 특정 필드에 월급에 해당하는 값을 저장하는 행위로 표현된다. 파일, 사용자, 폴더, 프로세스 등 컴퓨터에서 다루는 모든 것은 컴퓨팅의 대상을 적절한 형태로 추상화 하고 모델로 만든 것이다.


컴퓨터가 다루는 대상으로부터 모델을 뽑아내고 다루기 좋은 표현 형태로 바꾸는 것은 상당한 노력이 든다. 그래서, 처음에는 아주 단순하고 구현하기 쉬운 형태를 사용하였다. 예를 들어, 초기 컴퓨터는 전문적으로 훈련을 받은 사람들만이 다뤘으므로 처리 결과를 그냥 램프의 깜빡임이나 두루마리 종이에 구멍을 뚫는 것으로 보여주는 것으로 충분했다. 이에 비하면 이름으로 파일 즉, 비정형화 된 임의의 데이터 덩어리를 다룰 수 있게 된 것은 비약적인 발전인 셈이다. 컴퓨터가 사람들의 책상으로 옮겨오게 되자 책상 위에 겹겹이 쌓인 책과 공책을 흉내 낸 중첩 창(overlapped window)을 지원하는 그래픽 사용자 인터페이스가 대세가 된 것은 자연스런 발전의 과정이라 할 것이다. 하지만 이때까지만 해도 컴퓨터는 실제 세계의 모습을 원래의 모습과는 현저히 다른 형태로 표현하였기 때문에 실제 사물과 컴퓨터에 의해 표현된 사물의 표상은 명백히 구분되었다. 이런 점에서 어떻게 컴퓨터가 표현하는 사물을 실제 사물과 비슷하게 할 것인가가 중요한 관심사가 되기도 한다. (파일을 나타내는 아이콘을 끌어다 휴지통 아이콘에 집어넣어서 파일을 지우는 것은 이러한 열망이 만들어낸 멋진 결과물이다.)


이러한 전형적인 컴퓨팅에서의 대상과 컴퓨터 내부 모델의 관계와 무척 다른 구성을 갖는 컴퓨팅으로서는 가상 현실과 증강 현실을 들 수 있다. (주의:가상 현실이나 증강 현실도 다루는 범위가 넓기 때문에 이 글에서 제시하는 설명이나 정의와 일치하지 않는 경우도 많이 있을 것이지만 이 글에서는 최대한 좁은 의미 또는 이 글의 논지에 잘 부합하는 의미로 맘대로 쓰기로 한다.) 가상 현실은 실제로 존재하지 않는 대상을 다룬다. 하지만 그 대상은 최대한 실제에 가깝게 (더 정확히는 가짜 대상의 상정된 모습에 최대한 가깝게) 표현된다. 앞의 월급-데이터베이스의 경우와 비교할 때 진짜-가짜의 관계가 정확히 반대로 된 셈이다. 한편, 증강 현실은 실제로 존재하는 대상을 (꼭 가짜라고 할 수는 없지만 그래도 원래 모습은 아닌) 조작된 형태로 표현한다. 가상 현실의 묘미는 그것이 뻔히 가짜라는 것을 알면서도 진짜 같이 표현되는 것에 있고 증강 현실의 묘미는 진짜 물체의 겉모습 속에 숨은 참모습을 보여주는 데에 있다.


그렇다면, 유비쿼터스 컴퓨팅 또는 보이지 않는 컴퓨팅은 어떤가? 설명의 편의를 위해서 예를 들어보자. 현재 우리 주변에 있는 것 중 가장 완전히 유비쿼터스 기술을 보여주는 것은 아마 ABS 브레이크일 것이다. ABS 기능이 있건 없건 브레이크는 겉모양도 같고 사용하는 방식도 같고 동작도 (거의) 같다. 다만 ABS 기능이 필요한 순간 저절로 나타나서 제 일을 하고서는 사라진다. , 속으로는 원래의 사물보다 훨씬 강력한 기능을 갖고 있지만 겉으로는 원래의 사물과 같은 모습을 하고 같은 방식으로 사람과 소통한다. 그래서, 사용자는 원래의 사물이 갖고 있는 기능을 쓰듯이 쓰면 사용자의 의도를 파악해서 적절히 숨겨진 기능이 발현된다. 유비쿼터스 수트를 입고 (사람이 들 수 없을 정도로) 무거운 돌을 들면 수트가 알아서 부족한 힘을 보태줄 것이다.


하지만 유비쿼터스 기술의 가장 중요한 목표인 보이지 않음은 그 자체로서 문제의 근원이기도 하다. , 사용자가 실제와 가상을 구분하기가 어려워 진다는 것이 문제가 될 수 있다. 유비쿼터스 수트를 입고 100킬로그램짜리 돌을 들어올린 사람은 정말로 자기가 들어올린 것인지 수트가 들어올린 것인지 자신 있게 말할 수 없다. 만약 1톤짜리 돌을 들었다면 오히려 정확히 알 것이다. 실제를 모방하는 기술이 실제에 점점 가까워 질 수록 사람들의 만족도는 높아지지만 (그란투리스모를 해 본 사람이라면 누구든지 고개를 끄덕일 것이다.) 그것이 어느 선을 넘어서게 되면 언캐니 밸리(uncanny valley)와 같은 심각한 심리적 거부감 또는 신체의 여러 감각 사이의 부조화에 의한 부작용(3차원 게임을 처음 즐기는 사람들은 대개 약간의 멀미를 경험한다.)을 느끼게 된다. 물론 기술이 더욱 발단해서 결국에는 이러한 거부감이나 부조화도 뛰어넘게 될 것이다. 그렇게 되면 우리는 영화 매트릭스에서 보듯 완전히 조작된 경험의 세계로 진입하기 시작한다. 만약 어제는 틀림없이 내 힘으로 200킬로그램짜리 돌을 들 수 있었는데 오늘은 들 수 없다면 기분이 어떨까? 여자 친구한테 바람맞고 성질 나서 벽을 쳤는데 건물이 무너진다면 어떨까? 만약 공을 차려는데 얼마나 세게 차게 될 지 예측하기 어렵다면 어떨까? 나는 확실히 보통의 인간인데 내 행동의 결과는 엑스맨처럼 나온다면 기분이 어떨까?


진화생물학자인 리처드 도킨스가 지적하였듯이 모든 생물은 그들이 살아가는 규모에 맞는 형태로 세상을 인지하도록 진화했다. 짚신벌레에게는 물 분자의 브라운 운동이 소금쟁이에게는 표면 장력이 그리고 우리에게는 중력이 운동의 법칙을 지배한다. 혹시 보이지 않는 컴퓨팅이 이러한 인간의 자연스런 인지를 방해하지는 않을까? 또는 어떤 사람은 방해하면서 어떤 사람은 방해하지 않는다면 이들 사이의 (결과적) 차별은 (사회적으로) 문제가 없는 것일까?


모르겠다. 극도로 인위적으로조작된 환경과 경험을 제공하면서 사람들이 이를 최대한 자연스럽게받아들이게 한다는 것은 그 자체로 모순된 목표는 아닌가? 우리는 정말 이 기술을 써야 할 사람에 대해 얼마나 알고 있나?

posted by 신묘군
아마 MSN을 지원하는 telepathy-butterfly 에 문제가 있는 모양. 일단 Empathy를 종료하고

killall telepathy-butterfly

를 해준뒤 다시 empathy를 시작하면 된다. 어떤 사람의 블로그를 참조하였음.
posted by 신묘군
1. 블루투스

블루투스를 다루려면 bluez 를 이용하면 된다. Bluez를 이용하는 법에 대한 기본 정보는 An Introduction to Bluetooth Programming 참조. 샘플 프로그램은 여기에 있다.

리눅스 커맨드 라인에서 어떤 식으로 블루투스를 다룰 수 있는지에 대하여는 Manually Using Bluetooth 참조.

2. UPnP

UPnP를 다루기 위한 기본 라이브러리는 libupnp 이다. guPnP는 UPnP를 객체지향 스타일로 다룰 수 있게 해주는 프레임워크이다.

UPnP를 다룰 수 있는 기본 도구로서 우분투 리눅스에 설치할 수 있는 것으로는 upnp-tools 라는 패키지가 있으나 AV Control Point 는 무슨 이유에서인지 최근 버전에서 빠져있고 소스를 받아서 build를 해도 필요한 헤더 파일이 없어서 빌드가 되지 않음. (우분투의 버그 리포팅 사이트에 버그로 등재되어 있으니 해결 시한은 알려진 바 없음.)

UPnP를 지원하는 프레임워크로서 Coherence가 있다. 예를 들어, 음악 재생 프로그램인 Rhythmbox의 경우 Coherence Plug-in을 설치하고 enable 시켜주면 원격지의 UPnP 미디어 서버의 음악을 찾아 재생할 수 있다.

UPnP를 지원하는 여러 소프트웨어 패키지, 프로젝트에 대한 소개는 별도의 사이트에 있는데 이 사이트의 샘플 소스인 play-next-pause는 상당히 코드가 짧아서 이해하기 좋다. UPnP-inspector 라는 코드가 제일 좋은 소스인 듯.

추가된 이야기 : 안드로이드 환경에서는 CyberLinkForJava를 사용할 수 있다. 그 외 AndroMoteTwonkyServer mobile 가 있으나 소스가 공개되어있는지는 확인하지 못하였다.

3. Audio control

리눅스에서 오디오를 다루는 제일 좋은 라이브러리는 GStreamer 이며 Python binding이 있어서 간단히 다룰 수 있다. GStreamer는 souce / sink 라는 개념이 잘 정리되어 있다. 다음의 예는 mp3 파일을 재생하는 것을 필요한 source / sink 를 연결해서 하는 방법을 보여준다.

gst-launch-0.10 filesrc location=파일이름.mp3 ! mad ! audioconvert ! alsasink

리눅스에서 오디오 입/출력을 다루는 가장 잘 정리된 도구는 PulseAudio이며 특히 PulseAudio Volume Control 과 PulseAudio Device Chooser는 필수 도구.
posted by 신묘군
기술을 얘기한다 2010.03.05 11:51
(1) 상황 설명

데스크탑 한 대와 랩탑 한 대가 있고 데스크탑에는 WANG 키보드가 연결되어 있습니다. 이 키보드를 시너지(Synergy)를 통하여 양쪽에서 공유하여 사용합니다. 그런데, 캡스락을 쓸 일이 없어서 컨트롤 키로 매핑하고 WANG 키보드에 있는 큼지막한 (그리고 다른 키보드에서는 ESC 키가 있는 자리를 차지하고 있는) Help 키를 ESC 키로 사용하려고 합니다.

키락(KeyLock)의 문제점 : 키락을 이용하면 캡스락을 컨트롤 키로 매핑하고 Help 키는 핫키 기능으로 ESC 키로 바꿀 수 있습니다. 그런데 시너지와 같이 쓰게 되면 시너지를 통해 키보드 입력을 받는 랩탑에서는 제대로 안됩니다.

키트윅(KeyTweak)의 문제점 : 키트윅은 키보드의 스캔 코드를 매핑하는 방식이므로 캡스락 스캔 코드를 컨트롤 키의 스캔 코드로 매핑하고 리부팅을 해주면 시너지 너머의 랩탑에서도 캡스락이 컨트롤 키로 동작합니다. 문제는 키트윅은 스캔 코드를 매핑하는 방식이므로 여러 키의 조합 (예를 들어, Help 키는 Left ALT + F8 입니다) 은 처리하지 못합니다.

즉, 키 조합 처리는 되는데 시너지에게 맥을 못추는 키락, 시너지에게는 강하지만 키 조합 처리가 안되는 키트윅... 이게 문제인거죠.

그럼 둘 다 동시에 쓰면 되는가? 그래도 완전히 되지는 않습니다. 그래서 마지막으로 등작하는 것이 시너지에 내장된 핫 키 기능. 키락/키트윅이 키보드가 붇은 쪽(데스크탑)에서는 거의 완벽하게 동작하니 키 조합을 시너지 너머로 넘기지 못하는 키락의 한계만 시너지의 핫키 기능으로 해결하면 되는 것이죠.

(2) 해결책

키락 설정 : 핫 키 기능을 이용하여 Help를 ESC로 매핑합니다.
키트윅 설정 : Half teach 모드를 이용하여 캡스락을 컨트롤 키로 매핑합니다.
시너지 설정 : 핫 키 기능을 이용하여 Help를 ESC로 매핑합니다.

(3) 동작 원리

상황1) 캡스락을 데스크탑 쪽에서 눌렀을 때 : 캡스락 -> 키트윅 -> 컨트롤키
상황2) 캡스락을 랩탑 쪽에서 눌렀을 때 : 캡스락 -> 키트윅 -> 컨트롤키 -> 시너지는 그냥 통과 -> 컨트롤키
상황3) Help를 데스크탑 쪽에서 눌렀을 때 : Help -> 키락 -> ESC
상황4) Help를 랩탑 쪽에서 눌렀을 때 : Help -> 시너지 -> ESC

(4) 결론

남들처럼 살면 좋잖아.
알고나면 뻔한 걸 한참 삽질했어.
posted by 신묘군
세상을 얘기한다 2010.03.03 14:13
옆 자리의 칠레 학생이 꼭 널리 전파해 달라고 해서 올립니다.

--

2010년 2월 27일 강력한 지진이 칠레를 강타하여 건물이 파괴되고 많은 인명 피해가 발생하였습니다. 리히터 규모로 진도 8.8을 기록한 이 지진은 1900년 이래 다섯번째로 큰 지진이며 700명 이상의 사상자를 내고 수많은 건물을 파괴하였으며 태평양 연안의 여러 나라에 쓰나미를 일으켰던 지난 2004년 동남 아시아의 지진 이후 가장 강력한 지진입니다. 아이티와 같이 최근에 발생한 다른 대참사에 비하면 사상자는 적은 편이지만 국가 기반 시설이 입은 피해는 막대합니다. 그 중 55~65%의 피해는 주거시설로 알려지고 있습니다. 우리나라를 재건할 수 있도록 여러분이 도와주시기 바랍니다. 저희를 도와주십시요!!! 저희에게 도움을 주실 분은 다음의 계좌를 이용하시면 됩니다.

630-007069-704 외환은행 (예금주: 칠레대사관)

더 자세한 정보가 필요하시거나 다른 방식의 도움을 주실 분은 저희 대사관에 전화를 주시거나 (02-779-2610) 전자메일로(echilekr@unitel.co.kr) 연락을 주시기 바랍니다.

도움과 지원에 감사드립니다.
posted by 신묘군
TAG 지진, 칠레
디렉토리를 잘라내고, 파일 이름과 확장자를 분리
$ filename=$(basename $pathandfile)
$ extension=${filename##*.}
$ filename=${filename%.*}

posted by 신묘군
TAG bash
자세한 내용은 별도의 매뉴얼을 참조할 것.

자주쓰는 것
^A : 줄의 처음으로
^E : 줄의 끝으로
Alt-F (또는 Alt-오른쪽 화살표): 한 단어 앞으로 이동
Alt-B (또는 Alt-왼쪽 화살표) : 한 단어 뒤로 이동


posted by 신묘군
우분투 리눅스에서 이클립스를 쓰는데 갑자기 어떤 버튼이 안 눌러지는 등 이상한 증세가 있다. 한참을 해메이다가
Fixing Eclipse for Ubuntu Karmic Koala 9.10 라는 글을 발견하고 따라하니 해결되었다.
export GDK_NATIVE_WINDOWS=1
라고 환경변수를 잡아주고 그 창에서 이클립스를 실행하면 된다.
posted by 신묘군
smbmount 명령을 실행해서 하는 방법과 fstab에 넣어두는 방법이 있다. 더 자세한 것은 관련 글을 참조하기 바란다. 여기서는 간단히 명령으로 하는 방법만 기록

$ mkdir /마운트/할/빈/디렉토리
$ sudo smbmount //samba.서버.주소/공유_폴더_이름 /마운트/할/빈/디렉토리 -o username=접속아이디,password=접속암호,uid=나의_uid,mask=000
uid는 /etc/passwd에서 찾으면 된다.


posted by 신묘군
현재 파일과 가장 최근에 commit한 버전을 비교
svn diff -r HEAD DB.cpp

현재 파일과 직전 commit 버전을 비교
svn diff -r PREV DB.cpp

최근 commit 버전과 직전 commit 버전을 비교
svn diff -r PREV:HEAD DB.cpp

특정 버전을 받아 오기
svn update -r 2372 DB.cpp



posted by 신묘군
TAG
잡스럽게 얘기한다 2009.12.31 10:46
체크아웃 연말 이벤트! 100명에게 아이폰을 쏜다! 이벤트 보기
posted by 신묘군
기술을 얘기한다 2009.12.28 11:44
상황 설명부터. 노트북에 우분투가 깔려 있고 듀얼 화면이 된다. 데스크탑운 윈도7이 깔려 있고 역시 듀얼이 되지만 우분투가 주요 작업 환경이므로 우분투만 듀얼로 쓰고 있다. 이 상황에서 우분투와 윈도를 하나의 키보드/마우스로 활용하려고 하면 당연히 시너지라는 프로그램을 쓰면 된다. (우분투와 윈도7에서 시너지를 쓰는 것에 대한 설명은 다른 글을 참조)

그런데 이전의 상황에서는 데스크탑이 듀얼이었기 때문에 간단히 해결이 되었는데 우분투가 듀얼인 경우에는 약간 사정이 다르다. 이는 우분투가 X 윈도 기반이고 X 윈도에서는 각 화면을 별개로 관리하기 때문이다. 그래서 우분투를 듀얼 화면으로 놓고 시너지를 윈도쪽에서 돌리면 우분투의 두 화면 중 한 화면으로만 마우스가 가고 나머지 화면에 마우스를 가져갈 수 없게 된다. 이를 해결하기 위해서는 우분투의 각 화면마다 별개의 시너지 클라이언트 프로그램을 실행하고 이에 맞춰 시너지 서버를 설정해야 된다.

따라서, 시너지 서버 (즉, 윈도7) 쪽의 설정 파일은 다음과 같이 하여야 한다. (설정 파일의 위치는 문서/syngergy.sgc 이다)
section: screens
    ubuntu:
        switchCorners = none
        switchCornerSize = 0
    ubuntu2:
        switchCorners = none
        switchCornerSize = 0
    win7:
        switchCorners = none
        switchCornerSize = 0
end
section: links
    ubuntu:
        right = ubuntu2
    ubuntu2:
        left = ubuntu
        right = win7
    win7:
        left = ubuntu2
end
section: options
end
말하자면 우분투의 각 화면을 ubuntu, ubuntu2 라고 각기 따로 이름을 부여하고 이 세 화면의 상대적인 위치를 정의해주면 된다. 물론 우분투 쪽에서는 이에 맞게 시너지 클라이언트 프로그램을 실행시켜주어야 한다. (한 가지 알 수 없는 상황은 예전에 우분투를 듀얼로 하지 않을 때는 시너지 클라이언트를 시작하게 하는 스크립트를 /etc/X11/Xsession.d 아래에 두어서 실행이 되게 하였는데 이번에는 그렇게 하면 클라이언트는 실행이 되지면 여전히 화면 하나가 제대로 안된다. 무슨 이유인지 모르겠음. 이전의 다른 설정과 충돌을 일으키는건지... 그래서 어쩔 수 없이 다음과 같은 내용의 스크립트를 gnome의 시작 응용으로 시작하게 하였다.)
killall synergyc
sleep 1
/usr/bin/synergyc --name ubuntu2 --display :0.1 yko.kaist.ac.kr
sleep 1
/usr/bin/synergyc --name ubuntu --display :0.0 yko.kaist.ac.kr

posted by 신묘군
세상을 얘기한다 2009.12.24 11:59
조너선 지트렌 교수는 그의 저서 "The Future of the Internet--And How to Stop It"에서 개인용 컴퓨터나 인터넷이 엄청난 정보 기술 혁신을 가져오게된 이유는 생식성(generativity) 때문이라고 설명하고 있다. 여기서 생식성이란 그걸 이용해서 뭔가 쉽게 만들어낼 수 있으냐를 나타내는 척도이다. 예를 들어, 워드프로세서와 개인용 컴퓨터를 비교해보자면 거의 비슷한 구성으로 되어 있음에도 불구하고 워드프로세서는 글을 쓰는 기능 외에 아무것도 할 수 없는 반면에 개인용 컴퓨터에서는 무엇 무엇을 할 수 있다고 열거하는 것이 불가능하다. 왜냐하면 지금도 새로운 응용 프로그램을 누군가는 만들고 있을테니까. 그런 점에서 워드프로세서는 생식성이 없고 개인용 컴퓨터는 생식성이 있다. 전화망과 인터넷도 마찬가지다. 전화망을 발전시켜서 새로운 기능을 갖게 하는 것이 얼마나 어려운지는 전화를 이용한 다자통화요금과 인터넷 전화인 스카이프를 이용한 다자통화요금(공짜!)을 비교해보면 쉽게 알 수 있다.

생식성이 극대화 되는 장면은 정보와 정보가 만났을 때 나타난다. 그 자체로서는 별 의미가 없어 보이던 정보를 수집하고 정리하고 가공하면 엄청난 가치를 낳는다. 그 자체로는 정보를 (거의?) 생산하지 않고 단지 인터넷에 흩어진 정보를 정리하는 역할만 하는 구글이 세계 최고의 기업이라는 것이 이를 잘 설명한다. 기존의 메신저보다 더 허접한 트위터가 갖는 폭발력은 어떤가? 정보와 정보가 만나고 이를 통해 사람과 사람이 만나면서 실로 엄청난 힘을 보여주고 있지 않은가?

그런데 구글이나 트위터가 하는 짓을 보면 한 가지(뭐 여러 가지 더 있겠지만 여기서 관심있는 건 한 가지) 공통점을 발견할 수 있는데 그건 개방성이다. 구글은 자기들 서비스의 많은 부분을 응용 프로그램 인터페이스(API: application program interface)형태로 공개함으로써 구글 "밖에 있는" 사람들이 구글이 제공하는 기능과 정보를 활용하는 응용을 만들 수 있도록 하고 있다. (좀 오래된 글이긴 하지만 윤석찬님의 블로그에서 구글의 오픈 API 소개를 볼 수 있다.) 트위터는 그냥 API를 공개하는 수준에서 한 술 더 떠서 아예 스스로의 발전 방향 조차 열어두고 있다. 트위터 이용자들이 필요에 의해 사용하던 기능이나(예를 들어, 남의 글을 펌질하는 리트윗 기능) 트위터용 응용 프로그램 개발자들이 추가한 기능을(예를 들어, 여러 사용자를 목록으로 묶어서 관리하는 기능) 트위터의 내장 기능을 채택하면서 발전을 거듭하고 있다.

왜 그렇게 개방성을 중시하는가? 착해서? 이타주의가 넘치는 기업들이라 자기 정보를 퍼주는게 기뻐서 그럴리는 없지 않은가? 원리는 간단하다. 사람들이 떠나지 못하게 하기 위해서다. 정보 세상의 큰 특징 중 하나는 옮겨다니는데 별로 돈이 들지 않는다는 것이다. MSN메신저 쓰다가 네이트온으로 옮겨간다고 무슨 돈이 드는 것도 아니다. 따라서, 맘에 들지 않으면 언제든지 사람들은 옮겨간다. 불과 몇년전 가장 각광받던 아이러브스쿨을 기억하는가? 인터넷에서의 명성이라는 것은 앤디 워홀의 표현대로 15분짜리 명성일 뿐이다. 사람들이 떠나지 않게 하는 방법은 그들의 욕구를 충족시켜주는 것인데 사람들이 충분히 많아지면 욕구도 충분히 다양해져서 어느 기업 어느 서비스 하나로 감당할 수 없는 지경에 이르게 된다. 트위터의 CEO인 에번 윌리엄스는 "그저. 많은 꽃을 피우자구요. 그럼 누군가 제대로 문제를 풀겠죠"라고 정리한 바 있다. 내가 아니라 누군가 다른 사람이 문제를 해결하게 하면서 내 틀을 벗어나지 않게 하는 것 이것이 현재 모든 기업의 당면과제다.

인터넷 덕분에 내가 할 수 있는 만큼 내가 하고 못하는 것은 남이 해주는 것을 "엮어서" 가치를 창출하는 것이 가능해졌고 이를 통해 창출되는 가치는 기존 산업의 규모를 뛰어 넘고 있다. 초창기의 웹이 정보의 교환 차원에서 이를 실현했다면 서비스 지향 아키텍처(SOA: software oriented architecture)니 매시업이니 또는 그 외 최근에 유행하는 온갖 유행어가 지칭하는 기술은 응용 프로그램 또는 서비스 차원에서도 "남의 힘을 빌어서 가치 만들기"를 해주는 것들이다.

아이폰용 응용 프로그램인 '서울버스'를 놓고 벌어진 최근의 "해프닝"을 보면서 지자체(또는 중앙정부)가 스스로의 역할을 착각하고 있는게 아닌가 하는 생각이 든다.

(1) 착각1: 내가 만든 정본데 감히 누가?

지자체들의 해명을 보면 돈을 투자해서 생성한 정보를 협의도 없이 가져다 쓰면 안된단다. 내가 법없이도 사는 사람이라 법적으로 정말 그런지는 모르겠지만 상식에 기대어 생각해볼 때 그 돈이 국민들 주머니에서 나온 세금이라면 그 정보도 국민들에게 되돌려줘야할 정보일 뿐이다. 지자체가 투자했다고 지자체가 독점할 수 있는 권한은 없다.

(2) 착각2: 정부가 나서서 사업을 끌고간다?

지자체들의 해명을 보면 자기들도 이미 응용을 만들어서 보급하고 있거나 보급할거란다. 정부는 산업계가 담당할 영역을 침법해서는 안된다. 왜냐하면 정부가 개입하면 애초에 공정한 경쟁이 불가능하기 때문이다. (예를 들어, 개발허가권을 쥔 시청이 개발업체까지 겸한다면 누가 개발업체를 따로 운영하고 싶겠는가?) 정부는 돈을 버는 곳이 아니라 돈을 쓰는 곳이어야 하며 그래서 우리가 세금을 내고 있는 것이다. 세금을 낭비하지 않는 건 좋은 일이지만 돈을 벌어오는 것은 독직이다.

(3) 착각3: 내가 알아서 할께?

뭐 좋다. 굳이 있는 정보 활용해서 좋은 프로그램 만들어서 보급하는 것 까지는 그렇다치자. 하지만 독점은 안된다. 지자체가 무슨 엄청난 개발 능력을 보유한 것도 아니고 설령 아무리 대단한 개발력을 갖췄다고한들 소비자의 다양한 요구를 맞춰 일일이 개발할 수는 없다. 내가 풀고 남은 문제는 남들이 풀게 냅둬야 한다.

화란춘성(花爛春城) 만화방창(萬化方暢)

정부는 그저 꽃이 피게 거들 뿐...

posted by 신묘군
vi 또는 vim은 워낙 오랬동안 개발용 편집기로 쓰여서 이를 이용해서 편리하게 프로그래밍을 할 수 있는 도구가 많이 있다.

1. cscope

어떤 클래스를 쓰고 있는 그 클래스 정의를 보고 싶을 때 마우스 클릭이나 적절한 키 스트로크로 점프를 해준다. vim을 시작할 때 cscope.out이라는 파일을 읽어서 연결 상태를 알아내는데 이 파일은 물론 cscope이라는 명령으로 생성한다. 주의할 점은 cscope.out 안에 있는 파일이 상대경로로 되어 있으면 딴 디렉토리에서 vim을 시작했을 때 문제가 생긴다는점. 이를 피하는 간단한 방법은 아예 절대경로로 색인할 대상 파일을 정리해두는 것. 요런 식으로...

$ find /absolute/path/to/start -name '*.c' -o -name '*.cpp' -o -name '*.h' > cscope.files
$ cscope -b

2. omnicppcomplete

object-> 라고 치면 바로 그 다음에 붙을 수 있는 method를 자동으로 보여준다던지 하는 유용한 도구다. 사용법은 여기 -> http://design.liberta.co.za/articles/code-completion-intellisense-for-cpp-in-vim-with-omnicppcomplete/

ominicppcomplete는 ctags라고 역시나 cscope처럼 소스 파일의 색인을 만들어서 이동을 도와주는 도구를 활용한다. 상세한 설명은 생략하고 어쨌든 새로 색인을 생성하기 위해서는 이렇게 하면 된다.

$ cd /소스가/있는/디렉토리
$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ./


posted by 신묘군
기술을 얘기한다 2009.12.03 12:35
상황은 이렇다. 노트북에는 우분투 리눅스(Ubuntu)가 깔려있고 데스크탑에는 Windows 7이 깔려있다. 그런데 오랜 습관 때문에 여전히 한영 전환은 시프트 공백(Shift-Space)을 이용하고 있다. 각각의 시스템에서 시프트 공백을 이용해서 한영 전환을 하려면
우분투: SCIM 설정에서 한영 전환 키에 시프트 공백을 추가
Windows 7: 처음 윈도를 설치할 때 키보드 드라이버를 Type 3으로 설치
하면 된다. 하지만 책상이 좁다고 하나의 (외장) 키보드(와 마우스)로 노트북과 데스크탑을 동시에 사용하고자 Synergy(시너지)라는 프로그램을 설치했다. 문제는 키보드를 어느 쪽에 다느냐에 따라 결과가 달라진다.

키보드를 노트북+우분투 쪽에 연결한 경우(물론 이때는 시너지 서버를 노트북 쪽에 그리고 시너지 클라이언트는 데스크탑 쪽에서 실행한다)에는 별 문제 없이 한영 전환이 된다. (100% 확실하지는 않다. 왜냐하면 윈도를 처음 설치할 때 Type 1으로 설치했기 때문에 레지스트리를 고쳐서 강제로 Type 3로 동작하게 하였다.) 그런데 이 설정의 문제점은 늘 켜놓는 데스크탑을 클라이언트로 가끔 필요할 때만 쓰는 노트북을 서버로 쓴다는 심리적 불편함도 있지만 더 결정적인 문제는 Windows 7이 특정한 상황에서는 (예를 들어, 프로그램을 설치할 때) 시너지를 통한 입력을 받지 않고 직접 연결된 키보드/마우스에서만 입력을 받는다는 것이다. 따라서, 이런 경우를 대비하여 데스크탑+윈도 쪽에 키보드/마우스를 항상 연결해 두어야 한다. 뭔가 말이 안되는 상황.

그래서 이번에는 키보드와 마우스를 데스크탑에 연결해보았다. 물론 시너지 서버는 데크크탑쪽에서 그리고 클라이언트는 노트북 쪽에서 실행한다. (노트북은 키보드/마우스가 기본 내장되어 있으니 혹시 시너지가 말썽을 부려도 큰 문제는 없음) 그런데 이번에는 한영 전환이 되지를 않는다. 마우스 포인터가 노트북 화면에 있을 때에는 키보드 입력이 노트북 쪽으로 가야 되는데 유독 한영 전환(즉 시프트 공백)은 윈도 쪽에서 먹어 버린다. 즉, 윈도 쪽에서 한영 전환이 일어난다. 노트북+우분투 쪽에서는 아예 아무런 입력이 없는 것 처럼 가만히 있다. 구글을 뒤져보면 서너지를 패치하여 해결할 수 있다는 설명이 있으나 시도해보지는 않았다. 왜냐하면 이 문제는 시프트 공백이라는 입력을 키보드 드라이버가 받아 먹고는 시너지 쪽으로 넘겨주지 않아서 생기는 문제인 것으로 보였고 만약 이 추측이 맞다면 시너지를 패치해서 될 일이 아닐거라는 생각에서 였다. 즉, 시너지가 입력 이벤트를 받는 우선 순위가 키보드 드라이버 보다 높지 않다면 안되는게 당연한게 아닌가 해서 이다. (이 부분은 검증이 필요하지만 귀찮아서 생략. 어쨌든 문제는 해결될 수 있으니깐...)

이 추측의 연장선상에서 본다면 한영 전환을 키보드 드라이버가 아니라 일반 응용에서 하게 하면 되지 않을까 생각해볼 수 있다. 그러던 중 이 문제와 관련하여 키매냐 게시판에 문의를 해본 결과 이런 좋은 도구가 있다는 것을 알게 되었다. HanManager는 (설치조차 안해도 되는) 간단한 트레이 기반의 응용 프로그램인데 실행을 하면 키보드 드라이버가 무엇이든 간에 시프트 공백으로 한영 전환을 해준다. 그래서, 다시 키보드 드라이버를 Type 1으로 해놓고 HanManager를 실행했더니 데스크탑+윈도/노트북+리눅스 양쪽 모두에서 한영 전환이 자연스럽게 잘 되었다.

아. 성공. 도움을 주신 모든 분들께 감사.




posted by 신묘군
디폴트 설정 파일은 \Program Files\Vim\_vimrc 인데 이 파일은 읽기 전용으로 되어 있어서 수정하기가 불편하다. (게다가 여러 사용자가 공유하는 /* 물론 드문 경우지만 */ 경우라면 더더욱 고치기가 그렇다.) 그럴 때는 당연히 각 개인 사용자별 설정을 따로 만들어 사용해야 한다. 유닉스/리눅스 환경에서는 사용자의 홈 디렉토리에 있는 .vimrc를 참조하는데 윈도에서도 마찬가지로 사용자의 홈 디렉토리에 있는 _vimrc 파일을 참조한다. 그럼 사용자의 홈 디렉토리는 어디인가? 이는 gVim 안에서 확인 가능하다.
:echo $HOME
이렇게 하면 사용자의 홈 디렉토리를 알려준다. 대개는 (항상?) "내 문서", "내 사진" 등의 폴더가 자동으로 생성되어 있는 그 디렉토리가 홈 디렉토리이다. 여기에 _vimrc 라는 이름의 파일을 만들고 그 안에 원하는 설정값을 넣어주면 된다. 구식 프로그래머라면 이런 설정이 맘에 들 듯. ^^
syntax on
colorscheme darkblue
set guifont=Lucida_Console:h12:cDEFAULT
Lucidia Console 도 좋지한 한글이 맘에 안든다면 대신 "나눔고딕코딩"을 추천한다.


posted by 신묘군
잡스럽게 얘기한다 2009.11.20 15:47

혹시 못 보신 분들이 있으면 꼭 보세요. 참 좋은 (그림도 좋고 내용도 좋고) 다큐멘터리입니다. 유튜브에서 보시거나 다운로드 가능합니다. ==> 링크는 여기 <==

유튜브에서 다운로드 가능한 자연 다큐멘터리 HOME 2009 의 한글 자막입니다. 유튜브에서 HD 화질로 다운로드 받아서 시중에 돌아다니는 한글 자막으로 보았더니 짝이 맞지 않더군요. DVD에서 추출한 영상에 맞춰있는 모양입니다. 그래서 유뷰브용 영문 자막과 시중의 한글 자막을 활용해서 새로 만든 자막입니다.
posted by 신묘군
몇 가지 방법이 있다는데 이런 식으로 할 수 있다.

BEGIN{
    i1 = 0; # 첫째 파일의 line index
    i2 = 0; # 둘째 파일의 line index
}
FILENAME==ARGV[1] {data1[i1]=$0; i1++; next} # 파일을 읽어서 배열에 저장
FILENAME==ARGV[2] {data2[i2]=$0; i2++; next} # 두번째 파일도
END{
    # 이제 파일을 갖고 논다
    j2 = 0;
    for(j1 = 0; j1 < i1; j1++) { # 첫째 파일의 모든 줄에 대하여 루프를 돈다
        print data1[j1];  # 그 내용을 인쇄
        if( 어떤 조건 ) continue; # 조건에 따라 건너 뛴다.
        for(; j2 < i2; j2++) { # 둘째 파일을 갖고 뭔가를 한다.
            print data2[j2]; # 둘째 파일의 내용을 인쇄하고 싶다면..
        }
    }
}
물론 실행은 이런 식으로 하면 된다.
awk -f 위의_스크립트_파일 첫째파일 둘째파일 > 결과파일


posted by 신묘군
./old 디렉토리 아래에 있는 모든 파일을 하나씩 읽어서 내용을 적절히 바꿔치기 한 다음 그 내용을 현재 디렉토리에 저장하되 파일 이름은 같게 하고 싶다면 다음과 같이 한다.
for x in old/*; do sed s/이전내용1/새내용/ $x | sed s/이전내용2/새내용2/ > `basename $x`; done



posted by 신묘군
제목은 낚시^^ 꼭 우분투에만 해당되는 것도 아니고 모든 설정을 원상복구하는 것은 아니지만 어쨌든 컴피즈(compiz) 설정을 원상 복구하려면
gconftool-2 --recursive-unset -a /apps/compiz
라고 하면 된다.
posted by 신묘군