ぬるぽを見かけたら 全力でぶっ叩くのみ


by Denullpo Smasher Hammerson
カレンダー
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

Makefile革命

ぶっちゃけ、makefileってめんどい。
…というきっかけから、いろんな派生品が生まれたわけではありますが、
どれも使い勝手は今ひとつ。

その理由は、
・従来のmakefileの記法を踏襲しつつ
・中途半端に高度な機能を盛り込んでて
・拡張機能を覚え直すのに手間かかる割に
・めんどいという点があまり改善されてない
というところにある。

自分がmakefileに求める要件とは
・動的にコマンドを生成して実行する
・依存関係を考慮してコマンドの実行順序を決める
・依存元が更新されたときだけコマンドが実行される
ぐらいか。ならば、先に挙げた不満な点とは全く無関係なので、
単純にその逆をいくのが理想だ。

・従来のmakefileの記法は全く無視して
・便利な機能をとことん追求し
・わざわざ拡張機能覚え直す必要なくて
・めんどさを徹底的に解消する

一見無理難題に見えるが、これは既存の汎用的なスクリプト言語を
ベースにするだけで一通り解決できる。
ここではPHPを使っているが、別にRubyでもPythonでもいい。
汎用的スクリプト言語なら、中途半端な拡張機能特有の仕様不備に
悩まされることなく自前でとことん機能を強化できるし、機能強化の
ために独自の言語体系を覚え直す必要もない。

…ということで、これを実現したらどうなるかのデモ目的で
サンプル付きβ版を公開してみる。
[ymk.zip](YMk's Makefile killerの略…かどうかは謎)
なお、今のところはWindows依存なので悪しからず。

まずは、てけとーに展開
[PR]
by denullpo | 2011-11-19 01:16 | こっち関係
PHPで複数のプロセスを並列動作させるとき、proc_open‍()を使うというところ
までは容易に調べられるであろう。
(プレビューでopen‍()の部分が引っかかった。なんか面倒な仕様になったもんだ。)
が、実際これで並列動作させるコード書いてみると、大抵ある箇所で壁にぶち当たる。
サブプロセスのstdoutやstderrから結果を拾ってこようとすると、その結果が
得られるまで動作が止まってしまい、非同期処理が実現できなくなる。
この問題を解決する模範解答は存在する(stream_select()デスヨ)のだが、
フレームワーク的に面倒なものがある。

そんなわけで別ルート。
"stdoutやstderrから結果を拾ってくるときに動作が止まる"
という現象さえ回避できれば解決なのだ。
動作が止まるのは、stdoutやstderrに書き込まれた量より多くの出力を得ようとして
指定量に達するまで待ってしまうことにある。即ち、書き込み済みのstdoutやstderrの
量を捕捉できさえすれば、そのぶんだけ指定することで待ち時間をなくすことができる。

そのためには、stdoutやstderrの出力をファイルに書き出せばよい。
そうすればファイルサイズから書き込み済みの量が判明する。
で、PHPにはtmpfile()という便利なファンクションがある。
・重複しない適当な名前でファイルを生成してくれる
・このファイルを読み書き両用でopenしてくれる
・サブプロセスに書き込ませながら結果を読み出すことができる
・用済みになったら自動的にファイルを消してくれる
要件ぴったし。

サンプルコード
[PR]
by denullpo | 2011-01-27 03:42 | こっち関係
DOS由来の貧弱renコマンドでは面倒な作業でてきたので、PHPで適当に書いてみた。
正規表現でぶっつけ本番やらかすと大抵失敗するので、テスト機能も入ってます。

とりあえず
% php pregren.php -g *.txt
な感じでリネーム対象ファイル群の列挙テスト
これはglobパターンで書く

次は
% php pregren.php -t *.txt "/^(prefix)(\d+)(suffix)(\.txt)$/"
な感じでリネーム対象部分のマッチングテスト
これはpregパターンで書く
マッチングに成功するとマッチングパターン、失敗したら [*skip*] が出てくる。
-s オプションを付けると、[*skip*]だけを検出できます。

次は
% php pregren.php -T *.txt "/^(prefix)(\d+)(suffix)(\.txt)$/" $2$4
な感じでリネームテスト

テスト結果に問題なければ、
% php pregren.php *.txt "/^(prefix)(\d+)(suffix)(\.txt)$/" $2$4
な感じでテストオプションだけ外してexecute.


なお、自動実行の際は事前にサニタイズしとくヨロシ
さもないと、インジェクションのエ♠ジ♠キ♥

View Source
[PR]
by denullpo | 2010-10-10 11:32 | こっち関係

SimplePVC v0.24

SimplePVC

検索サイトからのリファラから検索文字列等を取り出してログに書き出す
機能が付きました。詳細はDesearch参照。
ついでに、特定のURLをリファラ集計から外すように設定できる機能も追加。
[PR]
by denullpo | 2007-05-02 21:43 | 告知

TreedHTML v0.52

TreedHTML

TreedHTML自体の修正は大したものでもないんですが、Vlimの新機能に対応して
属性フィルタにURLのフィルタリングが付きました。


$cfg='';
$cfg['ds']='w'; // 照合対象がホワイトリストであることを示す
$cfg['dl']='^http$';
$cfg['xs']='w'; // 照合対象がホワイトリストであることを示す
$cfg['xl']=array('^jp(|e)g$','^png$','^gif$');

$flt['t']['img']['a']=array(
  'm'=>THTMP_TAGMODE_SOLO, // 終了タグなしであることを示す
  'a'=>array('src'=>vlim_url($cfg))
);

ってやると、imgタグのsrc属性にはスキーム名httpで且つ拡張子jpg,jpeg,png,gifしか
使えないように設定できます。ここで一つ問題点があるとすれば、拡張子のないURLは
拡張子フィルタに通ってしまうことでしょうか。これは相対指定などでスキーム名の
ないURLでも通るように配慮したためで、今のところ仕様。(改善案考えとくけど)

で、さらに

$cfg['hd']='b'; // 照合対象がブラックリストであることを示す
$cfg['hl']='\.exblog\.jp\/'; // ←正規表現なので、 . や / にはエスケープ要るのよ

と設定に追加することで、.exblog.jp にある画像を排除することなんかが可能。

念のため説明しとくと、
ホワイトリスト: 条件に一致したものだけ許可する
ブラックリスト: 条件に一致したものを排除する
ということで
[PR]
by denullpo | 2007-04-28 02:52 | 告知

TreedHTML v0.51

TreedHTML

2つの機能追加の他、HTML/XMLパーサの修正いくつか。

・必要なライブラリをPHPlibVCで自動確認
ライブラリの絡みが複雑になってきたので、treedhtm.php内でヴァージョンチェック等を
自動的に行うようにしたです。NGだった場合はエラー吐いてexitするので悪しからず。

・属性値リミッタ
属性値の種別だけでなく、範囲制限やホワイトリスト照合もできるようになりました。
例えば、aタグのtarget属性を_blankと_topだけ許可するといった芸当もできます。
機能詳細はVlim参照。
[PR]
by denullpo | 2007-04-25 21:01 | 告知

TreedHTML v0.5

TreedHTML

HTML/XMLパーサを追加しました。
タグ/属性フィルタが付いているので、掲示板のHTML対応化等にも使えます。
というか、そのために作ったんですが。

なお、今回のヴァージョンからNameFilterも要るので一緒にダウンロードしといてくだちい。
[PR]
by denullpo | 2007-04-19 19:10 | 告知

TreedHTML v0.42

TreedHTML

変数ビュアを追加しました。
HTML表示向けに出力するので、print_r()みたいにHTMLの構造壊して出力が
ぐちゃぐちゃになる問題が解消されます。

使い方は、対象の変数を thtm_vv_snap() に渡すだけでHTMLイメージにしてくれます。
これをHTMLとして出力する場合、さらに thtm_export() へ渡すべし。

a0101404_43891.gif
複雑な配列もこの通り →
変数型も見た目で判別できるようになってま
[PR]
by denullpo | 2007-04-18 04:06 | 告知

Itah3重傷

不具合発生で凄いことになったらしく、あっちの鯖缶に叱られたので入院。
1年以上稼動してたのに何故今更って感じなんですが、4月に入ってから突然botからのPVが急増したのと関係していそうな。
とりあえず、もっと作り込まなきゃいけないことだけは解った。

[その後]
実験場を自鯖に移した
ユーザ認証がうまくいってないけど、どうせ作り直すのでこのまま放っとく予定。

go to:
[雑鍋帖]
[PR]
by denullpo | 2007-04-02 19:19 | 告知