トップ 最新 追記

2010-11-02 [長年日記]

_ ぼくらの電子出版がやってきた ヤア!ヤア!ヤア!

ついに 2010-10-31 に最初のβが出ました達人出版会のご紹介エントリ。

達人出版会とは

達人出版会

  1. 今のところ原則 IT 関係の書籍のみ
  2. 支払いは PayPal
  3. データフォーマットは ePub or PDF
  4. 基本的には DRM フリー
    • ライセンス情報として登録者のメールアドレスがメタデータに自動的に埋め込まれたデータをダウンロードする*1
  5. iBookstore など外部の販売チャネルは使わない

という、とんがったサービスではありますが、個人的には電子書籍のド本命かなと思っています。

少なくとも動くとか音が出るとかそんなの全然欲しくないし、現時点で縦書きが出ない ePub も内容が内容なのでまったく問題にならないです。DRM バリバリのデータも欲しくないので、この程度の扱いで済んでいるのは非常に好感が持てます。

そもそも買ったデータは本人のものなんだから、著者を含め他者の権利を侵害しない限りは本人の自由にならなきゃおかしいですよね。なんで自分の所有しているデータなのに自分の所有している機械で自由に再生できるとは限らないんですか、そんなのおかしくないですか。

脱線しました。

初めてまともにePubを読んだ

買ったのはやはりこれです。

はじめる! Cucumber - 達人出版会

で、iBooks と Mac 上でちらっと読んでみました。以下、感想。

iBooks はよくできてる
  • 目次
  • しおり
  • ローテート対応
  • デバイスの大きさへの対応
  • 明るさの調節をその場で行える
  • 文字サイズ調整

電子ブックリーダを比較したことがほとんどないのですけど、よくできてるなぁと思いました。しおりもたくさん挟めるし。

メモが書けるといいんだけど、そういう機能は iBooks にはないのかな? それはおいおい探していきます。ePub のリーダーも今後は増えていくでしょうし*2

パソコンではあまり読みやすくない
  • Preview.app
  • Adobe Digital Editions
  • calibre
  • Sigil

で試してみました。どれもこれもイマイチでした。

Preview + PDF はウィンドウサイズに合わせて表示を調節する機能があるんですが、横長の画面にフィットさせても読みやすくないし、かといって 13" MacBook の画面で見開きにすると小さすぎて読みにくいです。iPad + iBooks みたいに自動じゃなくてもローテートして読みやすいツクリになってるとだいぶ違う気がしますが、ローテートした状態を維持するのはパソコンの格好をしている MacBook にはつらいですね。

ePub 対応アプリはどれも「読む」ことに集中できる完成度ではない感じです。「ライブラリ管理」と「開く」ことはできても本当に「読む」環境にはまだなり得ていない印象。少なくとも iBooks と同じレベルで読めるものはないですね。せめてウィンドウサイズに1ページをフィットさせて読む機能さえあればずいぶん違うんですけど*3

まぁパソコンで読む分には自分で再加工して読みやすい大きさの PDF にしちゃうとか、たぶん達人出版会のデータならできるような気がするんですけど、目的は本を読むことであってデータの加工ではないですからね。そこら辺には積極的に手を出したくはないですね。

まだ模索が必要な感じです。

なにはともあれ

書き手にも読者にもメリットのある出版社として育っていってほしいですね。頑張れ達人出版会!

Tags: Book

*1 簡単に言うとそのまま流せば誰がやったか分かる

*2 たぶん現状でも選択肢はいくつもあるんだろうけど、探してもいないです。でも探さずに読めるのがいいわけで。

*3 まさか見つけられてないだけ?


2010-11-10 [長年日記]

_ Rails 3の動かし方メモ - Apache編 -

development環境

WEBRick ( rails server )での development はほぼ悩むことない

production環境

とりあえず Apache を基本にメモ。nginx だと当然記法は異なる。チュートリアルビデオが分かりやすい。

  • production 用に rake を実行するには rake COMMAND RAILS_ENV=production
  • /rails/info/properties は production 環境では localhost 以外からは参照できない
Passenger

Overview ― Phusion Passenger (a.k.a. mod_rails / mod_rack)

※ mod_rails だけど、今は mod_rack でもある。しかも nginx でも動く。

以下、メモ。

  • RackEnv production を設定( <= Rails 2 の場合は RailsEnv )
  • SELinux に引っかかって gem の奥深くに入ってる passenger は読み込めなかった
  • SELinux 以外は VirtualHost 丸ごと passenger 化するのは難しくない
  • production 環境として実行するためには httpd.conf に RackEnv production ( Rails 3 以降の場合) が必要*1
Passenger + サブディレクトリ

Phusion Passenger users guide

一つのホストの中で複数の Rails アプリを動かす。

  • RackBaseURI を使う ( <= Rails 2 の場合は RailsBaseURI )
  • RackBaseURI /app の形式で指定する
  • このパスに実際の Rails.root/public が来るように symlink を作る

※ ただし、アクセスが http://example.com/app のものは http://example.com/app/ に正規化してあげないとWebサーバとの間でパスの解釈に食い違いが出てしまう

fastcgi

dre3k's rails3_fcgi at master - GitHub

これでやってみる。

注意!!

  • mod_fcgid では AddHandler fcgid-script .fcgi
  • mod_fastcgi では AddHandler fastcgi-script .fcgi

DocumentRoot がアプリの public/ になる方法は設定できた。ただし rvm で入れた ruby は今のところ使い方が分からない。もしかしたら rvm wrapper とか使えばイケるのか?

ということで、複数の別バージョンの Ruby を動かすのは今のところ難しそう。Passenger によって mod_php 並みに快適にはなるが、mod_php を越えるわけではなさげ。結構期待していたのに。

ところで rack で扱うなら fastcgi 関係の gem って要らないんすよね?

rvm の Ruby を使う

Passenger
  • rvm で入れた Ruby を rvm use で指定してから gem install rails passenger
  • この passenger を利用する設定にすれば普通に動く
fastcgi

なぜかは分からないけどうまく動かすことができなかった。

まとめ

まとめはない

Tags: Rails Ruby Web

*1 Rails 2 以下の場合は RailsEnv を設定する


2010-11-12 [長年日記]

_ Evernote一本をやめてSimplenote併用へ

最近は自宅サーバの Wiki じゃなくてあえて Evernote を使うことが増えていました。自宅サーバの Wiki に繋ぐ必要がなく、iPod touch でも自由に編集可能、ローカルにキャッシュしておけばネットワークが切れていても大丈夫、など Wiki にないメリットがやはり大きかったのです。

しかしあるとき気づきました。

Evernote は勝手にデータに手を加えている

ということに。

Evernoteは正確なテキストデータを保持しない

Evernote の考え方がどうなのかはよく分からないのですが、Evernote で構造化テキストが使えたら便利だなとは以前から思っていましたし、そういう意見は自分以外にも目にしていました。

自分も Markdown を使ったり reST を使ったり*1していたのですが、ある日、箇条書きをネストさせたときに気がついてしまいました。

ホワイトスペースを維持できていない

ことに。

Evernote を使って長文を書くときは以前紹介した mobile版 + 外部エディタを使う方法 で書いているので、エディタ上で正確にホワイトスペースの調整をしながら書いています。勘違いのはずがありません。*2

これは困ります。普通の文章だけを書いているならいいんですが、何らかの記法を使っている場合はホワイトスペース一つが命取りになります。少しの間だましだまし使っていましたが、待っていても恐らく何も解決しないことから、別な選択肢を試してみることにしました。

Evernoteそのものの置き換えは志向しないことに

最初は Evernote そのものをやめる方向に持っていこうと思ったのですが、以下の理由で断念しました。

  1. 他のアプリやサービスとの連携の面で Evernote が抜きん出ている
    • 例えば Twitter アプリとの連携において Evernote のように使うことができるサービスを探すのは難しいです
  2. タグ付け、検索性など、純粋に書くだけでなく保存し、検索し、再利用するシーンにおいても他のサービスより便利

Evernote を完全に置き換えるのは容量の問題を除いても難しいです。Google Docs と連携するタイプのノート、メモサービスもありますが、Evernote 並みの完成度を期待するのは難しいですし、より「書くこと」に特化したノート、メモサービスではテキスト以外のデータを保存できなかったりして、根本的に置き換えるのは不可能だったりします。

Simplenoteを併用する

ということで「書き終わりがあるものを書く」場合は Simplenote を使うことにしました。「書き終わりがあるもの」というのは

  • 日記などにアウトプットすることが目的
  • ファイルに落とし、rst2ody.py などで紙前提のデータとすることが目的

で、最終的には Evernote や Simplenote から削除されるものを言います。

なぜ Simplenote になったかというと、

  • スマートフォンアプリ, PC/Mac アプリ, Web UI が揃っている
  • 最初に目についた
  • 十分速かった

という理由です。

SimpleText という似たサービスも試したのですが、サービスの全体像が分かりにくく、Mac 上では結局「テキストファイルを編集する」というスタイルになりそうなのでやめました。データストアの実体がファイルであってもよいのですが、編集段階でファイルであるということは意識したくなかったからです。それだったら Dropbox と大差ないわけで。(少なくとも PC 上においては。)

現在の構成

です。Windows 用のアプリは調べていませんが、Simplenote のサイト上で紹介されています。

基本的には Evernote は Evernote 社の提供するもので閉じていますが、Simplenote の場合は PC 上のアプリがないみたいで、これは第三者の提供するものを利用するようです。

それが JustNotes と Netational Velocity ですが、JustNotes は enex ( Evernote の export データ ) の読み込み用で、実際に読み書きに使っているのは Notational Velocity です。

サービスの比較

以下は自分で比較したときのメモです。何かのお役に立てば幸いです。

Evernote

すべてを記憶する | Evernote Corporation

  • リッチテキストを扱える
  • 様々な形式のデータを扱える
  • 画像や PDF を OCR に掛けてテキストで検索できる
  • タグ付けの他にノートも複数作れる

ただし、リッチテキストやマルチメディアデータ周りで iPhone などモバイルデバイスに比較的強い制約がある。

また、プレーンテキストデータを勝手に加工してしまうためにコピー&ペーストした際に改行が落ちる、各種 Wiki, Markdown, reST など空白文字に意味のある記法を使うとそれを保持できないなどの問題あり。

改行の問題は比較的有名だが、改行以外にもホワイトスペースで問題が出るとはしばらく使っていても気づかなかった。

Simplenote

Simplenote. An easy way to keep notes, lists, ideas, and more.

  • テキストしか書けない
  • 単純なので iPhone アプリも PC 向けアプリもとにかく速い
  • PC向けアプリは公式版はない?
  • free版でもバージョン管理できる(max 10 / premium 30)
  • free版ではメールからノートを作成できない
  • Web UI を「広げる」user script 有り

PC向け公式アプリはないが API は private beta 状態。

freeアカウントでも編集履歴を保持してくれるのは場合によって便利そう。仕事やじっくり PC に向かってしか書かないようなものなら自分でバージョン管理するのであまり必要ないかもしれないが。

また、iPhone アプリで Evernote のように明確にローカルにキャッシュするアクションがないように見える。もしかするとすべてのデータを自動的にキャッシュするのかもしれない。プレインテキストしか扱えないのならそれで十分現実的か。

Mac用アプリの比較

Notational Velocity

Notational Velocity

  • 標準的な UI の Mac 用 Simplenote クライアント
    • 上下2分割しかないのが個人的には不満
  • ノートの内容とタイトルは分離(JustNotes は本文の1行目がタイトル)
  • 明示的に Synchro する UI がない(ただちに保存されるらしいが feedback がない)
  • 検索と新しいノートの作成が同じアクションでできる
    • 操作の速さに対するこだわりが感じられる。説明を読んでもたぶん分かりにくいので実際に試してみてほしい。Google Chrome のアドレスバーのようなもの、と言えば少し分かりやすいか。
  • ノートの保存方法を選べる
    • plain text, HTML, RTF, DB
  • ノートの暗号化が可能

書いている途中で指定のフォントとは明らかに異なる見た目の文字が出てしまうのはやはり日本語フォントが指定不能だからだろうか。

現状ではタグがうまく同期できていないようだ。今後に期待。ただし書き終わったら捨てるのを前提にするのなら不要かもしれない。

JustNotes

JustNotes - notes application for your Mac

  • Mac 用 Simplenote クライアント
  • タイトルと本文の区別がない(1行目がタイトル)のですぐに書き始められるしすぐにタイトルを変更できる
  • 保存は sqlite
  • 全体に動作は機敏
  • かなり頻繁に synchro する
  • UI は Mac の標準的なものよりは Widget, Gadget 的
  • Markdown 記法対応(アプリ内でレンダリングできる)
  • Evernote の enex を import 可能

enex の import 機能はとても魅力的。メタデータを捨てずに Evernote からデータを移行するには enex が import できなければいけない。

ただしフォントを Monaco にしても正しく反映されていない気がする。

今後

基本的には

  • 保存して見返すものは Evernote
  • 他のサービスとの連携は Evernote
  • 構造化テキストを使ってがっつり書いてアウトプットするものは Simplenote
  • とにかく今すぐ書きたい場合は Simplenote

という形でいこうかと思っています。Evernote はやはり当初怖いなと思っていた通りデータが無為に溜まってしまいがちでちょっとまずい状況です。できるだけ早めの吐き出し、移行を目指して作業していこうと思います。

Simplenote での吐き出しはとにかく速いのが気に入っています。上に挙げた自分の目的とは違いますが、書いて捨てるという意味では付箋ソフトなどの代わりにも使えるくらい十分に速いです。しかも自動的に様々なデバイスで同期が取れるので、一昔前の「特定のデスクトップに束縛されてしまう付箋」よりずっと便利だと思います。実際、ちょっとしたメモをその場で書くにも使っちゃってます。Notational Velocity はその辺りのとにかく「(速く|早く)書く」ことにこだわって作られているのがいいですね。

*1 実質大差ない

*2 エディタでちゃんとハイライトさせながら書いているから。


2010-11-13 [長年日記]

_ Google Chrome に乗り換えてみた

これまでの環境

Mac を使っているんだけど、普段 Web ブラウザは

  1. Camino ( PPC Mac の常用 )
  2. Firefox ( PPC Mac の開発用 / Intel Mac の常用 )

を利用している。

Firefox はバージョンアップするたびに速くなっているとは思うのだが、開発者の視点で拡張を増やしてしまうためにどうしても重くなりがちなのと、自分の環境ではメモリ 2GB 積んでても 300MB 以上メモリを食い始めた段階で妙に Firefox が重くなってしまう。他に大きなアプリが動いていなくても。特に feed 消化のためにたくさんのタブを開いたり閉じたりしていると如実に重くなってしまので、300MB をメドに再起動するようにしている。

面倒だなと思いながらも、放置してると使いものにならなくなるので仕方ないと思って手作業をくり返し投入するのはやはり精神衛生上よろしくない。そこで試しにネットカフェなんかでたまに使う Google Chrome をそろそろ常用してみたらどうだろう、と重い腰を上げてあれこれ試してみた。

まずは素の Chrome

実は Chrome はインストールしてあるので使うのはすぐ使える。黙ってアップデートする Chrome 様なので、もちろん自分の環境の Chrome も最新である。

起動も十分速いしページの読み込みも速い。タブを開いたときの動作は Firefox の方が速い気がするけど、開き終わったタブ内での動作は速い。

ではカスタマイズします

とは言え、素の状態はあまりにつらい。自分の使い方で常用するには以下のものがあればよいみたい。

delicious

まぁ bookmarklet でもいいんだけど。

Delicious Bookmarks Extension (Beta) - Google Chrome 拡張機能ギャラリー

十分速いし、まったく問題なく使える。

AutoPagerize

さすがにこれがないとつらい。

AutoPagerize - Google Chrome 拡張機能ギャラリー

LDRize

Chrome Keyconfig - Google Chrome 拡張機能ギャラリー

Greasemonkey のときは mini-buffer とかいろいろ必要なんだけど、mini-buffer 使ってなかったのでこれだけで済むのは嬉しい。

popup block 対策

これないと死ぬ。LDRize だけでは o でウィンドウを開こうとしても popup window が殺されてしまううえに FLDR 側で block されたことが分からないので単純に pin がなくなってしまう。

LDR open in background tab for Greasemonkey

を入れて対処。

user css

Chrome Stylist - Google Chrome extension gallery

起動オプションでも user css を有効にできるようだが、@moz-document 相当の機能があるかどうかまで調べきれていない。上の Chrome Stylist では可能。

例えば twitter で勝手に表示される更新分の表示を切ったり、実はこまごまと user css を当てて使っているのでこれがないと結構困る。

Type ahead find

Type-ahead-find - Google Chrome 拡張機能ギャラリー

今は Firefox の方は find as you type って言うんだっけ。検索のアクションをわざわざ起こさなくてもキーを押すだけでリンクになっている文字から検索してくれる優れもの。

ただし日本語 UI のサイトだとほとんど意味を成さないので悲しくなることも。

user script はちょっと考える

自動起動してよいものは Greasemonkey のようにどんどんインストールできる。

GM_registerMenuCommand (だっけ)の必要なものは bookmarklet から起動することでなんとかなった。mongoose(旧shttpd) で localhost に geekmonkey 専用サーバを起こして対応。

自動起動はとりあえず Browse Lingon Files on SourceForge.net で。開発終了してるので今後のことはまた考える必要あり。

cf. あーありがち - Yet Another Geekmonkey

よく分かっていないもの - 設定ファイル

Mozilla で言うところの user.js のように使い回せる設定ファイルはないのだろうか。なんか同期をとるための拡張があるみたいだけど、完全に同期してほしいわけでもなく、必要なものだけ手動で揃える程度でよいのだ。

特に user css なんかはこの形になってると自分用の repository に置いておくだけでよいので非常に嬉しい。

とりあえず断念したもの - 外部エディタ

Firefox では Dafizilla ViewSourceWith :: Add-ons for Firefox を使っているんだけど、調べると Google Chrome はセキュリティポリシーで外部プロセスの起動は NG らしい。そこでエディタと通信するためのサーバを立てて Ajax でそいつと通信してエディタに textarea の内容を送り、編集完了後の内容を取り込むという非常に大げさな仕組みがあるらしい。

実は rack 版もあって仕組み的には面白いとは思うんだけど、自分の場合は普段 emacs-server は使ってないし、textarea に js が組み込んであってそいつがすでに ajax してるような場合(Simplenote の textarea など)はまだ安定動作しないみたい。

ということでこの日記は Firefox + ViewSourceWith で書いている。write より read の方が機会は圧倒的に多いので、潔く諦めてしまうことにした。

Tags: Google Web

2010-11-15 [長年日記]

_ RubyのJSONライブラリは1.4系でescape周りで変更があった

けど騒ぐことではなかった。

でも JS との相互運用考えると \u 形式の escape してた方がいいっぽい。待て続報。

RFC に may って書いてあったので問題解決というか問題は存在しなかった

Twitter / mala: 実装依存(できる、してもよい、しなくてもいい)でしょ ...

なるほど。

http://tools.ietf.org/html/rfc4627

Any character may be escaped. If the character is in the Basic Multilingual Plane (U+0000 through U+FFFF), then it may be represented as a six-character sequence: a reverse solidus, followed by the lowercase letter u, followed by four hexadecimal digits that encode the character's code point. The hexadecimal letters A though F can be upper or lowercase. So, for example, a string containing only a single reverse solidus character may be represented as "\u005C".

ということで、escape されるとは限りませんよ、で何の問題もないのであった。

背景とまとめ

REE ( Ruby 1.8.7 ) + json 1.4.6 の環境で Hash#to_json を使っていくらシリアライズしてやっても日本語がエスケープされずに出力されてしまう。最初のうちはあまりに自然で気づかなかったけど、いやいや、JSON は生で読めないはずだと思い出してからはそれが再現できずにずいぶんと悩んでしまった。※ 思い出したというか思い込んだっつーことでした。

json のバージョンを戻せば直るかと思ってやったら確かに期待する動作になったけれど、これもしかして Ruby 1.9 を期待して内部をいじって失敗したクチじゃねーのと思い直して実験してみた。

結果、Ruby のバージョンによらず全部同じ動作をした。

実験に利用したRuby

$ rvm list

rvm rubies

   rbx-1.0.1-20100603 [ ]
   ruby-1.8.7-p299 [ i386 ]
   ruby-1.9.2-head [ i386 ]

実験に利用したgem

  • json 1.2.4
  • json 1.4.6

実験結果 json 1.4.6

$ rvm ruby json14.rb

info: rbx-1.0.1-20100603: rubinius 1.0.1 (1.8.7 release 2010-06-03 JI) [i686-apple-darwin9.8.0]

{
  "key1": "あいう",
  "key2": "漢字"
}

info: ruby-1.8.7-p299: ruby 1.8.7 (2010-06-23 patchlevel 299) [i686-darwin9.8.0]

{
  "key1": "あいう",
  "key2": "漢字"
}

info: ruby-1.9.2-head: ruby 1.9.2p14 (2010-10-02 revision 29393) [i386-darwin9.8.0]

{
  "key1": "あいう",
  "key2": "漢字"
}

実験結果 json 1.2.4

$ rvm ruby json12.rb

info: rbx-1.0.1-20100603: rubinius 1.0.1 (1.8.7 release 2010-06-03 JI) [i686-apple-darwin9.8.0]

{
  "key1": "\u3042\u3044\u3046",
  "key2": "\u6f22\u5b57"
}

info: ruby-1.8.7-p299: ruby 1.8.7 (2010-06-23 patchlevel 299) [i686-darwin9.8.0]

{
  "key1": "\u3042\u3044\u3046",
  "key2": "\u6f22\u5b57"
}

info: ruby-1.9.2-head: ruby 1.9.2p14 (2010-10-02 revision 29393) [i386-darwin9.8.0]

{
  "key1": "\u3042\u3044\u3046",
  "key2": "\u6f22\u5b57"
}

ね? やっぱ変じゃない?変じゃないよ!

RFC のバージョンが上がって日本語もエスケープしなくてよくなったの?最初からescapeする「必要」はありませんでした。

また当たり前ですが parse はどちらの形式できても問題なくできました。

実験に使ったコード

json12.rb

#! /usr/bin/env ruby
# -*- coding: utf-8 -*-

require 'rubygems' unless defined? ::Gem
gem 'json', '< 1.4'
require 'json'

require File.dirname( __FILE__ ) + '/body'

json14.rb

#! /usr/bin/env ruby
# -*- coding: utf-8 -*-

require 'rubygems' unless defined? ::Gem
gem 'json', '>= 1.4'
require 'json'

require File.dirname( __FILE__ ) + '/body'

body.rb

# -*- coding: utf-8 -*-

jj ( { 'key1' => 'あいう',
       'key2' => '漢字'
     } )

余談

rvm list の platform の情報と実際に実行したときに出てくる情報が食い違ってるなぁ。

Tags: Ruby JSON

2010-11-16 [長年日記]

_ CentOSでREE使う時はパスに注意

前にも書いたけど

End Point Package Repository

で RH 系 Linux に REE を入れることができるんだけど、インストールパスが

/usr/local/bin/ruby

になるので cron などで使うときには PATH が通っていないことに注意が必要。まぁシステムの cron の場合はフルパスで書くだろうからあまり影響ないかもしれないけど。