O'ReillyのiPhone AppからEPUBファイルを抽出するRubyスクリプト

404 Blog Not Found:perl - O'ReillyのiPhoneアプリ本からepubをぶっこぬくを参考に、Ruby版を作ってみるテスト。

#/usr/bin/env ruby

def deleteall(delthem)
  if FileTest.directory?(delthem) then  # ディレクトリかどうかを判別
    Dir.foreach( delthem ) do |file|    # 中身を一覧
      next if /^\.+$/ =~ file           # 上位ディレクトリと自身を対象から外す
      deleteall( delthem.sub(/\/+$/,"") + "/" + file )
    end
    Dir.rmdir(delthem) rescue ""        # 中身が空になったディレクトリを削除
  else
    File.delete(delthem)                # ディレクトリでなければ削除
  end
end

def clean
  deleteall('Payload')
end

def die(message)
  puts message
  exit(1)
end

$src = ARGV.shift
die "Usage:#{$0} src.ipa [dst.epub]" unless $src && File.exist?($src)

$dst = ARGV.shift
unless $dst
  $dst = File.basename($src)
  $dst = $dst.sub(/\w+$/, 'epub')
end

result = `unzip -q #{$src} -x iTunes*`
die result unless $?.exitstatus == 0

$app = Dir.glob("Payload/*.app/book").first
die "No book found in the archive" unless $app

Dir.chdir($app) do |path|
  $updir = '../../..'
  system "zip", "-q0X", "#{$updir}/#{$dst}", 'mimetype'
  system "zip", "-qXr9D", "#{$updir}/#{$dst}", "META-INF", "OEBPS"
end
clean
system "open", "-a/Applications/iTunes.app", $dst

Rubyには中身が空でないディレクトリを一発消去する方法がないので、逆引きRuby - ディレクトリ:中身が空でないディレクトリを削除する からメソッドを借りてきました。

また、dieがなくてifが多くなるのが嫌だったので、自前でdieメソッドを追加。

使い方は弾さんのPerl番と同じ。上記のスクリプトをipa2epubとでもして実行権を与え、

ipa2epub path/to/ipa

で、EPUBを作成し、iTunesに登録できます。

[訂正]
Rubyには中身が空でないディレクトリを一発消去する方法がない は間違いでした。FileUtilsライブラリがあるので、これを使えばPerl版とほぼ同じような記述が可能でした。

#/usr/bin/env ruby
require "fileutils"

def clean
  FileUtils.rmtree('Payload')
end

def die(message)
  puts message
  exit(1)
end

$src = ARGV.shift
die "Usage:#{$0} src.ipa [dst.epub]" unless $src && File.exist?($src)

$dst = ARGV.shift
unless $dst
  $dst = File.basename($src)
  $dst = $dst.sub(/\w+$/, 'epub')
end

result = `unzip -q #{$src} -x iTunes*`
die result unless $?.exitstatus == 0

$app = Dir.glob("Payload/*.app/book").first
die "No book found in the archive" unless $app

Dir.chdir($app) do |path|
  $updir = '../../..'
  system "zip", "-q0X", "#{$updir}/#{$dst}", 'mimetype'
  system "zip", "-qXr9D", "#{$updir}/#{$dst}", "META-INF", "OEBPS"
end
clean
system "open", "-a/Applications/iTunes.app", $dst

Rails3で自分専用のブログを作る(8)ー NetBeans用Gitプラグインのインストール

今回作成する予定のブログシステムはgithub.comで公開をするつもりなので、ソース管理にgitを使います。
git-core自体はこれまでの準備作業でインストール済のようなので、NetBeans用のプラグインPeliculas Online Gratisをインストールします。

下記のダウンロードページからnbgit-0.4-netbeans-6.9.nbmをダウンロードします。

http://code.google.com/p/nbgit/downloads/list

次に、NetBeansを起動し、メニューから、ツール=>プラグインを選択し、「ダウンロード済み」タブをクリックします。
プラグインの追加」ボタンをクリックして、ダウンロードしたファイルを選択して組み込みます。

クラウドはオープンソースを殺すのか?

いきなり、物騒なタイトルですが、ここ半年以上気になっていた事を書いてみます。時代は一気にクラウドに向けて走っている感のあるこのごろですが、オープンソースなしにはクラウドコンピューティングの出現はなかったというのは、おそらく誰も否定し得ない事実だろうと思います。特に、オペレーティングシステムであるLinuxの果たした役割は非常に大きく、Linuxなしには、Amazon EC2Googleも、Salesforce.comでさえ出現しなかったのではないでしょうか。しかし、どんどんクラウドが使われるようになってくると、Linuxをはじめとするオープンソースソフトウェアのエコシステムが変わっていく、そんな感じがしています。

オープンソースソフトウェアが一般企業のIT部門に受け入れられてきたのは、ベンダーロックインの排除や、企業のシステムが、商用ソフトウェアのライフサイクルに左右されてしまう事への危惧もありますが、やはりライセンスコストがいらないという事が最大の利点の一つであった事は確かだと思います。これがあるからこそ、開発・運用要員の教育コストや、サポートコストの問題があってもオープンソースソフトウェアを導入するメリットがあったと言えるでしょう。

これは、Linuxそのものだけでなく、その上で動作するアプリケーションにも言える事です。もっとも最初に受け入れられたメールシステムはもとより、WebサーバやアプリケーションサーバCMSやブログシステムといったものも、商用ソフトウェアとの対比の中でメリットを見いだされ使われてきたのだと思います。

ところが、クラウド化の進展により、一般企業のIT部門からみると、こうしたオープンソースソフトウェアの魅力が薄らぎつつあるのではないでしょうか。

例えば、現在自社でメールシステムを運用する事がメリットがあるのは、どのくらいの会社でしょうか?Google Apps Standard Editionなら、50アカウントまでは無料でメール・カレンダー・ポータルや文書共有などの機能が使えますし。50人を超えても一人月額500円で有償サービスが受けられます。ウイルス対策やスパム対策も含まれたものである事考えれば、自社導入して運用にかかるコストを支払うより経済的に思えるのは確かでしょう。セキュリティホールの心配もしなくてよい訳ですし。

こうして見ると、クラウド化の進展によって、一般企業のIT部門がLinuxなどのオープンソースソフトウェアを使う大きな理由の一つが消えつつあるように思えるのです。

Rails3で自分専用のブログを作る(7)— JavaとNetbeansのインストール

今回の開発でもNetBeansを開発に使おうと思います。まずJavaのインストールですが、今回はOpen-JDKを使いました。

sudo apt-get install default-jdk

NetBeansのパッケージもありますが、6.8なので、最新の6.9.1をダウンロードしてインストールしました。

sh netbeans-6.9.1-ml-ruby-linux.sh

Rails3で自分専用のブログを作る(6)— PostgreSQLのインストール

PostgreSQLとドライバをコンパイルするための libpq-dev をインストールします。

sudo apt-get install postgresql libpq-dev

Ruby用のPostgreSQLドライバのうち、pgをインストールします。

sudo gem install pg

Rails3で自分専用のブログを作る(5)— Rails 3 のインストール

まず、下記のようにデフォルトのRubyRuby 1.9.2 RC2にします。

rvm use 1.9.2 --default

つぎに、Rails 3.0.0 RC をインストールします。

gem install rails --pre

Rails3で自分専用のブログを作る(4)—rvmでRuby 1.9.2 RC2をコンパイル

rvmでCRubyをコンパイルするのに必要なパッケージを見落としていたので、下記のように追加しました。

sudo aptitude install build-essential bison openssl libreadline5 libreadline-dev curl git-core zlib1g zlib1g-dev libssl-dev vim libsqlite3-0 libsqlite3-dev sqlite3 libreadline5-dev libreadline6-dev libxml2-dev git-core subversion autoconf

Ruby 1.9.2 RC2をコンパイルしてインストールするために、下記のコマンドを実行します。

rvm install 1.9.2