Nov 052007
 

MovableType 3で「エントリーの書き出し」をやろうと思ったら、FirefoxやOperaはOKだがInternet ExplorerはNG、という問題に遭遇。
どうもSSL+IEでのみ発生する問題らしい。
Internet Explorer が SSL 経由によるファイルのダウンロードで “No-Cache” ヘッダーを処理できない
こちらに掲載されているレジストリ変更をおこなったところ、IE7はOKになったがIE6は直らなかった 😕
(HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings"BypassSSLNoCacheCheck"=Dword:00000001を追加)

一般ユーザにレジストリ変更してもらうのは大変なのでサーバサイドで対処したほうがよさそうだが、その場合はHTTPヘッダとして

Cache-Control: public
Pragma: public

を返すようにすればよい模様。

この問題、以下のKBに一通りまとまっていた。
Prevent caching when you download active documents over SSL
自動翻訳されたものはこちら
SSL でアクティブ ドキュメントをダウンロードすると、キャッシュを禁止します。

Drupalテーマ変更 – Tech

 announce, article  Comments Off on Drupalテーマ変更 – Tech
Nov 012007
 

DrupalのデフォルトテーマをTechに変更してみました。
コンテンツ内のリストマーカーがはみ出してしまってるのが気になりますが…
non-zeroのときもそうだったのですが、スタイルシートに

#content ul{
  margin-left: 1em;
}

などを追加してあげればちょっとは改善するものの、他の部分にも微妙に影響が出るので、適用しようか否か悩んでます。

ColdFusion MX 6.1はRHEL3でも動くだろう

 article  Comments Off on ColdFusion MX 6.1はRHEL3でも動くだろう
Oct 152007
 

ColdFusion-Style.jpというColdFusionユーザ会を発見した。
こちらのフォーラムで
MX6.1をRed Hat ES 3で動作させている方はみえますか?
という質問が。

ちゃんとシステム要件にも載ってるのに違ってたんだろうか…

ColdFusion MX 6.1: Installer and connector issues on Red Hat Advanced Server 3.0
なんていうTechNoteも出てるし 😕

フォーラムに投稿するにはユーザ登録が必要なのでそちらでは回答を控えてしまったが…

Oct 072007
 

CORESERVER.JPでCGI版PHPを動かす場合に「PHPをCGIとして動かす方法について」の方法に従うと
CORESERVER.JPでPHPをCGIで動かすとContent-Typeが上書きされる
なことになります。
CMS Made Simpleはそれでは悲しいことになってしまうので、サーバ提供設定に頼らずにCGI化した際の覚え書きです。

簡単に言えば、

  • *.phpファイル編集
    *.phpの先頭に

    #!/usr/local/bin/php5 -q
    

    を加えて実行権限を付与します。数多くて手作業では大変なのでsedで一気に変更しました。

    $ for f in `find . -name "*.php"`; do
    > sed -i '1i#!/usr/local/bin/php5 -q' $f
    > chmod +x $f
    > done
    
  • .htaccess設定
    .htaccessで

    AddHandler cgi-script .php
    

    を記述した.htaccessファイルを用意して/直下に配置します。

  • php.ini設定
    php.iniでセッション情報保存パスを設定します。

    session.save_path = "/virtual/account/tmp"
    

    もちろんディレクトリを用意して、書き込み権限を設定しておきます。
    php.ini配置場所は、/直下と/admin直下の2箇所。
    ちなみにこれはCORESERVER.JP提供の方法でCGI化する場合も必要。

サーバ提供のCGI実行方法が-qオプション付きでPHPを実行してくれてれば、こんな面倒なことしなくていいんですけどね。

 Posted by at 4:53 am  Tagged with:
Oct 062007
 

早速CMS Made SimpleをCORESERVER.JPで試そうとしたところ、不思議な現象にあたりました。

XREAやCORESERVERはPHPをSafe Modeで動かすようになってます。
そうするとCMS Made Simpleのウェブ管理インターフェースを使ったModule導入などがおこなえません。
こういった場合のために、PHPをCGIで動かす方法が提供されているのですが、そうするとFirefoxではStylesheetが適用されなくなってしまいます(Internet ExplorerはOK)。

LiveHTTPHeadersで追いかけてみると

GET /cms/stylesheet.php?templateid=17&mediatype=handheld HTTP/1.1

リクエストに対する結果がContent-Type: text/htmlになってしまっています。

ApacheモジュールだときちんとContent-Type: text/css; charset=utf-8になるのに。

Firefoxは厳密にContent-Typeで判定し、Internet Explorerは中身も見て判定するのでこうなっちゃうんですね。

サポートフォーラム検索してみるとこんな記事が。
php: header()が正しく機能しない
がぁーん。実行環境側で対応する方法はないんでしょうか?

でも、そもそもSafe Modeはセキュリティ的にそんな役立つものでもないし、PHP 6.0.0では削除されるんだから撤廃しちゃえばいいのに。

 Posted by at 4:20 am  Tagged with:

CMS Made Simpleがよさげ

 article  Comments Off on CMS Made Simpleがよさげ
Oct 062007
 

2007 Open Source CMS Award Finalists
を見ていて、CMS Made Simpleに興味が沸きました。ちなみにDrupalもFinalistに残ってますが 🙂

Drupalのようなブログっぽいツールではなく、ページを構造的に配置してサイトを構築していくツールです。
説明難しいんですが、スクリーンショットコンテンツ一覧を見ていただくとイメージしやすいかもしれません。

惹かれているのは以下の点。

  • コンテンツを構造的に配置して管理できる。
  • コンテンツ階層単位に適用テーマを変更できる。
  • モジュールやテーマのインストールやアップグレードをウェブインターフェースでおこなえる。
  • モジュールが豊富(ブログやフォーラムもあります)。モジュールやテーマのRatingが公開されていて何が人気が高いのか比較的わかりやすいです(Drupalもやったらいいのに)。
  • ネーミングがGNU is Not Unixのようなセンスを感じさせて、いかしてる 🙂

標準で多言語対応されているようで、管理画面では日本語メニューを使うこともできます。
メール送信とか細かいところで多言語対応バッチリかは未確認ですが。

私は一時TYPo3の管理構造がいいなと思いチャレンジしたことがあったのですが、あまりの難しさにあきらめた経験があります。同じような思いをされた方、いかがでしょうか?

ライセンスはGPLですが、商用利用の場合など、著作権表示を削除して使用したい場合に限り有償ライセンスを購入する必要があるようです(たぶん)。
http://www.cmsmadesimple.org/support/commercial-license/

■2011-02-18追記
最後のライセンス条項に関するリンク、記述を修正しました。
商用利用とはいっても、著作権表示を変更しない限りは無償で利用が可能なようです。

 Posted by at 1:34 am  Tagged with:
Jun 282007
 

ColdFusion自体をウェブアプリケーションとしてTomcat上にデプロイする場合はこちら。

ColdFusionとTomcatを別々に動かす場合、そのままだと*.jspの制御はColdFusionに奪われてしまい、Tomcatで処理することができない。
AddHandler jrun-handlerから.jspを外しても変わらない。
実はColdFusion側でservlet-mappingの定義変更が必要になる。

上のサイトではservlet定義とservlet-mappingの定義をすべて無効にしているが、*.jspだけに限れば、その分のservlet-mappingを無効にするだけでもよいはず。

# diff -u runtime/servers/default/SERVER-INF/default-web.xml.orig runtime/servers/default/SERVER-INF/default-web.xml
--- runtime/servers/default/SERVER-INF/default-web.xml.orig 2003-05-27 11:36:10.000000000 +0900
+++ runtime/servers/default/SERVER-INF/default-web.xml 2007-06-27 23:36:37.000000000 +0900
@@ -81,10 +81,12 @@
    <url-pattern>/</url-pattern>
  </servlet-mapping>

+ <!--
  <servlet-mapping>
    <servlet-name>JspLicenseServlet</servlet-name>
    <url-pattern>*.jsp</url-pattern>
  </servlet-mapping>
+ -->

  <servlet-mapping>
    <servlet-name>JSTServlet</servlet-name>

あとはhttpd.confで

  • AddHandler jrun-handlerから.jspを外す
  • JRunConfig Ignoresuffixmapをfalseからtrueに変更(CFMX7の場合)

をおこなえばよい。

Jun 232007
 

このサイトをYahoo! Site Explorerに登録してみました。
Yahoo!に登録操作をおこなって認証コードを含めるhtmlファイル名がわかったあとは、以下のようにノード作成して完了です。

  • 本文に<!– 認証コード –>を含んだノードを用意して、
  • 指定されたhtmlファイル名(y_key_****.html)をAliasとして付与し、
  • XML Sitemap settingsで”Priority override”を-1にして登録

余談ですが、XML Sitemapモジュールにはsitemap生成以外にも、Googleのウェブマスターツール利用に必要な認証用URLを登録する機能が備わってます。このサイトもGoogleウェブマスターツールには登録済みでした。

さらにXML SitemapモジュールにはYahoo! Site Explorerにもsitemapを送信する機能も備わっているのですが、Googleのように認証用URL(またはMETAタグ埋め込み)を用意するところまではできません。

Yahoo!もGoogle同様に、指定された名前のHTMLファイルを配置すればよいことになっています(中には指定されたコードをコメントで埋め込む点がちょっと異なる)。
まぁ、実ファイルを用意してもよかったのですが、よくよく考えるとそんなことをしなくてもDrupalはノードを作ってしまえば済むハナシなのでした 😀

 Posted by at 12:49 am  Tagged with:
Jun 102007
 

このサイトのデフォルトテーマをnonzeroに変更して、恥ずかしながらはじめて代替スタイルシートの存在を知りました。
nonzeroテーマの場合、Firefoxであれば表示->スタイルシートで代替スタイルシートに切り替えられるようになってます。色が変わるだけですが。

tDiaryはテーマとは言っても出力テンプレートが切り替わるわけではなく、cssだけの切替ですから、予めalternate stylesheetに全部書いてしまえないものかと軽く試してみました。
ちなみにrubyに関しては素人です。

まず、デフォルトのstylesheet指定は以下のようになってます。

<link rel="stylesheet" href="/tdiary/theme/base.css" type="text/css" media="all">
<link rel="stylesheet" href="/tdiary/theme/default/default.css" title="Default" type="text/css" media="all">

ここに続けて以下のような代替スタイルシート指定を羅列できればよいのではないかと考えるわけです。

<link rel="alternate stylesheet" href="/tdiary/theme/hoge/hoge.css" title="Hoge" type="text/css" media="all">

これを出力している箇所を追いかけるとplugin/00default.rbのようです。
こちらにインストール済みテーマをリストして出力するように、以下のようなコードを追加してみます。

--- plugin/00default.rb.default 2005-07-27 15:14:12.000000000 +0900
+++ plugin/00default.rb 2007-06-10 00:59:30.000000000 +0900
@@ -255,6 +255,14 @@
        <link rel="stylesheet" href="#{theme_url}/base.css" type="text/css" media="all">
        <link rel="stylesheet" href="#{css}" title="#{title}" type="text/css" media="all">
        CSS
+       Dir::glob( "#{::TDiary::PATH}/theme/*" ).sort.each do |dir|
+               theme = dir.sub( %r[.*/theme/], '')
+               next unless FileTest::file?( "#{dir}/#{theme}.css".untaint )
+               name = theme.split( /_/ ).collect{|s| s.capitalize}.join( ' ' )
+               <<-CSSALT
+               <link rel="alternate stylesheet" href="#{theme}" title="#{name}" type="text/css" media="all">
+               CSSALT
+       end
 end

 def robot_control

Dir::glob()でインストール済みテーマをリストする部分は、同ファイルの中で@conf_theme_listを作る処理があったのでそちらをパクってます。

で、実行してみたんですが、あえなく玉砕。

private method `chomp' called for # (NoMethodError)

(plugin/00default.rb):119:in `load_plugin'
/usr/share/tdiary/tdiary.rb:75:in `join'
/usr/share/tdiary/tdiary.rb:75:in `safe'
/usr/share/tdiary/tdiary.rb:657:in `eval_src'
/usr/share/tdiary/tdiary.rb:904:in `do_eval_rhtml'
/usr/share/tdiary/tdiary.rb:854:in `eval_rhtml'
/var/www/tdiary/index.rb:71

やはり付け焼刃ではダメですね。

■2007-06-11追記
tDiary-users Projectのサイトには、テーマ関連のプラグインが掲載されています。
http://tdiary-users.sourceforge.jp/cgi-bin/wiki.cgi?PluginList#l6
わざわざ本体改造しなくてもよかったみたいです。

■2007-06-13追記
前述のプラグインリストを探してもリンク切れでたどり着けなかったので、結局自分で再チャレンジしました。結論からいうと、以下のコードでうまくいきます。
ただ、ページ表示のときに代替スタイルシートも一気に読み込むようなので、インストール済みテーマが多いと表示時間が遅くなってしまいます。コンフィグで選択できるようにしないとダメかな。

def css_tag
	if @conf.theme and @conf.theme.length > 0 then
		css = "#{theme_url}/#{@conf.theme}/#{@conf.theme}.css"
		title = css
	else
		css = @css
	end
	title = CGI::escapeHTML( File::basename( css, '.css' ) )
	result = %Q[<meta http-equiv="content-style-type" content="text/css">\n]
	result << %Q[	<link rel="stylesheet" href="#{theme_url}/base.css" type="text/css" media="all">\n]
	result << %Q[	<link rel="stylesheet" href="#{css}" title="#{title}" type="text/css" media="all">\n]
	Dir::glob( "#{::TDiary::PATH}/theme/*" ).sort.each do |dir|
		theme = dir.sub( %r[.*/theme/], '')
		next unless FileTest::file?( "#{dir}/#{theme}.css".untaint )
		name = theme.split( /_/ ).collect{|s| s.capitalize}.join( ' ' )
		result << %Q[		<link rel="alternate stylesheet" href="#{theme_url}/#{theme}/#{theme}.css" title="#{name}" type="text/css" media="all">\n]
	end
	result
end

plugin/00default.rbを直接変更しなくても、plugin/99altcss.rbとでもして用意すればcss_tagメソッドが置き換わることがわかったのでそうしてます(環境はDebian etchです)。

 Posted by at 1:18 am  Tagged with:
Jun 092007
 

ちょっと動かしてみました。
tDiary-users Projectのサイトに簡単な手順が掲載されています。
tDiary-users Project – Debianへのインストール

ちなみに私は.htaccessを有効にするためのAllowOverride設定をuserdir.confでおこなってます。

$ diff -u /etc/apache2/mods-available/userdir.conf.default /etc/apache2/mods-available/userdir.conf
--- /etc/apache2/mods-available/userdir.conf.default      2007-03-27 23:23:13.000000000 +0900
+++ /etc/apache2/mods-available/userdir.conf      2007-06-01 00:00:00.000000000 +0900
@@ -3,7 +3,7 @@
         UserDir disabled root

         <Directory /home/*/public_html>
-                AllowOverride FileInfo AuthConfig Limit
+                AllowOverride FileInfo AuthConfig Limit Indexes Options=ExecCGI,FollowSymLinks
                 Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
         </Directory>
 </IfModule>

さすがにAllowOverride allにするのはイヤだったので、デフォルトの.htaccessで設定されるOption指定だけを上書き許可してます。