블로그 이미지
JEEN

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

Rss feed Tistory
IT/Mac 2009.11.17 18:47

[ Perl & DeliciousLibrary2 ] with Bookmarklet

2009/10/11 - [IT/Perl] - [ Perl & Delicious Library 2 ] 그럼 이제 웹 브라우저에서 DL2 로!
2009/10/10 - [IT/Perl] - [ Perl & Delicious Library 2 ] 한국책을 스캔하려고 해봐야 팔만 아프다!
2009/10/09 - [IT/Mac] - [ Delicious Library 2 ] Loves Perl! 안되면 되게 하라!

  벌서 한달정도 지난 DL2 관련 이슈를 다시 끄집어 내 봅니다.
  웹브라우저 상에서의 DL2 로 등록에 관해서 Drag and Drop 이라는 일반적이지 못한 방법을 고집했다가, "골빈해커"님과 "@y0ngbin"님에게 북마클릿을 쓰는 게 어떠냐고 들었습니다.
  그러겠다고 하고 GTD 의 Someday 에 넣어놓은 지 한달이 지났습니다.
  그러던 중에 capri91 님이 애플포럼에서 DL2 플러그인을 만들어 공개하셨으니 할 맘은 더욱 없어져 갔습니다.
  요즘 하도 의욕이 없다시피하다가 보니, 다시 하나 끄집어내야 되겠다고 해서 코드를 다시 만들었습니다.
  모조리 갈아엎고 Version 0.01 로 다시 시작해서 하루만에 0.02 까지 해놓았습니다.

***
  기능상으로는 Drag and Drop 기능을 없애고, 피드백을 받은 Bookmarklet 으로 만들었습니다.
  사실 JS 는 좀 버벅거려서, 기존에 쓰고 있던 Instapaper 의 Bookmarklet 을 참고해서 만들었습니다.
  우선은 Aladdin 에서 작동이 가능합니다.

***
  우선 사용가능환경에 대해서는 Mac 을 가지고 계시며, Delicious Library 2 를 가지고 계신 분에 한해서 입니다.
  설치는 아직까지 번거롭지만... 한번 도전해 보실 분에게는...
  * 1. XCode 설치
  * 2. CPAN 모듈 설치 (README 문서 참고)
  를 해야합니다.

** Terminal 에서
git clone git://github.com/JEEN/Delicious-Library-2-for-Korean.git
을 하시거나..
링크를 통해서 zip 파일을 다운받아서 압축을 풀고

** 바코드 스캔
  - perl bin/isight.pl

** ISBN 직접 입력
  - perl bin/term.pl

** Bookmarklet 사용 (서버 모드)
  - perl bin/server-starter.pl

과 같은 세가지 기능이 있습니다.
그 중 이것은 북마클릿 사용시의 화면입니다. 서버를 띄우고, 서적페이지로 가서 등록된 북마클릿 버튼을 클릭하면 자동으로 DL2 로 등록시켜주게 됩니다.



  일단은 Aladdin 뿐이지만, 제가 주로 책을 구입하는 곳은 Yes24 이고, 컴퓨터 서적관련해서 자주 보는 곳은 강컴이고, 아이리버 스토리 지름신이 살짝 왔다갔다 하는 지라 교보문고에도 들락거리기에...
  조만간 이 모든 서적 사이트를 지원하게끔 만들어보고자 합니다.

  사용 시의 고쳐줬으면 하는 점, 설치시의 문제점 등에 관한 것이 있으시다면 댓글을 남겨주시면 되도록 친절하게 알려드리고자 노력하겠습니다. :-)

  북마클릿은 아래의 링크를 끌어서 [북마크 도구모음] 란에 끌어놓으시면 됩니다.

  Insert into DL2
 
신고
IT/Perl 2009.10.10 17:34

[ Perl & Delicious Library 2 ] 한국책을 스캔하려고 해봐야 팔만 아프다!


2009/10/09 - [IT/Mac] - [ Delicious Library 2 ] Loves Perl! 안되면 되게 하라!

 휴~ 방금 제가 가지고 있는 책 정보를 모조리 Delicious Library 2 에 넣었습니다.
 그리고 깨닭았습니다. 한국책 스캐닝하려면 몇 권 못하고, 팔마비가 온다는 것을...
 Bookpedia 는 아예 불가능하지만, Delicious Library 2 는 ISBN 도 스캔할 수 있다!  라는 것 때문에 Delicious Library 2 로 전향했지만... 으아... 한권 바코드 스캔하는 데 10초 넘게 이리저리 휘둘러서 겨우하는 거라면(그것도 되는 것만...) 200권이 넘는 책들을 하나하나 스캔하는 건 정말 지옥이다 싶겠더군요.

 그래서 ISBN 넘버를 그냥 키보드로 쳐서 넣는 게 낫겠다 라는 생각에 지난번 포스팅한 스크립트를 약간 변형해서 셸 커맨드로 만들었습니다.


 대략 이런 모습입니다. 책의 뒷면에 찍혀있는 바코드 넘버를 그대로 때려넣는 것이죠.
 200권 넘게(한국책이 대략 180권 좀 넘게) 스캔하면서 적혀있는 ISBN 대로 안되는 것도 몇 권 있었습니다. 그때는 알라딘에 가서 직접 ISBN 찾아서 넣어주니까 되더군요. ;ㅁ; ISBN 이 변경되는 경우도 있나봅니다.
 미국/일본에서 발행한 책들을 보면 정말 금방금방 찍힙니다. 시간이 좀 걸려도 5초정도 안에 이리저리 비틀어보면 알아서 얻어오죠. 거기에 Amazon 의 풍부한 정보들로... 리뷰나 관련성 있는 아이템들까지 다 긁어와 줍니다. 거기에 판형 사이즈까지 있기 때문에 Delicious Library 2 에서 외국책은 책 사이즈별로 커버 이미지가 제각각인 경우가 있습니다. 하지만 알라딘 API 상에서는 판형 사이즈까지는 알려주지 않기에 (웹 페이지에는 있었습니다) 한국책들을 찍어보면 다 같은 사이즈로 들어갑니다.

 뭐 급하게 제가 가지고 있는 책들을 정리하기 위해서 만든거라서... 다른 분들에게 쓰기 어떠실지 모르겠지만... 혹시나 급하게 사용하신다면

 http://github.com/JEEN/Delicious-Library-2-for-Korean/zipball/master

를 통해서 다운받으실 수 있습니다.

최근에는 매일같이 알라딘이나 YES24 를 기웃거리는 습관이 있기 때문에... 다음에는 웹 인터페이스에서 Delicious Library 2 로 집어넣게 한번 해보려고 합니다.

 * 구입한 책 뿐만 아니라, 사고 싶은 책들까지도 같이 관리하고 싶다!!!

 애플포럼에서 받은 피드백인데... 정말 그 중요한 사용법을 이제서야 느끼게 됩니다(그러고보니 Bookpedia 는 이제껏 그렇게 쓰고 있었군요)
신고
IT/Perl 2008.11.29 12:54

[ Perl ] 협조 필터링(Collaborative Filtering) 에 대해서... - SUGGEST

 협조 필터링이라는 것에 대해서 자세한 연구는 해보지 않았습니다. 몇가지 논문도 있는 데, 제대로 읽어보지 않고 그냥 대충 이런 거다 라는 느낌으로만 알고 있다고 할까요.
 흔히 쇼핑 사이트에서 사용됩니다. 어떻게 사용되느냐? 갑이라는 사람이 "A 라는 상품을 구입할 때, 같이 구입하는 상품 B 는 A 와의 관련성이 있다" 라고 해석합니다. 그리고 갑뿐만이 아니라 다른 사람도 A 라는 상품을 구입할 때 B 를 산다고 하면, A 와 B 의 관련성은 더 깊어지게 되겠죠?
 그럼 국내 쇼핑사이트에서는 어떻게 이용되느냐 살펴보겠습니다.
 "주제 사라마구"의 <눈먼 자들의 도시> 라는 상품 페이지에서 YES24, 알라딘이 어떻게 표시하고 있는 가는 다음과 같습니다.

YES24 의 관련 상품 표시


Aladdin 의 관련상품 표시


  "눈먼 자들의 도시"를 구입할 때 같은 저자의 "눈뜬 자들의 도시"도 같이 구입하는 사람들이 그만큼 많다는 뜻이겠죠?

 그렇다면 구입데이터를 취합해서 어떻게 이런 상관관계를 명확하게 하느냐 하는 것인데요.
 기존에 제가 관리하던 어느 쇼핑몰에선 암암리에 그 쇼핑몰에서 관리하고 있는 상품을 타사의 상품과 매치시켜서 타사의 관련상품을 긁어오는 범죄(?)를 저지르기도 했습니다. ;;;

 그랬을 때 발견한 것이 Suggest 라는 Recommendation Engine 인데요. 이것은 Statistics::Suggest 라는 CPAN 모듈로 사용할 수 있습니다.
 이 모듈 사용을 위해서는 suggest 라는 라이브러리를 설치합니다. 이것은 아래의 URL 에서 다운로드 할 수 있습니다.

  - http://glaros.dtc.umn.edu/gkhome/suggest/download

 그리고 CPAN 모듈 설치시에 Library 를 지정해주면 무사히 설치가 종료됩니다. 아래의 CPAN 모듈 페이지를 참고하세요.

  - http://search.cpan.org/~ihara/Statistics-Suggest-0.01/lib/Statistics/Suggest.pm

  1. use Statistics::Suggest;
  2.  
  3.   ## initialize SUGGEST with $data
  4.   my $data = [
  5.     # array of [$user_id, $item_id], ...
  6.     [1, 1], [1, 2], [1, 4], [1, 5]
  7.     [2, 1], [2, 2], [2, 4],
  8.     [3, 3], [3, 4],
  9.     [4, 3], [4, 4], [4, 5],
  10.     ...
  11.   ];
  12.  
  13.   my $s = new Statistics::Suggest(
  14.     RType => 2,
  15.     NNbr => 40,
  16.     Alpha => 0.3,
  17.   );
  18.   $s->load_trans($data);
  19.   $s->init;
  20.  
  21.   ## make top 10 recommendations for $selected_item_ids
  22.   my $rcmds;
  23.   my $selected_item_ids = [1, 2];
  24.   $s->top_n($selected_item_ids, 10, \$rcmds)
  25.  
  26.   print "recommendations: " . join(',', @$rcmds);

 Statistics::Suggest 의 예제소스입니다. Statistics::Suggest 의 생성자에 날리는 RType, NNbr, Alpha 에 대해서는 이게 뭔지 자세하게 알아보지 못했습니다. 심히 접근방식이 잘못되었지만;; 일단 사용해보고 나서 알아보자 라는 생각으로 다음으로 미뤘습니다.
 소스코드의 주석만으로 어떻게 작동되는 지는 간단하게 살펴보실 수 있으실 겁니다.

 이것을 기반으로 제가 관리하는 쇼핑 사이트의 구입이력에서 user_id 와 item_id 를 뽑아 데이터를 만들어봤습니다.
 이때 주의할 점은 user_id, item_id 는 32bit 정수형값만 사용할 수 있습니다. 그렇지 않을 경우는 "Segmentation Fault" 에러가 나서 작업을 진행할 수 없습니다.

 저 같은 경우는 user_id 는 문자열, item_id 는 32bit 정수값을 넘는 정수라서 이것을 32bit 정수형에 맞게 임시 id 를 발행하도록 했습니다. 그리고 그 id 에 맞는 데이터 셋을 만들고, item_id 는 따로 리스트를 만들어 둡니다.
이건 각 item_id 마다의 관련상품을 조사하기 위해서지요. 이것만 주의하면 되기때문에, 별도의 소스코드는 제시하지 않겠습니다.

 아무튼 결과는 어느정도 만족할 만큼 나왔습니다. 다른 사이트를 매번 긁으러 갈 필요도 없고, 괜한 죄책감을 느낄 필요도 없어졌습니다.

  Amazon 은 이 Collaborative Filtering 기술에 있어서 가장 앞서있지 않나 싶습니다. 구입이력 뿐 아니라 사용가능한 어떤 이력이든지 뽑아내어서 고객에게 보다 관련성이 높은 상품을 제시해서, 편안한 이용과 더불어 매출의 증대를 노리고 있으니까요.
  Netflix 라는 미국의 DVD 대여업체의 이벤트도 흥미롭습니다. 자신이 빌려본 DVD 를 본 다른 사람들의 성향등을 파악해서, 그 사람에게 맞는 DVD 를 추천하는 기술이 있는데... 여기에서 이 정밀도를 10% 향상시킨다면 100만달러를 지급하겠다는 그런 이벤트를 냈죠. 아마 지금도 하고 있지 않나 합니다. 예전에 봤을 때 이미 10%를 넘긴 듯 싶었는데... 오래된 컬럼이지만 이것을 참고하세요.

  - Netflix 컬럼 관련링크 : http://imaso.co.kr/?doc=bbs/gnuboard.php&bo_table=article&wr_id=32617

 아무튼 이런 기술들은 완전한 완성이라는 것은 없는 것 같습니다. SUGGEST 라는 엔진이 가지고 있는 알고리즘을 사용해서 간단하게 구현하는 것일 뿐이지.. 실제로 그 알고리즘이 어떻다는 얘기는 완전 생략하고 얘기했으니, 겉핥기에 지나지 않습니다. 뭐, 생색내기일지도 모르죠. 그리고 저도 저 결과를 이용해서 어떻게 보완해나가느냐 계속 궁리해봐야 겠구요. 이상입니다.
신고
Check 책! 2008.01.17 22:26

사이트 뒷담화... #YES24

한국에 있었을 때는 2개월에 20만원 어치 정도 책을 주문해서 한꺼번에 읽고는 했던 YES24

<title>태그에 아련히 새겨둔 대한민국 대표 인터넷 서점 이라고 자부하는 YES24

지금도 분기당 20만원어치 책을 국제배송으로 주문하고는 하는 YES24

국제배송이 안되는 강컴때문에 강컴 베스트 셀러를 찾아서 담아두는 장소, YES24

언제나 배송료 부담때문에 선뜻 주문버튼을 누르기 힘든 YES24 (국제배송료가 ㅎㄷㄷ)

사용자 삽입 이미지

버튼을 클릭하면 숫자가 올라가는 처리!! 우왕ㅋ굳

FF에서는 책을 카트에 넣을 수도 없는 YES24

이런 거 보면 국내 웹 개발자들 좋겠다라는 생각(IE에만 맞추면 되니까...)이 들게끔 해주는 YES24

(이건 한국의 일반적인 쇼핑몰이 이모양이니...)

당최 국내 1위라면서 그 흔한 API하나 제공하지 않는 YES24

맥북을 사고나서는 주문하러 한번도 들어가지 않은 YES24

그런데도 윈도우로 배송료 포함 20만원의 책을 이번에 또 구입하게 한 YES24

그렇게 해줬는데도 방심한 사이에 골드회원 만들어준 YES24


신고
yes24,
TOTAL 479,151 TODAY 60

티스토리 툴바