スタッフブログ
haltです。
皆さんはif文内部に条件を書く時どのように書いていますか?
私の場合、
とか
のように、if文の中に変数や関数を直接書いてその結果を判定条件にしています。
が、こういった書き方がすべてだと考えていると必ずハマります。具体的には以下の場合
です。
strposは、第一引数の中に第二引数が存在するか調べ、その文字が見つかった位置を返し
ます。見つからなければfalseを返します。
上のプログラムの場合、abcの中にaは含まれているのでifの条件が満たされ、exitでプロ
グラムが停止するはずですが実際は停止しません。
い
strposが返す文字列位置は0からはじまる為、if文が0をfalseと判い断してしまい、条件>を満たす事ができません。同様のケースとして以下の例があげられます。
http://d.hatena.ne.jp/pirokyun/20080729/1217329949
array_searchは配列の中から特定の値を含む配列のキーを返す関数なのですが
1番目の配列のキーは0なので0を返し、if文がそれをfalseと判断。結果、配列は値を含ん
でいるのに条件分岐の上では含んでいない事になってしまいます。
この問題を避けるには条件の中で変数や関数の結果を直接参照しないで、必ず比較するよ
うにする事です。strposの問題やarray_searchの問題は
のようにする事で回避できます。
strposやarray_searchなどphpが用意した関数は覚えてしまったりマニュアルを引いて使>うので慣れればハマる事はありませんが、他人が作った関数などを使う場合は注意したほ
うが良いでしょう。
<?php
$load_error = true;
if ($load_error) {
exit('error!');
}
if (!in_array($value, array('a','b','c'))) {
exit("{$value} is not found.");
}
if (strpos('abc', 'a')) {
exit('exist!');
}
<?php
$fruit = array('apple', 'orange', 'banana');
if (array_search('apple', $fruit)) {
return true;
} else {
return false;
}
?>
<?php
if (strpos('abc', 'a') !== false) {
exit('found!');
}
satoです。
PHP4のサポート終了まであと2週間となりましたが、一方10月頃にリリースが予定されているPHP5.3で、クロージャ(Closure)が実装されることになりました。
今日はこのクロージャについて簡単に解説しようと思います。
まず、従来のPHPには、create_function()で無名関数(匿名関数)を定義できるという機能がありました。
ただし、使い方の制限が大きい上に、文字列内にコードを書く必要があるので、実行時まで文法がチェックできないという問題がありました。
PHP5.3からは、JavaScriptのような感じで無名関数を作成することができます。
さて、例えば、
単純に書いてみます。
クロージャをサポートしている言語なら、これは思った通りに動作します。
クロージャをサポートしていない言語なら、これは思った通りには動作しません。
「なんでこれで動くの?」と思った方はなかなか鋭いです。
コードだけを見ると、$countがその直前で定義されているのでそのまま使えると思うのですが、returnされる無名関数は、hoge()の外で実行されるため、hoge()内にある$countとは無縁になります。
しかしhoge()内の$countを参照したいということは多いと思います。これをそのまま実現するのがクロージャです。
もう少し突っ込むと、無名関数内の$countは、ここでは未定義変数です。
この未定義変数を解決する際に、この無名関数を定義した場所(ここではhoge())で定義されている変数を利用できるようにするのがクロージャです。
さて、そういう理由で、クロージャをサポートしているPHP5.3ならこれは動作するように思えるのですが、実際は動作しません。JavaScriptであれば動作するのですが…。
PHP5.3のクロージャは、定義した場所で定義されている変数を利用する際、無名関数の宣言時にどの変数を利用するか明示的に宣言してあげる必要があります。
具体的には以下のようになります。
無名関数とクロージャがサポートされることにより、PHP5.3以降では面白いコードがいろいろ書けそうで楽しみです。
今月末にはα1がリリースされる予定なので、興味のある方は是非チェックしてみてください。
PHP4のサポート終了まであと2週間となりましたが、一方10月頃にリリースが予定されているPHP5.3で、クロージャ(Closure)が実装されることになりました。
今日はこのクロージャについて簡単に解説しようと思います。
まず、従来のPHPには、create_function()で無名関数(匿名関数)を定義できるという機能がありました。
ただし、使い方の制限が大きい上に、文字列内にコードを書く必要があるので、実行時まで文法がチェックできないという問題がありました。
PHP5.3からは、JavaScriptのような感じで無名関数を作成することができます。
$f = function($var) {
return $var * 2;
};
$f(3); // return 6
これだけでも非常に書きやすくなったと思います。さて、例えば、
// 動作しないコード
function hoge() {
$count = 4;
return function($var) {
// ここで$count*$varをreturnさせたい
};
}
$f = hoge(); // $fにはreturnしたfunctionそのものが入る
$f(2);
という場合に、どうすればよいでしょうか。単純に書いてみます。
// 動作しないコード
function hoge() {
$count = 4;
return function($var) {
return $count * $var;
};
}
$f = hoge(); // $fにはreturnしたfunctionそのものが入る
$f(2);
クロージャをサポートしている言語なら、これは思った通りに動作します。
クロージャをサポートしていない言語なら、これは思った通りには動作しません。
「なんでこれで動くの?」と思った方はなかなか鋭いです。
コードだけを見ると、$countがその直前で定義されているのでそのまま使えると思うのですが、returnされる無名関数は、hoge()の外で実行されるため、hoge()内にある$countとは無縁になります。
しかしhoge()内の$countを参照したいということは多いと思います。これをそのまま実現するのがクロージャです。
もう少し突っ込むと、無名関数内の$countは、ここでは未定義変数です。
この未定義変数を解決する際に、この無名関数を定義した場所(ここではhoge())で定義されている変数を利用できるようにするのがクロージャです。
さて、そういう理由で、クロージャをサポートしているPHP5.3ならこれは動作するように思えるのですが、実際は動作しません。JavaScriptであれば動作するのですが…。
PHP5.3のクロージャは、定義した場所で定義されている変数を利用する際、無名関数の宣言時にどの変数を利用するか明示的に宣言してあげる必要があります。
具体的には以下のようになります。
function hoge() {
$count = 4;
return function($var) use($count) {
return $count * $var;
};
}
$f = hoge(); // $fにはreturnしたfunctionそのものが入る
$f(2);
このように、useで使用したい変数を宣言することにより、無名関数内で使用することができます。少々面倒な感じになっています。無名関数とクロージャがサポートされることにより、PHP5.3以降では面白いコードがいろいろ書けそうで楽しみです。
今月末にはα1がリリースされる予定なので、興味のある方は是非チェックしてみてください。

はじめまして。新入社員のいしだなおとと申します。
先週の木曜日より株式会社RYUSでお仕事させていただくことになりました。
今回初めてブログの執筆を任されて、少々緊張と戸惑いを覚えて居マス。
新しい職場と業務になれるまで、まだもう少し時間がかかりそうです。
今日は、新しい環境にあわせてどんな開発環境を揃えたかということについて、書いてみたいと思います。
支給されたPCはワイド液晶の小さめのノートで、それとこちらもワイド液晶のいわゆるデュアルディスプレイです。OSなしモデルだったのですが、バンドルされていたWindows XPをインストールしました。
そしてこれもバンドルのMS Office 2007と、ダウンロードしたPower Point Viewer 2007もインストール。そのあとも自動更新の適用などいろいろあったのですが、ここでは割愛します。
次にブラウザにFirefox3、そしてメーラーはThunderbiredを選びました。
何のことはなく、いつも使っているものをチョイスしただけです。
ほかには、
ここからはさらに趣味が出てくるかもしれませんが、
以外にたくさん入ります。でも肝心の開発言語の環境はまだです。
じつは開発にはUbuntu Linuxを使いたかったので、VMware Playerで動かすことにしました。
8.04LTS 日本語ローカライズドdesktopのVMwareイメージを使いました。
というわけで、Ubuntuの中でもまたインストール、インストールです。
それでも、はじめから比較的そろているのと、パッケージマネージャのSynapticで選ぶだけなので手間はそれほどでもありませんでした。
このあと、ローカルで動かすApacheを整えたり、社内で使うWebアプリなんやらのアカウントを設定したりでまだまだ落ち着かないような状況です。
さて、もっとも肝心かなめ、エディターは、、、
社内ではVIMを使う流れのようなものがあるような気がしますが、あっさりとGNU Emacs 22 GTKを使っています。先月あたりから、8年ぶりにEmacsに帰ってきました。
すっかりキーバンドも忘れていますが、ぼちぼちなれていきたいと思っています。
先週の木曜日より株式会社RYUSでお仕事させていただくことになりました。
今回初めてブログの執筆を任されて、少々緊張と戸惑いを覚えて居マス。
新しい職場と業務になれるまで、まだもう少し時間がかかりそうです。
今日は、新しい環境にあわせてどんな開発環境を揃えたかということについて、書いてみたいと思います。
支給されたPCはワイド液晶の小さめのノートで、それとこちらもワイド液晶のいわゆるデュアルディスプレイです。OSなしモデルだったのですが、バンドルされていたWindows XPをインストールしました。
そしてこれもバンドルのMS Office 2007と、ダウンロードしたPower Point Viewer 2007もインストール。そのあとも自動更新の適用などいろいろあったのですが、ここでは割愛します。
次にブラウザにFirefox3、そしてメーラーはThunderbiredを選びました。
何のことはなく、いつも使っているものをチョイスしただけです。
ほかには、
- TortoiseSVN
- Poderosa
- WinSCP
- WinCVSごった煮版
ここからはさらに趣味が出てくるかもしれませんが、
- LHAユーティリティ32
- マルチフォーマット画像ビューアGV
- 窓の手2004
- LimeChat2
- OpenOffice.org 2.4
以外にたくさん入ります。でも肝心の開発言語の環境はまだです。
じつは開発にはUbuntu Linuxを使いたかったので、VMware Playerで動かすことにしました。
8.04LTS 日本語ローカライズドdesktopのVMwareイメージを使いました。
というわけで、Ubuntuの中でもまたインストール、インストールです。
それでも、はじめから比較的そろているのと、パッケージマネージャのSynapticで選ぶだけなので手間はそれほどでもありませんでした。
このあと、ローカルで動かすApacheを整えたり、社内で使うWebアプリなんやらのアカウントを設定したりでまだまだ落ち着かないような状況です。
さて、もっとも肝心かなめ、エディターは、、、
社内ではVIMを使う流れのようなものがあるような気がしますが、あっさりとGNU Emacs 22 GTKを使っています。先月あたりから、8年ぶりにEmacsに帰ってきました。
すっかりキーバンドも忘れていますが、ぼちぼちなれていきたいと思っています。

PDA好きの龍司です。
冷静に考えれば、まだ見送りかなぁとも思ったのですが、衝動をおさえきれずにiPhone 3G購入してしまいました(^^;
せっかくなので、これまで使っていたWindows Mobile機EMonsterとiPhoneとの使い勝手を比較してみようかなぁと思います。
■安定性
今のところWindowsMobileの方が良さそうに感じます。
iPhoneを使ってると、急にアプリが終了して、ホーム画面に戻るってことがよくあるんですよね。
これだと、何かメモをとろうとしたときに不安です。
■サイズ
断然iPhone(^^;
久しぶりにワイシャツの胸ポケットにつっこめるPDAだなぁと思ってます。
# 胸ポケットに入れない方がいいですけどね。よく落とすし、シルエットくずれるし。
■閲覧のしやすさ
iPhoneの閲覧性は非常に良いと思います。
WindowsMobileも6になってからかなり閲覧しやすくなったと思います。
でもフルブラウザの閲覧性は、圧倒的にiPhoneのSafariの方がいいですね。WindowsMobileではあまりPCサイトを見る気になれませんでしたが、iPhoneならストレス感じずに閲覧できました。
■入力のしやすさ
片手入力なら、iPhoneの勝ち。でも携帯電話には負けてます(^^;
でも両手入力なら、ちゃんとハードウェアキーボードのあるEmonsterの方が入力しやすいです。
でも、片手両手とも入力しやすかったという点ではウィルコムのW-ZERO3[es]の方が上ですね。
■同期
iPhoneとMacの同期では、MobileMeの存在が大きいですね。
これまでのPDAとPCの同期といえば、USBケーブルで接続というのが主流だったわけですが、MobileMeだと、ネットワーク経由で予定やアドレス帳が自動的に同期されるので、「あれ?最後に同期したのっていつだっけ?」とならず助かります。
ただし、予定、アドレス帳以外となるとWindows Mobileの方が同期できる範囲が広いです。
WindowsMobileで同期できて、iPhoneで同期されなくて、がっかりしたのは下記2点。
・TODO
・ファイル(音楽、動画、写真以外のファイルです)
この2点は、できて当然と思っていただけに、同期できないとわかってかなりガッカリしました。
■総評
実用性重視なら、正直WindowsMobile機の方がまだまだ上だと思います。デフォルトで物足りない部分も、そこをカバーするソフトが多数存在しますしね。
iPhoneは、まだまだこれからって感じですね。MobileMe経由でのネットワーク経由の同期をもっと充実させてくれればと思います。
冷静に考えれば、まだ見送りかなぁとも思ったのですが、衝動をおさえきれずにiPhone 3G購入してしまいました(^^;
せっかくなので、これまで使っていたWindows Mobile機EMonsterとiPhoneとの使い勝手を比較してみようかなぁと思います。
■安定性
今のところWindowsMobileの方が良さそうに感じます。
iPhoneを使ってると、急にアプリが終了して、ホーム画面に戻るってことがよくあるんですよね。
これだと、何かメモをとろうとしたときに不安です。
■サイズ
断然iPhone(^^;
久しぶりにワイシャツの胸ポケットにつっこめるPDAだなぁと思ってます。
# 胸ポケットに入れない方がいいですけどね。よく落とすし、シルエットくずれるし。
■閲覧のしやすさ
iPhoneの閲覧性は非常に良いと思います。
WindowsMobileも6になってからかなり閲覧しやすくなったと思います。
でもフルブラウザの閲覧性は、圧倒的にiPhoneのSafariの方がいいですね。WindowsMobileではあまりPCサイトを見る気になれませんでしたが、iPhoneならストレス感じずに閲覧できました。
■入力のしやすさ
片手入力なら、iPhoneの勝ち。でも携帯電話には負けてます(^^;
でも両手入力なら、ちゃんとハードウェアキーボードのあるEmonsterの方が入力しやすいです。
でも、片手両手とも入力しやすかったという点ではウィルコムのW-ZERO3[es]の方が上ですね。
■同期
iPhoneとMacの同期では、MobileMeの存在が大きいですね。
これまでのPDAとPCの同期といえば、USBケーブルで接続というのが主流だったわけですが、MobileMeだと、ネットワーク経由で予定やアドレス帳が自動的に同期されるので、「あれ?最後に同期したのっていつだっけ?」とならず助かります。
ただし、予定、アドレス帳以外となるとWindows Mobileの方が同期できる範囲が広いです。
WindowsMobileで同期できて、iPhoneで同期されなくて、がっかりしたのは下記2点。
・TODO
・ファイル(音楽、動画、写真以外のファイルです)
この2点は、できて当然と思っていただけに、同期できないとわかってかなりガッカリしました。
■総評
実用性重視なら、正直WindowsMobile機の方がまだまだ上だと思います。デフォルトで物足りない部分も、そこをカバーするソフトが多数存在しますしね。
iPhoneは、まだまだこれからって感じですね。MobileMe経由でのネットワーク経由の同期をもっと充実させてくれればと思います。
PHP4の最終リリースもせまり、もうPHP4を触る事はないだろうと思っていたのになぜかPHP4のコードを書いているhaltです。
今日はPHP4でのエラー遷移制御のバッドノウハウ…いやテクニックを紹介します。
通常、エラー発生時にメッセージを貯めていくコードを書くと、以下のような感じになり
がちです。
「エラーがなければ次へ」というifを繰り返して先へ進むこのコードですがネストが深く
なってしまいたいへん見辛いコードになっています。
PHP5なら、tryブロックで囲んでエラーが発生したらthrowする事で、ネストする事なしに
処理をとばせるのですが、PHP4にはtry-catch構文がないので仕方なくif文で…となると>>立ちまち汚いコードがうまれてしまいます。
そこで他の人はどうやっているのだろうと検索してみたところ、一回で抜けるようにした
do-while文を使ってtryブロックのように囲み、問題が発生した時点でbreakする事によっ
て擬似的にtry-catchのような遷移を実現するという方法を知りました。
あきらかにクセがあるので使うタイミングを良く考える必要がありそうですが、具体的に
は以下のような感じです。
do-whileブロック内では、エラー発生時点でbreakを使って処理を抜けている為、if文連>打のようにネストが深くなる事はありません。do-whileテクニックを知っている人が見れ
ば非常に見易いでしょう。ただし、ネスト回数の少ないコードでこれを使うと意図が見え
づらく、混乱の元になりそうです。
クラスなどを利用して擬似的にExceptionを扱う方法もあるようなのですがこのあたりで>調査を終わりにしたいと思います。こういった方法を使うよりもPHP5を使った方がずっと
幸せになれるからです。
class example1_controller
{
function post()
{
$comma_count = 3;
$filename = __FILE__;
if (file_exists($filename)) {
if ($filedata = file_get_contents($filename)) {
$csv_data = array();
$rows = explode("\n", $filedata);
array_shift($rows); //先頭行はタイトルなのでイラネ
if (count($rows) < 1) {
$this->error->addError('parse error.');
} else {
foreach ($rows as $row) {
$cols = explode(',', $row);
if (count($cols) != 4) {
$this->error->addError('invalid column count.');
break;
}
$csv_data[] = $cols;
}
}
} else {
$this->error->addError('file read failed.');
}
} else {
$this->error->addError('target file not found.');
}
// 途中でエラーがあってもここを通したい
$this->render->setAttribute('error', $this->error);
$this->render->setTemplate('test.tpl');
}
}
class example2_controller
{
function post()
{
$comma_count = 3;
$filename = __FILE__;
do {
if (!file_exists($filename)) {
$this->error->addError('target file not found.');
break;
}
$filedata = file_get_contents($filename);
if ($filedata === false) {
$this->error->addError('file read failed.');
break;
}
$csv_data = array();
$rows = explode("\n", $filedata);
array_shift($rows); //先頭行はタイトルなのでイラネ
if (count($rows) < 1) {
$this->error->addError('parse error.');
break;
}
foreach ($rows as $row) {
$cols = explode(',', $row);
if (count($cols) != 4) {
$this->error->addError('invalid column count.');
break;
}
$csv_data[] = $cols;
}
} while(0);
// 途中でエラーがあってもここを通したい
$this->render->setAttribute('error', $this->error);
$this->render->setTemplate('test.tpl');
}
}
satoです。
私は日常使っているOSはWindows Vistaなのですが、Web開発の環境としては不便なのでVMware PlayerでCentOSを入れて作業しています。
通常、CentOS側へはVMwareの画面を使わず、PuTTYでSSH接続しているのですが、そうするとVMwareのウィンドウを操作することはほとんどありません。
しかし、VMwareのウィンドウは最小化してもタスクバーに残るので邪魔になってしまいます。
そこで、Trayzerの出番です。
Trayzerは、Soft Mania様で配布されています。
簡単に言うと、何でもタスクトレイに格納できるようになるアプリケーションです。
使い方も簡単で、Trayzerの画面で、VMwareをタスクトレイに入れるように設定するだけで、

が

のようになります。
ほとんどの起動中アプリケーションに対して適用できるので、タスクバーをすっきりさせたい方は是非利用してみてください。
私は日常使っているOSはWindows Vistaなのですが、Web開発の環境としては不便なのでVMware PlayerでCentOSを入れて作業しています。
通常、CentOS側へはVMwareの画面を使わず、PuTTYでSSH接続しているのですが、そうするとVMwareのウィンドウを操作することはほとんどありません。
しかし、VMwareのウィンドウは最小化してもタスクバーに残るので邪魔になってしまいます。
そこで、Trayzerの出番です。
Trayzerは、Soft Mania様で配布されています。
簡単に言うと、何でもタスクトレイに格納できるようになるアプリケーションです。
使い方も簡単で、Trayzerの画面で、VMwareをタスクトレイに入れるように設定するだけで、
が
のようになります。
ほとんどの起動中アプリケーションに対して適用できるので、タスクバーをすっきりさせたい方は是非利用してみてください。

7月21日に大田区産業プラザ(PiO)にて、PHPカンファレンス2008が開催されます。
・PHPカンファレンス2008
その中のセッションで45分ほど「PHPerのためのXOOPS活用法」というテーマで話をさせていただく機会をいただきました。
最近、XOOPSの導入を考えられている方向けにお話させてもらう機会は多かったのですが、PHPプログラマの皆さんにXOOPSの事を話す機会はありませんでした。
なので、どんな話をしようかまだ悩んでる最中なのですが、これからPHPプログラミングを始める方たちに、少しでも役立つようなお話ができればと思っています。
セッションが終わった後は、他のセッションも聞いてみようかなぁと思っていますので、会場で見かけたら気軽に声かけてくださいね。
・PHPカンファレンス2008
その中のセッションで45分ほど「PHPerのためのXOOPS活用法」というテーマで話をさせていただく機会をいただきました。
最近、XOOPSの導入を考えられている方向けにお話させてもらう機会は多かったのですが、PHPプログラマの皆さんにXOOPSの事を話す機会はありませんでした。
なので、どんな話をしようかまだ悩んでる最中なのですが、これからPHPプログラミングを始める方たちに、少しでも役立つようなお話ができればと思っています。
セッションが終わった後は、他のセッションも聞いてみようかなぁと思っていますので、会場で見かけたら気軽に声かけてくださいね。
haltです。
willcomから発売されているW-ZERO3などのPHSは、WindowsMobile搭載によって普通の電話
としての機能だけでなく、様々な機能を持たせる事ができます。
例えば、エクセルやワード、IEなどを使えるのはWindows Mobileならではでしょう。
また、マイクロソフトのソフトウェアだけでなく、サードパーティーが開発したソフトウ
ェアも自由にインストールすることができます。今回はW-ZERO3を便利にするフリーウェ>アについて紹介します。
* EasyDial
http://d.hatena.ne.jp/KOTETU/20051005/p1
アイコンをクリックするだけでダイヤルアップの接続、切断を行う事ができます。デフォ
ルトでは手動ダイヤルアップの手順が面倒なのでこのアプリケーションをインストールし
ておくと便利です。
* wifictrl
http://w03holic.seesaa.net/article/51166074.html
EasyDialと同じように無線LANのon/offをきりかえる事ができるアプリケーションです。
* PocketPutty
http://www2h.biglobe.ne.jp/~m-saeki/junk/PocketPuTTY.html
いざという時のSSH接続のために。自分はサーバにirssiをいれてPocketPuttyからsshして
IRCをみたりしてました。
* HttpAdjustClock
http://caviar.air-nifty.com/note/software/adjclock.html
HTTPを利用して時刻あわせをおこないます。W-ZERO3は自動時刻あわせがないようなので>これを使って定期的に時刻をあわせておくと良いでしょう。
* Criw0
http://www.fastwave.gr.jp/diarysrv/misuzilla/200612c.html
IRCクライアント。最新はcodereposに。
* OffisnailDate6
http://www.offisnail.info/archives/2007/07/18/offisnail_date_offisnail_note/
カレンダー、予定管理のアプリケーションです。デフォルトのものが貧弱なので。
* QDz
http://www.nicque.com/PQz/
軽量の連絡帳。起動が早く軽いのでデフォルトのものとおきかえて。
* PlaceEngine
http://www.placeengine.com/
無線LANの電波強度を元に現在位置をわりだすアプリケーション。ログをとるようにして>おくと自分があるいた位置がわかります。おもしろいです。
* POSync
http://www.geocities.jp/bjsoftab4/zero3.html
googleカレンダーと内蔵の予定表をsyncできるアプリケーションです。都度syncしなけれ
ばならないのが面倒ですが、googleカレンダーをつかっているなら是非。
* ctrlswapmini
http://hp.vector.co.jp/authors/VA004474/wince/wince.html
インストールする事で「ベル打ち」による入力が可能になります。最近の携帯電話はなぜ
かベル打ちできなくなってしまったのでベル打ち信者にはたまりません。
* YTaskMgr
http://www31.ocn.ne.jp/~yoshio2/ytaskmgr-1.html
画面回転ボタンにランチャー機能をわりあてるアプリケーション。これにEasyDialやwifictrlを登録するだけでかなり使いやすくなります。
Windows Mobile系の端末はカスタムしてようやく便利になるのでいろんなアプリケーションをインストールして試してみましょう。
willcomから発売されているW-ZERO3などのPHSは、WindowsMobile搭載によって普通の電話
としての機能だけでなく、様々な機能を持たせる事ができます。
例えば、エクセルやワード、IEなどを使えるのはWindows Mobileならではでしょう。
また、マイクロソフトのソフトウェアだけでなく、サードパーティーが開発したソフトウ
ェアも自由にインストールすることができます。今回はW-ZERO3を便利にするフリーウェ>アについて紹介します。
* EasyDial
http://d.hatena.ne.jp/KOTETU/20051005/p1
アイコンをクリックするだけでダイヤルアップの接続、切断を行う事ができます。デフォ
ルトでは手動ダイヤルアップの手順が面倒なのでこのアプリケーションをインストールし
ておくと便利です。
* wifictrl
http://w03holic.seesaa.net/article/51166074.html
EasyDialと同じように無線LANのon/offをきりかえる事ができるアプリケーションです。
* PocketPutty
http://www2h.biglobe.ne.jp/~m-saeki/junk/PocketPuTTY.html
いざという時のSSH接続のために。自分はサーバにirssiをいれてPocketPuttyからsshして
IRCをみたりしてました。
* HttpAdjustClock
http://caviar.air-nifty.com/note/software/adjclock.html
HTTPを利用して時刻あわせをおこないます。W-ZERO3は自動時刻あわせがないようなので>これを使って定期的に時刻をあわせておくと良いでしょう。
* Criw0
http://www.fastwave.gr.jp/diarysrv/misuzilla/200612c.html
IRCクライアント。最新はcodereposに。
* OffisnailDate6
http://www.offisnail.info/archives/2007/07/18/offisnail_date_offisnail_note/
カレンダー、予定管理のアプリケーションです。デフォルトのものが貧弱なので。
* QDz
http://www.nicque.com/PQz/
軽量の連絡帳。起動が早く軽いのでデフォルトのものとおきかえて。
* PlaceEngine
http://www.placeengine.com/
無線LANの電波強度を元に現在位置をわりだすアプリケーション。ログをとるようにして>おくと自分があるいた位置がわかります。おもしろいです。
* POSync
http://www.geocities.jp/bjsoftab4/zero3.html
googleカレンダーと内蔵の予定表をsyncできるアプリケーションです。都度syncしなけれ
ばならないのが面倒ですが、googleカレンダーをつかっているなら是非。
* ctrlswapmini
http://hp.vector.co.jp/authors/VA004474/wince/wince.html
インストールする事で「ベル打ち」による入力が可能になります。最近の携帯電話はなぜ
かベル打ちできなくなってしまったのでベル打ち信者にはたまりません。
* YTaskMgr
http://www31.ocn.ne.jp/~yoshio2/ytaskmgr-1.html
画面回転ボタンにランチャー機能をわりあてるアプリケーション。これにEasyDialやwifictrlを登録するだけでかなり使いやすくなります。
Windows Mobile系の端末はカスタムしてようやく便利になるのでいろんなアプリケーションをインストールして試してみましょう。
satoです。
今回はRuby On Rails2.1に実装された、named_scopeについて紹介したいと思います。
個人的に他のO/Rマッパーにも取り込んでほしい機能だと思っています。
例えば、以下のようなテーブルがあったとします。
・ID
・名前
・年齢
・性別
・都道府県
このテーブルから、次のような取得条件があるとします。
1.年齢が20歳の人
2.性別が女性
3.年齢が20歳かつ性別が女性
この条件3は、条件1と条件2の組み合わせなので、共通化できそうです。PHPでSQLを組み立てるなら、
$sql = 'select * from people where ';
$where = '';
if ($age == 20) {
$where .= ' age = 20';
}
if ($sex == FEMALE) {
if ($where != '') {
$where .= ' and ';
}
$where .= ' sex = '.FEMALE;
}
$sql .= $where;
みたいな感じで、見通しが悪くなります。(実際はwhereを生成するような関数を作ると思いますが)
Criteria系のO/Rマッパー(XoopsObjectとか)だと、
$c =& new CriteriaCompo();
if ($age == 20) {
$c->add(new Criteria('age', 20));
}
if ($sex == FEMALE) {
$c->add(new Criteria('sex', FEMALE));
}
少しは簡潔になりました。
もちろん、Criteriaを実処理の部分に書いてもいいですが、Criteriaを組み立てる部分が冗長なので、通常は別関数とかメソッドとかにすると思います。(XOOPSならhandlerに書くのがいいと思います)
さて、これがnamed_scopeになると、
People.age_20.female
これだけです。
もちろんこれは複合で取得する場合で、単体なら
People.age_20
People.female
というような処理になると思います。
age_20とfemaleを書くだけで、複合した際の処理を気にせず組み立てることができます。
定義はこんな感じになると思います。
class Person < ActiveRecord::Base
named_scope :age_20, :conditions => {:age => 20 }
named_scope :female, :conditions => {:sex => FEMALE }
end
※これらのコードは実際に動作させてないので、動くかどうかの保証はありません。
ORの場合がどうなるかは調べてないのですが、メソッドチェーンで条件を組み立てれるのは、Ruby的で面白いと思いました。
PHPで実装するのは難しそうですが、使ってみたい機能です。
今回はRuby On Rails2.1に実装された、named_scopeについて紹介したいと思います。
個人的に他のO/Rマッパーにも取り込んでほしい機能だと思っています。
例えば、以下のようなテーブルがあったとします。
・ID
・名前
・年齢
・性別
・都道府県
このテーブルから、次のような取得条件があるとします。
1.年齢が20歳の人
2.性別が女性
3.年齢が20歳かつ性別が女性
この条件3は、条件1と条件2の組み合わせなので、共通化できそうです。PHPでSQLを組み立てるなら、
$sql = 'select * from people where ';
$where = '';
if ($age == 20) {
$where .= ' age = 20';
}
if ($sex == FEMALE) {
if ($where != '') {
$where .= ' and ';
}
$where .= ' sex = '.FEMALE;
}
$sql .= $where;
みたいな感じで、見通しが悪くなります。(実際はwhereを生成するような関数を作ると思いますが)
Criteria系のO/Rマッパー(XoopsObjectとか)だと、
$c =& new CriteriaCompo();
if ($age == 20) {
$c->add(new Criteria('age', 20));
}
if ($sex == FEMALE) {
$c->add(new Criteria('sex', FEMALE));
}
少しは簡潔になりました。
もちろん、Criteriaを実処理の部分に書いてもいいですが、Criteriaを組み立てる部分が冗長なので、通常は別関数とかメソッドとかにすると思います。(XOOPSならhandlerに書くのがいいと思います)
さて、これがnamed_scopeになると、
People.age_20.female
これだけです。
もちろんこれは複合で取得する場合で、単体なら
People.age_20
People.female
というような処理になると思います。
age_20とfemaleを書くだけで、複合した際の処理を気にせず組み立てることができます。
定義はこんな感じになると思います。
class Person < ActiveRecord::Base
named_scope :age_20, :conditions => {:age => 20 }
named_scope :female, :conditions => {:sex => FEMALE }
end
※これらのコードは実際に動作させてないので、動くかどうかの保証はありません。
ORの場合がどうなるかは調べてないのですが、メソッドチェーンで条件を組み立てれるのは、Ruby的で面白いと思いました。
PHPで実装するのは難しそうですが、使ってみたい機能です。

Windowsを使っていたときは、ちょっとしたメモにはOnenoteが便利でした。
共有フォルダにノートをつくっておけば、各PCに保存したメモが自動的に同期されたため、ノートPCでも、デスクトップPCでも同じメモを参照、編集できるというのが気に入っていました。
もちろん、クリップボードから画像をはりつけるというのもOKだったので、Webページ上のちょっとした記事のメモにも便利につかっていました。
同じようなソフトがMacでもないかなぁと探してみて見つけたのがEvernoteです。
http://www.evernote.com/
Evernote を見つけるまでは、GoogleノートブックやGoogleドキュメントを試してみたのですが、オンラインアプリは、ネットに接続できないときに使えないというのが不便で全面的に使ってみる気になれませんでした。
Evernoteで便利そうだなぁとおもうのは、
・オンラインアプリとしても使える
・ローカルアプリとしても使える(WinでもMacでも)
・オンラインとローカルで同期できる
という点です。
MacでOnenoteのように、同期ができて、画像も含めたメモもできるものをお探しの方は、是非Evernoteを試してみてください。
共有フォルダにノートをつくっておけば、各PCに保存したメモが自動的に同期されたため、ノートPCでも、デスクトップPCでも同じメモを参照、編集できるというのが気に入っていました。
もちろん、クリップボードから画像をはりつけるというのもOKだったので、Webページ上のちょっとした記事のメモにも便利につかっていました。
同じようなソフトがMacでもないかなぁと探してみて見つけたのがEvernoteです。
http://www.evernote.com/
Evernote を見つけるまでは、GoogleノートブックやGoogleドキュメントを試してみたのですが、オンラインアプリは、ネットに接続できないときに使えないというのが不便で全面的に使ってみる気になれませんでした。
Evernoteで便利そうだなぁとおもうのは、
・オンラインアプリとしても使える
・ローカルアプリとしても使える(WinでもMacでも)
・オンラインとローカルで同期できる
という点です。
MacでOnenoteのように、同期ができて、画像も含めたメモもできるものをお探しの方は、是非Evernoteを試してみてください。



