snbhsmt_log

ネットワークとコンピュータ、その他いろいろ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

TimeLine マクロをセットアップ

そろそろブログ記事のリスト表示が欲しいと思ったので SnipSnap に TimeLine マクロをインストールしてみた。 まず http://snipsnap.org/space/ebel/TimeLine からアーカイブをダウンロード。 インストールや使い方について、すべてこのページに書かれているのだが、一応やった事を書く。

  1. timeLineMacro.jar を WEB-INF/lib/ にコピーして Tomcat を起動。
  2. テーマ名スニップに画像を添付。
  3. SnipSnap/themes/テーマ名/css/macro.css スニップを作成。
  4. SnipSnap/themes/テーマ名/css スニップに以下を追記。
@import url(css/macro.css);

2 で添付する画像は、HTML の TD 要素の background 属性にセットされる。 この画像が無くても表示上支障はないが、アクセスログに 404 Not Found が 記録されるので透明なものを用いた。

画像利用場所
startLine.gif西暦が書かれている部分の上端
endLine.gif西暦が書かれている部分の下端
titleBegin.gif月名が表示される部分一帯
titleEnd.gif月名が表示される部分の右端

3, 4 の macro.css は、要は TimeLine マクロで使うセレクタを定義できれば 良いので、別ファイルにせず wiki.css に追記した方がファイル・アクセスが 1 回減って 良いのかもしれない。

スポンサーサイト

SnipSnap で InterWiki

SnipSnap でも InterWiki が使えるようだが、オフィシャルサイトの InterWiki HowTo にある通り少々ややこしい。 まず、InterWikiName データベースである conf/intermap.txt ファイルが必要。 それらしき SnipSnap/config/interwiki スニップは実は利用されない。 示した通り相対パスなので、アプリケーション・サーバ起動時のカレント・ディレクトリが 重要で、intermap.txt を変更した場合は再配備が必要。

intermap.txt の書式は interwiki スニップと同様。

GoogleJ http://www.google.co.jp/search?q=
ちゃんと定義できたかどうかは inter-wiki マクロで確認できる。

InterWiki するには [snipsnap@GoogleJ] のように 内部リンクの後ろに @InterWikiName を記述する。 もちろん [SnipSnapを検索|snipsnap@GoogleJ] と記述する事も可能。 どちらも http://www.google.co.jp/search?q=snipsnap へのリンクとなる。

SnipSnap の image マクロのパラメータ

SnipSnap の image マクロを使おうとして調べたメモ。

snipsnap-help スニップを見て、target パラメータを指定すれば画像をリンクに 出来るのかと思いやってみたが出来ず、どうやら link パラメータというのがあり、 これで指定するらしい。

同じく snipsnap-help を見ると align パラメータに flow-left, flow-right を 指定できるみたいだけど、float-left, float-right の間違いっぽい。 どうやら align パラメータに指定した文字列はそのまま HTML の IMG タグの class 属性に 入るようだが、wiki.css には img.flow-left 等が無いのが原因なのか ? それとも wiki.css に img.flow-left 等が無いのが間違いなのか ?

ブログの backlinks を消す

SnipSnap においてブログに backlinks マクロを適用すると、 ブログを一覧表示するページにおいて個々の記事毎に backlinks のリストが 表示されカッコ悪い。 sniplinks の様にページの下にのみ表示される様に出来ないだろうか。

コードをいじるとなると大変そうだが、出力される HTML を眺めていたら気が付いた。 backlinks マクロの出力はクラスセレクタ .snip-backlinks 内になされるのだが、 ブログ一覧ページの class 構造は .snip-wrapper .snip-content .snip-backlinks であるのに対し、 個々の記事のページの class 構造は .snip-wrapper .snip-backlinks となっている。 この構造を利用して、スタイルシートの設定で非表示にしてしまえば良い。

早速 snip.css に以下を追加。

.snip-content .snip-backlinks {
    display: none;
}

SnipSnap に print.css を追加

アクセスログを見ると /theme/print.css が 404 Not Found だとある。 print.css は SnipSnap のスタイル・シートに対するリクエスト にある様に 印刷媒体用のスタイル・シートとしてリクエストされているファイルで、 SnipSnap/themes/"テーマ名"/print.css に存在すべきスニップなのだが初期状態では 存在しないからである。

print.css が存在しなければ印刷できない訳ではないし、 ログ出力も気にしなければ何の問題も無いのだが、 WAR アーカイブのコンテキスト・ルートに print.css 自体は存在しているので、 とりあえずこれを追加しておく事にする。

ちなみに print.css スニップには RenderEngine ラベルで Plain Text を指定しておく。

SnipSnap のスタイル・シートに対するリクエスト

SnipSnap からのレスポンスの head タグには以下が含まれている。

<link rel="STYLESHEET" type="text/css" href="http://www.speculativeflow.net/theme/default.css" />
<link rel="STYLESHEET" type="text/css" href="http://www.speculativeflow.net/theme/print.css" media="print" />
web.xml によると、/theme/* は org.snipsnap.net.CssHandlerServlet で ハンドリングされる。 CssHandlerServlet は、URL の /theme 以降を /SnipSnap/themes/"テーマ名" 以下の スニップに対応させ、その内容を返している。 ただし default.css だけは特別で css スニップに対応する。

ところで、CssHandlerServlet には theme というリクエスト・パラメータがあり、 値としてテーマ名を指定すると一時的にテーマを変更できるようだ。 以下の様にリクエストすると (リロードが必要かも) Sky テーマの画面になる。 http://www.speculativeflow.net/theme/?theme=Sky

この方法はあくまでもセッションに対する操作なので、ブラウザを閉じてしまえば、 またそのサイトのデフォルトのテーマに戻る。

backlinks マクロは DNS を参照する

SnipSnap の backlinks マクロを利用しようとしたら、 www.google.com を resolve しようとして Tomcat のセキュリティ・マネージャに 引っかかった続き。

backlinks マクロのソース org.snipsnap.render.filter.links.BackLinks を見ると、 どうやら Referer のホスト名を DNS 参照している。 なんでかと言うと、Referer が www.google.com を指す場合 "www.google.com" + q リクエスト・パラメータの値を表示するためらしい。 これはこれでカッコ良い機能だが、他の検索エンジンから来た場合はそのまま 表示されるだけなので中途半端な感じだ。

という事で catalina.policy を以下に修正。

permission java.net.SocketPermission "*", "resolve";

SnipSnap の backlinks マクロ

SnipSnap の backlinks マクロは外部サイトから参照された リンク元 URL を表示するマクロで、 リンク元の URL とそこからのアクセスカウントがリスト表示される。 SnipSnap にはトラックバック機能が無いけど、 このマクロでページが何処からリンクされているのか解るので使ってみた。

利用方法は 2 通りあり、一つ目は通常のマクロを利用する時と同じく、 スニップ内に {backlinks} と書く方法。 こうするとそのページのその位置にリストが表示される。 二つ目は、SnipSnap/config スニップの app.feature.referrer.show を true にする方法で、全ページの sniplinks の下に表示される。

さっそく利用しようと思ったら、Tomcat のセキュリティ・マネージャに引っかかって 以下の例外が発生し、以後すべてのリクエストを受け付けなくなってしまった。

java.security.AccessControlException: access denied (java.net.SocketPermission www.google.com resolve)
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:269)
        at java.security.AccessController.checkPermission(AccessController.java:401)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:524)
        at java.lang.SecurityManager.checkConnect(SecurityManager.java:1023)
        at java.net.InetAddress.getAllByName0(InetAddress.java:1000)
        at java.net.InetAddress.getAllByName0(InetAddress.java:981)
        at java.net.InetAddress.getAllByName(InetAddress.java:975)
        at java.net.InetAddress.getByName(InetAddress.java:889)
        at org.snipsnap.render.filter.links.BackLinks.(BackLinks.java:56)
なぜ www.google.com にアクセスしようとしているのか解らないが、 とりあえず catalina.policy に以下を追加して再起動した。
permission java.net.SocketPermission "*", "connect";

Top|Next »

HOME

Author:snbhsmt
Google Profiles

http://www.ksky.ne.jp/~snbhsmt/

全ての記事を表示する

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。