27
王王王王王 Ruby1.9 王王王王王王 王王王 @tsuboi

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

  • Upload
    toruby

  • View
    1.386

  • Download
    3

Embed Size (px)

Citation preview

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

王子様本のRuby1.9対応を

調べるつぼい

@tsuboi

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

自己紹介• 名前

o つぼいo twitter: @tsuboi

• すみかとかつどうo 某社 R&Dセンター(最近は傭兵として地方遠征中)o 平日のネットは某社内 IRCo とちぎ Rubyは拡大会には参加(欠席一回)o Rubyはほそぼそと 10年(反省:使い方が変わってない)

• お仕事o 新しめのファイル共有とか文書管理とかメッセージ交換なシステムを考えたり作ったり

• 最近のトピックo 好き勝手にクラウドとか言うやつは死んでしまえo 先週、自由な生活を手放してしまいました

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

ある日の某IRC• Seki

「だれか幸福の王子様本が 1.9で動くか、調べてほしい!」

(そうすれば初刷脱出だ!)

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

幸福の王子様本

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

要件の確認• 顧客要件

o 「 dRubyによる分散・Webプログラミング」の売り上げを増やすこと

• とちぎ的な要件o Seki節を布教し、とちぎRuby会議の次回参加者を増やすこと

• 次の戦いのために。次の次の戦いのために。

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

よろしい、では作戦開始だ• 方法

o 幸福の王子様本のサンプルコードを Ruby1.9で動かしてまわる

• 妥協点o 本文中の自然言語上の非対応やスニペットが動かないのは目をつぶる

• 完全な検証は要件でないことに注意

• 課題o どうやってサンプルコードを入手するか?

• 賢者さまから直接もらうo ×紳士はそんな無粋なことはしない

• ひたすら手入力o ×ネタにならないo (学習としてはこれがベターではある)

• 最新でじたるテクノロジーでなんとかする

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

Buy

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

Split

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

スーパーファイン (白黒 600dpi )白黒両面読み込みOCR なし、自動傾き補正なし

Scan

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

ScanSnap標準添付読み取り精度は悪くない程度 コストパフォーマンスでは国内最強

(東芝製は精度高いけど値段も高い)ダウンロード価格 4800円

OCR

英語モードか日本語モードかはプログラムが対象の場合は微妙(大文字小文字変換を後処理で行うなら、日本語モードの方が分がいいことも)

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

PDFからのテキスト抽出• Rubyな人なら rroongaの ChupaText を使う

o http://groonga.rubyforge.org/#about-chupatext

• Macな人なら OS-Xの PDFKitを使うo OSX::PDFDocument.alloc.initWithURL(file_url).string.scan(/doi[\.|:].*/i)

[0]].join("")

• 手っ取り早くいくなら xdoc2txto http://www31.ocn.ne.jp/~h_ishida/xdoc2txt.html

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

I) A "2.4 reminder cuiO.rbclass ReminderCUIdef initialize(reminder)@model = reminderend

def [email protected]_a.each do Ik, viputs format_item(k, v)endnilend

def add(str)@model.add(str)End

def show (key)puts format_item (key, @model[key])end

def delete(key)puts ツキ [delete? (Yin)]: #{@model[key]}”if l ツ・ s*n ツ・ s*1 =- getsputs "canceled”returnend

@model.delete(key)listendprivatedef format_item (key, str)sprintf("%3d: %s ツ・ n", key, str)endend

9 - ~ -t Iv 3 "f

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

I) A "2.4 reminder cuiO.rbclass ReminderCUIdef initialize(reminder)@model = reminderend

def [email protected]_a.each do Ik, viputs format_item(k, v)endnilend

def add(str)@model.add(str)End

def show (key)puts format_item (key, @model[key])end

def delete(key)puts ツキ [delete? (Yin)]: #{@model[key]}”if l ツ・ s*n ツ・ s*1 =- getsputs "canceled”returnend

@model.delete(key)listendprivatedef format_item (key, str)sprintf("%3d: %s ツ・ n", key, str)endend

9 - ~ -t Iv 3 "f

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

(唯一の)まじめな話• RubyコードをOCRする際にぶつかる壁

o ダブルクォートが認識にしくいo パイプ「|」の認識精度が極めて悪い ←かなりどうしようもないo 辞書に存在しない単語がひどいことに(変数や関数名)o 英語モードで認識すると、「¥」が認識できない

• 王子本はこの点がつらい

• 意外と大丈夫な点o Rubyはスペースの有無に対して比較的ロバスト

• 王子本も実はけっこうばらばらo インデントがなくなっても大丈夫

• 一般的な問題(ポストフィルタで対応)o ページ境界o ページヘッダ、フッダの除去o 半角、全角がばらばらになる(特に日本語モード)

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

このままでは

調査ができません!!

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

大丈夫だ

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

http://estore.ohmsha.co.jp電子書籍として買えるようにしておいた!

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

わかっていると思いますが買うのはこれです。

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

一緒に買うと 960円もお得です(お支払いは PayPalで)

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

リスト 2.4 reminder_cui0.rbclass ReminderCUI def initialize(reminder)@model = reminder enddef list @model.to_a.each do |k, v|puts format_item(k, v) endnil enddef add(str) @model.add(str)enddef show(key) puts format_item(key, @model[key])enddef delete(key) puts" [delete? (Y/n)]: #{@model[key]}" if /¥s*n¥s*/ =~ getsputs "canceled"return [email protected](key)list endprivate def format_item(key, str)sprintf("%3d: %s¥n", key, str) endendターミナル 3 て ReminderCUI を起動して実験しましょう ( 図 2.4) 。

さすがにほぼOK!しかし、よくわからないルールで改行が落ちる( Privateなどが単独行にならない)

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

ひとまずの要約• Ruby 関係の書籍に掲載されているサンプルコードを

OCRする際に遭遇する課題を、簡単にまとめてみました

• 結論:

ためらいなく、容赦なく、電子書籍版を買え(時は金なり)

o ただし、完全ではない。ポストフィルタを書く必要はありそう。• 改行が怪しい(これは PDF ビューア/ツールの問題かもしれない)• 見やすさ優先でダブルクォートが全角になっている本もある

o なお、インデントが重要な言語の場合は、手打ちかダウンロードサイトがある書籍を選びましょう

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

で、 Ruby1.9で動いたの?

• ハァ、まぁ賢者さまがすでに確認済じゃないんですか?

• 4 章までは動きました(ちなみに 5 章はスレッドネタ)

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

問題が出たらWebへ改訂版に備えて加筆中らしい

http://d.hatena.ne.jp/m_seki+b/

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

まとめ:要件の確認• とちぎ Ruby会議 LT CM 枠(?)で王子本を紹介

o Amazonでの王子本の買い方の紹介o オーム社 eStore(β)での王子本の買い方の紹介

• さらに、王子のサイトを紹介o +b を紹介

• なにより、 Ustreamで全世界に露出o スタッフの皆さんに感謝

• すくなくとも、私が2冊買いました