検索
カレンダー
2006年11月
« 10月   12月 »
 1234
567891011
12131415161718
19202122232425
2627282930  
ブログメニュー
Amazon検索
キーワード:

画面キャプチャソフト

2006年11月27日

私はたまに画面のキャプチャを撮る必要に迫られることがあります。
客先でのテスト結果を記録するためだとか、取り扱い説明書を作るためだとか、テストで不具合が出たときの証拠だとか、理由はさまざまですが。
WindowsですとCtrl+PrintScreenキーでもかまわないのですが、キャプチャ→ペイントブラシ起動→トリミング→保存という手順が面倒 ですし、ブラウザに表示している内容をキャプチャしたい場合などは手動でスクロールして結合するという面倒な作業が発生したりします。
そこで私がお奨めするソフトは「キャプラ」 です。
このソフトを使えば、画面キャプチャと保存がクリックだけでできますし、トリミングも簡単です。しかも、設定によってはスクロールも自動でやってくれます。
もしお気に入りのキャプチャソフトがなければ、一度試してみてはいかがでしょうか。

シニア向けのデザイン

2006年11月17日

私はWebニュースの巡回を日課にしていますが、ふとしたことで興味深いブログの記事を見つけました。
団塊~シニア層向けのWeb設計 やっちゃいけない10のUI
そこからリンクをたどって役に立ちそうなページをいくつか見つけました。
シニアはログインでつまづく?!
シニア向けウェブサイト構築のための10のポイント
シニア向けウェブサイトの色
私自身は基本的に業務システムや中年より若い方を対象にしたサイトばかりに携わってきたので、目から鱗の思いでした。
今後は高齢化社会になっていと言われていますし「シニア向けデザイン論」みたいなものも活発になるのかもしれません。

現状では、デザイナさんから挙がってくるデザインを見ると、表示幅やフォントサイズが固定されているものが多いように思います。
表示幅やフォントを固定したほうがレイアウトが固定できデザインしやすいのでしょうが、これではブラウザの機能で文字を大きく表示している方は読めなくなってしまうのではないでしょうか。そういう意味ではFlashも同じです。

そこで私がお勧めしたいのが、スタイルシートでpxやpt単位で指定している部分を全てem単位で指定するというものです。
emという単位は、1emを英字「M」の高さとして定義されています。
指定の仕方は
p {
    margin: 0.5em;
}
というような感じです。
このように指定すればブラウザの設定で表示する文字の大きさを変えても、それに合わせてマージン幅などが変更されるので、レイアウトの崩れを防止することができます。

ただ、この方法には一つ問題があります。
ボタンなどの画像が文字の大きさに連動しないということです。画像の幅や高さをem単位で指定すればある程度解決できるのですが、無理やり拡大や縮小するので画像が汚くなる可能性があります。
この問題は今後、SVGなどのベクタ形式の画像が普通にブラウザに表示できるようになれば解決できるはずだと考えています。
早くIEが対応してくれればいいのですが…。

アクセス中の人数をカウントする

2006年11月14日

現在サイトを見ている人の人数を数えたいという要求がありました。

HTTPは基本的に状態を持たないステートレスなものなので、厳密に言えばアクセス中の人数をカウントすることは不可能です。そこで(かなり曖昧ですが)、セッションが有効であればアクセス中とすることにします。

PHPにおけるセッションはデフォルトではファイルに保存されています(session.save_handlerで変更可能です)。1セッション につき1ファイルになり、無効なセッションは削除されていきます。そこでセッションファイルが保存されているディレクトリにあるファイルの数をアクセス中 の人数とすることとしました。ただし、同一サーバ上の他のサイトでもPHPを動かしていてセッションを使っている場合、そのままではセッションファイルが 保存されるディレクトリも共通になります。そこでセッションを開始する前に、対象のサイト独自でセッションファイルを保存するディレクトリを指定します。 スクリプト内で指定するには、以下のようにsession_save_path関数を使用します。これはsession_start関数の前に呼び出す必 要があります。

(例)
session_save_path("session_dir");
session_start();

セッションファイルをカウントするコードは以下のようになります。

(例)
function getActiveCount() {
$path = session_save_path();
if (empty($path)) {
return 0;
}

$files = glob("$path/sess_*");
if ($files === false) {
return 0;
}
return count($files);
}

できるだけ厳密に人数を数えたい場合は、セッションファイルの削除タイミングを調節する必要があります。これは、設定ファイルの以下の項目に該当します。

session.gc_probability
session.gc_divisor
session.gc_maxlifetime
session.cache_expire

参考:
PHPマニュアル CXXXVII. セッション処理関数(session)

出力する文字列のサニタイジング(無害化)

2006年11月13日

 

ユーザが入力した文字列を画面に出力したい場合、気をつけるべき事柄がいくつかあります。
その一つが、今回のお題である「出力する文字列はサニタイジングすること」です。
PHPには文字列をエスケープするための関数がいくつか用意されていますが、サニタイジングするためにはhtmlentities関数を使用し、しかも第2と第3引数を指定する必要があります。

(例)
$string = htmlentities($string, ENT_QUOTES, mb_internal_encoding());

よくhtmlspecialchars関数が使われていたり、htmlentities関数を使っていても第1引数しか指定されていなかったりしますが、これでは穴が残ることになります。

参考:
PHP マニュアル htmlentities

EXPLAIN句を使ったインデックスの設定

2006年11月1日

リレーショナルデータベースのテーブル設計を行っていると、どのカラムにインデックスをつければよいかがよくわからなくなってしまうのは私だけではないと思います。
DBMSがMySQLやPostgreSQLの場合、私はEXPLAIN句を使ってインデックスのつけ忘れがないかをチェックするようにしています。
EXPLAIN句を使うとSELECTクエリの実行計画が表示されるようになり、この情報を元にテーブルのインデックスを設定していきます。

MySQLの場合

EXPLAIN SELECT …

を実行すると表示されるテーブルのうち、チェックすべきカラムは「type」です。
このtypeカラムに「ALL」と表示されているレコードがあれば、そのテーブルのインデックスを見直す必要があるかもしれません。

PostgreSQLの場合

EXPLAIN SELECT …

を実行すると表示される「QUERY PLAN」に「Seq Scan on」から始まる行がある場合、onの後に続くテーブルのインデックスを見直す必要があるかもしれません。

(注意)
テーブルのインデックスは万能ではないので、何でもつけていればよいというわけではありません。
インデックスをつけすぎると更新性能が低下してしまいます。
またデータの種類によってはインデックスをつけても検索速度の向上が見込めない場合があります。
その最たる例はブーリアン値や性別のような限られた少ない種類のデータしか格納されないカラムです。
DBMSによっては、こういったデータ用のインデックス技術が実装されているようですが…。

参考:
PostgreSQL 文書
MySQL 4.1 リファレンスマニュアル