/ 最近 .rdf 追記 設定 本棚

脳log[2006-06-27~]



2006年06月27日 (火)

[]3点

  • [コミック] 高野 真之【BLOOD ALONE 3 (3) (電撃コミックス)】 メディアワークス
  • [コミック] 鈴木 みそ【銭 四巻 (ビームコミックス)】 エンターブレイン
  • [コミック] ととねみぎ【ねこきっさ (3) (まんがタイムKRコミックス) (まんがタイムきららコミックス)】 芳文社

2006年06月26日 (月)

[]4点

  • [コミック] 望月 奈々【ラブのま! (TENMA COMICS)】 茜新社
  • [["Video Games"]] ["SuperLite2000 アドベンチャー アカイイト"]
  • [単行本] 山下 伸夫【ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門】 ソフトバンククリエイティブ
  • [文庫] ジョナサン・キャロル【パニックの手 (創元推理文庫)】 東京創元社

[Ruby] REXML::Element#xpathがおかしい

 1. 適当なXMLファイルの各要素ごとに xpathを列挙して現象を確認

/ItemLookupResponse
/ItemLookupResponse/OperationRequest
/ItemLookupResponse/OperationRequest/HTTPHeaders
/ItemLookupResponse/OperationRequest/RequestId
/ItemLookupResponse/OperationRequest/Arguments
/ItemLookupResponse/OperationRequest/RequestProcessingTime
/ItemLookupResponse/OperationRequest/HTTPHeaders/Header
/ItemLookupResponse/OperationRequest/Arguments/Argument[1]
/ItemLookupResponse/OperationRequest/Arguments/Argument[1]
/ItemLookupResponse/OperationRequest/Arguments/Argument[1]
/ItemLookupResponse/OperationRequest/Arguments/Argument[1]
/ItemLookupResponse/OperationRequest/Arguments/Argument[1]
/ItemLookupResponse/OperationRequest/Arguments/Argument[1]
/ItemLookupResponse/OperationRequest/Arguments/Argument

pathが重複している。

 2. xpathの定義(rexml/element.rb)

    def xpath
      path_elements = []
      cur = self
      path_elements << __to_xpath_helper( self )
      while cur.parent
        cur = cur.parent
        path_elements << __to_xpath_helper( cur )
      end
      return path_elements.reverse.join( "/" )
    end

pathの各要素は __to_xpath_helperで取ってきている。

 3. __to_xpath_helperの定義(rexml/element.rb)

    def __to_xpath_helper node
      rv = node.expanded_name
      if node.parent
        results = node.parent.find_all {|n|
          n.kind_of?(REXML::Element) and n.expanded_name == node.expanded_name
        }
        if results.length > 1
          idx = results.index( node )
          rv << "[#{idx+1}]"
        end
      end
      rv
    end

node.expanded_nameを破壊的に変更している。("Argument" -> "Argument[1]")

 4. 修正

D:\ruby\lib\ruby\1.8\rexml>diff -u element.rb~ element.rb
--- element.rb~      2005-08-12 21:08:47.000000000 +0900
+++ element.rb       2006-06-27 00:36:58.546875000 +0900
@@ -720,7 +720,8 @@
         }
         if results.length > 1
           idx = results.index( node )
-          rv << "[#{idx+1}]"
+          rv += "[#{idx+1}]"
         end
       end
       rv

 5. もう一度列挙して結果を確認

/ItemLookupResponse
/ItemLookupResponse/OperationRequest
/ItemLookupResponse/OperationRequest/HTTPHeaders
/ItemLookupResponse/OperationRequest/RequestId
/ItemLookupResponse/OperationRequest/Arguments
/ItemLookupResponse/OperationRequest/RequestProcessingTime
/ItemLookupResponse/OperationRequest/HTTPHeaders/Header
/ItemLookupResponse/OperationRequest/Arguments/Argument[1]
/ItemLookupResponse/OperationRequest/Arguments/Argument[2]
/ItemLookupResponse/OperationRequest/Arguments/Argument[3]
/ItemLookupResponse/OperationRequest/Arguments/Argument[4]
/ItemLookupResponse/OperationRequest/Arguments/Argument[5]
/ItemLookupResponse/OperationRequest/Arguments/Argument[6]
/ItemLookupResponse/OperationRequest/Arguments/Argument[7]

 6. REXML 3.1.4

をを、直っている。というわけで上記は ruby-1.8.4に付随する REXML 3.1.3限定の話でした。

    def __to_xpath_helper node
      rv = node.expanded_name.clone
      if node.parent
        results = node.parent.find_all {|n|
          n.kind_of?(REXML::Element) and n.expanded_name == node.expanded_name
        }
        if results.length > 1
          idx = results.index( node )
          rv << "[#{idx+1}]"
        end
      end
      rv
    end

3.1.3 からの ChangeLog。(そのうち 3.1.4からの ChangeLogになりそう)

 7. レンタルサーバーの REXMLを更新することはできないので

間に合わせにこんなのを紛れ込ませる。

if(::REXML::Version < '3.1.4')
module ::REXML
  class Element
    def __to_xpath_helper node
      rv = node.expanded_name.clone
      if node.parent
        results = node.parent.find_all {|n|
          n.kind_of?(REXML::Element) and n.expanded_name == node.expanded_name
        }
        if results.length > 1
          idx = results.index( node )
          rv << "[#{idx+1}]"
        end
      end
      rv
    end
  end
end
end

2006年06月23日 (金)

Apache2.2, mod_authz_svn.so, mod_dav_svn.soコンパイル完了

Apacheと opensslは Windowsでも親切なのに Subversionの気難しいこと。

python gen-make.py -t vcproj --with-http=D:\apache2 --with-apr=〜 〜略〜

で書き出された subversion_vcnet.slnを VC++ 2005 Expressで開いて、mod_authz_svnと mod_dav_svnプロジェクトだけエラーを潰して*ビルドして、出来上がった Release\subversion\*\*.soを D:\apache2\modulesにコピー。

Apacheと svnモジュールの準備が整ったところで D:\apache2\bin\httpd.exeを起動しようとすると MSVCR80.dllがないとか言われる。Apacheのコンパイル時に *.exeや *.dllや *.soと一緒に作成されてた *.*.manifestを手動インストール。

httpd -k install

でサービスを登録して、D:\apache2\conf\httpd.confで

LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule dav_svn_module modules/mod_dav_svn.so
<Location /svn>
	DAV svn
	SVNPath "D:/svn/rep"
</Location>

みたいな設定を追加してリポジトリが見えるのを確認した。

 今回の面倒の全ては

python gen-make.py -t vcproj --with-httpd=D:\apache2 --with-apr=〜 〜略〜

ここにあった気がする。apacheが用意してくれた Makefile.winとか *.makを使ってだと apr, apr-util, apr-iconvはコンパイルできるけど Subversion経由だとこれらがコンパイルできない。だから Subversionには既に出来上がってる libapr.libを使ってほしいのに、その希望を伝える方法がわからない。

--with-apr=DIR
--with-apr-util=DIR
--with-apr-iconv=DIR

がそれだと思うのに。

* intl3_svn.libは subversion.tigris.orgから DLできる。

[]3点

みっくるんるん♪はネタとしてよくできてたけど、ハルヒが第12話の学園祭で歌った 2曲は普通にとても良かった。


2006年06月19日 (月)

[]7点

  • [コミック] 犬上 すくね【ラバーズ7 5 (5) (サンデーGXコミックス)】 小学館
  • [文庫] 野村 美月【“文学少女”と死にたがりの道化 (ファミ通文庫)】 エンターブレイン
  • [文庫] ジェイムズ・P・ホーガン, 池 央耿【ガニメデの優しい巨人 (創元SF文庫)】 東京創元社
  • [文庫] ジェイムズ・P・ホーガン, 池 央耿【巨人たちの星 (創元SF文庫 (663-3))】 東京創元社
  • [文庫] グレッグ イーガン【順列都市〈下〉 (ハヤカワ文庫SF)】 早川書房
  • [文庫] 小林 めぐみ【食卓にビールを (富士見ミステリー文庫)】 富士見書房
  • [文庫] 林 トモアキ【お・り・が・み 龍の火 (角川スニーカー文庫)】 角川書店

2006年06月16日 (金)

[]5点

  • [コミック] 小林 尽【School Rumble Vol.13 (13) (少年マガジンコミックス)】 講談社
  • [コミック] 久米田 康治【さよなら絶望先生 第4集 (4) (少年マガジンコミックス)】 講談社
  • [コミック] 畑 健二郎【ハヤテのごとく! (7) (少年サンデーコミックス)】 小学館
  • [雑誌] 【ヤングアニマル 増刊 あいらんど 2006年 7/30号 [雑誌]】 白泉社
  • COMIC RIN vol.19 2006.JUL

Amazon ECS: 最近 BrowseNodesが取得できない。ItemAttributesがちょこちょこ変わってる。

今日発売のスクールランブル 13巻と、3年前の 5月発売の 1巻を比べてみる。

<ItemAttributes>
  <Author>小林 尽</Author>
  <Binding>コミック</Binding>
  <Creator Role="著">小林 尽</Creator>
  <Label>講談社</Label>
  <ListPrice>
    <Amount>410</Amount>
    <CurrencyCode>JPY</CurrencyCode>
    <FormattedPrice>¥ 410</FormattedPrice>
  </ListPrice>
  <Manufacturer>講談社</Manufacturer>
  <ProductGroup>Book</ProductGroup>
  <PublicationDate>2006-06-16</PublicationDate>
  <Publisher>講談社</Publisher>
  <Studio>講談社</Studio>
  <Title>School Rumble Vol.13 (13)</Title>
</ItemAttributes>
<ItemAttributes>
  <Author>小林 尽</Author>
  <Binding>コミック</Binding>
  <Creator Role="著">小林 尽</Creator>
  <ListPrice>
    <Amount>410</Amount>
    <CurrencyCode>JPY</CurrencyCode>
    <FormattedPrice>¥ 410</FormattedPrice>
  </ListPrice>
  <NumberOfPages>161</NumberOfPages>
  <PackageDimensions>
    <Length Units="cm">18</Length>
  </PackageDimensions>
  <ProductGroup>Book</ProductGroup>
  <PublicationDate>2003-05-16</PublicationDate>
  <Publisher>講談社</Publisher>
  <Title>School Rumble Vol.1 (1)</Title>
</ItemAttributes>
  • Label, Manufacturer, Studioというよくわからない要素が追加
  • NumberOfPages, PackageDimensionsが削除たまたまっぽい

 NumberOfPages

ページ数がわからなくなるのは残念だけど、アマゾンの登録するページ数って多分ページ数の書いてある最後のページのこと。だから半端になる。

大抵の本は先頭から数えた紙の枚数をページとしている。最後まで数えたらキリのいい数字になる。

スクールランブルの 13巻を見てみたら奥付に 161Pと書いてある。あれ? 半端。161Pだと巻頭のカラー2Pが含まれていて奥付が含まれていない。純粋な紙の枚数は 161-2+1=160P。OK。この場合は 160+2(カラー)=162Pということにしよう。

 Label

この要素からは「講談社」でなく「少年マガジンKC」という値を取得したい。

 BrowseNodes

アマゾンのサイトを見る限り、スクールランブル 13巻には

ジャンル別 > コミック・アニメ・BL > 出版社別 > 講談社 > 少年マガジンKC

というブラウズノードが存在している。何で取得できなくなったのだろう。

ブラウズノードからはレーベルを取得したいだけなので、<Label>に期待した値を入れてくれればそれで済むし、しかも楽なんだけど〜。


2006年06月11日 (日)

[][][文庫] ジェイムズ・P・ホーガン, 池 央耿【星を継ぐもの (創元SF文庫)】 東京創元社

月面で一体の死体が発見された。人間と同じ姿ながら、5万年前に死んでいる彼は地球人ではありえない。だが別々に進化したにしては両者は似すぎている。彼は宇宙人なのか地球人なのか。

世紀の発見に沸く地球。様々な分野の科学者集団が一つの死体にアリのように群がり、たちどころに、とはいかないけれど少しずつ、時には意見を対立させながら謎を明らかにしていく過程の興奮すること!

ところが小骨がひとつ引っ掛かっていて、チャーリー(件の死体)の手記にこうある。

「ミネルヴァはどうなったろうか。この禍いの後、果たしてわれわれの子孫はより恵まれた場所で生き延びるだろうか。もし生き延びたとしたら、彼らはわれわれが何をしたか、いくらかでも理解するだろうか。」(206ページ)

これを読んだとき「星を継ぐもの」というタイトルの意味がわかった気がしたし、実際に結末ではそういう結論だったのだけど、その事実と結論された事柄はこの手記を書き残してすぐに死んでしまったチャーリーには知り得ないことのはずなのだが。

「彼らはわれわれが何をしたか、いくらかでも理解するだろうか。」という部分から、チャーリーたちルナリアンが「より恵まれた場所で生き延びる」ために何らかの行動を起こしたのだと思っていたし、実際にルナリアンは死にゆく自分たちの星から脱出するために惑星間の移住計画を推進していたのだからチャーリーの手記に間違いはなく思える。

だが、チャーリーがこの手記を書いている状況を考えると違ってくる。 チャーリーがこれを書いているのは自分が死ぬ寸前のことであり、その原因は対立する二国間の戦争(星の危機に際して戦争!)による破壊だとしたら? チャーリーの敵国はチャーリーの居た月面の基地を破壊したが、チャーリーたちもまた自らの星に存在する敵基地を攻撃して破壊している。

移住計画実現の見通しも立たないうちに始まった、母星を小惑星帯に変え、自らを絶滅に至らしめる戦争のさなかにあっては、あまりにも希望と空想に満ちたメッセージじゃないか。

[]7点

  • [文庫] 清原 なつの【飛鳥昔語り (ハヤカワコミック文庫 (JA843))】 早川書房
  • [単行本] 横田増生【アマゾン・ドット・コムの光と影】 情報センター出版局
  • [文庫] ジェイムズ・P. ホーガン【内なる宇宙〈下〉 (創元SF文庫)】 東京創元社
  • [文庫] グレッグ イーガン【しあわせの理由 (ハヤカワ文庫SF)】 早川書房
  • [文庫] デイヴィッド・エディングス, 佐藤 ひろみ【蛇神の女王 - ベルガリアード物語】 早川書房
  • [文庫] キャロル オコンネル【クリスマスに少女は還る (創元推理文庫)】 東京創元社
  • [文庫] リチャード マシスン, ロバート・R. マキャモン【震える血 (祥伝社文庫)】 祥伝社

2006年06月10日 (土)

[tDiary] セクション毎にフットノートが付けられる。(やろうと思えば)

tDiary-2.1.4からは section_enter_procと section_leave_procが用意されてるので、現在 body_leave_procを使って一日毎に行ってることを、section_leave_procでセクション毎に行うだけ。

Windows Vista beta2、Irvine、2Gの壁

気が付いたらファイルサイズが 3.8GBを超えてるのにまだダウンロードしてる。32bit版は約 3.5GBのはずなのに。

ダウンロード済みのサイズがマイナスMBになってるし。進捗グラフがマイナス%になってる。MSのサーバーに「Range: bytes=-123456789-」みたいにマイナスから始まる変な要求を送ってる。

[tDiary] index.rb: UAにキャッシュを許可。If-Modified-Sinceをチェック。

構わないと思うのですよ、リロードの度にプラグインを評価しなくても。

--- index.rb~	2005-06-13 14:05:11.000000000 +0900
+++ index.rb	2006-06-11 00:52:18.203125000 +0900
@@ -60,11 +60,15 @@
 		body = ''
 		head['Last-Modified'] = CGI::rfc1123_date( tdiary.last_modified )

+		require 'time'
+		ims = ENV['HTTP_IF_MODIFIED_SINCE']; ims = ims ? Time.httpdate(ims) : Time.at(0); # ENV?
+		diary_changed = (tdiary.last_modified - ims) > 30; # 30?
+
 		# ETag testing code
 		#require 'md5'
 		#head['ETag'] = MD5::md5( body )

-		if /HEAD/i !~ @cgi.request_method then
+		if /HEAD/i !~ @cgi.request_method and diary_changed then
 			if @cgi.mobile_agent? then
 				body = conf.to_mobile( tdiary.eval_rhtml( 'i.' ) )
 				head['charset'] = conf.mobile_encoding
@@ -73,15 +77,15 @@
 				body = tdiary.eval_rhtml
 				head['charset'] = conf.encoding
 				head['Content-Length'] = body.size.to_s
-				head['Pragma'] = 'no-cache'
-				head['Cache-Control'] = 'no-cache'
+#				head['Pragma'] = 'no-cache'
+#				head['Cache-Control'] = 'no-cache'
 			end
 			head['cookie'] = tdiary.cookies if tdiary.cookies.size > 0
 			print @cgi.header( head )
 			print body
 		else
-			head['Pragma'] = 'no-cache'
-			head['Cache-Control'] = 'no-cache'
+#			head['Pragma'] = 'no-cache'
+#			head['Cache-Control'] = 'no-cache'
 			print @cgi.header( head )
 		end
 	rescue TDiary::ForceRedirect

2006年06月08日 (木)

(すっぱいブドウ ∩ 負け惜しみ)≠φ

その心は、ブドウを取りそこなったキツネは、それをすっぱいと言う。

へぇ〜へぇ〜へぇ〜

[Ruby][SQLite] sqlite3-rubyのバグ。SQLite3::Database#create_aggregate()などに注意

Segmentation faultが起こったり起こらなかったり、起こったとしても(特定のパターンはあるにせよ)違う場所だったりとはっきりしないエラーに困らされた。

原因が create_aggregateで独自に定義した集約関数を使ってるからだということはわかってる。RubyForgeに関連のありそうな投稿を見つけた。

原因はリファレンスが切れて GCに回収されてしまったオブジェクトを参照しようとしてることにある、ということで良いか? 何ともヘタレな回避策は↓。

GC.disable; db.execute(sql); GC.enable

sqlite3-rubyはもうメンテされないのかね。名前付きプレースホルダの問題も解決されないし。

sql = 'SELECT * FROM Books WHERE Title = :title;'
db.execute(sql, {'title'=>'惑星をつぐ者'}) #=> no such bind parameter 'title' とかなんとか
db.execute(sql, {':title'=>'星を継ぐもの'}) #=>(゜Д゜ )ウマー

bind_parameterのキーに普通はコロンを付けたりしないよね、多分。


2006年06月07日 (水)

[SN25P][WinXP] eventtriggers.exe

WINDOWSが起動しなくなってから、復旧した後でイベントビューアを見てみると大量のエラーが記録されていてびっくりすることがある。こんなの。

ページング操作中にデバイス \Device\Harddisk1\D 上でエラーが検出されました。
ドライバは \Device\Harddisk1\D でコントローラ エラーを検出しました。
アプリケーション ポップアップ: Windows - 遅延書き込みデータの紛失 : ファイル C:\Temp\$Mft のためのデータを一部保存できませんでした。データを損失しました。 このエラーは、コンピュータのハードウェアまたはネットワーク接続の障害によって発生した可能性があります。このファイルをどこか別の所に保存してください。

最初のエラーが出た時点で気づいていれば WINDOWSが起動しなくなる前に何とかできたかもしれない。でも WINDOWSはエラーログを吐き続けるだけで何の警告もしてくれない。それをしてくれるのが eventtriggers.exe。特定のイベントの発生をトリガーにして特定のコマンドを実行してくれるプログラム。\WINDOWS\system32の中にあるはず。但し Windows XP Professional限定。少なくともこの PCには入っていない。

まただよ。また Home Editionの制限にやられた。こんなにも制限事項に引っかかるのが事前にわかってたら価格差を考えても Proを買ってたのに。


2006年06月04日 (日)

[]2点

  • [コミック] 椎名 軽穂【君に届け (1) (マーガレットコミックス (4061))】 集英社
  • [コミック] 桃森 ミヨシ【ハツカレ (8) (マーガレットコミックス (4055))】 集英社

読んでみたくなる表紙カバー。

カギ括弧と固有名詞と句読点

以上を読んで、俺ルールを述べる。

 固有名詞は絶対

「モーニング娘。」は「。」まで含めて初めて「モーニング娘。」。* 外国語表記のアーティスト名を勝手にカタカナにして夕刊のヒットチャートに掲載していた読売新聞が嫌いです。

 閉じ括弧直前の句点を省略するなんてどこのローカルルール?

小学校で書写とかいう苦行を散々やらされたがそんなルールはなかった。教科書は「〜〜。」というように書かれてたし、これをノートに写すときは句点と閉じ括弧を同じマスに入れるというルールがあったことまで覚えてる。(間違えると間違えた箇所から書き直し。手書きのノートに「コピペ」「挿入」なんてないから延々書き直し(´Д⊂)

教科書至上主義の俺には活字媒体で幅をきかせてる送りがなの規則も不自然に映る。ATOKは送り仮名の送り方として「本則」「省く」「送る」「すべて」の 4つから選べるようになっているが、ATOKのヘルプから送り方の例を抜き出してみる。

本則終わる表す
省く終る表す
送る終わる表わす
すべて終る・終わる表す・表わす

俺の時代の俺の小学校の教科書と漢字ドリルの送り仮名は全て本則で書かれていた。ATOKの設定は当然「本則」にしている。新聞・雑誌など活字メディアで一番目につくのが「表す」。俺にしてみれば「短い」('か'は不要)と同列の誤りに見えてしまう。

 横書き縦書き関係なく日本語なら「、」「。」(が理想)

逆に日本語でなければ部分的にカンマも使う。

私は pearl, python, rubyを触ったことがありません。

公文書や新聞では表記を統一しなければいけないとかで読点やカンマを混在させたりはできないかもしれないがね。二重母音の「エイ」を全て「ー」と書くというのもそう。個人の文章や著作なら「ゲーム」「メイン」「メール」「プレイヤー」みたいに俺基準に沿って、より自然に感じる表記を選べるけれども、表記を統一する必要がある場合はどちらかを選ばなければいけないわけで、その結果不自然に見える部分が出てくるのは仕方ないと思ってる。

 「遷移」は Web用語としては一般的

花岡っちは自分の業界を絶対視しすぎ。句読点然り、遷移然り。とはいえ、みずほ銀行のサイトに一般人への配慮が欠けてるのも事実。みずほ銀行のページに行ってみても確認できなかったので想像で書くけど、「宝くじに遷移します」というメッセージを見るに、これってリダイレクトのみを目的として一時的に表示されるページに書かれたメッセージじゃないの? 一瞬意味がわからなくてもすぐにページが切り替わるのを見れば「ああ、そういう意味だったんだな」ってわかると思うんだけど。意味がわからなくても困らないし。(みずほ銀行に同情してみたけど不親切なメッセージってことは変わらんね)

初めはトランジションという単語を、HTMLを触り始めてすぐの頃に目にした。Internet Explorerではページを表示するときと去るときに色々と用意されたビジュアル効果を適用することができて、これがトランジションと呼ばれていた。遷移という単語はこれの訳語として後で知った。以後、遷移は自分の中で一般化した。4月7日の日記で「遷移」が 4回使われている。(他にネットを通して初めて自分の中で一般化した言葉といえば「萌え」。初めて目にしたときは「萌える」=「芽が出る」だったので全く意味不明だった。)

* 書いてて思ったけど、カギ括弧に入れて地の文から隔離したくなるね「モーニング娘。」って。

 http://www.microsoft.com/japan/developer/library/jpisdk/dhtml/content/filters.htm#CSS_Filters

[tDiary]テーマ:横幅を制限してみた。

以前から横にだらだら延びた段落は醜いと思っていた。

このようなページを見つけた。C O U L D:固定か可変かそれが問題だ

早速 cssに下記の一行を追加した。

body { max-width: 50em }

emってな曖昧な単位に少し不安があるが Firefox1.5と IE7.0で同じように見えるので良しとする。


2006年06月02日 (金)


2006年06月01日 (木)

[]2点

  • [文庫] 櫂末高彰【学校の階段2 (ファミ通文庫)】 エンターブレイン
  • [文庫] 定金 伸治【制覇するフィロソフィア (集英社スーパーダッシュ文庫)】 集英社

2006年05月30日 (火)

[Ruby] Windowsの環境変数と文字コードのわからん

UTF-8な文字列を環境変数に設定して読み出すと尻切れ。

C:\Documents and Settings\ds14050\デスクトップ>irb
irb(main):001:0> sjis = '高殿 円\' # 『銃姫』を読んでる。
=> "\215\202\223a \211~"
irb(main):002:0> ENV['hoge'] = sjis
=> "\215\202\223a \211~"
irb(main):003:0> ENV['hoge'] == sjis
=> true
irb(main):004:0> require 'nkf'
=> true
irb(main):005:0> utf8 = NKF::nkf('-w', sjis)
=> "\351\253\230\346\256\277 \345\206\206"
irb(main):006:0> ENV['hoge'] = utf8
=> "\351\253\230\346\256\277 \345\206\206"
irb(main):007:0> ENV['hoge'] == utf8
=> false
irb(main):008:0> ENV['hoge']
=> "\351\253\230\346\256\277 \345\206"

日本語の PATH_INFOが文字化けするのに閉口してて、Apacheだとか mod_rewriteが悪さをしてるのかと思ってたけど環境変数を経由してたところに問題があったのかも。

文句を言ってても解決しないので REQUEST_URIから SCRIPT_NAME相当部分を取り除いてから URLデコードして自分で PATH_INFOを手に入れる。

ところで URLエンコードされたスラッシュ(%2F)が含まれてた場合、PATH_INFOを参照するだけではその存在がわからないと思うんだけど。やっぱり PATH_INFOって使えない?(<< いやいや PATHと名の付くものにスラッシュやバックスラッシュを含めるのが間違い)

[tDiary] tdiary/hikidoc.rb: <pre>の中でも強調したい

<pre>の中だからってタグが書けないわけじゃなし。インライン要素なら OKのはず。

C:\Documents and Settings\ds14050\デスクトップ>diff -u hikidoc.rb~ hikidoc.rb
--- hikidoc.rb~ 2005-10-06 16:42:35.000000000 +0900
+++ hikidoc.rb  2006-05-30 06:34:32.265625000 +0900
@@ -142,8 +142,9 @@
   end

   def restore_pre( text )
-    ret = unescape_meta_char( text, true )
-    ret = restore_plugin_block( ret, true )
+    text = inline_parser( text )
+#    ret = unescape_meta_char( text, true )
+#    ret = restore_plugin_block( ret, true )
   end

   ######################################################################
  • inline_parser()が ''強調'', '''もっと強調''', ==打消==, [[WikiName]]や URLっぽい本文を解釈する。
  • unescape_meta_char( text, true )をコメントアウトすることでメタ文字({, }, :, ', ", |)のエスケープを有効にしてるのは inline_parser()によってシングルクォートなどが解釈されるようになった結果、<pre>の中にシングルクォートそのものを書く方法がなくなったから。
  • restore_plugin_block(ret, true)をコメントアウトしてるのは <pre>の中でもプラグインを使いたいから。
  • メタ文字をリストアップしていて気付いたけどイコールとブラケットがメタ文字に含まれてなくてエスケープができないから、こんなふうに ==打ち消し== とか [[WikiName]] の書き方の例示ができなくね? 左のは {{'=='}} みたいにプラグイン記法でなんとかしたけど。

 <pre>の中と外でマークアップが変わらないことのテスト

 [Wikiソース]
''test''
 ''test''
''test&'test\'''
 ''test&'test\'''
 [変換後のHTML]
<p><em>test</em></p>
<pre>
<em>test</em>
</pre>
<p><em>test&amp;'test'</em></p>
<pre>
<em>test&amp;'test'</em>
</pre>

[]13点、14冊

  • [文庫] 神林 長平【グッドラック―戦闘妖精・雪風 (ハヤカワ文庫JA)】 早川書房
  • [文庫] 清原 なつの【千の王国百の城 (ハヤカワ文庫 JA (667))】 早川書房
  • [文庫] 清原 なつの【春の微熱 (ハヤカワ文庫 JA (694))】 早川書房
  • [文庫] 桑島 由一【神様家族〈8〉おはよう!こどもショー (MF文庫J)】 メディアファクトリー
  • [文庫] 野島 けんじ【鳥は鳥であるために (4) (MF文庫J)】 メディアファクトリー
  • [文庫] 仁木 健【Add 機械に捧ぐレクイエム (角川スニーカー文庫)】 角川書店
  • [文庫] 仁木 健【Add 機械の謳うララバイ (角川スニーカー文庫)】 角川書店
  • [文庫] 仁木 健【Add 機械が嗤うスケルツォ (角川スニーカー文庫)】 角川書店
  • [文庫] 支倉 凍砂【狼と香辛料 (電撃文庫)】 メディアワークス
  • [コミック] 凜野 ミキ【光 3 (3) (IDコミックス ZERO-SUMコミックス) (IDコミックス ZERO-SUMコミックス)】 一迅社
  • [コミック] 久世 番子【imp! 〈インプ〉 (Wings comics)】 新書館
  • [コミック] 【es~エターナル・シスターズ 乙女と乙女の恋するコミックアンソロジー(2)】 一迅社
  • [単行本] J. K. ローリング, J. K. Rowling【ハリー・ポッターと炎のゴブレット 上下巻2冊セット (4)】 静山社