トップ «前の日(03-28) 最新 次の日(03-30)» 追記

2002|01|02|03|04|05|06|07|08|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|02|03|04|07|

2003-03-29

_ eclipse 2.1+WebStudio 0.3.4 (20:18)

遅れに遅れていたWebStudio 0.3.4(eclipsePHPプラグイン)が出ていたのでアップデートした。ら、よく見たら0.3.4はeclipse 2.1以降用だったので動かなかった。ちょうどeclipse 2.1も正式リリースが出ていたところだったので、そちらもアップデート。しかし、上書き上書きのアップデートのためかeclipse自体が起動しなくなってしまった。

仕方ないのでworkspaceだけを残してすべて抹消。eclipse 2.1から順番に入れていく。が、順番に解凍してコピーしていく方式ではうまくWebStudioが認識されない。前よりもインストール周りがシビアになったかな? しょうがないんで、もう一度全部消してからeclipse SDKだけをインストールして起動確認。以降、一つインストールするごとに起動確認をしていったら、無事eclipse 2.1+WebStudio 0.3.4が動くようになった。

あとはその他のプラグインの復旧だけど、まあそれ以外は遊びでしか使っていないから急がなくてもいいか。どうも2.0から2.1のバージョンアップでかなり互換性が怪しくなったみたいだから、各プラグインの2.1対応版が出てから動いてもいいのかも。

ちなみにeclipseのLanguage Packsは2.0.x用を使って大丈夫っぽい。多少日本語化されない場所もあるけど。

関連URL


2004-03-29

_ deferとWScript.Shell.Runの第3引数 (13:51)

<script type="text/javascript" defer>
var shell = new ActiveXObject("WScript.Shell");
shell.run("notepad.exe", 1, true);
alert("end");
</script>

みたいなスクリプトで、shell.runの第3引数がtrue(終了するまで待つ)になっているのが効かないのはどうしてだろう? よりローカルな設定ほど強力であるというのが一般的だと思うんだけど、defer設定は何よりも強力ってことなのかなー。あと、shell.runの前に

alert("begin");

とか入れると、"begin"自体は表示されずに、"notepad.exe"が実行され、"notepad.exe"を閉じると"end"が表示される時もあるようだ。「時もある」というのは、(タブブラウザなんかで)裏で他のウィンドウをアクティブにしたりすると、突然"end"が表示されたりすることもあって、いまいち挙動が安定しなかったりするから。

あんまりJavaScript、WSH方面に深入りする気はなかったんだけど、この辺ってやり始めると結構深そうだな。いわゆるバッドノウハウ系っぽいけど。


2005-03-29

_ JavaScriptでpreg_replace_callback (17:16)

WikiParserをJavaScriptに移植してみようかと思ったら、preg_replace_callback相当の正規表現(Perlで言うと/eg)が見あたらない。っつーか、ないんだよね?

しょうがないんで、こんな感じで動かしてみたんだけど、なんとも不格好な感じ。もうちょいいい書き方ないかなー。

function replace(str)
{
  str = str.replace(/(123)/g, "' + callback('$1') + '");
  str = str.replace(/'/g, "\\'");
  str = str.replace(/\\' \+ callback\(\\'(.+?)\\'\) \+ \\'/g, "' + callback('$1') + '");
  str = eval("'" + str + "'");
  return str;
}

function callback(str)
{
  str = eval(str) + 100;
  return str;
}

test = "sdga123lkjdgas1234fasdfas";
alert(test);
result = replace(test);
alert(result);

ちなみにテンポラリの式をわざと対象のstrに含まされると誤動作するけど、大して危険性もないだろうということで放置。

正解は

malaさんからきれいな解答を教えてもらいました

function replace(str)
{
  str = str.replace(/123/g, callback);
  return str;
}

function callback(str)
{
  str = eval(str) + 100;
  return str;
}

test = "sdga123lkjdgas1234fasdfas";
alert(test);
result = replace(test);
alert(result);

これでOK。replaceの第2パラメータに関数を渡すと、その関数のパラメータとして、lastMatch(というかマッチした全体)、$1、$2、……が渡されて呼ばれる模様。で、その関数の戻り値として置換結果文字列を返してやればいい。

str = str.replace(/(123)/g, callback($1));

とか

str = str.replace(/(123)/g, callback(RegExp.$1));

なんて表現は試してみたんだけどなー。

ちなみに後者の表現だと、RegExp.$1はここの/123/gではなく、その前に評価された正規表現の結果の$1を受け取っちゃうんで、微妙に惜しい結果になった。

_ WikiParserをアップデート (18:19)

主な変更点としては、

  • プラグインとして、従来の関数型プラグインに加え、プラグインクラスに対応。
  • プラグインクラスでは、同一プラグイン内でのデータの保持、イベントコールバックによるパーサーからの呼び出し、に対応。要は、footnote(注釈)プラグインみたいなことができるようにした
  • パースしている元テキストへのアクセス手段を用意。それに伴いフィルタに対応。フィルタ(プラグインのイベントコールバックの実装と同様)を利用することで、パース処理実行時の元テキストへの加工処理が可能になる。要は、tdview.phpとtdiary_categoryプラグインみたいに、カテゴリ記法に対して前処理でリンクを張ったりできるようにした。
  • いくつかのバグをフィックス。

一応現状の基本仕様でフィックスさせつつ、細かいメソッド名とかをもうちょいいじる予定。プラグイン連携のためのメソッドもいくつか追加するかも。

Tags: PHP Wiki
本日のツッコミ(全2件) [ツッコミを入れる]

_ mala [同じようなことで悩んだことがあるのですが、 置換後の文字列に関数を指定することができるようです。 指定した関数には、..]

_ ishinao [うわ、そんなやり方が! というか、 result = test.replace(/123/g, callback($..]


2006-03-29

_ PHP 5.1.2-win+MySQL 3.23.58-win

の組み合わせでMySQLにアクセスすると、mysql関数を使ってもPDOを使っても、selectをした後にApache(mod_php)が落ちる(insertとかは問題ないいや、insertだけでも落ちてたっぽい)。原因を究明するのが面倒なんで、MySQLを4.1.15に換えたら問題なくなった。まあそろそろMySQL 3系を使い続けるのもなんだなーと思いつつあったんで、ローカルテスト環境も4.1系でいいか。

Tags: PHP MySQL PHP5

_ date.timezone

PHP 5では、php.iniにdate.timezoneという項目が追加されていて、環境変数TZがセットされていないようなシステムで、date.timezoneも設定されていない場合はwarningが出るようになったのね。

Tags: PHP date PHP5

_ Zend Frameworkをどう使うか その19

フレームワークとしての基本機能を一通りチェックしたんで、実際に何か(ある程度実用的な)アプリケーションを作ろうかと思って試してみたんだけど、現時点ではまだサンプルアプリ以上のものを作るのはきついな。

もちろん動くものを作るだけならなんとかなるんだけど、Zend Frameworkベースのアプリケーションとして、ある程度の将来互換性も確保できるように作ろう、とか思うと現時点の完成度ではまだ無理だ*1

一応Controller周りは結構完成度が高そうなんで、そこだけならばいけそうではある。かなりフィックスした仕様に見えるし、たとえデフォルトでの挙動が変更されたとしても、現状の拡張性の枠組みの中でカバーできるであろう柔軟性を備えている。プラグインの機構も応用範囲が広そうだ。

Viewに関しては、現状が最終仕様とはとても思えないんで、おそらくまだまだ互換性のない仕様変更があるだろう。っつーか、現在のZend_Viewを使うくらいだったら、もっとこなれた他のテンプレートエンジン(Smartyとか)を使った方が、現時点ではずっとましだろう。

Zend_Logは、ログの保存がstaticメソッドに集約されたという設計はいいんだけど、デフォルトでCompositeじゃないのが使いにくい。自前のComposite Adapterとかを使ってカバーするという手もあるけど、その辺には仕様変更もありそうだし、現時点ではまだPEAR Logを使っておいた方がましかもしれない。

Zend_Db周りは非常にビミョー。Zend_Db_Adapterはあれで十分なんで、そのままいけるかなーと思いつつも、O/Rマッパー系は現状では実用レベルじゃないよなー。1テーブル単位のselectしかサポートしないO/Rマッパーで完結できるような設計なんて現実的じゃないし、ちょっとでもjoinしたければとたんにO/Rマッパーはつかえなくなっちゃうし。

Zend_Db_Tableにjoin系の機能が追加されるのはいつなんだろう? 一応Zend_Db_Inflector::plural(複数形化)とか用意されているし、そっち方向の拡張を行う気はあるんだよね。

ただまあ、すぐに実装されるってことはなさそうだよなー。Zend_Db_Adapterには文句はないから、ひとまずそれ+SQL文でがりがり書くのが現時点では一番無難か? それとも他にいいO/Rマッパーはないかなー。でもZend_Db_Adapterと連動するとなると、無理だよなー。

*1 もちろんPreview Releaseなんだから、そのくらいの完成度であることに文句はない


2007-03-29

_ 子供発熱

久しぶりにキタ━━━━(゜∀゜)━━━━ッ!!?って感じでしたよ。下の子供が熱を出したんだけど、最初は38度程度のジャブだったのが、気がつくと39度台後半で安定し、一時は40度という初めて見る大台にまで乗って、さらにゲロ&下痢&鼻血というオプション攻撃までついて、なんかもう大盤振る舞いって感じ。病院に最初に行ったときにはまだ熱がそれほど出ていなかったんで、インフルエンザの検査を受けることができず、39度台になってからもう一度行ってインフルエンザの検査を受けたところ、結局インフルエンザではないという結論に。といっても、下の子はまだ小さいんで強い薬は処方してくれないから、たとえインフルエンザだったとしても、特に治療は変わらない(喉とか胃腸とかの対症療法レベルの弱い薬を飲みつつ、解熱剤は使わずに熱を出しながら我慢して過ごし、そのうち熱が下がるのを待て)んだけど。今朝方までずっと熱が下がらなくて、どうしたもんだろうと思っていたところ、今朝になってようやく37度台前半まで下がってくれてほっと一息。いくら幼児とはいえ40度はやり過ぎだよ。やめてくれ。っつーか、俺の方もいまだに体調が戻らないんだよなー。

Tags: 子供 日常