タイトル/名前 | 更新者 | 更新日 |
---|---|---|
YakiBiki/Cookbook/Permalinkを作りたい場合 | msakamoto-sf | 2009-01-24 19:34:28 |
日記/2009/01/24/YakiBiki 0.9.0 にアップグレードしてみた。 | msakamoto-sf | 2009-01-24 19:25:22 |
日記/2009/01/21/".svn"ディレクトリをまとめて消去するfindとxargs | msakamoto-sf | 2009-01-21 09:14:20 |
日記/2009/01/18/pixivに入って良かったこと。 | msakamoto-sf | 2009-01-18 11:35:09 |
日記/2009/01/12/PHPMailer for PHP4 2.0.3のclass.smtp.phpにバグ? | msakamoto-sf | 2009-01-12 22:29:33 |
日記/2009/01/12/YakiBiki 0.9.0 リリース | msakamoto-sf | 2009-01-12 22:17:29 |
TODO/YakiBiki/0.9.0 | msakamoto-sf | 2009-01-12 20:34:23 |
技術/TDD/HttpUnit解説リンク | msakamoto-sf | 2009-01-11 17:44:04 |
日記/2009/01/10/「お前ら勉強しろよ」と嘆く前に。 | msakamoto-sf | 2009-01-10 00:32:55 |
日記/2009/01/06/YakiBikiのログ出力追加でメモ | msakamoto-sf | 2009-01-06 16:43:52 |
2008/11時点でのYakiBikiは、デフォルトではPermalinkをサポートしていません。
これはmod_rewrite相当の機能が搭載されていないWebサーバーでも実行できるようにするために、やむなく断念しました。(*1)
ですが折角mod_rewrite相当の機能が搭載されているのであれば、使いたいよね・・・ということで、早速自分で調整してみました。
.htaccessにこんな感じのmod_rewriteの設定を付け足しました。
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -f RewriteRule .* - [L] RewriteRule ^$ index.php [QSA,L] RewriteCond %{REQUEST_FILENAME} !-f # view mode RewriteRule ^view\/([0-9]+)$ index.php?mdl=view&id=$1 [L] RewriteRule ^view\/([0-9]+)\/$ index.php?mdl=view&id=$1 [L] RewriteRule ^(.*)$ index.php [QSA,L] </IfModule>
viewモジュール・・・つまり通常のページ詳細表示の場合だけに対応を絞り込みました。YakiBiki内での「記事へのリンク」は通常、viewモジュールへのリンクになるからです。
この段階でURLから ".../view/10" とかしたりして、ちゃんと表示されるか確認してみます。
yakibikiの plugins/hook ディレクトリに
yb_hook_make_url.php
というのがありますが、これがYakiBiki内のURLを生成する関数のデフォルト実装です。
plugins/hook 以下にはユーザが挙動をカスタマイズ出来るようなフックポイントを置く・・・筈なのですが、2008/11時点の 0.0.1-alpha3 時点ではまだこれ1つだけなんです・・・。
とまれ、まずはこれをコピーし、適当な名前にします。今回であれば
yb_hook_my_make_url.php
とします。
続いてyb_hook_my_make_url.phpの中の関数名を直します。
function yb_hook_make_url() → function yb_hook_my_make_url()
細かいコードの説明は省きますが、コピーした方で関数からreturnする直前を次のように修正します。
【修正前】
if (count($_params) > 0) { $base .= $_query; } return $base;
【修正後】
if (count($_params) > 0) { $base .= $_query; } // ここのifブロックを挿入 if ($module == 'view') { if (isset($query_params['id']) && is_numeric($query_params['id'])) { $base = _YB('url') . 'view/' . $query_params['id']; } } return $base;
追加した新しいmy_make_urlフックに付け替えるには、config.phpに以下の行を付け足します。
_YB('hook.convert.make_url', 'my_make_url');
少し解説します。フックを使用する場合、次のようにyb_Util::hook()を実行します。(2008/11, 0.0.1-alpha3時点)
$ret = yb_Util::hook('フック名', $args);
ここで _YB('hook.convert.フック名') が指定されていない場合、
plugins/hook/yb_hook_フック名.php
をロードして、
yb_hook_フック名()
を実行します。
もしも _YB('hook.convert.フック名') が指定されていて、'my_フック名'となっていれば、
plugins/hook/yb_hook_my_フック名.php
をロードして、
yb_hook_my_フック名()
を実行します。
この仕掛けを使用して、''YakiBikiのデフォルト実装を残したまま''、ユーザーのカスタマイズフックを有効化できます。
以上でviewモードについてはPermalinkを作る事が出来ました。YakiBikiは内部リンクについては全て動的に生成していますのでWikiキャッシュの影響はありません(=キャッシュクリアは不要)。
やっぱり「バックアップ機能」が無いと手間だなと思う。fix-perms.phpで一旦パーミッションを変更した後、データファイルをバックアップする必要がある。
YakiBikiは自分でディレクトリを作ってしまうので、動作権限やumaskの値によっては一般ユーザでYakiBikiが作成したディレクトリ中のファイルにアクセスできなくなる場合があり、特に共用レンタルサーバではそうなる確率が高い。
というかこのサイトのレンタルサーバがそう。
なので、出来ればYakiBiki自身がtar.gzなりzipファイル圧縮を生成してDL出来るようにしてくれると大変に助かるけど、まぁそれはまた後々。
細かい点だけど、カテゴリがアルファベット順に並ぶようになって、多少使いやすくなってほっとしてます。
find <path> -type d -name .svn | xargs rm -rf
以上。
いえ、チェックアウトディレクトリが要らなくなって(SVNのリポジトリが吹き飛んで、開発初期だったので手動でSVNサーバからリストア→リポジトリをゼロから作り直し)、でも念のためローカルコピーは取っておきたいのだけれど、間違ってsvnコマンド叩いて古いのが入ってしまうのも困るなと(リポジトリのURLは同一なので)。
なので、.svnディレクトリをまとめて消去したかった次第。
・知り合いの漫画家がpixivに入ってて、リアルタイムで落書きとか絵チャットとかを見れるライブ感が楽しい。
・東方の萌え画像がGETし易い。
・アナログ画像の絵師が意外と面白い。
YakiBikiでメール通知機能をつけようと思って、LGPLのPHPMailer for PHP4 2.0.3(2009/01時点での最新)をDLしてSMTPドライバで動かしてみたが・・・
http://phpmailer.codeworxtech.com/index.php?pg=phpmailer
[12-Jan-2009 10:55:41] PHP Notice: Undefined variable: str in ...\yb-php\libs\phpmailer\class.smtp.php on line 1043
とか出て、MTAが250返してるのに get_lines() でそれが取れていないようで、いろいろと失敗する。
で、class.smtp.php のget_lines()をデバッグしていたら・・・
while($str == @fgets($this->smtp_conn,515)) { ^ !?
ここで上記Noticeが出力されていたらしい。
気になって、「そういえばXoopsもPHPMailer使ってたよな・・・」とXoopsCubeの2009/01/12時点でのlegacy版をDLして中を覗いてみたら、PHPMailerは2.0.2を使っていた。で、問題の箇所は
while($str = @fgets($this->smtp_conn,515)) { ^
となっていた。まぁ当然ですよね。
PHPMailer開発元へのレポートはまだ挙げたりしてないんですが、とりあえずYakiBikiはそこ直したやつを入れてます。皆様、ここのところ注意して PHPMailer for PHP4 2.0.3 をご利用下さい。
YakiBiki 0.9.0 をリリースします。
https://sourceforge.net/forum/forum.php?forum_id=906879
SourceForge.netのプロジェクトサイトよりダウンロード可能です。
http://sourceforge.net/projects/yakibiki
TODO/YakiBiki/0.9.0 でフリーズしていますが、主な変更点を以下に示します。
本サイトにて自分で使ってみた結果と、お仕事で要求された機能がこれで一通り揃った格好です。
当初はバージョン番号は 1.0.0-rc1 のつもりでしたが、まだ早すぎる気がしますので、0.9.0としました。
1.0.0へ向けての目標は TODO/YakiBiki/1.0.0 の方に移しました。
2007年の10月よりYakiBikiを初めて、既に1年と3ヶ月が過ぎています。これまでの間何とか続けて来れたのは、周囲の理解があってこそと思います。自分のサイトでも使い始めることができて、ようやくお見せできる形になりつつあります。ひとまずこの場で御礼申し上げます。
YakiBiki 0.9.0 目安TODOリスト
Windows上でのtar.gz圧縮は避ける事。ツールによってファイル名がおかしくなったり空ディレクトリが無視されたりして、トラブルの遠因になりうる。
SVN Repository Browser : http://yakibiki.svn.sourceforge.net/viewvc/yakibiki/
2009-01-12, rev521にて0.9.0へフリーズ
中身を検査するにはHttpUnit, 負荷テストならJMeterという使い分け。
なおHttpUnitはRhinoと組み合わせることでJavaScriptによる画面遷移もエミュレートできるようだが、JavaScriptにエラーがあったりIE独自のJSコードではおかしくなる場合は、JSサポートをOFFにする。
なお商用製品として1万円を切る(安い・・・)、高機能なWebテストツールとして "SteadyForm" というのを見つけた。テスト駆動開発を強く意識している会社の製品。
その人を見下げた態度がまず鼻につくんですよ。だから誰もあなたの言うことを聞こうとしない。
同僚に見下される周囲の気分を想像もせず、実際の現場で采配を振るったことすらない人間が、優等生気分で「勉強しようよ」と叫んだって、誰も振り向かない。あなたは結局優等生で居られる自分しか見ていないんだから。
最前線で地獄を見ること無しに、たらたらと雑誌やWebの記事を眺めてちょろっと手を動かしただけで「自分は周りの奴らより勉強してるんだ、偉いんだ」と悦に浸りたいだけでしょ?
そんなに最新技術が好きならベンチャーに転職すれば?自分で起業すれば?
結局見下せる人間が必要なんだよね。自分より頭が悪いと思える人間が周りに居ないと駄目なんだね。
本当に実力をつけようとしている人間は、もっと謙虚だと思うよ。「自分は違う」と悦に浸っている暇なんて無いんじゃない?
まずあなたが先に頭を下げるべきじゃないの?何様のつもり?
というわけで、「あなた」=「自分」のことでした。
ログ出力を追加しようと思って弄っていて、ふとログフォーマットどうなってたか見直してみた。
PEARのLogライブラリを使っているのだけれど、$identの初期化を
$ident = "'" . yb_Var::server('REMOTE_ADDR') . "' - " . session_id(); → '192.168.1.1' - abcd123456789...
みたいにしていた(yb_Logクラス)。「ああ、そういえばそうしていたなぁ。」と懐かしくスルーしようとしたが。
「あ、session_regenerate_id() されたら追えなくなるじゃん。」
yb_Session::start()の中で、一定期間を経過していたらyb_Session::regenerate_id()を呼ぶようにしている。これが動いてしまうと、途中から別のセッションIDになるため追跡できなくなる。
regenerateするタイミングで新旧のセッションIDをログに出すか・・・とも思ったんだけど、yb_Sessionの中でyb_Logが混ざりこむのってなんか気持ち悪い。
なので、$identの初期化はこんな感じに、user_contextから取得したユーザ名も括弧付きで出すように修正した。
$uc = yb_Session::user_context(); $ident = "'" . yb_Var::server('REMOTE_ADDR') . "' - " . session_id() . '(' . $uc['name'] . ')';
ログ出力はyb_mdl_系の、つまりロジックレイヤーに埋め込むわけだけど、
そんな感じで。データ変更の場合のログも、データのIDとあとタイトルとか関連IDとか。長くしない。
データのviewやrawでのダウンロードは・・・Apacheのログで良いよね、ということで入れてない。
ただしDataTypeがAttachの時のrawダウンロード時のみ入れておいた。意識してclickしないとDLは発生しないし、「誰がいつデータをDLしたか」というのを見たい、というのが元々の目標でもあるので、まぁここについては入れておく。画像の場合はviewのタイミングでimgタグのsrc属性経由でrawモジュールが動いてしまうので、あんまり意味ないし、「誰がいつ」をきっちり取りたいという対象でもない。
とりあえず以上。