EBook Manager



 
주말에 만들어 본 EBook Manager GUI. wxRuby(wxWindows의 Ruby port)를 활용하였다. 아직 제작중이고, 맛보기 GUI 버전 정도일 뿐이다. 현재는 변환 과정을 wizard 형태로 만드는 것이 훨씬 낫지 않을까 하는 생각 중이다. GUI에 대해 제안사항이 있다면 언제든지 환영. (GUI를 처음부터 제대로 설계하려고 해도 아이디어가 잘 안떠오른다. GUI 비친화적 인간이라… -_-)
 
소스는 첨부하였으니, 구경해볼 사람들은 보는 것도 나쁘진 않을 듯.
ruby 1.4.2, win32 환경에서 테스트 되었으며, 다음 모듈들을 필요로 한다.
 
WxRuby
http://raa.ruby-lang.org/list.rhtml?name=wxruby
Ruby/Amazon
http://raa.ruby-lang.org/list.rhtml?name=ruby-amazon
 
여담으로, event handler 중 하나인 onButton()에서 event.get_event_object()를 활용했더니, ruby runtime에서 segmentation fault가 나더랬다. event.get_id()를 썼더니 해결되었다. evt_button의 event에 대해서는 get_event_object()를 쓸 수 없는 것인가… 덕분에 event handler 쪽에 Thread block을 전부 빼버렸다.
 
또다른 여담으로, ruby에서 block을 method parameter로 사용할 수 있는 것은 정말 환영하는 syntax인데, 한번 써보면 다음과 같다.
 
def onButton(event)
 if event.get_id() == ID_BUTTON_1
  @m_btnButton1.disable()

  Thread.new
  {
   …some handling code
   @m_btnButton1.enable()
  }
 end
 …
end
 
위의 코드는 Thread class의 initialize의 parameter가 block인 셈.
이러한 기법이 code에 해를 끼칠 수도 있으나, thread를 만들어내는 logic과 thread가 실행하는 logic사이에 data 사용에 locality가 있다고 가정하면, 이러한 code의 localizing이 어떤 면에서 장점이 있지않을까.
 

“EBook Manager”의 5개의 댓글

  1. EbookManaer는 뭐하는 건가요? Html 문서를 chm으로 변환해주는 건가요

  2. 아뇨, pdf 등의 Ebook 파일들을 정리하는 거에요. 아마존 웹서비스를 이용해 메타 정보를 가져와서 저장해두면 웹으로 액세스하기도 좋을 것 같아서요.

  3. 저게 정확히 어떤걸 의미하는 코드인지는 모르겠지만 제가 보기엔 block이 parameter가 아니라 constructor를 override하는 코드같은데 그건 자바에도 있는 feature 아닌가요? 약간은 lambda스러운… 🙂

댓글 달기

이메일 주소는 공개되지 않습니다.

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.