坪井創吾さん / "王子様本のRuby1.9対応を調べる"

1,723 views

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,723
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

坪井創吾さん / "王子様本のRuby1.9対応を調べる"

  1. 1. 王子様本のRuby1.9対応を調べる<br />つぼい<br />@tsuboi<br />
  2. 2. 自己紹介<br />名前<br />つぼい<br />twitter: @tsuboi<br />すみかとかつどう<br />某社R&Dセンター(最近は傭兵として地方遠征中)<br />平日のネットは某社内IRC<br />とちぎRubyは拡大会には参加(欠席一回)<br />Rubyはほそぼそと10年(反省:使い方が変わってない)<br />お仕事<br />新しめのファイル共有とか文書管理とかメッセージ交換なシステムを考えたり作ったり<br />最近のトピック<br />好き勝手にクラウドとか言うやつは死んでしまえ<br />先週、自由な生活を手放してしまいました<br />
  3. 3. ある日の某IRC<br />Seki「だれか星の王子様本が1.9で動くか、調べてほしい!」(そうすれば初刷脱出だ!)<br />
  4. 4. 星の王子様本<br />
  5. 5. 要件の確認<br />顧客要件<br />「dRubyによる分散・Webプログラミング」の売り上げを増やすこと<br />とちぎ的な要件<br />Seki節を布教し、とちぎRuby会議の次回参加者を増やすこと<br />次の戦いのために。次の次の戦いのために。<br />
  6. 6. よろしい、では作戦開始だ<br />方法<br />王子本のサンプルコードをRuby1.9で動かしてまわる<br />妥協点<br />本文中の自然言語上の非対応やスニペットが動かないのは目をつぶる<br />完全な検証は要件でないことに注意<br />課題<br />どうやってサンプルコードを入手するか?<br />賢者さまから直接もらう<br />×紳士はそんな無粋なことはしない<br />ひたすら手入力<br />×ネタにならない<br />(学習としてはこれがベターではある)<br />最新でじたるテクノロジーでなんとかする<br />
  7. 7. Buy<br />
  8. 8.
  9. 9. Split<br />
  10. 10. Scan<br />スーパーファイン(白黒600dpi)<br />白黒<br />両面読み込み<br />OCRなし、自動傾き補正なし<br />
  11. 11. OCR<br />ScanSnap標準添付<br />読み取り精度は悪くない程度<br />コストパフォーマンスでは国内最強<br />(東芝製は精度高いけど値段も高い)<br />ダウンロード価格4800円<br />英語モードか日本語モードかはプログラムが対象の場合は微妙<br />(大文字小文字変換を後処理で行うなら、日本語モードの方が分がいいことも)<br />
  12. 12. PDFからのテキスト抽出<br />Rubyな人ならrroongaの ChupaTextを使う<br />http://groonga.rubyforge.org/#about-chupatext<br />Macな人ならOS-XのPDFKitを使う<br />OSX::PDFDocument.alloc.initWithURL(file_url).string.scan(/doi[.|:].*/i)[0]].join("")<br />手っ取り早くいくならxdoc2txt<br />http://www31.ocn.ne.jp/~h_ishida/xdoc2txt.html<br />
  13. 13.
  14. 14. I) A "2.4 reminder cuiO.rb<br />class ReminderCUI<br />def initialize(reminder)<br />@model = reminder<br />end<br />deflist<br />@model.to_a.each do Ik, vi<br />puts format_item(k, v)<br />end<br />nil<br />end<br />def add(str)<br />@model.add(str)<br />End<br />def show (key)<br />puts format_item (key, @model[key])<br />end<br />def delete(key)<br />putsツキ [delete? (Yin)]: #{@model[key]}”<br />if lツ・s*nツ・s*1 =- gets<br />puts "canceled”<br />return<br />end<br />@model.delete(key)<br />list<br />end<br />private<br />defformat_item (key, str)<br />sprintf("%3d: %sツ・n", key, str)<br />end<br />end<br />9 - ~ -t Iv 3 "f<br />
  15. 15. I) A "2.4 reminder cuiO.rb<br />class ReminderCUI<br />def initialize(reminder)<br />@model = reminder<br />end<br />deflist<br />@model.to_a.each do Ik, vi<br />puts format_item(k, v)<br />end<br />nil<br />end<br />def add(str)<br />@model.add(str)<br />End<br />def show (key)<br />puts format_item (key, @model[key])<br />end<br />def delete(key)<br />putsツキ [delete? (Yin)]: #{@model[key]}”<br />if lツ・s*nツ・s*1 =- gets<br />puts "canceled”<br />return<br />end<br />@model.delete(key)<br />list<br />end<br />private<br />defformat_item (key, str)<br />sprintf("%3d: %sツ・n", key, str)<br />end<br />end<br />9 - ~ -t Iv 3 "f<br />
  16. 16. (唯一の)まじめな話<br />RubyコードをOCRする際にぶつかる壁<br />ダブルクォートが認識にしくい<br />パイプ「|」の認識精度が極めて悪い<br />辞書に存在しない単語がひどいことに(変数や関数名)<br />英語モードで認識すると、「¥」が認識できない<br />王子本はこの点がつらい<br />意外と大丈夫な点<br />Rubyはスペースの有無に対して比較的ロバスト<br />王子本も実はけっこうばらばら<br />インデントがなくなっても大丈夫<br />一般的な問題(ポストフィルタで対応)<br />ページ境界<br />ページヘッダ、フッダの除去<br />半角、全角がばらばらになる(特に日本語モード)<br />
  17. 17. このままでは<br />調査ができません!!<br />
  18. 18. 大丈夫だ<br />
  19. 19.
  20. 20. 電子書籍として買えるようにしておいた!<br />http://estore.ohmsha.co.jp<br />
  21. 21. わかっていると思いますが<br />買うのはこれです。<br />
  22. 22. 一緒に買うと960円もお得です(お支払いはPayPalで)<br />
  23. 23. リスト 2.4 reminder_cui0.rb<br />class ReminderCUIdef initialize(reminder)<br />@model = reminder end<br />def list @model.to_a.each do |k, v|<br />puts format_item(k, v) end<br />nil end<br />def add(str) @model.add(str)<br />end<br />def show(key) puts format_item(key, @model[key])<br />end<br />def delete(key) puts" [delete? (Y/n)]: #{@model[key]}" if /¥s*n¥s*/ =~ gets<br />puts "canceled"<br />return end<br />@model.delete(key)<br />list end<br />private defformat_item(key, str)<br />sprintf("%3d: %s¥n", key, str) end<br />end<br />ターミナル 3 で ReminderCUIを起動して実験しましょう(図 2.4)。<br />よくわからないルールで改行が落ちる<br />(Privateなどが単独行にならない)<br />
  24. 24. ひとまずの要約<br />Ruby関係の書籍に掲載されているサンプルコードをOCRする際に遭遇する課題を簡単にまとめてみました<br />結論:ためらいなく、容赦なく、電子書籍版を買え(時は金なり)<br />ただし、完全ではない。ポストフィルタを書く必要はありそう。<br />改行が怪しい(これはPDFビューア/ツールの問題かもしれない)<br />見やすさ優先でダブルクォートが全角になっている本もある<br />なお、インデントが重要な言語の場合は、手打ちかダウンロードサイトがある書籍を選びましょう<br />
  25. 25. で、Ruby1.9で動いたの?<br />ハァ、まぁ賢者さまがすでに確認済じゃないんですか?<br />4章までは動きました(ちなみに5章はスレッドネタ)<br />
  26. 26. 問題が出たらWebへ改訂版に備えて加筆中らしい<br />http://d.hatena.ne.jp/m_seki+b/<br />
  27. 27. まとめ:要件の確認<br />とちぎRuby会議 LT CM枠(?)で王子本を紹介<br />Amazonでの王子本の買い方の紹介<br />オーム社 eStore(β)での王子本の買い方の紹介<br />さらに、王子のサイトを紹介<br />+b を紹介<br />なにより、Ustreamで全世界に露出<br />スタッフの皆さんに感謝<br />すくなくとも、私が2冊買いました<br />

×