モバイル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回目)。

FastestCSV がヤクい件

Ruby の標準添付CSV パーサが遅いというのは有名な話なので
これまでは主にFasterCSV を使っていました。


FasterCSV のベンチマーク - *Trace Output* にあるとおり、標準のパーサと比較して

結果

csv を parse して行数を数えるだけのスクリプト(後述)の実行時間を GNU time で測定しました。

対象 結果
ruby 1.8.4 + 標準添付の csv 12分26秒56
ruby 1.8.4 + FasterCSV 0.1.9 2分34秒92

FasterCSV は標準添付の csv パーサの 5〜6 倍速いようです。

と、それなりに満足していたのですが、とあるPHP で書かれた「CSV を解析してほげほげする処理」を
Ruby で書き直してみたところ、10倍以上の時間が掛かるようになってしまいました。
# 4万行↑のCSV のため、数十秒以上の開きが……。


そこで、先ほどのベンチマークにコメントされていた

moonwolf 2006/06/02 14:28
flexを使ってFastestCSVという拡張ライブラリを書いてみました。
Pythonの2〜3倍くらいの実行時間にまで早くなりましたw


http://d.hatena.ne.jp/miyamuko/20060301#c1149226101

id:moonwolf 氏のFastestCSV を試してみることに。


ちょっと見つけにくかったですが、RAA - csvscan にありました。
CSVScan が正式名称なのでしょうか。

インストールはREADME.ja を見ればすぐに分かるので割愛。


試してみた結果は非常に満足。PHP とほぼ同じくらいの速度で解析されているようです。


使い方が標準のCSV やFasterCSV と少しだけ違うので気をつけないといけないですね。

require "csvscan"   # ライブラリのロード

open(ARGV.shift) {|io|
   CSVScan.scan(io) {|row|
      p row
   }
}