2024年11月21日(木) 19:45 JST

Geeklog

Geeklog-1.5用のPrecheck試作

  • 2009年1月12日(月) 23:47 JST
  • 投稿者:
  • 表示回数 5,002
Geeklog

少し時間ができたので、Geeklog-1.5.x用のPrecheck(インストール前診断)を試作してみた。db-config.phpの位置をビジュアルに探す機能とデータベースの接続をリアルタイムでチェックする機能付き。JavaScript(というか、DOM)の挙動の違いに戸惑った。Firefoxではエラーコンソール(+ Firebug)が克明にエラー原因教えてくれるので楽勝だが、IE7ではDeveloper Toolbarを入れていてもあまり役に立たない。ベースになるAjaxのライブラリは最低限の機能を備えた軽量のものをということで、SitePointのcore.jsを使用した。興味のある方は、こちらからダウンロードしてほしい。

PS. なお、使用後は必ず、admin/installディレクトリごと削除すること。放置しておくと、サーバのファイルツリーがある程度見えてしまう危険性がある。


RSS Aggregator改造版にdescription追加

  • 2008年12月22日(月) 20:12 JST
  • 投稿者:
  • 表示回数 5,149
Geeklog

ユーザの方から「RSS_Aggregatorでフィードのdescriptionを表示できないか?」というお問い合せがあった。何せ1年半ほど前に作ったスクリプトなので、覚えていない。アーカイブを引っ張り出してみると、わずかなコードの追加で実現できそうなことが分かったので、さっさと仕上げてアップロードした。ユーザの方からのフィードバック、リクエスト(あまり過大なものは困るが(^^;))こそがフリーソフトウェア作者を動かす力なのだと思う。


Pollsプラグインで不可解な現象

  • 2008年12月16日(火) 21:49 JST
  • 投稿者:
  • 表示回数 4,453
プラグイン

本家サイトの掲示板で問題になっているが、Geeklog-1.5.0-1.5.1になって、アンケート(polls)プラグインで削除・編集ができない場合が出てきている。Dirkさんの記事によると、PHPのセキュリティを高めるためのSuhosinパッチで、一度にPOSTできるフォーム変数の数の初期値が200に制限されているため、この数を超えた大きなアンケートを作ると問題の現象が発生するとのこと。対策としては、

  • php.iniを設定できる場合は、suhosin.post.max_varsの数を増やす。下記参照。
  • アンケートプラグインの設定で、1問あたりの選択肢やオプションを減らす。

目安としては、質問を10個、選択肢もそれぞれ10個ずつ作ると、フォーム変数の合計が300を越えるので、アウト。質問を5個、選択肢を8個ずつにすると、フォーム変数の合計は150個なのでセーフ。

静的ページ(staticpages)で多数のフォーム変数を持つフォームを作成する場合も同様の現象が発生しそうだ。


Pollsプラグインのバグ

  • 2008年11月 2日(日) 21:17 JST
  • 投稿者:
  • 表示回数 4,686
プラグイン

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)

  • 2008年10月11日(土) 13:57 JST
  • 投稿者:
  • 表示回数 4,817
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)

  • 2008年10月 5日(日) 16:02 JST
  • 投稿者:
  • 表示回数 4,753
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の性能測定

  • 2008年10月 4日(土) 07:03 JST
  • 投稿者:
  • 表示回数 5,246
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処理にかかる時間は以下のようになった。


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

  • 2008年9月26日(金) 22:40 JST
  • 投稿者:
  • 表示回数 6,722
プラグイン

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


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

  • 2008年9月19日(金) 08:57 JST
  • 投稿者:
  • 表示回数 5,550
プラグイン

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

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

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


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

  • 2008年9月14日(日) 21:51 JST
  • 投稿者:
  • 表示回数 6,954
Geeklog

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

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

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


ページナビゲーション