Apelog

DoCoMo
http://imutl.ezweb.ne.jp/cgi2001/utl_menu.cgi
AU
http://docomo.ne.jp/cp/mailsetst.cgi
SoftBank
http://elinks.softbank.ne.jp/selfcare

継続は力だという事を頭に叩き込みながら開発に関するもの以外にも、読んだ本や音楽(CD)なども交えてやっていくということで。

携帯のUIであった話

とある携帯サイトの入力フォームは以下のようになっていた。

【入力1】→【入力2】→【入力3】→【確認】→【完了】

特におかしい様には思わないがアクセス解析を見ると確認から完了へのコンバージョン率が低い。

確認画面まで行っておいて完了しないのはおかしい、という事で再度見直してみると「もしかして確認ページなのに完了ページだと思っているのではないか?」という話が挙がり、試しに確認ページの上部にも完了ページへのボタンを設置したところコンバージョン率が上がったという話。

確かに確認ページまでの遷移が長く確認ページの上部には「この内容で良ければ完了してください」と書いてあるものの目立っていないので逆に紛らわしくなっていた。

PCサイトでもたまに見かけるが携帯サイトの方が表示領域が少ない分、利用者への通知には気をつけた方がいい。

このケースは最終的にページ上部にまだ完了していない旨を目立つように表記した。

Web開発では複数ユーザーでディレクトリを共有管理したいケースが良くある、そういった場合の設定方法。

/var/www/htmlfoo, bar, apacheの3ユーザーで管理するとする、設定環境はCentOS5。

設定方法

管理用グループ(webadmin)を作成

# /usr/sbin/groupadd webadmin

管理用グループ(webadmin)に3ユーザー追加。追加時に他のグループにも所属させる場合は同時に指定する事。特にwheelユーザーからしかrootになれない状態で間違ってwheelから外してしまうと悲惨な事に。

# /usr/sbin/usermod -G webadmin foo
# /usr/sbin/usermod -G webadmin bar
# /usr/sbin/usermod -G webadmin,apache apache

対象ディレクトリをwebadminが操作できるようにグループを指定し書き込み権限を与える。

# chgrp webadmin /var/www/html
# chmod g+w /var/www/html

このままだとファイルを生成した際に所有権がそれぞれのユーザーになってしまうので、グループ権限でファイルを作成するようにする。

# chmod g+s /var/www/html

以上でグループで管理出来る環境になる。

複数設定する場合はfindでディレクトリだけ検索した結果に対して変更すると楽。

find . -type d -print | xargs chmod g+w

Zend_Mailでメールする際のFromヘッダ作成時にメールアドレスのみ渡して名前を渡さない場合

"" <foo@bar.com>

の様な形で生成されてしまう。

この状態でDoCoMo宛にメール送信を行うとDoCoMo端末から返信が出来なかった(確認したのはD905とPROSOLID μ)

ダブルクォーテーションで囲われた所が無ければ返信が出来たのでFromヘッダ生成メソッド部を変更。

public function setFrom($email, $name = '')
{
    if ($this->_from === null) {
        $email = strtr($email,"\r\n\t",'???');
        $this->_from = $email;

        $this->_storeHeader('From', $email, true);
    } else {
        /**
         * Error
         */
    }
    return $this;
}

MySQLではインデックスを使用しても30%以上のレコードにアクセスしなければならない時インデックスは使用されない。が、LIMIT句があればインデックスを使用する。

MySQL では利用可能な場合でもインデックスが使用されない場合があることに注意してください。この一例として、インデックスの使用によって、MySQL がテーブルの 30% を超えるレコードにアクセスする必要が生じる場合が挙げられます(この場合は、必要なシークが大幅に減少するため、テーブルスキャンのほうが高速になる可能性が高くなります)。 ただしこのクエリに、レコードの一部のみを取り出す LIMITが使用されている場合、結果で返される少数のレコードを迅速に検索できるため、MySQL はインデックスを使用します。

6.4.5. MySQLにおけるインデックスの使用

例えば’2007-01-01 < register_date < 2007-12-31′な数百万件データがありregister_dateにインデックスを張っているものとして、以下のSQLの条件の日付を進めていくと急にインデックスが効かなくなる。

SELECT * FROM `foo` WHERE `register_date` < '2007-01-01'

知っていればどうという事はないものの何も考えず実装してしまうとデータ量が増えると予想外の時間が掛ってしまう時があるかもしれない。データ量を増やしたテストとexplainは重要。

データ量が増えるなら差分のみを対象に出来る設計にした方が良いと思う。