2008-07-18

カラーレーザープリンタの奇怪

かれこれ5、6年前に約2万円で購入し、八面六臂の活躍をしたBJ S600 がそろそろポシャりそうなので、価格に手頃感がでてきたカラーレーザープリンタを購入しようかなと思い、調べて見ました。 すると、なんか奇奇怪怪な世界。

というのは、Brother MFC-9420cnという機種の本体(カラー3色と黒1色の計4本のトナー付、以下、トナー4本、と言う)の価格が、トナー4本より安い。 よくよく説明を見ると、購入時付属のトナーはスターターうんたらという減量されたものらしい。 「これじゃ、客はわかんないよ」と思いつつ、他のメーカーの低価格機も価格.comで調べてみると、トナー4本(6000枚程度印刷)で本体の半分~全額ちょっと欠ける位の価格になってしまう。 さらに、トナー以外の消耗品として、ドラムとか感光体うんたらとか、メンテナンスキットとか、うんたらベルトとか、メーカー毎に異なる様々なものがあり、しかも耐久期間もまちまち。 確かに公称のページ当たりの印刷コスト項目はあるのだけれども、これにドラムやらその他の消耗品の価格が反映されているのだろうかと不安になってくる。 で、当初どれが一番お買い得なのか?と思って作ったプリンタ比較表も、なんかあまり役に立ちそうもないような気がしてくる(この表に興味のある方は→これ)。 本体に対してトナーの価格が高く、奇怪な消耗品が数々あると迷路に入り込んだ気分。 トナーだけ買い換えて、ドラムやその他の高い消耗品の購入を迫られる段になったら、(エコは差し置いて)新機種に買い換えるのが一番経済的なような気もしてくる。 そもそも「レーザープリンタはインクジェットよりランニングコストが低い」と巷に言われる大前提も疑わしく思えて…

どうしようかなぁ?と迷っているところに、目に飛び込んできたのが、HP Officejet Pro K8600dn というインクジェット機。 Web記事によると、A4カラー1枚の印刷コストが6.3円、カラー印刷時35枚/分の高速、その他のスペックを比較してみても、レーザープリンタに勝るとも劣らない。 レーザープリンタと違って、よくわからない消耗品もない、少なくとも書いてはいない。

HP Officejet Pro K8600dn



ということで、K8600dnを購入することになりました。 吉と出るか、凶と出るかお楽しみ。 


(土屋)

2008-07-11

【応用その4】FX.php を使ってアンケートフォームを MySQL 対応にしてみる

 サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)

 *FileMaker API for PHP を使ったアンケートフォーム作成をお読みになっていない方は、先にこちらをご覧ください。

 FX.php は MySQL データベースへの接続にも対応しているため、アンケートフォーム作成の延長として、今回は既存のコードに MySQL データベースへのデータ書込機能を実装してみることにします。

 * 操作にあたっては、MySQL Server がインストールされていることが前提となりますので、予め MySQL Server のインストールと、文字化け対策のためにデフォルト文字セット(utf8)が有効になるように設定しておいてください。

 まずは、データベースを準備します。付属の create_table.php の $rootPass に MySQL の root パスワードを設定して同スクリプトを保存し、local の web サーバで実行してみてください。Comment データベース、cgi テーブル、webuser とそのパスワードが生成されます。作成するテーブル列は、create_table.php を参照してください。
 
 以下、次の順に Comment.php へコードを追加していきます。
1.使用するデータベース種別を MySQL にします。
データベース種別

2.接続先の MySQL サーバポート番号を指定します。デフォルトは 3306 です。
MySQL ポート番号

3. あとは既存の FX.php 接続とほぼ同じですが、最後のデータ書き込みのところで、FMNew() の代わりに PerformSQLQuery() 関数を使います。引数は第一パラメータに SQL クエリ文を指定し、残りはデフォルト値を指定します。

 PerformSQLQuery($query,true,false,'object');

 この部分をコードで表したものが次のとおりです。(列名)と値を使って $query SQL クエリ文をセットし、次の PerformSQLQuery で指定して実行します。
query

 FX.php & MySQL の組み合わせで実行可能になっているコードを Comment_mysql.php に用意してありますので、併せて確認してみてください。

参考リンク:
MySQL オフィシャルサイト

2008-07-09

【応用その3】アンケートフォームにセッションを追加してみる(リロード対策)

 サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)

 *FileMaker API for PHP を使ったアンケートフォーム作成をお読みになっていない方は、先にこちらをご覧ください。

 PHP 経由で FileMaker データベースにデータ書込を行う手法として、簡易アンケートフォームの作り方をベースに説明を進めてきました。
 すでにお気付きの方もいらっしゃるとは思いますが、実はこのままでは実際の運用には不向きな部分があります。

 それは、最後のお礼ページです。
 このページが表示される直前に FileMaker データベースへのデータ書込とメール送信を同時に行うわけですが、Web ブラウザのリロードボタンを押してページをロードするたびに同処理が実行されてしまうため、ゴミデータとゴミメールが増えてしまう可能性があります。
 実際問題として、お礼のページをリロードしてしまうユーザも結構多かったりするので、リロード操作が行われてもデータ送信、メール送信は一回だけ実行するような仕組みが必要となります。

 これを効率よく処理する方法として、PHP のセッションをここで組み込んでみることにします。
 PHP のセッションはスーパーグローバル配列と呼ばれ、読み込まれたページにかかわらず値を保持しておくことができるものです。FileMaker のグローバル変数に共通している部分もあるので、そう捉えると理解しやすいと思います。

 ユーザによるページリロード対策は、データ書込とメール送信が行われたかどうかを判断し、それが No なら書込・メール送信を許可、Yes なら不可にすればよいわけです。これをフラグを使って表現するとさらに明確になります。仮にフラグ名 を done フラグとしましょう。

 未書込の状態 --- done フラグはオフ (FALSE、偽)
 書込済の状態 --- done フラグはオン (TRUE、真)

 done フラグがオフ(FALSE)のときに書き込みを実行し、その操作が終わったら done フラグをオン(TRUE) にします。

 この値をセッションに入れておくことで、ページが何度リロードされても呼び出しはセッションから行うため、一度オンになったフラグはオフになることはありません。

 この処理を PHP で記述すると次のようになります。
1. セッションの開始と有効期限を決めます。
セッション開始
 セッションの有効期限のデフォルトは 180 分ですが、簡易アンケートで特に詳細な確認が必要なわけではないため、ここでは有効期限を 5 分にしています。5 分経過するとセッションは破棄されて無効となり、その後にページをリロードすると、白紙のページが表示されるようになります。
 session_start() 関数でセッションを開始するわけですが、この関数は、セッションが存在しない場合は、新たにセッションを作成します。これに対し、セッションがすでに存在している場合はそのセッションを再度呼び出します。つまり、このアンケートフォームで言えば、最初にアンケート入力フォームのロードを行った時点でセッションの作成を行い、それ以降、ページがロードされたり次のステップに進むたびに session_start() 関数から同一のセッションを呼び出すわけです。

2. 次に、done フラグの初期化を行います。
セッション初期化
 初回ページロード時に一度だけ done フラグに FALSE (データベースへの書込とメール送信が行われていない状態)をセットします。

3. お礼のページを出すときに、done フラグが FALSE であることを確認し、それに該当すれば FileMaker データベースへのデータ書込とメール送信を行い、その後に done フラグに TRUE (データベースへの書込とメール送信が完了した状態)をセットします。
 以下、赤線を引いた部分に注目してください(コードが長いため、中略を入れてあります)。
done フラグのセット

 これでセッションの実装が終わりました。サンプルコードを使って動作を確認してみてください。