'기술을 얘기한다'에 해당되는 글 67건

  1. 2013.02.16 :: 간략한 유닉스의 초기 역사
  2. 2012.11.30 :: 과학에 대한 오해 (진화론에 대한 십자군의 공격에 부쳐)
  3. 2012.11.30 :: DNS 서버가 느리다면 방화벽을 의심하세요
  4. 2012.05.02 :: MSDN 과 TechNet 은 완전 다른 것입니다
  5. 2011.10.27 :: 오픈 소스와 정부 2.0
  6. 2011.09.27 :: 커스터마이제이션이라는 악마
  7. 2011.01.11 :: 우분투 리눅스에서 USB 키보드에 달린 터치패드를 disable 하고 싶을 때 (2)
  8. 2010.11.04 :: 즉흥적 컴퓨팅
  9. 2010.11.04 :: 상황인지 컴퓨팅의 근본 문제
  10. 2010.08.18 :: 컴퓨터와 공간의 진화
  11. 2010.08.18 :: 유비쿼터스 컴퓨팅과 사람
  12. 2010.03.05 :: 키보드 공유와 키보드 매핑 (Synergy+KeyTweak+KeyLock) (2)
  13. 2009.12.28 :: 우분투에서 듀얼 화면에서 시너지 쓰기
  14. 2009.12.03 :: Synergy(시너지)와 Shift-Space로 한영 전환하기
  15. 2009.07.08 :: 티맥스 OS ... 방향이 이게 아닌데 ...
  16. 2009.06.10 :: 64bit 우분투 리눅스 환경에서 이클립스로 자바 Midlet 개발환경 설정하기
  17. 2009.03.25 :: 우분투에서도 T-Login 된다 (1)
  18. 2009.03.12 :: SPH-M465x 초기 셋업 (3)
  19. 2009.03.03 :: Thinkpad에서 우분투를 쓰는데 화면 밝기 조절이 안될 때
  20. 2009.02.18 :: ThinkPad로 우분트를 쓸 때 배터리 수명을 늘이는 방법
  21. 2009.02.02 :: 구글 캘린더와 PDA 일정 프로그램의 묘한 디폴트 차이 (1)
  22. 2008.12.22 :: Doxygen으로 한글 코멘트를 RTF로 출력하기
  23. 2008.12.02 :: Ubuntu에서 캡스락이 깜빡일 때
  24. 2008.11.25 :: 우분투에서 PSP용 비디오 변환 하기 (8)
  25. 2008.11.12 :: Ubuntu에서 USB 메모리가 바보짓을 할 때
  26. 2008.11.03 :: 우분투 8.10 + X61 환경에서 Fn+F7로 듀얼 스크린 제대로 쓰기
  27. 2008.11.03 :: 가상 머신과 충돌을 일으키는 키보드 보안 프로그램 해결책 (2)
  28. 2008.11.01 :: 리눅스에서 윈도 모바일용 응용 개발하기(가 아니라 개발 환경만 꾸며보기) (2)
  29. 2008.10.24 :: VirtualBox 에서 인터넷 뱅킹 / 카드 결제하면 죽어버리는 현상 (7)
  30. 2008.10.22 :: 우분투의 보수적인 팬 속도 관리
기술을 얘기한다 2013.02.16 19:34

아래의 내용은 책(Practical Unix & Internet Security)에서 유닉스 역사 관련 부분만 발췌하여 대충 번역한 것이다. -- 고양우

유닉스의 뿌리는 1960년대 중반으로 거슬러 올라간다. 이때 AT&T(American Telephone and Telegraph), 하니웰, 제네럴 일렉트릭, MIT는 정보 기기를 개발하는 대규모 프로젝트를 시작한다. 이 프로젝트의 이름은 멀틱스(MULTICS, Multiplexed Information and Computing Service)였는데 국방성의 아르파(ARPA, Advanced Research Projects Agency)로부터 대규모 지원을 받았으며 연구는 대부분 MIT에서 이뤄졌다.

멀틱스는 고속 프로세서, 기억장치, 통신 장치를 (레고 블록처럼 – 고양우) 일정 단위로 조립할 수 있는 시스템이었다. 따라서, 컴퓨터의 일부분만 수리를 위하여 끌 수 있고 일년 내내 24시간 계속 운영할 수 있으며 더 많은 단위를 덧붙여서 성능을 향상 시킬 수도 있도록 하는 것이 목표였다. 요즘 보기론 별 것 아닐 수도 있겠지만 당시로서는 그런 기능이 없었다.

멀틱스는 군대 보안을 고려해서 설계가 되었다. 멀틱스는 외부 공격을 버텨낼 뿐만 아니라 같은 시스템을 사용자들끼리도 서로의 안전을 확보할 수 있도록 설계되었다. 예를 들어, 다단계 보안 기능을 구현했는데 요즘의 컴퓨터 시스템에서의 보안 수준도 거의 대부분 이에 미치지 못한다.

1969년 멀틱스는 일정에 많이 뒤쳐져 있었다. 게다가 MIT와는 한참 먼 뉴저지에 연구소를 두고 있는 AT&T는 벌써 프로젝트에서 빠져나갈 생각이었다. 

그 해에 멀틱스 프로젝트에 참여했는 AT&T의 연구자인 켄 톰슨은 멀틱스 아이디어를 혼자서 더 파볼 생각으로 쓰지 않던 PDP-7 기계 하나를 붙들고 있었다. 여기에 멀틱스 연구를 했던 데니스 리치가 참여하고 피터 뉴먼이 유닉스라고 이름을 붙여주었다. 이 이름은 멀틱스의 멀티(여럿)을 유니(하나)로 바꾼 말장난 이기도 하지만 한편으로는 아직도 포기 못하고 계속 연구를 이어나가는 (이후로도 연구는 10년 넘게 이어졌다) MIT에 대한 반발이기도 했다. 멀틱스가 여러 가지를 다 잘하려고 하는 것이었다면 유닉스는 한 가지 즉 프로그램을 돌리는 것만 잘 하자는 것이었다. 그리고 보안 기능은 다 버렸다.

이렇게 범위를 좁혔기 때문에 유닉스는 멀틱스보다 몇 달 앞서서 가동되기 시작했고 1년도 안되어 DEC사의 새 기계인 PDP-11에 돌아가도록 수정할 수 있었다.

유닉스에는 도구(tool)이라고 불리는 한 가지 기능만 하는 여러 프로그램이 있는데 이것을 조합해서 복잡한 일을 하게 만들 수 있었다. 또한 소스 코드가 제공되었기 때문에 수많은 개발자들이 기존의 도구를 개선하거나 추가할 수 있었다.

1973년에 데니스 리치가 새로 만든 프로그래밍 언어인 C를 이용하여 켄 톰슨은 유닉스의 거의 대부분을 새로 작성하였다. C 언어로 짠 프로그램은 (다른 고급 언어와 마찬가지로) 다른 컴퓨터로 옮겨서 컴파일만 다시 하면 동작하였다. 하지만, 입출력 부분은 컴퓨터 마다 운영 체제 마다 달랐기 때문에 완전히 똑같이 동작하지는 않았는데 이런 차이를 해결하기 위하여 마이크 레스크는 “이식가능한 입출력 라이브러리”(portable I/O library)를 개발하였다. 물론 모든 문제가 해결되지는 않았다. 1977년에 입출력 라이브러리를 다른 기계 다른 운영체제에 이식하는 것 보다는 유닉스를 통째로 이식하는 것이 더 쉽다는 것을 깨닫고 유닉스를 인터데이터 (Interdata) 8/32 기계에 이식하였고 1978년에는 DEC사에서 나온 새 기계인 VAX 미니컴퓨터에도 이식하였다. 유닉스는 점점 유명해지고 있었고 컴퓨터 회사들도 유닉스를 마케팅에 활용하였다.

법적인 제약 때문에 AT&T는 컴퓨터 소프트웨어를 광고, 마케팅, 지원할 수 없었지만 유닉스에 대한 수요는 늘어만 갔다. 1977년에 500개 이상의 사이트에서 유닉스를 운영하였고 그 중 125개는 대학이었다. 미국 외의 10개국의 나라에서도 유닉스를 사용하였다.

당시 컴퓨터는 물리적으로 통제된 환경에서 (즉, 특별히 허가된 사람들만 들어갈 수 있는 전산실 안에서 – 고양우) 사용하는 것이므로 시스템 보안이 별로 중요하지 않았다. (어차피 서로 다 아는 전문가들 끼리 쓰는 공유하는 시스템이니까. – 고양우) 심지어는 루트 (즉, 관리자) 권한에 비밀번호를 거는 것 조차 성가신 일이라고 생각할 정도였다.

UC 버클리 대학은 다른 학교들과 마찬가지로 400달러를 주고 운영체제 소스코드가 다 들어있는 테이프를 샀다. 이 학교의 대학원생이던 빌 조이와 척 헤일리는 단지 유닉스를 사용하는 것을 넘어서 많은 부분을 고치기 시작했다. 1978년에 빌 조이는 각종 프로그램과 수정된 유닉스 시스템을 담은 BSD(Berkeley Software Distribution) 30 카피를 우편 요금(아직 인터넷이 없던 시대니까! – 고양우) 포함 50달러에 팔았다.

그 후 6년간 ARPA의 지원에 힘입어 BSD 유닉스는 AT&T의 원본 보다 훨씬 뛰어난 운영체제가 되었다. 여러 장점이 있지만 제일 결정적인 것은 BSD 4.2에 포함된 랜(LAN, local area network) 기능이었다. 그래서 버클리 버전의 유닉스는 연구기관과 대학에서 매우 유명한 운영체제가 되었다.

신고
posted by 신묘군
기술을 얘기한다 2012.11.30 13:34

(글쓴이의 주: 오래 전에 페이스북에 올렸던 글 재탕)

오늘 뉴스를 보니 교과서에 실린 진화론 관련 내용의 상당 부분이 삭제된단다. 혹시 십자군의 십자포화에 시달려서 진화론을 과학 교과서가 포기하는 것인가 화들짝 놀라 기사를 살펴보니 이미 학계에서는 폐기된 이론(발생반복설)이나 부적절한 예시로 판명난 것들(말의 진화 계통)이 여전히 교과서에 실려 있어 이들을 삭제하기로 한 것이다. 과학계가 했어야 할 자기 정화를 외부의 힘에 떠밀려 하는 꼴은 부끄러운 일이다. 

십자군은 이러한 변화에 고무되어 진화론을 완전히 교과서에서 빼내기 위한 작업을 계속할 것이란다. 하지만 이번 사태를 두고 진화론이 틀렸다거나 하는 식의 주장은 과학에 대한 전적인 무지에서 나온 것이다. 과학도 다른 모든 학문과 마찬자기로 진리를

 추구한다. 하지만 과학이 내세우는 이론 그 자체는 진리가 아니다. 어떤 과학자라도 그가 제정신을 가진 과학자라면 어떤 이론을 진리라고는 얘기하지 않는다.

간단히 말해 과학자는 모든 것을 회의하는데서 출발해서 끊임 없이 회의하는 사람들이다. 과학은 이론을 믿는 것이 아니라는 점에서 종교와 완전히 다른 태도를 취한다. 근거없이 일단 어떤 이론을 믿고 계속 연구를 해 나가는 것(이런 연구의 결과물 중에서 가장 방대한 것은 바티칸의 교황청에 가면 볼 수 있는데 주제는 대략 "언제 포도주는 예수의 피로 바뀌는가?" 또는 "언제 빵이 예수의 살로 바뀌는가?" 등이다)과 모든 이론을 끊임없이 회의하면서 드러난 증거를 정합적으로 설명할 수 있는 가설을 세우고 이를 검증해가는 과정 중에서 어느 것이 올바르다거나 어느 것이 진리에 먼저 도달한다고 얘기할 수는 없지만 역사적으로 보면 대략 후자가 더 유리한 듯 하며 후자의 방법을 따르는 것이 과학이다.

일반인들에게는 매우 당혹스럽겠지만 실제 과학자들의 세계에서는 결코 양립할 수 없는 여러 이론이 공존하는 것이 일상적이며 심지어는 우리가 이미 실험적으로 얻은 증거가 일부는 어떤 이론에 또 다른 일부는 다른 이론에 맞을 뿐 모든 증거를 다 만족하는 이론은 없는 경우가 대부분이다. 다시 말해서 어떤 이론을 주장하는 과학자도 스스로 그 이론으로 설명할 수 없는 증거가 있다는 것을 알고 있다. 그래서 자기가 세운 이론 조차도 계속 회의하면서 뜯어 고쳐가는 것 그것이 과학이 되는 것이다. (과학에서 한 시대를 풍미하는 정통 이론이 어떻게 생성되고 교체되어 가는 지에 대하여는 토마스 쿤이 "과학혁명의 구조"라는 몹시 재미없는 책에서 충분히 설명했으니 읽어 보시길.)

그렇다면 완벽하지도 않은 이론을 왜 가르치나? 왜냐하면 그것이 진리로 향해 나아가는데 도움이 되기 때문이다. 예를 들어 생각을 해보자. 아인슈타인 덕분에 우리는 뉴턴의 물리학이 갖고 있던 문제를 많이 해결했다. 하지만, 여전히 물리 교과서는 뉴턴의 역학으로부터 시작한다. 왜냐하면 뉴턴의 역학을 이해하는 것이 아인슈타인을 이해하는데 도움이 되기 때문이다. 질량, 가속도, 차원 등에 대한 기본 개념도 없는 사람에게 양자 역학에 끈 이론부터 가르치는 것이 가당키나 하겠는가? 게다가 우리가 일상에서 겪는 대다수의 역학적 현상은 뉴턴의 물리학으로 충분하다. 심지어는 당신이 우주선을 쏴 올린다고 해도 뉴턴으로 충분하다. 공부하다보면 막히는 문장이 있어도 일단은 넘어가는 것이 좋은 전략인 경우가 많다. 왜냐하면 뒤를 읽다보면 앞의 얘기가 이해가 되기 때문이다. 그렇다고 뒤부터 읽으면? 뒤도 이해가 안되고 앞도 이해가 안된다. 즉, 과학적 방법론에서 진리로 나아가는 과정은 진리를 구성하는 계단을 하나 하나 밟아가는 과정이라기 보다는 턱 없는 이론 --> 덜 턱 없는 이론 --> 그럴싸한 이론 --> 제법 그럴싸한 이론 --> ... 과 같이 그 자체는 진리가 아니지만 진리에 좀 더 가까운 이론을 따라 옮겨가는 과정인 것이다.

그렇다면 어차피 진화론도 완벽한 진리가 아니고 지적설계론도 완벽한 진리는 아니니 둘 다 교과서에 나란히 실어야 한다는 주장은 어떻게 볼 것인가? 이런 주장이 말이 안된다는 것은 앞의 설명으로 충분하지만 혹시 이해가 안되는 사람들을 위해서 굳이 덧붙인다면 이렇다. 십자군의 눈에는 세상이 믿는 자와 믿지 않는 자로 딱 떨어지게 나눠지겠지만 과학의 눈으로 보자면 세상의 이론은 알려진 증거를 전혀 설명하지 못하는 엉터리 이론으로부터 10%를 설명하는 이론, 50%를 설명하는 이론, 90%를 설명하는 이론이 있는 것이다. 이럴 때 우리 교과서에는 뭘 실어야 할 것인가? 당연히 90%를 설명하는 이론을 싣는 것이다. 세상에 나쁜 성분이 조금이라도 없는 음식은 없으니 정크 푸드나 엄마표 한식이나 아무거나 먹자? 난 싫거든?

신고
posted by 신묘군
기술을 얘기한다 2012.11.30 13:15

DNS 조회가 가끔 실패하거나 답이 늦게 (4초 정도) 오는 경우가 있어서 한참을 뒤졌더니 윈도 서버에 탑재된 DNS 서버는 응답의 크기가 512 바이트가 넘을 때에도 UDP 로 보낸단다. 그런데 상당수의 방화벽에서는 이렇게 큰 DNS UDP 패킷을 허용하지 않도록 설정되어 있다. 방화벽에서 응답을 버리니 질의한 쪽에서는 당연히 타임아웃이 되고 재시도 하고 TCP 로 재시도 하고 하느라 시간을 허비하거나 실패하게 되는 것이었다.

이 문제를 해결하기 위해서 구글을 뒤지는데 생각보다 시간이 많이 걸렸다 (한 시간 정도). 그 이유는 구글에서 검색할 때 키워드로 DNS 조회가 "실패"(fail) 하거나 "느리다"(slow) 로 검색했지만 막상 MS 측의 해당 문서는 "성공적이지 못하다"(unsuccessful)라고 설명하고 있기 때문이다. (제목 뿐 아니라 심지어는 내용에서도 그렇게 쓰고 있다.)


그래 말이야 맞는 말이지. 하지만 그렇게 쓰면 안되는거라구.

어쨌든 문서에서는 DNS 서버의 옵션을 조정해서 큰 DNS UDP 패킷 를 날리지 않게 하거나 방화벽 설정을 바꿔서 큰 DNS UDP 패킷이 잘 통과하게 하면 된단다.

http://support.microsoft.com/kb/832223/en-us

신고
posted by 신묘군
기술을 얘기한다 2012.05.02 11:47

MSDN이나 TechNet 이나 모두 여러 마이크로소프트 제품과 정보를 개별 제품을 구매하는 것보다는 충분히 싼 가격에 쓸 수 있다는 점에서는 같습니다. 그래서 마구마구 헷갈리는데... 그래서 구글 검색 창에다가 

msdn subscription vs technet subscription

라고 입력하면 엄청나게 많은 자료가 쏟아지는데 그 중 맨 위의 링크인 Comparing MSDN and TechNet Subscriptions 를 살펴보면 두 가지가 거의 상반된 것임을 알 수 있습니다. 단적으로 얘기해서 MSDN 은 개발자용이고 TechNet 은 운영자용이라는 것입니다. (물론 우리나라 대부분의 환경에서 이들 둘은 구분되어 있지 않지만...ㅠㅠ) 그럼 이런 차이는 어디서 오는거냐? 그래서 꼼꼼이 살펴보았더니 (아래의 그림을 보세요)

TechNet 을 소프트웨어 개발의 관련된 테스트 용으로는 쓸 수 없다는 것입니다. 즉, TechNet 은 여러 마이크로소프트 제품을 설치해서 이렇게 저렇게 세팅해보고 우리가 원하는 기능이 잘 되나 안되나 보는 용도로 쓰는 것이지 그렇게 설치된 상태에서 자기 회사에서 개발한 프로그램을 올려서 테스트 하면 안된다는 것입니다.


신고
posted by 신묘군
기술을 얘기한다 2011.10.27 11:30

(필자 주: 1년쯤 전에 책에 넣으려고 작성했던 초고를 재활용한 포스트. 티스토리의 MS Word API가 각주를 처리하지 않아서 각주를 할 수 없이 본문에 끼워 넣고 회색으로 칠했다. 그 바람에 읽기가 많이 불편해져 버렸다. ㅠㅠ)

이 장에서는 오픈 소스가 소프트웨어 개발 방식에 가져다 준 변화를 살펴봄으로써 이러한 변화가 정부 2.0에 시사하는 바를 검토한다. 그리고 오픈 소스를 정부 2.0의 구현에 활용하는 방안과 그에 따른 이슈를 살펴보고 한국의 소프트웨어 개발 현실에 비춰 정부 2.0에 거는 기대를 제시한다.

1. 원리로서의 오픈 소스와 정부 2.0에 주는 시사점

오픈 소스는 단순히 소프트웨어를 개발하고 공급하는 하나의 방식이 아니라 인터넷 시대의 일 처리 방식에 대한 근본적인 성찰을 보여 주었다는 점에서 중요하다. 1990년대 초반 리눅스 운영체제의 등장은 기존의 개발자들 그 중에서도 특히 뛰어난 개발자들에게 큰 충격을 주었다. 왜냐하면 소수의 전문적인 프로그래머가 잘 정의된 설계에 따라 폐쇄적으로 개발하는 것이 당연히 가장 효과적인 개발 방법이라고 생각했는데 리눅스 개발을 이끈 리누스 토발즈는 인터넷으로 연결된 수많은 사용자들을 공동 개발자로 활용하는 떠들썩하고 정신 사나운 방식으로 개발을 하면서도 운영체제와 같은 무척 규모가 크고 까다로운 소프트웨어를 성공적으로 개발해 내었기 때문이다. 게다가, 리눅스는 엄청나게 빠른 속도로 개선이 되고 있었다. (물론, 지금도 진화는 계속되고 있다.) 한마디로 소프트웨어 개발 방법론에 있어서 코페르니쿠스적 전환이 이루어 진 셈이다. 이렇게 사용자의 참여를 기반으로 개발을 진행하는 소프트웨어를 오픈 소스 소프트웨어라고 하며 이 개발 방식이 갖는 특징은 다음과 같다.

  1. 사용자가 직접 참여하는 개발: 개발하고 있는 소프트웨어의 원시 코드를 공개하고 사용자들이 문제를 찾아내고 추가해야 할 기능을 (심지어는 추가에 필요한 프로그램 코드까지) 제안하도록 한다. 수많은 사용자들이 참여함으로써 다양한 환경에서 다양한 사용 방법으로 소프트웨어의 기능을 검증하므로 당연히 문제점도 더 빨리 발견하고 더 쉽게 해결한다.
  2. 모두를 만족시키는 하나 대신 소수를 만족시키는 여럿: 오픈 소스 개발에서는 최초의 결과물을 (완성도가 떨어진다고 하더라도) 최대한 빨리 내놓음으로써 그 아이디어에 관심 있는 사용자들을 끌어들이고 사용자들이 내놓는 아이디어나 추가 코드를 곧바로 반영하여 새 버전을 내놓음으로써 참여하는 보람을 느끼게 한다. 하지만, 최신 버전은 기능이 많은 반면 안정적이지 못한 경우가 대부분이어서 더 많은 기능을 원하는 사용자를 위한 최신 버전과 일반 사용자를 위해서는 안정적인 (물론 기능은 적은) 버전을 따로 둔다.
  3. 사용자가 만들어 가는 목표: 개발하려는 소프트웨어가 어떤 모양이 되어야 할 지 최종 목표 지점을 정해 놓고 가는 것이 아니라 사용자의 의견을 계속 수렴하여 개발 방향을 계속 수정한다.[각주: 좀 다른 맥락이긴 하지만, 소프트웨어 개발 방법론 중 하나인 익스트림 프로그래밍의 주창자인 켄트 벡은 소프트웨어 개발을 운전에 비유한 바 있다. "운전은 차를 올바른 길로 가게 하는 게 아니야. 운전이란 계속 주의를 기울이면서 이쪽으로 조금 저쪽으로 조금 바로 잡아가는 거지" (참조: Beck, K. and Andres, C. 2004 Extreme Programming Explained: Embrace Change. Addison-Wesley Professional.)] 이러한 방식은 사용자들로 하여금 자신들의 의견이 반영된다는 참여의 즐거움을 주는 동시에 변덕스런 사용자들의 요구 변화를 지속적으로 따라잡을 수 있다는 장점을 동시에 누리게 된다.

인터넷 또는 웹에서 누구나 정보를 똑같이 그리고 투명하게 접근할 수 있는 틀을 제공하고 이를 기반으로 다수의 참여자들이 자발적으로 참여할 수 있도록 독려하고 그러한 참여 결과를 반영하는 원리를 오픈 소스 개발 방법론이 제시하고 있는 것이다.

그렇다면 소프트웨어 개발자 집단이 발견해 낸 이러한 원리가 유용하다면 정부 또는 가버넌스라는 전혀 다른 영역에서도 비슷하게 적용될 수 있지 않을까? 이 장에서는 오픈 소스 소프트웨어 개발의 원리를 가장 잘 설명하고 있는 에릭 레이먼드의 "성당과 시장"을 정부 2.0의 관점에서 검토함으로써 오픈 소스 라는 원리가 새로운 정부의 원리에 원용될 수 있음을 보여 주고자 한다.[각주: 원문은 http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ 에서 볼 수 있으며 한국어 번역판은 http://wiki.kldp.org/wiki.php/DocbookSgml/Cathedral-Bazaar-TRANS 에서 볼 수 있다. 이 글의 본문에서 인용한 부분은 모두 한국어 번역판에서 가져왔다.] 이 절의 본문에서 인용된 글은 특별한 표시가 없는 한 "성당과 시장"에서 인용한 것이다.

원리1: 하고 싶은 것을 하게 하라.

"모든 좋은 소프트웨어는 개발자 개인의 가려운 곳을 긁는 것으로부터 시작된다. (중략) 개발자들은 너무나 자주, 단지 돈 때문에 그들이 필요로 하지도 않고 좋아하지도 않는 프로그램을 만들어 내는데 시간을 쓰고 있다. 하지만 리눅스 세계에서는 그렇지 않다 - 아마도 이것이 왜 리눅스 공동체에서 만들어진 소프트웨어들의 평균적이 품질이 그렇게나 좋은지를 설명해 줄 것이다."

너무나도 당연한 얘기지만 사람들은 자기가 하고 싶은 일을 할 때 가장 좋은 결과를 낸다. 정부가 제공하는 서비스는 정부가 그것을 하고 싶어서 제공하는 것이 아니라 납세자에 대한 정부의 의무이기 때문에 하는 것이다. 따라서, 정부가 제공하는 서비스가 시민들의 기대에 부응하지 못하는 것은 어쩌면 피할 수 없는 운명이다. 정말로 그 일을 하고 싶어하는 사람들이 그 일을 할 수 있도록 돕는 것으로 정부의 역할을 바꿔 나가는 것이 필요하다. 시민 스스로 정말로 필요로 한 것을 서비스로 만들어 갈 수 있다면 그 결과는 정부가 제공하는 서비스 보다 당연히 더 좋을 수 밖에 없을 것이다.

원리2: 결과로 평가하라.

"위대한 프로그래머의 중요한 특징 중 하나는 건설적인 게으름이다. 그들은 들인 노력으로가 아니라 결과로 평가 받는다는 것을 알고 있으며"

결과가 아닌 과정으로 평가하면 겉만 번드레한 결과를 낳는다. 과정이 아니라 결과로 평가해야 한다는 것에는 모두가 동의하면서 왜 정부가 제공하는 서비스는 겉만 번드레한 경우가 반복되는가? 그건 과정과 결과에 대한 혼동에서 비롯된다. 도로를 뚫고 강을 정비하고 신청사를 건립하고 웹 포털을 운영하는 것은 정부가 서민에게 제공해야 할 서비스를 달성하기 위한 도구(즉, 과정)에 지나지 않는다. 그런 도구를 통하여 제대로 된 서비스가 제공되었을 때 이를 이용하는 시민들이 결과적으로 만족을 느끼는 것이다. 시장님이 얼마나 많은 돈을 들여서 몇 그루의 가로수를 심었느냐가 아니라 그 가로수가 그저 아스팔트에 세운 초록색 말뚝인지 아니면 도심의 숲과 숲을 연결하는 생태 통로의 역할을 하는 지에 의해 평가되어야 한다. 하지만 우리의 관료제는 결과가 아니라 얼마나 그럴싸한 일을 많이 벌이는지 얼마나 늦게까지 퇴근하지 않고 자리를 지키는지로 평가하곤 한다. 그래서는 가망이 없다.

원리3: 중복을 피하라.

"누군가의 거의 완성된 소스를 찾아보는데 시간을 들이는 것이 (인용자 주: 처음부터 개발하는 것보다) 좋은 결과를 가져다 줄 가능성이 높다."

이건 너무 당연해서 굳이 원리라고 할 것도 없는데 현실 세계에서는 중복이 너무나도 잦다. 모든 지방자치단체가 거의 비슷한 일을 하므로 이를 소프트웨어로 개발하면 결국 비슷한 결과가 나올 수 밖에 없다. 그럼에도 불구하고 모든 지방자치단체들은 경쟁적으로 똑같은 서비스를 제각기 만들어 내고 있다. 이것이 전국의 모든 곳에서 반복되고 있으니 국가 전체로는 상당한 중복 투자가 되고 있는 셈이다.

중복의 문제는 단지 예산의 낭비로만 그치는 것이 아니라 투자의 효용 자체를 위협하고 모든 투자의 결과물을 싸잡아 진부하게 만들어 버린다. 이 글의 맥락과는 약간 다른 예이긴 하지만 이를 제일 잘 보여 주는 것이 모든 지방자치단체가 붕어빵 찍어 내듯 복제 해내는 각종 지역 축제다. 너무 많은 복제가 난립하다 보니 그 어느 것 하나 정체성을 유지할 수 없이 다 똑 같은 난장판이 되고 있다. "자연은 반복하지 않는다".[각주: Elizabeth Cady Stanton, "The Solitude of Self", http://historymatters.gmu.edu/d/5315/] 그냥 자연스럽게 생겨난 지역 축제라면 이렇게 똑 같을 수는 없다. 너무 많은 복제가 존재함으로써 이를 이용하는 시민들은 쉽게 식상하게 되고 이는 그나마 전통이 있고 제대로 준비하는 곳까지도 같이 오명을 뒤집어쓰게 만든다.

원리 4: 시민은 고객이 아니라 동료다.

"적절하게 유도해 준다면 사용자들은 공동개발자가 될 수도 있다. (중략) 사용자들을 공동개발자로 생각하면 코드가 다른 어떤 방법보다도 빠른 속도로 개선되며 효율적으로 디버깅할 수 있다."

정부가 아무리 열심히 한다고 해도 자원이 제한되어 있으므로 제공할 수 있는 서비스의 한계는 뚜렷하다. 이런 한계를 가장 쉽게 그리고 가장 확실히 넘어서는 방법은 시민들의 손을 빌리는 것이다. 시민들이 정부의 서비스에 참여하는 방식은 크게 두 가지로 나뉠 수 있다. 소극적으로는 정부가 이미 제공하고 있는 서비스의 문제점을 찾아내고 개선하는 방안을 제시하는 것으로부터 적극적으로는 새로운 서비스를 제안하고 심지어는 직접 실현하는 것까지 모두 가능하다. 어차피 한정된 자원으로 일을 할 수 밖에 없는 정부로서는 시민들의 손을 빌려 서비스를 개선하고 확장해 나가는 것이 올바른 선택이라 할 수 있다. 시민들의 손을 빌린다는 것은 단지 정부 서비스에 참여하는 사람의 수를 늘인다는 양적인 측면뿐 만 아니라 질적인 측면에서의 변화(아래의 원리 6 참조)를 포함한다. 하지만 시민의 참여를 끌어내고 유지하는 것(아래의 원리 5 참조) 그리고 이를 위하여 정부가 갖추어야 할 바람직한 특성(아래의 원리 8과 9 참조)에 대한 고려도 필요하다.

원리 5: 사람들의 참여를 지속시키는 비밀은 전망과 보답이다.

"개발에 참여함으로써 자기만족을 얻으리라는 전망에 자극 받았고, 그들이 하는 일이 계속해서 (어떤 때는 날마다) 향상되고 있다는 것이 보답이 되었다."

사람은 변덕스럽다. 정부 2.0의 비전이 아무리 거창하고 아무리 당위라고 하더라도 시민들이 자신의 밥 벌이가 아닌 일에 성의를 다하여 지속적으로 매달리게 하는 것은 그저 이루어 지는 것은 아니다. 이는 "왜 오픈 인가?"라는 근본적인 질문에 맞닿아 있다. 눈에서 멀어 지면 마음마저 멀어 진다고 하지 않는가? 공개한다는 것은 사람들의 눈에 보이게 하는 것이며 그것도 그냥 겉 껍데기가 아니라 고갱이를 볼 수 있게 하는 것이다. 자기가 볼 수 있는 것이므로 관심이 생기고[각주: 우리는 볼 수 있는 것을 탐한다. (We begin by coveting what we see every day.) 영화 "양들의 침묵" 중 한니발 렉터의 대사.] 잘 되길 바라게 되는 것이고 잘 될 것이라는 전망을 품게 되는 것이다. 그러고 계속 수정된 내용이 공개됨으로써 관심을 유지할 수 있게 되고 내 의견이 (또는 나는 아니지만 나 같은 다른 시민들의 의견이) 반영되고 있다는 뿌듯함을 느끼게 된다. 시늉으로만 구색으로만 공개하고 공개된 데이터가 제대로 관리되지 않는다면 정부 2.0은 전자정부의 성과와 한계를 답습하게 될 것이다.

원리 6: 꼭 같은 것보다 다 다른 것이 더 좋다.[각주: 윤구병의 책 제목에서 무단으로 베낌]

"모든 문제는 누군가에게는 간단할 것이다"

다양성의 중요성은 많은 분야에서 무척 다양한 의미로 제기되지만 여기서도 예외는 아니다. 오픈 소스 소프트웨어 개발에서는 다양성이 특히 문제(즉, 버그)의 발견과 해결에 큰 도움을 준다. 개발자가 아무리 잘 설계해서 프로그램을 만든다고 하더라도 생각지 못했던 측면은 있을 수 밖에 없고 이는 생각지 않은 곳에서 생각지 않은 문제를 일으킨다.[각주: 아무리 완벽한 프로그램에도 버그는 있는 법. (Even a perfect program still has bugs.) (출처: 프로그래밍의 도(The Tao of Programming), http://www.canonical.org/~kragen/tao-of-programming.html ) ] 하지만, 개발자가 테스트하는 환경에서 개발자가 생각해 낸 방식으로만 테스트를 하여서는 그런 문제가 있다는 것을 알아내기는 거의 불가능하다. 수많은 사용자가 각기 다른 환경에서 각기 다른 목적으로 각기 다른 방식으로 프로그램을 쓰는 것 자체가 개발자로서는 흉내조차 내기 힘든 테스트를 해주는 것이다. 또한, 문제를 어떻게든 알아냈다고 하더라도 그 문제의 해결책을 개발자가 찾아내지 못했을 때 다수의 사용자 중 누군가가 쉽게 찾아낼 수 있다. 왜냐하면 다수의 사용자들 중에는 개발자 보다 더 뛰어난 개발자가 있을 수도 있겠지만 그렇지 않더라도 다른 관점에서 문제를 바라보았을 때 의외로 쉽게 문제가 풀릴 수 있기 때문이다.

원리 7: 서비스의 핵심은 데이터다.

"자료구조를 훌륭하게 만들고 코드를 멍청하게 만드는 것이 그 반대의 경우보다 훨씬 잘 작동한다."

아주 간단하게 정의하자면 컴퓨터란 주어진 데이터를 계산한 뒤 결과 데이터를 내놓는 물건이다. 결국 데이터는 컴퓨터 바깥(즉, 사람)과 컴퓨터 안(즉, 프로그램)을 매개한다. 사람은 자신이 원하는 데이터를 얻기 위해서 컴퓨터를 쓰는 것이다. 그 데이터를 얻는 방법이 얼마나 빠른지, 얼마나 편리한지 하는 것은 부수적인 것이다.[각주: 여기서 부수적이라는 것은 그것이 안 중요하거나 덜 중요하다는 뜻이 아니라 그것이 도구의 효율 문제이지 목적은 아니라는 뜻이다.] 따라서 좋은 서비스란 제공할 데이터를 잘 정의하는 것에서 출발해야 한다. 하지만, 많은 서비스가 데이터를 처리하는 틀만 만들어 놓고 막상 데이터를 제대로 채우지 않는 경우가 많다.[각주: 관리가 전혀 안 되는 수많은 게시판을 보라. 몇 년 째 새 데이터가 올라오지 않는 (또는 심지어는 텅텅 비어있는) 자료실은 여러 사이트에서 쉽게 발견되지 않는가?] 정부가 하는 일이 정리된 데이터로서 투명하게 우리의 전자정부를 통해서 공개된다면 전자정부 지수 세계 1위인 동시에 부패지수 세계 39위인 부조화를 해결할 수 있을 것이다.[각주: 김유승, "시민과 쌍방향 소통 '전자정부 2.0'은 필수과목", http://www.hani.co.kr/arti/SERIES/255/435362.html ]

데이터를 중심에 놓고 생각하는 것이 주는 장점 중 하나는 그 데이터를 활용하는 방법을 미리 제약하지 않는다는데 있다. 같은 데이터도 활용하는 사람에 따라 다른 의미로 활용될 수 있다.[각주: 미국의 이라크 침공이 임박했는지 아닌지 알아내는 간단한 방법은? 펜타곤으로 배달되는 피자의 개수를 세는 것이다. 중요한 결정이 임박하면 국방성 직원들은 생각지 않게 자리를 지키고 야근을 해야 하니 자연스레 피자를 많이 배달시킬 것이다. (이 일화는 브루스 슈나이어의 "디지털 보안의 비밀과 거짓말"에서 인용하였음.) ] 거꾸로 그 데이터를 이용해서 어떤 서비스를 어떤 식으로 구현하겠다는 것을 먼저 정해 버리면 그 데이터가 갖고 있는 잠재력을 사장시키게 되는 것이다.

원리 8: 마음부터 열어라.

"좋은 아이디어를 생각해내는 것 다음으로 중요한 일은 사용자들이 알려준 좋은 아이디어를 깨닫는 것이다. 때로는 이편이 더 나을 수도 있다."

원시 코드이건 데이터건 서비스건 뭔가를 연다고 했을 때 가장 먼저 그리고 가장 확실히 열어야 하는 것은 여는 사람의 마음이다. 앞에서 살펴본 바와 같이 열어 놓음으로써 발생하는 이득은 외부의 사람들을 내 편으로 끌어들여 그들의 능력을 활용하는 것으로부터 온다. 그런데 만약 내가 그들의 얘기로부터 뭔가 얻어내려는 마음을 갖고 있지 않다면 열어 놓은 것은 아무 소득이 없을 뿐만 오히려 도와 주려고 온 사람들을 적으로 만드는 꼴이 된다.

이렇게 간단한 원리가 왜 실현하기는 어려울까? 그것은 여는 사람이 갖고 있는 우월감 때문이다. "이건 내가 만들었으니까 또는 이건 내 일이니까 내가 제일 잘 알아" 라는 생각을 누구나 하기 마련이다. 하지만 앞의 원리 6에서 지적한 바와 같이 다양한 대중이 갖는 힘이라는 것은 절대 무시할 수 없다.

설령 우월감을 극복한다고 해도 다 되는 것은 아니다. 민감성을 가져야 한다. 외부 참여자들은 대개 이 분야 전문가도 아니고 온 종일 이 일에 매달려 있는 사람들도 아니다. 따라서 그들의 의견은 대개 전문가가 이해하기 힘든 논리에 모호한 언사로 제시된다. 이런 의견 더미 속에서 번뜩이는 아이디어를 찾아내는 것은 열린 마음에 민감성이 결합되었을 때만 가능하다.

원리 9: 최고의 기술은 소통이다.

"프로젝트를 조정하거나 이끄는 사람은 사람들과 잘 의사 소통하는 기술을 가지고 있어야 한다."

앞에서 언급한 열린 마음은 소통을 위한 가장 중요한 자질이다. 하지만 소통이 마음으로만 이루어지지는 않는다. 당연히 소통을 가능하게 하는 도구도 있어야 한다. 하지만, 마음과 도구만으로 소통은 이루어지지 않는다. 왜냐하면 소통은 "사회적 행동이라 그런 것이다. 진정한 소통은 문제의식의 사회적 공유를 전제"로 한다.[각주: 백승종, "소통의 의미", http://www.hani.co.kr/arti/SERIES/202/395531.html ] 개발을 이끌고 나가는 자와 옆에서 참여하는 자 또는 서비스를 제공하는 자와 제공받는 자는 그들이 서 있는 토대가 다르므로 의식의 공유가 어려울 수 밖에 없다. 이를 극복하지 않는 한 (또는 최소한 참여하는 사람들이 문제를 공유하고 있다는 착각을 계속 갖도록 할 수 없다면) 소통은 한계를 겪을 수 밖에 없다.

2. 정부 2.0을 실현하는 도구로서의 오픈 소스 소프트웨어

정부 2.0을 구현하는데 사용하는 도구로서 오픈 소스 소프트웨어가 어떤 역할을 할 수 있는 지를 살펴보자.

오픈 소스 소프트웨어는 정부 2.0을 지탱하는 뼈대다. 정부 2.0은 웹 2.0을 구현의 기반으로 삼고 있고 웹과 웹을 떠받치고 있는 인터넷의 근간에 오픈 소스 소프트웨어가 자리잡고 있음을 고려할 때 오픈 소스 소프트웨어는 정부 2.0을 지탱하는 뼈대라고 불러도 손색이 없을 것이다. 예를 들어, 어떤 사용자가 "모질라 파이어폭스" 웹 브라우저의 주소 창에 어떤 블로그의 주소를 입력하면 이 주소가 실제 인터넷 주소로 어떻게 연결되는지 도메인 이름 서버인 "BIND"에게 물어 봐서 알아내고 그 인터넷 주소에 접속을 하면 "리눅스" 운영체제를 탑재한 "아파치" 웹 서버가 접속을 받아서 블로그용 콘텐트 관리 시스템인 "워드프레스"를 이용해서 블로그 페이지를 보여 준다. 이 문장에서 겹 따옴표 안에 들어 있는 것은 모두 오픈 소스 소프트웨어이다. 즉, 이미 우리는 오픈 소스 소프트웨어로 구성된 웹 세상에 살고 있는 셈이다.

정확한 것은 더 조사가 필요하겠지만 다른 분야보다 유달리 인터넷 또는 웹 분야에서 오픈 소스 소프트웨어가 많이 이용되는 것으로 추측된다. 이는 아마도 인터넷을 키워 나가기 위해서는 필요한 도구를 큰 비용 없이 쉽게 구할 수 있어야 했으므로 인터넷 관련 도구는 오픈 소스 정책을 쓰는 경우가 많았고 또한 오픈 소스 소프트웨어 개발 자체가 인터넷이라는 강력하고 전 지구적인 의사 소통을 전제로 한 것이었으므로 결국 인터넷 또는 웹과 관련한 개발자들이 곧 (초창기) 오픈 소스 소프트웨어 개발자들과 상당 부분 겹칠 수 밖에 없었기 때문이라고 보인다.

그리고 오픈 소스 소프트웨어는 라이선스 비용이 없으므로 정부 2.0을 구축하는데 드는 비용을 줄일 수 있다. 하지만 소프트웨어가 공짜라는 것이 엄청난 비용의 절감으로 곧바로 연결되는 것은 아니다.

"사람들이 오픈 소스 소프트웨어를 볼 때 겉으로 드러나는 라이선스 비용이 없다는 점을 지적하지만 비용은 발생할 수 밖에 없다. 적절한 개발 전략을 정하는 것, 스태프에 필요한 기술을 갖춘 사람들이 있도록 만드는 것, 만든 시스템을 유지하고 관리할 수 있도록 하는 것 등의 노력이 필요하다. '어떻게 구현할까'에 제일 큰 노력이 든다. 결과적으로 기존의 독점적 솔루션에 비하여 60~80% 정도의 비용이 절감된다고 본다." [각주: Bryan Sivak 의 인터뷰 비디오, "Cost is only part of the Gov 2.0 open source story - O'Reilly Radar", http://radar.oreilly.com/2010/08/cost-savings-is-only-part-of-t.html ]

여기서 제일 중요한 점은 인력과 관련된 비용이다. 인력과 관련된 비용은 최소한 두 가지 형태를 가지는데 하나는 개발 과정에 투입되는 인력의 비용이고[각주: 총 개발 비용 (TCD, total cost of development) ] 또 하나는 개발된 결과물을 운용하고 유지하는데 드는 비용이다.[각주: 총 소유 비용 (TCO, total cost of ownership) ] 예를 들어, 어떤 도구가 오픈 소스라서 공짜라고 하더라도 그 도구를 사용해서 개발하거나 그 도구를 유지 보수하는 인력이 귀해서 인건비가 많이 든다면 결과적으로는 더 많은 비용이 발생할 수도 있다. 이러한 인력 수급의 문제는 나라마다 지역마다 다르므로 일반화하여 얘기할 수는 없다. 예를 들어, 한국에서는 대부분의 정보 통신 인력이 마이크로소프트 제품에 익숙하므로 오픈 소스 소프트웨어가 총 소유 비용에서는 더 비쌀 수도 있다는 점에 유의하여야 한다.[각주: (인용자 주: 고성능 클러스터 컴퓨터를 구성하는데 있어) "오픈 소스의 리눅스에 고성능 컴퓨터 솔루션을 탑재하고 관련 인건비를 합한 것과 마이크로소프트사의 솔루션에 관련 인건비를 합한 것을 비교하면 마이크로소프트가 가장 저렴하게 나오는 것이 현실입니다." (페이스 북을 통한 코멘트 중에서 이보성의 의견) ]

정부 2.0을 구현하는데 사용한 코드를 오픈 소스의 형태로 공개를 한다면 한 지방 정부에서 개발한 것을 다른 지방 정부에서 재사용하게 되어 중복 투자를 방지하게 된다.

"어차피 각 지방자치단체는 같은 기능을 하므로 이들 같은 기능을 지원하는 정보 기술 솔루션을 중복되어 개발될 수 밖에 없다. 그 중에는 아주 개발 비용이 많이 드는 것도 있을 수 있다. 따라서, 한 곳에서 개발한 것을 다른 모든 곳에서 재사용 (물론 필요한 만큼 수정한 다음) 한다면 엄청난 비용 절감이 될 것이다."[각주: Bryan Sivak 의 인터뷰 비디오, "Cost is only part of the Gov 2.0 open source story - O'Reilly Radar", http://radar.oreilly.com/2010/08/cost-savings-is-only-part-of-t.html ]

여기서 코드 재사용의 효과는 단지 중복 투자를 막음으로써 비용을 절감하는데 그치는 것이 아니다. 여러 지방 정부가 같은 원시 코드를 공유한다고 하면 그 중 어는 한 곳에서 원시 코드를 개선하였을 때 또는 새로운 기능을 추가하였을 때 다른 모든 곳에서도 그 혜택을 입게 된다. 게다가 하나의 서비스에 사용자가 더 많은 셈이 되므로 더 다양한 측면에서 그 서비스를 평가하고 활용하고 개선할 수 있는 기회가 생기게 된다. 이렇게 공개된 코드는 시민들의 참여를 독려하는 강력한 도구가 된다는 점은 굳이 반복할 필요 조차 없을 것이다.

그런데, 오픈 소스 소프트웨어를 실제로 적용하는데 있어서 일선 담당자들이 두려워하는 점 중의 하나는 문제가 발생했을 때 책임지고 도와 줄 곳이 없다는 점이다. 독점적인 솔루션의 경우 그 솔루션을 공급한 곳에 문의를 하면 되겠지만 오픈 소스 소프트웨어는 문의를 할 수 있는 전화번호도 없고 설령 관련된 메일링 리스트에 문의를 올린다고 해도 대답해야 할 책임을 가진 사람은 없다.[각주: "회사에 와 보니 거의 오픈 소스는 사용을 안하더라구요. (중략) 이유는, 첫째 서포트가 없다는 거지요. 돈 주고 사는 소프트웨어는 문제가 생기면 전화 걸 곳이 있는데 오픈 소스는 그게 잘 없지요. 가끔 돈 받고 서포트를 제공해주는 회사들도 있기는 한데 많은 경우 구멍가게 수준이라 영 따라가지를 못합니다. 상용 소프트웨어는 어떤 때는 엔지니어가 출장 나와서 고쳐놓고 가는 경우도 있으니까요." (페이스 북을 통한 코멘트 중에서 이승의 의견)] 따라서, 실패를 하면 곤란한 정부 시스템에 오픈 소스 소프트웨어를 사용하게 하기 위해서는 정부가 활용하기 위해 개발하는 오픈 소스 솔루션을 책임질 수 있는 형태를 만들어 내는 것이 필요하다.

3. 한국의 오픈 소스 개발자

사실 여부를 놓고는 냉소적인 평가도 많지만 (최소한 광대역 접속망에 관한 한) 한국은 인터넷 강국이다. 하지만 인터넷의 근간을 이루는 오픈 소스 분야에서 한국의 위상은 초라하기 짝이 없다. 오픈 소스 중에서 그나마 한국 개발자들이 공헌을 할 수 있었던 분야는 소프트웨어가 한글을 지원할 수 있도록 개선하는 부분인데 이마저도 소프트웨어의 국제화[각주: 어떤 언어 그리고 그 언어를 사용하는 사람들의 관습을 지원하도록 소프트웨어를 개선하는 일은 크게 둘로 나뉜다. 어떤 소프트웨어가 다양한 언어를 모두 지원할 수 있도록 만드는 것을 국제화(internationalization, 흔히 줄여서 i18n이라고 쓴다)라고 하고 특정 언어와 관습에 맞게 수정하는 작업은 지역화(localization, 흔히 줄여서 l10n이라고 쓴다)라고 한다. 예를 들어, 어떤 소프트웨어가 임의의 글자를 다 표현할 수 있도록 수정하는 작업은 국제화이고 그렇게 국제화된 소프트웨어에 한국어로 된 메시지를 넣고 한글 기준으로 정렬이 되고 돈 표시가 \ 표시로 나오게 하는 것은 지역화에 해당한다.] 가 급속히 진행되어 소프트웨어에 포함된 메시지(예를 들어, 메뉴, 도움말 등)를 한국어로 번역하는 것 이외에는 추가의 노력이 들지 않게 된 상황이라 오픈 소스의 열기가 한국에서 크게 일어나기는 쉽지 않아 보인다. 소프트웨어는 좋은데 한글이 제대로 안되어 답답하면 고쳐서 쓰려고 오픈 소스 소프트웨어 프로젝트에 관심을 둘 수 밖에 없지만 대부분 소프트웨어가 한글을 잘 지원하는 요즘에는 참여해야 할 동기가 발생하기 어려운 것이다.

그렇다고 해서 소프트웨어를 개발하는 일선 회사에서 오픈 소스 소프트웨어와 거리를 두고 있는 것도 아니다. 실은 (정확히 밝혀 낼 수는 없겠지만) 회사들이 독점적인 솔루션인 것처럼 판매하는 것 중에도 실은 "오픈 소스를 참조한 다음 덮어 둔 것"도 있을 것으로 보인다.[각주: 페이스 북의 코멘트 중에서 이경운의 의견] 제법 기술력이 있는 중소 벤처라고 해도 겨우 한 두 개의 자체 개발 솔루션을 갖고 있는 상황에서는 그 솔루션의 "코드 공개가 회사 자산 전부의 유출이라고 해도 과언이 아닌"[각주: 서광열, "달콤하고도 쓴 과일: 오픈 소스", http://skyul.egloos.com/2191344 ] 상황이 되므로 개발의 결과물을 공개한다는 것을 불가능하다. 그나만 자체 솔루션이 없는 회사들은 (최근에는 많이 바뀌었지만) 오픈 소스를 가져다가 포장만 해서 제품으로 팔기도 한다. 그러므로, "오픈 소스의 이용을 공표하는 것은 실상은 그 업체가 자체적인 기술력이 없음을 보여 주는 커밍아웃에 가깝기 때문"[각주: 서광열, "달콤하고도 쓴 과일: 오픈 소스", http://skyul.egloos.com/2191344 ] 에 우리나라의 정보 통신 기업은 자기가 만든 것을 오픈 소스로 내놓을 수도 없고 남의 오픈 소스를 가져와서 개선하였다고 하더라도 공개할 수 없는 형편인 것이다. 물론, 최근에는 솔루션을 납품하는 과정에서 라이선스 문제가 발생하지 않도록 솔루션 개발 단계에서부터 오픈 소스와의 라이선스 관계를 고려[각주: "2~3 년전에 회사에 있을 때, 개발자들이 GPL, LGPL 등 오픈소스 ...프로젝트의 라이센스 사항을 인지하지 못한 채 알게 모르게 제품 소스에 사용하고 있었죠. 현재는 블랙덕이라는 소프트웨어를 사용해서 오픈소스 사용 여부를 체크하고 있습니다." (페이스 북을 통한 코멘트 중에서 박찬진의 의견) ] 하는 정도의 변화가 발전이라면 발전이라 할 수 있을 것이다.

우리나라의 소프트웨어 개발 회사들이 오픈 소스 개발자들을 보유하고 육성할 수 있을 정도로 발전할 수 있다면 무척 바람직할 것이다 왜냐하면 오픈 소스 개발자는 특정 분야에 있어 첨단의 결과물을 다루는 사람일 뿐만 아니라 그가 오픈 소스 개발 프로젝트에 참여하는 과정에서 얻게 된 경험을 회사의 소프트웨어 개발에 활용할 수 있기 때문이다. 우리나라에서도 예외적이긴 하지만 그런 사례가 전혀 없는 것은 아니다. 앞으로 이런 사례가 늘어나길 기대한다.

"그는 사내 제품에 탑재된 오픈 소스 프로그램을 개발하면서 품질을 높이는 일과 더불어 오픈 소스 개발을 해 온 경험을 바탕으로 사내 개발자를 교육 시킨다고 한다. 뿐만 아니라 사내 개발 프로젝트에도 오픈 소스에서 사용되는 방법론을 채용해서 프로젝트를 진행하고 있기도 하였다."[각주: 윤석찬, "오픈 소스 개발자, 그들을 주목하라", http://channy.creation.net/blog/272 ]

만약에 회사 차원에서 오픈 소스에 참여하는 것이 한계가 있다면 개인 차원에서도 참여할 수 있을 것이다. 그리고 오픈 소스 개발에 참여하는 것은 개인적으로도 성취감을 줄 뿐만 아니라 그 프로젝트 다루고 있는 분야에 대한 깊이 있는 지식을 습득하게 되고 한 회사 안에서 일할 때는 배울 수 없는 프로젝트 관리 기법과 의사 소통 기법을 배우는 장점이 있다. 하지만, 회사 일 이외의 시간에 참여하는 것도 한국의 상황에서는 쉽지 않다. 세계 최장의 노동 시간을 자랑하는 한국에서도 소프트웨어 개발자들은 특별히 더 과로에 시달리고 있는 편이라 따로 시간을 내는 것이 거의 불가능하다고 보아야 한다. 이런 점에서 본다면 여가 시간에 소프트웨어 개발에 참여해서 세계적인 명성을 쌓는 해외의 개발자들은 부러움의 대상일 수 밖에 없다.

여기에 우리나라 개발자들이 갖고 있는 소양의 문제도 한 몫을 한다. 오픈 소스 소프트웨어 개발 프로젝트에서 대부분의 의사 소통이 영어로 이루어지므로 아무래도 언어의 장벽이 부담이 되긴 하지만 그것만 문제는 아니다. 우리나라의 개발자들이 의사 소통 능력이 떨어져서 협력해서 개발하려 하지 않고 혼자 풀어 가려는 성향도 있고[각주: "대부분의 개발자가 다른 개발자와의 의사소통을 힘들어한다. 어렵게 시작한 국내 오픈 소스 프로젝트도 다른 개발자의 도움을 받는 일이란 극히 드물다. 개발자들은 의사소통이 어려워서 기존의 프로젝트에 참여하기보다는 자신만의 새로운 프로젝트를 만드는 쪽을 선호한다." 서광열, "달콤하고도 쓴 과일: 오픈 소스", http://skyul.egloos.com/2191344 ] 다른 개발자의 프로젝트에 참여하고 독려하기 보다는 부정적인 반응을 보이는 경우도 많다[각주: "실제 개발에 도움되는 패치 한 줄이라도 보내주는 사람은 하나도 없고, 기껏 가뭄에 콩 나듯이 버그 리포팅이랍시고 하는데 그게 다 불평이에요. 같은 말이라도 좀 이쁘게 하면 참 좋을텐데... 꼭 왜 프로그램을 그 따위로 만들어놨냐 하는 식이죠." KLDPWiki, "한국에서 오픈소스 하기", http://wiki.kldp.org/wiki.php ] 고 한다.[각주: 정말로 우리나라 개발자들이 유독 이런 문제를 갖고 있는지는 별도의 조사가 필요하겠지만 만약 이것이 사실이라면 일방적이고 주입식인 교육, 협력보다는 경쟁을 가르치는 교육이 그 원인이 아닐까 하는 생각이 든다. ]

4. 한국에서의 소프트웨어 개발 현실과 정부 2.0에 거는 기대

소프트웨어 개발은 서로 상충하는 목표 사이에서 균형을 찾아내는 예술이다. 여기서 상충하는 목표는 예를 들면 다음과 같다.[각주: Ronald E Jeffries, "The Four Variables", http://xprogramming.com/Practices/PracFourVariables.html ]

  • 범위 – 무엇을 개발할 것인가 즉, 구현할 기능의 범위
  • 품질 – 얼마나 정확하게 그리고 그 외 바람직한 특성[각주: 예컨대, 같은 기능을 구현했다고 하더라도 훨씬 효율이 높게 동작한다거나 원시 프로그램이 깔끔하여 나중에 수정하기 쉽다거나 하는 등의 특성] 을 갖게 개발할 것인가
  • 자원 – 투입되는 인력이나 장비 등은 얼마나 되는가
  • 기간 – 프로젝트의 총 기간은 얼마인가

이들 네 목표는 팽팽한 균형을 이루고 있어 다른 목표를 건드리지 않고 한 목표만 바꿀 수 없다. 예를 들어, 구현할 기능을 추가하려면(범위의 변화) 사람을 더 투입하던지 기한을 늦추던지 아니면 다른 기능을 대충 만들 수 밖에 없다. 하지만 사람의 욕심이라는 것이 더 많은 기능을 더 좋은 품질로 돈은 덜 들이고 더 빨리 얻고 싶은 것이다. 그래서, 실제로는 고객에게 잘 보이는 목표는 상향 조정하고 대신 보이지 않는 목표는 하향 조정하게 된다.[각주: 겉만 번지르르 하고 제대로 동작하지 않거나 이용자의 인내력을 시험하는 서비스는 대개 이런 식 개발의 결과물이다.] 이런 현상은 전 세계 어느 곳에서나 반복적으로 일어나고 있다.

하지만, 한국에는 여기에 최소한 두 가지 심각한 문제점 즉, 일방적 희생을 강요하는 혹독한 하청 체계노가다식 비용 산정 방식이 추가된다.

한국에서의 소프트웨어 개발 프로젝트는 다른 산업 분야에서의 하청 관행이 그대로 적용되며 하청 시스템이 갖고 있는 온갖 문제점이 정확하게 재연된다. 흔히 '을'이라고 부르는 원청업체가 수익의 대부분을 가져가므로 '병' 또는 '정'이라고 불리는 하청업체는 늘 턱없이 적은 비용으로 개발을 하게 되며 따라서 대개 턱없이 부족한 인력이 투입되고 그 결과 엄청난 초과 근무로 이어진다. 심한 경우라고 하더라도 "경제협력개발기구(OECD) 평균 연간 근로시간이 1768시간인데, 단 5개월 만에 나는 2000시간 이상을 일했다"라는 주장이 그럴싸하게 들린다는 것은 실로 어처구니 없는 현실이다.[각주: 이대희, "사람 잡는 야근… 폐 잘라낸 SI개발자", http://www.pressian.com/article/article.asp?article_num=30100817171744] 게다가 '을'의 낙점을 받지 않는 한 프로젝트에 참여할 수 없는 '병'이나 '정'은 '을'의 무리한 요구도 거절 할 수 없게 된다. 한국에서의 소프트웨어 개발의 실태는 다음의 인용문이 잘 보여 준다.

평일 근무: 가능하면 경조사가 아니면 식사 후 오후 10:00까지 근무 부탁 드립니다.
주말 근무: 토요일은 가능하면 경조사가 아니면 오전 10:00 ~ 오후 6:00까지 근무 부탁 드립니다. 일요일은 고객과 함께하는 특별한 Task를 제외하고는 휴식이 좋겠지요. 허나, 시간이 없네요. 미진한 파트나 개발자는 어쩔 수 없이 잔여 Task 마무리를 위해 근무 부탁 드립니다.[각주: 클리앙의 게시물 중에서, "SI개발자인데 오늘 '을'한테 받은 메일 내용 중 일부 발췌", http://clien.career.co.kr/cs2/bbs/board.php?bo_table=park&wr_id=2746174]

이렇게 초과 근무를 요청하는 것이 당연시 될 뿐만 아니라 비용에 대하여도 무리한 요구를 하는 경우가 비일비재하다.

"일반적인 시스템 통합 견적은 '개발비 + 장비 가격'으로 되어 있고, 각각에 대해서 세부 내역을 제출하게 됩니다. 즉, 어떤 것을 공급 하느냐 하는 점도 기술 점수에 반영됩니다. 오픈 소스 소프트웨어에 대한 수요자의 인식, 아직 쉽지 않은 상황이죠. 오픈 소스 소프트웨어를 사용해서 저가 입찰에 성공하더라도 협상 과정에서 그 품목만 바꿔 달라는 (인용자 주: 유료 제품으로 바꿔 달라는 뜻) 경우도 있죠. 금액은 변동 없이" [각주: 페이스 북을 통한 코멘트 중에서 우항준의 의견]

이러한 하청, 재하청에 의한 개발은 오픈 소스 소프트웨어의 도입을 통한 비용 절감을 불가능하게 한다. "갑 – 을 – 병 – 정 – …"으로 이어지는 먹이사슬은 각 단계마다 수익이 발생해야 유지될 수 있다. 그런데 소프트웨어 개발 프로젝트 비용은 인건비와 개발에 활용되는 솔루션 비용이 대다수를 차지하는데 인건비는 투입되는 인력만큼 받는 것이므로 큰 수익이 발생하기 어렵고 결국 솔루션 비용에서 수익을 발생시켜야 한다. 따라서, 솔루션을 오픈 소스 소프트웨어를 쓰게 되면 국가 전체적으로는 비용이 절감되는 효과가 생기겠지만 프로젝트를 진행하는 쪽에서는 스스로 수익을 갉아먹는 꼴이 되므로 오픈 소스 소프트웨어를 적용하기가 더욱 어려워 진다.[각주: 페이스 북의 코멘트 중에서 이경운과 박충규의 의견]

혹독한 하청체계에 의한 수탈구조를 더욱 악화시키는 것은 촌스런 소프트웨어 개발 비용의 산정 방식이다. 우리나라의 소프트웨어 개발 비용은 철저하게 (투입되는 사람의 수 x 투입되는 기간 x 단가)로 결정된다.

공공 기관, 대기업을 막론하고 소프트웨어 단가는 모두 예전에 만들어 놓은, 소위 '과기부, 정통부 단가'에 따라 비용을 산정한다. 설상가상인 것은 용역 프로젝트라며 지적 재산권까지 내놓으라고 한다.[각주: 김홍선, "소프트웨어 개발 단가 산정이 한심한 이유", http://ceo.ahnlab.com/84]

이렇게 투입되는 사람의 능력을 고려하지 않는 계산 방식에서는 실력이 없는 사람(즉, 월급을 덜 줘도 되는 사람)을 투입하면 할수록 수익은 커진다. 물론 전혀 실력이 없는 사람(속칭 '허수아비')으로만 개발 팀을 구성하게 되면 결과물을 내놓을 수가 없으므로 실제로 개발을 담당하게 되는 실력 있는 몇 사람을 포함시키고 개발 부담은 거의 이들에게 집중된다. 원래 소프트웨어 개발 (또는 시스템 개발) 그 중에서도 특히 설계와 관리를 담당하는 시스템 엔지니어링은 인간, 경제, 기술의 측면을 동시에 고려하는 종합 예술로서 선진국에서는 최고의 직업으로 손꼽힌다.[각주: Focus Editor, "The Best Jobs In America", http://www.focus.com/fyi/human-resources/best-jobs/] 하지만, 실력이 있는 사람이나 없는 사람이나 열심히 하는 사람이나 자리만 채우는 사람이나 다 똑같이 평가되는 체계에서 창의성과 열정이 넘치는 젊은이들이 일하기를 바라는 것은 어불성설이다.

4. 정부 2.0은 새로운 기회일까?

이상으로 정부 2.0이 갖고 있는 비전과 오픈 소스가 우리에게 준 새로운 가능성 그리고 한국의 현실이 이러한 비전이나 가능성과 얼마나 동떨어져 있는지 살펴보았다. 우리가 원하건 원하지 않건 정부 2.0은 우리에게 현실로 다가오고 있는 현 상황에서 정부 2.0이 가져올 기회와 위험성을 소프트웨어 서비스의 관점에서 살펴보는 것으로 이 글을 마무리하고자 한다.

정부 2.0이 기존의 소프트웨어 개발 관행을 바꿔 놓고 그래서 창의적인 개발자들을 끌어들이게 될 것인가? 어느 정도는 그럴 것이다. 정부는 그저 데이터를 제공하고 다양한 서비스가 공존할 수 있는 플랫폼만을 제공하고 시민들이, 개발자들이 스스로 서비스를 개발하는 구조는 정부가 개발 프로젝트를 발주하고 이를 큰 회사들이 수주하여 하청, 재하청하는 현재의 구조와는 전적으로 달라질 수 밖에 없다. 오히려 아이디어를 내고 바로 개발에 착수할 수 있는 개인 개발자, 초소규모 회사들이 더 유리할 것이다. (고등학생이 만들었다는 아이폰 용 버스 시간 안내 프로그램 "서울버스"가 전형적인 예) 또한 개발 과정에서 정부가 오픈 소스를 장려한다면 (예를 들어, 정부에서 돈을 받아 개발한 결과물은 원칙적으로 공개하는 것을 고려할 수 있다) 그런 오픈 소스를 잘 이해하고 빨리 활용할 수 있는 능력 있는 개발자들이 대우받게 될 것이다. 물론 이런 희망 섞인 기대는 오픈 플랫폼 위에서 공정한 경쟁이 이루어졌을 때만 실현될 가능성이 크다. 그런 점에서 정부가 제공하는 정부 2.0이라는 플랫폼은 단지 서비스를 만들어 내는 플랫폼이 아니라 정해 진 규칙에 따라 공정한 경쟁이 이루어지게 하는 법적 제도적 장치를 포함하는 개념이 되어야 할 것이다.

정부 2.0이 성공적으로 실현된다면 수요와 공급이 시장의 원리에 따라 조화를 이루어서 좋은 서비스가 많이 생겨나고 시민들은 서비스를 더 편리하게 그리고 이전에는 상상조차 할 수 없었던 세심한 서비스까지 활용할 수 있게 될 것이다. 하지만 그게 다인가? 그렇지 않다. 정부 2.0은 "국가중심의 거버넌스와 시장적 거버넌스를 극복하는 시민사회적 거버넌스 또는 참여적 거버넌스"를[각주: 김유승, "시민과 쌍방향 소통 '전자정부 2.0'은 필수과목", http://www.hani.co.kr/arti/SERIES/255/435362.html] 추구하는 것인데 자칫 플랫폼으로서의 정부까지만 얘기하고 그 플랫폼을 시장의 논리에 맡겨 두기만 한다면 서비스 이용에 있어서 상대적인 약자들(예를 들어, 활용할 수 있는 기기를 구매할 능력이 안 되는 사람, 활용하는 능력이 부족한 사람, 외국인 등)을 서비스로부터 배제될 수 밖에 없다. 서비스를 개발하는 사람은 자기 서비스를 가장 많은 사람들이 활용할 수 있도록 하기 위하여 "서비스를 많이 활용하는 사람", "(유료 서비스라면 특히) 서비스로부터 많은 이득을 얻는 사람"에게 맞춰서 개발을 하게 된다. 이런 현상은 한편으로는 서비스의 획일화를 가져오고 다른 한편으로는 가진 자와 없는 자 사이의 격차를 더 키우는 결과를 낳을 수도 있다. 게다가, 노약자나 장애자의 경우 서비스의 사각 지대에 놓일 수 있다.[각주: 현재의 스마트 폰 응용 프로그램 시장이 그런 모습을 보인다. 정보 통신 기기를 잘 다룰 수 있고 그러한 기기를 통하여 얻은 정보를 자신의 업무에 활용함으로써 생산성을 높이고 더 많은 수익을 낼 수 있는 사람을 대상으로 삼고 프로그램이 개발되고 있는 실정이다.] 이러한 문제를 접근성, 보편성의 문제로 풀어 나가는 장치가 반드시 수반되어야 할 것이다.

신고
posted by 신묘군
기술을 얘기한다 2011.09.27 15:26

지인에게 들은 일화. 한 때 우리나라 미들웨어 시장의 절대 강자였던 T* 라는 회사. (특정 회사를 비하하려는 의도는 없습니다. 오히려 저는 그 회사가 우리 소프트웨어 산업에서 해낸 독보적인 역할에 경의를 표하는 편입니다. 다만 제가 들었던 일화가 그 회사에 대한 것이었을 뿐) 나름 괜찮은 제품인데 미국가서는 별로 재미를 못 봤단다. 그 이유는 그 회사가 내세운 장점이 "뭐든지 필요한 기능이 있으면 맞춰드립니다"였는데 막상 미국의 갑들은 그런 식의 제안에 익숙지 않았던 것. 즉, 한국의 소프트웨어 영업에서 반드시 갖춰야 할 고객 맞춤 서비스는 미국 시장에서는 별로 통하지 않는다는 것.

 

왜 그럴까?

 

(내가 미국 안 살아봐서 잘 모르지만) 미국 시장에서 사이트마다 쫓아다니며 커스터마이징 하다가는 교통비 때문에 프로젝트비가 치솟을 것이고 그래가지고는 회사가 유지가 안될 터이니 아마 전화로 응대하면서 "다음 버전에 포함될 수 있도록 노력하겠습니다" 정도가 최대의 고객 맞춤 서비스가 될 것이다. 만약 커스터마이징을 요구하는 고객이 있어도 무시해도 된다. 왜냐하면 그런 것을 요구하지 않는 고객에 팔면 되니까. (시장이 크다는 것이 미국의 장점이라고 할 수 있다.)

 

한편, 한국에서는 내수 시장이 작다보니 어디 한 사이트도 무시할 수 없다. 다행히(ㅠㅠ) 모든 갑들이 어차피 서울에 다 몰려 있으니 (뭐 지방에 있다고 해도 승용차로 쎄려 밟으면 두세시간 안에 다 갈 수 있으니) 커스터마이징의 부담이 작은데다 커스터마이징이라는 명목으로 개발자 파견해서 그 몫으로 몇 푼이라도 더 받아야 회사가 유지되니 (원래 패키지 소프트웨어는 거의 모두 불법으로 거의 공짜로 써왔다는 역사적 배경을 기억하라) 공급자들도 커스터마이징을 피할 수 없었다. 게다가 커스터마이징을 통해 직원들 기술도 업그레이드 하고 심지어는 패키지도 업그레이드 할 수 있을 것이라 생각했다.

 

하지만...

 

사이트 요구에 맞춰 턱 좀 깎아주고 눈썹 밀고 문신하고 복부 지방 좀 뽑고 다리뼈 늘리고 하다보면 어느 순간 소스는 걸레가 되어 있고 수많은 소스 브랜치는 통제 불능에 빠진다. 엄청나게 탁월한 아키텍트가 있어 전체 아키텍쳐를 흔들리지 않게 끌고 가면서 모든 브랜치를 다음 버전에서 이쁘게 메인 트렁크로 끌어올 수 있다면 다행인데 그런 아키텍트는 흔하지 않고 결국 회사는 "기능이 들어가면 갈 수록 프로그램 크기는 점점 무거워지고 버그는 기하급수적으로 늘어나는" 소프트웨어를 갖게 되고 문을 닫을 수 밖에.

 

한국적 토양이 낳은 비극이랄까.

신고
posted by 신묘군
기술을 얘기한다 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.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.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 신묘군
기술을 얘기한다 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 신묘군
기술을 얘기한다 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.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 신묘군
기술을 얘기한다 2009.07.08 13:55
발표회도 안 갔다온 주제에 뭐라뭐라 하는게 괜히 엉뚱한 소리할까 걱정이 되기도 하고 또 애쓴개발자들(음... 발표회 문자 중계를 보니 아는 사람도 나오는 듯. 동명이인이거나)에게 괜히 딴지거는 것 같아서 불편하기도 하고... 그래도 할 말은 하고 넘어갑시다. 간단히 요약하면 이렇다.

(1) 욕봤다.
(2) 쓸모는 없어 보인다.
(3) 발상의 전환이 필요하다.

좀 풀어서 얘기하자면,

(1) 그저 몇 개의 모듈에 몇 십개의 API를 서로 짝 맞춰서 개발하는 것도 쉬운 일이 아닌데 이미 성숙 단계에 접어든 운영체졔와 호환성을 갖추는 API를 몽땅 구현하는 것은 기술적으로나 인간적으로나 무척 난이도가 높은 일이고 이런 정도로 투자할 수 있는 소프트웨어 개발회사가 한국에  있다는 사실은 긍정적이다.

(2) 완벽하게 호환이 되는 (음... 호환이 된다는 표현자체가 성립하지 않는) MS 윈도가 있는데 굳이 추가의 운영체제가 필요한 이유는 뭘까요? 뭔가 더 좋은 점이 있겠지요. 아마. 더 싸다던가 더 성능이 좋다던가... 그런데 들리는 가격 얘기 등으로 보아 공공 사이트에 강제적으로 납품하는 것 외에는 별로 쓸모가 없어 보입니다.

(3) 저는 티맥스라는 회사를 참 좋게 생각합니다. 소프트웨어만 가지고 이 정도를 이루기가 얼마나 어려운지는 소프트웨어 사업을 직접 운영해보지 않고는 짐작하기도 힘듭니다. 하지만, 이제 궤도에 올랐다고 할 수 있는 티맥스가 커진 덩치만큼 커진 목소리로 한국의 현재 소프트웨어 시장을 보면서 던지는 메시지는 뭔가요?

MS 윈도는 넘사벽이다. 그러니까 앞으로도 우리는 MS 윈도만 쓰게 될 것 같다. 그러니 MS 윈도의 그늘에서 사업을 만들어야 된다. 똑같은 얘기를 웹 브라우저에도 적용할 수 있겠죠. ActiveX는 맘에 안들지만 대세고 이는 바뀌지 않는다. 그러니 호환성을 약간 포기하더라도 ActiveX 지원이 중요하다.

저는 아직 가난해서 없지만 애플 아이팟 쓰시는 분들 많죠. 저는 애플의 아이팟이 참으로 대단한 물건 이라고 생각합니다. 최소한 미국 시장에서는 음악의 유통 방식을 바꾸었으니까요. 합법적인 음반 거래와 불법적인 mp3 유통이라는 현실 속에서도 합법적인 mp3 유통이라는 새로운 가능성을 제시하고 실제로 이를 실현했죠.

당분간 티맥스 OS는 공공 기관을 타게팅할 것으로 보입니다. 공공기관의 컴퓨터... 뭐에 씁니까? 문서 편집하고 웹으로 업무 처리하고... 적절한 문서 작성 도구 + 표준을 이해하는 웹 브라우저 + 표준을 따르는 웹 서비스만 있으면 운영체제가 뭔 상관입니까? 아직도 운영체제가 시장의 중심으로 보입니까? 오늘 현재로는 그렇겠죠. 하지만 미래에도 그럴까요?

수백억을 돈을 투자해서라도 달성하고자 하는 그런 열망이 있다면 그 일부라도 할애해서 MS 윈도와 ActiveX의 종속을 벗어날 수 있는 미래를 얘기할 수는 없었을까요?

그런 점에서 저는 티맥스OS 보다는 웹 브라우저와 오피스 제품에 더욱 관심이 있습니다. 만약 이들이 기존의 오피스 도구와 충분한 호환성을 보여주고 기존의 웹 서비스들이 ActiveX 중독에서 빠져나올 수 있다면 훨씬 더 많은 기회가 생기는 것 아닐까요?

-- 덧붙이는 글 --
/* 오피스 호환과 웹 브라우저 호환에 대한 설명이 부족해서 오해를 일으킬 수 있어 약간 보완합니다. */

(1) 오피스 호환에 대하여

문서를 서로 호환하게 만드는 것은 문서 포맷이 공개되어 있으므로 충분히 가능하고 바람직한 일입니다. MS Word 가 아래아한글 문서를 읽을 수 있고 그 반대도 가능한 것은 양쪽 사용자 모두에게 좋은 일입니다. 개발자의 부담이 늘어난다는 것 외에 특별한 마이너스 요인은 없다고 보기 때문에 오피스 호환에 대한 투자는 좋다고 봅니다.

(2) ActiveX 에 대하여

잘 아시다시피 우리나라에서 ActiveX를 쓰는 이유는 두 가지가 복합되어 있습니다. 한편으로는 웹 브라우저에 내장된 (학계와 산업계에서 전세계적으로 인정된) 암호화 알고리즘 말고 국산 암호화 알고리즘을 반드시 은행 거래에 쓰도록 되어 있기 때문이고 다른 한편으로는 이 암호 기술을 구현하는데 있어 ActiveX 외에 다른 방법도 있음에도 불구하고 (이미 다른 방법도 시장에 나오고 있죠) 대부분의 비주얼스튜디오가 이 우주에 존재하는 유일한 개발 언어이자 환경인 줄 알고 있는 대부분의 개발자들 덕분에 ActiveX로만 구현되고 있는 것이 다른 이유입니다. (정확한 내막은 모릅니다만) 마이크로소프트도 거리를 두려고 하고 있는 무척 비상식적이고 보안을 침해하는 ActiveX 기술은 그 자체로서 빨리 사라져주는 것이 인류의 미래에 도움이되는 것입니다.

따라서, ActiveX 호환을 선택하고 웹 표준 호환을 일부 포기한 선택은 장기적으로 바람직한 선택도 아니고 더구나 사라져야 할 ActiveX 의 수명을 연장 하는 것이 일조한다는 점에서 안타까울 뿐입니다.

전혀 다른 얘기이지만... 제가 회사 생활을 시작할 때만 해도 토씨를 제외하고는 모든 문서를 한자로만 썼습니다. 신문에서도 대부분의 기사를 한자로 작성했고 논술 형식의 시험도 한자를 섞어 쓰지 않으면 감점하는 시대였습니다. 한글 전용은 그 때보다 훨씬 이전에 국가가 법적으로 시행하도록 되어 있는 문화정책이었건만 실생활에서는 한자의 영향력이 절대적이었고 한글 전용을 지지하는 많은 사람들이 여러 활동을 해도 요지부동이었죠. 그런데... 컴퓨터가 보급되면서 한자를 입력하려면 속도가 너무 느리니까 한자는 우리 생활에서 아주 빠른 속도로 사라져가기 시작했습니다. 사소한 기술의 변화가 문화 생활의 패턴을 바꾸는 것이죠. 만약, 우리가 엄청난 돈을 투자해서 한글을 입력하는 속도만큼이나 빠른 한자 입력기를 만들었다면 어땠을까요?

신고
posted by 신묘군
기술을 얘기한다 2009.06.10 00:25
핸드폰에서 돌아가는 자바 프로그램을 만들기 시작했다. 음... 첨 시작하는 거라 모르는게 너무 많다. 일단, 간단한 프로그램이 돌아가게 하는 것 부터 해본다.

(1) 자바 개발 환경 설치

이클립스를 설치하면 된다. 다들 많이 쓰는 (하지만 나에게는 생소한) 환경이므로 자세한 설명은 생략한다. J2ME용 개발 플러그인인 EclipseME를 설치하려고 하는데 그러려면 우선 Wireless 툴킷이 있어야 한단다. EclipseME의 설치의 전제조건은 여기에 (http://eclipseme.org/docs/prereqs.html) 나와 있다.

(2) Wireless 툴킷 설치

여러 곳에서 구할 수 있다고 하는데 그냥 썬에서 제공하는 것을 쓰기로 한다. 다운로드는 여기서 (http://java.sun.com/products/sjwtoolkit/download.html) 받아서 적당히 설치하면 된다.

(3) EclipseME 설치

여기에 (http://eclipseme.org/docs/installation.html) 설명되어 있는대로 하면 된다.

(4) 샘플 Midlet 만들어보기

우선 프로젝트를 만든다. 보통의 프로젝트와는 달리 File -> New -> Other -> J2ME -> J2ME Midlet Suite 로 선택해서 만든다.

그 안에서 클래스틀 추가한다. 보통의 자바 클래스와는 달리 File -> New -> Other -> J2ME -> J2ME Midlet로 선택해서 만든다. Midlet 샘플 소스는 여기의 (http://today.java.net/pub/a/today/2005/02/09/j2me1.html?page=2) 것을 이용했다.

이렇게 하면 deployed 라는 디렉토리 아래에 jad 와 jar 파일이 생긴다. (Midlet 프로젝트를 선택하고 오른쪽 클릭 -> J2ME -> Create Package해야 두 파일이 생긴다. 이건 확실치 않음) 이 중에서 jar 파일을 핸드폰에 옮겨서 적절한 java vm에서 (나는 JBed를 이용했다. IBM의 J9 도 괜찮다고 하는데 아직 입수 하지 못하였다) 올려서 실행하면 된다.

(5) 폰 없이 테스트 하기

앞의 (2) 단계에서 설치한 wireless toolkit은 폰 환경에서의 JVM을 흉내내는 기능을 해준다. 특히 우리가 사용할 도구는 ktoolbar 라는 프로그램이다. (wireless toolkit이 설치된 디렉토리 아래의 bin 디렉토리 밑에 있다.) 이를 실행하고 Create project from JAD/JAR를 선택한뒤 앞에서 설명한 deployed 디렉토리 아래의 jad 파일을 선택해주면 전화기 모양의 그림이 뜨고 프로그램을 실행해 볼 수 있다.

마찬가지로 이클립스 안에서도 실행환경을 Wireless Toolkit Emulator 로 지정해주면 에뮬레이터가 떠서 마찬가지의 실행을 해볼 수 있다.

(6) 64 비트 리눅스에서 에러가 날 때

만약 설치된 java sdk가 64비트 리눅스 용인 경우 대충 다음과 같은 메시지가 포함된 에러가 난다.
/bin/sublime.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
아마도 wireless toolkit은 64비트용 java sdk와는 짝이 맞지 않는 모양이다. 이런 경우에는 32비트용 sdk를 구해서 별도의 디렉토리에 설치하고 (물론 64비트 sdk를 쓸 일이 없다면 덮어 깔아도 되지만...) wireless toolkit 설치를 다시 하면서 sdk 디렉토리를 32비트가 깔린 bin 디렉토리로 지정하면 된다. 굳이 다시 깔기 귀찮으면 .../WTK2.5.2(또는 해당버전)/bin 디렉토리에 가서 파일의 내용 중에
javapathtowtk=/usr/bin/
이런 식으로 된 것으로 모두 32비트가 깔린 bin 디렉토리로 바꿔줘도 되는 것 같다.
신고
posted by 신묘군
기술을 얘기한다 2009.03.25 17:29
티로그인. SK 텔레콤이 제공하는 HSDPA 모뎀 서비스의 이름이다. (맞나?) 예전에는 아주 가끔 밖에 나갔을 때 노트북에 연결해서 쓰곤 했는데 도저히 윈도에 적응을 못해서 우분투 리눅스로 갈아탄 이후로는 시도한 적이 없었다.

당연히 안되는 줄 알았다. 하긴, 윈도에서도 그냥은 안되고 해당 드라이버를 구해서 설치해야만 되는데 리눅스에서 될 턱이 있나. 그런데 PDA 폰이 생겨서 리눅스에 연결하면 나름 뭔가 연결을 하려고 애쓰는 모습이 보인다. 그래서 혹시나 되지 않을까 해서 시도해 보았다.
$ tail -f /var/log/messages
...
kernel: [90289.468063] usb 4-2: new full speed USB device using uhci_hcd and address 20
kernel: [90290.028062] usb 4-2: new full speed USB device using uhci_hcd and address 21
kernel: [90290.185468] usb 4-2: configuration #1 chosen from 1 choice
kernel: [90290.188396] cdc_acm 4-2:1.0: ttyACM0: USB ACM device
kernel: [90295.464142] usb 4-2: USB disconnect, address 21
kernel: [90296.949066] usb 4-2: new full speed USB device using uhci_hcd and address 22
kernel: [90297.115498] usb 4-2: configuration #1 chosen from 1 choice
kernel: [90297.121058] cdc_acm 4-2:1.0: ttyACM0: USB ACM device
음... 커널쪽에서는 어쨌든 뭔가 ttyACM0 라는 걸로 붙었다는 것을 제대로 알아차린다. 문제는 그 다음 장면. 우분투가 자동으로 설정을 하려고 뭔가 띄워준다. (아래의 그림 참조)

사용자 삽입 이미지

즉, NetworkManager 가 새로운 모뎀을 인식하고 설정을 하라고 친절히 창을 띄워준다. 저 장면에서 Configure를 클릭하면 접속할 전화 번호 등을 입력할 수 있는 화면으로 넘어가야 되는데 문제는 그 첫 장면에서 국가를 선택해야 되는데 한국은 없다. (두둥) 우리보다 한참 처지는 나라들도 다 있는데 왜 없는 건지. 음... 이 길은 아니로구나. 그럼 어디로 가나.

왕년에 모뎀으로 인터넷 해본 사람들은 다 기억하는 PPP 라는 걸 쓰면 된다. 친절히도 gnome-ppp 라는 프로그램이 있는데 이걸 띄우면 된다. (아래 그림 참조) 일단 띄우고 나면 제대로 모뎀을 잡아야 하므로 "Setup"을 선택하고 Model 탭에서 "Detect"를 눌러주면 /dev/ttyACM0 를 찾아낸다. 만약 못 찾는다면 모뎀을 뺐다가 다시 끼고 다시 Detect 하면 된다.

사용자 삽입 이미지

그리고 그 화면에서 나와서 사용자 이름, 패스워드, 상대전화번호(즉, SK Telecom 전화번호) 를 입력해주면 된다. 이런데 이건 어떻게 알지? 구글링... 역시 구글이다. 사용자 이름에는 "sktelecom" 이라고 쓰고 전호 번호는 "1501" 로 하고 패스워드는 안 넣으면 된단다. 그런데 어찌된 영문인지 패스워드를 안 넣으니 어째 멈춰있는 것 같았다. (많은 실험을 해본 것은 아님.) 그래서 패스워드 칸에 "아무거나" 넣어 주고 Connect 버튼을 누르니 짜잔 연결이 된다. 오... 되는구나.

그 외에도 wvdial 이라는 프로그램으로도 가능하다. wvdial 을 실행하려면 먼저 설정을 해줘야 되는데 설정 프로그램의 이름은 wvdialconf 이다. 자세한 설명은 생략한다. 해보면 다 알 수 있다.

신고
posted by 신묘군
기술을 얘기한다 2009.03.12 17:42
/* 개인적인 메모를 위한 글이므로 다른 사용자가 그대로 따라 하기에는 설명이 부족할 수 있습니다. 더 자세한 정보는 네이버 카페를 참조하십시요. */

PDA 폰인 삼성 SPH-M4655를 사용하다보면 (그냥 곱게 쓰면 되는데 괜히) 이것 저것 손대다가 이상한 상태가 되어 완전히 초기 세팅으로 돌려야 할 때가 있다. 물론, 백업 프로그램을 써서 셋업 상태를 저장해두었다가 다시 복구할 수도 있지만 (내가 알기로는) 그런 프로그램은 대개 유료가 쓰기 좀 그렇다. 매번 새로 셋업 할 때 마다 무엇 무엇을 할까 고민하게 되는데 그간의 경험을 기준으로 대략 해야될 것을 정리하면 다음과 같다.

(1) 아주 기본적인 세팅

이는 잘 정리된 사이트가 있으니 그곳을 따라하면 된다. --> http://ruryca.tistory.com/16

(2) 추가 기본 세팅

앞의 (1) 단계에서 보면 레지스트리를 건드려야 하는 내용이 있는데 이런 일이 번잡스럽다고 하여 아예 프로그램으로 만들어서 배포하는 것이 있다. 이름 하야, 4650Tuner. 이놈을 구해서 실행하면 (설치도 필요 없다) Storage Card 이름 변경, 카메라 찍을 때 소리 안나게 하는 무음 패치 등을 간단히 할 수 있다.

(3) PC와 Active Sync 설정

USB를 통해서 Active Sync 를 해야 되는데 원래는 그냥 되어야 할 것 같은데 이상하게 뭔가 해줘야 된다.

"시작 --> 설정 --> 연결 --> USB-PC 연결" 에서 "고급 네트워크 기능 사용"을 꺼주면 된다. 그런데 이상하게 처음 끄면 계속 뱅글뱅글 돌기만 하고 끝이 안난다. 그래서 소프트 리셋. 이 짓을 몇번 반복하다보면 언젠가 USB를 통한 Active Synce 가 잘 된다.

(4) 기본으로 나오는 "오늘" 화면 설정

너무 여러가지 나오면 정신없다. 그래서, 시계, 무선, 부재전화/메시지 알림, 일정 이렇게 내 항목만 그리고 그 순서로 나오게 정리했다.

(5) 전화번호부 프로그램 설치

기본 전화번호부는 안 이쁘니까 iContact 을 설치한다. 그리고 iContact config 프로그램을 이용하여, Language --> Korean 으로 지정하고 Use T9 as default search 를 켜준다.

(6) 본체 양쪽에 있는 버튼이 본체를 잡는 순간 눌려서 프로그램이 실행되는게 성가셔서 꺼준다.

"시작 --> 설정 --> 단추" 로 들어가서 "단추3 짧게 누름" 과 "단추4 짧게 누름" 을 "없음" 으로 해준다.

(7) Mdict를 기본 프로그램으로 추가

Mdict는 설치가 필요없는 사전이다. 탐색기에서 mdict.exe 가 있는 디렉토리로 가서 해당 파일을 길게 누르면 메뉴가 뜨는데 거기서 "복사" 를 해주고 다시 "\Windows\시작메뉴\프로그램" 디렉토리로 가서 빈 바닥에서 길게 누름 뒤 "바로가기로 붙여넣기" 해줘서 링크를 만든다. 그리고 시작 --> 설정 -->메뉴 에서 해당 프로그램을 추가해준다.

(8) S2U2 설치

지맘대로 켜지는 것을 막아주는 프로그램이다. 설치 후 S2U2 설정 프로그램을 띄워서, "On Battery Power" 항목에서 "but Blank Screen only" 를 "on"으로 해준다. 이걸(안하면 active sync 연결이 자꾸 끊어진다.

전화가 왔을 때 화면도 S2U2가 관리하는데 "\Program File\S2U2\gfx" 아래의 nopic.png 과 unknown.png 를 매우 적절한 이효리 사진을 대체해주면 된다.

(9) 프리웨어인 TodayAgenda를 설치하면 Today 화면에서 일정을 아주 촘촘히 보여줄 수 있다.

(10) 더 이쁜 시계를 원한다면 Pocket Digital Clock (http://project.ionized.googlepages.com/pdc) 을 설치하면 된다. Freeware 이다. 그리고 설정을 해서 클릭해도 반응하지 않도록 하면 쓸데없이 시계 설정화면으로 넘어가지 않게 할 수 있다.

(11) 벨소리를 멋진 MP3 파일로 바꾸고 싶다면 파일의 확장자를 *.mp3 에서 *.bell 로 바꾸고 내장 메모리의 \My Documents\내 벨 소리 디렉토리에 옮겨준 뒤 MITS 메뉴에서 선택해주면 된다.
신고
posted by 신묘군
TAG 4650, 4655, PDA
기술을 얘기한다 2009.03.03 17:07
틀림없이 2.6.27-10 버전의 커널을 쓸 때까지만 해도 문제가 없었다. 그런데 11 버전 이후 오늘 현재 버전 (13) 에 이르기까지 갑자기 Fn+Home / Fn+End 키를 이용하여 화면 밝기를 조절하는 기능이 안되고 있다. 이 문제를 우분투 포럼에 제기 했더니 나만 그런게 아닌 모양이다. --> 우분투 포럼에 문제를 제기한 글

그동안 답을 찾지 못하고 있었는데 오늘 드디어 해결책을 찾았다. (해결책을 언급한 링크) 뭐 해결책이라고 해봐야 간단하다. /etc/modprobe.d/options 파일에 다음 한 줄을 추가하면 된다.
options thinkpad_acpi brightness_enable=1
오늘 현재 버전의 커널 (2.6.27-13-generic) + Thinkpad X61 조합에서는 잘 된다. 다른 버전의 커널에서는 테스트 하지 않았다. 만약 이걸로 해결되지 않는다면 -10 버전의 커널로 생활하는 수 밖에 없다. 예전 버전의 커널로 부팅하고자 한다면 /boot/grub/menu.lst 파일에 가서 default 값을 원하는 버전의 커널 이미지로 지정해주면 된다.
신고
posted by 신묘군
기술을 얘기한다 2009.02.18 11:52
/* 개인적으로는 배터리는 소모품이니 그냥 완전 방전에만 주의하고 쓰면 된다라는 설을 신봉하고 있었다. 그런데 여러가지 경제 사정이 어려워지니 별 걸 다 신경 쓰게 된다. */

ThinkPad 에는 배터리를 정교하게 관리하는 기술이 내장되어 있다. 이 기능을 윈도에서 이용하고자 할 때에는 Power Manager 라는 프로그램을 이용하면 된다. 예를 들어, ThinkPad 에서 사용하는 Li-Ion 배터리의 경우에는 너무 많이 충전 방전을 반복하면 수명이 단축된다. 따라서, 충분히 배터리가 떨어졌을 때만 충전을 시작하고 그리고 충전도 100% 가 아닌 약간 미달되게 충전하는 것이 더 좋다고 한다. (항간에는 이를 놓고 실로 다양한 설이 난무하고 있으므로 나도 어느 것이 정설인지는 모르겠다. 일단은 thinkwiki 에 있는 배터리 관리 관련 글을 믿어보기로 하자.)

그런데 리눅스에는 해당 프로그램이 없어서 안되는 줄 알고 있었는데 우연히 smapi 라는 것을 이용하여 할 수 있다는 것을 알게 되고 이를 설치해보았다. smapi 에 관한 상세한 설명은 thinkwiki의 smapi 관련 기사 를 참조하면 되고 우분투 리눅스에서 설치하는 방법은 ubuntu forum 의 관련 글을 참조하면 되겠다.

글에 다 나와 있지만 그래도 기록을 위하여 절차를 설명하면 다음과 같다.

synaptic 이나 aptitude 등을 이용해서 필요한 패키지(tp_smapi_src, build-essential, linux-source-현재버전)를 설치한다. ubuntu forum 의 글에서는 source forge 에서 thinkpad smapi 소스를 받으라고 되어 있지만 Intrepid 에서는 해당 패키지가 들어 있는 듯 하다. 그냥 synaptic 에서 설치하였다.

smapi 소스 패키지는 /usr/src 디렉토리 아래에 설치되는데 그곳으로 가서 소스를 풀어준다.
$ cd /usr/src
$ sudo tar jxvf tp-smapi.tar.bz2
풀린 소스에서 커널 모듈을 빌드 한다.
$ cd tp-smapi/
$ sudo make install HDAPS=1 KSRC=/usr/src/linux-headers-현재리눅스버전
다음 번 부팅 부터는 자동으로 해당 모듈이 로드 되도록 /etc/modules 파일에 tp_smapi 라는 줄을 추가한다.
$ sudo -s;
$ echo "tp_smapi" >> /etc/modules
리부팅을 하느니 이번에는 그냥 해당 모듈을 로드해보자.
$ sudo modprobe tp_smapi
그리고 충전을 시작할 시점 (즉, 이 수준 이하로 배터리가 떨어지면 충전이 시작된다) 과 충전을 중단할 시점을 지정한다.
$ sudo -s;
echo "30" > /sys/devices/platform/smapi/BAT0/start_charge_thresh;
echo "85" > /sys/devices/platform/smapi/BAT0/stop_charge_thresh;
척 봐서 알겠지만 /sys/devices/platform/smapi 아래에 배터리에 관련된 정보가 들어 있기도 하고 필요한 컨트롤을 할 수 있는 파일이 들어 있기도 하다. 그럼 현재 배터리 정보를 보려면 어떻게 하나? 파일 하나 하나를 뒤질 수는 없으니 이걸 정리해주는 스크립트가 있다. --> 이 링크 <-- 를 클릭해서 쉘 스크립트를 받은뒤 실행해보면 배터리 상태를 보여준다.
$ ~/bin/thinkpad-smapi.bash -b 0
BATTERY 0 INFORMATION
=====================

Battery slot:
  Battery present: yes
  Battery state: idle

Embedded info:
  FRU P/N: 42T4505
  Barcoding: 1ZDA078729D
  Serial number: 2929
  OEM Manufacturer: SANYO
  Chemistry: LION
  Manufacture date: 2007-08-07
  Design capacity & voltage: 37440 mWh, 14400 mV

Battery health:
  First use date: 2007-09-05
  Cycle count: 148
  Last full capacity: 28770 mWh
  Average current / power (past 1 minute): 0 mA, 0 mW

Battery status:
  Remaining capacity: 28430 mWh (99 %)
  Remaining running time: [not discharging]
  Running current & power: 0 mA, 0 mW
  Temperature: 34700 mC
  Voltage: 16256 mV
  Remaining charging time: [not charging]

Battery charging control:
  Start charging at: 30 %
  Stop charging at: 85 %
  Prevent charging for: 0 min
  Force battery discharge: no
눈여겨볼 수치에 색칠을 했다.

우선 148. 대략 충전 싸이클 500 여회가 되면 배터리는 망가진다는 설이 있다. 그렇게 본다면 벌써 수명을 1/3 은 쓴 셈이다. 으 아까워라. 진작에 신경 써 줄껄...

그 다음에 볼 수치는 28430 / 37440. 원래는 3만7천 정도가 충전되던 배터리 였는데 이제는 완전히 충전해도 2만 8천 밖에 안 들어간다는거다. 어째 요즘 버티는 시간이 좀 줄었다 싶더라...

그리고 30 / 85. 그래 이제는 설정을 해줬으니 충전 싸이클도 쉽게 안 늘어나고 현 상태로라도 오래 버텨주겠지.

그런데 30 / 85 설정 값은 리부팅하면 없어진다. 이를 계속 유지시키려면 다음과 같은 추가 작업을 해줘야 된다.

$ sudo aptitude install sysfsutils
$ sudo -s;
echo "devices/platform/smapi/BAT0/start_charge_thresh=30" >> /etc/sysfs.conf
echo "devices/platform/smapi/BAT0/stop_charge_thresh=85" >> /etc/sysfs.conf


신고
posted by 신묘군
기술을 얘기한다 2009.02.02 10:21
일정 관리를 구글 캘린더로 쭉 해오다가 PDA폰을 구입하게 되어 PDA의 일정 프로그램과 동기화 하여 사용하고 있다. 동기화는 구글에서 제공하는 Google Sync를 사용하여 구글 캘린더와 피씨의 아웃룩을 동기화하고 Active Sync를 이용하여 아웃룩과 PDA를 동기화하는 두 단계를 거치고 있다. (덕분에 안 쓰던 아웃룩도 가끔 보게 된다. 쓰지는 않고 그냥 제대로 동기화 되나 확인하고 싶을 때...)

그런데 다른 것은 불만이 없는데 한 가지가 딱 맘에 걸린다. PDA에서는 종일 약속을 만들면 디폴트로 "약속 있음"으로 만들어 주는데 반하여 구글 캘린더에서는 종일 약속을 만들면 디폴트로 "Show me as Available"(즉, 약속 없음)으로 만든다. 이게 문제가 되는 점은 PDA는 화면이 좁으므로 월 단위 화면 등에서는 약속 없는 일정은 표시하기 않도록 되어 있어서 일정이 있음에도 불구하고 얼른 알아채지 못한다는 것이다.

PDA의 일정 프로그램에서 월 단위 화면에 약속 없는 일정을 표시하는 기능이 생기거나 아니면 구글 캘린더에서 종일 약속도 "Show me as Busy"로 디폴트로 만드는 기능이 있어야 할 듯 하다. 물론 논리적으로 생각해보면 종일 일정의 경우 "Show me as Available"을 디폴트로 만든 구글의 선택이 맞긴 하지만...
신고
posted by 신묘군
기술을 얘기한다 2008.12.22 01:44
Doxygen을 설치하고 아무런 한글 관련 패치를 하지 않은 상태에서 한글로 된 코멘트를 RTF 파일로 생성하면 한글이 몽땅 깨져서 나온다. 그 이유는 두 가지. 첫째, 파일의 폰트 정보에 한글 코드 페이지, 한글 폰트 정보가 들어있지 않다는 것. 둘째, 한글이 UTF-8 인코딩으로 되어 있는데 이는 한글과 같은 코드를 RTF에서 표현하는 방법과 맞지 않다는 것.

둘째 문제를 먼저 풀어보자. 우선 UTF-8 인코딩을 EUC-KR 인코딩으로 바꾼다음 이를 RTF 의 표현 방식으로 바꿔주면 된다. RTF 표현 방식으로 바꿔주는 것은 간단한 프로그램으로 구현할 수 있는데 예를 들면 다음과 같다. (비몽사몽간에 짠 코드라 허접...)
$ cat babo.c
#include <stdio.h>

void main(int argc, char * argv[])
{
        int ch;
 
        while((ch = getchar()) != EOF) {
                if(ch & 0x80) {
                    printf("\\'%x%x", ch >> 4, ch & 0x0F);
                } else {
                    printf("%c",ch);
                }
        }
}
그렇다면 리눅스에 기본으로 깔리는 툴인 코드 변환 툴 iconv와 결합해서 간단히 변환을 할 수 있다. 이렇게 말이다.
$ iconv -f utf8 -t euc-kr refman.rtf | babo > refman-euc-kr2.rtf
이렇게 하면 한글이 깨지는 refman.rtf 파일이 제대로된 RTF 용 한글 코딩으로 된 파일로 바뀐다. 이제는 한글 폰트를 파일에 심어줄 차례다. 이것도 역시 간단하다. 파일의 맨 앞에 있는 폰트 정보를 갈아끼우면 된다. Doxygen에서 생성한 RTF 문서의 맨 앞부분은 이런 식이다.
$ head refman.rtf
{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033
{\comment Begining font list}
{\fonttbl {\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}
}
{\comment begin colors}
{\colortbl;
여기서 colortbl 어쩌고 하는 앞 부분 (코멘트 포함) 까지가 폰트 정보이다. 이 부분을 한글 폰트 정보로 엎어 쓴다. 제대로 된 한글 RTF 파일의 앞 부분은 이렇게 생겼다.
$ head refman-euc-kr2.rtf
{\rtf1\ansi\kis94\deff1\deflang1042\ansicpg949
{\fonttbl
{\f0\fnil\fcharset0\fprq0 \'b9\'d9\'c5\'c1;}
{\f1\fnil\fcharset129\fprq2 \'b9\'d9\'c5\'c1;}}
{\comment begin colors}
{\colortbl;
적당한 편집기로 원래 파일의 앞부분을 지우고 아래의 내용으로 넣어주면 한글을 제대로 볼 수 있다.

신고
posted by 신묘군
기술을 얘기한다 2008.12.02 10:42
ThinkPad X61에 Ubuntu 8.10을 설치해서 쓰고 있는데 아무런 문제를 못 느끼다가... 오늘 아침 뚜껑을 열었는데 되살아나지 못하고 (뚜껑을 닫으면 suspend to ram을 하도록 설정되어 있음) 캡스락이 깜빡인다. 전원 버튼을 길게 눌러서 다시 부팅을 했는데 뭐가 문제인지 기록은 안 남아 있다.

구글링을 해보니 캡스락이 깜빡이는 것은 kernel panic이 났다는 뜻이고 X61과 같이 인텔 4650 무선랜 어댑터를 쓰는 경우 8.10에 들어 있는 커널이 그런 문제를 일으킨단다. 해결책은 일부 모듈을 업데이트 해주는 것. 간단히 말해서 linux-backports-modules-intrepid 라는 패키지를 추가 설치하면 끝.

관련 글 --> ubuntu 8.10 hangs, maybe a wireless problem


신고
posted by 신묘군
기술을 얘기한다 2008.11.25 14:00
난데없이 사버린 PSP. 별로 게임은 즐기지 않는지라 PMP로 쓰고 있는데 우분투로 전향하기 전에 윈도에서 변환해둔 비디오가 많이 있어서 그걸보다가 다 떨어져서 우분투에서 비디오 변환을 하게 되었다. 우분투(더 정확히는 리눅스)에도 비디오를 갖고 노는 도구는 많이 있기 때문에 트랜스코딩을 하는 것은 별로 어려운 일이 아니다.

내가 사용한 트랜스코딩 겸 자막 익히기 프로그램은 avidemux . 기능도 많고 다 좋은데 더욱 좋은 점은 PSP용 변환이 auto 기능으로 내장되어 있어 비디오에 대한 많은 지식 없이도 변환을 할 수 있다는 것이다. 고화질 비디오를 PSP로 변환하는 방법에 대해서는 관련된 글을 참조하면 된다.

그런데 문제는 한글 자막.

1. 한글 인코딩

avidemux는 자막을 입힐 때 쓸 폰트를 지정할 수 있으므로 한글을 지원하는 적절한 폰트를 지정해주면 된다. 문제는 자막 파일의 인코딩으로 몇 가지를 지원하는데 불행히도 euc-kr (우리가 인터넷에서 구하는 대부분의 한글 자막은 이 인코딩으로 되어 있다.) 을 지원하지 않는다. 따라서, utf-8으로 바꾸기로 하였다. 이 작업은 간단하다.

iconv -f euc-kr -to utf8 자막파일1 > 자막파일2

이렇게 하면 자막파일1 을 utf8으로 변환하여 자막파일2 로 만들어준다. 여기까지는 간단한데... avidemux는 SMI 파일을 지원하지 않는다. 물론 대부분의 한글 자막은 SMI 파일이구. avidemux가 지원하는 자막 포맷은 상당히 다양한데 대략 훑어보니 SRT 라는 포맷을 많이 쓰는 모양이다.

2. SMI 를 SRT 로 변환

우분투에 자막 변환 툴이 여러 개 있으나 SMI를 읽을 수 있는 것은 없는 것 같았다. 한참을 뒤지고 여러 개를 깔아 보았으나 모두 실패. 그래서 마지막으로 생각한 것이 자막 처리 프로그램을 개발할 수 있는 라이브러리를 설치하고 직접 개발하기로 결심. libsubtitles-perl 을 설치했다. 그런데 이게 웬일. 이 라이브러리에 기본으로 따라오는 응용 프로그램으로 subs  라는 놈이 있는데 이게 SMI --> SRT 변환을 지원한다. 허걱. 지성이면 감천. 쓰는 법도 간단하다.

subs -c srt 자막파일.smi -o 자막파일.srt

여기서 -c 는 만들어질 자막 파일의 포맷을 지정하는 것이고 -o는 만들어질 파일 이름을 지정하는 것이다. 이렇게 2단계 변환을 거쳐 utf-8  으로 인코딩된 srt 포맷을 자막 파일이 있으면 이것을 avidemux에 넣고 자막을 입히면 된다. 인증 샷. (엄청 화질도 이쁜데 폰카로 찍었더니 영...)

사용자 삽입 이미지

3. 그래도 해결 안된 문제

자막을 중간 중간 꺼주기 위해서 &nbsp; 를 사용하는데 이게 그대로 자막으로 인식되어 화면에 나온다. 아마 srt 로 변환하는 과정에서 뭘 해주던지 해야 할 듯.
신고
posted by 신묘군
기술을 얘기한다 2008.11.12 14:14
집에서 작업할 파일을 학교에서 USB 메모리로 옮기는데 파일이 커서 그런지 뭔가 이상한 문제가 생겼다. 그래서 unmount 했다가 다시 껴서 해도 잘 카피가 안되고 우회적인 방법으로 했는데 이번에는 파일을 접근하면 read only 라고 하면서 이상한 에러를 내고 어쨌든 그 파일을 건드리기만 하면 이상한 증세를 낸다. 큰 파일을 복사하는데 문제가 있나해서 구글링을 한참 했는데 결론은... 파일 시스템이 부분적으로 망가진 것이다. 복구하는 방법은 간단하다.
$ sudo dosfsck -av /dev/sdb1
이렇게 했더니 해당 파일의 크기와 할당된 클러스터가 맞지 않아서 고쳐준다구 뭐라고 뭐라고 나온다. 다시 카피를 해보니 잘 되기만 한다.

구글링을 통해 얻은 정보를 종합해보면 처음에 파일을 카피하는 과정에서 내가 USB 메모리를 unmount 하거나 카피를 이상하게 중단했거나 어쨌든 문제가 생겨서 USB 메모리의 파일 시스템에 문제가 생겼고 이 상태에서 그 파일을 접근하려고 하면 Ubuntu는 시스템을 보호하기 위해서 read only로 다시 마운트를 해버린다.

알고 보면 간단한 것을...

신고
posted by 신묘군
기술을 얘기한다 2008.11.03 16:29
Lenovo Thinkpad X61에 우분투 8.10을 쓰는 환경에서 grandr을 이용해서 스크린을 윈도에서처럼 여러 모드로 전환하게 하는 스크립트는 다음의 링크를 이용하면 된다. 이전에는 잘 안되더니 점점 버전이 올라가면서 안정화가 되는 것 같다. 야호... 참고로 나는 두번째 방법 (즉, Alternative script using .Xauthority rather than su) 를 활용했다. 그리고 스크립트 내의 EXTERNAL_LOCATION은 자기 상황에 맞춰 바꿔줘야 한다. 나처럼 외장 모니터를 왼쪽에 놓고 쓰는 사람은 "right"를 "left"로 고쳐줘야 된다.

Thinkwiki의 Sample Fn+F7 script
신고
posted by 신묘군
기술을 얘기한다 2008.11.03 13:52
(2009년 6월 24일 업데이트: 소프트포럼의 Xecureweb 의 경우에는 키보드 보안을 위해서 nProtect 솔루션을 쓰다가 최근에 자체 솔루션으로 바꾸었다고 한다. nProtect 솔루션을 쓰는 사이트에서는 아래의 설명대로 최신 버전을 설치하는 것으로 해결이 되고 자체 솔루션을 쓰는 사이트의 경우에는 해결책이 없다. 소프트포럼에 연락하면 설치 프로그램을 주는데 이를 설치하면 된다. 아마, nProtect 솔루션을 쓰면서 최신 버전인 것으로 속여서 최신 솔루션이 다운로드 되는 것릉 막아주는게 아닌가 싶다. 아님 말구. ^^)

(2008년 11월 10일 업데이트 주의: 소프트포럼에서 제공하는 Xecureweb의 경우 아직은 화상 키보드 외의 해결책은 못 찾았습니다.)

리눅스를 쓰는 사람들도 인터넷 뱅킹을 위해서는 어쩔 수 없이 윈도를 써야 되는데 (안 써도 되는 은행이 생겨나고는 있다고 하지만 아직은 소수) 문제는 리눅스에서 윈도를 띄우기 위해 사용하는 가상 기계 프로그램들(vmware, virtualbox 등)이 인터넷 뱅킹에 필수적으로 따라오는 키보드 보안 프로그램과 충돌을 일으킨다는 것이다. 이에 대한 해결책으로는 화상 키보드를 사용하는 법과 기능을 bypass 하게 하는 방법이 있다. 그런데 오늘 모 사이트를 사용하다보니 둘 다 안되는 것이다. 이런... 그 사이트에서는 잉카의 nProtect를 쓰고 있었는데 여기 저기 전화를 찔러서 결국 상담을 받은 결과 문제는 해결되었다. 해결책은 무척 간단. 최신 버전을 깔면 된다. 문제는 이 프로그램은 인터넷 뱅킹 사이트를 접속하면 ActiveX 설치 방식으로 설치되는데 모든 인터넷 뱅킹 사이트에 최신 버전이 올라가 있는게 아니라는 점이다. 따라서, 해결책은 nProtect를 삭제한 후 (또는 아직 한번도 설치 안한 상태에서) 최신 버전이 있는 사이트에가서 최신 버전을 먼저 설치한 후 인터넷 뱅킹을 접속하는 것이다. 이렇게 간단한 것을... 몇 시간이나 허비하다니...

이상은 잉카의 nProtect 키보드 보안을 쓰는 경우이고 그 외 소프트캠프의 Secure Keystroke 를 쓰는 경우에는 해당 기능을 bypass 하는 프로그램을 친절히도 소프트캠프에서 제공하고 있다. 이를 설치하면 된다.
신고
posted by 신묘군
기술을 얘기한다 2008.11.01 18:51
마이크로 소프트의 윈도 모바일에 돌아가는 응용을 만들어보고 싶은데 그렇다고 비쥬얼 스튜디오 깔기는 싫고 (더 정확히는 쓰는 법도 모르고 얼른 보기에 너무 무겁고...) 그래서 리눅스에서 할 수는 없을까 뒤지던 중 GCC를 윈도 모바일 (또는 이전의 WinCE)용 코드를 생성하는 크로스 컴파일러로 만든 CeGCC 라는 것을 발견했다.

아싸...

필요한 파일을 다운로드 받아서 실행을 했는데... 허걱... libgmp 어쩌구가 안된다고 에러가 난다. 정확한 이유는 파악되지 않았지만 내 환경은 (AMD) 64비트 환경인데 다운 받은 패키지는 32비트 용으로 만들어져 있어서 그런 모양이다. (확실치는 않음) 어쨌든 안되는 건 안되는 것. 이럴 바에는 그냥 소스를 받아서 빌드하자.

이번에는 tar로 묶인 소스를 받아서 빌드를 해봤다. 으... 몇몇 셀 스크립트는 x 모드가 빠져있어서 chmod로 넣어주고 몇 소스는 말썽을 부리고... 이것도 쉽지 않네. 안되겠다. 최신 소스를 받아보자. 최신 소스를 받아서 빌드하는 방법을 설명해둔 글을 참조하여 svn을 이용해서 최신 소스를 내려받고 빌드를 했다. 여전히 셀 스크립트의 모드 문제와 몇몇 소스에서 fread/fwrite 의 return value 처리를 해주지 않는 문제가 있어서 빌드가 중단되었지만 적당히 수정해서 넘어가게 했다.

그리고 드디어 빌드는 성공. PATH 변수를 빌드된 바이너리에 맞춰 설정해주고 test 디렉토리 아래에 있는 몇 개의 샘플 프로젝트를 make 해보니 프로그램은 생성이 된다. 그런데 돌아가는지 어떻게 알지?

아... 윈도 모바일이 돌아가는 PDA나 핸드폰이 없으면 테스트가 불가능? 그럴리가 없다. 여기 저기 뒤적 뒤적. 음... 친절하게도 마이크로소프트에서는 장치 에뮬레이터(Microsoft Device Emulator Standalone version 3)와 그 에뮬레이터에서 돌아가는 윈도 모바일 이미지(Window Mobile 6 Localized Images <-- 여기에 가면 standard version이랑 professional version이랑 둑개 있는데 서로 약간 다른 세트의 이미지를 갖고 있는 듯. 그냥 둘다 설치했음)를 제공한다.

문제는... 얘네들은 윈도용 프로그램이라는 것. 즉, 리눅스에서는 돌릴 수가 없다는 것.

이 아니고... 이럴 때 쓰라고 있는게 wine 이다. wine은 윈도의 API를 실행할 수 있는 환경을 리눅스+X 환경에서 구현한 것이다. 그러니까 정상적인 윈도 API만 사용하는 윈도 응용은 wine 위에서 그대로 돌아간다. 그런데 그냥 맨 입에 되는 것은 아니고 너저분한 작업을 필요로 하는 경우가 많다. 남들이 이미 헛짓을 해가며 알아낸 노하우를 재활용하려고 구글신에게 물어보니 역시나... 관련 개발 메일링 리스트에 방법이 올라와 있다.

그런데 그대로 하니까 안되고 (아마 예전 버전 기준이라 그런 듯...) 이렇게 약간 뒤틀어서 하니까 되더라. 우선 처음으로 wine을 설치한 것이라면 wine 관련 파일이 아직 생성되지 않았을테니 이를 생성해준다.
$ winecfg
그냥 아무것도 안하고 닫아주면 된다. 필요한 파일은 ~/.wine 디렉토리에 만들어진다. 그냥 디바이스 에뮬레이터를 설치하면 이상한 에러가 나면서 설치가 안되는데 이렇게 해주면 된다. (이유는 묻지 말 것. 나도 모름)
$ cd 홈디렉토리로
$ cd .wine
$ ln -sf drive_c harddiskvolume1
$ cd dosdevices
$ rm c:
$ ln -s ../harddiskvolume1 c:
이제는 디바이스 에뮬레이터와 관련 이미지를 설치한다.
$ wine /다운받은_디렉토리/vs_emulator.exe
$ wine msiexec /i /다운받은_디렉토리/"Windows Mobile 6 Professional Images (USA).msi"
$ wine msiexec /i /다운받은_디렉토리/"Windows Mobile 6 Standard Images (USA).msi"
이제는 디바이스 에뮬레이터에 윈도 모바일 이미지를 넣어서 띄워본다.
$ wine ~/.wine/drive_c/Program Files/Microsoft Device Emulator/1.0/DeviceEmulator.exe c:/Program Files/Windows Mobile 6 SDK/PocketPC/Deviceemulation/0409/PPC_USA.BIN /sharedfolder . /memsize 256 /h /video 480x640x16
그럼 한참(정말로 한참 기다려야 된다...)있으면 PDA 비스름한 화면을 보게 될 것이다. 그러면 아까 CeGCC 의 test 디렉트로에서 빌드한 샘플 응용은 어떻게 돌려보나? 여기에 공유 폴더가 쓰이게 된다. 현재 디렉토리를 공유 폴더로 잡고 에뮬레이터를 띄웠으니까 (명령 라인 잘 볼 것!) 현재 디렉토리에 해당 응용의 바이너리를 옮겨 놓고 에뮬레이터 안의 윈도 모바일에서 파일 익스플로러를 띄우고 Storage Card 를 선택하면 공유 폴더가 보이고 거기서 해당 응용을 클릭해주면... 빠밤... 뜬다.

이제... 디버깅을 어떻게 할 수 있는지를 알아봐야 겠다.

신고
posted by 신묘군
기술을 얘기한다 2008.10.24 15:18
주의!!! 이 방법은 불편하니 이후 업데이트 된 글을 참조하시기 바랍니다.

현재 우분투 8.0.4 에서 대부분의 생활을 하지만 인터넷 뱅킹이나 카드 결제를 필요로하는 온라인 쇼핑은 윈도를 쓰지 않을 수 없어서 VirtualBox 2.0.2 를 설치하고 그 안에 윈도 XP를 깔아서 쓰고 있는데 역시나 인터넷 뱅킹 또는 카드 결제에 쓰이는 키보드 보안 프로그램이 말썽이다. 이 녀석들이 얼마나 꼼꼼이 체크하는지 몰라도 VirtualBox 안에서 키보드 보안 프로그램이 동작 중일 때에는 아무 키나 누르기만 하면 홀라당 죽어버린다. 윈도 식으로 얘기하면 블루스크린이 뜬다. 인터넷을 뒤져보니 여러 해결책이 있으나 가장 확실한 것은 화상 키보드를 쓰는 것이다.

사용자 삽입 이미지

화상 키보드는 이렇게 생겼다


화상 키보드란 윈도에 내장된 프로그램으로서 마우스 클릭을 이용하여 키보드 입력을 대신할 수 있다. 일단, 키보드 보안 프로그램이 동작되지 않는 상황에서는 키보드로 쭉 진행을 하다가 키보드 보안 프로그램이 트레이에 뜨면 그 때부터는 "무조건" 화상 키보드로 입력하면 된다. 물론 무지하게 감갑하다. 그래도 안되는 것 보다는 백만배는 더 낫다.

화상 키보드가 어디에 있냐구?

사용자 삽입 이미지

화상 키보드는 여기에 있다



신고
posted by 신묘군
기술을 얘기한다 2008.10.22 17:06
사용자 삽입 이미지
오늘 노트북에 좀 심한 일을 시켰다. 한편으로는 큰 프로그램을 컴파일을 돌려놓고 다른 한편으로는 VirtualBox 내부에서 마이크로소프트 오피스 설치를 시켰다. 그랬더니 CPU가 100% 즉 2 GHz로 동작을 하면서 온도가 올라것 100도를 넘었다. 깜짝 놀라서 스크린 샷을 찍었는데 어째 스크린 샷에서는 99도일 때가 찍혔네. 어쨌든 중요한 점은 이렇게 온도가 올라갔는데도 팬 속도는 평소와 별다를 바 없는 3천대의 RPM을 찍고 있다. (평소에는 3500 RPM 전후) 윈도 XP에서는 이 정도로 온도가 올라가면 팬 소리가 커지면서 오히려 팬 때문에 온도가 올라가는게 아닐까 싶을 정도로 팬이 빨리 돌았는데 아마 우분투의 기본 팬 설정이 매우 느리게 반응하도록 되어 있는 모양이다. 인터넷을 뒤져보면 ThinkPad 의 이전 모델에서는 96도 전후에서 시스템이 셧다운 된다고 하고 내가 쓰는 모델인 X61에서는 120도에서 셧다운 된다고 한다. 그래서 아직은 버틸만 하다고 이렇게 팬이 천천히 도는건가? 걱정이 된다.

일단 팬을 수동으로 돌릴 수 있는 프로그램을 구해서 설치해 두고 나중에 같은 일이 생기면 돌리던지 해야겠다. 왜냐하면 만약 큰 무리가 없는 것이라면 차라리 온도가 높은 것이 팬소리 시끄러운 것 보다는 참을만 하니까 말이다.
신고
posted by 신묘군