アーカイブ

Posts Tagged ‘Ruby’

ZIPアーカイブに固めた画像ファイルをePubに変換する

僕の所にもiPadが届いたので、ScanSnapで読み込んでおいた技術書(PDF)と、漫画(ZIPアーカイブに固めた画像ファイル)を転送して閲覧してみました。

重いです。特にPDFが。

最初から電子化されている書籍であればベクトルデータのPDFは軽いと思いますが、スキャンした書籍はビットマップ画像の固まりなので、ファイルサイズからして巨大になり、閲覧が重いです。
ただし同じ書籍で比較すると、PDFよりもZIPアーカイブの方が軽いようです。

閲覧にはCloudReadersを使っているのですが、出来ればiBooksを使いたいです。
なによりも、書籍をiTunesで管理したいのです。

そこでZIPアーカイブを、ePubに変換してみる事にしました。

まずPDFの場合はZIPアーカイブに変換する所からになりますが、こちらにすばらしい解説があります。

Desire for wealth
ScanSnap で作成した pdf を Mac OS X の標準機能で軽くする & zip に固める

ここで行うサイズ調整はかなり効果があります。

次にZIPアーカイブからePubへの変換ですが、こちらの情報によるとePubはそれほど複雑な物ではないようです。

横浜工文社
日本語Epubブックサンプル

ここの情報を参考に、変換スクリプトを書いてみました。
ZippedImagesToEpub.rb.gz

使い方
このスクリプトはZip/Rubyとuuidを利用しています。ターミナルからRubyGemsを使って、インストールしてください

gem install zipruby
gem install uuid

後は、スクリプトを実行します。

ruby ZippedImagesToEpub.rb ZIPアーカイブ

現状iPadを横画面にすると、画面の左側か右側のどちらかだけに画像が表示されてしまう書籍もあります
また著者やカバー画像などのメタデータもサポートしていません。
このあたりは、コツコツ改善していこうかと思っています。

GUIを付けても良いんですが、Automatorから使う方が幸せかもしれません。
RubyCocoaの本買うかな…

カテゴリー:開発 タグ:

OS Xのアドレスブックのアイコンを最新のTwitterのアイコンで自動更新する

タイトル長いですが。

OS Xのアドレスブックのカードには、アイコンというか写真を設定できます。ここを設定しておくと、OS Xと同期しているiPhoneで着信あった時にアイコンが表示されたりするので、判りやすかったりします。

問題は知人各位の写真の調達なんですが、僕はmixiとかTwitterとかSkypeのアイコンを貼付けて使っています。ただみなさんアイコンを時々変更されるので、気が付くと懐かしいアイコンになっていたりします。

そこで、最新のTwitterアイコンで、アドレスブックを自動更新するスクリプトを書いてみました。

データ入力
まずは、知人各位のカードに、「URL」を追加してください。内容はTwitterのユーザページのURLである、「http://twitter.com/user_name」としてください。ラベルは「自宅」とか「勤務先」とか選べますが、何でも構いません。URLの内容がTwitterのユーザページになっている事が全てです。

スクリプトをインストール
今回作ったスクリプトはターミナルで動作するrubyスクリプトなのですが、動作させるために必要なパッケージをインストールする必要があります。ターミナルで下記のコマンドを入力してください。

gem install twitter4r

これはRubyGemsによってユーザ領域にインストールされるので、システムを壊す心配はありません。

次に、以下のスクリプトをAddressIconPaster.rbという名前のテキストファイルとして保存してください。

#!/usr/bin/ruby

require 'osx/cocoa'
OSX.require_framework 'AddressBook'
require 'rubygems'
require 'twitter'
require 'open-uri'

twitter = Twitter::Client.new(:login => ARGV[0], :password => ARGV[1])

address_book = OSX::ABAddressBook.sharedAddressBook
address_book.people.each do |person|
  urls = person.valueForProperty(OSX::KABURLsProperty)
  if urls
    for index in 0...urls.count
      url = urls.valueAtIndex(index)
      if /^http:\/\/twitter.com\/(.+)/ =~ url
         user = twitter.user($1)
         open(user.profile_image_url) do |file|
           person.setImageData(OSX::NSData.dataWithRubyString(file.read))
         end
      end
    end
  end
end
address_book.save

アイコンの自動更新を実行
ご自分のTwitterのユーザ名とパスワードを用意して、ターミナルで下記のコマンドを入力してください。

ruby AddressIconPaster.rb ユーザ名 パスワード

これで、カードにTwitterのURLを設定した全てのユーザのアイコンが最新の物に更新されます。

知人のカードにTwitterのURLを入力する事は、今回のアイコン設定が必要なくても自然な事だと思いますし、特別な設定が必要ないので良い感じではないかと思います。

せっかくだから、RubyCocoaでGUIを付ける所がまでやれよ自分……という気もしましたが、iPad弄りが楽しいのでここまでに致したく存じます。

カテゴリー:デスクトップ, 開発 タグ:

整理済みのZIPアーカイブにZippedImages Etcetera対応タグを設定する

僕は電子化したZIPアーカイブを、iTunes風のフォルダ階層に整理しています。
著者名のフォルダの中に書名のZIPアーカイブを、以下のようなイメージで配置しています。

著者A
  書名a.zip
  書名b.zip
著者B
  書名c.zip
  書名d.zip

先日リリースしたZippedImages Etceteraに必要なタグの設定を省力化するために、上記の状態に整理された書庫ファイルをバッチ処理するスクリプトを書きました。
以下のタグを自動設定します。

  • ZIPアーカイブを含むディレクトリ名を著者名として設定
  • ZIPアーカイブのファイル名から拡張子を除去した文字列を書籍名として設定
  • ZIPアーカイブに含まれる最初のJPEGファイルをサムネイルとして設定

つまり、発売日以外のタグを全部自動設定できます。
ZIPアーカイブの整理方法は人それぞれだと思いますが、スクリプトを修正してやれば色々なケースにも対応できると思います。
例えばファイル名に著者名と書籍名を両方含めてフラットに管理している場合でも、今回のスクリプトを修正すれば対応できると思います。

使い方
このスクリプトはZip/Rubyを利用しています。ターミナルからRubyGemsを使って、インストールしてください。

gem install zipruby

あとは、タグを付けたいZIPアーカイブを含むディレクトリをスクリプトに渡してやってください。
再帰処理で、含まれるZIPアーカイブを全部処理します。

ruby ziupdate.rb <ZIPアーカイブを含むディレクトリ>

以下がスクリプトになります。

#!/usr/bin/ruby

require "find"
require "rubygems"
require "zipruby"

Find.find(ARGV[0]) do |file_path|
  file_path = File.expand_path(file_path)
  if /\A[^.].*\.zip\z/ =~ File.basename(file_path)
    author = File.basename(File.dirname(file_path))
    title = File.basename(file_path, ".zip")
    Zip::Archive.open(file_path) do |zip_file|
      thumbnail = zip_file.map {|entry| entry.name}.sort.find {|name| /\A[^.].*\.(jpg|jpeg)\z/ =~ File.basename(name)}
      meta = "Title: \"#{title}\"\nAuthors:\n  - \"#{author}\"\nThumbnail: \"#{thumbnail}\"\n"
      zip_file.add_or_replace_buffer("ZippedImages.yaml", meta)
      print meta
    end
  end
end
カテゴリー:開発 タグ: ,

日本Rubyカンファレンス2006はチケット完売

再販もダメだったorz

カテゴリー:開発 タグ:

Rails本

いつの間にか、Rails本の邦訳が出ていました。

「RailsによるアジャイルWebアプリケーション開発」 オーム社

既にAmazonは在庫切れで、出遅れたようです(–;;
とりあえず近所の書店に在庫確認の電話をしたのですが、「Railsによる…」と書名を告げると、「ISBNが判りませんか?」と問われました。
少し待つと、「データ的には在庫があるけど、見つからないので後で連絡します」と言われました。
待っている間に、想像した事は、

  • コンピュータ関係の書籍で英文字の書名は棚から探す事が大変。綴りを読めなかったり。
  • 書店に問い合わせる前にパソコンで書名を検索している人が多いので、大体ISBNが判る。
  • あたりです。
    しかし在庫が店舗の端末で検索できるぐらいなら、書店のサイトでアクセスさせて欲しいです。
    問い合わせる事が酷く無駄であるような。

    カテゴリー:開発 タグ:

    YARVのマルチVM

    YARVのネイティブスレッド関係の話が聞きたくて、OSC 2006に参加してきました。
    残念ながら現時点の実装は、rubyのスクリプト部分をネイティブスレッドで並列に実行する事はできないようです。
    所がその場で、マルチVMと言う話を聞けました。
    これは単一プロセス内に、ネイティブスレッドを使って独立したVMを生成する仕組みであるようです。
    JavaのDolphinで予告されてる機能と、似たような物でしょうか。

    VM間に軽量な通信や同期の仕組みが用意されるのであれば、ネイティブスレッドの代わりに使えるような期待が持てます。

    カテゴリー:開発 タグ: