アーカイブ

2010 年 6 月 のアーカイブ

Xperia vs iPhone3GS

2010 年 6 月 21 日 Jiro コメントはありません

Xperia購入しました。
Android OS 1.6なので、躊躇していたのですが、現在国内で一番売れているとしたら、やはりXperiaなのかなと。
10月ごろにはOSアップデートで2.1にはなるようです。
はやくFroyoになってほしいのですが、とりあえず勉強のため作成したソフトが動作する実機がほしかったので。

購入費用はSoftBankのように端末代金の割戻しがないので、少しかかります。
端末は24回分割としました。月々1600円程度。ポイントがあまっていたので、月々の端末代金に充当するようにしました。
しばらくは端末代金がタダです。頭金は故障時に修理代が安くなるサービスに入ると無料にしてくれました。
しかし、このサービス月々315円で、最大5千円の支払で故障時新品と交換してくれるのですが、ペイできるか微妙なところです。

まずは、Xperiaと今まで使用していたiPhone 3GSとの比較をしてみたいと思います。とりあえず使用して気づいたこと。

1.タッチスクリーンの反応

これは、Android勉強会で色々な機種のタッチスクリーン反応を機械的に調査した結果を見ましたが、まさにそのとおり。iPhoneの反応がすばらしすぎる気がします。iPhoneに慣れているとXperiaでは誤動作頻発です。

まずスクロールがタッチになってしまう現象があります。Twitterクライアントを使っていると、スクロールを使いまくるのですがこれがタッチと誤判断されて、すぐに別画面が開いてしまいます。XperiaのTVCFでスクロールしている画面がありますが、タッチでは何も動作しない状況でやっているんではないかと疑ってしまいますね。

感覚的には画面にタッチしたらしばらくまって指をスライドしないといけない感じです。または、しっかり指を押し付けてからうんこらしょっとスクロールかな。iPhoneだと、あまり考えずに軽くスライドでOK何ですけどね。これはソフトの改良で直るものではない気がします。

スクロールだけでなく、タッチ位置の判定も微妙にずれる感があります。ソフトウェアキーボードで英字などをタッチする場合iPhoneよりミスタッチが増えました。まあiPhoneの判定がすごいのですが。このあたりはハード、ソフト両面で今後の改良が待たれます。

こういうUIの部分は、軽く見てはいけないと思います。ハードを使い始めて最初の印象になりますから、いかに優れたソフトが有ったとしてもUIのせいで使う気をなくす場合が多いと思います。

カテゴリー: Android タグ: , ,

cakePHP1.3再入門#4 Ktaiライブラリと振分け

2010 年 6 月 2 日 Jiro コメントはありません

pearのNet_UserAgent_Mobileを使用して、携帯とPCのアクセスを振り分ける目論見でしたが、携帯用のページ作成には振り分けだけでなくいろいろな機能が必要だと勉強すればするほど理解しました。(某辞任表明首相風)
そういうわけでcakePHPにも利用しやすいKtaiライブラリの導入を決めました。

ECWorks Blogからダウンロードできます。

インストールと言うか、ダウンロードしたファイルを解凍してcakePHPの対象フォルダにコピーするだけです。
テンプのreadmeをよく読めば設置は難しくないですね。

ただ、今回は携帯からのアクセスとPCからのアクセスで異なるViewを表示したいことと、アドレスを分けたくなかったので
ちょっと工夫が必要でした。

/app/controllersにコピーしたAppControllerの中に必要な設定をコピーします。

ここで、コントローラ内にbeforeRender()を追加します。

    function beforeRender() {
    parent::beforeRender();

    if (
        in_array('Ktai', $this->components) &&
        $this->Ktai->is_ktai()
        ) {
            // Viewのパスへの書き換え
            $view_paths = App::path('views');
            $result = array_search(ROOT.DS.APP_DIR.DS.'views'.DS, $view_paths);
            if ($result !== false) {
                $view_paths[$result] = ROOT.DS.APP_DIR.DS.'views_mobile'.DS;
            }
            App::build(array('views' => $view_paths), true);
        }
    }

同じクラス内で

    var $components = array('Ktai');

としているのでif文のコンポーネンツ判断はいらないですね。
参考にしたサイトの記述ではここのif文がarray_key_existsになってて動かなかったのですが
$componentsは[0]->”Ktai”のようになっていてKeyサーチではtrueになりませんでした。

ここでちょっとはまりました。in_arrayならうまく動作しました。

この記述でPCからなら/app/views/以下のレイアウトとテンプレートを携帯からなら
/app/views_mobile/を見に行ってくれます。

/app以下のAppControllerを変更しただけなので、トップページの場合はこのAppControllerを継承した
PagesControllerを/app/controllers/に作成します。

あとは/app/views_mobileとそれ以下の必要なフォルダを作成してdefault.ctp home.ctpなどを携帯専用として作成すればOKです。

とりあえずiMode HTMLシュミレータではうまく動作しました。

カテゴリー: cakePHP タグ: ,

cakePHP1.3再入門#3 ドキュメントルートとトップページ

2010 年 6 月 1 日 Jiro コメントはありません

さてさて、トップページを表示させることは出来たのですが、基本的にトップページが他のページと少し違うレイアウトだったり、ただのインデックスページってこともありますから静的なページを表示することもありえます。

MVCでデータベースに紐づいたページに必ずなるとは限りませんよね。一部新しいお知らせとかが入るくらいで。
今回構築しているシステムでは、トップページはPC用はシステムの案内としようか、それとも直接サービスが使えるようにするか迷ってます。そんな感じなので、まずルーティングについて再確認しておこうと思います。

最初の読込み

http://localhost/ktai/というurlでアクセスしたら、/index.phpをまず読み込みますが、ここに他のソースが読込まれます。

	require APP_DIR . DS . WEBROOT_DIR . DS . 'index.php';

appディレクトリのwebrootディレクトリですから、/app/webroot/index.phpを読み込みます。
このなかで/cake/bootstrap.phpをインクルードしている。

エントリポイントについてはここの説明がよくわかる。

このbootstrap.phpからConfigure クラスをインスタンス化している。このときに/app/config/core.phpと/app/config/bootstrap.phpが呼ばれている。
ああ、おんなじ名前が多くて混乱する。
そのあと/cake/dispacher.phpを読んでいる。ここでbaseurlなどを決めているようだ。
これに/app/config/route.phpが絡んでいる。

	Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));

pagesコントローラのディスプレイactionでhomeを呼べとなっている。
やっと、ここまで来た。

これはデフォルトでは/cake/libs/controller/pages_controller.phpのなかのdisplayメソッドが使われる。
このように固定されていると中々不自由です。

/app/config/route.phpを書き換えてcontrollerやaction などを書き換える方法もあります。
また呼ばれるテンプレートのhome.ctpの中でレイアウト変更も出来ますね。

home.ctp

<?php
    $this->layout = "main";
    $this->pageTitle = "携帯用タイトル";
?>

/app/views/layoutsにmain.ctpを作っておけばOKです。home.ctpでレイアウトだけ指定して何も書かなければmain.ctpの静的なページになりますね。

認証などでbeforeFilterを加えたりする場合は、/cake/libsにあるpages_controller.phpを
/app/controller/にコピーして書き換えると自由に出来ます。

カテゴリー: cakePHP タグ: ,

cakePHP1.3再入門#2 pear

2010 年 6 月 1 日 Jiro コメントはありません

前回までで、とりあえずトップページが表示されました。
このあとMVCにしたがってデータベースとその表示、更新などのページを作っていくわけですが、今回はちょっと横道にそれてPHPの便利な道具としてpearを導入することにしました。

恥ずかしい話ですが実はpearって何。それっておいしいの?状態でした。

携帯用のwebを作成するためにアクセスしてきた対象が携帯かPCかを振り分ける方法を探していてnet_userAgent_mobileというライブラリを見つけまして、どうもこれがpearというもののひとつであると言うことがわかりました。

pearはPHPの機能を拡張するライブラリということまでわかりました。ww

さて、ローカルのテスト環境にはXAMPPを導入した際にpearは入っているようです。
その環境でNet_userAgent_mobileのインストールに取り掛かります。
pearと言うコマンドでインストールできると言うことまでわかったのでコマンドプロンプトを開いて

C:\xampp/phpに移動します。(xamppのインストール方法によって変わります。)
このディレクトリにpearコマンドがありますので
pear install net_useragent_mobile
とタイプすればダウンロードとインストールを勝手にやってくれます。

これでテストできそうなので以下のようなテストphpを書いてみました。
mobiletest.php

<?php
require_once('Net/UserAgent/Mobile.php'); 

$agent = Net_UserAgent_Mobile::singleton(); 

if($agent->isDoCoMo()){
    echo "docomo" . "<br>";
    echo $agent->getModel()."<br>";
    echo $agent->getSerialNumber()."<br>";
}elseif($agent->isSoftbank()){
  echo "Softbank";
}elseif($agent->isEZweb()){
  echo "au";
}elseif($agent->isWillcom()){
  echo "WILLCOM";
}else{
  echo "PC";
}
?>

この状態でxamppのapacheを起動させてブラウザからhttp://localhost/mobiletest.phpを呼び出すと
「PC」と表示されました。無事動いているようです。次にiモード HTMLシュミレータ2を起動して同様のURLにアクセスすると
iモード HTML シュミレータ

このように表示されました。ユーザーエージェントなどの判別もうまくいっているようです。
ただシリアル番号は取れていないようですが、この部分は後で要検討です。

auやsoftbankもシュミレータでテストするべきですが、とりあえず実機でテストしてみたいのでレンタルサーバーにuploadする方法を検討します。

今回はお名前ドットコムのSD共用サーバーを借りています。
説明を見るとpearはインストールされていないようなので手動でセットしないといけません。

いろいろ調べてみるとpear.phpとNet_UserAgent_Mobileの必要なファイルだけアップロードしても出来るようですが他の機能も必要になりそうなのですべてあげておくことにします。

ブラウザからインストールする方法としてgo-pear.phpと言うソースをアップロードしてインストールする方法がありましたので
テストしてみましたがどうもうまくいきません?

SD共用サーバーはSSHやTelnetが使えないのでFTPに頼るわけですが、アップロード先がドメインを複数含むので以下のようになっています。
analyze
backup
files
hoge.com
hogehoge.com
ブラウザからアクセスできるのはhoge.comとhogehoge.com以下ですのでpearはfiles以下のブラウザでアクセスできない領域におくことにします。
hoge.comの直下にgo-pear.phpをアップロードしてブラウザでhttp://hoge.com/go-pear.phpを叩くとインストール画面が出てきます。
(go-pear.phpはぐぐるとソースが入手できます。)
ここでInstallation prefixのところに何を入れるかで悩みました。
/home/アカウント名/pearなどと解説してるところもあるのですが、SD共用サーバーではどうすればよいか。

仕方ないのでpearをインストールする前に先ほどのmobiletest.phpをアップしてエラー吐かせて見ました。
すると
/export/sdxx/www/jp/r/e/gmoserver/n/m/サーバーアカウントID/hoge.com/mobiletest.php
にエラーがあるとでました。(一部伏字にしてますので、ご自分の環境で確認してください)
これで参照位置がわかりました。ただしgo-pearでインストールする際には/files/hoge/以下にしようと思うのでパーミッションを777にしておかないといけないようです。

面倒になってきたのでWindows環境でインストールしているディレクトリを/files/hoge/PEARにすべてアップロードしました。
さて、pearへのパスが通っていないので、このままでは先ほどのmobiletest.phpは動きません。
include_pathと言う奴を指定しなくちゃいけません。
.htaccessでパスを通す方法が書いてあったので設置して
php_value include_path “.:/export/sdxx/www/jp/r/e/gmoserver/m/n/サーバーアカウントID/files/hoge/PEAR”
としてみましたが、動きません。.htaccessでは動かないこともあるとのこと。サーバー側の仕様でしょうね。

仕方ないのでmobiletest.phpに一行加えました。

    ini_set('include_path', ".://export/sdxx/www/jp/r/e/gmoserver/m/n/サーバーアカウントID/files/hoge/PEAR");

これをrequire_onceの前に加えたら、なんとか無事動作しました。

結構面倒でしたが、これでpear持つ変えるようになりました。

つぎは振り分けを行うためにcakePHPのルーティングについて、勉強しなおします。
これも結構ややこしやーーーー。

カテゴリー: cakePHP タグ: , ,
Get Adobe Flash playerPlugin by wpburn.com wordpress themes

Bad Behavior has blocked 10 access attempts in the last 7 days.