레이블이 루비인 게시물을 표시합니다. 모든 게시물 표시
레이블이 루비인 게시물을 표시합니다. 모든 게시물 표시

2007년 2월 23일

아마록 스크립트 프로젝트

심각하게 좋은 음악 플레이어 아마록. 저는 아마록을 음악 플레이어로 쓰고 있습니다. DB까지 연동하여 체계적으로 음악을 관리할 수 있기 때문이죠. 게다가 음악 플레이어 자체의 디자인도 마음에 듭니다. 그러나 한국 가요의 가사와 앨범 표지를 자동으로 가져오지는 못합니다.

리눅스를 쓰면서 항상 불편한 것들은 내가 한국에서 생활하기 때문이라는 것을 느낍니다. 아마록에서도 조금 마음에 안 드는 점은 국내 가요들은 아마존에 앨범 표지가 없고, lyrc에 가사가 없는 것인데, 결국 이런 것은 사용자가 만들어 가는 것이라는 생각을 해 봤습니다. 사용자가 만들어야 편리해지는 것이죠. 제가 꼭 한국에서 생활하기 때문에 불편하다고 생각하기 보다는 그만큼 노력과 투자를 하지 않았기 때문일 것이라는 거죠.

그래서 만들어 보았습니다! lyrics_naver는 네이버 뮤직에서 가사를 받아오는 아마록용 루비 스크립트입니다. 이제 많은 수의 국내 가요들과 소수의 외국 가요들의 가사를 이 스크립트를 통하여 자동으로 내려받기 하실 수 있습니다. 지금 프로젝트 페이지로 가셔서 다운로드 받으실 수 있습니다. 현재 0.0.3-r1 버전이 릴리즈 되어 있습니다. 설치 방법은 문서 탭에 있는 매뉴얼을 꼭 읽어주세요. 이후에 몇몇 분들의 제안을 받아서 Cix Lyrics 라는 가사 사이트에서 가사를 검색하는 스크립트인 lyrics_cix도 만들었습니다. 만일 잘 안 되시는 분이 계시다면 글 남겨 주시면 감사하겠습니다.

가사만으로는 무언가 부족하다는 생각이 들어서 만든 것이 covers_melon 스크립트입니다. 이것은 멜론에서 음반 표지를 받아오는 아마록용 루비 스크립트입니다. lyrics_naver 만큼 높은 확률로 음반 표지를 받아오지는 않지만 이것을 돌려놓고 음악을 듣고 있노라면 모르는 사이에 꽤 많은 앨범 표지가 받아져 있는 것을 알 수 있습니다. 앨범 표지 검색률을 높이기 위하여 아직 손을 좀 봐야 합니다. 좀 더 보완이 되면 더욱 쓸만해 질 것이라고 생각합니다. 아마록에서 아마존 이외에 last.fm에서 앨범 표지를 받는 기능이 추가되었다고는 하지만, 외부 스크립트로 앨범 표지 받아오는 것을 만드는 방법은 찾아봐도 잘 없어서 가끔씩 플레이 중인 노래를 검사해서 표지가 없으면 노래가 있는 디렉토리에 앨범 표지를 다운로드 하도록 하였습니다. 이런 방식으로 동작하기 때문에 자동으로 앨범이 내려받아지는 느낌은 들지 않습니다만 음악을 계속해서 듣다 보면 앨범 표지가 적용되어 있는 것을 발견하실 수 있습니다.

가사 검색은 지금 거의 만족할 만한 수준이지만 표지 검색은 검색 확률이 매우 떨어지기 때문에 개선이 필요합니다. 저는 주로 앨범 이름을 "5집 - Pianissimo"와 같은 형식으로 써 놓기 때문에 스크립트가 앨범 표지 검색을 "서문탁 5집 - Pianissimo"로 하게 되는데, 멜론에서는 그냥 "서문탁 Pianissimo"로 검색해야 제대로 된 결과가 나오더군요. 이런 부분은 스크립트가 알아서 할 수 있도록 차차 고쳐가는 중입니다. 아울러 구글 이미지 검색을 이용하는 스크립트도 작성 중인데, 구글 이미지 검색은 거의 항상 검색이 되기 때문에 앨범명이 이상하게 되어 있으면 이상한 이미지가 다운로드 되어 버리는 문제점이 있습니다. 고민 중입니다.

제가 현재 UTF-8 인코딩을 쓰고 있어서 이것을 기준으로 하였습니다만, 다른 인코딩을 쓰시는 분이 계시면 다른 인코딩에서도 동작할 수 있도록 코드를 수정해 보겠습니다. 아마록 쓰시는 분들은 꼭 한 번 써 보시고 잘 되는지 확인 해 주셨으면 감사하겠습니다.

프로젝트 페이지: http://kldp.net/projects/amarok-script/
KLDP 블로그: http://kldp.org/node/78350/

2007년 2월 6일

루비 서적 번역 프로젝트

Jeremy McAnally라는 분께서 루비 언어에 대한 새로운 책을 쓰셨는데 온라인으로 html과 pdf 형식으로 배포를 하고 계십니다.

이런 자료 하나하나가 참 귀중한 정보가 됩니다. 분량은 그리 많지 않지만 광범위한 내용들을 압축해서 잘 다루고 있습니다. 유머감각이 참 뛰어나신 분입니다. 읽기에도 편하고 재미도 있습니다.

홈페이지에 보니까 이 분께서 호스팅 비용이 부족하다고 하시는군요. 사람들이 하루에 몇 기가 정도의 트래픽을 내면서 다운로드를 해 가는데, 트래픽만큼 호스팅 비용이 필요하겠지요. 그래서 가능하면 인쇄본을 구입해달라고 하시는군요. 국내에서는 한글로 된 문서를 찾으시는 분이 많기 때문에 좋은 책 보는데 대한 감사의 표시로 한국어로 책을 번역하고 기부를 받아서 원저작자에게 넘겨주는 방법을 쓰는 것이 어떠냐고 jachin(조성재)님께서 KLDP.org에서 제안하셨습니다. 그래서 현재 번역 프로젝트가 진행중입니다. 번역본이 나온 후에 읽어보셔도 되겠지만, 번역에 관심 있으신 분은 프로젝트 페이지로 오셔서 참여하실 수 있습니다.

현재 Humble Little Ruby Book은 거의 다 번역된 것 같습니다. 제가 번역한 부분은 2장과 6장입니다. 약간 진행이 더디어지고 있긴 하지만 5장을 제외하고는 번역이 완료되거나 진행 중입니다.

2007년 2월 4일

네이버 뮤직에서 가사 긁어오는 루비 스크립트

네이버 뮤직에서 노래 가사를 긁어오는 루비 스크립트를 작성해 보았습니다. 아마록 음악 프로그램에서 한국 가요 가사를 긁어오는데 사용하고 있습니다. 웹에서 동작을 확인해 볼 수 있게 하기도 해 보았습니다.

따로 네이버의 API 등을 이용한 것은 아니고, 그저 HTTP Get을 한 결과를 바탕으로 정규식을 이용하여 가사를 추출해 해는 방식입니다. 처음부터 songid를 알 수 없기 때문에 검색 페이지에서 맨 위에 있는 노래의 songid를 알아내서 이 노래의 가사를 찾아내는 방식으로 동작합니다.

상당히 간단합니다. 다음에 나오는 lyric_naver.rb 파일에는 검색 결과를 간단히 html 형식으로 출력할 수 있는 함수도 제공합니다. 아마록에서 쓰는 스크립트는 이것을 이용하고, 추가로 아마록과 연결되는 처리, XML 쓰기 처리 등을 해 줍니다. 웹에서 쓰기 위해서는 간단히 getLyricHtml을 호출하기만 하여 뿌려주기만 하면 됩니다.

물론 스크립트에는 흠이 많습니다. 이상적으로는 국내가요와 외국 가요를 구분하여 각기 다른 곳에서 가사를 받아오면 좋겠지만, 일단은 이정도로만 해 둡니다.

2007년 1월 24일

나의 스크립트 언어 이야기

친구와 스크립트 언어에 대한 얘기들을 나눴는데, 느낌이 와 닿아서, 충동적으로 글을 쓰게 되었습니다. 스크립트 언어라는 것에 대해서 소개합니다. 그리고 제 자신의 스크립트 언어에 대한 비하인드 스토리를 공개합니다.

예전에는 언어는 두 가지로 나누어져 있었습니다. 컴파일 언어와 인터프리터 언어로 말이죠. 컴파일 언어는 대부분 시스템을 건드릴 수 있는 저수준까지 내려갈 수 있고, 인터프리터 언어는 그렇지 않고 속도도 훨씬 느리죠.

그러나 이런 구분이 이제는 조금 모호해졌습니다. 스크립트 언어로도 얼마든지 운영체제에서 제공하는 수준에 접근할 수가 있게 되었죠. bash와 펄이 대표적으로 그런 언어였습니다. 점점 다른 언어들과의 교환 메커니즘이 발달하게 되고 이제는 스크립트 언어들이 풀언어(서로 다른 언어로 개발된 프로그램들을 이어 붙여주는 프로그램)로써 자주 활용되기도 합니다.

제가 본격적으로 스크립트 언어를 다루게 된 발단은 학부 2학년 때로 거슬러 올라갑니다. 그 당시 저는 수동으로 html을 대충 쳐서 만든 홈페이지를 만들었고, 여기에 제가 해야 될 일들의 목록을 적어 놓았습니다. 물론 홈페이지 내에서 쉽게 이것을 추가하거나 삭제할 수 있는 것이 아닌 바보같은 홈페이지였죠. 제가 그 당시 한 일은 이 html에서 grep 명령을 이용하여 할일 목록의 내용만을 추출한 것이었습니다. 그래서 학교 리눅스 시스템을 터미널로 접속하면 시작하자마자 날짜별로 해야 될 일의 목록이 터미널에 출력되고 저에게 압박을 가하는 일이었습니다.

그 이후에 나라의 부름을 받고 업무를 보게 되었는데, 저는 마음대로 컴파일러를 설치할 수 없었습니다. 물론 업무 내용상 관리자 권한이 주어지는 행운아였지만, 감시가 심한 상사는 컴퓨터들을 모니터링합니다. cmd.exe만 실행하여 검은 화면만 떠도 해킹으로 의심을 하는 상황이니까요.(결국 커맨드 창 배경화면을 흰색으로 바꾸니까 메모장처럼 보여서 의심을 안 받더군요.) 결국 일과 시간이 끝나고 나면, 메모장에 적힌 소스를 보면서 두뇌로 컴파일 하는 수 밖에 없었는데 할 수 있는 좋은 일을 찾은 것입니다.

그 당시 하는 업무는 매우 비효율적이었습니다. 손님이 오시면 MS 워드 문서에 있는 계약서 양식에 손님의 수많은 개인정보를 적습니다. 개인 정보 종류가 꽤나 많습니다. 그리고 나서, 다른 소프트웨어를 이용하여 서비스 요청 문서를 만듭니다. 똑같은 정보를 한번 더 입력합니다. 그리고 나서 인쇄해서 문서를 파일에 넣고, 이것을 전산환경으로 찾아볼 수 있게 하기 위하여 MS Access 데이터베이스에 똑같은 내용의 정보를 다시 다 입력해 넣습니다. 그 뒤에, 종이로 만들어진 일지 표에 똑같은 내용의 정보를 손으로 다 써 넣습니다. 개인정보 항목이 적으면 문제가 없겠지만 상당히 많습니다. 경우에 따라서는 한 두 곳에는 정보가 들어가지 않아서 데이터의 일관성을 해치기도 했습니다.

네, 그렇습니다. MS 오피스 제품군은 VB 스크립트라는 언어로 제어할 수 있습니다. MS Access는 덤으로 SQL을 이용할 수 있습니다. 저는 작업에 들어갔습니다. MS 오피스가 떠 있을 뿐이었으므로, 이것은 하얀 배경 화면이기 때문에 아무 문제가 없었습니다. MS Access에 자료를 한번만 입력하고 Report 기능 등을 이용하면 필요한 다양한 양식의 문서를 동일한 정보로 인쇄할 수 있었습니다. 게다가 날짜 계산 같은 것도 자동으로 줍고, 일을 넘겨받는 부서에서 필요한 정보를 요약해서 볼 수 있는 문서도 인쇄가 됩니다. 덕분에 많은 시간과 인력을 절감할 수 있었습니다. 한 손님이 서비스를 받고 나가는데 걸리는 시간은 기존의 1/4 수준으로 떨어졌고, 만족도도 올라갔습니다. 저는 이것 이외에도 업무가 있었기 때문에 다른 업무에 좀 더 집중할 수 있는 시간도 생겼습니다. 직속 상관은 이것이 무엇인지 전혀 이해하지 못했고 슈퍼바이저도 마찬가지였지만, 어느 순간 슈퍼바이저 얘기가 고객에게서 서비스에 대한 피드백이 훨씬 좋아지고 왠지는 모르지만 만족도가 높아졌다는 이유로 여러번 칭찬을 받았습니다. 조금 이상한 이유로 포상도 받았습니다.

아쉽게도 이제 제 머리속의 VBScript는 잊혀졌습니다. 이제 제가 주로 스크립트 언어를 제 시스템에서 사용하는 용도는 시스템 관리입니다. bash와 파이썬, 루비, 펄 등으로 하나하나 만들어두면 나중에는 꽤 쓸만해집니다. 작은 코드조각이지만 유용하게 됩니다. 이럴 때에는 C나 C++ 등으로 작성된 프로그램들을 바깥에서 감싸는 랩언어(이런 용어가 있는지는 모르겠습니다)가 되겠군요.

음악 듣는 프로그램인 아마록에서도 파이썬 스크립트를 많이 사용합니다. 이것으로 듣고 있는 음악의 가사를 긁어오거나, 앨범 커버 그림을 다운받아 올 수 있습니다. 가수에 대한 정보를 보여주기도 합니다. 예를 들어서 아마록에서 앨범 커버를 가져오는 곳은 아마존입니다. 그런데 국내 음악이라던지 이런 것들은 앨범 커버가 나오지 않죠. 웹에서 다운 받은 것들이라서 그런게 아니라, CD에서 추출한 경우에도 가사가 들어있지도 않습니다. 제가 국내 가요들을 재생할 때 옆에 가사가 표시되게 하려면 어떻게 해야 할까요? 아마록 소스 코드를 수정해서 긴긴 시간 다시 컴파일을 해야 할까요?

절대 그럴 필요가 없답니다. 파이썬 등으로 스크립트만 하나 작성해서 아마록에 끼워 주면 됩니다. 노래 제목이나 가수 이름으로 검색해서 얻은 텍스트 데이터에서 정규식 등을 이용해서 필요한 그림의 URL이나 가사의 위치를 알 수 있게 됩니다.

예전에 이맥스 시스템에서 elisp의 역할에 놀랐었는데, 이제 굳이 elisp이 아니더라도 이런 일을 충분히 할 수 있게 되었습니다. emacs와 같이 커스터마이징 가능한 소프트웨어를 만들기가 무척 쉬워졌다는 것이지요. 그것도 lisp보다 좀 더 쉽게 와 닿을 수 있는 형태의 언어로 말입니다.

물론 스크립트 언어로 모든 것을 할 수는 없습니다. 그러나 스크립트 언어로 할 수 있는 일이 점점 더 많아지고 있습니다. 예전에는 스크립트 언어로 한다고 하면 절대 안 될 것이라고 말했던 것들이 이제는 되고 있거든요.

삶의 묘미를 찾고 계신 분들은 스크립트 언어 하나쯤 배워 놓는 것은 어떠신가요? 배워서 지금 당장 웹 영어 사전에서 내용을 긁어오는 스크립트를 작성하셔서 편리하게 사용하셔도 좋습니다. 정말 컴퓨터에 내가 귀찮은 일들을 명령을 내리면 충실히 수행해주는 느낌. 어릴 때 누구나 꿈꾸어 왔던 로봇과 같은 모습이 아닐까요.