2008년 10월 18일 토요일

Another World 재탄생!!!

오늘 내가 살아서 숨쉬고 사랑을 나누고 맛있는 음식을 맛보게 하는 세상에게 감사하라

전 이제 30대를 바라보는 나이로... 어린시절 AT 컴퓨터로 많은 게임을 즐겼지요...
기억에 남는 대표적인 게임으로는

Rampage - 킹콩이라고 부르는 3인용 게임이죠
원숭의 섬의 비밀
금도끼 - 저에게 프로그래머의 꿈을 키워준 게임입니다.
폭스레인저

등등... 저의 컴퓨터는 게임기였습니다.

하지만 그 중에서 어린시절 아무것도 모르는 나에게 감동을 안겨준 게임은
바로 Another World 라는 게임인데...
사용자 삽입 이미지

대충 내용이... 어떤 교수가 컴퓨터로 뭘(뭔지는 잘 모름)하다가 이상한 세계로 차원이동을 하게 되고, 그 세계를 빠져나와 집으로 돌아온다는 겁니다. 그러는 와중에서 외계의 종족에게 도움을 받기도 하고요... 저에게 우정과 사랑의 의미를 심어준 게임입니다.

간혹 잘 지내가가도 그 게임이 하고 싶어서 여럿 검색엔진을 동원했지만 헛수고만 했었습니다.

오늘 네이버 블로그를 보다 불현듯 그 게임이 생각나서 구글 검색을 했습니다.
지금이 2008년이니 2년전이네요 그 불후의 명작 Another World 가 2006년에 리메이크가 됐다더군요... 홈페이지를 물어 물어 갔더니... 데모 버전이 있었습니다.
사용자 삽입 이미지

그 어린시절 향수를 떠올리게 하는 딱딱한 그래픽과 별 내용 없어보이지만 감동적인 스토리...
모두 완벽하게 되살아 났습니다. 변한거라곤 딱 하나 벡터 그래픽을 변경해서 고급사양에 맞는 깔끔한 그래픽을 보여주는거 외에는...

http://www.anotherworld.fr/anotherworld_uk/index.htm

혹시라도 찾는분이 계실까봐 위의 주소를 링크합니다.

잠시 변경된것을 보여드리자면
사용자 삽입 이미지


사용자 삽입 이미지

위 그림은 1991년에 만들어진 그림이고 밑에는 2006년 벡터로 만들어진 그림입니다.
게임 내용은 전혀 변한게 없습니다. 아직 데모버전이지만 8불밖에 않하니 하나 지를 생각입니다.

그리고 이 게임 엔딩음악이 기가 막혔는데요... 그 밀려오는 감동적인 게임 내용과 마지막 플레이어가 용을 타고 날아가던 장면은 엔딩 음악과 절묘하게 매칭됩니다.
찾으시는 분이 계실까봐 또 올려드립니다.



어린 시절의 감동이 밀려옵니까?

2008년 9월 14일 일요일

리눅스 유저라고? 으하하하하...

오늘은 컴퓨터 사용자로서 한마디 하겠습니다.

네이버나 다음등 인터넷 기사를 지원하는곳에 가면 툭하면 터지는게 종교 문제죠...
뭐 "예수쟁이 미워.." 라든지 "개독교" 등등... 참 눈살을 찌푸리게 하는 많은 더러운 일들이 있습니다.

참 제 3자의 입장에서, 욕을 하는사람이 더 미울때가 있지요... 사실 저는 기독교를 옹호하지도 비판하지도 않는 그냥 시시껄렁한 사람입니다. 뭔가 맞는지 틀린지 모르지요 ㅎㅎ

근데 OS계에도 그런 행태가 있으니...
윈도만 사용하는 사람을 소위 말하는 컴퓨터에 대해선 좃도 모르는놈. 이라는 생각이지요.
그래서 왕따가 싫은 소심한 오덕들은 되도 않하게 리눅스를 깔아서 뭔가 있어 보일려고 비주얼한 효과까지 최대로 활성화 시키고... 그걸 또 자랑이라고 블로그에 올립니다.
"아나콘다"가 뭔지도 모르는 사람들이요..... 참으로 웃음이 나옵니다.

그래서 난 우분투를 깔아봤으니... 리눅스 유저라고 말합니다. sudo 명령어도 모르는 사람들이요..

네! 맞습니다. 여러분은 리눅스 유저입니다. 정확하게 말하면 short time linux user가 되겠군요.. 제가 장담 호언하는데 1주일만에 다시 윈도로 돌아갈 분들입니다.

저는 윈도 옹호론자가 아닙니다. 그렇다고 리눅스 빠돌이도 아닙니다.
전... 적당한 목적에 맞는 OS를 쓰는 실용주의자입니다. 윈도만 쓸줄 알고 리눅스 못쓴다고.. 절대 뭐라고 않합니다. 리눅스만 쓴다고... 절대 뭐라고 않합니다.

근데 리눅스에 VirutalBox 억지로 돌려서 윈도로 돌리면 욕합니다. 물론 욕 얻어 먹는 사람은 리눅스에서 돌리는 응용프로그램은 Virtual Box 밖에 없는 사람이죠.. 이런 사람은 몇일 못가 다시 윈도우를 깝니다.

참 블로그를 돌아다니다 보니... 우분투..(리눅스 중에 심플한 패키지에 속하죠)를 설치하고 나서 이제 난 리눅스 유저라고 블로그에 올리고.... 뭐 자랑인듯하게 있는 말 없는 말 꺼내놓는 사람들... 그리고 윈도가 싫어졌다니.. 뭐 윈도는 어쩌고 저쩌고.. 리소스가... 뭐.. 자원 속도가 느리고.. 뭔 지랄들을 이렇게 하시는지...

이런걸 보면.. 예수쟁이는 역시 안돼... 개독교 하는 꼴과 왜 이렇게 비슷하게 보이는걸까요...
저는 리눅스 사실 잘 모릅니다. 커널 컴파일 몇번해보고 소스 좀 분석해본것이 전부인데..
제가 윈도를 쓰는거 보면 너정도 되는 인간이 왜 윈도를 쓰고 앉아있냐.... 리눅스도 편리하다... 리눅스도 왠만한거 다 된다... 뭐 어쩌고 저쩌고 지랄지랄...

* 페도라 정도 되는 리눅스에 온갖 비주얼 효과 다 활성화 시키면... 윈XP보다 훨 느립니다.
* 속도요? 리눅스에서 서비스가 뭔지 모르고 오만것 다 띄워놓으면.. XP보다 느립니다.
* 그렇다고 영어로 된 패키지 매뉴얼을 읽어보냐고요? XP는 한글로 되어 있으니 좋죠...

땅파는데 삽으로 퍼고 있는 사람한테.. 굴삭기 몰고와서 의자에 앉아서 조작도 할줄 모르고.. "포크레인이 얼마나 좋은지 몰라? 이래 뵈도 포크레인 커널 2.6이라구!!!" 라고 외치는거랑 무엇이 다르겠습니까?

물론 많은 분들은 꼭 리눅스가 필요해서 리눅스를 쓰시는 분도 있을겁니다. 그런분들은 오히려 조용합니다. 문제가 되는건 필요도 없는 리눅스를 낑낑대서 깔고, 윈도 쓰는 사람들을 욕하는 바보들이지요..

제 친구가 그랬습니다. "나 Mysql 돌려봤어.. ㅋㅋ 존나 쉬워" 휴... 그걸 어디에 쓰는건지 알만한 친구인지도 궁금합니다.

적어도 리눅스를 메인 PC로 쓰면서.. 윈도 쓰는 사람들 씹을려면... 적어도 말이죠...
커널 컴파일 한번 하고... 시중에 파는 무선 랜 카드 들고와서 한번 설치 해서
노가다로 드라이버 잡은뒤에...  네트워크 연결시키고.. 파이폭스나퀀커러로 인터넷에 접속해서 씹어줘야 좀 먹히는거 아닙니까?

그래서 전 리눅스 안씁니다. 그럴 자신없거든요...

2008년 9월 13일 토요일

NF43

제가 오늘 저와 함게 어린시절을 보냈던 세대들에게 초호화 레어급 아이템을 소개하려고 합니다.

바로 NF43 이라는 우리나라 최초의 게임음악 앨범인데요
그때 친구가 소프트액션의 어디스(Eardis)라는 게임을 구매했었는데, 그때 번들로 들어있던
오디오 타이틀입니다.

사용자 삽입 이미지


아마도 가지고 있는 사람이 별로 없을 듯한데요... 안에 들어 있는 내용은
그때 당시 유망하던 국내 게임제작사였던 소프트액션의 게임들(폭스레인져, 폭스레인져2, 어디스)의
사운드 트랙을 담고 있습니다. 지금은 소프트액션이란 게임사는 뭐 별 빛도 못보고... 좀 안타까운 케이스가 되어버렸습니다.

음악을 MP3로 떠서 올리고 싶은데 저작권 문제가 될것 같아서 못올리겠습니다. 필요하신 분은 개인적으로 연락하시기 바랍니다.

2008년 8월 23일 토요일

X-file 시즌1 에피소드3에서 찾아낸 영화배우

몇번째 재탕인지 모르겠습니다. 전 X-file 매니아입니다. 고등학교 때는 질리언엔더슨(데이나 스컬리 역)이 너무 좋아서 계속 볼려고 했었는데, 대학에 와서는 내용이 너무 맘에 들어 DVD를 소장할 정도로 좋아합니다.

몇일전부터 또 x-file을 보고 있는데.. 가끔 에피소드에서 낯익은 인물들이 보이네요

사용자 삽입 이미지
이 남자 본적 있나요?

이 에피소드에서는 FBI의 지부장 정도급으로 나오면서, 스컬리와 멀더가 하는일을 비꼬는 역할을 합니다.

물론 정확하지는 않습니다만,

이퀄리브리엄에서 크리스챤베일(프레스턴 역)의 마지막 상대가 되는 사령관 역을 맡았죠..

제 생각이 맞나요? 좀 늙은것 같기도 하고



다음 인물입니다.
사용자 삽입 이미지

이번 에피소드에서 사람을 공격하는 범인으로 나옵니다.

이 남자는 톰 행크스 주연의 그린마일에서 왕따 간수로 나오죠. 결국에는 총에 맞아 죽는 역할인데, 영화 보면서 상당히 짜증 났던 인물입니다.








뭐 이름까지 찾아서 누군지 그리고 그 영화에 장면도 첨부하면 좋겠지만, 괜히 그런거에 시간 털리긴 싫군요.
맞으면 맞는거고 아니면 아닌거고...

앞으로도 계속 비슷한 사람들 나오면 글을 올리도록 하겠습니다.

2008년 8월 16일 토요일

Eclipse + autoftp

이클립스는 엄청나게 방대하고 편한기능을 가지고 있는 JAVA IDE 입니다. 뭐 요즘은 자바를 뛰어넘어 각종 언어 개발툴에 도전장을 내놓은 상태죠. 누가 뭐라고 해도 JAVA 개발에서는 Eclipse 만한게 없을 것 같습니다.

더군다나 이클립스는 공짜라는 거죠... Visual Studio .net에 비하면 가볍기도 하죠... 하지만 윈도우즈 프로그램을 이클립스로 개발하는 사람은 별로 없는 것 같습니다.

전 JAVA를 잘 모릅니다. 전혀 모르는건 아니고 아직 이렇다 할 큰 필요성도 못느끼고 손댈일이 별로 없어서 잘 안씁니다. 어느정도 프로그램 만드는건 가능합니다.

근데 이클립스 이야기를 왜 할까요? 앞에서 이야기 했다시피 이클립스는 다른언어 개발툴로도 쓰이는데 저는 주로 php에 사용합니다. 그렇다고 해서 제가 웹개발자는 아닙니다.

그 동안 php 페이지를 만들땐 나모웹에디터 + 울트라에디트를 썼습니다. 일단 디자인 하는데는 나모웹에디터가 가장 편하고요... 단순 코드로 된 페이지는 울트라에디트가 편하더군요.. 이 두가지를 할려면 드림위버를 쓰는것도 좋은 방법이겠지요... 근데 나모웹에디터, 울트라에디트, 드림위버 어느것도 php 문법의 인텔리 센스(자동완성기능)을 지원하지 않습니다.

이클립스는 지원하더군요. 참 멋진녀석이 아닐 수 없습니다.

php 개발을 하다보면 ftp로 직접 연결되는건 정말 필요한 기능입니다. 그 이유는 저같이 게으른 개발자들은 침대에 누워서 노트북으로 하는걸 즐기거든요. 막상 데스크탑에서 개발을 하더라도 데스크탑에 php가 구동되는 웹서버를 구축하는 경우는 별로 없습니다. 여느 웹개발이 그렇듯이 서버는 원격에 있는 경우가 대부분인데요... 원격으로 작업할 때는 ftp만한게 없죠.

물론 CVS라는 것을 사용해도 괜찮습니다. 근데 CVS의 주목적은 원격 개발에 있는 것이 아니고 팀개발에 있는것이기 때문에 설정도 복잡하고... 물론 서버 설정도 무쟈게 짜증납니다.

그리고 설정을 제대로 했다고 해도 사용하는데 피곤하고, 저장하는 바로바로를 웹페이지로 적용하는것도 귀찮죠.

그래서 이리저리 이클립스에서 ftp를 사용할 수 있는 방법이 없는지 찾아봤습니다. FTP WebDav라는 플러그인을 찾았습니다.

근데 이 플러그인 개발 프로젝트는 3.2.x 대에 종료가 되고, 이클립스에서도 공식지원하지 않더군요... 그래서 찾아낸것이 자바포럼의 autoftp 입니다. FTP WebDAV라는 것은 써보지 않아서 뭐가 어떻다라고 말씀 드릴 수는 없겠지만 네이버 지식인에 올라온 글을 보면 나름대로 "불편함"이 존재하더군요..  제가 autoftp를 사용해본 결과 꽤 만족합니다. 아래 파일을 받아서 압축을 풀고 이클립스 플로그인 디렉토리에 넣으면 자동으로 추가 됩니다.


플러그인을 보자하니 이전에는 자바 포럼에 가입해야 쓸수 있었던것 같습니다. 근데 지금은 자바 포럼이 없어졌네요.

아래 그림이 autoftp를 실행시킨 화면입니다. 콘솔창 옆에 아주 예쁘게 떠 있네요... 프로젝트 속성에 들어가시면 원격 서버에서 대한 설정을 할 수 있습니다.

사용자 삽입 이미지
 써보니 상당히 괜찮네요... 이제 이클립스를 본격적으로 사용해 볼 수 있을것 같습니다.

승리한 자는 억울한게 없다.

그 동안 열심히 사느라 블로그에 오랜만에 글을 씁니다. 오늘 아는 친구랑 대화하다가 참 어이없는 소리를 들었습니다.

이 친구는 군대에 있을 때 한 기수(2주) 선임이었고, 군대에서 매우 친하게 지내다 사회에서 친구로 지내고 있습니다. 이 친구는 제대 하고 얼마뒤에 영국으로 유학을 갔는데, 유학목표는 스포츠매니저였습니다. 워낙 스포츠를 좋아하던 친구라 영국에서 프리미어 리그등 각종 축구 경기에 대한 기사를 썼고, 지금은 프리랜서 기자로 활동하고 있습니다.

네이트온에서 대화를 하는데 한국이 싫답니다. 이유를 물었더니 챗바퀴같은 삶이 싫고, 자기가 하는일에 특성상 접대를 많이 해야하기 때문에 술을 많이 먹어야 합니다. 그리고 한국에서 일하는 사람들은 매일 야근에 집에 갈 시간도 없고, 노력에 비해 댓가가 너무 적다는 것이 그 이유였습니다.

"이단자 하나 났구만..." 하고 그냥 이야기를 넘겨버렸지만 마음속에 뭔가 찝찝한 것이 남아있군요. 그리고 웃긴건 아직도 자신이 조국이 원하는 인재라고 생각하는 것이었습니다.

저를 비롯한 IT계열에 종사하는 사람들은 말 그대로 "야근이 생활"이죠. 다른 사람이 보기에 빵빵한 직장인 "삼성전자"에 근무하는 친구들도 아침 6 출근에 퇴근은 기약 없다고 합니다.

그렇지요... 아무리 좋은 직장을 가지고 어떤 일을 하던지 간에 세상에 힘들지 않은 사람이 있을까요? 영국에서 보고 듣고 느낀것이 단순히 일찍 퇴근하고 가족과 함께 보내는 시간이었다면, 그 친구는 유학의 목적을 잊어버린게 아닌가 합니다.

너무 밝은곳만 봤을까요? 과연 영국에는 모든 사람들이 일찍 퇴근하고 가족과 함께 보내는 시간 많고, 댓가도 넉넉하게 받을 수 있을까요?

바꿔 말한다면, 모든 한국 사람들은 아침일찍 출근에 퇴근은 기약없고... 개인 시간도 없는데 돈은 조금 받을까요? 그리고 그렇게 받는 사람들이 이런 현실에 모두 불평을 하고 있을까요?

물론 사람마다 중요하게 생각하는 가치가 모두 다르겠지요. 하지만 비록 한국사회가 그렇게 돌아간다고 해서 한국이 싫다는건 좀 납득이 가지 않습니다.

만약에 자신이 한국에 와서도 일 조금하고 돈을 많이 받을 수 있는 능력이 되었다면, 한국이 싫다라는 소리를 않했을겁니다. 그때쯤 되면 진짜 조국이 원하는 인재가 될수 있었겠지요.


저도 마찬가지입니다만, 사람이 불만을 갖는다는건 자기가 처한 상황이 좋지 않다는 이야기고, 다르게 이야기 한다면 좋은 상황을 만들지 못하는 자기의 능력을 불평하고 있는것이지요.

이런 현상은 제 친구에게서 느낀거지만, 주위에서 많은 것에서 이것과 비슷한 냄새가 납니다. 어쩌면 이 글을 읽으시는분들은 저를 개인주의자 또는 이기주의자라고 생각하실지도 모릅니다.

저는 기름값이 올라도 물가가 올라도 대통령이 누가 되던 그리고 쇠고기가 수입되던 아무런 신경쓰지 않습니다. 물론 전혀 그렇지 않다는 이야기는 아니고요, 심각하게 받아드리지 않습니다.

언제나 이런생각을 하게 돼죠. "기름값이 오르면 기름을 아껴쓰자... 그래도 써야되면 기름값에 신경쓰지 않을 정도로 많이 벌자" 이런식으로 생각하면서 스트레스 받지 않으려고 합니다.

물론 제가 아직 어리고 앞으로 살아야 할 날이 더 많아서 이렇게 긍정적으로 사는것일지도 모릅니다. 인정하긴 싫지만 언젠가 저의 인생이 결정되는 그날이 온다면, 전 이렇게 살겁니다.

"기름을 쓰지 않아도 밥은 먹고 살수 있어..." 라고요. 다른사람들은 저를 이단으로 보실수도 있겠네요.


저는 이런 글을 쓰면 답답한 마음이 풀릴것 같았습니다. 하지만 글을 계속 쓸수록 답답한 현실이 보이는것 같기도 하고요, 불확실한 미래가 두렵기도 합니다.

만약 암울한 미래가 된다면 어느 순간 저도 촛불 집회장에 나가 있을지도 모르겠네요.


생각이 제대로 정리는 안되는것 같지만 더 신경쓰고 싶진 않습니다. 그 친구와는 아마 다시는 이야기를 하고 싶지도 않을겁니다. 자기가 해야만 하늘일을 걱정하는 친구고, 유학가서 헛돈만 쓰는 친구니깐요.

저는 내일 일어나서 운전을 하면서 불만을 가지지 않도록 노력해야겠습니다.

2008년 7월 20일 일요일

VB.net 에서 시리얼 통신 에러 발생

출차 : Naver Cafe, I Love Visual Basic

시리얼 통신 및 스레드에 값을 객체로 넘길 때 발생하는

invoke error 해결 방법

Dim strRFID as string=""

Private Delegate Sub MyDelegate()

Private Sub barComm_dataReceivced(Byval sender as System.Object, _
 Byval e As System.IO.Ports.SerialDataReceivedEventArgs) _
 Handles barComm.DataRecevced

Try
 strRFID = DirectCast(sender, IO.Ports.SerialPort).ReadExisting()
 Dim mydlg as Mydelegate
 mydlog = New MyDelegate(AddressOf inText)
 Me.TxtReIssueRFID.Invoke(myDlg)
Catch ex As Exception
 MessageBox.Show(ex.Message)
End Try
End Sub

Private Sub inText()
 Me.txtReIssueRFID.TextVAlue = strRFID
End Sub


 

2008년 5월 27일 화요일

IPAQ Hx2000 시리즈에 Windows Mobile 6.1 설치하기

요즘은 화장실 가는게 즐겁습니다. 그 동안 묵은 변비가 해결된건 아니고요, 정확하게 말하자면 화장실가서 시간 때울만한 수단이 생겼기 때문이지요.. 뭐 그렇다고 해서 그렇게 오래 앉아 있는건 아닙니다.

얼마전에 자취방에 무선 AP를 설치해서 PDA를 들고 들어가면 앉아 있는동안 인터넷을 즐길수가 있거든요

근데 PDA용 페이지를 지원하는 사이트는 그렇게 많지 않습니다. 화장실에서 한가지 바람이 있었다면, 네이버 웹툰을 PDA로 보는것이었는데요... PDA로 보기는 쉽지 않습니다. 그래서 자료를 찾던 과정중에 Opera Mini가 풀브라우징이 된다고 하더군요... 이놈의 풀브라우징이라는것은 심지어 PDA형 휴대폰의 성능테스트에 포함될 정도로 요즘에 크게 PDA사용에 영향을 미칩니다.

제가 사용하는 PDA는 총 3종류입니다. Nexio S155, Hx2790, Hx4700 인데요.. S155는 장식용으로 변해서 연구실에 박혀 있고요, Hx4700은 선배것을 실험용으로 빌려놓은 것이라 들고다니지 않습니다. 그래서 HX2790을 주로 사용하는데 이놈으로 말할거 같으면 꽤 많이 팔린 HX2000 시리즈의 가장 큰 형님뻘 되는놈이지요... 살때는 가격도 엄청났습니다.

여기에 풀브라우징을 한번 해볼꺼라고 구글을 쑤시고 다녔더랬습니다. 간혹 todaysppc에 들려서 정보를 확인하기도 하지만, 크게 도움은 안되더군요... 그러던 와중에 어떤 멋있는분이... HX2790에서 풀브라우징을 한 화면을 캡쳐해서 올렸던데.. 그게 글쎄... WM 6.1 이었습니다.

사실 WM 5.0 도 PDA 운영체제로 쓰는데 지장은 없지만. WM 6.x 버전의 깔쌈함에 꽂혀서 ipaq 212를 지를려고 벼르던 중이었는데... 왠걸 HX2790에도 WM 6.1이 돌아가고 있었습니다. 크아~~

물론 저의 가여운 2790은 212에 비하면... 천민수준이죠... 화면사이즈 부터... ㅠㅠ

하지만 지름신이 강림할때는 그만큼의 정성이 필요하기 때문에, 지르기가 힘들었습니다. 사실 눈 딱 감고 지르면 지르겠지만... 저는 본능보다 이성이 몸을 지배하기 때문에 차마 거기에 돈을 투자하고 싶지 않았습니다.

그런데... 2790에서 WM 6.1이라니... 그나마 지름신의 강림을 늦출 수 있는 좋은 수단이 생겼습니다.

뭐 전에 IPAQ의 하위레벨을 만져보지 않은게 아니라 대충 어떤 방법으로 설치해야 하는지는 머릿속에 있었습니다. 중요한건 6.1 커널이었는데 어떤 친절하신분이 다 만들어놓으셨더군요(이분에게 축복을....)

제가 이미 업그레이드를 하고 글을 쓰는것이라서 중간중간에 빠져먹는 내용이 있더라도 이해를 부탁드립니다.
많은 정보는 http://blog.pklove.com 과 구글에서 얻었습니다.

http://rapidshare.com/files/111791468/Tommy_1_5_2008.rar.html

일단 롬을 위의 주소에서 다운로드 받습니다. 2008년 5월 1일자 입니다.
어떤 페이지를 찾아보니깐 6.0으로 일단 업그레이드를 하고 6.1로 바꿔라는 당치도 않은 얘기가 있던데

그냥 5.0이건 2003이건 그대로 진행하면 되겠습니다.
다운로드 받고 압축을 풀면, 여러가지 파일들이 나오는데 그놈들이 뭐하는놈들인지는 신경쓰지 맙시다.

그 다음 PDA를 업데이트 할 준비 상태로 만들어줘야 합니다.

여기서 많은분들이 일반적인 방법으로 PDA를 켜고 hpRUU.exe 를 실행하서 버전이 맞지 않는다니.. 잘 안된다는 말을 하는데... PDA를 롬 업데이트가 가능한 상태로 만들어줘야 합니다.
1 .그 상태를 HX2790에서는 PreBL(Pre Bootloader)라고 합니다. 그곳으로 진입하는 방법은 contact + itask +
    power 키를 누른상태에서 똥꼬를 쑤셔주면 됩니다. 그러면 화면 하단에 PreBL이라는 글자가 나오면서 화면이
    멈출겁니다.
2. 그 후에 크래들에 연결하면 되는데 여기서 ActiveSync를 강제 종료하고 나서 크래들에 연결해야 합니다.
    그럼 PC에서 연결되었다는 소리가 나오고 거기서 hpRUU를 실행하고 ipaqrom.nbf를 선택해 롬을 PDA로 전송
    하면 되겠습니다. 약 15분이 소요가 되고요...
3. 롬업데이트가 끝나면 callendar + messaging + power 버튼을 누른채로 똥꼬를 또 쑤셔 줍니다. 그러면 화면에
    PS Format이라는 메세지가 나오면서 한참뒤에 wm 6.1 이 부팅됩니다.

참 리눅스를 올릴때보다는 엄청나게 간단하군요!

그리고 중요한것은 2번과정전에 paging 사이즈를 결정해주는 과정이 있는데 2790을 사용하시는 분은 굳이 그 과정을 거치지 않아도 됩니다. 다른 장치 쓰시는 분들은 http://blog.pklove.com 에서 정보를 얻길 바랍니다. 그 블로그 주인께서 잘 정리해놓으셨습니다.

그리고 이 롬은 영문롬입니다. 한글 입력도 안되는... http://blog.pklove.com 에 가시면 블로그 주인께서 한글 입력이 가능하도록 설치파일도 만들어놓으셨습니다.

여기까지 하고 나면 뒷일은 여러분들의 몫입니다. 이거 하다가 PDA를 날려먹진 않겠지만... 복구방법에 대해서는 이 글에 쓰지 않겠습니다. 롬을 백업해야겠다고 생각하시는분은 제 블로그를 뒤져보시면 리눅스 포팅하는 방법에 나와있습니다. 백업과 복구는 http://www.handhelds.org 에 가시면 자세히 설명되어 있습니다. 참고로 영어 사이트입니다.

여기서 탄력받아서 오늘 낮에는 HX4700 역시 업그레이드 했습니다. HX4700에 관한 정보는 http://cafe.naver.com/hx4700 에 있습니다. 회원 가입해야됩니다.

제가 블로그에 글을 쓰면 참 잡다한 소릴 많이 하는데 이해 하시고 모두 업그레이드에 성공하길 바랍니다.

텍스트 큐브에서 캐시 삭제 방법

몇일 전 블로그 방문이 뜸한 사이에 엄청난양의 스팸 댓글일 쌓였더군요...
간혹 스팸 댓글이나 트랙백이 쌓일때마다, 저의 블로그의 방문자들이 스패머라는 사실에 눈물이 납니다.

댓글수는 약 3만개 정도 되더군요.. 도대체 무슨 프로그램을 쓰길래 그정도의 댓글을 날리는지...
정말 존경스러운 인물들입니다.

예전에는 그나마 스팸이라고 딱 알아먹기 쉽도록 영어로 되어 있더니...

구글 번역기를 쓰는지 어설픈 한국어의 댓글이 달리더군요... 관리자 페이지에서 삭제 할려니 3만개를 언제 다 삭제하나요... 짜증이 밀려오기 시작합니다.

문제를 해결하기 위해서 mysql에 접속해서 comment 관련된 필드에서 범위를 지정해서 댓글을 모두 날려버렸습니다. 진지한 마음으로 댓글을 쓰신 분들의 댓글은 잘 남겨두었습니다.

근데 이상한 현상이 발생하더군요... 분명히 데이터베이스에서는 삭제되었는데 최근 댓글 목록에는 계속 그 쓰레기같은 글들이 남아있는겁니다. 그리고는 관리자로 로그인 할 때는 그 글들이 또 안보이고요...
이걸 발견했을 때 너무 피곤한 상태였기 때문에... 잡아낼까 하다가 그냥 놔뒀습니다.

오늘 또 잠깐 블로그에 들어와봤더니 그 최근 댓글이 보입니다. 짜증이 팍팍 나네요...
대충 그동안의 경험을 미뤄볼때 캐쉬 문제임을 짐작하고 리눅스 서버에 접속했습니다.

삭제 방법은 다음과 같습니다.

blog_dir/cache/1 안에 들어 있는 숫자로 된 파일들을 모두 삭제합니다.

삭제 했더니 말끔히 지워졌네요... 이런 경험을 겪고 있는 분이 계실까봐 포스팅합니다.

밤이 늦었군요... 자야하는데, 지금 막 노트북에 윈도우xp 를 설치해서 세팅중입니다.. 피곤해 ㅠㅠ

2008년 5월 12일 월요일

We are the world

오늘 들을 아름다운 노래는... We are the world
1985년인가 6년인가.. 미국의 여러 유명 가수들이 USA for Africa라는 그룹을 만들어
노래를 불렀다. 공연 수익금은 아프리카 난민에게 전해졌다고 한다..

내가 좋아하는 신디크로퍼와 마이클잭슨도 있다.
 

[Flash]

2008년 4월 29일 화요일

개발자의 길을 걷는 대학원생의 자세

IMF가 오기전 96,97년도만 해도 대한민국은 벤처기업의 천국이었지요. 제가 갓 고등학교를 입학한 때로, 친구들끼리 나중에 벤처기업 하나 만들면 성공한다 라는 농담까지 나오던 시절이었습니다. 그런 트랜드를 이끌어 오던 많은 사람들 중 하나가 한글과 컴퓨터의 이찬진씨와, 안철수바이러스 연구소의 안철수씨죠.

저 같이 컴퓨터에 관심이 많았던 어린 아이들은 그런 사람들을 보면서 벤처기업 사장을 꿈꾸고 있었습니다.

그런 도중 IMF가 오면서 벤처기업 거품이 사라지고, 실속이 없던 벤처기업들은 추풍낙옆처럼 떨어지고 말았습니다. 한 때는 벤처기업 사장을 꿈꾸던 어린 학생들이 더 이상 벤처(Venture)랑 관련없는 안정적인 직장에 더 몰두하는 세대가 오고 말았습니다.

저 역시, 컴퓨터 관련 일을 해야겠다는 생각을 어디엔가 접어두고 사관학교를 갈려고 했었습니다. 지금은 물론 IT쪽 관련으로 일을 하고 있습니다. 그 때 사관학교에 낙방한것이 얼마나 다행인지 모릅니다.

저는 2000년도에 대학에 입학하였는데, 그 때까지만 해도 사회의 IMF여파가 대학까지 오지 않았을 때죠. 선배들은 늘 1학년때는 놀아도 돼! 라고 말하였고, 선배들 말대로 세월아 네월아 지내면서 군대가는게 1학년 남자들의 생활이었습니다.

지금은 상황이 많이 바뀌었는 것이, 1학년들이 밤 늦게 노는건 찾아볼 수 없고, 수업시간 중간 중간에는 당구장 대신 도서관에 가더군요. 세상이 어렵기 때문일거라고 생각합니다. 우리과 1학년 학생들에게 진로를 물어보면 20%정도는 공무원, 80%정도는 "삼성"이라고 말을 하는데, 선배의 입장으로써 가슴이 아픕니다. 어찌하여 저런 어린 애들에게 어려운 세상을 겪게 만드는지요.

우리과 학생들의 대부분의 진로를 살펴보면 50% 이상이 개발자로 일하는것이더군요. 물론 다른일을 할 수 있겠지만, 제가 봤을때는 개발자로 사는것이 다른일을 하는 것보다 전공을 살릴 수 있고 그에 따라 임금도 많이 받는것으로 보입니다. 간혹 선배들이나 친구들 중 개발자는 개고생하고 돈은 적게 받는다는 얘기를 하지만, 이런 사람들과는 개발자에 대해서 논하고 싶지 않군요.

2,3학년에 진급하게 되면 다른과도 마찬가지지만 컴퓨터공학과에서는 눈으로 볼 수 있는 무엇인가를 만들어내는 과제를 많이 하게 됩니다. 여기서 미래가 있는 사람과 없는 사람이 갈려지더군요. 제가 봤을 때는 이런 과제를 100% 소화시키는 학생은 전체의 20%도 되지 않는 것 같습니다. 100명이라면 20명정도죠. 하지만 여기서도 참 다행인것이 이 20명이 여러집단에 분산되어 분포되어있는 것이고요, 그런 학생들이 포함되어 있는 집단은 과제를 패스 할 수 있다는 것이지요. 무슨 말인지 이해가십니까?

대부분의 큰 과제는 3~4명 정도가 팀을 이뤄 진행을 하는데, 그 중에서 과제를 이해하고 과제를 수행할 능력이 되는 학생은 전혀 없거나 1명입니다. 오히려 교수들도 팀을 구성할 때 이런 부분을 고려합니다. 교수들의 의도야 1명이 나머지를 독려하며 가르치면서 과제를 진행하는 것이겠지만, 학생들의 입장에서는 자기팀에 "과제 능력자"가 없을까봐 조마조마한 눈치도 보입니다. 그런식으로 지내다가 4학년이 되고 4학년때도 그렇게 행동하면서 졸업해버리는거죠.

이런부분은 학부과정때만 있는것이 아니라는게 저에겐 더 큰 지탄으로 다가옵니다. 요즘같이 이공계가 멸시받는 시대에서는 그저 "대학 4년 공부하면서 학과 성적 잘 받아서 대기업에 취직하면 성공한 케이스"라는것이 널리 인식되고 있기 때문에, 대학원 과정에 진학하는 학생들이 5~6년전에 비해서는 엄청나게 적습니다.

대학원에 진학하는 학생들을 보면 그래도 자기 신념이 있고, 학부생때 날던 애들이 많습니다. 저 역시 대학원에 진학하기 위해서 "SSM(Samsung Software Membership)"을 박차고 나올 정도로 저에 대한 신념이 굳은 사람이었습니다. 대학원에 와서도 항상 신념을 지키려고 노력했고요...

근데 세상 어디를 가나 어느 집단에 포함되나 Pure는 없다는 생각이 들더군요. 그런 대학원생들 와중에도 "취업이 안되서", "두 발자국 나가기 위해서 한발자국 쉬자"라는 논리를 가진 학생들도 대학원에 온다는거죠. 참 우울해지기 시작합니다.

대학원에서는 학부때 하던 과제보다 스케일이 큰 과제를 진행하는데, 여기 역시도 과제 제출하기 몇일전부터 오만 연구실을 뛰어다니면서 과제의 답을 찾는 학생들이 많이 있었습니다. 서로 얼굴 붉히는 일이 싫어서 그냥 그런갑다 하고 넘어갔는데, 기분 나쁜건 어쩔수가 없었습니다.

결국 대학원 석사과정 2년을 보내면서 C 언어 하나 제대로 익히지 못하고, 어디서 배껴 쓴 논문 하나 들고 나가는게 고작인 학생들이 존재하는 겁니다. 제가 이 글을 쓰는 이유가 빠졌군요. 몇일전 참 어이없는 상황을 겪고 어찌할바를 모르겠습니다.

저는 학부/석사과정을 거치면서 대한민국 개발자의 미래를 지켜보고 있습니다.

대학원에서 실적이라면 바로 논문인데요, 서른살이 가까워지는 이마당에 자존심 없이 행동하는 몇명 이들이 보였습니다. 다른 사람 논문을 자기 이름으로 발표하고 그걸로 학교에서 지원을 받습니다.

지금 사회적으로 큰 문제가 되고 있는 어떤 현상의 원인을 보고 있는것 같습니다. 학교에서 그 나라의 미래를 본다는 말이 이렇게 정확하게 매칭되기도 힘들군요 ㅎㅎ.

제가 "난 정말 자존심 상해서 그런짓 못하겠다."라고 얘기하면 "세상이 그래 다른 사람 다 그러는데 나만 안그러면 바보 되잖아" 이런 뻐꾸기를 날립니다. 제가 바보였던 것이었습니다. 과제가 나오면 2~3명을 이끌고 과제를 수행하고, 학위 논문을 쓰기 위해서 몇날 몇일 잠을 못자고, 학교에서 논문에 대한 지원을 받기 위해서 돌머리에서 나오는 영어단어 찾아가며 논문 쓴것이 다 바보같은 짓이었다는 것입니다.

그리고 더욱 큰 문제는 주변 사람들이 오히려 그런걸 당연하다라고 생각하는 것이 절 더 바보스럽게 만들고 있습니다. 어쩌다가 이런 세상에서 살아가야 하는지 모르겠습니다.

더 깊게 생각해본다면 이런 문제는 학교에서만 발생하는 일이 아니고, 사회 전반적인 문제라는 점에서 저에게 "바보"라는 단어를 말했던 사람들을 처단하여 더러운 싹을 짤라버리고 싶군요. 하지만 전 문화인이고, 지식인이기 때문에 상상으로만 처단하고 있습니다.

이런 행태를 만들어낸 건 누굴까요... 혹자들은 얘기합니다. 사회가 문제이고, 학교가 문제이고, 기업들이 문제이다.

예, 예 다 옳으신 말씀입니다. 이런말을 하는 사람들에게 몇마디 전해주고 싶군요, "우리가 이런 세상에 사는 건 당신 부모가 당신을 낳았기 때문이다."라고요.

제 생각으론 "니 탓이오"라는 문제가 고쳐지지 않는한, 대한민국 개발자나 아니면 또 어떤 문제라던지 개선되지 않을 겁니다. 가장 중요한건 당사자인 우리의 생각을 바꾸는 것이라고 생각합니다.

어짜피 공대, 컴퓨터공학과를 오는 것 자체는 행정직원이 되기 위해서 오는건 아닐겁니다. 나름대로 목표가 정해져있었겠지요. 만약 목표도 없이 대학을 선택하고 공부하는 것이라면 그런 사람들은 우리 사회의 잉여인간으로 놔두고 싶습니다.

제 생각을 요약하자면, 일단 개발자의 길을 걷기로 마음먹은 우리 학생들은 근성이 부족합니다. 자기가 무엇인가를 해내고 다른 사람을 이끌 수 있으며, 열심히 하고자 하는 학생을 바보로 만들지 않는 마음을 가져야 할겁니다.

그리고 그런 생각이 없는 사람들은 사회를 위해서 제발 조용히 있어줬으면 합니다. 자기가 하는 행동이 떳떳한양 열심히 하는 사람을 비난하게 만들고, 사회를 거꾸로 돌리는 ... 이런 말을 몇백번 해봐야 그런 사람들은 자기가 그러고 있는지도 모를겁니다. 제 등뒤에서요... 또 욕이 나올려고 하는군요.

어째뜬, 가장 중요한건 자신의 마음가짐이라고 생각합니다. 사회가 아무리 엉망이 되더라도 "나 하나라도 열심히 하자"라는 생각... "노력은 배신하지 않는다"라는 생각... 이런 생각만이 이 썩은 사회의 치료제가 될 것 같습니다.

저 역시 이 글을 쓰면서 저의 마음을 새로 추스리려 합니다. 언젠가는 결실이 맺어지겠지요..

노력하는 사람이 바보가 되지 않는 세상을 위해서...

TCPMP 스킨 프로젝트에 관해서...

언젠가 TCPMP 소스 수정에 대한 글을 포스팅 하고, 아무 생각없이 세월을 보내고 있었습니다.

역시 인터넷이 좋은것이라면, 내가 쓴 별거 아닌 정보도 다른사람에게는 도움이 될 수 있다는 것입니다.
많은 분들이 TCPMP에 스킨을 넣은 그림을 보셨고, 몇몇 분들이 프로젝트에 참여하고 싶다고 의사를 밝히셨습니다.

저도 워낙 바쁘게 하루하루를 사는지라 블로그에 글 한자 올릴시간이 없고, 간혹 블로그에 들어와서
방문자 수 확인하는게 전부라 막상 댓글을 달아놓으신 분들을 보면 괜히 미안한 생각도 듭니다. 몇분 안되지만요...

저는 이미 TCPMP에 스킨을 넣어서 과제로 제출해놓은 상태입니다...

중요한건 스킨을 동적으로 바꿀수 있는 기능을 넣는 것인데요... 이왕 시작하려고 마음 먹은거 제대로 해볼려고
몇일전부터 준비중입니다.

근데 엄청난 문제에 봉착하게 되었습니다. 많은 분들이 알고 계시다시피, TCPMP는 CorePlayer로 이름이 바뀌어서 사용화 되고 있고요, 오픈 소스 프로젝트는 BetaPlayer로 진행된다던데 BetaPlayer 프로젝트 홈페이지에는
언제인지 부터 모르게 계속 Comming Soon 만 나와있습니다. 아무래도 시작할 마음이 별로 없어 보입니다.

일단 프로젝트를 진행할려면, 플레이어를 전체 다 만들지 않는 이상 TCPMP 소스를 수정해서 사용해야 할 것 같은데, 문제는 라이센스죠... 정말 TCPMP의 소스는 하나도 건들지 않고 플러그인만 만들어서 배포하는 거라면, 라이센스에 큰 문제가 없겠지만, 인터페이스를 바꾸는 것이라 TCPMP 소스를 만져야 합니다.

그래서 몇일전에 Picard 님에게 라이센스에 관한 메일을 보냈더니... (license@corecodec.org) 존재하지 않는 e-mail 주소라고 답변이 왔네요... 일단 프로젝트를 진행 할려면 라이센스 문제 해결이 최 우선이라 보고요,
라이센스만 해결된다면 그 이후의 상황은 간단하게 풀릴 것 같습니다.

혹시라도 TCPMP 제작자인 Picard님의 e-mail 주소를 아시는 분이나, contact이 가는하신분은 댓글 부탁드립니다. 그리고 조만간에 프로젝트를 진행 할 수 있도록 준비하겠습니다.

2008년 4월 6일 일요일

툴팁이 작업표시줄 뒤로 숨어버릴 때...(tooltip that hidden behind taskbar)

요즘 공부하랴 일하랴 정말 정신이 없습니다.

몇일전 연구소장으로 부임한 연구소에서 개인용 노트북을 하나 지급받았는데요,
후지쯔라이프북 E8140 이 바로 그놈이지요...
적당한 사이즈에 좋은 성능까지... 그리고 후지쯔의 컨셉인 다양한 포트지원 등등...
개발자가 들고다니기에는 더나위 없이 좋은 노트북이라고 할 수 있죠...
그런데 이놈도 치명적인 문제점이 있었으니... 기본 OS 가 Vista 더군요.. 큭..
뭐 Vista에서도 개발은 충분하겠지만, 대략 XP에서 안정적으로 돌아가는것이 더 많고...
윈도우즈 메모리쪽을 연구하는 우리팀에서는 Vista 위에서 작업하기에는 문제가 좀 있더군요...
그래서 XP를 깔려고 시도를 했습니다. 근데 산넘어 산이라고 했나요...
오리지날 XP 설치 시디는... 최신 SATA 드라이버가 없어서... 아예 설치 단계에서 하드를 못잡더군요...
그래서 Fujitsu 홈페이지에 가봤더니... 플로피 디스크를 이용해서 드라이버를 먼저 설치 하랍니다.
근데, 노트북에는 플로피 디스크 드라이버가 없었습니다. 그래서 Black Edition 이라는 Repacking 된
XP를 깔아봤더니 잘 깔리는 겁니다.

사실 전 Repacking 된 XP를 별로 안좋아합니다. 만든 사람의 말로는 성능을 최대화 했다는 둥...
필요한 프로그램을 미리 설치했다는 둥.. 말이 많지만 이부분에 대해서는 상당한 논쟁의 여지가 보이고요
그 중에서도 레지스트리를 마음대로 건들여 놨다는건 정말 이해할 수 없는 부분입니다.

어떤 레지스트리를 건들이던간에 side effect를 고려하지 않는다는것이 큰 문제점이지요...

그래서 불안 불안 했습니다.

기본적인 프로그램을 설치하고 개발도구.. 워드 프로세서 등 거의 세팅이 끝나갈려는 마당에 문제가 또 터진거지요
사실 제 성격이 지랄 맞은지라... 뭐 하나라도 제대로 동작하지 않는다면 계속 신경이 쓰이고...
어떻게 하든 문제를 해결할려고 삽질합니다. 문제점이 뭔고 하니...

태스크바의 툴팁이 글쎄.. 뒤로 숨어서 안보이는 겁니다. 툴팁 말고도 벌룬팁까지 안보이니깐....
그다지 자세히 볼 필요는 없는데 눈에 거슬렸다는 거죠...

그래서 역시... repacking은 안돼라고 생각하면서도.. 이방법 외에는 XP를 깔방법이 없다고 생각했습니다.
괜히 열이 받더군요...  그렇다고 어떤 삽질을 해서라도 깔끔한 XP를 설치하기에는 정신적 문화적 충격이
너무 컸습니다. 그동안 삽질을 생각하니 눈에 물이 차는군요..

이 글을 보시는 많은 프로그래머님들은 다들 한 영어 하실거라고 믿고 있습니다. 물론 이런 엄청난(?) 문제에
직면했을때는 네이버 지식님한테 물어보는 것이 그 첫번째 방법입니다.

제가 네이버에 검색어로 넣었던 것이 "작업표시줄 툴팁" 이었죠... 결과는 아주 만족했습니다.
참 어처구니 없는 결과들이 쏟아져 나오더군요.. 네이버는 왜그런지 몰라도 신문기사에서 검색을 먼저하고
검색하는 사람들에게 정신적 데미지를 입히는것이 전문이더군요... 그래서 전문적인 지식을 검색할 때는
잘 안씁니다.

그래서 찾는것이 구글인데... 이놈의 구글의 문제점이라고 하면 한글 검색을 할경우에... 네이버보다 못하다는거죠
결론적으로 영어 검색을 해야하는데... 저같이 영어 무능력자에겐 참 이럴수도 없고 저럴수도 없고...
대충 아는 영어 때려 넣었다가 이상한 결과를 보게되면 구글의 신뢰도가 떨어질수도 있고요...

그래서 넣었던 검색어는 "tooltip behind taskbar" 였습니다. 참 간결하고도 멋진 검색어가 아닐 수 없네요..
쉬운단어 이면서 저의 문제점을 이렇게 잘 표현한것도 없을듯 하네요...

이제 본론으로 들어가야겠네요... 사설이 너무 길었지요...

먼저 마이크로소프트에 포스팅 된 글이 있었습니다. 참 개발자를 난감하게 하는 글이었지요..
원인 : 시작메뉴에서 마우스 오른쪽 버튼을 누름
해결 : 로그오프 하던지 재시작하던지

하하하.. 웃음밖에 안나옵니다.

그래서 다른글을 찾아봤습니다.
다양한 의견의 글들이 있던데 그중에 가장 마음에 드는 답변이 있었습니다.
tooltip은 항상 topmost로 동작해야 하는데 어찌되서 그렇게 되지 않았다. 그래서 tooltip을 topmost로
만들어줘야 한다라고 얘기하고 간단한 C# 소스가 나와있었습니다.
저같은 C# 무능력자에겐 소용없어서 찾아보니 컴파일한 소스가 있더군요

이 글에 걸려있는 파일을 다운로드 받으시면 tooltip fix 라는 파일이 있습니다. 받으시면 되겠고요..
이 파일을 실행하니 간단하게 되네요

tooltipsfix.rar

tooltipsfix.rar 다운로드


그래서 아주 만족하고 있습니다.

본론을 쓰기 위해서 사설이 길어졌는데요, 읽어주셔서 감사하고...

다음에도 더 좋은 정보를 포스팅 하겠습니다.

2008년 2월 21일 목요일

TCPMP에 스킨을 입히자.

프로그래머 급구, TCPMP 스킨 프로젝트!!!


PDA에서 가장 깔끔하게 돌아가는 동영상 재생 프로그램이라면
바로 TCPMP이다.

2006년까지 개발된 프로그램인데... 정식 릴리즈는 0.72 까지이다.
왜 개발이 중지 되었는지는 정확하게 모르겠지만, Core Player로 이름이 변경되어 상용화 되었다.

CorePlayer를 써보고 내가 받은 느낌은... 한마디로
"괜찮긴 하던데 내스타일은 아니다." 였다.

그리고 한국사람에게 가장 중요한 자막기능이 없었다. 별로 쓰고 싶지 않은 프로그램이다.

깔끔한 디자인에다 어디 좀 좋아졌겠지 라고 생각만 들뿐

그에 비해 TCPMP는 왠지 모르게 딱딱하게 생겨가지고 재생기능만 좋을 뿐... 멋진 PDA에서 돌리기엔
너무 볼품없는 프로그램이다.

이런 TCPMP에 스킨 기능이 있다면 얼마나 좋을까...

내가 TCPMP의 소스를 분석할 결과 이미 개발자가 스킨 기능을 생각하고 있었고, 프로그램 여러군데
스킨에 대한 예외처리가 많이 있었다.

하지만 스킨을 불러오고, 제어하는 함수는 완성이 안되어 있었다.

그럼 이런 함수들을 수정해서 스킨 기능을 넣을 것인가?
스킨 기능이 가능 할건지를 몇일동안에 삽질 끝에 알아냈다.

아래 그림은 TCPMP 소스를 수정하여 스킨 기능을 넣은 화면이다.
참고로 WinCE 4.1 에서 테스트 하였다.

사용자 삽입 이미지


다음 그림은 최대화 했을 때의 모습이다.

사용자 삽입 이미지

지금까지는 스킨이 고정되어 있지만, 삽질을 좀해서 스킨을 바꿀수 있는 프로그램을 만들려고 한다.
물론 혼자 삽질하고 있는것 보단, 여러명이 하는것이 나을것 같아서 얘기하는데...
어디 나랑 같이 삽질할 프로그래 없나?

소스를 분석하다 보니깐 조금만 신경 써주면 Core Player 보다 훨씬 더 깔쌈한 프로그램을 만들 수 있을 것
같은데...

-----------------------------------------------------------------------------------------------------

저와 함께 TCPMP소르를 분석하고 수정해보실 분 트랙백이나 댓글 달아주세요.

2008년 2월 10일 일요일

척 노리스에 관한 진실 세번째 이야기

예전 어떤 블로그에서 척노리스에 관한 진실에 대한 글을 퍼온적이 있었다.

잠깐 생각나서 http://4q.cc/index.php?pid=top100&person=chuck에 가봤더니

척노리스에 관한 잔실이 많이 업데이트 되어 있었다.

그 중에서 해석 가능한 몇가지만 포스팅 해본다.

Some kids piss their name in the snow. Chuck Norris can piss his name into concrete.
어린이들은 눈위에 오줌으로 자기이름을 쓸수 있다. 그리고 척노리스는 오줌으로 콘크리트 위에 자신의 이름을 쓸수 있다.

Chuck Norris once visited the Virgin Islands. They are now The Islands.
척노리스가 언젠가 Virgin Islands(직역하면 처녀섬)을 방문했었다. 그건 지금 Islands(그냥 섬)이다.(척노리스가 갔더니 처녀섬이 그냥 섬이 되었다는 뜻)

If you spell Chuck Norris wrong on Google it doesn't say, "Did you mean Chuck Norris?" It simply replies, "Run while you still have the chance."
만약 당신이 구글에서 "Chuck Norris"라는 스펠링을 잘못 입력했을 때 "Did you mean Check Norris?(당신이 검색하는것이 Check Norris가 맞나요?)라는 답변은 하지 않는다. 단지 "기회가 있을 때 도망쳐라"라는 답변을 한다.

Chuck Norris can do a wheelie on a unicycle.
척노리스는 외발자전거를 뒷바퀴로만 탈수 있다.

Chuck Norris can delete the Recycling Bin.
척노리스는 "휴지통"을 지울 수 있다.

Once a cobra bit Chuck Norris' leg. After five days of excruciating pain, the cobra died.
한번은 코브라가 척노리스의 다리를 물었다. 그 코브라는 5일동안 매우 코통스러워하다 죽었다.

Chuck Norris died ten years ago, but the Grim Reaper can't get up the courage to tell him.
척노리스는 이미 10년전에 죽었다. 하지만 저승사자가 그에게 말을 할 순 없었다.

Chuck Norris does not hunt because the word hunting implies the possibility of failure. Chuck Norris goes killing.
척노리스는 사냥을 하지 않는다. 왜냐하면 사냥이란 단어는 실패할 가능성을 가지고 있기 때문이다. 그래서 척노리스는 살생을 한다.

Chuck Norris can slam revolving doors.
척노리스는 회전문을 닫을 수 있다.

Giraffes were created when Chuck Norris uppercutted a horse.
기린은 척노리스가 말에게 어퍼컷을 날려서 만들어졌다.

Chuck Norris can have both feet on the ground and kick ass at the same time.
척노리스는 땅에 두발을 딛은 동시에 킥을 날릴수 있다.

When Chuck Norris gives you the finger, he's telling you how many seconds you have left to live.
척노리스가 당신에게 손가락을 내민다면, 그건 당신에게 앞으로 살날이 몇초 남았는지를 가르쳐주는 것이다.

Chuck Norris can kill two stones with one bird.
척노리스는 하나의 새로 두마리의 돌을 잡을 수 있다.

Chuck Norris doesn't have hair on his testicles, because hair does not grow on steel.
척노리스의 고환에는 털이 없다. 그 이유는 털은 강철에서 자랄수 없기 때문이다.

Chuck Norris is always on top during sex because Chuck Norris never f**ks up.
척노리스는 언제나 상위섹스를 즐긴다. 척노리스는 절대 f**ks up(알아서 해석)을 하지 않기 때문이다.

Chuck Norris can play the violin with a piano
척노리스는 피아노로 바이올린을 연주 할 수 있다.

Chuck Norris is the only person on the planet that can kick you in the back of the face.
척노리스는 지구상에서 당신의 뒤에서 얼굴을 찰 수 있는 유일한 사람이다.

Ghosts are actually caused by Chuck Norris killing people faster than Death can process them.
유령은 실제한다. 죽은사람에 대한 사후 처리보다 척노리스가 사람을 죽이는 속도가 더 빠르기 때문이다.

Bill Gates lives in constant fear that Chuck Norris' PC will crash.
빌게이츠는 척노리스의 컴퓨터가 뻗을까봐 조마조마해 하며 살고 있다.

Chuck Norris eats the core of an apple first.
척노리스는 사과를 씨부터 먹는다.

Chuck Norris never retreats, he just attacks in the opposite direction.
척노리스에게 후퇴는 없다. 오로지 반대 방향을 공격할 뿐이다.

Chuck Norris is not hung like a horse... horses are hung like Chuck Norris
척노리스는 말(horse)같은데에 매달리지 않는다. 말이 척노리스에게 매달릴 뿐이다.

Chuck Norris once had a heart attack; his heart lost.
한번은 척노리스에게 심장마비가 왔었다. 그 뒤에 그의 심장은 실종됐다.

When Chuck Norris enters a room, he doesn't turn the lights on, he turns the dark off.
척노리스가 방으로 들어가면 불을 켜지 않는다. 단지 어둠을 끌뿐이다.

Chuck Norris can drown a fish.
척노리스는 물고기를 익사시킬수 있다.

When Chuck Norris looks in a mirror the mirror shatters, because not even glass is stupid enough to get in between Chuck Norris and Chuck Norris.
척노리가 거울을 보면, 거울을 자기 자신을 깨뜨린다. 그이유는 유리가 척노리스와 척노리스 사이에 있을 만큼 바보가 아니기 때문이다.

Jack was nimble, Jack was quick, but Jack still couldn't dodge Chuck Norris' roundhouse kick.
잭은 영리하고 빠르다. 하지만 잭은 아직도 척노리스의 돌려차기를 피할수 없다.
(Jack is poor 이라는 속담에서 나온듯...)

The only time Chuck Norris was wrong was when he thought he had made a mistake.
척노리스가 실수 했다고 생각했을 때가 척노리스가 잘못할 때이다.

Chuck Norris doesn't need a miracle in order to split the ocean. He just walks in and the water gets the fuck out of the way.
척노리스는 바다가 갈라지는 기적을 필요로 하지 않는다. 단지 물 앞에서 서면 물을 존나게 도망간다.

Originally Chuck Norris was going to be hired to play the role of Jack Bauer on the show "24". The producers changed their minds when they realized the show would last only 17 minutes.
원래 척노리스가 24시에 잭바우어로 출연할려고 했었다. 하지만 제작진들은 24시가 17분 분량밖에 나오지 않을 것이라 깨달고 그들의 마음을 바꿨다.

더 많은 재미있은 이야기가 있지만 의역하기 힘들어서 못 옮긴것들도 있다.
관심 있는 사람은 해당 사이트 가서 살펴보길 바란다.
그리고 의역한것중 잘 맞지 않는 것이 있으면 댓글좀...

2008년 2월 3일 일요일

잭바우어에 관한 진실

미국드라마 좋아하는 분들 많을거다.

최고의 미국드라마를 뽑으라고 하면 많은 사람들이 아마도 X-File을 말할것 같다.
X-File은 데이빗듀코브니(폭스멀더 역)가 하차하기 전까지는 그당시 최고의 인기를 달리던 드라마였는데,
듀코브니가 하차하면서 이래저래 물건너 가버렸다.

그 다음은... 여러가지 얘기들이 나오지싶은데... 프렌즈, 로스트, 위기의주부들, CSI 등등
그 중에서도 당연 24시(24 hours)가 최고일듯 싶다.

24시는 미국 CTU(대테러부대)에서 벌어지는 각종 사건들을 24시간동안 시간순대로 보여주는 드라마다...
전쟁 영화 좋아하는 사람들 강력히 추천한다. 그리고 아역 배우로 좀 뜨다가 시들시들해진 키퍼 서덜랜드라는 있는둥 마는둥 하는 배우를 스타덤에 올려준 드라마다.

그 드라마에서 키퍼 서덜랜드는 테러리스트 마스터정도로 표현할 수 있는 꽤나 감각적이고 무대뽀 정신이 깃든 특수 요원 잭바우어로 나온다.

구글에서 잭바우어로 검색하다 재미있는 사이트를 발견했다. 내용이 너무 재미있고 척노리스에 관한 진실과 상당히 비슷한거 같아서 해석 가능한 부분만 발췌해서 포스팅 한다.

출처 : http://www.twentyfour.tv/jackbauer/index.php?tophundred

Jack Bauer once stepped into quicksand. The quicksand couldn't escape and nearly drowned.
잭바우어가 한번은 사구(사막에 있는 모래늪)에 빠졌었다. 그때 사구는 빠져나오지 못해서 거의 죽을뻔했다.

There are two hands that can beat a royal flush. Jack Bauer's right hand and Jack Bauer's left hand.
로얄플러쉬를 만들어내기 위해선 손이 두개가 필요하다(속임수로 두사람이 필요하다는 뜻, 또는 운과 실력이 따라워야 한다는 뜻). 하지만 잭 바우어에겐 그의 왼손과 오른손이 필요하다.

When someone asked Jack Bauer if he was afraid of James Bond, he replied "What does 'afraid' mean?"
누군가가 잭바우어에게 제임스본드를 무서워하냐고 물어보면 그는 "두려움"이 무슨 뜻인지 되묻는다.
(일반적으로 제임스본드가 누군지를 되물어야 하는 상황이라고 생각하길 바람)

Most people would need months to recover from 20 months of Chinese interrogation. Jack Bauer needs a shower, a shave and a change of clothes.
보통 사람은 20개월간의 중국인의 고문에서 회복할려면 몇달이 걸린다. 하지만 잭바우어는 샤워하고 면도하고 옷을 갈아 입으면 된다.(24시 시즌6에서 중국감옥에서 석방되자마자 작전에 투입된것을 보고 나온말)

If Jack Bauer had been a Spartan the movie would have been called "1".
만약 잭바우어가 스파르탄영화(영화 300을 의미함)에 나온다면 그 영화은 1이 된다.

Some people see the glass as half full. Others see it as half empty. Jack Bauer see the glass as a deadly weapon.
어떤사람에게 유리잔은 반이 채워진걸로 보이고 어떤 사람은 반이 비워진것으로 보인다. 하지만 잭바우어에게 유리잔은 그냥 살상무기일 뿐이다.

There are three leading causes of death among terrorists. The first two are Jack Bauer, and the third one is heart attack from hearing Jack Bauer is coming for them.
테러리스트의 사망원인이 3가지가 가장 많은데, 첫번째와 두번째는 잭바우어고, 세번째는 잭바우어가 온다는 사실에 따른 심장마비이다.

When bad things happen to good people, its probably fate. When bad things happen to bad people, it’s probably Jack Bauer.
나쁜일이 좋은사람에게 일어난다면 그건 운영이지만, 나쁜 사람에게 나쁜일이 일어난다면 그건 잭바우어 때문이다.

Once, someone tried to tell Jack Bauer a "knock knock" joke. Jack Bauer found out who was there, who they worked for, and where the goddamned bomb was.
한번은 어떤사람이 잭바우어에게 knock knock 놀이를 했었다. 그 즉시 잭바우어는 밖에 누가 있었는지, 누구를 위해 일 하는지, 젠장할 폭탄이 어딧는지 찾아냈다.

If everyone on "24" followed Jack Bauer's instructions, it would be called "12".
24시에 나오는 모든 인원들이 잭바우어의 명령에 따른다면, 12시가 될것이다.

Jack Bauer can torture you into giving up information you do not possess.
잭바우어는 당신을 고문하여 당신이 알지 못하는 정보를 캐낼 수 있다.

Jack Bauer once acted as judge, jury, and executioner; but to save time he now just acts as executioner.
잭바우어는 판사, 배심원, 처형자의 역할을 수행했다. 그러나 지금은 시간을 줄이기 위해 처형자의 역할만 수행한다.

Jack Bauer doesn't miss. If he didn't hit you it's because he was shooting at another terrorist twelve miles away.
잭바우어는 실수하지 않는다. 당신이 총에 맞지 않은것은 12마일 뒤에 있는 테러리스트를 쐈기 때문이다.

Don't ever ask Jack Bauer what is going on. He'll explain in the car.
잭바우어에게 무슨일이냐고 묻지마라. 차에서 설명해줄 것이다.

Jack Bauer set an ordinary flash memory card to self-destruct. Don't ask how he did it, he's fucking Jack Bauer.
잭바우어는 플래시 메모리를 자동삭제가 되도록 세팅할 수 있다. 그 방법을 묻지마라. 그는 망할 잭바우어이다.

Jack Bauer doesn't speak any foreign languages, but he can make any foreigner speak English in a matter of minutes.
잭바우어는 외국어를 하지 않는다. 단지 그는 몇분안에 외국인이 영어를 할 수 있게 만든다.

When Jack Bauer took a stress test, the test failed.
잭바우어가 스트레스 테스트를 받을때, 테스트가 포기했다.

Jack Bauer arm once wrestled Superman. The stipulations were the loser had to wear his underwear on the outside of his pants.
잭바우어가 한번은 슈퍼맨과 팔씨름을 한적이 있다. 그 시합의 룰은 진 사람이 바지 밖에 펜티를 입는것이었다.

Jack Bauer has never caught a cold. How do we know? Colds still exist.
잭바우어는 감기에 걸리지 않는다. 우리는 어떻게 아는가? 추위는 아직 존재하기 때문이다.
(caught a cold 는 감기에 걸리다는 표현인데 직역하면 "추위를 잡다"라고 해석된다.)

Jack Bauer wasn't born, he was unleashed.
잭바우어는 태어나지 않았다. 단지 봉인이 풀린것이다.

Jack Bauer can break anyone and anything, but he will always break the protocol first.
잭바우어는 무엇이든지 파괴할 수 있다. 하지만 제일 먼저 프로토콜(명령, 복종관계, 규칙)을 먼저 파괴한다.

Sun Tzu once wrote, "If your enemy is weaker, conquer him. If he is stronger, join him. If he is Jack Bauer, you're fucking dead."
손자병법에서는 "만약 적이 약하면 제압하고, 적이 강하다면 동조하라, 만약 적이 잭 바우어라면 넌 죽음 목숨이다."라고 쓰여있다.

"You don't know Jack" is a blessing among terrorists.
당신이 잭바우어를 모르는것은 테러리스트에게 축복이다.


----------------------------------------------------------

기록되어 있는 대부분의 사실들이 척노리스의 것과 비슷했다.

이 글을 읽으면서 왜 이런 글이 나왔지는 알고 싶으면 드라마 "24시"를 꼭 보길 바란다.

2008년 1월 24일 목요일

고등학생들에게 전과목 영어 수업이라뇨???

드디어 나라가 미쳐가는 모양입니다.
전 명박이와 그의 쫄들이 단순이 멍청하고 개념이 없는 줄 알았는데... 나라를 궁지로 몰아가는군요... 교육은 한 나라의 백년대계로 교육정책이 바로 서 있어야 나라가 바로 선다는거 명박이를 제외한 모든 분들은 알겁니다.

제가 한 나라의 대통령 당선자를 명박이라고 부르는거 이해 부탁드립니다. 명박이는 아직 대통령이 아니고 대통령 당선자일 뿐이죠..

요즘 인수위가 하는 행동들을 보면 현역 대통령한테 말하는 꼬라지 하고 하는 거 보면 참... 뭐랄까. 이제 상견례 막 끝낸 며느리가 시집에 와서 시부모한테 이래라 저래라 하는 거랑 별 반 다를게 없어 보이는군요...

하나 하나 짚어보자면 마음에 드는구석 하나 없어보이지만...

오늘 참 어처구니가 없는 신문기사를 봤습니다.
고등학교에서 전과목 영어 수업을 한답니다. 우리나라가 언제 America가 된겁니까?
이유도 참 뭐같더군요... 사실 씨발 좃같더군요... 도대체 인수위와 명박이는 생각이 있는겁니까?
영어 사교육비를 줄이자고 전과목 영어 수업을 한다고 하다니... 그리고 많은 이해력이 필요없는 "수학", "과학", "예체능" 부터 시행한답니다.

공학박사 과정을 공부하는 저에게 있어서는 "수학","과학"을 이해력이 필요없는 과목이라고 단정한게 참으로 지탄스럽기 짝이 없습니다. 물론 "예체능"역시 발로하는 과목이 아니지요... 세상 어떤 일이 이해없이 진행될 수 있을까요?

인수위가 정부부처를 개편하면서 정통부를 없앤다고 지랄할때 부터 이것들이 우리 나라를 말아먹겠구나 하고 걱정이 되었었는데... 우리나라 산업을 이끌어온 "과학"을 이해가 필요없는 과목으로 단정하다니요!!! 그래서 인수위가 된겁니까? 정치라는 과목은 이해력이 무지하게 필요한 모양인데 정치라는 과목을 전공해서 하는 정치인들이 상황 이해력이 그거 밖에 안되는 거 보니 고등학교때 정치 과목을 영어로 들었던 모양입니다.

그리고 고등학교 수업을 영어로 한다면 영어 사교육비가 줄어든다고 누가 그럽니까? 고등학교 수업을 영어로 하게 되면 고등학교 수업을 따라가기 위해서 초등학교 중학교 부터 영어 과외를 하는 학생들이 많아진다는 것을 어찌 모릅니까? 결국 유치원생부터 영어로 수업 할 생각입니까? 근본적인 해결 대책을 못 내놓고 땜빵식의 해결책을 내놓으면 어쩌자는 겁니까?
차라리 한글을 없애는게 영어 사교육비를 줄이는 최선의 방법처럼 보이는건 저 뿐인겁니까?

명박이가 대통령에 출마하면서 걸었던 얼토당토 않한 고등학교 수업 전면 영어수업으로 하겠다는 공략 정말 시행할 생각입니까? 그나마 명박이를 손톱의 때만큼이나 믿었던 저는 왜 이렇게 제 자신이 어리석게 느껴지는 것일까요...

제가 이런글을 쓰고는 있지만 저만 이런생각 가지고 있는거 아닐겁니다. 명박이가 아직 대통령이 되진 않았지만 벌써부터 명박이 임기가 끝나길 기대하고 있는건 도대체 왜 그럴까요...

인수위와 명박이는 자기 딴에는 나라를 개편하겠다고 설쳐보이는것이지만 자기들 혼자 개편한다고 어처구니 없는 방법을 꺼내들고와서 설치면 나라가 바뀐답니까?

대안이 없으면 비판도 하지말라라고 했습니다. 사실 이렇게 된 우리나라 뾰족한 대안이 없겠지만 그래도 좋은 방향으로 흘러가야죠. 대통령이 되는건 나라를 잘 이끌기 위해서 대통령이 되야지 자기의 생각을 나라를 대상으로 실험해볼려고 되는건 아닙니다. 명박이 형 정신좀 차리세요.

그리고 인수위... 아직은 노무현 정권입니다. 노무현 대통령이 아무리 삽질을 했어도, 존중해주지는 못할망정 인수위 자신이 차기 대통령 처럼 행동하는건 사실 꼴불견입니다.

좀 알아먹고 수용 가능한 정책들을 들고 나와서 나라에 칼을 대길 바랍니다. 그래도 잘될지 안될지 모르는데 어찌 그렇게 자신있게 얘기하는지 정말 궁금합니다.

2008년 1월 21일 월요일

멜론 파일(DCF)를 MP3로 만들자.. #3

오랜만에 다시 시작한다.
3번째 시간... 멜론 파일(DCF)를 MP3로 만드는데 필요한 것들을 프로그램으로 구현한다.

오늘은 DCF 파일에서 음악에 대한 정보를 추출하는 방법에 대해서 알아보자.
DCF 파일을 메모장으로 열면 다음과 같다.

2 : Rights-Issuer:http://mobile.melon.com/utility/dcfd.jsp
3 : Content-Name:?덇? ?щ뒗 洹몄쭛
4 : Content-Description:1764198 11
5 : Content-Vendor:melon.com
6 : Icon-URI:http://icon.digicaps.com/icon.asp
7 : eTarget:MIN,"SSeID-1/6715B86BE79D2FAA0617"
8 : eCEK:SSKEY-1;cidType=MIN;dMethod=AES128CBC-RFC2630;eValue="4603F2D6713F6DD8E3F13536469706E3A087BA1DC7F847A18FE1E8F539BB2ACE"
9 : Usage-Control:Time-Not-After/20080204235959Z+09,Allowable-Services/00000000;cidType=MIN;eAuthCode="SSeAuth-1/F7FD18EFD6A894E12893"
10 : Meta-Container:KS_C_5601-1992;MENU="mp3";Title="니가 사는 그집 - 박진영";Copyright="widerthan";Length="00:03:47";Codec type="mp3";


앞에 붙은 숫자는 라인번호이다. 중요한 정보는 10번째 줄에 있는데 이부분을 추출하는 프로그램을 만들어 보겠다.
왜 다른건 놔두고 10번째 줄만 추출하는가? 그리고 추출해서 어디에 쓰는가? 라는 질문을 가질수도 있다. 그에 따른 대답은 10번째 줄은 음악의 길이 제목 가수명 등의 정보를 가지고 있고, 그 정보를 이용하여 녹음에 활용 할 수가 있다. 그리고 녹음이 끝난후에 변환된 MP3파일에 ID3태그를 채우는데도 활용이 된다.

정보를 추출하는 과정은

1. 파일을 연다.
2. 10번째의 정보를 읽는다.
3. 필드별로 정보를 가져온다.

이과정을 거치면 된다. 그럼 만들어진 프로그램을 보자
먼저 파일 정보에 대한 구조체는 어떻게 생겼는지 생각해보자.
지금부터 나오는 프로그램 소스 코드에 대한 태클을 사양해줬으면 좋겠다. 이 글을 보는 사람 중에는 나보다 내공이 더 높은 사람도 많을 것이다. 프로그램이 비효율적다. 어처구니 없다. 이런식의 태클은 그냥 생각만 해달라. 내 프로그램을 보고 아이디어를 얻어서 더 좋은 프로그램을 만든다면 그걸로 만족한다.


typedef struct _dcf{
 char Title[100];  //제목
 int  Length;   //음악 길이(초)
 int  SampleRate;  //샘플링 레이트
 char Genre[30];  //장르
 char Album[100];  //앨범
 char Artist[100]; //가수
 int  TrackNum;  //트랙번호
} dcf;



프로그램에 사용될 구조체이다. 이 구조체는 음악에 대한 정보를 담고 있다. 근데... DCF 파일에 있던 BitRate에 대한 정보는 없다. 왜 없을까... BitRate는 MP3에서 사용되는 정보인데, 음악파일(Wav)을 어느정도로 압축할 것인지 결정하는 정보이다. 나는 일단 Wav 로 저장할 것이 때문에 BitRate 정보는 사용하지 않는다.

다음은 DCF 파일에서 정보를 가져오는 함수를 만들어 보자

int getDCFFileInfo(char* FileName, dcf* data)
{
 int i, j, k;
 char* ci, *cj;
 FILE *fp;
 char dummyData[14][500];
 char dummyData2[14][500];

 fp=fopen(FileName,"r");
 if(fp == NULL)return -1;
 for(i=0;i<10;i++)
  fgets(dummyData[0],500,fp);
 fclose(fp);

 j=1; k=0;

 for(i=0;i<strlen(dummyData[0]);i++)
 {
  if(dummyData[0][i] == ';')
  {
   i++;
   k=i;
   j++;
  }
  dummyData[j][i-k]=dummyData[0][i];
 }

 for(i=2;i < 14;i++)
 {
  memset(dummyData2[i], 0, sizeof(char) * 500);
  ci=strstr(dummyData[i], "=\"");
  for(cj = ci+2; (*cj) != '\"'; cj++)
  {
   dummyData2[i][cj - ci -2] = *cj;
  }
 }

 strcpy(data->Title, dummyData2[3]);
 strcpy(data->Genre, dummyData2[10]);
 strcpy(data->Album, dummyData2[11]);
 strcpy(data->Artist, dummyData2[12]);
 data->TrackNum = atoi(dummyData2[13]);
 data->SampleRate = atoi(dummyData2[8]);


 return 0;
 
}



생각보다 프로그램이 길어졌다. 짧게도 만들수 있겠지만 내가 무지한 관계로 프로그램이 좀 길어졌다. 그냥 그렇구나 이해해졌으면 좋겠다.

이 함수는 DCF의 10번째 줄을 파싱해서 스트링 배열에 넣은다음 데이터형에 맞게 변환하여 구조체에 저장하는 함수이다.

여기 까지가 DCF 파일에서 정보를 추출하는 방법이다.
하지만 이 함수를 그대로 가져다 쓰기에는 문제가 좀 있다. 그 이유는 문자셋 때문인데 윈도우즈 프로그래밍을 할 때는 문자셋에 유의해서 프로그램을 작성해야 한다.

예를 들어 char를 TCHAR 로 쓴다던지 strcpy를 lstrcpy로 쓴다던지 하는것인데 이부분에 대해서는 자세히 설명하지 않을것이고, 이에 대한 자세한 정보는 다른 서적을 참고하기 바란다.

다음 글에서는 Wav 파일 녹음에 대해서 알아보겠다.

2008년 1월 11일 금요일

멜론 파일(DCF)를 MP3로 만들자.. #2

다시 구질구질한 이야기를 써보자..
멜론 파일(DCF)를 MP3로 만들자.. #1에서 MP3를 어떠한 순서를 통해서 만드는지를 설명했다.

이번 글 #2에서는 #1에서 제시했던 과정이 왜 필요한가를 알아보자

사용자 삽입 이미지

#2에서 나왔던 그림이다.

1) 재생파일 분석
이 과정은 지금 재생하고자 하는 파일의 정보를 알아낸다. 정보를 알아내는 이유는 MP3 ID3 태그에 들어갈 가수, 제목, 앨범 정보를 얻기 위함이고, 녹을 할때 녹음을 하는 시간을 알아내기 위해서 이다. 정보는 간단하게 찾아낼 수 있다.
DCF 파일에서 음악에 대한 정보는 ASCII로 파일을 열었을때 10번째 줄에 Meta 데이터로 기록되어 있다.

대략 아래와 같은 모습이다.
Meta-Container:KS_C_5601-1992;MENU="mp3";Title="니가 사는 그집 - 박진영";Copyright="widerthan";
10번째 줄에는 위에 보이는 정보 외에도 파일 사이즈, Bitrate, Sampling Rate, 장르.. 트랙넘버
이런것들이 기록되어 있는데 이걸 활용해서 파일을 만든다면 결과가 상당히 좋을것 같다.


2) Melon Player 실행
이건 또 왜 실행 시켜야 하는가?? 당연히 DCF파일을 재생해야 하기 때문이다. 실행하는 방법은
[멜론플레이어 실행파일명.exe] [멜론파일.dcf] 형식으로 실행했을 때 바로 재생된다.
그럼 재생할려고 로딩하는 시간과 재생이 끝나고 난뒤의 여유 시간을 더해서 2초정도.. 그럼 1번 과정에서 얻어낸 시간에 +2초를 하게 되면 총 녹음 시간이 나오는것이다. 이거... 손으로 해도 정확할거 같은데 원래 자동화에 이러한 오차정도는 어느정도 고려해야 한다.

3) 녹음시작, 플레이어 재생
일단 녹음을 어떻게 하는지는 나중에 얘기하기로 하고 멜론플레이어를 실행할 때 DCF파일을 인자로 넘겨주면 바로 재생되기 때문에 2번 과정과 3번과정은 연속적으로 진행된다고 보면 된다. 2번과정에서 얘기한 앞에 2초정도는 플레이어 로딩시간이기 때문에 플레이어를 실행하자 마자 녹음을 시작하면 된다는 것이다.

4) 플레이어 종료
플레이어를 종료시키는 이유는 플레이리스트를 삭제하기 위해서 이다. 멜론 폴더에 자기 아이디로 되어 있는 폴더 안에 플레이 리스트 파일이 있다. 이 파일을 멜론 플레이어가 실행하는 동안에 점유를 계속하기 때문에 이 리스트 파일을 삭제하기 위해서는 플레이어를 강제종료 시켜야 된다.

5) 플레이 리스트 삭제
플레이 리스트는 왜 또 삭제 하나... 그 이유는 원하는 파일을 하나 재생하고 나서 이전에 재생했던 다른 파일의 재생을 막기 위해서이다. 녹음하는데 시간 오차를 많이 줘버릴 경우 후반부의 다음곡이 녹음되어버리는 불상사를 막기 위함이다.


여기까지... 그럼 이걸 프로그램으로 풀어내야겠지?
윈도우즈 프로그래밍 조금 하는 사람들은 벌써 머릿속에서 다 계산이 되어서 몇번 과정에 뭐를 써야 하는지 다 알것이다. 그래도 모르는 사람들이 있으니깐 한번 짚고 넘어가자.

WinAPI를 기준으로 설명한다.
1번 과정 CreateFile, ReadFile
2번 과정 CreateProcess
3번 과정 waveInOpen, waveInAddBuffer
4번 과정 ExitProcess

이정도만 제시해주면 벌써 다 만든 사람 있겠지? 다음 #3 부터는 실제 프로그래밍에 들어가보도록 하자.

멜론 파일(DCF)를 MP3로 만들자.. #1

이 글을 읽는 여러분들은 컴퓨터를 언제 가장 많이 쓰는가?
사람들 마다 답이 다르겠지만, 나는 아마도 음악을 듣는데 가장 많이 쓴다고 답변할 것이다.

그것도 그런것이 공부할 때, 작업할 때, 개발할 때, 문서 작업 할 때..
따지고 보면 게임 할때를 제외하고는 계속 컴퓨터에서 음악이 흘러 나온다.
시간으로 따지고 보면 음악 재생 프로그램이 가장 오랜 시간동안 동작한다.
그럼 음악을 재생할 때는 어떤 매체를 이용하는가?

CD라고 생각하는 사람들이 있겠고.. 십중팔구 MP3라고 대답할 것이다.
LP라고 대답하는 사람은 없겠지? 카세트 테이프?? 오지마라..

MP3 파일은 어디서 구하는가? 어둠의 경로?
몇개월전에 벅스뮤직에서 월 15000원인가 10000원인가에 MP3 무제한 다운로드 서비스 열었다가
저작권 때문에 한방 맞은것을 기억한다.
요즘 가장 뜨는 음악 사이트는 아마 멜론이 아닐까..
멜론에서 MP3파일을 받을 수 있는가?? 정답은 No.
멜론에서는 DRM(Digital Rights Management) 형식의 DCF 파일을 다운로드 받을 수 있다.
DCF 파일에 대해서 간단히 얘기하자면... 기간과 재생 장치가 정해져 있는 MP3파일이다.

얼마전인가 DCF파일에서 MP3로 변환하는 방법을 알아낼려고 무지하게 애를 썼었다.
결국 알아낼 수 없었다. 지금 깨달은 거지만... 앞으로도 알아낼 수 없을 것이다.
아니지 언젠가는 크랙이 되겠지만. 가까운 미래에는 불가능 할 것이다.

그럼 멜론의 DCF의 재생방식에 대해서 알아보자.. 이부분은 순전히 내 추측으로 쓰는것이다.
(태클 환영합니다.) 내 추측이니 그냥 그런갑다 생각해주면 너무 고마울것 같다.

사용자 삽입 이미지


서버에 음원파일이 있고 Melong Player를 통해서 DCF 다운로드 또는 스트리밍을 한다.
음원파일은 WAV가 될수도 있고 MP가 될수도 있는데 멜론서버를 통해서 날짜와 아이디를 이용하여 암호화 된다. 물론 휴대폰이나 MP3플레이어로 전송될때는 날짜와 플레이어 고유 ID를 통해서 암호화 되는걸로 보인다.
결론적으로 다운로드 된 파일은 DCF 파일이며 MP3플레이어에서는 날짜와 휴대폰으로 복호화 해서 재생을 하게 된다.

자 그럼 이걸을 어떻게 분석할 것이가...

이렇게 생각하는 사람들 분명히 있을것이다. 그럼 날짜와 MP3플레이어 아이디 이용해서 복호화 시키면 바로 MP3 파일로 변환할 수 있겠네... 라고 생각하는 사람...
그게 진작 되었으면 멜론은 망했다라고 하자...
물론 불가능한건 절대 아니다... DVD도 크랙되었고. WMV도 크랙된 적이 있다.
이것도 언젠가는 크랙되겠지... 그래서 한번 해볼까 하고 DRM 스펙이라던지 뭐.. 별별 자료는 다 찾아 봤지만 결론은 힘들다 였다.
그리고 크랙이 되었을 경우에... 멜론에서 가만히 있지 않는다. 암호화 방식을 약간 변경한다던지 키 값 생성방법을 다르게 하면 또 분석해서 크랙해야 된다.
결론적으로 저것을 기획한 사람이 아니면 원천 봉쇄적인 크랙은 안된다는 것이다.

이에 관련 자료를 웹사이트에서 찾아봤더니
대부분 멜론플레이어를 재생하고 루프백으로 녹음하는 방법을 사용하더라.
뭐 이 글에서도 그런 방법을 사용할것이다. 이 문장 읽고 실망하시는 분들 좀 더 읽어보던지
아니면 그냥 돌아가던지...

그럼 내가 쓰는 이 글이 다른글하고 무슨 차이가 있어? 라고 생각하는 사람들 있을것이다.
그런 사람들은 내 블로그 이름을 다시 한번 살펴보고..

난 앞으로 쓰여질 이 글에서 재생, 녹음, MP3을 어떻게 하면 자동화 시킬것인지에 대해서 논하겠다. 이 글을 읽을려면 윈도우즈 프로그래밍에 대한 약간의 기초적인 지식이 있어야 할것이다.

작업 순서는 다음과 같다.
사용자 삽입 이미지

위의 그림은 멜론 플레이어를 충분히 분석한 뒤에 나온 그림임을 알아두길 바란다.
1 번부터 5번까지는 프로그램을 직접 작성해 자동화 되는 방식으로 진행된다.
3번이 두개인 이유는 3번 과정이 동시에 진행되어야 하기 때문이다.

그럼 다음 글에서는 위의 같은 순서가 왜 필요한지 짚어보도록 하자..

퍼가길 기대하지 않지만 퍼가시는 분들은 출처를 꼭 밝혀주시기를 바랍니다.

2008년 1월 5일 토요일

Tomcat5 + Mysql + Apache + PHP 한글 신경 안쓰고 설치하기(대박)

Apache의 Tomcat ... 젠장
완전 깡패(Apache)에 양아치(Tomcat:여자뒤를 졸졸 따라다니는 남자)같은 놈들이다.
이놈들과 씨름한지 사흘째... 결국 결론을 찾았다.

첫째날..
Tomcat5를 Fedora6에 설치했다. Manager까지 띄우고 나서 설치할려고 하는 Web Application이 컴파일이 안되서 하루를 잡아먹었다.... 결국 컴파일 성공

둘째날
설치한 Web Applicaion과 MySQL 사이에 한글 에러가 나서 하루를 잡아먹었다.... 결국 GG...

셋째날
한글문제를 해결할 방법을 찾아내다... 여러분 더 이상 고민하지 마라... 간단한 길이 있다...
정답은 바로... Redhat... 그것도 9..   Enterprise Edition 아니다.  Redhat9.. kernel 2.4

지금 부터 설명하는건 회사 웹서버 설치 방법이 아니다....
그냥 개인적인 서버 돌릴때나 써먹어라..
그리고 redhat9 쓴다고 비웃는 사람들... 다시는 내 블로그 오지마라.

그럼 시작해볼까..

Step1. Redhat9 을 설치한다. kaist 서버에 가면 있다. 속도도 빠르고... CD 3장 밖에 않한다.
설치 옵션은 webserver + ftpserver + 편집기 + 개발용도구(gnu-java 제외) + mysql
그렇다... 기본적인 mysql 쓴다. 3.x 버전인데 쓸만하다. 서브쿼리는 안되지만...
위에도 말했듯이 개인적인 서버 꾸밀때 쓰는 방법이다. 물론 노력하면 4.x 버전으로 설치 할 수 있다. 그건 다른 사람이 쓴 글 보고 연구하기 바란다.

Step2. 세팅 시작
-- 리눅스의 한글 설정 확인 vi /etc/sysconfig/i18n
-- 첫번재 줄에 LANG="ko_KR.eucKR" 로 설정되어 있다면 pass 그렇지 않다면 설정하고 저장
-- setup에 가서 mysqld, vsftpd, httpd 을 시스템 서비스 자동시작으로 바꿔준다

Step3. JAVA SDK 설치
-- java.sun.com 으로 가서 jdk-6u3-linux-i586.bin을 다운로드 받는다. 버전에 따라 파일명이 약간 다를 수 있다.
--  /usr/local/src 로 jdk-6u3-linux-i586.bin을 복사한다.
-- %cd /usr/local/src
-- sh jdk-6u3-linux-i586.bin
-- 압축이 다 풀리면  %cp -R jdk1.6.0_03 ../jdk

Step4. ant 설치
-- www.apache.org 로 가서 apache-ant-1.7.0-bin.tar.gz 다운로드
-- Ant가 뭔지 궁금한 사람은 따로 찾아보도록 하고 java에서 쓰는 make 라고 생각하면 된다.
-- /usr/local/src로 복사
-- %cd /usr/local/src
-- %tar xfz apache-ant-1.7.0-bin.tar.gz
-- cp -R apache-ant-1.7.0 ../ant

Step5. tomcat 설치
-- www.apache.org로 가서 /apache-tomcat-5.5.25.tar.gz 다운로드
-- /usr/local/src로 복사
-- %tar xfz apache-tomcat-5.5.25.tar.gz
-- %cp -R apache-tomcat-5.5.25 ../tomcat

Step6. 환경변수 설정
자 여기까지 왔으면 벌써 5개 설치됐다. httpd, mysqld, jdk, ant, tomcat....
명령 몇개 쳤는데 벌써 다 됐다. 이제 환경변수 설정해줘야 한다.
우리가 하는건 편한 윈도가 아니고 리눅스이기 때문에 이런거 다 해줘야 한다.
귀찮으면 윈도 써라... 처음부터 끝까지 마우스로만 설치해도 되는거 많다.
% vi /etc/profile
가장 아랫 줄로 가서
JAVA_HOME=/usr/local/jdk
export JAVA_HOME
ANT_HOME=/usr/local/ant
export ANT_HOME
CATALINA_HOME=/usr/local/tomcat
export CATALINA_HOME
PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin
export PATH
CLASSPATH=$CLASSPATH:$JAVA_PATH/lib:$CATALINA_HOME/common/lib
export CLASSPATH
추가 한 다음 저장하고 나온다.
환경변수 적용 : % source /etc/profile

Step7. Tomcat 설정
cd /usr/local/tomcat/conf
vi tomcat-user.xml
<tomcat-users> 태그 안에  
<user name="admin"  password="admin"  roles="admin, manager" /> 추가
이렇게 추가하면 tomcat manager 에 admin//admin 으로 로그인 가능하다.
저장하고 나와서 톰켓을 실행한다.
$CATALINA_HOME/bin/startup.sh
경로들이 제대로 나오면서
http://server_ip:8080 으로 접속해서 tomcat manager 화면이 나오면 성공
----------------------------------------------------------------------------------
정리하면서...
Tomcat 자체가 너무 생소했고... 아파치 http 와는 차원이 다른 한글문제 등으로 오랜동안
좌절했다... redhat9 의 경우 설치부터 eucKR 로 설치 하기 때문에 unicode -> eucKR 에서 생기는 문제점을 해결 가능하다. 하지만 커널 버전이 낮기 때문에 사람들이 선호하지 않는다.
근본적으로 한글 문제를 해결하기 위해서는 모든 페이지를 unicode로 만드는 것이다.

지금 설정으로는 80포트로는 php, 8080 포트로는 jsp 서비스가 가능하다. 80 포트로 php와 jsp 동시에 서비스 하기 위해서는 jakarta-connection 설정을 하면 된다. 이부분에 대해서는 각자 찾아보길 바란다. 내 생각으로는 방문자가 많지 않은 홈페이지에서는 아파치 서버와 꼭 연결할 필요없이 tomcat을 80으로 세팅해서 쓰는 방법도 괜찮을것 같다. 사람들이 말하길 아파치가 성능이 좀 좋다고 하는데 그거야 엄청난 방문자들이 들어올때 이야기고 아파치가 jsp를 처리한다고 해서 tomcat이 돌지 않아도 된다는 얘긴 아니다. 그리고 한 서버에서 php와 jsp를 동시에 돌리는 것은 별로 좋은 방법이 아니라고 본다.

2008년 1월 4일 금요일

javax.servlet.jsp does not exist 문제해결

톰캣을 설치하고 나서

몇날 몇일을 고생하게 만들었다.

다음과 같이 해결

JAVA_HOME=/usr/local/jdk1.6.0
ANT_HOME=/opt/SDK/lib/ant
CATALINA_HOME=/usr/local/apache-tomcat-5.5.25
export CATALINA_HOME
export ANT_HOME
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/tools.jar:
                  $CATALINA_HOME/common/lib/servlet-api.jar:
                  $CATALINA_HOME/common/lib/jsp-api.jar:
                  $CATALINA_HOME/webapps/ROOT/WEB-INF/classes

Set Default JAVA with SUN JAVA in Fedora 5,6,7

Fedora Core developers make it rather hard to install and properly configure Sun’s JVM. All said and done Sun’s JVM (comes with JDK) is the best JVM implementation out there; not to mention that it is the reference implementation. Here is how you can easily install JDK 6 / Java SE 6 in 5 minutes or less. Here are the steps:

1. Login as root

2. First you need to download it from here. This works fine from GUI browsers like Firefox, Internet Explorer or Safari. However Sun makes it very hard (from java.sun.com) to download it for Linux console users (like those trying to install on their dedicated web server). You cannot access the download link from text based lynx browser. Fortunately there is a way. I found a secret location for you to easily download JDK 6 using wget or curl (console apps). This is also very useful if you are planning to use any download accelerators. The current binary (32 bit version) is here. This link will surely change with time so it is better to browse to the link above and then access this link from that page.

Download it using wget or curl. The command, for example, today will be:
wget http://www.java.net/…/jdk-6u2-ea-bin-b02-linux-i586-12_apr_2007-rpm.bin

Note: The link has been truncated for brevity, however it is hyperlinked to the actual link.

3. Now change the permission of the downloaded file to 755 like this:
chmod 755 jdk-6u2-ea-bin-b02-linux-i586-12_apr_2007-rpm.bin

4. Then run it:
./jdk-6u2-ea-bin-b02-linux-i586-12_apr_2007-rpm.bin

You will need to type yes to indicate your acceptance to their agreement and the installation will complete on its own. Unfortunately you are not yet done. Type java -version on the command line and you will see that it still points to the crappy old JVM from gcj.

5. Now you need to find the actual location of your JDK installation and indicate to Fedora to accept your choice.

Type the following:
updatedb;locate javac |grep bin

You will see an entry like this:
/usr/java/jdk1.6.0_02/bin/javac

Here /usr/java/jdk1.6.0_02 is the actual JAVA_HOME for your machine. Note this as you will need it to run the future commands.

Now you need to run the alternatives command to instruct Fedora to recognize Sun’s JVM.
alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_02/bin/java 100
alternatives --install /usr/bin/jar jar /usr/java/jdk1.6.0_02/bin/jar 100
alternatives --install /usr/bin/javac javac /usr/java/jdk1.6.0_02/bin/javac 100

You can do this for other Java executables too, should you need them, following the same pattern.

Note: If alternatives is not in your path then use locate alternatives to locate it.

Finally you should configure alternative to use Sun’s JVM as the default JVM. To do this type:
/usr/sbin/alternatives --config java

This will present you with at least 2 options. Choose the one for Sun’s JVM. Similarly repeat the process for other commands.

Now you are done configuring Fedora for the most part. Type java -version and you should see something like this:

java version “1.6.0_02-ea”
Java(TM) SE Runtime Environment (build 1.6.0_02-ea-b02)
Java HotSpot(TM) Client VM (build 1.6.0_02-ea-b02, mixed mode, sharing)

Note: This works for most part, except Tomcat. The default installation of Tomcat has been hardwired to use GCJ. I changed the configuration file and it didn’t help. My solution for Tomcat is to ditch Fedora’s version and install directly from site. It works like a charm. Set JAVA_HOME to the value we found above and you are done.

FC6에 APM+Oracle+Tomcat+Resin 설치

어제 하나로 IDC 가서 페도라6 으로 갈아 치웠다.
대략 14시간의 삽질 끝에 모든 설치를 성공하고 이렇게 글을 남겨 본다.
Apache2.2 + PHP5 + MySQL5 + Tomcat6 + Resin3.1 + Oracle10g + JDK1.6 설치 가이드.
아마 가장 최신의 패키지들을 설치한것이 아닐까 하는 생각이 든다.
거두 절미하고 본격적으로 시작하니 잘 따라해보자.

모든 설치는 putty, realvnc를 이용하여 설치했다.
realvnc 설정 가이드도 있으니 무시하지 끝까지 보고 따라해보자.


1. APM 설치
Apache2.2 + PHP5 + MySQL5 는 RPM 패키지로 설치한다.
아마 대부분 설치가 됐을것이므로 자세한 가이드는 패스한다.

2. 페도라6 처음 설치시 해주면 좋은것들..
bash$> updatedb

mlocate를 사용할때 캐쉬를 이용한다.
페도라6 처음 설치 시 이 캐쉬파일이 없어 locate가 동작하지 않을것이니 앞으로의 편의를 위해 캐쉬를 만들어주자.


3. 필요없는 자바, 톰캣 관련 패키지 삭제
우리는 현재 최신버전의 JDK 1.6 을 설치할 것이다.
하지만, 페도라6 는 GNU 버전의 JDK1.4.2 를 기본 패키지로써 제공하고 있다.
구버전은 안키운다. 삭제해주자.
또한, 페도라6에서 기본적으로 설치되는 톰캣은 5.5 다.
구버전은 안키운다. 삭제해주자. (-_-)

bash$> yum -y remove tomcat\*
bash$> yum -y remove \*java\*

톰캣을 삭제하면 종속성에 의해 이클립스가 삭제된다.
뭐 필요없다 페도라6 에서 제공하는 이클립스는 3.1 이다.
이클립스 3.2 는 나중에 따로 가이드를 올리겠다.
앞에 \ 는 역슬러시다 java 라는 단어가 들어간 패키지명은 모두 삭제한다.
조금 시간이 걸릴것이므로 느긋하게 기다린다.


4. 필수 패키지 설치
앞으로 진행을 편히하기 위해 필요한 모든 패키지를 설치하고 가자.

bash$> yum -y install httpd-devel php-mysql libXp-devel libXp perl

httpd-devel: apxs mod_jk의 동적 모듈 컴파일을 위해
php-mysql: php에서 mysql에 연결하기 위해
libXp, LibXp-devle: 오라클 설치 때 필요한 openmotif 패키지 때문에..
perl: 펄은 대부분 설치 되었겠지만 없으면 설치해야한다.

-y 옵션은 모두건 yes 한다는거다.
뭐뭐 설치되는지 구경하고 싶으면 -y 옵션을 빼자

우선 필요한 패키지들을 설치해준다.
이젠 openmotif21-2.1.30-14.i386.rpm 를 설치해야 한다.
첨부된 파일을 다운로드 받고 압축을 풀면 openmotif21-2.1.30-14.i386.rpm 파일이 나온다.
적당히 서버에 업로드하고

bash$> rpm -Uvh openmotif21-2.1.30-14.i386.rpm

이젠 오라클 설치에 필요한 패키지를 설치해야한다.
아래 패키지는 꼭 설치해 주도록 하자.

bash$> yum -y install setarch-\* tcl-\* libXau-devel-\* libXp-\* compat-db-\* compat-db-\* compat-libstdc++-33\* compat-libf2c-34-\* compat-gcc-34-\* libaio-* compat-gcc-34-c++-\* compat-libstdc++-296\* compat-libgcc-296\*

여기서 중요한건 띄어쓰기다. 잘보고 한줄에 모두 입력하도록 한다.
너무 길어서 쓰기 힘들면 긁어다 입력하자. 다시한번 말하지만 \ 는 역슬러시다.

필수 패키지 설치가 끝났다.
이제 본격적으로 설치에 들어간다.


5. JDK 1.6 설치
첨부된 파일 중에 jdk-6-linux-i586.bin 이 있다.
이상한 사이비 사이트에서 받은것이 아닌, sun사 홈페이지에 직접 다운로드한 jdk 1.6 이므로 안심하고 설치하자. 뭐 못믿겠으면 직접 sun사 홈페이지가서 받아도 된다.

적당히 업로드하고 실행시켜서 설치해준다.
중요한건 설치할때 해당 경로에서 jdk1.6.0 이란 디렉토리를 만들면서 설치 된다.
그러니 반드시 내가 설치를 원하는곳으로 파일을 이동시켜서 설치하자
본인은 /usr/local 로 이동시켜서 아래 명령을 실행했다.
본인의 jdk 경로 (JAVA_HOME)은 /usr/local/jdk1.6.0 이 되겠다.

bash$> sh jdk-6-linux-i586.bin

요래요래 해주면 일단 jdk 가 설치 된다.
이제 각종 환경 변수들을 쌔려 줘야 한다.
글로벌하게 적용되야 하니 /etc/profile 맨 마지막에 적당히 추가해주자.

bash$> vi /etc/profile

JAVA_HOME=/usr/local/jdk1.6.0
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib
export PATH

여기서 JAVA_HOME, CLASSPATH 를 자신이 JDK를 설치한 경로로 적어줘야한다.
먼말인지 모르겠다면 앞으로 이 가이드를 따라올 수 없는것이니 일찌감치 포기하자.

추가해 줬으면 이제 putty 를 종료하고 다시 서버로 접속한다.
그래야만 위 환경변수가 적용된다.



5. Resin 3.1 설치
이제 레진을 설치해보자.
레진 또한 첨부 파일에 보면 resin-3.1.0.tar.gz 파일이 있다.
참고로 레진이랑 톰캣은 소스가 아니라 바이너리다.
즉, 압축만 풀면 바로 쓸 수 있는것이다.
하지만 약간의 설정이 필요하니 잘 따라오도록 하자.
본인은 /usr/local/etc 로 resin-3.1.0.tar.gz 파일을 이동시키고 압축을 풀었다.

bash$> tar xvzf resin-3.1.0.tar.gz

뭐 압축풀면 끝이다.
하지만 아파치와의 연동을 위해 환경설정과 컴파일을 한번 때려줘야 한다.
레진 디렉토리로 이동 후..

bash$> cd resin-3.1.0
bash$> ./configure --with-apache=/usr/include/httpd

요로코롬 해준다.
이게 뭐냐면 레진이 아파치랑 연동하기 위해 아파치 라이브러리를 참조하기 때문이다.
완료가 되면 아래 명령을 바로 때려주자.

bash$> make all
bash$> make install


요래 해주면 caucho_module.so 동적 라이브러리 모듈이 생성되고 자동으로 httpd.conf 에 넣어준다. 레진이 이래서 조낸 좋은거다.

이제 httpd.conf 파일을 열어서 추가가 됐는지 확인해보자

bash$> vi /etc/httpd/conf/httpd.conf

파일 맨 마지막에

LoadModule caucho_module /usr/lib/httpd/modules/mod_caucho.so
ResinConfigServer localhost 6802
CauchoConfigCacheDirectory /tmp
CauchoStatus yes

요렇게 추가가 된게 보일것이다.
하지만 바로 지워준다.

왜? 아래 따로 include 해서 쓸것이기 때문이다.
싫으면 걍쓰도록한다. 하지만 나중에 다른 버철호스트에도 레진이 영향을 받아 웹페이지가 안열리는 현상이 발생할 수도 있다.
그러니 왠만하면 본 가이드를 그대로 따라하자
본인은 다 나중에 편하고, 좋자고 하는것이지 막 각종 편법들을 남발해가면서 일단 설치만 되면 땡이지 하는건 딱 질색이기 때문이다.

이걸로 바로 사용할 수 있지만.. 간단하게 버철호스트랑 레진의 호스트와 차후 톰캣 설치 시 mod_jk 와 손쉽게 바꿔가며 사용할 수 있게 하기 위해 별도의 conf 파일로 만들어 준다.
아래처럼 따라해보자.

bash$> cd /etc/httpd
bash$> mkdir conf.custom
bash$> vi resin.conf


따로 include 해서 레진과 톰캣을 손쉽게 바꿔가면 쓰기 위한것이다.
vi resin.conf 한다음 아까 위에 지웠던 내용을 입력해준다. (-_-) (방금 욕하는 소리가 들렸다.)

LoadModule caucho_module /usr/lib/httpd/modules/mod_caucho.so
ResinConfigServer localhost 6802
CauchoConfigCacheDirectory /tmp
CauchoStatus yes

요래 하고 저장해주자.
설마 저장하는 법을 모르는 사람이 있을까봐 알려준다.
vi 편집기 상태에서  :wq! 라고 입력하고 엔터치면 된다.

참고로 아래 버철호스트는 newal.net 의 예제 이다.
자신에게 맞게 적당히 수정해주는 센스가 필요하다.
newal.net 이 돌아가는 DocumentRoot 는 /home/newal/www 이다
이 디렉토리 안에 index 파일이 존재한다. (에이 보안상 안좋은데.. 그래도 다 알려준다.)

NameVirtualHost 222.237.78.65

<VirtualHost 222.237.78.65>
   ServerAdmin newal@newal.net
   DocumentRoot /home/newal/www
   ServerName newal.net
   ServerAlias www.newal.net
   DirectoryIndex index.jsp index.php index.html index.htm
   ErrorLog logs/error_newal.net
   CustomLog logs/access_newal.net common

  # 레진을 사용하기 위해..
   Include conf.custom/resin.conf

  # 테터툴즈 사용을 위해..
   <Directory /home/newal/www>
       Options FollowSymLinks
       AllowOverride FileInfo
   </Directory>
</VirtualHost>

자 Include conf.custom/resin.conf 보이지 않는거 바로 이 버철호스트에서만 레진을 쓰겠다는것이다.

다른 버철호스트에도 레진을 적용하고 싶으면 그냥 Include conf.custom/resin.conf 요 문구만 갔다 붙여넣기 해주면 된다. 조낸 좋지 않은가?

자 이제 레진의 호스트를 잡아줘야 한다.

bash$> cd /usr/local/etc/resin-3.1.0/conf
bash$> vi resin.conf


아래 부분을 추가해줘야하는데 어디다 하는지 모를것이다.
자세하게 알려주겠다.
대략 250번째 라인을 보면 Configuration for the web-tier/load-balancer 주석이 보인다.
뭐 약간 틀릴 수도 있으니 +- 20줄 내에서 잘 찾아보자.

이 주석 바로 위에 </cluster> 가 보일것이다.
</cluster> 위에다가 추가해주면 된다.
아래가 아니라 위에다 추가하는것이다. 잘보고 추가 하자.

    <host id="newal.net" root-directory=".">
      <web-app id="/" root-directory="/home/newal/www"/>
      <web-app id="/resin-admin" root-directory="${resin.home}/php/admin">
        <prologue>
          <resin:set var="resin_admin_password"  default=""/>
          <resin:set var="resin_admin_localhost" default="true"/>
        </prologue>
      </web-app>
    </host>

잘 보면 root-directory 가 아파치에서 적은 DocumentRoot 와 일치하는것을 볼 수 있다.
당연하지만 레진이 도메인이 newal.net 일때 /home/newal/www/index.jsp 파일을 읽을 것이다.

자 이제 끝났다.
레진을 시작시켜 보자.

bash$> cd /usr/local/etc/resin-3.1.0/bin
bash$> sh httpd.sh start


요래 해주면 레진이 시작 된다. 뭐 한줄 나오고 끝이다.
이제 바로 아파치를 재시작 해준다.

bash$> /etc/init.d/httpd restart


이제 /home/newal/www 디렉토리에 index.php 파일을 만들고 파일 내용은 아래처럼 한다.

<?
phpinfo();
?>

또하나 index.jsp 파일을 만들고 내용은 아래처럼 한다.

<%
out.println("Hello World");
%>


위와 같이 대충 만들어놓고 브라우저에서 접근해보자

http://newal.net/index.php
http://newal.net/index.jsp

php정보가 나오고, Hello World 가 뜨면 성공한것이다.



더 쓰고 싶은데 귀찮아서 여기까지 쓰고 나머지는 다음에 쓰겠다..



출처 : http://newal.net/

2008년 1월 2일 수요일

We are the world - USA for Africa

FLV Player(wearetheworld.flv (16.76 MB))

라이오넬 리치]

There comes a time When we heed a certain call
우리가 어떤 부름을 새겨 듣을 때가 왔어요

[라이오넬 리치&스티비 원더]

When the world must come together as one
이제 이 모든 세계가 하나로 합해져야 할 때가 온거예요

[스티비원더]
There are people dying 많은 사람들이 죽어가고 있어요

[폴 사이먼]

And it"s time to lend ahand to life 지금이 바로 구원의 손길을 건네줄 때에요

[폴 사이먼&케니 로저스]

The greatest gift of all 모두에게 가장 위대한 선물을 말이죠

[케니 로저스]

We can"t go on pretending day by day
우린 매일같이 더 이상 위선의 모습만 보일 수는 없어요

[제임스 잉그램]

That someone,somewhere will soonmake a change
누군가가,어딘가에서 머지 않아 변화가 일어날겁니다

[티나 터너]

We are all part of god"s great big family
우리 모두는 한결같이 신의 거대한 가족의 일원이랍니다

[빌리 조엘]

And the truth,you know, love is all we need
여러분도 알다시피,우리 모두에게는 진실과 사랑이 필요한겁니다

[마이클 잭슨]

We are the world, we are the children
we are the ones who make a brighter day so let"s start giving
우리 모두는 하나(한 가족)입니다 우리 모두는 똑같은(신의)한 자손들입니다
우리 모두는 더 밝은 미래를 만들 역군들인겁니다
그러니 이제 나누어주기 시작합시다

[다이아나 로스]

There"s a choice we"re making we"re saving our own lives
우린 지금 선택의 기로에 놓여 있습니다 우린 우리 자신의 생명을 구하고 있는겁니다

[마이클&다이아나 로스]
It"s true we"ll make a better day just you and me
바로 당신과 나 우리가 진정으로 더 나은 미래를 만들겁니다

[디온 워윅]

Send them your heart so they"ll know that someone cares
그들에게 당신의 마음을 보내 주세요
그럼 그들은 누군가에게 자신들을 보살피고 있다는 사실을 알 게 될겁니다

[디온 워윅&윌리 넬슨]

And their lives will be stronger and free
그리고 그들의 생명은 더 강해지고 자유로와질거구요

[읠리 넬슨]

As God has shown us by turning stones to bread
신은 우리에게 돌을 빵으로 바꾸는 가능성을 보여주고 있습니다

[알 제로우]

So we all must lend a helping hand
그러니 우리 모두는 도움의 손길을 내밀어줘야합니다

[브루스 스프링스틴]

We are the world, we are the children
우리 모두는 하나예요 우리 모두는 한 자손입니다

[밥 딜런]
We are the ones who make a brighter day so let"s start giving
우리 모두는 더 밝은 미래를 만들 역군들인겁니다 그러니 이제 나누어주기 시작합시다

[시카고]

There"s a choice we"re making
we"re saving our own lives
it"s true we"ll make a better day just you and me
우린 지금 선택의 기로에 놓여 있습니다
우린 우리 자신의 생명을 구하고 있는겁니다
바로 당신과 나 우리가 진정으로 더 나은 미래를 만들겁니다

[마이클 잭슨]

When you"re down and out, there seems no h­ope at all
당신이 빈털털이가 되어 쓰러져 있을 땐 전혀 아무런 희망도 없는 것처럼 보이지요

[루이 휴이스]

But if you just believe there"s no way we can fall
하지만 우린 결코 쓰러질 수 없다는 진실을 믿어주기만 한다면

[신디 로퍼]

Well,well,well,well let us realize that a change can only come
그래요,그렇다면 분명히 어떤 변화가 꼭 올 수 있을거라는 사실을 우리 같이 실감해보자구요

[킴 칸스]

When we stand together as one
바로 우리가 하나되어 함께 서있을때 말이죠

**[모두 함께]
We are the world we are the children
we are the ones who make a brighter day so let"s start giving
there"s a choice we"re making we"re saving our own lives
it"s true we"ll make a better day just you and me
우리 모두는 하나예요 우리 모두는 한 자손입니다
우리 모두는 더 밝은 미래를 만들 역군들인겁니다
그러니 이데 나누어주기 시작합시다 우린 지금 선택의 기로에 놓여 있습니다
우린 우리 자신의 생명을 구하고 있는겁니다
바로 당신과 나 우린 진정으로 더 나은 미래를 만들겁니다

2008년 1월 1일 화요일

남아당자강(사나이는 자고로 강해야 한다.)

FLV Player(c_Clip_황비홍1.黃飛鴻.(이연걸).1991.AC3.5.1Ch.CD1[(009748)12-05-42].flv (8.36 MB))

남아당자강