木曜日, 28 9 月 2006

Pager Pluginを使う この記事(Pager Pluginを使う)を「はてなブックマーク」に追加 この記事をクリップ! この記事(Pager Pluginを使う)を「del.icio.us」に追加

以前からblojsomを使っていて、エントリ一覧で「次のページ」や
「前のページ」を見るための機能がなぜないんだろうと思っていました。
今は10件ずつの表示にしていますが10件表示されてそれで終わり。
以前のエントリを見るにはカレンダーをぽちぽちクリックして見ていくしかないんですね。
件数制限なしで表示するようにすれば当然以前のエントリが見られますが
全てのエントリが表示されてしまい、どえらく重くなるし…。

blojsom標準の機能に「次のページ」を出せる機能はないようなので
これはプラグイン作るしかないかーと思って何か参考になるプラグインがないかと
blojsom公式のプラグイン一覧を見ていると既にPager Pluginというそのものズバリのプラグインがあるし!
作る前にここ見ておいて良かったー…。

使用するにはまずここからpagerplugin-0.2.jarを落としてきて/WEB-INF/libに入れます。

次に/WEB-INF/plugin.propertiesへ
pager=com.mbledug.blojsom.plugin.pager.FilterPlugin
と設定を追加し
/WEB-INF/(ユーザーID)/plugin.propertiesに
html.blojsom-plugin-chain=..., calendar, ..., pager, ..., limiter, ...
とpagerを書き加えます。
ここでポイントなのが既にcalendarとlimiterがチェインされていればその間に書き加えた方がよい、
ということだそうです。

で次に/WEB-INF/(ユーザーID)/pager.propertiesというファイルを作りその中に
page-size=10
とだけ書いておきます。
ここでの右辺数値は1ページに表示させる上限の数になっています。
この場合だと10件まで表示するようになります。

最後に/WEB-INF/web.xmlへ
<init-param>
        <param-name>plugin-pager</param-name>
        <param-value>pager.properties</param-value>
</init-param>
と先ほど作った設定ファイルをプラグインが読み込むようにしてあげれば準備完了です。
反映させるにはコンテナを再起動する必要があります。

あとは「次のページ」のナビげージョンを表示させたいテンプレートの位置に
#parse("pager.vm")
と書いて、jarファイル内にあるpager.vmを/WEB-INF/(ユーザーID)/templatesに置けば終わりです。
pager.vmの中身はそんなに難しくない表示を変えることも簡単にできると思います。

使ってみた感想は、そうそうこれが欲しかったのよ!コレコレ!
という感じでとても重宝しています。次のページktkr!
でもこれってblojsomがデフォルトで持っているべき機能なんじゃないの…?
Posted by tsujitako at 10:23 午後 in Java/blojsom/

水曜日, 19 4 月 2006

blojsom 2.30 この記事(blojsom 2.30)を「はてなブックマーク」に追加 この記事をクリップ! この記事(blojsom 2.30)を「del.icio.us」に追加

blojsomのバージョンを2.30に上げました。
2.30が出てるのは知ってたんですが特に目立った機能追加は無かったし、
また次のバージョンが出たら上げようと思ってたんですけど
ちょっとバージョンを上げる理由が出来てしまったんですよねぇ。

というのもかねてからmoblogで送ったエントリに対してコメント書いても
管理者にメールが飛ばないという不具合があってちょっとそれは不便だろ
ということでソースを修正しようとしたわけです。
せっかくコメント書いてもらっても気付かないと失礼でしょ。
ちなみにこんな例外が出ます。
org.apache.commons.mail.EmailException
    at org.apache.commons.mail.Email.createInternetAddress(Email.java:427)
    at org.apache.commons.mail.Email.addTo(Email.java:490)
    at org.blojsom.plugin.comment.CommentPlugin.setupEmail(CommentPlugin.java:650)
    at org.blojsom.plugin.comment.CommentPlugin.handleEvent(CommentPlugin.java:665)
    at org.blojsom.event.SimpleBlojsomEventBroadcaster$AsynchronousEventBroadcaster.run(SimpleBlojsomEventBroadcaster.java:192)
    at java.lang.Thread.run(Thread.java:788)
Caused by: java.lang.NullPointerException
    at javax.mail.internet.InternetAddress.parse(InternetAddress.java:569)
    at javax.mail.internet.InternetAddress.parse(InternetAddress.java:529)
    at javax.mail.internet.InternetAddress.(InternetAddress.java:65)
    at org.apache.commons.mail.Email.createInternetAddress(Email.java:414)
    ... 5 more
要はmoblogで投稿した場合は.metaファイルにblog-entry-authorが書かれないのが原因。

で2.29のソースを修正する前に念のため現行のCVSで
もしかして修正されているかなーと思って確認すると…
修正されてるー!CommentPlugin.javaのリビジョンも1.41から1.46に上がってる…。
ふぅ…危うく無駄な修正をするところだった、確認して良かった良かった。

そういう事があって今回2.30にバージョンを上げました。
でも未だにMoblogPluginの文字化け不具合はそのまんま。
ちょっとはマルチバイト圏のユーザーの事も考えて欲しいよなぁ。
バージョン上げるたびにそこだけ修正するのも面倒だし。

CVSを見ていて気付いたんだけど既にblojsom3のプロジェクトが始まってるのね。
公式サイトには特に何も書いてなさそうだけど(たぶん)、どう発展するのか楽しみ。
これからもblojsomを追い続けていきます。

Technorati Tags:

Posted by tsujitako at 12:22 午前 in Java/blojsom/

水曜日, 15 3 月 2006

コメントスパム この記事(コメントスパム)を「はてなブックマーク」に追加 この記事をクリップ! この記事(コメントスパム)を「del.icio.us」に追加

久々に自分のブログ(コレ)を見ていたらなんかやたらとコメントがついてる!
と思ったら海外からのコメントスパムでした。
nice siteやらI love itやらありがたいコメントが書かれているけど
スパムの定型文なので全然嬉しくありません。
仕方ないのでその都度削除してたけど消しても消してもコメントが入ってくるので
きりがないなぁと半ばあきらめ掛けていました。
で、偶然にもblojsomをバージョンアップしたらなんと
コメントスパム対策プラグイン(Spam Phrase Moderation plugin)が追加されているではないですか!
コメントスパムにありそうなフレーズを入れておくと自動でコメントを削除してくれるらしい。
これは!と思いnice siteやらI love itやらを入れた様子を見ていたものの
どうもうまく弾いてくれていない様子。
なぜだ?と思って公式のドキュメントを見てみるとblog.propertiesに
delete-phrasespam=trueを入れなきゃダメよと書かれてたので、あぁこれかと思いつつ
修正して試してみるとバッチリコメントをはじいてくれました。
なんともタイムリーな機能で嬉しかったです。
Posted by tsujitako at 8:23 午後 in Java/blojsom/

日曜日, 20 3 月 2005

#Obfuscateが効かない この記事(#Obfuscateが効かない)を「はてなブックマーク」に追加 この記事をクリップ! この記事(#Obfuscateが効かない)を「del.icio.us」に追加

このブログを運用しているblojsomも2.24にバージョンアップしたところ不具合らしき現象が見つかった。
テンプレートにasualを指定している場合、asual-column.vmの中に#Obfuscate($BLOJSOM_BLOG.getBlogOwnerEmail())というマクロが使用されているが、2.24に上げるとこの#Obfuscate()がそのまま表示されてしまう。
この#Obfuscate()マクロはブログオーナーのメールアドレスを16進変換し表示するためだけのものだが、このマクロが無いとメールアドレスがそのまま表示されてしまいスパマー用クローラにメールアドレスを収集されるかも知れない、困った。
とりあえず原因を探るために調べ始めた。
#Obfuscate()がそのまま表示されてしまうということはVelocityに解析対象とみなされていないということなので#Obfuscate()が定義されているvmファイルを探すことに。
どうやらblojsom-plugins-templates-2.24.jar内のorg/blojsom/plugin/velocity/page-macros.vmに定義されているようだ。
早速開いて見てみると
#macro(Obfuscate $text)$BLOJSOM_PLUGIN_SIMPLE_OBFUSCATION.obfuscate($text)#end
と定義されていたが特に問題は無いように思える。
その下に#RSSEnclosure()というマクロも定義されていたので試しにこのマクロは使用できるかテンプレートでテストしてみたところこのマクロもそのまま表示されてしまった、やっぱりおかしい。
#Obfuscate()の前にある#MultiBlogFriendlyPermalink()もそのまま表示される。
しかしその前にある#MathCommentFormItem()は正常に処理され表示された。
どうやら#MultiBlogFriendlyPermalink()マクロに何か問題があるようだ。
見ると
#set ($entryLink = $entry.getMetaData().get("BLOJSOM_PLUGIN_INTERNAL_AGGREGATOR_BLOG_URL")
$categoryForEntry$entry.getDateAsFormat("yyyy")/$entry.getDateAsFormat("MM")/
$entry.getDateAsFormat("dd")/$entry.getPermalink()")
の部分に対応の取れていない"があったのでこれを削除してみた。
が、何も変わらず…。
その後足したり引いたりしてみて色々試してみたところ
$categoryForEntry$entry.getDateAsFormat("yyyy")/$entry.getDateAsFormat("MM")/
$entry.getDateAsFormat("dd")/$entry.getPermalink()"
の部分を削除すれば正常に処理される事が判明したが、削除するわけにもいかないのでとりあえずこの#MultiBlogFriendlyPermalink()マクロのブロックをpage-macros.vmの一番最後に移動させて#Obfuscate()マクロと#RSSEnclosure()マクロを有効にさせた。
結果として#Obfuscate()マクロは使えるようになったが#MultiBlogFriendlyPermalink()マクロはそのままなので依然使用できない。
でもこの#MultiBlogFriendlyPermalink()マクロはどこにも使用されていないようだし、そもそも使い道が分からないので気にしない。
Posted by tsujitako at 3:02 午前 in Java/blojsom/

土曜日, 19 3 月 2005

blojsom 2.24リリース この記事(blojsom 2.24リリース)を「はてなブックマーク」に追加 この記事をクリップ! この記事(blojsom 2.24リリース)を「del.icio.us」に追加

blojsom 2.24がリリースされた模様。
Changelogによると変更点は
・BlojsomListenerインターフェイスにprocessEvent(BlojsomEvent event)メソッドを追加
・暗号化パスワードのサポート
・フランス語ローカライズ
・ Fetcher Helper Plugin,Language Selection Plugin,Markup Selection Plugin,Pingback Plugin,Plugin Helper Pluginのプラグイン追加 ・#DatelessFriendlyPermalink($entry),#MultiBlogFriendlyPermalink($entry)のテンプレートマクロ追加
など。

暗号化パスワードのサポートは確かにありがたいかも。
今までパスワードはauthorization.propertiesに平文で書かれていたため正直不安だった。
既存のパスワードを暗号化するためには以下のようにコマンドラインから入力する。(カレントディレクトリがblojsom/WEB-INF/の場合)
java -cp lib/blojsom-core-2.24.jar org.blojsom.util.password.EncryptedPasswordConversion default/authorization.properties
上記コマンドを実行すると既存のauthorization.propertiesが上書きされ平文パスワードが暗号化されたパスワードになる。

あとエントリを書き込むフォームにもLanguage選択のプルダウンとかが追加されてた。
個人的にこれは使わんな…。
Posted by tsujitako at 9:41 午後 in Java/blojsom/

火曜日, 15 3 月 2005

Show Me Moreプラグイン この記事(Show Me Moreプラグイン)を「はてなブックマーク」に追加 この記事をクリップ! この記事(Show Me Moreプラグイン)を「del.icio.us」に追加

blojsomは標準で書き込んだエントリ全文を表示するようになっているので長い文章を書いたときなどはエントリ一覧のページが長くなり目的のエントリを見付けるのに苦労する事がある。
こういう場合はShow Me Moreプラグインを利用するといい。
Show Me Moreプラグインはエントリの書き込みが決められた文字数を超えた場合、続きを別ページに表示させ一覧のページを見やすくさせるプラグインだ。
使用するにはまず/WEB-INF/plugin.propertiesに
show-me-more=org.blojsom.plugin.showmore.ShowMeMorePlugin
show-me-more-admin=org.blojsom.plugin.showmore.admin.ShowMeMoreAdminPlugin
と追加する。というか既にあった。
次に/WEB-INF/(blog-id)/plugin.properties内のhtml.blojsom-plugin-chainにshow-me-moreを追加する。
その後/WEB-INF/web.xmlに
<init-param>
  <param-name>plugin-showmemore</param-name>
  <param-value>showmemore.properties</param-value>
</init-param>
と書き加え(これも既に入っていた)、最後に/WEB-INF/(blog-id)/showmemore.propertiesに
entry-length-cutoff=400
entry-text-cutoff=<more/>
show-me-more-text=More ...
entry-text-cutoff-start=<cut>
entry-text-cutoff-end=</cut>
と書き加えると設定完了だ。
上記showmemore.propertiesにあるentry-length-cutoffによりエントリ一覧で表示させる各エントリの最大表示文字数を変更することができる。
エントリ内の文字数がこの値を超えた場合show-me-more-textに設定している文言に別ページへのリンクが張られ全文を参照することができるようになる。
強制的に別ページへのリンクを作る場合はentry-text-cutoffに設定したタグをエントリ内に含めることでそこで表示が止められ別ページへのリンクが現れる。
entry-text-cutoff-startとentry-text-cutoff-endはその設定したタグでエントリ内の文章をくくるとその部分だけが一覧に表示されなくなり別ページへのリンクで置き換えられる。ただしこのタグを使用した場合でもentry-length-cutoffで設定した文字数は有効なので2重にリンクが現れる事もあるので注意が必要だ。
Posted by tsujitako at 2:41 午前 in Java/blojsom/

金曜日, 4 2 月 2005

blojsom 2.23 この記事(blojsom 2.23)を「はてなブックマーク」に追加 この記事をクリップ! この記事(blojsom 2.23)を「del.icio.us」に追加

blojsomが2.23にバージョンアップした模様。
色々プラグインが追加されたようで天気が分かるWeather Pluginというのもあるようだ。
とりあえずこのBlogもバージョンアップしてみたけど管理画面でいくつかヌルポが発生するみたい。
取り急ぎ問題になる部分ではないので後々調べることにしてテンプレートやlog4j.propertiesなど必要な部分だけ修正した。
それ以前に管理画面に対してユーザー毎のパーミッション設定が追加されたようでdefault以外のアカウントを使ってる場合はpermissions.propertiesに
(ユーザーID)=*
と書いてユーザーに許可を与える必要がある。
これをしておかないと管理画面にログインしても何も出来ないので要注意。
疲れたのでもう寝る。続きは週末。
Posted by tsujitako at 2:34 午前 in Java/blojsom/

金曜日, 28 1 月 2005

moblog この記事(moblog)を「はてなブックマーク」に追加 この記事をクリップ! この記事(moblog)を「del.icio.us」に追加

blojsomが吐き出すログを見てると
[INFO ] 2005-01-21 09:13:10 [Thread-18] Marked moblog mailbox as disabled for user: default. No moblog-hostname property. - (MoblogPluginUtils.java:135)
というログが12分間隔で延々続いていた。
なんだこれはとblojsom公式で調べるとどうやらmoblogというメールからエントリを書き込めるプラグインがあるらしい。
そのmoblogの設定が正しくされていないからこのログが出ているようだ。
せっかくなのでこの機能を有効にして携帯から書き込めるようにしてみることに。画像を添付すると勝手にimgタグを付けて貼り付けてくれるみたいだし。

moblogの設定はまず/WEB-INF/plugin.propertiesに
moblog=org.blojsom.plugin.moblog.MoblogPlugin
moblog-admin=org.blojsom.plugin.moblog.admin.MoblogAdminPlugin
を書き込む。というかデフォルトで入ってる。
次に/WEB-INF/web.xmlに
<init-param>
  <param-name>plugin-moblog</param-name>
  <param-value>moblog.properties</param-value>
</init-param>
と書く。これもデフォルトで入ってる。
次にmoblogがメールを取得するための情報を/WEB-INF/(blog-id)/moblog.propertiesに書き込む。
そもそもmoblogプラグインがメールを取得する方法は指定のアカウントがあるPOP3(IMAP)サーバにログインし、定期的にメールがあるかどうかチェックしてメールを取得するようだ。
ファイルの中はこんな感じ。
moblog-hostname=(POP3サーバのIP)
moblog-userid=(メアドアカウントID)
moblog-password=(パスワード)
moblog-category=/
moblog-enabled=true
moblog-authorization=moblog-authorization.properties
moblog-authorization.propertiesにはエントリの投稿を許可するFromメアドを列挙しておけば、それ以外のメアドでは投稿できなくなる。
これで準備は完了だけどmoblogプラグインがメールをチェックする間隔はデフォルトで5分になっているので、これを調節したければweb.xmlに
<init-param>
  <param-name>plugin-moblog-poll-time</param-name>
  <param-value>(チェックする間隔(秒))</param-value>
</init-param>
と書けばいいみたい。

早速メールを書いて送ってみるとサブジェクトはちゃんと日本語になるけど、本文が化けてしまった。
moblogの設定を見てもエンコード方法を指定するところは無いし、困った。
困ったのでソースを追っていくことにした。
プラグイン本体はorg.blojsom.plugin.moblog.MoblogPluginなのでこの中に答えがあるはずだ。
見ていくとJavaMailからメールをInputStreamで読み出す際にUTF-8で読み出している、どうもこれが原因っぽい。
まずUTF-8なんかでメールを送ることはないと思うので、UTF-8になっているところをISO-2022-JPに書き換え。
コンパイルしてTomcat再起動後、もう一度メールを送ってみるとめでたく日本語が正常に表示された。
送ったエントリはこれ
なかなか使えそうな予感。
Posted by tsujitako at 10:18 午後 in Java/blojsom/

カテゴリーのURLが… この記事(カテゴリーのURLが…)を「はてなブックマーク」に追加 この記事をクリップ! この記事(カテゴリーのURLが…)を「del.icio.us」に追加

日本語のカテゴリーを作ったけどテンプレートで$blogCategory.getCategoryURL()を呼ぶとそのままエンコードされずに日本語がURLに入ってしまう。
これは困った、何か良い方法はないかとblojsom公式のJavadocを見てるとBlogCategory#getEncodedCategoryURL()という目的にピッタリなメソッドが用意されているではないか。
喜び勇んで元のgetCategoryURL()をgetEncodedCategoryURL()に書き換えた。
お、ちゃんと日本語がURLエンコードされてるな…でもちょっとおかしい。
よくみるとhttp://の「:」までもエンコードされhttp%3A//となってるではないか。
これでは日本語がエンコードされていてもリンクとして機能しない、困った。
色々考えた挙げ句、ソースを書き換える事にした。
ソースを追っていくとorg.blojsom.util.BlojsomUtils#urlEncodeForLink(String)でURLエンコードを行っているようだ。
ここを以下のように書き換えた。
--- BlojsomUtils.java.org       2005-01-28 01:38:29.000000000 +0900
+++ BlojsomUtils.java   2005-01-28 01:56:22.000000000 +0900
@@ -788,10 +788,16 @@
         }
 
         try {
+               String prefix="";
+               if(input.startsWith("http://"))
+               {
+                       input=input.substring(7);
+                       prefix="http://";
+               }
             String result = URLEncoder.encode(input, UTF8);
             result = replace(result, "%2F", "/");
             result = replace(result, "%20", "+");
-            return result;
+            return prefix+result;
         } catch (UnsupportedEncodingException e) {
             return input;
         }
コンパイルしたBlojsomUtilsをWEB-INF/classes/org/blojsom/util/に置いて完了。
Tomcatを再起動すると「:」が正常に表示されるようになった。
でもこれって多分バグだと思うし、本家で直してくれないかなぁ。
Posted by tsujitako at 2:40 午前 in Java/blojsom/