2011年1月 のアーカイブ


電子書籍用ガジェットでは、指で横にクイッとすると、ご丁寧に紙のページがめくれるアニメーション付きでページ送りされたりして、正直なところ、萎える。
紙の機能を電子化するとしても、もっと他に必要な機能があるでしょうに、という気分。
でも、文句言っても始まらないので、現時点であったら嬉しいな、と思う機能をあげてみた。

ペラペラめくって目についたところを読みたい

雑誌なんかではよくやること。ペラペラめくる動作の再現はしなくても良いので、縮小したページを画面中に大量に並べたり、写真やイラストだけのインデックス表示をしたり、人名、地名、商品名などの固有名詞をタグクラウドのように見せてくれたら、拾い読みしやすいと思う。
紙はランダムアクセス出来ないのだから、その部分でアドバンテージを見せられる機能なんじゃないかと思う。

読んでいるページを把握したい

今読んでいるところがどの辺か、前に読んだ時はどの辺だったか、紙の場合には、厚みなど感覚的な部分で記憶していることがある。全体のうちのどの辺かを表示するようにしたり、読み始め、読み終わりのページを履歴で記憶しておいてくれると助かる。

スクラップができるようにしたい

マニュアルなどの場合には、必要になる部分は全体のうちの一部だけのことが多い。複数ある資料で、必要なページだけ抜き出してスクラップすることはよくやっている。そういった感じで必要な部分をスクラップ出来ると便利。紙ではページ単位になったりするが、電子書籍であればTumblr
のように画像やテキストの一部だけの引用を、元資料へのリンクとともにまとめることが出来る。

思いついたこと3つあげてみた。すでに実装してある機能もあるかも知れない。電子書籍といっても主に雑誌や資料が主な想定で、文芸関係だとまた違って来るとは思う。紙では出来ない機能で便利に使えるようになれば、それはそれで良いわけなので、新しい機能を持ったガジェットが登場するのは楽しみだ。


WebARENA CLOUD9にLighttpd+PHPをインストール その1の続き。

FastCGIのインストール

Lighttpdは、PHPを外部のCGIとして実行する。それにFastCGIを使用する。
ソースを、http://www.fastcgi.com/dist/からダウンロードする。インストールした時点での最新版は、2.4.0。
サーバ上で以下の手順を実施。

#tar -zxvf fcgi-2.4.0.tar.gz
#cd fcgi-2.4.0
#./configure
#make
#make install

FastCGIはこれで終わり。

PHPのインストール

せっかくなのでPHPも最新版をソースからインストールした。
CentOSでのインストールなのでhttp://redmine.lighttpd.net/wiki/lighttpd/TutorialLighttpdAndPHP#Othersを参照する。
ソースを、http://www.php.net/downloads.phpからダウンロードする。インストールした時点での最新版は、5.3.5。
サーバ上で以下の手順を実施。

#tar -zxvf php-5.3.5.tar.gz
#cd php-5.3.5
#./configure \
  --enable-mbstring \
  --with-pear
#make
#make install

configureのパラメータが異なっているが、PHP5.3以降では、cgi-phpがデフォルトで作成される。–disable-cgiオプションでFastCGIを有効にする設定となる。
訂正:どうも–disable-cgiがあると、php-cgiが作成されない模様。ちょっと混乱しているので後で調べて書き直す
それ以前のPHPの場合には、http://redmine.lighttpd.net/wiki/lighttpd/TutorialLighttpdAndPHP#Othersの例に沿う。
参考:http://www.php.net/manual/ja/install.unix.lighttpd-14.php

Lighttpdの設定

PHP関連の設定は、http://redmine.lighttpd.net/wiki/lighttpd/TutorialLighttpdAndPHP#Configurationを参照する。

#vi /etc/lighttpd/conf.d/fastcgi.conf
fastcgi.server = ( ".php" => ((
                     "bin-path" => "/usr/bin/php-cgi",
                     "socket" => "/tmp/php.socket"
                 )))

#vi /etc/lighttpd/modules.conf
include "conf.d/fastcgi.conf" ← #でコメントアウトされているので、コメントアウトをはずす。

ここまでの設定で、ひとまずPHPも動作する、はず。

#service lighttpd restart

軽いように感じる

試しにwordpressをインストールしてみたが、apacheで動作させた時よりもプロセスとメモリの使用に関して軽く動作するようだ。apacheの時はアクセスが増えると、子プロセスが増え、メモリも使用するようになっていたが、Lighttpdでは、あまりメモリの使用量は増えない。FastCGIがLighttpdに変わって処理を捌く構成がapacheのそれよりも効率が良いようだ。


AmazonのASINを入力すると商品画像などを表示するサンプルは、WebARENA CLOUD9にLighttpd+PHPをインストールしてみる実験も兼ねていたので、インストール時のメモを。

参考サイト

Lighttpdのサイトを主に参考にした。ドキュメントは英文だけど、そんなにややこしくないので大丈夫。

Lighttpdのインストール

ソースを、http://www.lighttpd.net/download/からダウンロードする。インストールした時点での最新版は、1.4.28。
サーバ上で以下の手順を実施。

#tar -zxvf lighttpd-1.4.28.tar.gz
#cd lighttpd-1.4.28
#./configure \
  --without-zlib \
  --without-bzip2 \
  --disable-ipv6
#make
#make install

インストール後の設定は、http://redmine.lighttpd.net/wiki/lighttpd/InstallFromSource#Init-scriptの項目に沿って実施する。
サーバがCentOSなので

#sed -e 's/FOO/lighttpd/g' doc/initscripts/rc.lighttpd.redhat > /etc/init.d/lighttpd
#chmod a+rx /etc/init.d/lighttpd
#cp -p doc/initscripts/sysconfig.lighttpd /etc/sysconfig/lighttpd
#mkdir -p /etc/lighttpd
#cp -R doc/config/conf.d/ doc/config/*.conf doc/config/vhosts.d/ /etc/lighttpd/

#chkconfig lighttpd on

起動スクリプト中のサーバのパスが /usr/sbin/lighttpd で、実際のインストールパスが /usr/local/sbin/lighttpd なので、シンボリックリンクを作成。

#ln -s /usr/local/sbin/lighttpd /usr/sbin/lighttpd

Lighttpdの設定

後でFastCGIやPHPはインストールするとして、Lighttpdがうまく動くかを確認。色々な仕組みを一緒に使う時は、ひとつひとつ動くことを確認しながら進めると意外とはまらない。設定については、http://redmine.lighttpd.net/wiki/lighttpd/TutorialConfigurationで大まかな設定例があり、それに沿えば良い。

#vi /etc/lighttpd/lighttpd.conf
var.log_root    = "/var/log/httpd" ←apacheと同じ場所に設定

server.port = 80 ←サーバのポート。apacheがポート80でまだ動いているような場合は別のポートにする必要がある

server.username  = "nobody"  ←デフォルトで lighttp になっているが、ユーザもグループも作っていないので nobody にした
server.groupname = "nobody"

server.document-root = "/var/www/public_html" ←デフォルトのドキュメントルートを設定

実行ユーザをnobodyにしたので、ログディレクトリ /var/log/httpd がnobodyでアクセス出来るよう設定する。

#chown nobody:nobody /var/log/httpd

ここまでの設定でひとまずLighttpdは動く、はず。

#service lighttpd start

apacheのようにデフォルトページが用意されていないので、最初は何も表示されない。自前でindex.htmlを作ってドキュメントルートにアップして確認する。

 
WebARENA CLOUD9にLighttpd+PHPをインストール その2へ続く。


Amazon Web サービスを使って、ASINを指定して商品画像などの情報を引き出して表示するサンプルを作ってみた。

http://lighttpd.dgdk.net/AmazonItemJson/index.html

参考にしたページは、以下の2つ。

ItemLookupのページでは、認証に関しての記述がなく、例にある通りにやってみてもうまくいかなくて困った。認証機能は後で必須になった機能のようで、それについては別資料ということらしい。
RESTのサンプルは順序だって説明してあって、手順は少し長いけれど問題なく実装できた。

サンプルのページが別ドメインにあるのは、契約がもうすぐ切れるWebARENA CLOUD9で、試しにLighttpd+PHPを動かしてみようかと思ったから。Apache+PHPよりも軽いらしいということで、少し動作が遅めなサーバでどのくらい変わるかなぁという実験も兼ねている。ベンチマークなどは実施していないけれど、実際に動かしてみてメモリの消費量は少なくなっているのは確か。

こちらのインストールメモもあるのだけど、それはまた別途で記事にしようと思う。


ちょっとした理由で、bashでImageMagickを使った画像縮小バッチ処理を書いた。
perlのImage::Magickを使うのがポピュラーなんだろうけれど、マシンにImageMagickは入れてあるが、Image::Magickモジュールは無いという微妙な状況だったのでbashで書いてみた。ソースは以下のとおり。

#!/bin/bash

size=$(identify $1 | cut -d " " -f 3)
width=$(echo $size | cut -d "x" -f 1)
height=$(echo $size | cut -d "x" -f 2)
if [ $width -gt $height ]; then
  if [ $width -gt 200 ]; then
    ratio=$((20000/$width))%
  else
    ratio=100%
  fi
else
  if [ $height -gt 200 ]; then
    ratio=$((20000/$height))%
  else
    ratio=100%
  fi
fi
convert -geometry $ratio -quality 80 $1 $2
exit 0

resize.sh なんて名前で保存して、実行権限つけて
./resize.sh 縮小前の画像ファイル名 縮小後の画像ファイル名
といった具合で実行する。
上記のソースの例では、縦横大きい方が最大200ピクセルになるように縮小される。ロジックはよくあるもの。

ImageMagickを使うことはたまにあるけれど、大抵はperl上から呼び出している。今回はperlを使えないという一風変わった制限の中での対処となった。画像処理は比較的、負荷が高めなので、バッチで回せるところは出来るだけバッチにしておきたい所。
それだけのためにシェルからperlを呼び出すのであれば、今回のようにシェルの中だけで対応することも可能というサンプル、になっているかな?