【KtaiLibrary】バージョン0.4.1をリリースしました

Ktai Libraryの0.4.1をリリースしました。
今回はバグフィックスがメインになっています。

Lib3gkEmoji::emoji()で生成した絵文字をさらに自動絵文字変換を行っている際に文字化けしてしまう不具合がありました。これは emoji()の出力が既に対象キャリアの絵文字であるのに、その絵文字をdocomo絵文字と認識して再度変換をかけてしまっているためです。なので自 動絵文字変換処理の場合はemoji()ではdocomo絵文字を出力するように修正しました(以前のコードにはこの処理が入っていたけど絵文字コンバー ト手法を変更した際にそのコードを処分してしまったらしいです)。

また、Lib3gkCarrier::is_android()のラッパーメソッドがどこにも無いため追加しました。

あと、これは修正項目ではありませんが、docomoの比較的新しい機種で「SJISで拡張絵文字の数値文字参照形式(#xxxxx;)の絵文字を表示できない」現象を見つけました。P-01A等でこの現象が出ます。なのでSJISに関してはバイナリ絵文字を出力した方が良いようです。お気を付けください。

【KtaiLibrary】バージョン0.4.0公開!

お待たせしました、Ktai Libraryのバージョン0.4.0を公開いたします!

基本的にはバグフィックスと機種情報などデータ面の更新がメインだったのですが、一つだけ他の携帯向けライブラリ等には存在しない便利な機能を搭載しました。

高解像度携帯の登場で、画像の大きさがまちまちになって画面レイアウトが崩れる件については先に搭載しています画像のフィット機能で改善する事ができますが、これだけでは完全に解決することができませんでした。何故かというと「フォントの大きさ」もキャリア・機種によって異なるため、同じ文字幅で改行する事が困難だったからです。
そこで、キャリア・機種によって異なるフォントサイズの指定を肩代わりして同じように見せるような機能を搭載しました。簡単に仕組みを説明しますと、まず3キャリアでフォント使用の指定タグが異なるためそれを吸収し、またキャリア毎、あるいはSoftBankの高解像度携帯とdocomoのブラウザ2.0以降、それ以外での文字サイズの差をなくすために一工夫している感じです。

ただ、厳密にフォントの大きさを変える事はできません。携帯内が持っているフォントは固定幅でありアウトラインフォントではないため、1ピクセル単位でなめらかに大きさを変える事ができないからです(docomoのブラウザ2.0以降のみできる)。なので、おおむねそれに近い大きさの出力が可能な「small」「medium」「large」の3つの大きさが指定できます。それ以外の大きさも指定は可能ですが、そのまま出力するため同じ大きさに見えるかどうかは分かりません(というか見えないはず)。
それから本機能はXHTMLのみ有効です。HTMLでは機能しませんのでお気をつけください。

具体的にはこのように使用する事ができます。

■コントローラ(デフォルトのフォントサイズを変更する)


App::import('Controller', 'KtaiApp');
class KtaipagesController extends KtaiAppController {

	var $name = 'Ktaipages';
	var $uses = array();
	var $components = array('Ktai');
	var $helpers = array('Ktai');
	var $layout = 'ktai_default';

	//Sample ktai params
	//
	var $ktai = array(
		'use_img_emoji' => true,
		'input_encoding' => 'UTF8',
		'output_encoding' => 'UTF8',
		'use_xml' => true, 		//XHTMLに(重要)
		'default_font_size' => 'small', 	//デフォルトフォントサイズをsmallに
	);

	//Sample index action
	//
	function index(){
	}

}

■レイアウトファイル(ここが一番やりやすい)


<?php
if(Configure::read('debug') == 0){
	echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
}
?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
"http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<?php if($ktai->is_iphone()){ ?><meta name="viewport" content="width=260"><?php } ?>
<title><?php echo $title_for_layout; ?></title>
</head>
<body>
<?php $ktai->font(); //フォントサイズをデフォルトに指定 ?>
<?php if(!$ktai->is_ktai()){ ?><div style="width: 240px;"><?php } ?>
<?php echo $content_for_layout; ?>
<div align="center">
<hr width="90%" size="1" color="#333333" noshade>
(C)2009-2010 <a href="http://www.ecworks.jp/">ECWorks</a>
</div>
<?php if(!$ktai->is_ktai()){ ?></div><?php } ?>
<?php $ktai->fontend(); //フォントタグの終端 ?>
</body>
</html>

ktai-devのサンプルにもフォント指定がされていますので、お試しいただく事ができます。ただし、FireMobileSimulatorでは正しい文字サイズで表示する事ができませんので注意が必要です。

また、上記サンプルは完全にオプション値を省略していますが、フォント指定を行うタグを変更したり追加のスタイルを与える事もできます。詳しくは添付ドキュメントもしくはソースコード内のコメントを参照してください。

ちなみに本機能はフォントの大きさについてあまりこだわりのない方向けの機能ではないのですが、レイアウトにこだわる必要があるサイト、特に携帯ソーシャルサイトなどに便利にご利用いただけると思います(というか当方の案件で必要だったため制作しました(笑))。

Ktai Libraryの基本的な情報やダウンロードについては こちら をご覧ください。

【KtaiLibrary】Ktai Libraryはテストに力を入れています!

まもなく新バージョンのKtai Libraryがリリースされる予定ですが、いよいよ最終段階に突入しております。

今回のリリースは「安定・信頼性向上」バージョンとも言え、大きな追加機能はないものの、より安心してライブラリを導入していただけるよう開発を進めております。

その中でも特に力を入れているのが「テスト」です。
今まではサンプルサイトが正常に動作するかのみでテストを行っていましたが、それでは不十分ということでCakePHPによる「テストケース」を走らせることにしました。しかしながら、これで十分と満足をしてはいません。Ktai Libraryはさらなる信頼性・安全性を得るために、「えっ、そんなことまで!?」というくらいにテスト項目を増やし、強固なライブラリを目指して頑張っております。

そんなわけで今回は、Ktai Libraryの開発風景の一部を垣間見ていただければと思います。

■システム安全性の確保

まず最初に強化を図っている点としては「システムの安全性」です。
良いサイトを実現するためには、安全なシステム内で稼働させることが重要になります。それはソフトウェアのバグを取り除いたり、サーバに冗長性を持たせるなどの措置を講じることが一般的に行われていますが、KtaiLibraryは「ソフトウェア開発で通常行う安全性テスト」を遙かに凌駕するテストを行っています。

Ktai Libraryの衝突安全テスト

これは、Ktai Libraryが予測不能の方向から急激な圧力が加えられてもシステムの安全性が保たれているかをテストしている写真です。ご覧の通り乗用車はぺちゃんこですが、Ktai Libraryは100%動作を確認しております。

■過酷な環境下での動作テスト

サイトを運用するサーバ…特に携帯サイトを運営するサーバは、データセンターなどで厳重に管理されている事が望ましいですが、時としてやむを得ない状況下での運用も考えられます。自宅に回線をひいて行う場合もあるでしょうし、一時的に野外に設置しなければならない状況になるかもしれません。特に日本は地震大国。地震や津波といった緊急時でもしっかり運用できるような環境を整えるべきです。これは、携帯サイトの宿命であります。ハードウェア面だけでなく、ソフトウェア面からも追求するべきであり、携帯ならではといった過酷な状況下でも不具合無く動作できるようなソフトウェアを目指す必要があるでしょう。
こんな事もあろうかと、Ktai Libraryは先を見越して「もっとも過酷な環境下」でのテストを行っています。それは「宇宙」。宇宙ステーションに実験棟が出来たことは記憶に新しいかと思いますが、Ktai Libraryは、現在宇宙ステーション内でも動作テストが行われている最中です。

宇宙飛行士によるKtai libraryのテスト風景(プライバシー保護により宇宙飛行士に目線を入れております)

現在Ktai Libraryは、89,300時間(暫定値)の宇宙空間での運用に耐えており、世界記録を更新しております。近い将来宇宙空間にて携帯サイトを運用することになっても、Ktai Libraryなら大丈夫です!

■性能テストによるパフォーマンス評価

Ktai libraryは、信頼性・安全性ばかりではなく、性能についてもちゃんと目を向けております。
あらゆるパラメータについて分析を行い、最適なパフォーマンスが得られるようにチューニングを行っております。

Ktai Libraryの計測グラフ。負荷をかければかけるほど未知なるポテンシャルを秘めている

これはktai Libraryの性能を表すグラフですが、一般的な負荷の許容量を超えたあたりから特徴的な波形を描いております。この波形を分かりやすく例えるのなら「スーパーサイヤ人」の状態。限界を超えても動作し続けるKtai Libraryは、他のどんな携帯向けライブラリにも負けません!

ちなみに、このデータを取得する最中、Ktai Libraryが想定を遙かに超えたパワーを生み出したため、そのエネルギーバンドに飲み込まれ、一人の開発者を失いました。しかしながら、この尊い犠牲があってKtai Libraryはここまで進歩することが出来ました。この場を借りてご冥福をお祈りいたします。合掌。

犠牲者の告別式の様子。アーメン

今回ご紹介しているのはほんの一部分ですが、さらに凄いものを目指してECWorksは日夜励んでおります。
今後のKtai Libraryの進化を生暖かく見守っていただけますと幸いです。

※本日はエイプリールフールであり、一部事実と異なるウソの情報が含まれていることがありますがご了承ください。なお新バージョン(0.3)は4月内リリースを目指して鋭意開発中です!

【KtaiLibrary】バージョン0.2.3公開

緊急で申し訳ございませんが、0.2.3版をgithubにて公開します。
1日に2回バージョンアップが行われることになってしまい大変に申し訳ございません。

app_controller.php.ktai内のリダイレクト処理を、現在開発中の0.3から持ってきたのですが、誤って開発途中のコードを挿入してしまいました。これでも一応動くのですが、urlをarrayで渡した場合にエラーが出ます。

それ以外は変更がありませんので、0.2.2ではなくこちらをご利用いただきますようお願いします。

【KtaiLibrary】バージョン0.2.2公開

バージョン0.2.2を公開しました。
githubよりダウンロードできます。

今回は3つの不具合修正を施しました。

1つ目は、SoftBank携帯の新機種でアクセスした場合、エラーが出てしまう問題を対処しました。
これは、最新機種の機種情報がテーブルに存在しないためで、本来ならdefaultの設定を読みに行くのですが、SoftBankのテーブルにはデフォルトも存在していなかったためにエラーが発生していました。最新機種の情報を追加するとともに、デフォルトの情報も追加しました。

2つめは、最近のCakePHPのバージョンアップでsessionの挙動が変わってしまい、session定義のファイルを2度読みするようになったため、中で行っている関数定義で不具合が出る件を対処しました。関数部分は2度読みを行わない処理を入れました。

3つめは、かねてから問題の出ていたredirectを修正しました。これは次期バージョンの0.3で作成していたものを反映させたもので、ルーティング情報にあるカスタムの遷移と外部サイトを正しくリダイレクトできるようにしました。

0.3のリリースに合わせようかと思っていたのですが、深刻気味の3つの不具合を今回緊急でアップしました。既にライブラリをご使用の方は、少なくとも「lib3gk_machine.php」を本バージョンのものと差し替えてご使用いただきますようお願いします。

【追記】(2010/03/21)
バージョン0.2.3を公開しました。リダイレクト処理の修正が不完全だったため、こちらは使わないようにしてください。

【CakePHP】使用しない方が良い・できないメソッド等の一覧

CakePHP1.3もRC1となり、いよいよ1.2からの移行を本気で考えた方が良い時期に差し掛かってきました。

さて、1.2から1.3になることで、いくつかの新機能が搭載されていく(つまりメソッドが増える)のですが、反対に無くなっていくものもあるので注意が必要です。
たまたまTwitterでこれに関連する話題があったので、ついでなので調べてみました。
1.2.6のソースコードに書かれている「推奨しない」機能は次の通りです。

■cache() (basics.php)
「Cache::write()」を使用します。

■&Set::get() (set.php)
Setは静的に使うことが推奨されています。
このためget()で設定値を入手しようとするとワーニングが出ます。

■Xml::compose() (xml.php)
Xml::toString()のラッピングです。

■Email::_lineLength (email.php)
「Email::lineLength」の方を使用します。

■Model::getDisplayField() (model.php)
「Model::displayField」を直接参照します。

■Model::findAll() (model.php)
「Model::find(‘all’)」を使用します。

■Model::findCount() (model.php)
「Model::find(‘count’)」を使用します。

■Model::findAllThreaded() (model.php)
「Model::find(‘threaded’)」を使用します。

■Model::findNeighbors() (model.php)
「Model::find(‘neighbors’)」を使用します。

■View::renderElement() (view.php)
「View::element()」のラッピングです。

■XmlHelper::addNs() (helpers/xml.php)
「$this->xml->addNamespace()」のラッピングです。
内部的にはXMLクラスのインスタンスが生成されています。
※1.3RC1もまだ変更無くそのま ま残っています。どのように変更されるかは不明です。

■XmlHelper::removeNs() (helpers/xml.php)
「$this->xml->removeGlobalNamespace()」のラッピングです。
内部的にはXMLクラスのインスタンスが生成されています。
※1.3RC1もまだ変更無くそのまま残っています。どのように変更されるかは不明です。

これらは全て、1.2.6以前のバージョンで既に代替方法があります
今のうちに直しておきましょう。

ちなみに1.3では、このほかにJavaScriptヘルパーに書いていた内容の一部がHtmlヘルパーに移動するなど、いくつかの仕様変更がありますので、1.2→1.3のマイグレーションには下記の情報を参考にしましょう。

▼The Cookbook:11.1 1.2から1.3への移行ガイド
http://book.cakephp.org/ja/view/1561/Migrating-from-CakePHP-1-2-to-1-3

【追記】(2010/03/02)
すみません。モデル内のメソッドで若干記載漏れがありました。

■Model::bind() (model.php)
Model::bindModel()を使用します。

■Model::remove() (model.php)
Model::delete()のラッピングです。
1.3-devからは、使用するとワーニングが出ます。

■Model::del() (model.php)
Model::delete()のラッピングです。
1.3-devからは、使用するとワーニングが出ます。