ele_eel's diary

プログラムの事を少しと、デジタル系買物記。

QR モジュール for Kohana 3.0.x

必要に迫られたのでQR(2次元バーコード)のモジュールを作りました。
モジュールと言っても http://swetake.com/ さんが公開しているライブラリのラッパークラスです。


使い方の勉強のため Github.com にて公開しています。
https://github.com/ele-eel/kohana-QR

クラスライブラリはこちら
http://swetake.com/qr/

使い方

1. 上記サイトからPHPクラスライブラリをダウンロードして、vendor/qrcode_php ディレクトリに入れる。
2.クラスライブラリ qrcode.php のファイルパスを変更。

define('QRCODE_DATA_PATH', MODPATH.'kohana-qr/vendor/qrcode_php/qrcode_data');

3.bootstrap.php にて、QRモジュールを有効にする。

'kohana-qr' => MODPATH.'kohana-qr', // QR image module

4.サンプル Controller で画像表示を確認する。

http://サイトURL/qr?url=表示したいテキスト

(例) 

サンプルコントローラ Controller_QrUrl

単純に url というパラメータを画像に変換しています。このまま使用するとセキュリティ上好ましくないので、実際に使用する際には修正します。

<?php

class Controller_QrUrl extends Controller {

	public function action_encode()
	{
		try {
			//Edit the header content type.
			$this->request->headers['Content-Type'] = 'image/png';

			//configで画像の設定を行う
			$config = array(
				'version' => 6,    //set_qrcode_version()
				'error_correct' => 'H',    //set_qrcode_error_correct()
				'size' => 2,    //set_module_size()
				'quietzone' => 4,    //set_quietzone()
			);
			echo QR::factory($config)->render($_GET['url'], 'png');
		} catch(ErrorException $e) {
			echo '';
		}
	}
}

画像の分割機能 structureappend

ライブラリには(試験導入)として画像分割機能があって、それ用のメソッドも作ってみましたが、分割はできるものの読み込みエラーとなってしまいます。

国内Android端末への不安

間が空いてしまいました。

IS03に見る、Androidアップデートの不透明と不健全
http://japanese.engadget.com/2011/04/21/is03-android/

少し前の記事ですが、まさに自分の思っていることです。ドコモの端末ですが、3〜4月中に Android 2.2 へアップデート予定として発売された LYNX 3D SH-03C は、4月も最終週だというのにアップデート予告が全くされていないようです。REGZA phone T-01C も4〜5月にはアップデートと言われていますが、今のところ確かな発表はなし。いったいどうなっているのでしょう。仮に予定が遅れていても、はっきりと告知をすべきだと思います。

Android のバージョンによって動作の違いは、速さとか体感できるほどではないとしても、実際に 2.1 では使えないアプリもでています。ユーザーとしては待つ他ないのですが、利用者に対しての対応はちゃんとしてもらいたいものです。

T-01C REGZA Phone ソフトウェアアップデートのその後

1月31日にEdyアプリの提供、2月1日にspモードメールの更新、2月3日にソフトウェアアップデート、そして今日iDアプリの提供と、このところ次々とサービスが提供されています。今のところおさいふケータイは利用していないので、spモードとソフトウェアアップデートについて。

spモードメールがWiFiで利用可能に

とうとうWiFi解禁となりました。当日はちょうど提供されてすぐ、たぶん9時くらいに見つけたので即アップデートしました。一度3G回線でWiFi用のパスを設定し、アプリにそれを登録すれば利用可能となりました。やけにあっけないですね。で、気になる点は

  • 認証がパスだけでセキュリティ的には大丈夫なのか
  • 「マイアドレス」って?
  • スリープ復帰後のWiFi接続がうまく行かない場合は?

こんなところでしょうか。

「マイアドレス」とは自分のメールアドレスなんですが、spモードメールアプリを終了するとリセットされて、3G回線で取得し直さなければなりません。このような仕様にするということは「マイアドレス」を認証のために送信していると考えてよいですよねぇ。
Androidマーケットでの評価はさんざんな感じですが、その中でメールが遅延するケースがあるそうです。これはソフトウェアの問題ではなくて、サーバ側の不具合ではないでしょうか。ただ、自分の場合は遅延することもないです。

ソフトウェアップデートについて

実は当日になって公開されているのを知りました。修正内容が公式では「赤外線に関すること」のみという、何とも信じられないものになっていました。とりあえず入れてしまえ、ということですぐにインストールしました。すると、

  • 空きメモリが倍以上に。無駄なタスクをkillした後のメモリが約100MB → 210MB。どうなってんの
  • 満充電後に普通に使っていても、みるみるバッテリーが減るようになった
  • 全体的に軽くなった感じがしないでもない
  • ATOKもアップデートされて、文字入力が爆速になった

どう考えても赤外線関連だけじゃないだろ!と言いたいところですが、メモリが解放された一方、バッテリーの減り方がものすごいことになっています。

Dalvik Debug Monitorで観察

Dalvik Debug Monitorというツールが Android SDK にあります。これでスクリーンショットを撮ることができますが、本来はその名のとおりデバッグ用のツールです。Androidのシステムが吐き出すログをリアルタイムで見ることができます。スリープ中もモニターすることができます。バッテリーの事やspモードメールの件も気になったので、ちょっと観察してみました。

さらっと見た結果ですが、やはりスリープ中でもWiFi接続しているようです。バックグラウンドでデータをやり取りしているようなアプリをインストールしていると、常にWiFiを接続しようと試みています。

//ログの抜粋

02-08 00:**:**.***: INFO/BacklightManagerService(1082): ScreenOffReceiver
02-08 00:**:**.***: WARN/BackupManagerService(1082): dataChanged but no participant pkg='com.android.providers.settings' uid=10146
//ここでスリープ
02-08 00:**:**.***: DEBUG/WifiService(1082): ACTION_SCREEN_OFF
02-08 00:**:**.***: DEBUG/WifiService(1082): setting ACTION_DEVICE_IDLE timer for 900000ms

(省略)

//WiFi接続
02-08 00:**:**.***: VERBOSE/WifiStateTracker(1082): New network state is CONNECTED
02-08 00:**:**.***: VERBOSE/WifiStateTracker(1082): Static IP configuration succeeded
02-08 00:**:**.***: DEBUG/NetworkStateTracker(1082): setDetailed state, old =AUTHENTICATING and new state=CONNECTED
//スタティックなIPで接続...
02-08 00:**:**.***: VERBOSE/WifiStateTracker(1082): IP configuration: ipaddr 192.168.0.* gateway 192.168.0.* netmask 255.255.255.0 dns1 8.8.8.8 dns2 8.8.4.4 DHCP server 192.168.0.* lease 86400 seconds

(省略)

//裏で通信していそうなタスク
02-08 00:**:**.***: DEBUG/ActivityManager(1082): Uninstalling process **.*****.*****
02-08 00:**:**.***: DEBUG/******Receiver(28155): onReceive
02-08 00:**:**.***: INFO/******(28146): AutoSync help is available, autoSync = false

まずそうな箇所は伏字にしています。
これを見てアンインストールしたアプリはDropboxです。裏で通信しているみたいだし、SwiFTP を使い始めてから、ファイル共有系サービスは必要なくなりました。

ここでもう一つわかったのは、WiFiをOFFにしておけば接続していないようです。バッテリーを消耗したくない場合は、WiFiは必ずOFFにしておきましょう。もちろんAuto Syncなものも全てOFFに。


それにしてもDalvik Debug Monitorは見ているだけで面白いです。システムログ自体は本体にありますので、そのログを見れるようなアプリもあります。Android System Info はその他の情報も見れるのでおすすめ。

※スリープ時のWiFiについて、USBで接続しているため給電状態の場合です。充電していない場合や、3Gについては今のところ不明。

最近のKohanaについて少し

現在、Kohana 3系の最新バージョンは3.0.9となっています。並行して開発途中の3.1系もあり、こちらはRCとなっています。

これから使うとなると、やはり最新の3.1系で始めたほうがいいのではと思って3.1RCを見てみたら、どうやら一部モジュールの構造が変わっているようです。フォーラムにて、

Auth in 3.1
http://forum.kohanaframework.org/discussion/7726/auth-in-3.1/

Authモジュールに含まれていたORMドライバが別モジュールとして分けられたそうです。確かにORMを利用していない場合は、Authモジュール内にそのORMドライバは必要ないかもしれません。このスレッドでは賛否両論、なかなか興味深い議論が行われています。
それから他のあるスレッドでは、3.0.x用に作られた application は3.1.xにはそのまま流用できない、修正する必要があると公言されていました。


おそらくこういったドライバ系のクラスが別モジュールとなると思うので、ImageクラスのGDとか、Cacheモジュールの各ドライバとかが分割されそうな気がします。利用側としては、モジュールが増えるほどバージョン管理が面倒になりそうです。
※とはいえgithub.comで管理すれば、結構簡単なんですけど

必ずしも必要でないクラスを別モジュールとするのは Kohanaの開発者としては合理的なことかもしれませんが、利用しているユーザーにとってはアップデートにapplicationの修正が必要となり、歓迎できない面もあります。ここでのディレクトリ構造の変更という結構大きめな仕様変更は、タイミングが良くない気がしました。

Kohana 3.x と 2.x

Kohana3はやはり使いやすいです。構造がシンプルなので理解しやすい、拡張しやすい、そして重くない。「重くない」というのはまだ実践で利用していないので、「軽い」とは断言できません。そんな感じで 2.x 系も悪くはないですが、メンテされることもなさそうなので今後利用することはないでしょう。

では3.0.xと3.1では、現状でどちらを使って開発を始めるかは難しいところです。ただし3.1はまだRCなので、3.0.x系にせざるを得ないところではあります。

3.x系モジュールについて

モジュール一覧が github.com 上にあります。使い方は下記URLのREADMEを。
http://github.com/kolanos/kohana-universe

153+ Kohana 3.x Modules in 3 Commands

git clone git://github.com/kolanos/kohana-universe.git kohana-universe
cd kohana-universe
git submodule update --init

And to update them all...

git pull
git submodule update

Submodules indexes will be updated daily.


あと別途サイトが立ち上がっているようです。
kohana-modules.com http://kohana-modules.com/


これでモジュールについてはなんとかなりそう。

T-01C REGZA Phone の WiFi の追記と spモード

IP固定にしてもスリープ時に WiFi 切断問題が解消されているわけではなさそう。IP固定にしていると、WiFi の復帰が早いということのようです。時々接続失敗したりします。iPod touch は同じ環境でもすぐ接続復帰するので、この辺はOSアップデートで改善しないかなぁ。

WiFiスピードテスト比較

アップ・ダウン速度を測定するアプリが Android、iOS 共に同じものが提供されているので比べてみました。

回線環境: フレッツ光
無線LANルーター: Buffaloのもの
アプリ: SPEEDTEST.NET

down up
T-01C 約4Mbps 約3.3Mbps
iPod touch 4G 約14Mbps 約9Mbps

iPod touch はばらつきがあったため、3回計測した結果です。


Windows XPでの測定値はおおよそ iPod touch と同じで 14〜16Mbpsくらいです。( USENスピードテスト http://www.usen.com/speedtest/top.html にて計測)

この違いはWiFiのアクセスポイントの接続しやすさの差にも関係していそうです。省電力化ということで性能を押さえているのかなぁ。今のところ、T-01CのWiFiはあまりよろしくないようです。この辺はOSアップデ...(r
それぞれにどのようなチップが載っているのかは知りませんが、ハードの問題ではなくドライバ等で改善してもらえれば。Android 2.2 になると、処理速度向上による改善とかもあるんでしょうか。

spモードメールの WiFi 解禁

公式にspモードメールの WiFi 利用が2月1日から可能というアナウンスがあったようです。実現自体、あまり期待していなかったのでこれはうれしい。

これで WiMAX で完全運用できそうです。テザリングなし、速度も遅い3Gでパケット定額上限まで払うより WiMAX の方がどう考えても得な気がします。現状ではベストでしょう。1年後になったらどうかはわかりませんが。いよいよ理想のネット・モバイル環境が整いそうです。

T-01C REGZA Phone の WiFi の接続を維持するには

スリープ時にWiFiが切れる

REGZA Phone + WiMAX で快適モバイルなのですが、REGZA Phone はスリープ(モニター暗転)すると、その都度 WiFi が切れてしまいます。そして再開時にWiFiがアクセスポイントを探してしまい、かなりストレスが溜まります。
結構WiFiってルーターとの相性があったりするので、WM3500RとREGZA Phoneの相性なのかなと思っていたら、各所でも話題になっていました。

あるWiFiアプリを立ち上げておくとスリープ時にも切れない、みたいな簡易対処法がありましたが、まあいいやということでそのまま使用していました。

ふと、DNSGoogle のものに設定してみようと思い、その時なんとなく携帯のIPアドレスを固定にしてみました。すると、スリープ時の WiFi 切断が解消されているではないですか! スリープ復帰時に WiFi が接続されたままとなっています。


  1. 設定→ワイヤレス設定→ Wi-Fi 設定 にてMENUボタンを押す
  2. 「詳細設定」から「静的IPを使用する」にチェック
  3. あとはIPが被らないように設定する。

これだけです。

それからDNSGoogleが公開しているものに変更してあります。
プライマリ 8.8.8.8
セカンダリ 8.8.4.4

変更したところで、効果はあまり感じられませんので、特におすすめはしません。

ググッてみたら、2chで同じようなレスがされているのを見つけました。
加えて、SSIDをステルスにしているとうまくアクセスポイントを見つけられない、というレスもありました。WM3500R は前回のファームウェアアップデートで追加されたので、ステルスにしていたのですが、確かにそんな感じでした。

メリットとデメリット

WiFiが切れないというのが最大のメリットですが、ある意味デメリットになりそうです。
どうやら本当にスリープ時も切断されていない?ようで、その分バッテリーを消費してしまっているようです。WiFi はバッテリー食いなのでこれは痛い。WiFi を使用しない場合は、意識的にOFFにしておかなければなりませんね。

あとはLAN環境によって設定を変更しなければならないこと。WiMAX のような携帯できる WiFi なら問題ないのですが、出先で異なるLANにつなぐ場合は注意ですね。


これは発見かも?と思ったら、既に気づいていた人がいたのは残念でした。あと、これはルーターとの相性かもしれないので、もしこれを見た REGZA Phone 持ちの方は試してみてください。

T-01C REGZA Phone の使い心地

昨年の11月下旬頃にドコモショップに予約をして、12月17日の発売当日に入手することができませんでした。まあ年内には買えるかなくらいに思っていたら、どうやらキャンセルがでたようで、実際に購入できたのは22日。そんなこんなで使い始めてから、既に三週間程経ちました。ちょっと遅いですが、使い心地などを並べてみたいと思います。

恥ずかしながらホームを晒してみました。なんとか Android SDK からスクリーンショットを取れるようになりました。やはり2chブラウザRSSリーダーは必須。2chブラウザは、いくつか試してみて最終的には野良アプリの Tuboroidon に決めました。

Android 自体は触っていたので、基本的な使い方は全く問題なし。その他の便利なアプリなどもすぐに落としました。

各所でよく言われていますが、確かにT-01C のデフォルトのホームアプリのスクロールがスムーズではないような気がします。さらにカスタマイズもはっきりいって使いづらいので LauncherPro をいれています。ホームアプリを変更すると、スクリーンの移動など非常になめらか。やはりこれはデフォルトのアプリの出来が良くないということでしょう。こういったものもアップデートで改善していってもらえればいいのですが。

spモードメールアプリはひどい

Androidマーケットでも酷評されてますが、spモードメールのアプリは作りがひどい。メール送受信が WiFi 接続だとできないというのは不便だが、いろいろ考慮すると仕方ない気もします。WiFi時にはSMSで知らせてくれるので、受信と送信の時だけ3Gにしています。
だけど重い・ダサいのはまずい。spモードなんて docomo.ne.jp のメールを使いたいがために315円も払っている*1わけだし、そもそもメーラーもまともに開発できないなんて、国内大手企業として恥ずかしいんじゃないでしょうか。(聞くところによると、このメーラーはドコモの子会社の開発らしいのですが)
最悪なのは、4つくらいあるスキンのデザイン。・・・よくもこのレベルのUI・デザインを出したものです、というくらいひどい。

とりあえずの感想

その他に関しては国内メーカーの Android 携帯として特に可もなく不可もなく。電話帳の移動は赤外線で一発。液晶は綺麗だし、結構スピーカーがいい音なります。3つの物理ボタンはヘタリそうですね。横についている電源ボタンとか音量ボタンはにぎった手でさわってしまうこともしばしば。ハードカバーを付けたら、いい感じに隠れてくれました。素のままだと本体裏がカメラとかの凹凸で結構持ちにくい感があるので、カバーかケースは必須だと思います。

待ちに待った Android 携帯だったので、我慢できずに買ってはみたものの、結果としてはまだ早かったといわざるを得ません。残念ながら、国内メーカーはハードの面でもソフトの面でも世界の流れについていけていないという感があります。デュアルコアだの、2.3 だの、LTEだの、もう次期モデルの話が続々出ている中、いったいこれからスマートフォン業界はどうなるのでしょうか。

あとはOSのアップデート待ち

やはり 2.1 と 2.2 の差はあるので、早いとこアップデートを。ホームアプリとかデフォルトのままでいいし、余計なことは一切しなくていいです。早くしないと本当に 2.3 が出てきてしまうよ! 周回遅れとかバカにされる前に速く!

*1: (追記) spモードはメールのためだけではありませんでした。いわばプロバイダのようなもので、契約しない場合はパケット定額はおろか、ネットに繋ぐことすらできません