pecl_http を Mac OS X Leopard のApache で使うために大切なこと

PEARPECL のインストールは適当にぐぐればおk。
PHP 5.2 以上の場合には go-pear.phar を使うことに注意。


sudo pecl install pecl_http のあとに
php.ini の extension_dir と extension を編集。


php -m することでモジュールの読み込みを確認できるが、
Apache httpd の再起動時にエラーログが吐かれる。

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20060613/http.so' - (null) in Unknown on line 0


10.5: Install tips for PHP's pecl_http on 64-bit Intel Macs - Mac OS X Hints
に書かれているとおり /System/Library/LaunchDaemons/org.apache.httpd.plist を修正することで
Apache は32bit モードで起動され、pecl_http をロードできるようになる。

さくらVPS と Linode を比較する

さくらインターネットの田中邦裕様が 格安の低価格VPSを比較する - さくらインターネット創業日記 というエントリを書かれていたので、
(さくらVPS への移行を検討していたのにうっかり継続契約してしまった)Linode との比較をしてみる。

プラン名さくらのVPSLinode
5121G1.5G4G8G51276810241536204840968GB
初期費用(円)02,9804,9809,98019,980$0$0$0$0$0$0$0
月額(円)9801,4801,9803,9807,980$19.95$29.95$39.95$59.95$79.95$159.95$319.95
年払い割引1か月分割引10% discount(2年契約で15% discount)
試用期間2週間記載なし
メモリ容量512MB1GB1.5GB4GB8GB512MB768MB1GB1.5GB2GB4GB8GB
HDD容量20GB30GB50GB120GB240GB16GB24GB32GB48GB64GB128GB256GB
SWAP設定
リモート
コンソール
固定IPv4
v6××
追加IP×
月額$1.00
IP逆引き
仮想化プラットフォームKVM完全仮想化Xen完全仮想化
OSCentOS
Debian
Ubuntu
Fedora
FreeBSD×
現在のキャンペーン

その他試用期間中は2Mbps制限
試用期間中はOP25Bあり
プランごとに転送量の上限あり
メモリ、HDD、転送量の上限は料金を支払うことで「個別に」追加、増設可能

Linode では最大でメモリ20GB までのプランを用意しているが、さくらVPS にあわせた形とする。

プラン名さくらのVPSLinode
5121G1.5G4G8G51276810241536204840968GB
年間の利用額(円)10,78019,26026,76053,760107,760$215.46$323.46$431.46$647.46$863.46$1727.46$3455.46
メモリ1MBあたり(円)21.018.817.413.113.2$0.42$0.42$0.42$0.42$0.42$0.42$0.42
HDD 1GBあたり(円)539.0642.0535.2448.0449.0$13.46$13.47$13.48$13.48$13.49$13.49$13.49

見て分かるとおり、上位プランを使ってもメモリやHDD の単価はほぼ変わらない。
ライトユーザからすると安心して下位プランを選択できるが、上位プランを選ぶ人は……。


また、私の契約している512 プランで unixbench を行ったところ、スコアは1223.8だった。
※ スコアに大きな影響は与えていないと思うが、いくつかのサービスが稼動している。
さくらVPS(980)は1200〜1500 なので、ほぼ同じくらいということにしておこう。


コストパフォーマンスではさくらVPS、 柔軟なカスタマイズや8GB を超えるメモリが必要ならばLinode と言ったところだろうか。
※ 単純なマシンスペック以外の付加サービスについては、さくらVPS 側を調べていないので比較していない点に注意。
http://twitter.com/#!/kunihirotanaka/status/42367374313271296 とのご質問をいただいたので
さくらVPS についても簡単ではあるが調査を行って比較した。
# 5分探してなかった機能、サービスは×としているので、誤っている場合はご指摘いただきたい。


プラン名さくらのVPSLinode
HDD, メモリの増設×
リサイズ(運用開始後のプラン移行)×
ネームサーバ
(別途契約)
ディスククローン×
IP フェイルオーバー×
バックアップサービス×
(有償)

その他、Linode では Linode - Cloud Servers といった機能やサービスを利用できる。
# ネームサーバはドメイン取得代行業者から無償で提供されていることが多いので特に困らないが、一応。


表だけで比較すると、さくらVPSェ……となってしまうかもしれないが、
ターゲットとするユーザ層や、価格が違うので仕方ないという面もある(さくらVPS は格安が売りなのだ)。
# ディスククローンやIP フェイルオーバーを必要とするユーザが果たしてどれだけいるだろうか。
# 高可用性を求められる小中規模の商用利用ならばLinode のほうがよいのかもしれない。
ただし、柔軟なスペックの変更やバックアップサービス(専用サーバにはある)は
間違いなくユーザの利便性の向上につながるので、ぜひご検討いただきたい。


また、Linode は海外にデータセンタがある点などについても留意しなければならない。
この点については、 のFAQ や、
2ch を参考にしていただきたい。


さて、そもそも私がLinode を利用し始めた理由は、当時の日本には海外と比較して
まともなVPS を提供する企業がなかったためである。
が、私のようなライトユーザにとっては、さくらVPS は十分に検討対象となり得るし、
欲しい機能があればTwitter を使って社長に直接意見を言うことで「やりましょう!」と
なるかもしれない。
今後のさくらVPS のさらなる機能の拡張、サービスの展開に期待したい。





最後にこっそりと、referral code とreferral URL を載せておく。
code : 4375366bd5f28af0004c7e7d82f5607cd7df1993
URL : http://www.linode.com/?r=4375366bd5f28af0004c7e7d82f5607cd7df1993

モバイルSuica が有効期限切れで使えなくなったときの対処法

先日、札幌のファミリーマートモバイルSuica を使って買い物をしようとしたところ、
「カード有効期限異常 エラーコード:69」というエラーに遭遇して、家まで財布を取りに帰る羽目になった。


Google で検索してみると、以下のようなページに突き当たった。

しかたなく家に帰って調べてみるとSuicaを半年間使わないと勝手にロックがかかって、
チャージも使うことも出来なくなってしまうようです。


そんなこと どこにも書いてなかったような気がします(おいらが気付かなかっただけか?)。


ロックを解除してもらうには近くのJRの駅に持って行かないとダメみたい。


モバイルSuicaが使えなくなってた!:オヤジの日記かも:So-netブログ


札幌に住んでいる身としては、ロックの解除のためにJR東日本管轄の駅まで行くのは
正直厳しいものがあったので、ほかに解除する方法がないのかモバイルSuica コールセンター(048-645-7007)に
連絡をして確認してみたので、結果を以下にまとめる。


まず、モバイルSuica に有効期限があることについて、どこに記載されているのか教えてもらった。

Suica電子マネーが利用できない場合)
第6条 利用者には、以下の各号に定める場合においては、第4条に基づくご利用ができないことをあらかじめご承認いただきます。

(snip)

(5) ICカード等の発行事業者の定めるものに加えて、Suica電子マネーの利用又はSuica電子マネーのチャージのいずれかの取扱いを行った日の翌日を起算として、当社の定める一定期間これらの取り扱いが行われなかった場合。ただし、発行者が別に定めるところにより発行する記名人式のICカード等に限ります。

(snip)

JR東日本:Suica>Suicaに関する約款について>東日本旅客鉄道株式会社Suica電子マネー取扱規則

と、これだけである。一定期間が具体的に半年であるとか
利用できなくなった場合にどうすればいいのかということについては記されていない。


で、本題の解除方法だが、具体的に以下のとおりである。
基本的にはICチップの情報を書き換える操作を行うことでロックを解除できる。

  • (Kitaca が利用できる)改札を通る

ロックされている状態でも改札を通過することはできるらしい。
JR東日本の改札の場合は、有人での対応となるため
みどりの窓口などでICチップの情報の書き換えをしてもらう。

  • クレジットカードによるチャージを行う
  • コールセンターに連絡して、再発行してもらう

連絡をした翌日5時にICチップのデータの書き換えが行われるのでアプリから操作を行う


最後に、コールセンターで対応してくださった方に、これらの対処方法を
ホームページに載せていただけるようお願いしておいたので、
もしかしたらそのうち公式サイトでも公開されるかもしれない。

Google Chrome で導入した拡張一覧

Firefox が重くなってきたので、普段使い用にGoogle Chrome を導入してみた。
素のままじゃとても使えないので、導入した拡張をまとめてみる。
Firebug は入れていない。必要なときはFirefox を起動する。

dat 落ちしたスレをmimizun などから探して自動変換

広告ブロック

Amazon のCD ジャケット画像をダウンロード

AutoPagerize

Gmail の広告削除、フッタ削除、選択メールのハイライト

livedoor Reader で全文取得

Migemo サーバ(後述のMigemoFindInPage に必要)

Exif 表示

livedoor Reader で、fc2 などリファラをチェックしてるサイトの画像表示

Google Mail 新着チェック

livedoor Reader から開いたページをバックグラウンドのタブ化

livedoor Reader からはてなブックマーク

Migemo でページ内検索

livedoor Reader のフィードにはてなブックマーク数とlivedoor クリップ数を表示

マウスジェスチャ(右クリックメニューの表示がダブルクリックになる)
# Chrome Gestures のMac 版はうまく動作しない

スクロールを滑らかにする(気がする)

任意のサイトにユーザスタイルシート適用

最近閉じたタブ、関連するタブの表示

はてなブックマークに関するいろいろ

ニコニコ動画の動画ダウンロード

EC2 カスタマイズAMI 関連コマンドまとめ

AMI の作成*1

ec2-bundle-vol -d /mnt --privatekey /mnt/pk-XXXXX.pem --cert /mnt/cert-XXXXX.pem --user <アカウントナンバー>

AMI のアップロード

ec2-upload-bundle --bucket <バケット名>*2 --manifest image.manifest.xml --access-key <アクセスキー> --secret-key <シークレットキー>

AMI の登録

ec2-register <バケット名>/image.manifest.xml

AMI の登録解除

ec2-deregister 

AMI の削除

ec2-delete-bundle --bucket <バケット名> --manifest image.manifest.xml --access-key <アクセスキー> --secret-key <シークレットキー>

*1:事前にpem ファイルを/mnt に転送

*2:foo/bar/baz のように階層化可能

mobirc とmod_proxy を連携させる

mobirc を使うためにport 5678 を空けるのはださいので
mod_proxy と組み合わせるための備忘録。


mod_proxy と組み合わせたときの問題点として以下が挙がった。

  • 環境変数で%ENV{REMOTE_ADDR} が取れない
  • ローカルホストのApache 経由なので、$req->address が127.0.0.1 となる

ぐぐっても情報が出ないのだが、私の環境だけなのだろうか。


仕方ないのでApache のRequestHeader を使ってmobirc にケータイのリモートアドレスを渡し、
それを使ってIP アドレスチェックをするようにした。


httpd.conf

RequestHeader set X_FORWARDED_FOR %{Remote_Addr}e

ProxyPass / http://127.0.0.1:5678/
ProxyPassReverse / http://127.0.0.1:5678/


mobirc/extlib/HTTP/Session/State/MobileAttributeID.pm

if ($self->check_ip) {
#    my $ip = $ENV{REMOTE_ADDR} || $req->address || die "cannot get address";
    my @forwarded_for = $req->headers->header('X_FORWARDED_FOR');
    my $ip = $forwarded_for[1] || $req->address || die "cannot get address";
    if (!$ma->isa_cidr($ip)) {
        die "SECURITY: invalid ip($ip, $ma, $user_id)";
    }
}

mobirc/lib/App/Mobirc/Web/C/Account.pm

# if ($ma->isa_cidr(req->address)) {
my @forwarded_for = req->headers->header('X_FORWARDED_FOR');
if ($ma->isa_cidr($forwarded_for[1])) {
    session->set('authorized', 1);
    return redirect('/');
} else {
    return redirect('/account/login?invalid_cidr=1');
}


mobirc/extlib/HTTP/Session/State/MobileAgentID.pm にも類似の箇所があったのだが
こちらは修正しなくても今のところ問題が出ていないので放置している。


これでIP アドレスのチェックをパスできるが、チャンネルに入ろうとすると

Can't locate object method "is_foma" via package "HTTP::MobileAttribute::Agent::DoCoMo" at /path/to/mobirc/lib/App/Mobirc/Pictogram.pm line 53.

と怒られる。自分しか使わないので


mobirc/lib/App/Mobirc/Pictogram.pm

if ($ma->is_docomo) {
#    if ($ma->is_foma) {
        'I.uni'
#    } else {
#        'I.sjis'
#    }


ちなみに、FOMA から利用するときはURL にguid=ON を付けなくてはいけないのも注意。

mod_rewrite とmod_asis を使って任意のステータスコードを返す

あるディレクトリ以下に限り、存在しないファイルにリクエストされたときに
404 ではなく204 を返す必要があったので以下のような設定をした。


.htaccess の場合

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ /path/to/204.asis


httpd.conf の場合

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteRule ^/path/to/.*$ /path/to/204.asis


204.asis

Status: 204 No Content
Content-type: text/html


mod_asisを使うと、ステータスコードも含めてテキストに書いたままの内容で
ブラウザにレスポンスが送信される。
204.asis の下に改行を二つ入れているのはそのため。


はじめはmod_asis の存在を知らず以下のようなCGI をでっち上げていた。

204.cgi

#!/usr/bin/perl

use strict;
print "Status: 204 No Content\n";
print "Content-Type: text/plain\n\n";


__END__


IRC でアドバイスをくれたhasegaw blog の中の人に感謝(2回目)。