Rubyの勉強、はじめました。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。


Web2Stanzaちょっと更新

ちょっとePub関連で新しいネタを思いついたので
思い出しがてらWeb2Stanzaメンテしました。

GaeVFSというGoogleAppEngineでファイル扱えるライブラリを使ってましたが、
ここが性能ネックになっていたようなので外しました。
代わりにいったんメモリ上でZip作ってから
Datastoreに直接保存するようにしました。
少し処理速くなった気がしますw

メモリ上でZipつくるときにちょっとハマったのでメモ。
ByteArrayOutputStreamを使いましたが、そこから作ったZipOutputStreamをcloseする前に
Datastoreに保存してしまうと変に保存されてしまう模様。
ちゃんとストリームを閉じてから永続化しないとダメでした。


『Web2Stanza』公開しました

iPhoneアプリの『Stanza』を愛用しています。
ePub形式の電子ブックをオフラインで読めるアプリなんですが、
ページをめくる動作が素敵だったり、読んだ位置を覚えてくれてたり、
ディテールが素晴らしいです。

ただWebページからePub形式を作るのにはちょっと手間がかかっていました。
ポール・グレアムとかジョエル・スポルスキーとかの
Web上のエッセイを読むのに使いたかったので、
なんかもっと手軽にできないかなと思いました。

調べてみるとePubは割と簡単に作れる模様。
(参考サイト:電子書籍ファイルePubについて -ePubを自分で作成する- « lab.naoki.sato.name
そこでWebページを自動でePubに変換してくれるWebサービスを作ってみました。

Web2Stanza

InstapaperとかRead it Laterとかもあるのでどれだけ需要あるかわかりませんが、
Stanzaを気に入っている人なら便利だと思います。


特徴

  • ブックマークレット形式。
  • 無料です。
  • iPhoneで表示中のWebページを直接Stanzaに取り込むことができる。
  • テキストの保存だけなので、画像やCSSには対応していません。
  • iPhone以外のブラウザから使うとePubファイルをダウンロード。
  • GAE/J上にサービス構築しているので1MBを超えるページを扱えません。
    (テキストだけなのでそうそう問題にはならないと思います)

ついでにGoogle Code使ってソース公開しました。
主に以下の言語・ライブラリを使って開発しました。
素晴らしいライブラリを無償で提供している方々に感謝です。

だいぶ勉強にもなったので、各ライブラリのレビューとかも書いていきたいですね。



msysGitと日本語

github使い始めた。

リーナス・トーバルスはGitについて講演しているときに、
「Subversionを使っている人がいるなら、
この場から去ったほうがいいかもしれない」と言ったそうだ。

Subversion愛用してたんですが…
そんなに違うものなのかな、まだいまいちわかってない。


で、そんなGitを使い始めたので、Git on Windowsでの日本語について少し。

Gitは文字をUTF8で処理するので、CP932なコマンドプロンプトとかとは相性が悪い。
TortoiseGitなら日本語問題なしだけど、
エディターはvim大好きっ子なのでそのままgit commitしちゃいたい。

Git on コマンドプロンプト with 日本語コミットログの設定方法。


1. 環境変数EDITOR


EDITORという環境変数を新規作成したげて、エディタを指定する。当然vim。
こうしとくとgit commit -a でエディタが立ち上がる。


2. vimの設定


vimrcに以下を追加。
au BufRead COMMIT_EDITMSG set fenc=utf8
これでGitのコミットメッセージ編集する時には、UTF8で処理するようになる。
(COMMIT_EDITMSGがGitのコミットメッセージのファイル名)


git logとかしちゃうと文字化けしちゃいますが、
TortoiseGitから見ればちゃんと表示できてる。

とりあえずはこれでよいかな。

git logで文字化けせずに表示する方法、誰か教えて!


MechanizeでZipPluggableParser

ちょっと調べたけど検索にひっかかってこなかったので、
Mechanize用ZIPファイルパーサ置いておきます。
解凍にはzipruby使う想定。
zip_parser.rb
require 'rubygems'
require 'mechanize'
require 'zipruby'

class ZipParser < Mechanize::File
  def initialize(uri = nil, response = nil, body = nil, code = nil)
    super(uri, response, body, code)
  end

  def open
    streaming = lambda { return @body.slice!(0, 256) }

    Zip::Archive.open_buffer(streaming) {|zip_ar| yield(zip_ar)}
  end
end
Mechanize::PluggerableParserってのでMIMEタイプに応じたパーサを設定できるそうな。
#openでZip::Archiveを渡せば使いやすいかなと。

使い方はこんな感じ。
require 'rubygems'
require 'mechanize'
require 'zip_parser'

agent = Mechanize.new

agent.pluggable_parser["application/zip"] = ZipParser
agent.pluggable_parser["application/octet-stream"] = ZipParser

url = 'http://github.com/zeero/zeero_work/raw/master/zip_parser.zip'
agent.get(url) {|file|
  file.open {|zip_ar|
    zip_ar.each do |zf|
      puts zf.name
    end
  }
}

7行目でMIMEタイプ別でパーサを登録。
'application/zip'だけでいいと思いきや、
githubからだと'application/octet-stream'でくるのでそちらも登録。
これでagent.getでZipParserが生成される。
あとはopenでZip::Archiveつくって、ファイル名の一覧表示させる、と


7月のApple

一番の快挙はAppStoreのオープンだ!

iPod Touch 大好き


次のページ

FC2Ad

FC2ブログ