パーマリンクが”“非連続な0を含まない自然数”“と定義できるのが嬉しいなどと、生活力の無さそうな発言が続いてますが(言ってない)、一応、昼間は仕事をしています。
原理主義的な仕様やコードを書くのは癒しのためです。そうしておくと仕事では目を覆いたくなるようなアドホックな実装も楽しめます。
パーマリンクが”“非連続な0を含まない自然数”“と定義できるのが嬉しいなどと、生活力の無さそうな発言が続いてますが(言ってない)、一応、昼間は仕事をしています。
原理主義的な仕様やコードを書くのは癒しのためです。そうしておくと仕事では目を覆いたくなるようなアドホックな実装も楽しめます。
p0t.jp ドメインからこの docs.komagata.org(ついでにMTから自作ツール)に引っ越してしばらく経ちましたが大体ちゃんとリダイレクトできてるみたいです。
Google Analyticsで見てみると・・・
おおお、きもちー!
俺がやりたかったのはこれだー!
/index.csv とかからCSV形式でエクスポート(というか表示形式がCSVなだけ)できるので他の形式への変換とか引越しもいかにも楽そう。パーマリンクが複雑だとそれを移行することを想像してソワソワする(病気)んだけどそれがなくなりました。
そもそもひとつのCSVで全データを表現できるということはエントリーが構造化されてないという証なので機能追加するときは
「ひとつのCSVでエクスポートできるか?」
というのを目安にしようと思った。
ここのAtomをRailsのAtomFeedHelper#atom_feedで出力してたんですが、基本全て数値文字参照で出る。
エンコーディングに関係無く表示されるので正しくはあるんだろうけど、クロールされてるところ(Planet PHP Japanなど)ではもう一度エスケープがかかって数値の羅列になってしまう。
フィードクライアントとしては数値文字参照をHTMLとして解釈した上でエスケープする必要があるだろう。しかし、自分がクロールする側になったら正直、
「面倒だから数値文字参照などにせんでくれ・・・」
と思うだろう。
しかもそういったクライアントを通して見る第三者の人にとってはそんなサーバークライアント間のやり取りなどどうでもいいことで、単に
「文字化けうぜぇえええ」
である。
atom_feedメソッドでのHTMLのエスケープはたくさんのクラスを遡って、最終的にはここ(String#to_xs)でやってるらしい。
/activesupport-2.2.2/lib/active_support/vendor/builder-2.1.2/builder/xchar.rb:
class Fixnum
XChar = Builder::XChar if ! defined?(XChar)
# XML escaped version of chr
def xchr
n = XChar::CP1252[self] || self
case n when *XChar::VALID
XChar::PREDEFINED[n] or (n<128 ? n.chr : "&##{n};")
else
'*'
end
end
end
(...snip...)
class String
# XML escaped version of to_s
def to_xs
unpack('U*').map {|n| n.xchr}.join # ASCII, UTF-8
rescue
unpack('C*').map {|n| n.xchr}.join # ISO-8859-1, WIN-1252
end
end
コメントを見ると、そもそもコレ自体XCharライブラリーというのを拝借しているものらしい。
Wikipediaによると、西欧22言語をサポートするISO-8859-1もCP1252も共にLatin1と呼ばれますが、IBM由来のMicrosoft Codepage(CP)では0×80から0×9Fの範囲の文字が拡張されています。(ユーロ、ダガーとか)
要はShift_JISとCP932みたいな問題がLatin1とCP1252にもあるんですな。
何のためのライブラリかというと、多言語化の時に問題になりそうなそのCP1252の拡張部分を適当な文字にマッピングするためのものらしい。(自動的にCP932で書いたら問題が起きそうなことが予想できる)
とりあえずUnicodeをUTF-8で使ってれば問題無いだろうということで下記の様に対処した。
config/initializers/rails_ext.rb:
class String
def to_xs
ERB::Util.html_escape(self)
end
end
大丈夫かな?
ActiveRecordでcreated_atとかupdated_atを自動更新したくない場合はモデルのクラス変数record_timestampsをfalseにすればいいんだって!
class Doc < ActiveRecord::Base
@@record_timestamps = false
end
ッアース!(Ass)
携帯で自分の住所は、「メニュー」「0(ゼロ)」!!!
いっつも忘れるので。
そういえばDreamHostのPassengerでRackだけで動くのか試してなかった。
% tree
.
|-- config.ru
|-- public
`-- tmp
2 directories, 1 file
最小限。
% cat config.ru
app = proc do |env|
return [200, { "Content-Type" => "text/plain" }, "ζ゚<I can fly."]
end
run app
http://i.can.fly.komagata.org/
動いた。こりゃ便利。
githubって色んな機能がありますが、好きな機能のひとつが、READMEを置くと勝手に表示してくれる機能。(README.rdocとかでもいいみたいです)
これってRailsプラグインだと”“init.rbにプラグインインストール後にコンソールにREADMEを表示するように書いておく”“なんて慣習もあるので1人3役みたいでお徳な感じです。
プラグインやライブラリを探す時なんかはどうせプログラマー向けなんでREADMEさえ出てれば必要十分で、Wikiすら見なくていいので便利です。
まだこのサイトへのコメントの実装方法を考えています。
調べていたところ、JS-Kitのやり方にとても感心しました。
JS-Kit: CommentsをカスタマイズするRSSをセットアップする。
以下のURLを使えば、RSSを通じて全部のコメントがアクセス可能になります。:
http://js-kit.com/rss/your.site.com/pathpathが、有効なpermalink属性あるいは有効なpath属性の値のどちらかである場合。
別のやり方として、DNSエントリーを設定する方法もあります。:
js-kit.your.site.com. IN CNAME js-kit.com.
シンプルなのにスゴイ分散システムです。DNSとHTTPで大抵のことが解決できるんですな。
さっそくJS-Kitを使ってみたんですが、どうも機能が多過ぎて気に入らないところが色々。単に見た目とかの問題なんですが。最初はシンプルだったんでしょうが、商売にしようとするとこうなっていくんですかね。
自分で似たようなものを作るか・・・? いや、しかし・・・。