Geeklogを全ての人の手に!

ようこそ! Geeklog増殖計画
2008年11月21日(金) 09:15 (JST)

記事を友人にメールする 印刷用画面

Pollsプラグインのバグ

Geeklog -- Plugins

Geeklog-1.5.1のpollsプラグインで新規アンケートを保存する際に既存のIDを指定すると、黙って上書きされるというバグを本家のバグトラッカーに登録したところ、「Mercurialのリポジトリでは修正されているはずなので確認してくれ」という返事が来た。TortoiseHGでpullして確認したところ、実際このバグは修正されていた。

ここまではどうということのない話なのだが、じつはリポジトリの開発版をインストールする際に、"Undefined function curl_init" というこれまで見たことのないエラーが出た。コードを調べてみると、public_html/admin/lib-install.php の545-554行目で、指定されたURIが実際存在するかチェックするのにcURL関数を使用していた。

Geeklogの次のバージョン(1.5.2?)では、必要とされるPHPの最低バージョンを現行の4.1.0から引き上げる(予想では、4.3.xくらい。4.x系列切り捨てはしばらくなさそう)ことが話題に上っている。これに加えてcURLエクステンションが必要となると、また敷居が高くなる。正式版では、PEARのHTTP_Requestなどで代用されることを望む。

掲示板 件名 最新投稿
記事を友人にメールする 印刷用画面

Geeklogの性能測定(その3)

GeekLog

前々回と同じ環境で(config.class.phpのキャッシュ機能あり)、CTL(Caching Template Library)あり・なしで違いを測定してみた。時間の単位はms(ミリ秒)。結果は以下の通り。

CTLなし CTLあり
平均実行時間(ms)平均比率(%)項目平均実行時間(ms)平均比率(%)
9.89.6index.php自体の読み込み16.213.6
30.429.8lib-common.phpインクルード30.225.4
28.427.8COM_siteFooter()34.429.0
20.219.8COM_siteHeader()21.618.2
7.87.7STORY_renderArticle()10.28.6
2.82.7lib-story.phpインクルード3.02.5
102.0 全体118.8

意外な感じがするが、自分が使用している環境ではCTLの恩恵を感じられず、むしろほんのわずかだがスピードダウンする。CTLとは違う方法で、テンプレートライブラリをハックする方法を考えてみようか。

記事を友人にメールする 印刷用画面

Geeklogの性能測定(その2)

GeekLog

前回と同じ環境(config.class.phpのキャッシュなし)で、public_html/index.phpにアクセスしたときに、lib-common.phpインクルードにかかる時間の内訳(5回の平均値)。時間の単位はms(ミリ秒)。0.2ms以下のものは適当に省いている。

項目実行時間比率
lib-common.php自体の読み込み19.449.0%
config->initConfig()9.423.7%
config->load_baseconfig()3.17.9%
lib-syndication.phpインクルード1.53.8%
staticpages::functions.incインクルード1.33.3%
links:functions.incインクルード0.82.1%
lib-plugins.phpインクルード0.71.7%
japanaese_utf-8.phpインクルード0.61.4%
polls::functions.incインクルード0.51.2%
smapx::functions.incインクルード0.41.1%
calendar::functions.incインクルード0.30.9%
SEC_getUserGroups()0.20.6%
合計39.6 

意外な感じがするのは、プラグインのfunctions.incをインクルードする時間が長いこと。同梱されている標準の5つのプラグインだけでも3.3ms(全体の8.7%)かかっている。

ついでに、public_html/index.php自体も計測してみた。

記事を友人にメールする 印刷用画面

Geeklogの性能測定

GeekLog

Geeklog-1.5.0からは$_CONF変数がデータベースに格納されるようになったが、その実装方法があまりきれいではないので、速度低下を招くのではないかと思い、ひろろんさんdengenさんと共にごく簡単なキャッシュを実装していた。大ざっぱに言うと10%程度のスピードアップになりそう。

そのとき話題になったのがlib-common.phpのダイエット。このファイルはGeeklogの基本機能を実装し、必要なライブラリをインクルードしているが、1.5.1で200KBほどある。このlib-common.phpの中でも比較的使用されていないコードやインクルードファイルがあれば、使用時にインクルードすることで、サイズを減らせる。

きちんと性能測定したいなあと思ってXdebug関連を探していたら、[PHPプロファイリング: Xdebug(Xdebug2) + WinCacheGrind]というページを見つけた。早速このページの情報を元に、

  1. XdebugのMS Windows用最新モジュール(php_xdebug-2.0.3-5.2.5.dll)をダウンロードしてPHPのエクステンション用ディレクトリにコピー。
  2. WinCacheGrindをダウンロードして、インストール。
  3. php.iniの書き換え。
    [Zend]
    zend_extension_ts = "C:\PHP\ext\php_xdebug-2.0.3-5.2.5.dll"
    xdebug.profiler_enable = 1
    xdebug.profiler_output_name = cachegrind.out.profile
    xdebug.profiler_output_dir = "C:/temp/xdebug"
    xdebug.auto_trace = On
    

Geeklog-1.5.1のトップページにアクセスすると、lib-common.php処理にかかる時間は以下のようになった。

記事を友人にメールする 印刷用画面

インクルードファイル直接呼び出し攻撃防止策を追加

Geeklog -- Plugins

Geeklog-1.5.1で、大文字小文字を区別しないファイルシステム(MS Windowsなど)で、インクルードファイルを直接呼び出すことが可能になっていた脆弱性が修正されたが、同様の修正を拙作のDataproxy, Dbman, Sitemap, Themeditプラグインにも行った。機能追加はなし。

記事を友人にメールする 印刷用画面

カスタム関数管理プラグイン

Geeklog -- Plugins

タイトルの通り、カスタム関数をオンラインで管理するプラグインを試作中。要望があれば公開するつもり。

PS. テキストエディタとFTPしか使わない自分がこのプラグインを使うことはないだろうから、いまいちやる気が起きない。まあ、PHPでファイルをアップロードするスクリプトを書く練習にはなるだろう。

タグ:カスタム関数 プラグイン

記事を友人にメールする 印刷用画面

PHP-4.x系列でhtml_entity_decode()がエラー

GeekLog

ユーザからのレポートで、 "cannot yet handle MBCS in html_entity_decode()" なるエラーが拙作のプラグインで発生しているらしい。Google先生に訊いてみると、PHP-4.xの場合、マルチバイトはサポートしていないとのこと。改めてマニュアルを読んでみると、確かにそう書いてあった。PHP-4.x系列を使わなくなって久しいので、気づかなかった。

とりあえず、Dbman, Dataproxy, Sitemap, Themeditプラグインはエラーが出ないように修正したバージョンを公開した。

タグ:dbman, dataproxy, sitemap, themedit プラグイン

記事を友人にメールする 印刷用画面

Dataproxyプラグイン-1.1.1

Geeklog -- Plugins

Geeklog-1.5.0に同梱されているPolls-2.0.1プラグインでサイトマップがエラーになっていたが、データベースの構造が変化していたのが原因だった。対策を施したDataproxy-1.1.1プラグインを公開した。なお、Sitemapプラグインの方は変更する必要はありません。

記事を友人にメールする 印刷用画面

Google Summer of Code 2008の成果

GeekLog

本家のこの記事によると、Geeklog本家から参加した6人のうち5人がプロジェクトを仕上げたそうだ。その成果は次の通り:

  1. コメントモデレーションキュー
  2. アップロードによるプラグインのインストール
  3. 検索結果の表示方法改善

5人のうち残りの2人はAptitudeCMS(旧称Geeklog-2)に取り組んでいた。コメントモデレーションキューに関しては、トラックバックモデレーションキューも併せて実装してほしかった。

これらの成果物は、Geeklog-1.5.2以降のバージョンで、本体に取り込まれることだろう(GL-1.5.1はバグ修正のみ)。来年の4月くらいには公開されているだろうか...

記事を友人にメールする 印刷用画面

Geeklog-1.5.1rc1公開

GeekLog

思っていたよりも早く、RC1が公開された。今度はバグ修正が主なので、正式版が出るまで2週間とかからないだろう。その時点から日本語版が出るまで、1ヶ月では無理だろうな...