いいめもおこづかい帳、データベースの刷新

 ものすごい今さらですけど、いいめもおこづかい帳のデータベースを、sqlite2からsqlite3に移行させました。
ずっとやりたかったことなのですが、動いているシステムはさわるなの方針があるし、データベースの更新となるとどこに影響が出るか分ったもんじゃないので、そう簡単には移行できなくて今までひっぱっていたのです。

sqlite2の理由

 たしか、作った当時、windowsでRubyからアクセスできるsqlite3ライブラリが見あたらなかったのです。今考えると、railsで動いているんだから、動かないこともなかったと思うのですけど。
当時は気軽にネットワークアクセスできない事情があったので、ファイルベースでWindowsで動く環境となるとsqlite2、という状態でした。

更新の理由

sqlite2では性能上の限界に達したせいです。
sqlite2はデータを非圧縮で格納しているらしく、データ量が増えるとファイルサイズが線形に増えていきます。
で、一定のサイズを超えると、たまにinsertに100秒くらいかかるようになって、実用的に使えなくなる現象が発生していました。
どのくらいが限界かは環境にもよるみたいですけど、うちの場合、データベースのファイルサイズが49MBを超えるとこの現象が発生し始めて、おこづかい帳が応答しませんでした、ごめんなさい、とエントリーを書く羽目に陥っていました。
定期的にスパムメールを(手作業で!)削除したり、一年以上使っていない方のデータを削除させていただいたりして対処していたのですが、いつまでもそんなことやってられないので、大規模改修に着手した次第です。
ちなみに、sqlite2から3に移行するに当って実験してみたグラフ。10000bytesくらいのテキストを繰り返し書き込んで、データ量とアクセス時間がどうなるか測定してみたものです。
sqlite2vs3.PNG
左軸がファイルサイズ、右軸がアクセス時間。横軸は書き込んだ件数。
縦軸に貼り付いているのがsqlite2のファイルサイズで、横軸に貼り付いているのがsqlite3のファイルサイズ。
赤いのがsqlite2での応答時間で、青いのがsqlite3でのアクセス時間です。
#ええ。これが異常に重い処理の正体です。

工夫

 生のデータをつっこんで動かしてみないと何が起こるかなんて分ったもんじゃないので、新バージョンのテストは、生のおこづかい帳システムの裏で一緒に動かしてテストしました。
railsみたいにデバッグモードを作って、デバッグモードの時はメールを外部に送信しないようにします。
本番用はm@ememo.jp、テスト用がtest@ememo.jpで動いているので、/etc/aliasesにこんなふうに書くと、ユーザーさんのメールを、本番システムとテスト用システムで、両方で見ることが出来ます。

m:|"/var/mailapp/app.rb", test@ememo.jp
#実際の@は半角です。

この状態で3日くらい動かして、ログを眺めて挙動の違いを確認しました。

実際やってみると、いいかげんなSQLのせいでデータの順番が異なってしまっている現象がみつかって、テストして正解だったな、と思いました。

この仕組みは普段開発する上でもとっても便利なので、早く作っておけばよかったです。

ブログパーツの作り方まとめ

 いいめもプロジェクト久しぶりのリリースとして、【いいめもウォーキング】というのを開発中です。

 携帯電話からの情報蓄積にこだわってきたいいめもとしては、自動でメールを送ってくれる仕組みはとても興味深く見ています。

F906i のウォーキングチェッカー(万歩計)を使ってみる : 僕は発展途上技術者


とはいえ、歩数の管理は携帯だけで完結していますので、じゃあブログパーツにしますか、ということになりました。

テケトーに引数を受け取ってHTMLを生成するCGIは書けますが、ブログパーツってどうするの?と思って調べながら作ったので、簡単にまとめです。

ブログパーツの仕組み

 たいていのブログでは、

<script src="hogehoge.js"></script>

というようなコードを書くことで、外部にあるJavaScriptを実行することができます。


<script src="http://example.com/hogehoge.js"></script>

と書けば、他のサーバにあるJavaScriptを実行することもできます。

すると、上のhogehoge.jsが

document.write('いいめもウォーキング');

となっていれば、結局、

<script src="http://example.com/hogehoge.js"></script>

の位置に「いいめもウォーキング」が差し込まれることになるわけです。

つまり、HTMLとCSSでブログパーツを書いて、それをdocument.writeで出してあげればいいことになります。


ユーザーごとに表示を変える

 このままだと、すべてのユーザーが同じコードを表示することになってしまいます。

ブログパーツとしては、自分のサイトの情報を表示してもらいたい。

そのためには、何らかの形で、ユーザーIDを渡してもらう必要があります。

そこで、PHPなりRubyなりPerlなり、言語はなんだっていいので、引数でユーザーIDを受け取って、そのユーザー向けのブログパーツコードを返すCGIを用意すれば、ユーザーごとに違うデータを返すことができるようになります。

「それって簡単に他人の情報を見られちゃうよね?認証とかなくていいの?」と一瞬思ったのですけど、考えてみたらブログ上に表示された時点でだれでも見られる情報ですから、認証は不要です。



ちなみにいいめもウォーキングでは、あえてCGIを使いませんでした

サーバー上に、各ユーザー向けのブログパーツがずらりと置いてあります。



hogehoge-000001.js

hogehoge-000002.js

hogehoge-000003.js


ユーザーさんには、hogehoge-(ユーザーID).jsを呼び出してもらいます。

動的に生成しなくても、ユーザーさんから歩数計データが送られてきたタイミングでブログパーツが丸ごと更新される、ので、あとは静的データで十分、という考え方です。

キャッシュとか考えなくていいので、とっても楽ちんですが、デザインが変わった際、動的にデータが差し替わらないのが難点といえば難点ですね。


文字コードについて

 当初、文字化けするので文字コードごとにブログパーツを用意していたのですが。

<script type="text/javascript" charset="UTF-8" src="http://example.com/hogehoge.js"></script>



という具合にして文字コードを指定してあげることができるみたいです。こうすると、一つのコードでたいていのブログに対応させることができます。


今の悩み

 ブログによってサイドバーのサイズが違うのです。



ブログパーツの作り方:横幅は何ピクセル?:WebClip – ウェブのニュースと Second Life (セカンドライフ) – CNET Japan
というような話もあって、実際千差万別。

こちらは小サイズが横幅160ピクセル。大サイズ横幅424がピクセル。

このように複数選べると理想的。もし企業でやるならこのほうがいいかもしれない。ブログの本文でコメントつきで紹介してもらうときなど、大サイズを掲載してもらえるかもしれない。



ショート/トール/グランデ(S/M/L)とサイズ別のブログパーツを生成することは難しくないですが、そうするしかないのかなぁ。何かもうちょっといい手はないものか。

煩悩イレイザー公開

いいめもプロジェクトの年末期間限定イベント「煩悩イレイザー」を公開しました。



もう間もなく今年も終わりですが、「わー!これやってねー!」「こんなこともしたかった」という煩悩をみんなで送っていただこう、というイベントです。送っていたいた煩悩は、煩悩イレイザーがきっと消去してくれます。



よろしければお試しくださいませ。

bonnou1.gif

ひとりで作るネットサービス

田口元の「ひとりで作るネットサービス」探訪:
【番外編】開発合宿で出会った3人が作ったお小遣い帳



(^^)v 掲載していただきました。



「ひとりで作るネットサービス」は、以前から「何で僕を取材に来ないんだ!」←何にも公開してなかったら当たり前です

と思っていた企画なので、ちょっと嬉しいです。



とはいえこれも、使っていただいているユーザーさんや、一緒にやっていただいているお二人、OBIIの皆様のバックアップがあってのこと。皆様には大変感謝しております。

いいめもダイエットリリース!

本日から、いいめも新サービス「いいめもダイエット」が公開になりました。



食べたものを全部記録する「レコーディングダイエット」をやりたい人のためのサービスです。



前回に引き続き、ITMediaさんに取り上げていただきました。ありがたやありがたや。



ぜひぜひ使ってみて感想を聞かせてくださいませ。


第6回OBIIミーティング「いいめも&わらたま」

第6回OBIIミーティング「いいめも&わらたま」で、北村さんから、いいめものお話しをさせていただきます。当然僕も行きます。



と同時に新機能発表なので、実は今必死こいて制作中っ!



9月28日とのことなので、4/28のOBII合宿から、ちょうど半年ですね。正直忙しすぎて感慨に浸っている余裕がないのですが、まあ、一つの区切りということで、これまでとこれからについてお話しができればよいな、と思っております。



FPNのサイトから申し込みができますので、興味のある方はぜひお越しくださいませ。



#この記事は、しばらくの間常に先頭に表示されます。

携帯電話専門TV局Qlick.TV

携帯電話専門TV局Qlick.TV(クリック ドット ティービー)さんの取材を受けてきました。
SANY0039.JPG
取材といいつつ、ケータイ向けストリーミング放送の制作会社に行く機会なんてそうそうないので、僕らはその内部に興味津々。
「ページビューは?」などとこっちから質問しまくりでした(笑)
来週火曜日からケータイ魂で見られるそうですので、ドコモ携帯持っている方は、ぜひぜひ見てくださいませ。

コーヒー100円事件

やっちゃった….orz
いいめもで、「間違ったときどうするの?」というユーザーさんがたくさんいたので、暫定対策として、マイナスの金額の入力を認めよう、ということになりました。
で、このとき、ユーザーさんにマイナスを入力してもらうと、-(マイナス記号)じゃなくて、「-」とか「―」とか、そういう文字をマイナスのつもりで使っちゃう人もいるよね、と思ったので、
正規表現で
/([-‐-─━―]?[0-90-9,.,.]+)/を探して価格とする、というふうにしました。
起こったこと:「コーヒー100円」と書いたら「コーヒ」が「-100円」になった。
…そりゃあそうだよねorz
「コーヒー」の危険性に気づかなかった自分の責任です。
こういうの、会社だとコード/デザインレビューでつぶせるのだけれど。できなくなって始めて分かるありがたみですね。勉強になります。

いいめも おこづかい帳公開

すっかり連絡が遅くなってしまったのですが。
[[OBII合宿:http://www.mogya.com/blog/2007/04/obii.html]]で「つくります!」と宣言した「いいめも」、第一弾「いいめも おこづかい帳」を公開することができました。
おかげさまで各方面で取り上げていただき、正直大きすぎる反響にビビッています。[[OBII:http://obii.jp]]恐るべし、です。
-[[携帯メールをお小遣い帳に──「いいめも」 – ITmedia Biz.ID:http://www.itmedia.co.jp/bizid/articles/0708/28/news065.html]]
-[[いいめも (テクノラティ「注目の話題」ブログ):http://www.technorati.jp/topics/iimemo.html]]
とにかく出す、途中で投げ出さない、ということを大切にした結果、当初の目論見からは大幅に機能を削ってあります。
正直なところ、公開する前は「たったそれだけ?」といわれるかと思っていたのですが、むしろ逆に、機能が少ないことがわかりやすさにつながって好評いただいているようです。
とはいえ、さすがに減らしすぎだろ、と思う面もないではなく。ユーザーさんからも「間違って書いたらどうするの?」「昔のメモを見るためにはどうするの?」と言ったご意見をいただいています。
#どっちもできません(汗)
さすがに何とかしないとね。