timeコマンド

コマンド処理時間を計測するLinuxのコマンド。

time (コマンド名)

コマンドの経過時間(real)、計算時間(user)、入出力時間(sys)を知ることができる。

array_mergeと+演算子

配列の結合関数array_mergeと+演算子には挙動の違いがあるので注意したほうが良い。
<?=var_dump(array(‘A’ => ‘a’, ‘B’ => ‘b’) + array(‘A’ => ‘c’, ‘D’ => ‘d’)); ?>
<?=var_dump(array_merge(array(‘A’ => ‘a’, ‘B’ => ‘b’), array(‘A’ => ‘c’, ‘D’ => ‘d’))); ?>

array(3) {
[“A”]=>
 string(1) “a”
 [“B”]=>
 string(1) “b”
 [“D”]=>
 string(1) “d”
}
array(3) {
 [“A”]=>
 string(1) “c”
 [“B”]=>
 string(1) “b”
 [“D”]=>
 string(1) “d”
}

<?=var_dump(array(‘A’ => ‘a’, ‘B’ => ‘b’) + array(‘C’ => ‘c’, ‘D’ => ‘d’)); ?>
<?=var_dump(array_merge(array(‘A’ => ‘a’, ‘B’ => ‘b’), array(‘C’ => ‘c’, ‘D’ => ‘d’))); ?>

array(4) {
 [“A”]=>
 string(1) “a”
 [“B”]=>
 string(1) “b”
 [“C”]=>
 string(1) “c”
 [“D”]=>
 string(1) “d”
}
array(4) {
 [“A”]=>
 string(1) “a”
 [“B”]=>
 string(1) “b”
 [“C”]=>
 string(1) “c”
 [“D”]=>
 string(1) “d”
}

正規表現

多くのプログラミング言語でも正規表現は実装されているが、実はかなり奥深い。そして、普通の人が聞いたら間違いなく「性器表現」と勘違いする不思議な言葉だ。現在、Oreillyから出版されている『詳細 正規表現 第2版』を読んでいて改めて正規表現について認識する必要があると考え、以下のとおりまとめてみた。これは今後順次改訂していく予定です。
正規表現の種類
正規表現にはPerlやPHP, Java, .NET, Python, Ruby, sedに実装されているNFAとawk, egrep, MySQLで実装されているDFAというものがある。NFAは従来からある正規表現であり、記述方法で動作速度が決まる。つまり、どれだけでも遅い正規表現を書くことが出来る(ひどい場合ではSegumentation Faultとなり、実行できない)と言うことになる。NFAで正規表現を記述するにはそれなりの知識と経験が必要になる。
一方で、DFAは最適化される正規表現であり、効率の悪い正規表現も実行動作前(コンパイル時)に最適化されて実行することになる。
文字クラス
リテラルをグループ化して、いずれか1つをあらわす。
[a-z] 小文字のアルファベットすべて
[^a-z] 小文字のアルファベット以外(「^」を最初におくと文字クラスが否定される)
[0-9] 数字すべて
[a-zA-Z] 大文字小文字を含むアルファベット
[a-zA-Z&[^mM]] 大文字小文字を含むアルファベット。但しMおよびmは除外される。
グループ
複数のパターンを表す。
(a|bc) aまたはbc
(?!a|bc) aでもbcでもない(否定形)
量子指定子
前に付くリテラルならびに文字クラス、グループを修飾する。
* 0文字以上
+ 1文字以上
? 0または1文字
{2,5} 2文字以上5文字以下
{,5} {0,5}の省略
{3,} 3文字以上
NFA拡張(Perl拡張)
NFA拡張にはキャプチャなし括弧(?: …)、先読み(?= …)、戻り読み(?<= …)がサポートされている。
(?:aaa|bbb) aaaまたはbbb。但し(aaa|bbb)と異なり、括弧の中は$1で取得できないようにする(つまりメモリを節約することができる)。
(?<=aaa)bbb 直前にaaaがくるbbbにマッチ(先読み)。
(?<!aaa)bbb 直前にaaaがこないbbbにマッチ(否定先読み)。
aaa(?=bbb) 直後にbbbがくるaaaにマッチ(戻り読み)。
aaa(?!bbb) 直後にbbbがこないaaaにマッチ(否定戻り読み)。
・モード修飾子
多くの言語の場合には、大文字小文字の区別なしや改行を無視するiやxのモードを言語側で用意している。たとえば、Perlでは
$a =~ /a-z/i; #大文字小文字のアルファベットにマッチ
$a =~ /abc
def/x; #abcdefにマッチ(正規表現内の改行とタブを無効化する)
だが、正規表現内でもこれが利用できる。
(?i:[a-z])、(?:x:abc
def)で代用できる。iモード修飾子の場合には、正規表現内で大文字小文字を区別しないケースとするケースを混在させられる便利な修飾子といえる。
・欲張り型と非欲張り型
NFAにはバックトラックと言う機構によってパターンマッチングを行っている。バックトラックを抑止する方法が欲張り型であり、後続のマッチ文字列に配慮することなくマッチングする。逆に量子指定子の働きを最大限抑制する方法が非欲張り型である。いずれもNFAでサポートされている。
.++または(?>.+) 任意の文字列を欲張り型でマッチ(この場合はほとんど全ての文字列にマッチすることになり、後続するマッチ文字列の指定があれば失敗することになる)
.+? 任意の文字列を非欲張り型でマッチ。.+?aは[^a]+と同義となる。また、.*?aは[^a]*と同義。バックトラックが起こらない分だけ、それぞれ同義のマッチ文字列の方が早い。

Google Mapsでの緯度経度を調べるツール

高橋登史朗さんの運営するAjaxライブラリにGoogle Mapsでの緯度経度を調べるツールが公開されていたのでリンクします。住所から緯度経度を調べるツールはあったんですが、必ずしも正確ではなかったので、このツールで微調整するとよさそう。
あと、GMap+YUI+じゃらんAPIをマッシュアップしたツールも紹介されていて、これは感激しました。ここまでくるとWebをつかってできないことはないんじゃないかという錯覚に陥りそうになります。

テンプレートを共通化する

 Symfonyではvalidateディレクトリ内にあるconfirm.ymlに定義されたルールが存在しないか、ルールに合致していれば、templateディレクトリ内の(アクション名)Success.phpが呼び出されるが、ルールに合致しない場合には(アクション名)Error.phpが呼び出される。
 入力内容のエラー処理は多くの場合入力前のテンプレートにエラーを付けて表示したりするケースが多いので、これでは同じ内容のテンプレートを2つ書かなければならず問題がある。
 そこでactionsディレクトリ内にあるaction.class.phpのhandleError(アクション名)関数をオーバーライドして戻り値を設定してあげるとテンプレートを共通化できる。
※Confirmアクションの例(ここではregistアクションからconfirmアクションに遷移するケースを考える)

public function handleErrorConfirm()
{
//通常テンプレートを返す
return sfView::SUCCESS;
}

なお、エラーメッセージはテンプレート中(今回の場合には、registSuccess.php)に

echo form_error(‘nickname’);

などとすればよい。

YAHOO.widget.Calendar

YUI(Yahoo UI Library)のカレンダーを出力できるライブラリシングルカレンダー版を作成しようとしたらCalendar2upクラスに存在するsetChildFunction関数に該当する呼び出し関数はCalendarクラスには、存在しないことが判明。
仕方なくdivタグにonselectイベントを追加して対応しようと思ったが、onselectイベントは利用できず、変わりにonclickイベントが利用できた。しかし、onclickイベントではカレンダーのどの部分をクリックしても実行されてしまうので、サンプルにあるような挙動をシングルカレンダーでは実現できなかった。
今後もテストを繰り返して挑戦してみたい。

“YAHOO.widget.Calendar” の続きを読む

キーワードアドバイスツール

SEMを行う際にどのようなキーワードが効果があるかを検証するツールとして有用。SEOの際もどのようなキーワードにユーザーが関心があることを認識しておく必要はあるかもしれない。

Overtureが提供するアドバイスツールです。類似キーワードというわけではありませんが、特定のキーワードを入れた際に複合キーワードで検索するケースをランキングで表示してくれます。抽象キーワードは単価は高いですが、複合キーワードで購入すれば単価はずっと安くなります。ただ、安くても検索されなければ同じなので、このようなツールでチェックして、効果的で勝つ単価の安いキーワードを見つけることができるのです。

Adwords Editor

Google Adwordsの出稿管理をクライアントで行うことができるツール。
http://services.google.com/adwordseditor/intl/ja/よりダウンロードできる。
従来からまとまった出稿を行う際には、Adowrds APIなどの利用という選択肢があったが、月ごとの出稿上限などが決められてしまっており、また出稿に際してはAPIを使いこなす必要があり、ハードルが高かった。
今回、このツールが発表されたことにより、出稿ごとにページ遷移を繰り返す必要がなく、まとめてデータを入れた後で出稿が可能になり、非常に軽減されたように思える。
実際に使ってみたところ、一部動作がぎこちないが、おおむね良好に使える。但し、最近拡張された配信時間設定などの細かい設定はできない。
Googleはクライアントアプリケーションを全てウェブアプリケーションにとって変えようとしている流れを作っているのに、皮肉にも出稿アプリケーションはクライアントソフトウエアをリリースすることになるとは。