Geeklogを全ての人の手に!

ようこそ! Geeklog増殖計画
2009年7月 4日(土) 07:36 (JST)

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

カスタム検索関数

GeekLog

現在のGeeklogで検索対象になるのは、記事と検索APIを実装しているプラグインのみ。つまり、公開領域/docs/にあるhtmlドキュメントは検索されていない。ドキュメントの翻訳にかかわった者としてはもったいないの一言に尽きる。そこで、検索APIを調べてみると、カスタム検索関数を追加できるよう設計されていることがわかった。APIのシグネチャを調べて実装したのが、こちらのカスタム検索関数。対象のhtmlファイルを力ずくで検索するのであまり格好いい方法ではないが、ないよりはましと思う。

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

Twitterクライアント

Geeklog -- Plugins

GeeklogのTwitterクライアントを実装するのに必要なクラスライブラリをTwitterの公式ドキュメントを元に作成したが、肝心のクライアントの構想が定まらない。自分のサイトにpublic_timelineをそのまま表示するのは無意味だし、自分のつぶやきだけを表示しても寂しいし、Friends(follower/following)を追加表示するのも意味があるようなないような...

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

KZ_Templateクラス

GeekLog

GeeklogがHTMLのレンダリングに使用しているのはPHPLIBのTemplateクラスで、Dirkさんが何かのカンファレンスでその制作者に出会ったときに「まだそんなもの使っているの? Smartyを使えよ。」と言われたほどの代物。軽量だが、変数置換などの最低限の機能しかないため、条件分岐やループ構造を単体では実現できず、PHPコードでレンダリングしなければならない。

開発時期が古いためか、コードを読んでも「なぜそんな実装?」と突っ込みたくなる箇所が多い。

このような状況で、JoeさんさんがCaching Template Library(CTL)を開発・公開した。オリジナルのTemplateクラスに、1. 条件分岐やループ構造を追加 2. デフォルトの変数を定義 3. テンプレートをPHPコードにコンパイル・キャッシュして、実行速度アップを狙った優れものである。MediaGallery-1.6.xはこのCTLがないとインストールすることすらできない。

上記1., 2.はありがたいが、モジュール版PHPが多い日本のホスティングサービスでは、パーミッションの関係で3.でつまずくことが多い。それと、これは私見だが、Geeklogのように各テンプレートファイルのサイズが小さい場合には、コンパイル・キャッシュの恩恵をあまり受けられないように思う。

そこで、CTLからキャッシュ機能を抜き、代わりにdengenさんが提唱しているTemplateクラスの高速化(file()をfile_get_contents()で、preg_replace()をstr_replace()に置き換えるなど。)と木下さんが実装したOverRide機能(該当テンプレートファイルがない場合、デフォルトのテーマに自動的にフォールバックする機能)を追加したKZ_Templateクラスを開発した。ダウンロードはこちらから。まだ、開発段階なので、いろいろバグが残っていると思われるが、Geeklogのコアファイルを改変しなくても使えるので、それなりの価値はあると思う。

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

メタタグプラグイン

Geeklog -- Plugins

表題の通り、記事や静的ページでHTMLの<head>セクションにkeywordsやdescriptionなどの<meta>タグを追加するメタタグ(Metatags)プラグインを作ってみた。ダウンロードはこちらからどうぞ。

使い方は自動タグを利用する。keywordsの場合は、

  [meta:key コンマで区切ったキーワードのリスト]

descriptionの場合は、

  [meta:desc 説明]

を入力するだけ。詳しいことは同梱のinstall_ja.htmlに書いてあるので、そちらをどうぞ。

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

Autosaveプラグイン

Geeklog -- Plugins

Geeklog-1.5.0以降では、セキュリティを向上させるため、記事や静的ページの編集ページにはトークンと呼ばれる使い捨てのキーが設定されている。編集を始めて20分経つとこのキーの有効期限が切れてしまい、「保存」をクリックしても保存できなくなっていた。これはバグではなく、仕様である。

自分の場合は、保存する前に編集エリアで ctrl-A, ctrl-C を押してOSのバッファに保存する癖がついているので、仮に保存に失敗してもさほど気にならないが、中にはむかっとくる人もいるだろう。

そのような人に向かって「これは仕様です」ではgeek以外に使ってもらえないので、定期的に自動保存を行うプラグインを作成した。ダウンロードはこちらからどうぞなお、JavaScriptを有効にしておくこと。それと、このプラグインを使用しても時間切れになること自体は防げないので、自動保存の間隔を短く設定することをお勧めする。設定は、「コンフィギュレーション」→「Autosave」から。初期値は10分。

まだ、開発段階なので、バグが含まれる可能性あり。そのつもりでどうぞ。

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

Style Viewer公開

JavaScript

当サイトでデモを行っていたStyle Viewerを公開した。単なるJavaScriptなので、Geeklogだけでなく、どのようなWebアプリケーションにも使用できる。使用法は同梱のreadme_ja.txtを参照のこと。Geeklog向けにprofessionalとProfessionalCSSテーマ用の差し替えファイルを同梱している。ダウンロードはこちらからどうぞ。

なお、Geeklog以外をご使用で、かつ、<script>タグの書き方もわからないという人は手を出さない方が吉。

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

Style Viewer

GeekLog

最近、JavaScriptを勉強している。食わず嫌いだったが、きちんとした本(O'REILLY®の「JavaScript(第5版)」や"JavaScript: the Good Parts"など)を読むと、結構面白い。何か実用的なものを作ってみたくなり、表題のStyle Viewerを試作中。マウスを動かすと、ツールチップと共に当サイトの右上ブロックにスタイル情報の一部が表示される。まだ、Firefoxでしか検証していないので、他のブラウザではうまく表示されない可能性大。しばらく放置して、需要があるようなら、プラグイン化することも検討するかも。

(2009年 2月13日追記)JavaScriptを修正して、IE7、Opera9、Google Chromeでも正常に動作するようにした。

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

テンプレート変数インジェクション

GeekLog

Geeklog.jpの掲示板のこのスレッドから始まったmore_article_linksカスタム関数だが、実装している最中に考えたことを参考までに記す。

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

Geeklog-1.5用のPrecheck試作

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追加

GeekLog

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