Category Archives: Uncategorized

역시 Mingw와 WINE은 대단했다

목요일 논술 신문크리 과기특 시험크리, 금요일 언어학개론과 디지털시스템 과제크리가 이중으로 터져 주면서 낮과 밤이 완벽하게 뒤바뀌었다. 금요일 디지털시스템 과제크리가 끝났으리라고 생각하면서 자러 가는 채비를 하는데 어째 뭔가 뒤가 구리다. 알고 보니 전자과 프로그래밍 마지막 과제를 안 끝냈다.

마지막 두 시간에 교수님께서 네트워크 프로그래밍 맛배기라고 쓰고, 소켓을 만들고 채팅 서버를 구현하기까지 강의하였다. 채팅 서버와 클라이언트를 직접 타이핑해 보고 그 결과를 스크린샷으로 찍어서 제출하면 된다. 하필 이 과제를 이야기했던 목요일 아침 수업 시간에 전날 무리하게 달렸던 논술 신문 때문에 반쯤 비몽사몽인 상태로 들어서 기억이 뚝뚝 끊겨 있지만, 그나마 강의 노트를 보면서 끊긴 기억을 복원할 수 있었다.

그런데 아뿔싸. 지금까지 내 줬던 과제는 리눅스에서도 잘만 돌았는데 맨 마지막 과제는 대놓고 Winsock 아닌가. 아 근처에 윈도가 깔려 있는 물리적 컴퓨터가 두 대나 있지만, 두 컴퓨터 모두 컴파일러를 깔기에는 역부족이다. 하나는 내 옆에 있지만 채 1GHz도 안 되는 CPU가 달려 있고, 다른 하나는 비 오는 날 밤에 나가기에는 귀찮은 곳에 있다. 일단 코드부터 다 짜면 무언가 떨어질 거라고 생각해서 코드부터 무작정 짰다.

이쯤에서 프리젠테이션의 맨 마지막 부분을 인용해 보자.

ⓒ 2009 김탁곤 교수님

마지막 강의자료 중 일부, ⓒ 2009 김탁곤 교수님

내 컴퓨터에는 만약을 대비해서 리눅스용 mingw32와 WINE이 깔려 있다. mingw의 일부분으로 ws2_32가 있으리라고 생각하는데 이게 mingw 패키지에 딸려 나온건지, 아니면 따로 깔 게 있는지 궁금해서 찾아봤다. 찾아 봐도 별 신통찮은 말밖에는 없어서 일단 mingw로 컴파일할 때 무작정 저 링크 옵션을 추가해 봤다. 가랏 i586-mingw32msvc-gcc. 결과는 어찌 되었든 성공. 링크가 되었다는 뜻이다.

결과물로 튀어나온 파일은 깔끔하게 exe 확장자도 붙어 있고, +x 권한도 걸려 있었다. 자 이제 리눅스에서 실행하듯이 파일을 실행하면 된다. 충분히 최신 배포판을 쓰고 WINE도 깔려 있다면 리눅스용 프로그램을 실행하듯 윈도용 프로그램도 실행 가능하다. 이건 리눅스 커널의 binfmt_misc 덕택이다. binfmt_misc는 커널 모듈로 존재하며, 실행 파일을 던져 주었을 때 미리 지정한 인터프리터로 실행시킬 수 있는 기능이다. WINE 역시 binfmt_misc에 등록할 수 있으며, 이 때 PE 파일의 첫 두 문자 “MZ”를 자동으로 감지한다.

WINE이 내 시스템을 망칠 리는 없고, 어차피 내가 소스를 아는 프로그램이기 때문에 과감히 클라이언트와 서버를 실행시켜 보았다. 결과는? 리눅스 프로그램과 별반 차이를 느낄 수 없었다.

가라 타이푼... 이 아니라 가라 WINE!

가라 타이푼... 이 아니라 가라 WINE!

왼쪽이 서버, 오른쪽이 클라이언트다. 실행시킨 방법에서 보이듯 저건 리눅스 맞다. exe 파일 확장자로 보면 윈도용 실행 파일 맞다. WINE의 발전한 모습을 보고 감격할만한 순간이었다. (사실 현재 WINE은 어지간한 간단한 윈도 프로그램은 100% 재현 가능하다. PE 파일을 실행시키는 기능은 다 끝났는데 크고 아름다운 윈도 API가 발목을 잡고 있을 뿐이다.)

노키아를 사야 하는 이유

아 물론 이 이유들은 다 개인적인 것이니 논리적인 반박은 사절합니다. 🙂

1. 노키아에게뇌물을 먹어서협찬을 받아서. 자신들이 효과적으로 제어할 수 있는 모바일 플랫폼이 필요해서 Qt를 만든 트롤텍을 집어삼킨 것으로 모자라서, Qt 4.5를 LGPL로 풀어서 ‘Qt는 자유 소프트웨어가 아니다’고 찌질대는 키워들까지 잠재워 주신 우리 노키아님! 게다가 트롤텍을 집어삼켰음에도 불구하고 KDE 자유 Qt 재단과 협의를 계속 이어가고 있고, 과거 트롤텍이 지원해 주던 Akademy를 그대로 지원까지 해 주고 계신 우리 노키아님! 오오! 찬양하라!

잡소리는 뜯어치우고, KDE라는 오픈소스 프로젝트 뒤에 트롤텍노키아라는 거대한 백이 생긴 것 하나만으로도 감사하고 있다. 오픈소스 가지고 사업하는 회사 치고, 커뮤니티와 제대로 대화하지 못하는 회사 없다. 사람들의 입소문 효과도 있고, 오픈소스에 투입할 ‘사람’을 구하는 데도 도움이 되기 때문이다. 아마 트롤텍이 노키아에 인수된 이후에 노키아 쪽에서 Qt 개발을 돌연 중단해 버린다거나, 아니면 Akademy 지원 중단 및 KDE 자유 Qt 재단 계약 변경과 같은 커뮤니티에 적대적인 제스처를 보였다면 난 아마 그놈으로 돌아섰을지도 모른다. 2008년 Akademy 때 노키아가 제공해 준 환영 파티 가서 배도 채웠고, 노키아 사람들의 강연까지 공짜로 들은 입장에서 차마 노키아 까기는 못 하겠다.

2. N810을 한 해동안 써 보고. 작년 Akademy 때 노키아 N810이라는 뇌물협찬품을 받아서 쓴 이후로 노키아에 관한 이미지가 확 달라졌다. N810을 가지고 놀다 보니 개방형 플랫폼의 장점이 이해가 가기 시작하였다.

노키아의 최초 인터넷 태블릿 770은 삼성 넥시오를 보고 충격받아서 만들었다는 ‘카더라’ 통신은 있지만, 삼성 넥시오와는 가장 다른 것이 개방형 플랫폼을 사용한다는 것이다. 자연스럽게 기존 리눅스 프로그램들이 포팅될 수 있었고, 이 전통은 N810까지 이어진다. 내가 열나게 까는 앱스토어 모델 따위는 garage로 이미 구현되어 있어서, 저장소 추가 몇 번만 클릭해 주면 깔 수 있는 소프트웨어들이 잔소리하지 않고 ‘넘쳐난다’.

한국에는 팔릴 걸 전혀 예상하지 않고 만들어진 기계기 때문에 기본 상태에서는 한국 로캘은 물론이요 한국어 입출력이 전혀 지원되지 않는다. 하지만 리눅스를 좀 만져 봤다면 리눅스용 한글 입력기를 손쉽게 올릴 수 있다는 사실을 깨닫게 된다. 가령 imhangul이나 나비와 같은 것 말이다. 또한 리눅스에서 글꼴 설치하듯이 글꼴 설치하는 것도 상대적으로 간단하다. 이미 개방된 플랫폼인 리눅스를 사용하고 있기 때문에, 리눅스에 대한 배경 지식만 좀 있다면 얼마든지 지지고 볶을 수 있다. 하여튼 삼성이나 LG 등이 소프트웨어의 중요성을 모르고 한국 및 세계 시장에 X같은 휴대폰을 내놓는 동안, 노키아는 소프트웨어의 중요성을 알고 있다는 것이 내 생각이다.

3. 이번에 내놓은 6210은 해외 모델의 소프트웨어를 거의 그대로 가지고 있다. 모토롤라가 한국에 진출하긴 했어도, 걔들은 엄연히 ‘짝퉁’이다. 소프트웨어를 한국에 맞게 지역화시킨 것은 좋지만, 그러면서 한국 모바일 플랫폼의 폐쇄성은 그대로 닮고 있다. 하제 동아리방 및 하드디스크를 뒤지다 보니 위피 모바일 게임 개발 책은 많이 나오는데, 설사 그렇게 게임을 비롯한 응용 프로그램을 개발해도 내가 어떻게 올리지? 현재 한국 휴대폰만 가지고는 답이 없다. 내가 위피를 싫어하는 이유 중 하나이다.

한국에 풀린 6210 리뷰를 보니 심비안을 그대로 가지고 오는 것 같다. 그 특징적인 UI를 비롯하여 심비안용 프로그램을 그대로 설치할 수 있는 것까지. 이로서 노키아 6210은 한국 최초 심비안 탑재 휴대폰이 되겠습니다. ㄳㄳ 따라서 이제 해외에서 개발된 많은 프로그램들을 설치할 때가 되겠습니다. ㄳㄳ Qt/S60을 가지고 프로그램을 개발해 볼 시간도 되었습니다. ㄳㄳ

지금 휴대폰인 W2100을 사면서, 과거 썼던 LC8000에서 포기할 수 없었던 것이 ‘러시아어 전자사전’이다. 한국 휴대폰에는 전자사전은 들어 있지만 사용자가 새 사전을 설치할 수는 없게 되어 있다. 또 몇 달 전에 지하철 노선도를 업데이트하면서 문득 든 생각이, 노선도 업데이트를 빨리빨리 하려면 데이터 파일을 사용자가 편집할 수 있도록 하는 것도 있을 것이고, 흔히 말하는 막장환승을 피하는 환승 알고리즘을 짤 수도 있을 것이다. 왜 한국 휴대폰에서는 이런 걸 못 할까는 의문이 든다. 하여간 심비안에 사용자 프로그램을 추가시키지 못하게 하는 고자짓은 안 했다고 판명났으므로, 마음대로 프로그램을 추가시킬 수 있는 폰이 생겨서 그저 고마울 뿐이다.

그런 의미에서 젭라 자비점. 24개월 노예계약이라도 좋으니까 KTF 기기변경 15만원까지만 내려가도 산다. 노키아 6210 팸플릿 보니까 자꾸 지름신만 생겨서 원.

블로그에 뻘글 쓰기도 힘든 이유

요즘 어떤 사이트든 뻘글이라도 하나 올리기 힘들어진다. 옛날에는 블로그에 짧은 뻘글도 마음대로 올릴 수 있었지만, 지금은 그런 짧은 뻘글 하나 만들기도 상당히 힘들다. 그렇다고 글 쓸 거리가 바닥난 것도 아니다. 글 쓸 거리야 주변에 얼마든지 많이 널려 있다. 그러면서도 내가 쉽사리 글을 쓰지 못하는 이유는 충분한 배경 지식이 쉽사리 안 모여서이다.

좋은 글을 쓰려면 배경 지식을 충분히 모아야 한다. 하다못해 사람들을 웃기기 위해서 글을 쓰려고 해도 충분한 배경 지식이 있어야 한다. 무언가를 설명하기 위해서 글을 쓸 때 배경 지식은 얼마나 충분히 설명할 수 있는가를 판가름내린다. 예를 들어서 다음 두 문장을 보자.

ETCS는 유럽 연합에서 개발하는 유럽 통합 신호 시스템이다.

ETCS는 1996년부터 유럽 연합에서 개발하기 시작한 유럽 통합 신호 시스템이다. 기존 유럽 국가에서 사용하였던 신호 시스템을 하나로 합쳐서 국가간 통행 비용을 줄이는 목적으로 개발되었다.

이 두 문장을 비교해 보면 두 번째 문장에 더 많은 정보가 나와 있다. 글에 있는 모든 문장이 첫 번째 문장과 같다면 글을 읽는 사람들이 충실한 글임을 느낄 수 없다. 모든 문장이 두 번째 문장처럼 길어진다면 첫 번째 문장보다는 더 탄탄한 글이 될 수 있다. 진지한 글을 쓸 때도 이런 고민을 해 보아야 하는데, 웃긴 글을 쓰는 경우에는 더 그렇다.

며칠 전 논술 시간에 했던 이야기이다. “한 사람이 공원에서 비둘기 150마리를 죽였다.” 이 결론을 가지고 이야기를 지어 보라고 했다. 먼저 이 황당한 이야기를 이해하려고 시도해 본 다음, 150마리를 어떻게 죽였을법직한 스토리를 먼저 구성한다. 그렇게 스토리를 짜 본 다음 말이 안 되는 것 같은 부분이 생기면 그 부분의 내용을 좀 더 보강시켜 본다. 이 과정을 거쳐서 글이 완성이야 될 수 있지만, 곳곳에 땜빵한 흔적이 보인다는 것은 신경에 거슬릴 수도 있다.

교수님께서 이야기한 방법은, 이야기를 각각 부분별로 나눈 다음, 부분별로 적당한 결론을 내리고 전체적인 흐름을 비둘기 죽이기로 몰아 나간다는 것이다. 각각 부분별로 결론에 하자가 없으면 전체적인 흐름을 이해한다는 이유였다. 방에 와서 룸메이트와 이야기해 보다가, 그 동안 백괴사전에서 정책과 지침을 통해서 하고 싶었던 말이 바로 이 소리였다는 것을 알게 되었다.

백괴사전으로 가도 대놓고 웃기려고 쓴 글은 사람들이 별로 재미있게 받아들이지 않는다. 대놓고 웃기는 글이라면 사람들을 무작정 까는 글이거나, 끝을 카더라로 도배하거나, 단순한 말장난만 가지고 웃기려는 글이다. 하지만 이러한 글은 처음 봤을 때는 웃기지도 모르겠으나, 여러 번 보게 되거나 다른 글과 같이 보게되면 오히려 더 재미없어질 때도 있다. 그래서 난 백괴사전의 각종 정책과 지침을 통해서 너무 대놓고 웃기는 글을 쓰기보다는 고품격 유머를 구사해 보라고 주장하는 것이다.

막상 내가 고품격으로 글을 쓰려고 해도 내 뜻대로 잘 되지 않아서 문제다. 무언가를 충분히 웃기려면 위키백과에 무언가 글을 쓰는 것 이상으로 세세한 조사를 해야 한다. 이들 정보를 가지고 잘 조합해서 엉뚱한 결론을 이끌어내야 재미있는 글이 된다. 이 과정도 마냥 성공하지만 않는 것이, 진지함과 재미있음은 정말 백지 한장 차이다. 결론을 어떻게 도출하는가에 따라서 잼이 없음 틀이 꼽히고 삭제되기도 하고, 대문에 특집 기사까지 올라가기도 한다. 관리자라는 직책 때문인지 괜히 어설프게 글을 쓰면 다른 회원들마저 글을 어설프게 쓰게 되기 때문에, 난 글 하나 올리는 것도 상당히 신중한 입장을 취하고 있다.

지금 준비하고 있는 글 중에는 ETCS/ERTMS 시스템에 관한 글도 있고, 한국 철도 동호계의 일본 의존성을 비판하는 글도 있다. 이 둘 다 충분한 자료를 모으지 않으면 772들의 떡밥으로 두고두고 쓰일지도 모르고, 열심히 글을 써 놨는데 어디가 틀렸다는 댓글이 달리면 나로서도 마음이 아프다. 자료가 충분히 모이지 않아서 이들 글을 깔끔하게 마무리짓기 힘들다는 말을 이 글로 대신하고 싶다.

* 알림: 이 글은 2009년 봄학기 카이스트 과학적 글쓰기 과목에 사용할 예정으로 쓴 글입니다. 무단 복제 및 불펌 금지.

본격 하드 망하는 이야기

넵. 역시 델 서비스는 본좌였습니다. 지난번 서비스 때 하드디스크도 이상한 것 같다고 델 쪽에서 이야기했는데, 그 때는 하드가 멀쩡했기 때문에 따로 갈아달라고 하지 않았다. 그런데 최근 들어서 이상 증상이 나타나기 시작했다. 멀쩡하게 쓴 것 같은 파일을 읽어오는 데 읽기 오류가 뜨는 걸 보고 뭔가 이상한 일이 일어났다는 것을 직감적으로 느꼈다.

하드디스크의 상태를 알려 주기 위한 SMART라는 프로토콜이 있다. 현재까지의 하드디스크 상태 및 읽기 오류 수 등을 알려 주는 데 유용하게 사용된다. 많은 운영 체제에서 SMART를 통한 하드디스크 모니터링을 지원하며, 리눅스에서는 smartmontools라는 패키지를 설치하면 smartctl이 생긴다. smartctl을 사용하면 SMART를 통해서 얻을 수 있는 모든 하드디스크 정보를 볼 수 있으며, 그 중에는 사용 시간이나 발생한 오류 수, 현재 온도 등이 있다.

SMART 명령 중에는 자가 진단 명령도 있다. 실행해 보면 하드디스크 상태가 정상인지, 읽기 오류가 발생하는지를 알 수 있다. 델 진단 프로그램이 어떻게 작동하는지는 모르겠지만, smartctl을 통해서 자가 진단 명령어를 내려 보니까 약속이라도 했다는 듯이 오류가 발생했다. 어딘가 블록에서 읽기 오류가 발생했다는 것이다. 아무튼 이 읽기 오류 때문에 멀쩡히 잘 썼던 것 같은 파일을 읽어 오지 못했던 것 같다.

그래도 SMART 결과가 의심스러워서 한 번 badblocks를 돌려 보았다. 그냥 badblocks만 실행시키면 너무나도 과묵하기 때문에 -vv 스위치는 꼭 붙여야 뭔가 결과를 볼 수 있다. 중반까지는 가서 중단될 줄 알았던 테스트가 0.1%도 못 가고 중단되었다. 즉 배드 섹터가 생각보다는 많았다는 것이다. 당장 외장하드 꺼내서 백업해야겠다.

물리적인 배드 섹터는 한 번 발생하면 빠르게 퍼져나간다. 물리적인 배드 섹터는 플래터가 긁히는 등 손상을 입었을 경우 대개 발생한다. 그런데 긁힘이란 것이 원래 그렇듯 한 번 긁히는 것이 어렵지 한 번 긁히고 나면 다른 부분이 긁히기는 상당히 쉽다. 따라서 한 번 하드디스크가 손상되었다면 무조건 교체를 해야 한다. 다행히도 보증 기간 1년이 얼마 남지 않아서 하드디스크는 적당히 교체하면 되겠다.

어쨌든 노트북 사고 1년 안에 주요 부분들이 한 번씩 순회 고장을 일으켜 주었으니 앞으로 노트북이 언제 어떻게 고장나지만 않으면 된다.