トップ 最新 追記   RSS 1.0 FEED  

Journal InTime


2005-04-03 (Sun) [長年日記]

_ [ximapd] ximapd

とりあえず、名前はximapdに。

$ /usr/local/bin/project-name ximapd
ximapd:
ximapd.nu domain   : not registered
ximapd.ac domain   : not registered
google count       : 2
sourceforge.jp     : not registered
ximapd.net domain  : not registered
ximapd.org domain  : not registered
ximapd.com domain  : not registered
savannah.gnu.org   : not registered
sourceforge.net    : not registered
ximapd.info domain : not registered
ximapd.cc domain   : not registered
ximapd.to domain   : not registered
ximapd.jp domain   : not registered
ximapd.gr.jp domain: not registered
freshmeat.net      : not registered
raa.ruby-lang.org  : not registered

すばらしい。

で、Thunderbirdからとりあえずアクセスできるようになった。 本当ならばんざーいと言うところである。 しかし、ここで問題が。

計画では、

  • INBOXは通常はMLのメールは表示しない(UIDは歯抜けになる)
  • ただし、INBOXで検索を行った時はMLも含む全メールを検索

となるはずだった。 ところが、Thunderbirdは、検索結果に含まれるUIDが、以前に そのメールボックスで1:*をFETCHした結果に含まれていない ものだった場合、無視してくれるようだ。 うーん、知らないUIDだったら検索後にFETCHしてくれよ。

どうしよっかなあ。

追記:

  1. INBOXの検索時にServer Side Saved Search Folderを作成
  2. 作成されたフォルダを参照

という手順なら全フォルダの検索ができそう。 でも面倒だよなあ。

といって、Thunderbirdの機能で全フォルダの検索をやらせると、当然ながら フォルダごとに検索することになってしまう。うーん、うーん。


2005-04-04 (Mon) [長年日記]

_ [ximapd] CHECK, STOREを実装

CHECK, STOREを実装。

やっぱり、INBOXとは別にALLみたいなメールボックスを作った方が いいかもしれない。 でもFETCH 1:*みたいなのに真面目に返事してたら遅いよなあ。

たださんがチャレンジされているようですが、現状のximapdを使うのは いろんな意味であぶないので気を付けてくださいねー > みなさん


2005-04-05 (Tue) [長年日記]

_ [ximapd] STATUSを実装

ximapd.rb自体がバージョンアップしていたのか。

[ただのにっき(2005-04-05)より引用]

というか、たださんの日記を見てあわてて直しました。

最新にしてリトライ。INBOXやらINBOX.Trashやらmlやらが見えた。さっきと違うところ止まったが。って、STATUSコマンドはまだ未実装じゃん!:

[ただのにっき(2005-04-05)より引用]

とりあえず、いいかげんに実装しました。UNSEENは0しか返しませんけど。

あとは、INBOXにメールを放り込む方法さえわかれば(笑)。

[ただのにっき(2005-04-05)より引用]

$ ximapd.rb --import filename
$ ximapd.rb --import < filename
$ ximapd.rb --import dirname

みたいな感じでインポートできるかもしれません。

しかし、次はBODYのFETCHでコケると予想;p

本日のツッコミ(全2件) [ツッコミを入れる]

_ ただただし [/home/sho/ximapd/db/__db.001: No such file or directory --..]

_ shugo [ディレクトリ構造が変わりましたので、一度/home/sho/ximapdを削除してください。]


2005-04-06 (Wed) [長年日記]

_ [Ruby] ruby-profのバグ修正

SVNのHEADで、 レポートをもらっていたバグを修正。

  • 一つは、callccを使った場合にSEGVになるというもの。とりあえず、 例外にする方向で対応。
  • もう一つは、メソッドのクラスがGCで回収された場合に、SEGVになったり、 `method `nil?' called on terminated object'のようなエラーになるというもの。 こちらはHashにクラスを登録して置くことにした。 プロフファイル用のフック内ではRubyの呼び出しはしない方針だったけど、 仕方あるまい。

2005-04-07 (Thu) [長年日記]

_ [ximapd] RENAME

RENAMEを実装。

_ [ximapd] queriesフォルダ

queriesフォルダの下にメールボックスを作ると、メールボックス名を (Rastの)検索クエリとして検索するようにしてみた。 たとえば、`queries/from : shugo@ruby-lang.org'だと`from : shugo@ruby-lang.org'というクエリ(From:にshugo@ruby-lang.orgが含まれるメール)の検索結果をメールボックスとして作成する。 もちろん、新しく来たメールもどんどん追加される。 queriesフォルダの外に移動したり、フォルダ名自体を変えてしまってもOK。

ちなみに、既存のdata_dirがある場合は、mailbox.dbの`mailboxes:'という部分に、

queries:
  flags: "\\Noselect"

のようなエントリを追加する必要があります。

_ [ximapd] SUBSCRIBE/UNSUBSCRIBE

NOOPとして実装。

_ [ximapd] procmail

ちなみに、procmailでspamなどを振り分けて、ちゃんと読みそうなメール だけをximapdにimportしている。 spamのためだけに検索を使わないメールボックスを実装するのが面倒なので...。 Rastが十分にスケールしてくれればspamも突っ込むんだけど、一日数千通ペースは苦しいだろうなあ。


2005-04-08 (Fri) [長年日記]

_ [ximapd] UNSEEN

STATUSコマンドでちゃんとしたUNSEENの値を返すようにした。 Thunderbirdの新着メールチェックがちゃんと動くようになった気がする。

_ [ximapd] FETCH

(UID FETCHではなく)FETCHを実装。

_ [買い物] glasses valley

かずひこさん夫妻とglasses valleyのメインストアへ。

残念ながら、オーナーもFreudenhausのデザイナーの人も食事に出ているとのことだったが、何点かの新作を見ることができた。といっても、前のモデルも知らないけど。 店長さんも言ってたけど、テンプルが格好良いです。

帰りにとある事情でプジョーを運転させてもらったけどいきなりエンスト。 その後も何回もウインカーと間違えてワイパーを作動させてしまった(右ハンドルだけどウインカーだけ逆なのだ)。

本日のツッコミ(全2件) [ツッコミを入れる]

_ ay [前に眼鏡を買ったのはいつだったか……という生活を私は送ってしまっていますのでうらやましいです。店長さんは変わらずお元..]

_ shugo [はい、元気そうですよ。 松江に来られる際にはお立ち寄りください...って私が言うのも変ですけど。]


2005-04-09 (Sat) [長年日記]

_ [家族] かけっこ

子どもを近所の子と遊ばせていたらかけっこがはじまった。うちの子ときたら、遅い遅い。まあ、女の子だから、まだいいか。でも下の子も不安だなあ。

_ [買い物] gimme glasses

娘とふたたびglasses valleyへ。昨日は到着が遅れていた分の眼鏡もちゃんと届いていた。 今度はStefan Flatscherさんにもお目にかかることができた。娘のことを"She's beautiful"と言われ照れる。彼も年の近いお子さんがいるそうだ。

おだてられたせいというわけでもないが、買うつもりはなかったのに、買うハメになってしまった。 gimme glassesというスイスのブランドだが、同じくStefanさんのデザイン。Freudenhausの新作にも魅かれたが、入手できるのが8月になるのと、 なかなかお値段が...*1ということでパス。仕上ったら日記で自慢します。

*1  まだ決まっていないけど4万くらいになりそう、との話


2005-04-10 (Sun) [長年日記]

_ [ximapd] レポジトリの移動

以下のURLにレポジトリを移動。

<URL:http://svn.shugo.net/ximapd>

_ [ximapd] trac

tracのサイトを用意。

_ [Ruby] ruby-prof-0.2

バグフィックスのみ。

Debian sidな人は、以下のapt-lineでapt-get install libprof-ruby1.8できます:)

deb http://shugo.net/debian/libprof-ruby ./

_ [その他] テーマ変更

ちょっと変えてみた。

GIMPでレイヤーとかフィルタとかパスとかをはじめて使ったけど、なかなか面白い。 セクションアンカーなんかほとんどチュートリアルそのままだけど。


2005-04-11 (Mon) [長年日記]

_ [ximapd] Becky!対応

FETCHが実装されるとBecky!で読めるかな〜と思ったが、相変わらず一覧が出ない。エラーはEXPUNGEでしか出てないんだが。何がいけないんだろう。つーか、未読が2000件とか出てる時点でなんか変(笑)。またメールボックス作り直してみるか?

Thunderbirdでの動作はだいぶ良好で、UNSEEN実装のおかげでMLの未読が出るようになった! 便利! でもなぜか、こっちもINBOXの一覧が出なくなっちゃった!(こっちはINBOXだけ) なんでや……orz。

[ただのにっき(2005-04-11)より引用]

うーん、何ででしょうね。 Becky!はSEARCHで未取得メールをチェックするようなのでSEARCHの結果がおかしいとか。 ximapd.rb -dのログをいただければ何かわかるかもしれません。 EXPUNGEはとりあえずNOOPとして実装しました(そんなんばっかり)。

あと、自分のThunderbirdではINBOXの一覧はちゃんと出ますね。 INBOXの未読管理は何かおかしいんですけど、SELECTのuntagged responseでUNSEENを返してないからかなあ。

_ [その他] Projects

TracMultipleProjectsを参考に、複数のプロジェクトをApacheの設定は1つにして管理するようにしてみた。 mod_pythonを使わなくてもできたのか、ってmod_rewrite使えばそりゃできるよな。

_ [Ruby] ruby-profのstack_tが衝突

バグフィックスしてリリースしたとたんに、新たなバグレポートが。 Mac OS 10.3.8のsys/signal.hにも定義されているらしい。

prof.cの中だけならOKかと思ったが、甘かった。

_ [仕事] pound

mod_rubyスクリプトで、コードは変わってないはずなのに、 なぜかパフォーマンスが40%くらい落ちてしまっていて、 悩んでいたのだが、pound*1を使うように したせいだった。 入れたのすっかり忘れてたよ。

やっぱり静的なコンテンツはポート番号を変えよう。

もちろん、poundが有用なケースはたくさんあると思いますよ、念のため。

*1  HTTPのロードバランサ


2005-04-12 (Tue) [長年日記]

_ [家族] 入園式

入園式

長女が幼稚園デビューした。年少の女の子は一人だけらしい。不安だ。

ちなみに自分は家で次男のお守りをしてました:(

_ [tDiary] Rast 検索 for tDiary

インデックスの更新部分を、squeeze.rb プラグインを元にして、コマンドとしてもプラグインとしても動作するようにしました。もう少しだけ Rast 開発チームの中で検証したら公開できるかな。

[ふぇみにん日記 - Rast 検索 for tDiary (2) , 会社説明会 , 先週の Amazon ご注文より引用]

人柱になってみました。 tDiary 2.0.0だといくつか問題がありましたけど、何とか動いたようです。


2005-04-13 (Wed) [長年日記]

_ [mod_ruby] 環境変数の復元

restore environment variables. (closes #9)

[[65] (changeset) - mod_ruby - Tracより引用]

スクリプトの実行後に環境変数を復元するよう修正。

_ [Ruby] メンテナンス作業のお知らせ

Thu Apr 14 12:00:00 JST 2005にサーバのメンテンス作業を行います。短時間アクセスできなくなる可能性がありますが、あしからず御了承ください。

[メンテナンス作業のお知らせ - オブジェクト指向言語Rubyより引用]

というわけで、よろしくお願いします。


2005-04-14 (Thu) [長年日記]

_ [ソフトウェア] Firefoxのフォント表示

Firefoxのフォント表示

かなり前からだけど、Firefoxのフォント表示が時々おかしくなって 右のような感じになる。 コピー&ペーストすると、ちゃんと、

[mod_ruby] 環境変数の復元

のようになるので、文字コード変換の問題ではなくてフォントの問題なのかな。再起動すれば元に戻るけど、何とかならんですかねえ。

_ [ximapd] APPEND

APPENDを実装。 これで送信済メールをSentフォルダに保存できるようになった。

あとは、COPYとEXPUNGEだな。

_ [ximapd] ロードマップ

ロードマップを変更して、0.0.0を4/28にリリースすることにした。

_ [仕事] うーん

後輩に丸投げしていた仕事が 大変そうなので自分でもちょっと調べてみたが、やっぱりよくわからなかった。 がんばれ、骨は拾ってやるから。

_ [Ruby] メンテナンス作業失敗

無事終わった(ほんとはVirtualHostの設定忘れてたりしたけど)と 思っていたら、逆引の設定がされてないことを同僚に指摘されて、 慌てて設定。 御迷惑をおかけしました。

_ [ximapd] mobileimap

mobileimapを使うには、FETCHでENVELOPEをサポートしないといけなかったり、(UID SEARCHじゃない)SEARCHとか、(UID STOREじゃない)STOREとかをサポートしないといけないようだ。 何となくそんな予感はしていたのだが。

本日のツッコミ(全5件) [ツッコミを入れる]

_ Digitune [おぉ!はじめて同じ症状に悩んでいる人を見つけました>Firefox。 僕も結構前から気になっていたんですが、その後 ..]

_ shugo [なるほど、最近gtkまわりのパッケージはupdateしてなかったりするので、試してみます。]

_ ay [原因は別にあるとは思うのですが手元の環境では/etc/fonts/fonts.confを書き換えることで回避できるよ..]

_ 通りすがり [え、肉の日リリースじゃないんですか?>ximapd それとフォントの問題ってこれのことですかね? http://ha..]

_ shugo [apt-get dist-upgradeしてもだめでした。 http://hanzubon.jp/node/23は..]


2005-04-15 (Fri) [長年日記]

_ [プログラミング] Unicode Normalizationはかな文字を正しく正規化するか?

UAX#15によると、compatibility decompositionを適用した結果、全角濁点(0x309b)は、半角スペース(0x20)+半角濁点(0x3099)に置き換えられる。だから、たとえば「タ゛」(0x30bf 0x309b)は0x30bf 0x20 0x3099となる。

[ものがたり (diary for AtsushiEno)より引用]

Rast的には、309B(KATAKANA-HIRAGANA VOICED SOUND MARK)などは3099(COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK)に変換して しまった方がいいかも。

追記:

しかし、やっぱり何にも考えずに結合文字にしちゃうのはまずいような気がする。 教えて、エラい人。

_ [] gimme glassesなど

gimme glasses

出来上がったので取りに行って来た。いいでしょう。

かけてみると何かちょっとずれた感じがして、何度か調整して もらったけど、途中からよくわからなくなって来た。 気になるようだったらいつでも調整してくれるとのこと。

さて、この機会に、コレクションを公開しよう。

Lunor

Lunor with Clip-on

まず、最初に買ったLunor。*1

最初にして一番高価。たぶん、二度と買えないだろう。 ほんとはテンプルが金属のみのやつも欲しいんだけど。

別売りのクリップオンを装着すると、右のようにサングラスとしても使える。 ただし、外した時の持ち運びが面倒。

Beausoleil

次に買ったのがBeausoleil。セルのが欲しくて、色がきれいなこれに決めた。 写真ではよくわからないけど。

ちなみに歪んでるように見えるのは写真のせいではなくてほんとに歪んでいる。

ic! berlin

次は、ic! berlin。 アルミ製で、蝶番がネジを使わない構造になっているところが変わっている。

これだけカラーレンズ(グリーン)で、夏はこれがメイン。 でもサングラスとしてはあまり役に立たない。 しかも、道路交通法的には夜は使えないらしい。

Theo

最後は、Theo。

誕生日に奥さんに買ってもらったもの。 しばらくかけないうちに持ってるのを忘れていたのはナイショだ。

一番形が変わっているのがこれで、かずひこさん曰く勝負眼鏡らしい。

こうして見ると、結構たくさん買ったなあ。 父の日に親父に買ったOliver Peoplesを合わせると6本。いいお客さんだ。

ちなみに、実は、運転時と休みに出かける時にしか眼鏡はかけなかったりするのだが、 もったいないですかね。

*1  ほんとは学生のころにしょぼいセルフレームの眼鏡を買ったことがあるけど、ほとんどかけなかった。


2005-04-17 (Sun) [長年日記]

_ [Ruby] TMailにencoded wordをデコードさせない

ようにするため、以下のようなハックを。

module TMail
  def Decoder.decode(str, encoding = nil)
    return str
  end
end

parserでdecoderが切替えられるようになっていると、iconvを使った decoderなんかも用意できたりしてうれしいかもしれない。

しかし、ximapd的にはTMailはオーバスペックな気もして来たなあ (とはいえ、自分で書くのはメンドイ)。


2005-04-18 (Mon) [長年日記]

_ [プログラミング] Normalization Forms KD and KC Examples

追記: ていうか別に同一でない文字列としてもいいんじゃん?と考えることもできそうだけど、UAX#15のA1.3 Normalization Forms KD and KC Examplesでは、NFKCではこれらは同一の文字列になる、と明言してしまっているのよね。というかそもそもそこが疑問の出発点だったわけでして。

[ものがたり (diary for AtsushiEno)より引用]

A1.3 Normalization Forms KD and KC Examplesのtenは、 Table 3: Character Abbreviationによると、 KATAKANA-HIRAGANA VOICED SOUND MARK(309B)ではなく COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK(3099)のようなので、 UNICODE的にはこれでよかったりするんじゃないでしょうか。

で、これが望ましい仕様かどうかを論じるほどの見識は自分には なかったりするわけですが:(

ちなみに、JISX0208の濁点(212B)は309Bにマッピングされているらしい。 そういうものなんですかね。


2005-04-19 (Tue) [長年日記]

_ [Ruby] ruby-prof-0.3

リリース。

変更はMac OS Xでのビルド時の問題の修正のみ。

_ [ximapd] Becky!

HEADがBecky!で動くようになった気がする。

_ [ximapd] Wanderlust

Wanderlustでも動くようになった気がする。

_ [ximapd] spam対応

spamはヘッダの一部(SubjectとかDateとか)だけインデックスに登録 するのがいいかな。 それでインデックスがどれくらい大きくなるだろうか。


2005-04-20 (Wed) [長年日記]

_ [その他] スポンサー

色んなサイトにスポンサーへの リンクを追加。

何で今までリンクがなかったかというと悲しい理由が...。

_ [Ruby] Ruby syntax colorizer for enscript

RAAから消えてたけど、これかなあ。

適用してみたけど、 配色が今一つ好みでない。 やっぱり予約語は赤くないと。

追記: code.cssで変更できた。


2005-04-21 (Thu) [長年日記]

_ [ソフトウェア] Firefox 1.0.3でtDiaryQuoteが動かない

JavaScript Consoleを見ると、

var focusedWindow = document.commandDispatcher.focusedWindow;
selection = focusedWindow.__proto__.getSelection.call(focusedWindow).toString();

という部分でエラーになっているようだ。

Error: uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object"  nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)"  location: "JS frame :: chrome://tdiaryquote/content/tdiaryquoteOverlay.js :: anonymous :: line 69"  data: no]

こんなことしていいのかなと不安に思ってた部分ではあるんだけど。 うーん、どうすればいいんだ?

_ [ximapd] queries以下のフォルダ名の変更

INBOXやmlの内容はちゃんと読める。queryの中、フォルダ名を変更するとクエリの内容まで変わっちゃうみたいだけど、これって前は変わらなかったんじゃ?

[ただのにっき(2005-04-21)より引用]

Becky!でフォルダを作ると、一時的に適当な名前でフォルダを作ってからユーザが 指定した名前にRENAMEするようなので、このような挙動に変更しました。 クエリを変えたくない時は、queriesフォルダの外に移動してください。

メールの削除ができない……のはまだ未実装だからだな(↓)。

[ただのにっき(2005-04-21)より引用]

そうです、えへん。

Becky!からだと、INBOXに(--importによって)あとから「追加」されたメールが現れない。

[ただのにっき(2005-04-21)より引用]

もしかして、Becky!って明示的にコマンドを発行しなくても、サーバ側からメールボックスの変更(メールの追加とか)が通知されることを期待してるのかも。 RFC3501の`5.2. Mailbox Size and Message Status Updates'あたりに、

A server MUST send mailbox size updates automatically if a mailbox size
change is observed during the processing of a command.

なんて書いてあるので、ほんとはやらなきゃいけないんですけど、手抜きしてます。

_ [Ruby] tDiaryQuote 0.0.5

おお、うまくいきました>@@@@さん ありがとうございます。

というわけで、0.0.5をリリースしました。

_ [Ruby][仕事] Railsはじめました

Railsを評価中。 あまり時間がないので、明日中には採用するか決めたい。

Railsはテーブルやカラムの名前を付ける際に慣習に従わないと面倒なことに なるようだが、幸い自分の今までのスタイルで行けそうだ。ラッキー。

テーブルにprimary keyがないといけない*1 のは何とかならないのかなあ。

あるいは、

create table questions (
  id integer primary key,
  question varchar(256)
);
create table answers (
  question_id integer,
  number integer,
  answer varchar(256),
  primary key (question_id, number)
);

のようなテーブルがある時に、

class Answer < ActiveRecord::Base
  def self.primary_key
    return "question_id", "number"
  end
end

みたいにできないかな。

*1  少なくともfixtureが上手く動かないみたい。

_ [Rails] Howto Use Boolean Columns in Rails

Railsはtrue/falseを1/0にマッピングするため、PostgreSQLでboolean型を使う場合、fixtureに

a_fixture:
  int_col: 1
  bool_col: true

と書くとNG。

a_fixture:
  int_col: 1
  bool_col: "true" 

のように書かないといけないらしい。

The boolean type is nonstandard and, in postgresql 4.7 at least, the db will give an error if you try to put an int instead of a bool in.

ん、SQL92とかになかったっけ?

_ [Rails] fixtureとprimary key

modelを作らなければ、primary keyがなくてもちゃんとfixtureが機能するみたい。 つまり、Railsから直接見る必要のない中間テーブルにはprimary keyがなくても いいってことだな。

本日のツッコミ(全1件) [ツッコミを入れる]

_ @@@@ [selection = focusedWindow.getSelection().toString(); こうかな?..]


2005-04-22 (Fri) [長年日記]

_ [Rails] pagination

Webアプリケーションでは、リストが長くなった時に複数ページに分けて、 「次へ」「前へ」のようなナビゲーションを行うことが多い。 たとえば、Googleの検索結果みたいな。

これって結構面倒なのだが、Railsではpaginateというメソッドによって 簡単に実装できる。

まずは、コントローラ側のコードに、

def list
  @question_pages, @questions =
    paginate(:question, :per_page => 5,
             :conditions => "category_id = 1",
             :order_by => "date desc")
end

のように書いておく。

paginateの第一引数にはモデルの名前*1、 第二引数には以下のようなオプションを指定できる。

class_name
モデルのクラス名
per_page
一ページあたりの行数
conditions
where句
order_by
order by句
join
join句
parameter
ページ番号を指定するためのパラメータの名前

で、テンプレートに、

<ul>
<% for question in @questions %>
  <li><%=h question.message %>
<% end %>
</ul>
<%= link_to "前へ", { :page => @question_pages.current.previous } if @question_pages.current.previous %>
<%= link_to "次へ", { :page => @question_pages.current.next } if @question_pages.current.next %> 

と書いておけば、後は勝手にやってくれる。これはラクだなあ。

*1  :foo_barみたいな指定から適当にFooBarのようなクラス名に変換されるらしい

_ [Rails] pagination with ajax

さらに、ajaxによるpaginationもできるらしい。 こっちは試してないけど。

_ [Rails] Content-Type の指定方法

なるほど、before_filterでいろいろできるのか。

しかし、jcodeって。 > How To Use Unicode Strings

_ [その他] 子どもの写真

あれ?おこさん写真が元にもどってる?

[ARAKI notesより引用]

実は、最近はランダムに表示してたりします。

_ [Rails] 速度

あまり他の人の参考にはならないけど、手元の「自前なんちゃって フレームワーク+mod_ruby」なプログラムにくらべて、ほぼ同等 (ちょっと機能は劣る)の「Rails+FastCGI」なプログラム(もちろんproduction環境) は二倍くらい遅かった。

普通ならぜんぜん問題ないんだけど、今回はちょっとスピードがいるんだよな。 どうしよう。

ちなみに、

FastCgiConfig -maxClassProcesses 10 -maxProcesses 50 -minProcesses 5

のような設定なのにプロセスが一つしか動いてなかったので、たんにチューニング できてないだけという可能性も高いけど。

ただ、Rails+mod_rubyはRails+FastCGIよりさらに二倍ほど遅かった (DBのコネクションを使い回してなかったりする?)ので、FastCGIのせいではないかも。

あるいは、アプリケーションの処理が軽ければ軽いほど、FastCGIのオーバーへッドが 効いてくるということはあるかもしれない。

_ [Rails] 高速化

プロファイルを取ると、PGconn#execとModule#public_instance_methodsが 上位に来ていた。 前者に関しては、クエリの結果をキャッシュすることでクエリの発行を減らし、 後者に関しては、AppliationController#action_methodsを以下のように再定義して 高速化。

class MyController < AppliationController
  ...

  @@action_methods = public_instance_methods - hidden_actions

  def action_methods
    return @@action_methods
  end
end

これで、自前フレームワーク+mod_rubyの1.5倍程度の実行時間に収まった。 実際には、DBのレコードが増えるともっと差は縮まるだろう。

あと、pagenateは、

select count(*) from foo where bar = 1
select * from foo where bar = 1 order by baz limit 5 offset 0

のように2回SQLを発行するようだが、

select * from foo where bar = 1 order by baz limit 6 offset 0

のように「1ページあたりの行数 + 1」行分をlimitで指定すれば、 「次へ」を表示するべきかどうかがわかるから、クエリの発行を1回で 済ませることができそうだ。

ページ数を表示したり、Googleみたいに各ページへのリンクを表示したり するとなると、また話が違って来るが。

本日のツッコミ(全4件) [ツッコミを入れる]

_ naruse [文字指向の処理が、jcodeライブラリなんですよねぇ。 encodeとかencodingとか、そんな名前に変えたいな..]

_ shugo [というか、m17n化を:)]

_ naruse [まじめにm17n化しようと思ったら、まず$KCODEをm17n化しないといけなさそうな・・・^^;; UTF-8に対..]

_ shugo [実はすでにまつもとさんがブランチで一度作業されています。 1.7のころがベースなので、すぐにはマージできませんけど:..]


2005-04-23 (Sat) [長年日記]

_ [ximapd] mailbox.db crashed

mailbox.dbがとんだ:(

リリース前にはもうちょっとマシにしないと。

  • signalをまともに処理する。
  • mailbox.dbからstatusなどを分離してもうちょっとマシな構造にする。

2005-04-24 (Sun) [長年日記]

_ [Rails] action以外のメソッドをpublicにしてはいけない

何となく、以下のaction_methodsの実装を見て気になっていたのだが、 Railsのコントローラのメソッドでpublicなものは、すべてaction として扱われてしまう(=外部から呼び出し可能になる)ようだ。

def action_methods
  @action_methods ||= (self.class.public_instance_methods - self.class.hidden_actions)
end

これって周知されてる?

気持ちはわからなくもないけど、メソッドの可視性をそのまま使ってしまうのは あまりよくないと思う。

def show
  ...
end
action_method :show

とかの方がよかったんじゃないかなあ。

まあ、でも、Railsっぽいなという気はする。 Railsを使う時は、Railsの慣習をよく知っておかないと危険かもしれない。 適当にやってても動いてしまうだけに。

自分は、

def action_methods
  return ["list", "show", ...]
end

とでもしとくかな。 public_instance_methodsのコスト *1 を免れるし。

*1  Railsでpublic_instance_methodsが遅いのは、mix-inを多用しているせいかもしれない。

_ [Rails] image_tagと絶対URI

image_tag(というかcompute_public_auth)にhttp://hostname/path/to/fileのような 絶対URIを渡しても、相対パスとして扱われてしまうようだ。

そういうもの?

_ [その他] 松江市長・市議選

一応投票。

しかし、旧松江市の選挙区は定数34に候補者36人で、どうも盛り上がりに書ける。 個人的には、中島始候補の広報にウケた*1。 4年後は、全市で一区になるようだ。

結果は、一勝一敗。

*1  入れてないけど。

本日のツッコミ(全6件) [ツッコミを入れる]

_ たかはし [コントローラの可視性はサービスの可視性と一致するはず、という前提に立てば、action_methodを別途設けてしま..]

_ shugo [しかし、privateなんて使わねーよというRubyユーザも多いわけで、 「 コントローラの可視性はサービスの可視性..]

_ ささだ [on_hoge で hoge というサービス,でいーと思うんだけどなぁ.規約万歳なら.]

_ shugo [それだとだいぶ問題は少ないですねえ。 でもまつもとさんはon_hogeとか嫌いって言ってたような。 いや、do_h..]

_ たかはし [DHHの発言を見つけました。↓これですね。 http://one.textdrive.com/pipermail/r..]

_ shugo [そうですねえ。 SQL/Javascript injectionやらの話も含めた`Secure Programmi..]


2005-04-26 (Tue) [長年日記]

_ [mod_ruby] Multi-VM instance

 とりあえず,目標として考えているのは mod_ruby が複数アプリ ケーションを扱えるようにするための機構です.  現在は,1 Ruby プロセスを共有するようになっているため, mod_ruby で複数アプリケーションを動かすと,グローバルな何か は全部共有されてしまいます.たとえば,String クラスを再定義 すると,どのアプリケーションでもそうなってしまう.これをな んとかしたい.

[yarv-dev:471より引用]

わーい。

しかし、mod_rubyの場合は(普通のMPMだと)複数プロセスなので、 (プロセス数 * アプリケーション数)分のメモリが必要になってしまうなあ。

Stringうんぬんに関してはselector namespaceを作ってくれてもいいですよ。

_ [仕事][Rails] Action Web Service

独自プロトコルによる通信部分もAction Web Serviceで置き換えたくなってきた。 やばい、そんな時間ないってば。

本日のツッコミ(全3件) [ツッコミを入れる]

_ ささだ [アプリケーション分のメモリは必要ないんじゃないでしょうか.Java の MVM の目指すものと同じで. というか,..]

_ shugo [すみません、今はグローバルなものが一つだけあればいいところで、(プロセス数 * アプリケーション数)分いるなあという..]

_ shugo [IRCで、ちゃんと共有できるもの(再定義されてないものとか)は共有するように実装するから問題ないだろ、ぼけー、という..]


2005-04-27 (Wed) [長年日記]

_ [ximapd] handle SIGTERM/SIGINT safely

これでDBが壊れるリスクが減った、はず。

いろいろ考えた *1 けど、結局、sync.rbで排他制御しつつ、例外でセッション毎のスレッドとやり取りすることにした。

追記:

うまく行ったと思ったけど、止まらないケースがあるな。うーむ。

さらに追記:

IDLEコマンドを実行中のセッションがロックを握ったまま止まっていたせいでした:(

*1  スレッドの代りにforkを使うようにしてシグナルで子プロセスとやり取りしようかなとか

_ [Ruby] Anonymous CVSサービス再開のお知らせ

Anonymous CVSサービスを再開しました。

[Anonymous CVSサービス再開のお知らせ - オブジェクト指向言語Rubyより引用]

というわけで、ようやく再開できました。

_ [Rails] #1205 ([PATCH] encoding/min_messages support for PostgreSQL)

database.ymlでencodingとmin_messagesを指定するためのパッチを 送ってみた。

development:
  adapter: postgresql
  database: rails_development
  host: localhost
  username: postgres
  password:
  encoding: UTF8
  min_messages: ERROR

のように指定するもの。


2005-04-28 (Thu) [長年日記]

_ [その他] Better late than never

というSubjectのメールが来て、何かと思ったらspamだった:(

Are you looking for that extra special something in the bed-room?

No.

_ [仕事][ソフトウェア] IEでスクロールバーを非表示にする

<body scroll="no">

でスクロールバーが常に非表示になるらしい。 食べていくためには仕方ありません:(

_ [Rails] #1210 ([PATCH] fix soap_action_base to use @request.relative_url_root)

Railsをトップレベルで動かしていない場合に、ActionWebServiceが作るWSDLのURIがおかしかったので、パッチをポスト。

_ [ximapd] CPU使用率100%

今朝、出社したらCPU使用率が100%に張り付きっぱなしで、犯人はximapdだった。おまけにximapd --importのプロセスも山ほど。KILLしたものの、再立ち上げ後も同様の現象が再発。こりゃ、DBが壊れたかのぅ。

[ただのにっき(2005-04-27)より引用]

ごめんなさい。ごめんなさい。ごめんなさい。

Berkeley DBが壊れてロックがかかりっぱなしになってるとかですかねえ。

_ [Rails] ActionWebServiceで日本語を扱うには$KCODE = 'u'が必要

$KCODE = 'n'だと、xsd:base64になっちゃうみたい。

ActionWebServiceというかSOAP4Rかな。 前からこうでしたっけ?

_ [Rails] inflection

ActionWebServiceにはinflectionという機能があって、list_usersのような名前の メソッドをWebサービスではListUsersのように自動的にCamelCaseにして提供することが できる。*1

でも、戻り値の構造体のメンバ名には適用されないようだ。 何か中途半端だけど、仕様なのかねえ。

*1  もちろん、無効にもできる。

_ [Rails] #1211 ([PATCH] charset for SOAP responses)

今度はSOAPのレスポンスのContent-Typeにcharsetパラメタを付加するパッチ。 これがないと、.NETにUTF-8の文字列を上手く渡せない。

ほんとは、Content-Transfer-EncodingとかContent-Dispositionも 気になるけど、まあ、いいか。

_ [ソフトウェア][ximapd] rast-0.1.0 リリース

DBの構造に変更があるため、scripts/rast-db-convertでDBをコンバートする 必要があります。

とくに、ximapdを使っている方は、

$ ruby scripts/rast-db-convert ~/ximapd/index

とするのを忘れずに!

ちなみに、rast-0.1.0には今日対応したので、ximapdはHEADにしてください。

_ [Ruby] exit!のデフォルトの終了コードは1

知らなかった。

本日のツッコミ(全7件) [ツッコミを入れる]

_ yohgaki [> 食べていくためには仕方ありません:( 悪魔に魂を... (違 いや、よくある話ですね。 # このケースもWAIの..]

_   [ああ、shugoさんが汚れていく…]

_ shugo [身も心もぼろぼろですよ。]

_ nahi [db3 locks! とかくだらないことを書きにきたらsoap4rネタが。そうなんですよ、内部CESは適当に選んで、..]

_ nahi [iconvがなくて$KCODE = 'EUC'だったりするとEUCになります。ていうかRailsでは自分で作ってるの..]

_ ただただし [気にしないでください >100% 週末は止めておきます(笑)]

_ shugo [どうするのがいいんでしょうねえ > $KCODE はい、それがいいかと:) > 週末はとめる]


2005-04-29 (Fri) [長年日記]

_ [ximapd] ximapd-0.0.0 released

2005-04-29 version 0.0.0をリリースしました。

[Japanese - ximapd - Tracより引用]

というわけで、結局29日になってしまいました:(

簡単なドキュメントもプロジェクトページに置いてます。 品質についてはバージョン番号から察してください:p

_ [その他] 帰省

5/4までは実家に帰っているので、たぶん何にもしません。


2005-04-30 (Sat) [長年日記]

_ [家族] 須彌壇収骨

祖父の遺骨を須弥壇に納めるために、実家の家族と東本願寺へ。

大きなビルのようなものができていて驚いたが、御影堂の修復工事のため 全体が覆われているのだそうだ。 この工事のため、遺骨は仮収骨所に納めていただいた。

後でお斉をいただいたのだが、食前のことば・食後のことばとかなつかしいなあ。

ちなみに、こんなの。

食前のことば:

み光のもと、われ今、幸いに
この清き食をうく
いただきます

食後のことば:

われ今、この浄き食を終わりて
心ゆたかに、力身にみつ
ごちそうさま

あと、恩徳讃のオルガンなんかも流れたりして。

ありがたい教えなどはぜんぜん覚えていないのだが、こういうことは記憶に残るものですね。