블로그 이미지
JEEN

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

Rss feed Tistory
IT/Perl 2009.02.10 00:31

[ Perl ] CPAN 모듈에 의존한 프로젝트에서의 주의점



 누군가에게 있어 Perl 은 CPAN 을 사용하는 툴이라고 불릴 정도로 Perl 에서의 CPAN 의존은 빼놓을 수 없습니다. 하지만 어떤 프로젝트라도 그냥 대놓고 superuser 로 CPAN 모듈 깔고 그대로 사용하는 경우는 위험합니다. 어떤 하나의 CPAN 모듈이라도 다른 CPAN 모듈에 의존하고 있기 때문에, 의존성 있는 모듈이 해당 메소드 이름을 바꿔버렸거나 하는 경우가 발생하곤 합니다.

  저 같은 경우에는 예전에 CPAN 모듈을 업그레이드 하고, 오늘 FastCGI 를 재기동했을 때, 기존에 잘 돌아가던 웹사이트가 갑자기 500 Internal Error 를 뱉어내기 시작하거나 하는 일이 있었습니다. JSON::Converter 모듈이 JSON 모듈의 업데이트에 따라가지 못하고 관련 메소드가 없다고 에러가 난 것이었죠. 결국은 라이브러리 폴더에서 직접 JSON::Converter 모듈을 수정하는 방법 밖에는 없었습니다. --  뭐 두 모듈 다 CPAN 에서 이전 버젼의 모듈을 받으면 된다는 것도 있겠지만...

  사실은 회사의 중규모이상의 프로젝트에서는 프로젝트에서 사용되는 CPAN 모듈은 별도의 library 폴더로 지정해줍니다. CPAN 의 설정을 바꿔서 별도의 라이브러리 폴더로 바꿔주는 것이죠. 거기다가 버젼관리도 해줍니다.
기존에 잘 움직이고 있는 라이브러리는 특별한 버그나 큰 퍼포먼스 향상이 기대되지 않는다면 업데이트도 잘 하지 않습니다. 최신경향에 맞춰서 바꿔나갈 경우도 있겠지만, 그렇게 우선도는 높지 않습니다.
  물론 Perl 의 대표적인 Product 인 MovableType 같은 경우에는 CPAN 모듈을 그대로 사용하지 않고 전부 MovableType 용으로 따로 최적화시켜두기도 합니다. 딱 필요한 기능만을 빼낸 것이죠.

  이전에 소개한 경량웹프레임워크인 MENTA 에서는 extlib 디렉토리 아래에 필요하고, 저자 나름대로 추천하고 자주쓰이는 모듈들을 모아놓기도 했죠. 거기에 MENTA 에는 MENTA 로 만드는 프로젝트에 새로 추가되는 CPAN 모듈을 간단하게 extlib 에 추가할 수 있는 스크립트도 제공하고 있습니다.

더보기



  위에서 밝힌 그런 버젼차이에 따른 문제뿐만 아니라 MENTA 같은 경량 웹프레임워크가 지향하는 배포의 용이성을 위해서도 중요한 팁이기도 합니다. 사실 php 같은 경우도 PEAR 모듈같은 것들도 프로젝트 디렉토리에 따로 담아두기도 하니... 굳이 언어와 상관없이 중요하다고 말할 수 있겠네요.

신고
IT/Perl 2008.12.04 17:05

[ Perl, PHP ] Job Queue 를 통해 친해지길 바래?


  현재 진행중인 프로젝트의 구성에서... Web 은 PHP 로 다른 사람에 의해 만들어 지고 있고, 백그라운드에서 작동하는 녀석은 제가 Perl 로 쓰고 있습니다.

2008/11/18 - [IT] - [ Selenium ] 웹서비스 테스트 자동화와는 별 상관없는 작업을 위해...
2008/11/18 - [IT] - [ Selenium ] Selenium RC 를 사용해보자. I
2008/11/19 - [IT] - [ Selenium ] Selenium RC 를 사용해보자. II

  이전 Selenium 을 소개했을 때, Test용이 아닌 용도로 사용한다고 했던 게 이것을 위해서 인데요. 웹에서 어떤 파라메터를 날리면 Selenium 쪽에서 그 파라메터를 받아서 백그라운드에서 열심히 달리는 구조입니다.
  그럼 웹에서 어떻게 Selenium 쪽으로 파라메터를 넘겨줄까요?
  제일 간단하게 생각할 수 있는 것이...
  Web 에서 직접 Selenium 을 기동하는 것, 하지만 한번 움직이면 Selenium 으로 5초 이상의 딜레이가 생기는 것은 어쩔 수 없겠죠. Web 에서 이 5초이상 이란 시간은 참 기다려주기 애매할 수 있습니다. 심하면 30초까지 생각할 수 있으니까요.
  다른 방법이 있습니다. 좀 하드코어한 방식으로는 PHP에서 system 으로 ...

  system('perl selenium-work-1.pl doSomething saillinux see fate_stay_night &');

  이렇게 날리는 방법...

  하지만 이런 식이라면 제대로된 파라메터를 날리기 힘듭니다. 예를들어, 다단계 배열이나 해쉬(연상배열) 같은 것을 어떻게 넘기느냐 하면 좀 애매하죠. 뭐 더 하드코어하게 간다면... 매번 파라메터를 JSON 으로 변환해서 이걸 파일로 덤프합니다. 그리고 파일이름을 지정해줄 수도 있겠죠?
 ...
 ...
 설마 이렇게 할 것이라고 생각하는 것은 아니시겠죠?

 제 해법은 Job Queue 입니다. memcached와 Live Journal 의 개발자로 유명하며, 현재 Perl 용 Google App Engine 을 만들고 있는 Brad Fitzpatrick의 Gearman 이 제 눈에 끌렸습니다. TheSchwartz 같은 경우도 생각해 볼 만하지만, TheSchwartz 의 경우라면 전용 DB 를 필요로합니다. 거기에 3-5초 정도의 작업 딜레이도 발생하게 됩니다(3-5초 정도에 한번씩 매번 DB 에 Job 이 등록되었는 지를 확인하기 때문이죠).
  Gearman 은 Client 에서 Job 을 날림과 동시에 Worker 가 움직이게 됩니다.

  Gearman 은 어떻게 입수하느냐. 당연히 CPAN 입니다.
  sudo cpan -i Gearman::Server
  sudo cpan -i Gearman::Client
  sudo cpan -i JSON

  이렇게 cpan 모듈을 인스톨합니다. 중간 중간에 나오는 의존모듈도 같이 인스톨해주시면 됩니다.  Gearman::Server 를 설치하면 gearmand 라는 gearman 데몬용 파일을 실행할 수 있습니다.

  sudo gearmand --daemon --pidfile=/tmp/gearmand.pid --debug=1

  프로세스 리스트를 확인하시면 gearmand 는 데몬으로 작동하는 것을 확인할 수 있습니다.
  그리고 Job 을 날릴 PHP 쪽도 Gearman 라이브러리를 설치해야 합니다. PHP 의 pear 로 간단하게 인스톨 할 수 있습니다.
 
   sudo pear upgrade http://bugs.joestump.net/code/Net_Gearman/Net_Gearman-0.0.4.tgz

  Net_Gearman 의 설치가 끝났다면 php 쪽의 소스는 이와 같습니다.
  client.php
  1. <?php
  2.  require_once 'Net/Gearman/Client.php';
  3.  $data = array( 'who' => 'saillinux', 'what' => 'fate_stay_night', how => 'haak' );
  4.  $pid = getmypid();
  5.  $set = new Net_Gearman_Set();
  6.  $task = new Net_Gearman_Task( 'job', $data, $pid, Net_Gearman_Task::JOB_BACKGROUND);
  7.  $client = new Net_Gearman_Client(array('localhost'));
  8.  $client->runSet($set);
  9. ?>

  짧게 코드를 설명하자면... $data 에 위와 같은 연상배열을 넣고, 6번째에 Task 를 추가합니다.   
  Net_Gearman_Task 에서 첫번째 인수는 function 이름입니다. 어떤 놈에게 일을 시킬까 하는 것인데, 물론 이 function 은 Worker 쪽에 정의되어 있어야 합니다.
  두번째 인수는 Worker 에 넘길 인수입니다. 이 인수는 JSON 으로 파싱해서 넘어가게 됩니다.
  7번째 줄에서 Net_Gearman_Client에서 배열에 localhost 를 넣었습니다. Worker 는 복수의 서버를 지정할 수 있습니다.
  그외에 대해선 문서를 참고하세요.

  위와 같은 Job 이 client 쪽에서 날아온다면, 이것을 받을 Worker 가 기동중이어야 합니다. 그리고 Worker는 아래와 같은 코드로 이루어져 있습니다.
  worker.pl
  1. use strict;
  2. use warnings;
  3. use Gearman::Worker;
  4. use JSON;
  5.  
  6. my $worker = Gearman::Worker->new;
  7. $worker->job_servers(qw/localhost/);
  8. $worker->register_function(
  9.   job => sub {
  10.     my $job = shift;
  11.     my $args = from_json( $job->arg );
  12.     print $args->{who}." ".$args->{how}." ".$args->{what}."¥n";
  13.   });
  14. $worker->work while 1;

  위의 client 에서 job 이라는 function 으로 job 을 날린 것을 $worker->register_function 으로 등록된 job 이라는 function 에서 처리합니다. JSON 으로 넘어온다고 했으니 넘어온 JSON($job->arg)을 해석합니다. 그리고 받은 인수를 찍어냅니다.

  일단 하나의 터미널에서 worker.pl 을 실행시키고, 다른 터미널에서 client 를 실행시킵니다. 그러면 client 에서 job 이 worker 로 넘어가서, worker 는 그 job 에 맞게 정의된 행동을 수행하겠죠.

  그럼 예외의 경우를 살펴보도록 하자면...
  client 에서 job 은 계속 날리는 데, worker 는 죽어있는 상태입니다(이런 상황이 걱정된다면 worker 를 여러개 띄워놓는 것도 한 방법이 될 수도 있습니다). 이렇게 되면 일하는 놈이 없으니까 당연히 일은 못하게 됩니다. job 은 계속 queue 에 쌓여 있겠죠. 그리고 worker 가 살아난다면, 쌓여있는 job 을 하나씩 처리해나가게 됩니다. gearmand 가 어느 정도 큐에 담아둘 수 있는 지는 잘 모르겠습니다. 메모리 여유분 만큼이려나요?
  그럼 gearmand 데몬 자체가 job 을 잔뜩 쌓아놓고 있는데 죽어버렸다면 어떻게 될까요? 이경우는 queue 에 쌓인 job 은 소실됩니다. 그래서 불안하시다면, TheSchwartz 나 Q4M 을 써서, DB 에 job 을 넣는 형식을 쓰는 것도 선택중의 하나가 되겠죠.
  (피드백 주신 a3r0/Luz_Luna님++)

  뭐, 제가 하려는 건 Selenium Agent 를 가동하기 위해 적당한 인수를 받아서 넘겨주는 것 밖에 없으니까요.
  아무튼 이런 식으로 Perl 과 PHP 간의 유대관계를... 쿨럭.. 아니, 그것보다 이런 식으로 Web 상에서 처리하기에는 좀 지지부진한 처리를 Job Queue 를 통해서 해결해보시는 것은 어떠실런지요?
  뭐 관리의 문제를 제외한다면(제외하기 힘들겠지만)... 여러명이 각자의 특색에 맞는 언어를 선택하는 것은 나쁘지 않다고 생각합니다. 저마다의 개성이겠죠. (물론 사람에 따라서 나쁘다고 생각하실 분도 있으시겠죠...;;)

  http://ido.nu/kuma/2008/01/20/implemented-reblogging-server-with-gearman/
 
  위의 링크를 참고로 했습니다.
신고
IT/Perl 2008.09.03 11:52

[ Perl ] Offline 에서도 일해야하는 경우?


  Slideshare 를 돌아보던 중에 재미있는 Slide를 보게 되었습니다.

  이번 YAPC::EU 2008 에서의 Slide 인데요. YAPC::Asia 2008 에서도 본 적이 있는 Leon Brocard 의 이 슬라이드 입니다.


Getting things done away from a network
View SlideShare presentation or Upload your own. (tags: perl yapc::eu::2008)

 말 그대로 인터넷이 안되는 곳에서 일을 하는 방법 같은 것인데요.
 
 실제 다음주에 한국갈 즈음에 실제로 하려고 할 내용이라서 반갑기 그지 없다고 할까요?

 현재 SVK 도 사용하고 있고,

2008/07/10 - [IT/Tips] - [ 버젼관리 ] SVK - 로컬에서 맘껏 커밋때리기
2008/08/04 - [IT] - [ 버젼관리 ] 공연히 생각한 개인소스코드 관리

  MiniCPAN 같은 경우도 KPW2008 에서 keedi 님께서 짧게 소개시켜 준 Slide 가 있기 때문에..

  한번 해볼까 하고 생각하고 있습니다. 아니면 Perl Hackathon 같은 경우에도 도움이 될지두요.

  Reference 나 Documentation 들도 전부 휴대용 하드디스크에 몇 기가씩 담아두고 있으니...

  다음주 한국가기 전에 이런 준비를 제대로 해놔야 될 듯 하겠습니다. :-)

  아무튼 SVK, CPAN::Mini .. 생각했던 게 그대로 slide 에 있으니까 반가워서 끄적거려 봤습니다.

신고
IT/Perl 2008.07.04 17:45

[ Perl ] CPAN 모듈 만들기!! #2

 흠... #1 에서 하나 만들고 #2 쓰는 시점에서 또 하나 CPAN 모듈을 추가 했습니다.
 물론 하기 쉬운 것만 샥샥 골라서 했으니까요. :-)

 Perlmani 스터디도 있고해서(하지만 참석은 못하니...)
 심심한 틈을 타서 슬라이드로 만들어 봤습니다.

 사실 이것도 완전한 것도 아니고.. 대~충 CPAN 모듈 만드는 생각에서부터  CPAN Author 가 되기까지의
 간단한 설명을 포함하고 있습니다.

 그리고 StoryQ 라는 국내 Slideshare 같은 서비스를 발견해서요. 그것을 써보겠습니다. :-)

 


 이번 포스팅은 이걸로 때우겠습니다. 저도 CPAN 모듈 만들면서 삑사리 낸거랑, 피드백 받은 것들이
다수 있고... 이것을 정리해서 다음에 또 올리도록 하겠습니다.
 잘하면 이런 서비스를 이용하는 데 맛들일지도 모르겠네요 :-)

신고
IT/Perl 2008.06.26 12:44

[ Perl ] CPAN 모듈 만들기!! #1

사용자 삽입 이미지

 저도 슬슬 CPAN 모듈을 올려야하지 않을 까 하는 생각이 요즘 들어서 이래저래 찾아봐도 꺼리가 별로 보이지 않았습니다.

 Me2day API도 업로드 할 수 있지만.. 그대로 올리기는 왠지 좀 그렇고...
 Daum 이나 Naver API 도 있기는 하지만... 마땅히 하고 싶은 생각도 안들고...

 그래서 IRC 에서 amorette 님께서 한글 입력이 안된다는 이야기와 함께 LuzLuna 님께서 만들어라! 라는 이야기가 나와서 한번 손을 대 보았습니다.

 이른바 TDD DDD(DDuckbob-Driven Development) ... 떡밥주도개발 방식입니다.

 일단 CPAN에 이와 비슷한 모듈이 있는 가를 우선 확인해 보았습니다.

 Lingua::KO::(.+) 부분을 집중적으로 찾아봤지만.. 역시 없더군요.
 
 사실 예전에 PHPSCHOOL의 iamseeker 님께서 Java Script 도 구현해 놓은 게 있더군요. 그것을 참고로 해서 뚝딱 만들었습니다.

 CPAN 모듈을 만드는 것에 대한 한글 문서는 어디를 찾아봐도 나오지 않으니 perldoc(perlnewpod) 도 이번기회에 번역해버렸구요(perldoc-kr 플젝).

 뭐 대강 준비를 마쳤습니다.

 1. 모듈을 만들기 위한 스켈레톤을 생성합니다.

  : 이것은 h2xs 로 가능한데요. 사실 h2xs 는 C Header File 을 XS 모듈로 하기 위한 유틸리티인데요 Perl 모듈용 스켈레톤으로 쓰인다고 하네요.

사용자 삽입 이미지

 -A 옵션은 Autoloader 를 생략하고, -X 옵션은 XS를 생략합니다. 어제 shibuya.pm tech talk 에서 XS 에 대한 공포감이 있기도 했고... 사실 XS 를 사용할 필요가 없는 100% Perl Code 만으로 만들테니까요. 그리고 -n 옵션으로 모듈이름을 넣어줍니다.
 아.. -b 옵션은 이 모듈을 돌리기 위한 Perl Version 을 제한합니다. 그러니 이 때는 5.8.8 이상에서만 돌릴 수 있다고 제한하는 겁니다. 일단 이름은 MyTest::Module 로 지정했습니다.

사용자 삽입 이미지

 MyTest-Module 이라는 디렉토리에 가면 이와 같은 파일/디렉토리 구성이 보입니다.

 Changes 는 이 모듈의 해당 버젼에서 어떤 것이 바뀌었나 하는 Change Log 같은 것을 기술합니다.
 README 는 모듈 사용에 관한 당부나 주의사항, 설치방법등을 기술하구요.
 MANIFEST 는 배포할 파일들을 지정해 줍니다.
 Makefile.PL 을 이용해서는 Makefile 을 만들고. make test 를 통해서 테스트를 make install 을 통해서 설치를 할 수 있으며, make dist 를 통해서 배포파일을 지정해줄 수 있습니다.

 t/ 의 아래에는 Test 코드들을 놓구요.
 lib/ 아래에는 모듈을 구성하는 pm 파일들이 놓여집니다. 여기가 바로 코드를 넣을 부분이죠.

사용자 삽입 이미지

 lib/MyTest/Module.pm 을 열면 이와같은 코드들이 뼈대를 구성하고 있습니다.
 아까전에 -b 옵션으로 정해준 Perl version 에 관한 제약은 여기에 들어갑니다. (use perl 5.008008)
 그리고 기본적으로 Exporter 를 통해서 필요한 subroutine 들을 export 할 수도 있습니다.
사용자 삽입 이미지

 그리고 그 아래에는 이 모듈에 대한 설명이나 AUTHOR 정보, 라이센스 정보를 담는 POD 가 있습니다. 만약 POD에 대해 모르신다면 perldoc(perlpod) 를 참조하시면 됩니다(perldoc-kr, doc.perl.kr 에서 찾으실 수 있습니다).

  일단 코드는 간단하게 이렇게 넣어봤습니다.

our @EXPORT = qw(blah);

sub blah {
  length(shift);
}

  blah 에 적당한 인수를 넣어 호출하면 길이를 반환하는 예제입니다. 물론 아무짝에도 쓸모없습니다.
  그리고 @EXPORT 할 것에 blah 를 추가해줍니다.

사용자 삽입 이미지

  'perl Makefile.PL' 을 하면...
사용자 삽입 이미지
  Makefile 이라는 파일이 생기게 되구요.
  그리고 모듈의 test 를 실행합니다. 테스트 코드는 t/MyTest-Module.t 파일에 기본적으로 쓰여진 코드입니다.

사용자 삽입 이미지
  그리고 make install 을 통해서 Perl 모듈의 기본 저장소에 이 모듈이 설치됩니다.
  그러면 어디서든지 'use MyTest::Module' 을 통해서 이 모듈을 사용할 수 있게 됩니다.

사용자 삽입 이미지
  그리고 'make dist' 를 통해서 CPAN 업로드 등의 배포를 위한 tarball 파일이 만들어지게 됩니다. 이 파일을 CPAN이나 아니면 다른 사람에게 배포할 때 쓰면 되겠죠? (물론 SVN 같은 것을 사용하는 것이 요즘 추세이기는 합니다만...)
 
사용자 삽입 이미지
  그래서 이처럼 MyTest::Module 모듈을 부르고 blah 를 호출해서 결괄르 얻었습니다. 결과는 12가 나오네요.

 이런식으로 간단하게 CPAN 모듈을 만들고, 테스트하고, 배포할 수 있습니다.
어때요? 참 쉽죠?

 그렇지만 제대로  된 테스트 코드도 쓰지 않았고, h2xs 로 생성되는 스켈레톤은 기본적으로 낡은 방식의 Makefile.PL을 사용하고 있습니다(use ExtUtils::MakeMaker).

  이 부분에 대해서는 다음에 천천히 설명하도록 하겠습니다. :-)
신고
IT/Perl 2008.06.24 17:06

[ Perl ] 간단한 웹페이지 스크랩핑 - Web::Scraper

 일반적으로 웹 페이지를 스크래핑할 때 정규표현식에 대한 이해는 필수입니다.
 페이지를 싸그리 통채로 스크랩하는 거야 물론 간단하지만, 페이지의 일부분을 도려내고 싶을 때는 정규표현이 없으면 헤맬 수 밖에 없습니다.

 그리고 정규표현은 가독성이 단점입니다. 어중간한 정규표현이야 괜찮겠지만... 어떤 정규표현을 보고, 이게 뭐하는 것인지 알아내기란 참으로 힘든 일일 겁니다.

 use LWP::Simple;

my $content = get("http://www.daum.net");
my ($title) = $content =~ /<title>(.+)<\/title>/i;

print $title;
 < 어중간하게 쉬운 정규표현의 예 : 웹페이지의 제목 을 얻어내는 스크립트 >

use Web::Scraper;
use URI;
 
my $html = scraper {
  process 'title', title => 'TEXT';
}->scrape(URI->new("http://www.daum.net"));

print $html->{title};
 < 정규표현을 사용하지 않은 예 >

 이런 간단한 예제에서는 Web::Scraper 가 지는 것은 당연하겠죠. :-)
 차이가 있다면 문자코드입니다. 정규표현을 사용한 예제에서는 해당페이지에서 사용하고 있는 문자코드(다음의 경우에는 euc-kr)로 결과가 나오게 되지만, Web::Scraper 를 사용했을 때는 모든 결과는 반드시 UTF-8 으로 반환됩니다.
  늦었지만 이 쯤에서 Web::Scraper 에 대한 자세한 이야기.
  모듈의 저자는 일본의 유명한 Perl Hacker 인 Miyagawa 씨입니다. 전 작년 Shibuya.pm Tech Talk 에서 이 내용을 처음 접하고 꽤나 빠져들었던 기억이 납니다.
  이 모듈의 구성은 Ruby 의 Scrapi 라는 스크래핑 툴에서 차용했다고 합니다.

THIS MODULE IS IN ITS BETA QUALITY. THE API IS STOLEN FROM SCRAPI BUT MAY CHANGE IN THE FUTURE

  라고 Web::Scraper 페이지에 가면 나옵니다. 그리고 어떤 특별한 문서도 없이 Scrapi API 문서를 참조하시면 됩니다.

  아아.. 그러고 보니 이런 설명은 왠지 필요없을 지도...

  Web::Scraper 의 Slide에서 쉽게 볼 수 있습니다. 그쪽의 내용이 직관적이고 여러가지 예제들도 있으니 쉽게 쓸 수 있을 것입니다.

  그러고보니 Firefox 확장으로 WebScraper IDE 라는 것도 있으니, 보다 쉬운 웹 스크래핑이 가능하지 않을까 생각되네요.

  WebScraper IDE (for Firefox3)


  여기까지 보시고도 잘 모르시겠다는 분은 없겠죠?

  혹, 잘 모르시겠다면, 댓글이나 IRC에 들러주셔서 같이 한번 궁리해보았으면 합니다. :-)

  나중에 이를 적용한 예제를 몇가지 올려보도록 하겠습니다.

신고
Project 2008.03.27 20:16

[PERL] 급조 #2 Me2Day Perl API 만들기...

오늘의 떡밥은 pung96님께서 me2day 친구 신청하신 것으로 시작되었습니다.

떡밥 전문



쿨럭.. 그리고 Twitter는  TwitterPOD같은 멋들어진 어플이 있는데 me2day는 없을까? 라는 질문에...

그딴 거 없다는 이야기를 듣고 실망하며... "그래서 제가 Twitter만 한다니까요" 라는 혼잣말을 덧붙인 뒤에...

aero 님께서 "그럼 만들어라"라고 하심에... pung96님께서 지원사격하고, 하얀_고양이님께서 관망하던 차에..

원래는 하얀_고양이님께 외주 주겠다라고 했었는데... 그냥 삘 받은 김에 만들어보기로 했습니다.

사용자 삽입 이미지

http://codian.springnote.com/pages/425517


(aero님께서 perl API만 없다고....)

일단 기본 토대는 aero 님의 Springnote API 모듈이 있었으니까... 쉽고 쉬운 작업이었습니다.

다만 코드가 좀 아름답지 못할 뿐이었지만...

BEAUTIFUL CODE 상세보기
찰스 페졸드 지음 | 한빛미디어 펴냄
내 생애 가장 아름다운 코드! 38인의 코디 명장이 말하는 『BEAUTIFUL CODE』. 전세계의 유명한 프로그래머 38인으로부터 받은 글을 엄선하여 총33가지의 챕터로 구성했다. 프로그래머들이 소프트웨어 프로젝트 아키텍처를 구축하면서 쌓게 된 프로그래밍 노하우가 고스란히 녹아 있다. 이 책은 탁월한 소프트웨어 설계자로 살아가는 프로그래머들의 눈을 통해 세상을 바라볼 수 있도록 도와준다. 느리지만 우아하며 감동적인

전혀 아름답지 못한 코드가 되어버렸다.

일단은 기본적으로 Me2Day API Spec은 http://codian.springnote.com/pages 에 정의되어 있으니

간단한 작업으로 끝냈다(라는 것은 어차피 Me2Day 사용한 적이 없고, 자세히 모르니까 하는 뻘소리)

사용자 삽입 이미지

이런 식으로 커멘트와 포스트 각각 쓰기가 가능하게 되었다는 것...

일단 Source Repository는 http://code.google.com/p/me2day-perl-api/  에 등록해놨지만...

http://code.google.com/p/me2day-api/
에 자바랑 루비 버젼이 있는 걸 봐서...

이쪽에도 신청해놓을 까 합니다. reject 되면 ㅜ_ㅜ

일단 대충 정돈되고 나면... Shell에서도 가지고 놀 수 있게 되면 왠지 재미있을 지도~ 라고 생각합니다.

Web::Scraper가 셸 명령어를 지원하는 것 처럼...

:^) 그리고 때가 되면... CPAN에도 올려보고 싶...

하악... 아무튼 오늘도 떡밥에 물려서 이렇게 하루를 보내는 군요.


신고
IT/Perl 2008.03.26 11:37

[PERL] CPAN Mirror를 바꾸자 ( 자기삽질 방지용)

사용자 삽입 이미지

Perl Wicked-Script 를 가지고 놀고 있을 때... CPAN모듈을 추가해야 되는 경우가 있었습니다.

분명히 예전에 Mirror를 바꿔놓았는데... 얘가 어느순간에 ftp-mirror.internap.com이라는 국적 불명의

미러를 보고 있더군요... 그래서 결국은 CPAN install 도중에 Timeout이 발생하게 되어버렸습니다.

사용자 삽입 이미지

이럴 경우는 일단 urllist를 초기화시킵니다. "o conf init urllist" 하고 나면...

사용자 삽입 이미지
첫번째로 지역을 선택하고...
두번째로 나라를 선택하고..
그리고 맘에 드는 mirror site를 선택하시면 됩니다.
그런다음에는 "o conf commit"으로 ... 바뀐 설정을 커밋하면 끝입니다.

뻔히 다 아는 걸 왜 쓰느냐면... ㅜ_ㅜ 계속 commit안하고 이거 왜 이러지 한게 두번째라서..

뭐.. 그렇다는 겁니다.

사용자 삽입 이미지

글 올린지 얼마되었다고 금방 피드백 해주시는 aero님.. ㄱㅅ (in irc.hanirc.org #perl)




추가로... 처음에 맥북을 가지고 CPAN 모듈 인스톨을 하려고 하면... 안되서 리눅 서버에서 작업한 경우가

허다했는데요.

이때는 "sudo port" => "install p5-module-install"한 후에...

다시금 CPAN 모듈 깔려니까 되더군요.

CPAN에 관련된 문제는 이외에도 여러가지 있었는데... 생각나면 차차 적어올리겠습니다.
신고
cpan, MIRROR, perl
TOTAL 464,502 TODAY 5

티스토리 툴바