블로그 이미지
JEEN

서울에 사는 꽃청년의 IT찌질모험기

Rss feed Tistory
IT/Perl 2010.11.29 01:20

[ Perl / Acme 大全 ] Perl 동인문화의 결정체...

  지난번 래리영감님의 세션만 듣고 황급히 회사로 돌아가야만 했던 YAPC::Asia 2010.

  그리고 돌아가는 길에 잡은 책이 이것이었습니다.
Apple | iPhone 3GS | 1/15sec
Apple | iPhone 3GS | 1/15sec
Apple | iPhone 3GS | 1/15sec

  뭐 대충 책의 내용은 위의 사진처럼 Acme::* 모듈에 대한 설명이 주요 내용입니다.
  두번째 사진의 Acme::CPANAuthors::Korean 도 있구요.

  @aer0 님의 말씀으로는 Acme::CPANAuthors::Korean 은 SouthKorean 이라고 남북을 가르지 않아서 좋다라며.. 북한이나 조총련계열의 CPAN Author 라면 당연히 넣어야 되는 것 아니냐 라는 말씀을 하시었습니다. 물론 당연합니다. 실제로 일본에서 펄 쓰는 조총련계 개발자를 본 적이 있구요. :-) 
  세번째는 #perl-kr 의 혁명적 투쟁의 선봉장이신 @keedi 님의 Acme::SaBalTongMun 입니다. 다른 모듈과는 달리 1페이지를 통째로 써서 상당히 자세하게 소개되어 있습니다. :-) @keedi++

  아무튼 일본은 이렇게 동인문화를 바탕으로 한 비정규간행물도 이렇게 YAPC 라는 이벤트를 빌려서 판매되고 있었습니다. (코미케에서도 팔았다는 얘기를 어디선가 들은 기억이 있기도 합니다)

  진정으로 모범이 되는 활동입니다. !!!
신고
이빨까기 2010.11.10 00:56

요즘 스팸의 퀄리티가 너무 높아진 것 같다

How are you doing today ? I hope you are doing fine .

I am a cheerful, sociable and sincere girl. Young, pretty without bad habits. My friends say that I'm a glamorous and interesting girl.

I'm a great dreamer. I believe that life will help me to find my only man. I'd like to meet with serious, honest man for start family or relationship. I search only for serious relations. I really hope it's you.I hope I am interested in you and you will answer me.

I saw your profile at www.cpan.org

Remeber that love has, no colour barrier, religious,nationality or distance barrier, but love matters most,my happiness/ my joy all is in your hands,please don't let me down.

I have been looking for, And I have something special to tell you about me,So please contact me directly ( susan*******@att.net )
and I can also send my picture to you.

I will be waiting for your response Love.

Yours Susan

  맙소사 제 프로필을 cpan 에서 봤대요. 'Perl + 여자 라면 흔치 않은데 ...' 라고 괜히 설레발...
  아무튼 이런 스팸메일도 Amazon 급으로 낚기 시작하면... 정말 위험해질 것 같다는 생각이 절실하게 듭니다. 

  개인속성을 도출한 스팸메일이라... ;ㅁ;

  아무튼 맨 마지막 'Yours Susan' 에 괜히 양볼이 발그레졌습니다 > . <
신고
IT/Perl 2010.05.21 16:57

[ Pusher/WebSockets ] 아얄씨로그에의 Pusher 적용에 대해

2010/05/21 - [IT/Perl] - [ Perl/Catalyst ] 새로 태어난(?) 아얄씨 로그뷰어

 앞의 엔트리에서 가볍게 Pusher 를 다뤘는데, 그거에 대한 자세한 얘기를 해보겠습니다. 

 요즘 어딜봐도 웹 이슈는 HTML5 이고, 애플은 특히 Flash 죽이기에 앞장서며 HTML5 를 강조하고 있습니다.
 그 HTML5 의 기능적인 면 중에서 짚어볼 만한게 바로 WebSockets 입니다. 여러 HTML5 를 소개한 페이지에서 WebSockets 를 다루고 있으니 자세한 내용은 그쪽을 참고하시기 바랍니다.



 Pusher 에 가입하면 app_id 등등의 인증정보를 얻을 수 있습니다. 이게 바로 Pusher 에 리퀘스트를 보낼 때 꼭 필요한 값들입니다.  Pusher 에 로그인해서 대쉬보드로 가면 기본적인 테스트를 해볼 수 있습니다. 
 그리고 WebSockets 를 지원하는 브라우저는 한정되어 있죠. 아마 WebKit 기반의 브라우저에서만 현재 지원되는 것으로 알고 있고 FF 도 차기버젼에서 지원예정인 걸로 알고 있습니다. 고로 Chrome 등을 쓰는 사람에 한정되서 사용할 수 있다는 것인데요. 하지만 Pusher 의 경우는 이를 대비해서 플래쉬로 구현된 WebSockets 을 준비해뒀습니다. (고로 Pusher 를 사용하는 한 IE 에서도 Websockets 을 쓰는 데 문제가 없는 것으로 알고 있습니다) 

  자 그럼, 저 아얄씨 로그뷰어에서 Pusher 를 사용한 것을 보자면...
 IRC 채널에 들어간 '봇'이 있고.
 IRC 채널에서 대화한 내용을 표시해주는 웹이 있고,
 그 둘을 이어주는 Pusher 가 있다고 생각하면 됩니다. (이게 WebSockets 서버)

 시나리오를 보면 @y0ngbin 이 "OS뭐에요? zzzZZZ" 라고 했을 때, IRC 봇은 그 내용을 잡습니다. 
 그리고 누가,무슨 내용을 말했는가 하는 정보를 Pusher 로 POST 해줍니다.

 아, 이때 IRC 대화내용을 표시해주는 웹에 접속해있다고 가정합니다. 이 페이지에서의 소스는 아래와 같죠. 

  
 위의 소스대로 Pusher 와 WebSockets 으로 연결됩니다. 지정한 채널과 이벤트이름에 따른(위의 봇에서 Pusher 로 POST 해준 정보) 값이 해당 이벤트로 바인드되고, 여기에서 값이 넘어오면 이런저런 처리를 해주면 됩니다.

 여러가지 WebSockets 서버 구현을 보고(Web::Hippie나.. 기타등등) 띄워보려고 했는데.. 서버 자원도 없고 해서 때려치웠습니다 =3=3

  특이사항은 처음에 Pusher 의 문서를 보고 리퀘스트 날리는 거 만들다가... 나중에 CPAN 을 보니까 WWW::Pusher 가 있어서 뻘짓했구나 라고 느꼈습니다. ..

  아무튼 리얼타임웹은 눈앞에 있고, 웹개발자들은 더욱 바빠질 것이고, 이것이 새로운 사업아이템으로 연결이... 등등등... 앞으로 많은 공부가 필요한 시점입니다. ;ㅁ;

  위의 아얄씨 로그는 github 상에 있으니.. 필요하신 분은 참고하세요.

신고
IT/Perl 2010.03.07 13:19

[Perl/CPAN] cpanm 이 당신의 Perl 생활을 윤택하게 해드립니다

  Perl 하면 CPAN 이고, CPAN 하면 Perl 이라고 합니다.
  Perl 의  CPAN 의존도가 높고, 어떤 이는 Perl 은 CPAN 을 쓰기 위한 툴이라는 얘기까지 할 정도니까요.

  서론은 잠시 제껴놓고, 최근 이런 CPAN 계에 큰 혜성이 등장했습니다.
  cpanm 이 그것입니다.

  CPAN 도 그렇고 CPANPLUS 도 좀 그렇다 (덩치/유지보수의 어려움 등) 해서 태어난 것이 cpanm 입니다.
  cpanm 을 위해서 고작 8M정도의 메모리만 필요하다니 초경량인 셈이지요.

  사용하기 위해서는 CPAN 이고 뭐고 그냥 커맨드 하나 달랑 받아오면 되는 것입니다. 
wget http://xrl.us/cpanm
  다운받아서 실행권한주고 적당한 툴이 모여있는 디렉토리로 옮겨줍니다.

 그래도 굳이 cpan 을 써서 인스톨 하겠다 하신다면...   App::cpanminus 를 설치하면 cpanm 이라는 커맨드를 사용할 수 있습니다.

  기존에 local::lib 을 사용하고 있다면 자동으로 local::lib 디렉토리에 맞춰줍니다.
  그렇지 않으면 홈디렉토리에 기본으로 ~/perl5 라는 디렉토리를 생성하고 거기에 모듈들을 인스톨해갑니다. 
  (.modulebuildrc 에 기재된 대로..)


  사용법은 그냥 cpanm [모듈이름] 만 하면 땡입니다.
  CPAN 과는 달리 의존모듈 설치시에 물어보지 않고 알아서 다 깔아줍니다.
  뿐만아니라 버젼을 지정해서 설치가 가능하거나, 인터넷상이나 로컬 디렉토리 안의 특정 tar.gz 로 된 배포판을 지정해도 
  자동으로 설치가 가능합니다.
  github 등에서 개발하고 있는 어떤 모듈들이 있다면 cpanm 으로 github 안에 작업중인 배포판만 지정해주면 되니, 
  git clone(or wget -> tar zxvf [...] -> cd [...]) -> Makefile.PL -> make -> make test -> make install 
  이것이 cpanm 한방으로 끝난다는 얘기지요.

  그리고 cpanm은 여러가지 plugin 들을 사용할 수 있습니다. 
  현재 기본적인 사용으로는 꺼논 상태이지만..
  홈디렉토리 안의 .cpanm/plugins/ 에 플러그인을 집어넣고,
  PERL_CPANM_DEV 환경변수를 설정해주면 됩니다.
  
  growl 플러그인을 사용하면 모듈 설치가 끝나거나 에러가 났을 경우에 Growl 이 알려주기 때문에...
  계속해서 터미널을 쳐다보고 있을 필요도 없겠죠 :-) (거기에 의존모듈 설치의향같은 건 물어보지 않으니까요) 

  아래의 github 페이지에 자세한 내용이 나와있으니 한번 훑어보세요. 플러그인도 여기에서 받을 수 있습니다.


** 추기

 cpanm 의 초기설정에 대한 자세한 설명은 aero 님의 블로그에도 잘 설명되어 있습니다. @aer0++


** 추기2 

  App::cpanoutdated 를 사용하면 현재 설치된 CPAN 모듈들의 새로운 버젼이 있는지에 대한 체크가 가능합니다. cpan-outdated 커맨드를 이용해서 새로운 버젼의 모듈들의 이름을 알 수 있고, 이것을 cpanm 으로 넘기면 모든 낡은 CPAN 모듈들을 한방에 새로운 버젼으로 업데이트할 수 있게 됩니다.

cpan-outdated | cpanm

신고
cpan, cpanm, cpanminus, perl
IT/Perl 2010.03.01 10:34

[ Perl ] 불친절한 CPAN RSS 를 어떻게 해줬으면 하는 소망의 결과

  Perl 을 사용하지만 CPAN RSS 는 별로 사용하지 않습니다.
  모듈의 어떤 부분이 바뀌었는지 하는 것과, 뭐 기타 자세한 여러 사항들이 빠져있고... 덩그러니 

   이렇게 DESCRIPTION 하나로 땡인 것입니다. 그래서 주목하거나, 관심있는 모듈에 대해서는 매번 들어가서 ChangeLog 를 확인하거나 해야하는 불편이 있었던 것이죠.
  그런 도중에 최근에 일본의 한 개발자(Naoki Tomita)가 Yahoo Pipes 를 통해서 이래저래 만진 결과물을 내놨습니다.


   이제 CPAN Author 정보에 대한 것 뿐 아니라, 모듈 관련 정보와 링크..
   ChangeLog 가 있다면 ChangeLog 까지 다 보여줍니다.
 
* Yahoo Pipe for CPAN Recent
  
* Author's Blog

  Yahoo Pipes 의 백그라운드는 Perl 로 만들어진 게 아닐까 하는 얘기가 있네요. (Object 를 문자화하니까 Yahoo::RSS::Item=HASH(.....) 가 튀어나왔다고) 

  요즘 Yahoo Pipes 를 사용해서 기존의 RSS 등을 개선하는 것들을 많이 보곤하는데, 저도 기회가 되면 한번 건드려 볼까 합니다.

** 추기 

  요근래 일본의 tokuhirom 씨가 만들어낸 Yet Another CPAN Recent Changes 도 있습니다.
  
  
  위의 Yahoo Pipe 를 이용한 피드에 너무 많은 정보가 있으며 갱신속도가 느리다라는 지적으로 최소한의 정보만 뽑아냈다고 합니다(모듈 이름, 버젼, ChangeLog, Author, URL, Download)
신고
IT/Perl 2010.02.07 00:55

[ CPAN ] Perl 로 이루는 남북/세계 평화! CPAN Author 가 됩시다!

http://search.cpan.org/~revmischa/RTSP-Client-0.1/

  죄송합니다. 제목은 일단 훼이크입니다.
  
  CPAN RSS 를 보고 깜딱 놀랐는데, 갑자기 CPAN Author 사진에 북한의 김정일 사진이 올라와 있더군요. "북한의 CPAN Author" 일까!!? 하고 봤는데, 이름은 Mischa Spiegelmock 랍니다. 왠지 독일틱한데요... Author 에 대한 자세한 정보는 잘 모르겠네요.

  국정원이나 검찰이 이를 계기로 국내 Perl Mongers 를 몽땅 잡아들여서 수사를 한다거나... 하는 염려를 할 정도로 걔네들 하는 꼬락서니가 좀 개판이기는 하지만...

  세계의 유명인 복을 김정일의 사진이 CPAN Author 페이지에 걸렸다는 게 뭐랄까 미묘한 감정이네요. :-)
  // 부디 국내 CPAN Author 및 Perl Mongers 들의 안위를 빕니다.

** 또다른 특이한 CPAN Author 로는 ... 
  "바보 양키스" 라고 Author Name 에 적힌 Ashley Pond V 입니다.
신고
IT/Perl 2009.12.02 00:04

[ Acme::CPANAuthors::* ] CPAN Author 들의 정보를 달달 볶아보기


  작년 YAPC 도 그랬고, 올해 YAPC 에서도 어김없이 그해의 Ranking 을 발표했습니다.

  YAPC::Asia 2009 의 이튿날 LT 에서 2009년에 가장 많은 CPAN 모듈을 뽑아낸 일본의 CPAN Author 말하곤 했습니다. 그때 사용된 모듈이 Acme::CPANAuthors::* 입니다.

  마지막 네임스페이스에는 각국의 CPAN Authors 들의 리스트를 등록해나가며 나름 지역별로 통계를 내고 있습니다. 그가 어떤 모듈을 언제 뽑아냈는지, 어떤 빈도로 뽑아내고 있는지, 그 나라에서 얼마나 많은 활동을 하고 있는지등의 데이터를 뽑아낼 수 있지요.

  꼭 국가로 한정하지는 않습니다. 어떤 큰 프로젝트에 속해있는 CPAN Authors 들까지도 저 네임스페이스를 사용해서 추가해가는 움직임입니다.

  어떤 것들이 있나 보자면...

  http://search.cpan.org/search?query=Acme%3A%3ACPANAuthors&mode=all
 
  이와 같습니다.

  다른 여러나라들도 있길래... 거기에 동참해서 저도 Acme::CPANAuthors::Korean 이라는 모듈을 추가했습니다.

  http://search.cpan.org/perldoc?Acme::CPANAuthors::Korean

  내용을 보시면 알겠지만... 완전 날로먹는 CPAN 모듈입니다. :-)
  이렇게 쉽게되는 CPAN Author. 부끄럽기 그지 없습니다. ;ㅁ;

  혹 주위에 알고계신 CPAN Author 가 있으시다거나, 자신이 CPAN Author 라고 하시면...

http://github.com/JEEN/Acme-CPANAuthors-Korean

  이 리포지트리에 참가해주세요!
신고
IT/Perl 2009.12.01 16:17

[ cpanf ] CPAN 얼리어답터가 되자!


 Perl 을 사용하시는 분들에게 있어서 CPAN 은 구원의 손길입니다.
 거꾸로, Perl 을 사용하면서 CPAN 을 모르신다면, 지금 CPAN으로 손을 뻗어보세요.
 (CPAN 에 대한 설명은 생략하겠습니다)

 저는 약간 얼리어답터 성향입니다. 새로운 것이 나오면 일단 깔고 봐야 직성이 풀리죠.
 그래서 관심있는 것은 CPAN 에 올라가기 전의 개발하는 Repository 에 들락거리며 소스받아서 인스톨하곤 합니다.
 예를들어, 올해 YAPC::Asia 에서부터 활발하게 움직이기 시작한 Plack 같은 것이나,
 AnyEvent 관련 모듈입니다.

 제가 항상 서식하는 IRC 에는 봇을 통해서 최신 RSS 를 자동으로 통지해줍니다. 물론 이 RSS 중에는 최근에 올라온 CPAN 모듈에 관한 리스트가 좌르르륵 나옵니다.
 하지만 왠일인지 그 모듈의 최신 버젼은 금방금방 사용할 수 없습니다. 아, 여기에 조건을 붙인다면 "장소에 따라서" 입니다. 바꿔말하면 사용하는 "미러"에 따라 true/false입니다.
 
 CPAN Author 가 어떤 CPAN 모듈을 올리면 메인 미러사이트에 올라갑니다. 그리고 세계각국의 CPAN 미러로 미러링해주겠지요. 이 과정이 있기 때문에 정확하지는 않지만 미러에 따라서는 30분넘게 그 모듈의 최신버젼을 만져보지 못하는 경우가 생깁니다.

 그런 현실을 타개하기 위한 것이 바로 cpanf 입니다.

 App::CPAN::Fresh 모듈을 설치하면 cpanf 커맨드가 생기며, cpanf 는 Friendfeed 에 등록되는 CPAN 모듈의 리스트에서 최신 버젼과 매치시켜줍니다. 그 버젼이 있다면 CPAN::Inject 를 통해서 이 모듈이 등록된 미러를 등록해서 받아옵니다. 최신버젼을 발견하지 못했을 때는 지금껏 사용하던 CPAN 미러의 최신모듈을 인스톨하게 되는 것입니다.

 사실 저도  매번 사용하는 것도 아니지만, 때때로 관심가는 모듈을 서둘러 설치해보고 싶을 때는 cpanf 를 자주 이용하게 됩니다. 그정도의 조급증이 있는지도 모르겠지요 :-)
 
  cpanf 에 대한 그 이외의 설명에 대해서는 아래의 링크를 참고해주세요.

http://bulknews.typepad.com/blog/2009/09/introducing-cpanf-appcpanfresh.html
http://search.cpan.org/perldoc?App::CPAN::Fresh

--
  cpanf 에 대한 소개는 좀 많이 늦은 감이 있습니다. Things 에 등록해둔 것을 깜빡하다가 최근에 꺼내놓고 이제야 이렇게 포스팅하게 되네요.
신고
IT/Perl 2009.10.02 19:11

[ShipIt] Software Release Tool - ShipIt with CPAN/Git/SVN Commit/Tag/Upload

   WWW::Shorten::Durl 을 업로드하면서 ShipIt 을 사용해봤습니다. ShipIt 은 LiveJournal 등을 만든 Brad Fitzpatrick 씨가 만든 소프트웨어 릴리즈 툴입니다. SVN/SVK/Git 에 자동으로 커밋, 푸시, 배포판을 만들어 태그도 생성해주고, CPAN 도 자동으로 업로드 해줍니다.
  꼭 Perl 에서만 쓸 수 있다는 제약은 없습니다. 하지만 제가 Perl 을 쓰니까 Perl 을 기준으로 설명드리겠습니다.

  우선 제가 WWW::Shorten::Durl 을 다 만들었다고 하고.. 이제 배포판을 만들어서 github 나 SVN 섭, 그리고 PAUSE 로 올리려고 합니다. ShipIt 을 쓰기 이전에는 대략 이런 플로우를 거칩니다.

  1. 배포판 버젼 지정/설정
  2. 신버젼 ChangeLog 기재
  3. 배포판 생성 테스트
  4. 커밋
  5. 태그
  6. 배포판 생성
  7. CPAN 업로드

  자... 그럼 대략 몇 번의 키보드 타이핑과 마우스를 몇번이나 클릭해야할까요? 아무튼 시간과 체력적인 면에서 많은 비용이 드는 것은 당연하겠죠.

  그럼 ShipIt 을 사용한다고 해봅니다. 그 전에 일단 ShipIt 을 실행할 준비를 해야겠죠.

  ShipIt 과 cpan-upload-http 를 설치합니다.

  ShipIt 은 평범하게 CPAN 을 통해서 설치할 수 있지만 cpan-upload-http 는 CPAN 인덱서에 걸리지 않는 듯 하니 직접 페이지에서 다운로드해서 설치합니다.
$ wget http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/cpan-upload-http-2.4.tar.gz
$ tar zxvf cpan-upload-http-2.4.tar.gz
$ cd cpan-upload-http-2.4
$ perl Makefile.PL
$ make & (sudo) make install   # use local::lib!!
  ShipIt 모듈 페이지에 자세한 설명이 나와있지만 여기서 다시 설명하면... 프로젝트의 루트 디렉토리에서

  1. 설정파일을 만듭니다. (프로젝트 루트 디렉토리에 .shipit 파일이 생성됩니다)
$ shipit --write-config
  2. 설정파일을 자신이 원하는 스텝/액션에 맞게 설정합니다.
# .shipit file
steps = FindVersion, ChangeVersion, CheckChangeLog, DistTest, Commit, Tag, MakeDist, UploadCPAN
git.push_to = origin
  3. shipit 커맨드를 실행합니다.
$ shipit
Running step ShipIt::Step::FindVersion=HASH(0x10099c228)
Current version is: 0.04
Next/release version? [0.04]                                                                                                                                                      
Running step ShipIt::Step::ChangeVersion=HASH(0x10099c1f8)
Running step ShipIt::Step::CheckChangeLog=HASH(0x10099c0d8)
No mention of version '0.04' in changelog file 'Changes'
Edit file? [Y/n] y                                                                                                                                                                
Running step ShipIt::Step::DistTest=HASH(0x10099c2e8)
include /Users/jeen/Work/dev/WWW-Shorten-Durl/inc/Module/Install.pm
include inc/Module/Install/Metadata.pm
include inc/Module/Install/Base.pm
include inc/Module/Install/AuthorTests.pm
include inc/Module/Install/TestBase.pm
include inc/Module/Install/Include.pm
include inc/Test/Base.pm
include inc/Test/Base/Filter.pm
include inc/Spiffy.pm
include inc/Test/More.pm
include inc/Test/Builder.pm
include inc/Test/Builder/Module.pm
include inc/Module/Install/WriteAll.pm
include inc/Module/Install/Makefile.pm
include inc/Module/Install/Win32.pm
include inc/Module/Install/Can.pm
include inc/Module/Install/Fetch.pm
Writing Makefile for WWW::Shorten::Durl
Writing META.yml
rm -rf WWW-Shorten-Durl-0.04
/opt/local/bin/perl "-Iinc" "-MExtUtils::Manifest=manicopy,maniread" \
        -e "manicopy(maniread(),'WWW-Shorten-Durl-0.04', 'best');"
mkdir WWW-Shorten-Durl-0.04
mkdir WWW-Shorten-Durl-0.04/inc
mkdir WWW-Shorten-Durl-0.04/inc/Test
mkdir WWW-Shorten-Durl-0.04/inc/Test/Base
mkdir WWW-Shorten-Durl-0.04/inc/Module
mkdir WWW-Shorten-Durl-0.04/inc/Module/Install
mkdir WWW-Shorten-Durl-0.04/xt
mkdir WWW-Shorten-Durl-0.04/inc/Test/Builder
mkdir WWW-Shorten-Durl-0.04/lib
mkdir WWW-Shorten-Durl-0.04/lib/WWW
mkdir WWW-Shorten-Durl-0.04/lib/WWW/Shorten
mkdir WWW-Shorten-Durl-0.04/t
cd WWW-Shorten-Durl-0.04 && /opt/local/bin/perl "-Iinc" Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for WWW::Shorten::Durl
cd WWW-Shorten-Durl-0.04 && make LIBPERL_A="libperl.a" LINKTYPE="dynamic" PREFIX="/Users/jeen/local" INSTALL_BASE="/Users/jeen/local"
cp lib/WWW/Shorten/Durl.pm blib/lib/WWW/Shorten/Durl.pm
Manifying blib/man3/WWW::Shorten::Durl.3pm
cd WWW-Shorten-Durl-0.04 && make test LIBPERL_A="libperl.a" LINKTYPE="dynamic" PREFIX="/Users/jeen/local" INSTALL_BASE="/Users/jeen/local"
PERL_DL_NONLAZY=1 /opt/local/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'inc', 'blib/lib', 'blib/arch')" t/*.t
t/durl.t .. ok  
All tests successful.
Files=1, Tests=4,  1 wallclock secs ( 0.03 usr  0.01 sys +  0.16 cusr  0.03 csys =  0.23 CPU)
Result: PASS
rm -f \
      *.a core \
      core.[0-9] blib/arch/auto/WWW/Shorten/Durl/extralibs.all \
      core.[0-9][0-9] Durl.bso \
      pm_to_blib.ts core.[0-9][0-9][0-9][0-9] \
      Durl.x  \
      perl tmon.out \
      *.o pm_to_blib \
      blib/arch/auto/WWW/Shorten/Durl/extralibs.ld blibdirs.ts \
      core.[0-9][0-9][0-9][0-9][0-9] *perl.core \
      core.*perl.*.? Makefile.aperl \
      perl Durl.def \
      core.[0-9][0-9][0-9] mon.out \
      libDurl.def perlmain.c \
      perl.exe so_locations \
      Durl.exp
rm -rf \
      blib
mv Makefile Makefile.old > /dev/null 2>&1
rm -f \
      Makefile.old Makefile
rm -rf \
      MYMETA.yml WWW-Shorten-Durl-0.04
rm -f WWW-Shorten-Durl-0.04.tar.gz
rm -f MANIFEST.bak _build
/opt/local/bin/perl "-Iinc" "-Ilib" "-MModule::Install::Admin" -e "remove_meta()"
rm -rf inc
/opt/local/bin/perl "-Iinc" "-MExtUtils::Manifest=fullcheck" -e fullcheck
Running step ShipIt::Step::Commit=HASH(0x10099d628)
[master 8a222dc] Checking in changes prior to tagging of version 0.04.  Changelog diff is:
 2 files changed, 6 insertions(+), 2 deletions(-)
Running step ShipIt::Step::Tag=HASH(0x10099f520)
pushing to origin at /Users/jeen/local/lib/perl5/ShipIt/VC/Git.pm line 92.
Counting objects: 14, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (8/8), 953 bytes, done.
Total 8 (delta 3), reused 0 (delta 0)
To git@github.com:JEEN/WWW-Shorten-Durl.git
 * [new tag]         0.04 -> 0.04
Running step ShipIt::Step::MakeDist=HASH(0x10099f628)
include /Users/jeen/Work/dev/WWW-Shorten-Durl/inc/Module/Install.pm
include inc/Module/Install/Metadata.pm
include inc/Module/Install/Base.pm
include inc/Module/Install/AuthorTests.pm
include inc/Module/Install/TestBase.pm
include inc/Module/Install/Include.pm
include inc/Test/Base.pm
include inc/Test/Base/Filter.pm
include inc/Spiffy.pm
include inc/Test/More.pm
include inc/Test/Builder.pm
include inc/Test/Builder/Module.pm
include inc/Module/Install/WriteAll.pm
include inc/Module/Install/Makefile.pm
include inc/Module/Install/Win32.pm
include inc/Module/Install/Can.pm
include inc/Module/Install/Fetch.pm
Checking if your kit is complete...
Warning: the following files are missing in your kit:
    META.yml
Please inform the author.
Writing Makefile for WWW::Shorten::Durl
Writing META.yml
rm -rf WWW-Shorten-Durl-0.04
/opt/local/bin/perl "-Iinc" "-MExtUtils::Manifest=manicopy,maniread" \
        -e "manicopy(maniread(),'WWW-Shorten-Durl-0.04', 'best');"
mkdir WWW-Shorten-Durl-0.04
mkdir WWW-Shorten-Durl-0.04/inc
mkdir WWW-Shorten-Durl-0.04/inc/Test
mkdir WWW-Shorten-Durl-0.04/inc/Test/Base
mkdir WWW-Shorten-Durl-0.04/inc/Module
mkdir WWW-Shorten-Durl-0.04/inc/Module/Install
mkdir WWW-Shorten-Durl-0.04/xt
mkdir WWW-Shorten-Durl-0.04/inc/Test/Builder
mkdir WWW-Shorten-Durl-0.04/lib
mkdir WWW-Shorten-Durl-0.04/lib/WWW
mkdir WWW-Shorten-Durl-0.04/lib/WWW/Shorten
mkdir WWW-Shorten-Durl-0.04/t
/opt/local/bin/perl "-Iinc" -I. "-MModule::Install::Admin" -e "dist_preop(q(WWW-Shorten-Durl-0.04))"
COPY_EXTENDED_ATTRIBUTES_DISABLE=1 COPYFILE_DISABLE=1 tar cvf WWW-Shorten-Durl-0.04.tar WWW-Shorten-Durl-0.04
a WWW-Shorten-Durl-0.04
a WWW-Shorten-Durl-0.04/.gitignore
a WWW-Shorten-Durl-0.04/Changes
a WWW-Shorten-Durl-0.04/inc
a WWW-Shorten-Durl-0.04/lib
a WWW-Shorten-Durl-0.04/Makefile.PL
a WWW-Shorten-Durl-0.04/MANIFEST
a WWW-Shorten-Durl-0.04/META.yml
a WWW-Shorten-Durl-0.04/README
a WWW-Shorten-Durl-0.04/t
a WWW-Shorten-Durl-0.04/xt
a WWW-Shorten-Durl-0.04/xt/01_podspell.t
a WWW-Shorten-Durl-0.04/xt/02_perlcritic.t
a WWW-Shorten-Durl-0.04/xt/03_pod.t
a WWW-Shorten-Durl-0.04/xt/perlcriticrc
a WWW-Shorten-Durl-0.04/t/durl.t
a WWW-Shorten-Durl-0.04/lib/WWW
a WWW-Shorten-Durl-0.04/lib/WWW/Shorten
a WWW-Shorten-Durl-0.04/lib/WWW/Shorten/Durl.pm
a WWW-Shorten-Durl-0.04/inc/Module
a WWW-Shorten-Durl-0.04/inc/Spiffy.pm
a WWW-Shorten-Durl-0.04/inc/Test
a WWW-Shorten-Durl-0.04/inc/Test/Base
a WWW-Shorten-Durl-0.04/inc/Test/Base.pm
a WWW-Shorten-Durl-0.04/inc/Test/Builder
a WWW-Shorten-Durl-0.04/inc/Test/Builder.pm
a WWW-Shorten-Durl-0.04/inc/Test/More.pm
a WWW-Shorten-Durl-0.04/inc/Test/Builder/Module.pm
a WWW-Shorten-Durl-0.04/inc/Test/Base/Filter.pm
a WWW-Shorten-Durl-0.04/inc/Module/Install
a WWW-Shorten-Durl-0.04/inc/Module/Install.pm
a WWW-Shorten-Durl-0.04/inc/Module/Install/AuthorTests.pm
a WWW-Shorten-Durl-0.04/inc/Module/Install/Base.pm
a WWW-Shorten-Durl-0.04/inc/Module/Install/Can.pm
a WWW-Shorten-Durl-0.04/inc/Module/Install/Fetch.pm
a WWW-Shorten-Durl-0.04/inc/Module/Install/Include.pm
a WWW-Shorten-Durl-0.04/inc/Module/Install/Makefile.pm
a WWW-Shorten-Durl-0.04/inc/Module/Install/Metadata.pm
a WWW-Shorten-Durl-0.04/inc/Module/Install/TestBase.pm
a WWW-Shorten-Durl-0.04/inc/Module/Install/Win32.pm
a WWW-Shorten-Durl-0.04/inc/Module/Install/WriteAll.pm
rm -rf WWW-Shorten-Durl-0.04
gzip --best WWW-Shorten-Durl-0.04.tar
Distfile now at /Users/jeen/shipit-dist/WWW-Shorten-Durl-0.04.tar.gz
Running step ShipIt::Step::UploadCPAN=HASH(0x10099f580)
Upload to CPAN? [Y/n] Y                                                                                                                                                           
$
 이걸로 끝입니다.

 아, 여기에서의 Step 중에 마지막에 UploadCPAN 이 있는데, 이 경우에는 홈 디렉토리에 .pause 파일을 필요로 합니다.
 물론 PAUSE 계정이 있어야 되겠죠.
# .pause in your home directory
user JEEN
password ********
mailto [YOUR EMAIL]
 .pause 파일을 생성했으면 chmod 600 으로 설정해서 다른 사람이 읽지 못하도록 합니다 (이것도 ShipIt 에서 체크되며, 다른 사람이 읽을 수 있다면 자동으로 처리를 중단시켜버립니다).

 .shipit 에서 자신이 원하는 스텝을 추가해주기만 하면 됩니다. 이것도 확장성을 고려해서 설계되어 있기 때문에... ShipIt::Step::* 의 네임스페이스를 통해서 자신만의 스텝을 만들어 나갈 수 있습니다.
  현재 다른 CPAN 모듈 제작자들이 Twitter  에 릴리즈 정보를 트윗한다든가 하는 스텝 모듈이 있기는 합니다. 그걸 참고하면 쉽게 만들 수 있을 겁니다. (저도 뭐 생각나면 만들어 볼까 생각하고 있습니다)

  그외 자세한 내용은 ShipIt 모듈 페이지를 참고하면 도움이 될 겁니다.

   http://search.cpan.org/perldoc?ShipIt

  혹시 모르시는 것이 있다면 저도 같이 노력해서 궁리해보고자 합니다. :-)
  ShipIt 으로 이제 마구마구 만들고 배포를 해보도록 합시다!
신고
IT/Perl 2009.10.02 18:05

[CPAN] 거저 먹는 CPAN 모듈 만들기 - WWW::Shorten::Durl

  Daum 에서 만든 Durl 이라는 서비스가 있습니다. Twitter 하시는 분이라면 누구나 알고 있는 흔하디 흔한 짧은 URL 로 바꿔주는 서비스입니다. Durl 의 경우는 여기에 지정한 url 을 캡쳐뜨는 기능을 덧붙여서 다른 서비스들과 차별화를 뒀는데요.
  최근에 커뮤니티 부흥을 위한 웹 서비스 개발을 위해서 TinyURL 을 써야되는데... 캡쳐도 된다고 하니.. 이번기회에 Durl 을 써보기로 했습니다(왠지 캡쳐된 이미지를 따로 보여줄 수 있다면 좀 짱일 것 같다는 생각때문에)..

  Durl 의 OpenAPI 문서는 아주 요점만 간단하게 설명되어 있습니다.

  http://durl.me/doc/OpenAPI.html

  XML이 뭔지 JSON이 뭔지 알고 있으며, API 를 어떻게 쓰는 지 알고, 간단한 프로그래밍 언어만 알면 누구나 구현할 수 있는 모듈을 CPAN 에 올렸습니다.

  이름하야 WWW::Shorten::Durl.

  http://search.cpan.org/perldoc?WWW::Shorten::Durl

  대개의 URL 을 줄여주는 서비스들의 네임스페이스가 WWW::Shorten 을 기반으로 하고 있기 때문에 저도 이것을 사용했습니다. WWW::Shorten 자체가 확장성을 고려된 형태였었지요.  Durl 뿐만 아니라 십수가지 서비스들의 모듈이 저 네임스페이스(WWW::Shorten::*) 을 쓰고 있습니다.

  사용법도 간단합니다.

  makealongerlink(URL), makeashorterlink(URL)

  이걸로 끝이죠.
  이런 간단한 기능에 객체지향이니 뭐니 하기도 그렇고...

  아, github 를 레포지트리로 놔두고 작업했습니다. 사실 펄 커뮤니티용 git repository 가 있기는 한데... 뭐 외부에서는 접근하기는 힘들기도 하고, 공개하기 쉬운 방향으로 가기 위해서!

  http://github.com/JEEN/WWW-Shorten-Durl

  이상으로 아무튼 쉽게쉽게 물타기 해서 만들 수 있는 CPAN 모듈의 얘기였습니다.

  이번 CPAN 모듈 작성에 있어서 도움이 된 ShipIt 등에 대한 이야기는 별도로 포스팅하도록 하겠습니다.
신고
TOTAL 457,923 TODAY 5

티스토리 툴바