<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>tmty.jp &#187; Trouble</title>
	<atom:link href="http://tmty.jp/tag/trouble/feed/" rel="self" type="application/rss+xml" />
	<link>http://tmty.jp</link>
	<description>tmtysk が前よりも、もうちょっとだけコマメに更新していくかもしれないブログ</description>
	<lastBuildDate>Tue, 08 Jun 2010 13:19:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<link rel="http://api.friendfeed.com/2008/03#sup" xmlns="http://www.w3.org/2005/Atom" type="application/json" href="http://friendfeed.com/api/public-sup.json#fdff53faaa"/>		<item>
		<title>around_filter で reset_session するとメモリリーク(memory leak)する</title>
		<link>http://tmty.jp/2008/12/11/around_filter-%e3%81%a7-reset_session-%e3%81%99%e3%82%8b%e3%81%a8%e3%83%a1%e3%83%a2%e3%83%aa%e3%83%aa%e3%83%bc%e3%82%afmemory-leak%e3%81%99%e3%82%8b/</link>
		<comments>http://tmty.jp/2008/12/11/around_filter-%e3%81%a7-reset_session-%e3%81%99%e3%82%8b%e3%81%a8%e3%83%a1%e3%83%a2%e3%83%aa%e3%83%aa%e3%83%bc%e3%82%afmemory-leak%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 16:57:14 +0000</pubDate>
		<dc:creator>tmtysk</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Trouble]]></category>

		<guid isPermaLink="false">http://wp.tmty.jp/2008/12/11/around_filter-%e3%81%a7-reset_session-%e3%81%99%e3%82%8b%e3%81%a8%e3%83%a1%e3%83%a2%e3%83%aa%e3%83%aa%e3%83%bc%e3%82%afmemory-leak%e3%81%99%e3%82%8b/</guid>
		<description><![CDATA[以下のように around_filter 内で reset_session するアクションに対し、大量のアクセスを重ねていくと、メモリ使用量ががつがつ増大していく。

class FugaController < App [...]]]></description>
			<content:encoded><![CDATA[<p>以下のように around_filter 内で reset_session するアクションに対し、大量のアクセスを重ねていくと、メモリ使用量ががつがつ増大していく。<br/></p>
<pre class="prettyprint">
class FugaController < ApplicationController
around_filter :foo
def index
end
protected
def foo
reset_session
yield
end
end
</pre>
<p>こいつを script/server -e production で起動し、ab -n3000 http://localhost:3000/fuga/ などにより多量のリクエストを送ると、メモリ使用量が 80MB を超えるまでに増大し、リクエスト完了後もまったく解放されない。foo 内で yield しなくても同様。セッションストレージにデフォルトの CookieStore を使った場合のほか、:active_record_store, :mem_cache_store を使っても同じ。session_options[:expires] の設定も関係無し。<br/><br />
なお、before_filter や after_filter で reset_session した場合は、問題は起こらないようだ。また、rails-2.0.2 環境で発見したが、rails-2.2.2 でも再現する。<br />
<br/><br/><br />
状況解析のため、<a href="http://scottstuff.net/blog/articles/2006/08/17/memory-leak-profiling-with-rails">こちらのエントリ(Memory leak profiling with Rails)</a> を参考にメモリ利用状況をプロファイルしてみたところ、around_filter を使った場合は String のインスタンス数が一気に膨れ上がった後、一向に解放されないことがわかった。(before_filter を使った場合は、リクエスト処理完了後、それなりに解放された。)<br />
<br/><br/><br />
次に、この String の正体を見るために、上記の MemoryProfiler の :string_debug オプションを使って ObjectSpace 中の String をダンプしてみたところ、session_id などセッションデータと思しき文字列が大量に入っていた。リクエスト終了後は、CgiRequest や CGI::Session などのリクエストやセッションに絡むオブジェクトはすぐに解放されていた事から、何らかの原因でセッション内文字列のみ GC 対象にならない状態になっていると思われる。<br />
<br/><br/><br />
さらに、上記の String がどの時点で生成されているのかを追ってみた。<br />
<br/><br />
<b>actionpack-2.0.2/lib/action_controller/cgi_process.rb L.150-</b><br/></p>
<pre class="prettyprint">
private
# Delete an old session if it exists then create a new one.
def new_session
if @session_options == false
Hash.new
else
CGI::Session.new(@cgi, session_options_with_string_keys.merge("new_session" => false)).delete rescue nil
CGI::Session.new(@cgi, session_options_with_string_keys.merge("new_session" => true))
end
end
</pre>
<p>どうも上記の CgiRequest#new_session の CGI::Session.new で確保されているようだ。何が原因なのか追いたいが、CGI::Session は ActionPack で拡張されており、どうも切り分けが難しい。いろいろ書き換えながら試してみたところ、オリジナルの CGI::Session 中:<br />
<br/><br />
<b>lib/ruby/1.8/cgi/session.rb L.299</b><br/></p>
<pre class="prettyprint">
ObjectSpace::define_finalizer(self, Session::callback(@dbprot))
</pre>
<p>ここのファイナライザ定義があることで、around_filter でのみリークするようだ(これを試しに無効にすると、リークしない。謎)。かといって、こんなところを無効にするわけにはいかず.. と、今度は around_filter と before_filter とで、何が変わってきているのか、を追ってみた。<br />
<br/><br />
<b>actionpack-2.0.2/lib/action_controller/filters.rb L.709-</b><br/></p>
<pre class="prettyprint">
def run_before_filters(chain, index, nesting)
while chain[index]
filter, index = skip_excluded_filters(chain, index)
break unless filter # end of call chain reached
case filter.type
when :before
filter.run(self)  # invoke before filter
index = index.next
break if @before_filter_chain_aborted
when :around
yielded = false
filter.call(self) do
yielded = true
# all remaining before and around filters will be run in this call
index = call_filters(chain, index.next, nesting.next)
end
halt_filter_chain(filter, :did_not_yield) unless yielded
break
else
break  # no before or around filters left
end
end
index
end
</pre>
<p>ソースを追う限り、filter 処理は適用順序に並べた配列形式に変換された後、before_filter も around_filter も上記の ActionController::Filters::InstanceMethods#run_before_filters で実際のフィルタ処理がおこなわれているように見える。で、around_filter では、上記の filter.call(self) へ渡しているブロックで index = call_filters している箇所があるが、いろいろ切り分けていってみるに、どうもここが怪しい。around_filter に入れ子になっている filter を再帰的に処理しているようだが、ここの中で CGI::Session.new するとセッション中の String のみが解放されない状態になってしまう.. ということだろうか。<br />
<br/><br/><br />
もうひといきな気がするんだが、ちょっとツラくなってきたので、とりあえずここまでで POST しておく。Ruby の GC の問題なのか、Rails の黒魔術のせいなのか、まだ微妙なところだ。とりあえず before_filter にしとけば問題は起こらないのだが、多数のフィルタ処理をサイトの全域で使うようなサービスの場合、個々のコントローラには around_filter をひとつ書いておいて、その filter 内に多数のフィルタメソッドを並べる、というのがラクチンだとおもう。うーむ、悔しいが before_filter で回避してしまおうか.. フィルタ内で、セッション検査をおこなった上で、不正セッションであれば reset_session して仕切り直す、みたいなのって、わりとあるような気がするんだけどなあ.. ハマってる人が見当たらない。</p>
<p><span id="more-79"></span><br />
<br/><br/><br />
(2008-12-24追記)<br/><br />
lighthouseapp にタレコんだところ、修正がコミットされたようです。<br/><br/><br />
<a href="http://rails.lighthouseapp.com/projects/8994/tickets/1558-memory-problem-on-reset_session-in-around_filter">http://rails.lighthouseapp.com/projects/8994/tickets/1558-memory-problem-on-reset_session-in-around_filter</a><br/><br/><br />
undefine_finalizer しちゃってるけど.. うーん、これでいいのかなあ、怖いなあ<br />
<br/><br/><strong>関連していそうなエントリ:</strong>
<ul class="similar-posts">
<li><a href="http://tmty.jp/2008/12/25/%e3%83%87%e3%82%b3%e3%83%a1%e3%83%bc%e3%83%ab%e3%81%ae3%e3%82%ad%e3%83%a3%e3%83%aa%e3%82%a2%e9%96%93%e5%a4%89%e6%8f%9b%e3%81%aa%e3%81%a9%e3%82%92%e3%81%8a%e3%81%93%e3%81%aa%e3%81%86-rails-%e3%83%97/" rel="bookmark" title="2008 年 12 月 25 日">デコメールの3キャリア間変換などをおこなう Rails プラグイン MbMail</a></li>
<li><a href="http://tmty.jp/2007/06/12/netbeans-60m9%e3%81%a7rubyonrails%e3%81%99%e3%82%8b%e3%81%a8generate%e3%81%a7%e3%82%b3%e3%82%b1%e3%82%8b/" rel="bookmark" title="2007 年 6 月 12 日">NetBeans-6.0M9でRubyOnRailsするとgenerateでコケる</a></li>
<li><a href="http://tmty.jp/2008/02/18/rails%e5%8b%89%e5%bc%b7%e4%bc%9a%e6%9d%b1%e4%ba%ac%e3%81%ab%e8%a1%8c%e3%81%a3%e3%81%a6%e3%81%8d%e3%81%9f080217/" rel="bookmark" title="2008 年 2 月 18 日">Rails勉強会(東京)に行ってきた(080217)</a></li>
</ul>
<p><!-- Similar Posts took 37.815 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://tmty.jp/2008/12/11/around_filter-%e3%81%a7-reset_session-%e3%81%99%e3%82%8b%e3%81%a8%e3%83%a1%e3%83%a2%e3%83%aa%e3%83%aa%e3%83%bc%e3%82%afmemory-leak%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>さくらインターネットのレンタルサーバで trac が svn 連携できなくなった</title>
		<link>http://tmty.jp/2008/01/21/%e3%81%95%e3%81%8f%e3%82%89%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%8d%e3%83%83%e3%83%88%e3%81%ae%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90%e3%81%a7-trac-%e3%81%8c-svn-%e9%80%a3/</link>
		<comments>http://tmty.jp/2008/01/21/%e3%81%95%e3%81%8f%e3%82%89%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%8d%e3%83%83%e3%83%88%e3%81%ae%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90%e3%81%a7-trac-%e3%81%8c-svn-%e9%80%a3/#comments</comments>
		<pubDate>Sun, 20 Jan 2008 20:13:18 +0000</pubDate>
		<dc:creator>tmtysk</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Trouble]]></category>

		<guid isPermaLink="false">http://wp.tmty.jp/2008/01/21/%e3%81%95%e3%81%8f%e3%82%89%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%8d%e3%83%83%e3%83%88%e3%81%ae%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90%e3%81%a7-trac-%e3%81%8c-svn-%e9%80%a3/</guid>
		<description><![CDATA[ここのデザインを変更がてら、自サイト(tmty.jp) 配下のコンテンツを巡回していたら、trac がエラーを吐いていた:
Python Traceback
Traceback (most recent call las [...]]]></description>
			<content:encoded><![CDATA[<p>ここのデザインを変更がてら、<a href="http://tmty.jp/">自サイト(tmty.jp)</a> 配下のコンテンツを巡回していたら、<a href="http://tmty.jp/trac/">trac</a> がエラーを吐いていた:</p>
<blockquote><p>Python Traceback</p>
<p>Traceback (most recent call last):<br />
File &#8220;/home/****/local/lib/python2.4/site-packages/trac/web/main.py&#8221;, line 406, in dispatch_request<br />
dispatcher.dispatch(req)<br />
File &#8220;/home/****/local/lib/python2.4/site-packages/trac/web/main.py&#8221;, line 191, in dispatch<br />
chosen_handler = self._pre_process_request(req, chosen_handler)<br />
File &#8220;/home/****/local/lib/python2.4/site-packages/trac/web/main.py&#8221;, line 263, in _pre_process_request<br />
chosen_handler = f.pre_process_request(req, chosen_handler)<br />
File &#8220;/home/****/local/lib/python2.4/site-packages/trac/versioncontrol/api.py&#8221;, line 73, in pre_process_request<br />
self.get_repository(req.authname).sync()<br />
File &#8220;/home/****/local/lib/python2.4/site-packages/trac/versioncontrol/api.py&#8221;, line 91, in get_repository<br />
raise TracError(&#8217;Unsupported version control system &#8220;%s&#8221;. &#8216;<br />
TracError: Unsupported version control system &#8220;svn&#8221;. Check that the Python bindings for &#8220;svn&#8221; are correctly installed.</p></blockquote>
<p>これまで問題なかったのに、svn が Unsupported とか言い出してるのは妙だ。python が svn 連携に失敗しているのかな？<br />
試しに、python のコマンドライン実行で確認してみる。</p>
<div class="prompt">$ python -c &#8220;from svn import client&#8221;<br />
 <img src='http://tmty.jp/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> 略)<br />
&#8230; Shared object &#8220;libintl.so.6&#8243; not found, required by &#8220;_client.so&#8221;</div>
<p>なんかいっぱいエラーが出たが、Shared object が無いって、なんで今更突然こんなエラーが出るようになっちゃったんだろ。最近サーバ設定いじった記憶ないし.. と、<a href="http://www.sakura.ne.jp/news/archives/20080107-002.news">さくらのニュースアーカイブを見に行ってみたら、メンテナンス通知</a>が出てた:</p>
<blockquote><p>平素はさくらインターネットをご利用いただき、誠にありがとうございます。<br />
さくらのレンタルサーバサービスにおきまして、サービスの安全性の向上を<br />
目的とした、OS のバージョンアップを実施いたします。<br />
ご迷惑をおかけしますが、ご協力お願いいたします。<br />
 <img src='http://tmty.jp/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> 中略)<br />
1/15(火) www731 〜 www740.sakura.ne.jp<br />
1/16(水) www741 〜 www755.sakura.ne.jp<br />
1/18(金) www756 〜 www770.sakura.ne.jp<br />
 <img src='http://tmty.jp/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> 中略)<br />
主な変更:</p>
<p>OS    FreeBSD 4.10 → 6.1<br />
 <img src='http://tmty.jp/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> 後略)</p></blockquote>
<p>うお、もろ該当サーバに入ってた。これは影響でかいだろー。知らなかった.. サーバメンテの通知は、ちゃんとチェックしとかなきゃダメっすな。(でも、メールとかでリマインドしてくれても良いのになー。掲載から作業日程短すぎな気がする。)</p>
<p>4.10 =&gt; 6.1 での細かい変更点までは追ってないが、恐らくユーザインストールしたアプリ周りは、ほぼ reconfigure/rebuild が必要になるだろう。ということで、再設定開始。さくらのレンタルサーバでは、python は最初から入ってる(ユーザインストールしたものではない)ので、subversion 周りの reconfigure から開始。設定は覚えてなかったので、config.log で configure オプションを確認してから、SWIG-1.3.21 を $ ./configure &amp;&amp; make &amp;&amp; make install 、続いて、subversion-1.2.3 を $ ./configure &amp;&amp; make &amp;&amp; make install &amp;&amp; make swig-py &amp;&amp; make install-swg-py と。あと、念のため、svn-python/svn 以下の symlink を貼り直した。</p>
<p>とりあえず、こんだけで $ python -c &#8220;from svn import client&#8221; が通り、trac も動くようになった。</p>
<p>が、1/21 5:04 現在、<a href="http://tmty.jp/mbdb/">機種情報検索サービス</a>(rails環境)が復旧できてない。ruby/gem 周りも一通り再設定して、アプリ自体は script/console 環境下で問題なく動いているんだが、Web 経由で DB アクセスが発生するようなリクエストを投げると 500 になっちゃう。apache のエラーログって拾えないのかな？rails のログにはエラーが落ちてないんだが、DB アクセスしない範囲のリクエストは正常にさばけてるるっぽい。CGI 経由で DB に行ったときだけ利いてくる設定って.. どこだ？apache ログが拾えないと切り分けできないかな？うーん.. と、ここで力尽きたので、続きはまた今度。求む識者。</p>
<p>(2008/01/25 追記) その後.. とりあえず解決:</p>
<p><span id="more-91"></span><br />
ruby を再設定したり、gem も入れ直したり、ついでだから rails-2.0.2 で試してみたり、その他諸々、いろいろ試行してみるも動作せず。ふと、rails レベルでログをもっと出せんもんかと、${RAILS_HOME}/config/environment.rb でアプリの動作モードを production から development に落としてみた。</p>
<div class="prompt"># Uncomment below to force Rails into production mode when<br />
# you don&#8217;t control web/app server and can&#8217;t set it the proper way<br />
ENV['RAILS_ENV'] ||= &#8216;development&#8217;</div>
<p>そしたら、なぜか、これで動いた。なに〜。</p>
<p>とりあえず解決したんだが、これでどうして動くようになったのか分からん。キャッシュ動作周りが悪さをしてたのか？でも production.rb で config.cache_classes = false は試したんだけどな.. とか考えながら、${RAILS_HOME}/config/environments 以下の development.rb と production.rb を見比べながら、設定をひとつずつ入れ替えてみる。そしたら、どうやら、次の一行があれば production でもちゃんと動く事がわかった。</p>
<div class="prompt">config.breakpoint_server = true</div>
<p>名前からして、「これは関係ないだろう」と思わざるを得ない項目。でも、これが無いと 500 Internal Server Error 。false 設定しててもダメ。true 設定してある必要がある。</p>
<p>んじゃ、こいつが何に効いてるんだと、rails のソースを追ってみる。rails-1.2.3/lib/initializer.rb で発見。</p>
<p><textarea cols="80" rows="6">&lt;br /&gt; # Sets the +BREAKPOINT_SERVER_PORT+ if Configuration#breakpoint_server&lt;br /&gt; # is true.&lt;br /&gt; def initialize_breakpoints&lt;br /&gt; silence_warnings { Object.const_set(&#8221;BREAKPOINT_SERVER_PORT&#8221;, 42531) if configuration.breakpoint_server }&lt;br /&gt; end&lt;br /&gt; </textarea></p>
<p>何これ。ほんとにソレ用のポート設定してるだけに見えるんだけど。</p>
<p>で、もう追う気無くした。動いたからいいんだけどさ。謎。ググってみたら、rails-2.x 以降で breakpoint_server が deprecated and has no effect だから、もう使ってくれるな、という話がいっぱい。なんなんだろ。誰か教えて。<br/><br/><strong>関連していそうなエントリ:</strong>
<ul class="similar-posts">
<li><a href="http://tmty.jp/2007/01/02/django%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f/" rel="bookmark" title="2007 年 1 月 2 日">djangoを試してみた</a></li>
</ul>
<p><!-- Similar Posts took 25.559 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://tmty.jp/2008/01/21/%e3%81%95%e3%81%8f%e3%82%89%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%8d%e3%83%83%e3%83%88%e3%81%ae%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90%e3%81%a7-trac-%e3%81%8c-svn-%e9%80%a3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gmailでメーリングリストに投稿したメールが届かない仕様について考えた</title>
		<link>http://tmty.jp/2007/07/09/gmail%e3%81%a7%e3%83%a1%e3%83%bc%e3%83%aa%e3%83%b3%e3%82%b0%e3%83%aa%e3%82%b9%e3%83%88%e3%81%ab%e6%8a%95%e7%a8%bf%e3%81%97%e3%81%9f%e3%83%a1%e3%83%bc%e3%83%ab%e3%81%8c%e5%b1%8a%e3%81%8b%e3%81%aa/</link>
		<comments>http://tmty.jp/2007/07/09/gmail%e3%81%a7%e3%83%a1%e3%83%bc%e3%83%aa%e3%83%b3%e3%82%b0%e3%83%aa%e3%82%b9%e3%83%88%e3%81%ab%e6%8a%95%e7%a8%bf%e3%81%97%e3%81%9f%e3%83%a1%e3%83%bc%e3%83%ab%e3%81%8c%e5%b1%8a%e3%81%8b%e3%81%aa/#comments</comments>
		<pubDate>Sun, 08 Jul 2007 19:03:54 +0000</pubDate>
		<dc:creator>tmtysk</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Trouble]]></category>

		<guid isPermaLink="false">http://wp.tmty.jp/2007/07/09/gmail%e3%81%a7%e3%83%a1%e3%83%bc%e3%83%aa%e3%83%b3%e3%82%b0%e3%83%aa%e3%82%b9%e3%83%88%e3%81%ab%e6%8a%95%e7%a8%bf%e3%81%97%e3%81%9f%e3%83%a1%e3%83%bc%e3%83%ab%e3%81%8c%e5%b1%8a%e3%81%8b%e3%81%aa/</guid>
		<description><![CDATA[Gmail でメーリングリストに subscripbe していると投稿した自分のメールが届いていないように見える(配信されない)が、これは仕様らしい。SPAM扱いになってるわけでもない。不便だ。自分宛にテスト投稿とかする [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://groups.google.com/group/gmail-suggestions-ja/browse_thread/thread/35f1953784342356/">Gmail でメーリングリストに subscripbe していると投稿した自分のメールが届いていないように見える(配信されない)が、これは仕様らしい</a>。SPAM扱いになってるわけでもない。不便だ。自分宛にテスト投稿とかする場合も不便だと思う。</p>
<p>調べてみると、メーリングリストに投稿したメールや、自分宛に送信したメールは、POP受信できないようだ。<a href="http://mail.google.com/support/bin/answer.py?answer=10314&#038;topic=1566">ヘルプ</a>を読んでいる限りでは、「自分で送ったメールだったら、送信済みボックスに入っているだろう(それを見ろ)」というスタンスに見える。一方で、<a href="http://chicken.go2.jp/a-blog/index.php?ID=1541">日々の戯言::weblob</a> さんによれば、</p>
<blockquote><p>
一番簡単なのは、送信用メールサーバ(SMTPサーバ）をGmailのSMTPサーバとは別のモノにするってこと。分かりやすくいえば、Gmailのアカウントとは違うメールアドレスから送信するってこと。これなら間違いなく自分宛に届く。
</p></blockquote>
<p>つまり、自分宛のメールであっても、SMTP として smtp.gmail.com を使わなければ(別のSMTPで送信すれば)、ちゃんと受信できるということだ。実際に試してみたら、その通りだった。</p>
<p>で、不便なのは不便で仕方がない(いろいろ工夫してみるしかないぽい)んだが、なんでこういう仕様になってるのかを、ちょっとだけ考えてみた。</p>
<p>Gmailでは、同一メールと見なせるものについては、それらのメールをひとつのレコードとして扱おうとしているのかも知れない。こうすることで、多数のユーザにメールサービスを提供することで必要になる、多大なディスク(アクセス)容量やPOP転送トラフィックを削減しているのではないだろうか。</p>
<p>もちろん、これらは推測でしかないし、この仮説には、ちょっと考えただけでも、次のような疑問が浮かぶ。</p>
<ul>
<li>どうやってメールの同一性を検出しているのか(Message-IDを使ってるのか、それとも他の何かか)</li>
<li>重複分が、本当に無い(配信されるけど削除されている)のか、レコードとしては存在するけど表向きには非表示になっているのか</li>
</ul>
<p>これらの疑問については、調べてみた感じでは、答えに辿り着けなかった。トラブルの解決に対しては殆んど意味の無い疑問なんだが、ちょっと気になっている。</p>
<p>不便な仕様ではあるが、google レベルのサービサーであれば、何か合理的な理由があるのだと思う(思いたい)。できれば、その理由を公開してほしいものだ。少なくとも、この仕様は、僕には考え付かなかった。将来、参考にできる思想があるのかもしれない。<br />
<br/><br/><strong>関連していそうなエントリ:</strong>
<ul class="similar-posts">
<li><a href="http://tmty.jp/2007/04/30/ubuntu-704-feisty-fawn-%e3%81%a7-thunderbird-20-%e3%82%92%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%84/" rel="bookmark" title="2007 年 4 月 30 日">Ubuntu 7.04 Feisty Fawn で Thunderbird 2.0 を動かしたい</a></li>
<li><a href="http://tmty.jp/2007/02/04/beryl%e3%82%92%e5%85%a5%e3%82%8c%e3%81%9f%e3%82%89%e3%80%8c%e3%83%86%e3%83%bc%e3%83%9e%e3%83%bb%e3%82%a8%e3%83%b3%e3%82%b8%e3%83%b3%e3%81%8c%e3%81%82%e3%82%8a%e3%81%be%e3%81%9b%e3%82%93%e3%80%8d/" rel="bookmark" title="2007 年 2 月 4 日">berylを入れたら「テーマ・エンジンがありません」</a></li>
<li><a href="http://tmty.jp/2007/01/23/ubuntuberyl%e3%81%a7%e3%83%87%e3%83%a5%e3%82%a2%e3%83%ab%e3%83%a2%e3%83%8b%e3%82%bf%e3%81%8c%e4%bd%bf%e3%81%88%e3%81%aa%e3%81%84/" rel="bookmark" title="2007 年 1 月 23 日">ubuntu+berylでデュアルモニタが使えない</a></li>
</ul>
<p><!-- Similar Posts took 48.840 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://tmty.jp/2007/07/09/gmail%e3%81%a7%e3%83%a1%e3%83%bc%e3%83%aa%e3%83%b3%e3%82%b0%e3%83%aa%e3%82%b9%e3%83%88%e3%81%ab%e6%8a%95%e7%a8%bf%e3%81%97%e3%81%9f%e3%83%a1%e3%83%bc%e3%83%ab%e3%81%8c%e5%b1%8a%e3%81%8b%e3%81%aa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>NetBeans-6.0M9でRubyOnRailsするとgenerateでコケる</title>
		<link>http://tmty.jp/2007/06/12/netbeans-60m9%e3%81%a7rubyonrails%e3%81%99%e3%82%8b%e3%81%a8generate%e3%81%a7%e3%82%b3%e3%82%b1%e3%82%8b/</link>
		<comments>http://tmty.jp/2007/06/12/netbeans-60m9%e3%81%a7rubyonrails%e3%81%99%e3%82%8b%e3%81%a8generate%e3%81%a7%e3%82%b3%e3%82%b1%e3%82%8b/#comments</comments>
		<pubDate>Mon, 11 Jun 2007 16:06:47 +0000</pubDate>
		<dc:creator>tmtysk</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Trouble]]></category>

		<guid isPermaLink="false">http://wp.tmty.jp/2007/06/12/netbeans-60m9%e3%81%a7rubyonrails%e3%81%99%e3%82%8b%e3%81%a8generate%e3%81%a7%e3%82%b3%e3%82%b1%e3%82%8b/</guid>
		<description><![CDATA[こないだGREEの勉強会で聞いたNetBeansでのRuby On Railsを早速試してみた。せっかくいじってみるので、最新の Preview Release (M9) を入れてみた。
例によって僕のPCはubuntu [...]]]></description>
			<content:encoded><![CDATA[<p>こないだGREEの勉強会で聞いたNetBeansでのRuby On Railsを早速試してみた。せっかくいじってみるので、最新の <a href="http://www.netbeans.org/community/releases/60/index.html">Preview Release (M9)</a> を入れてみた。</p>
<p>例によって僕のPCはubuntu-7.04 feistyなので、デスクトップ効果を使っている場合は、Java6 u1を入れておいてやる必要がある。この辺は<a href="http://blogs.sun.com/katakai/entry/ubuntu_7_04_de_netbeans">SunのKatakaiさんのブログ</a>が詳しい。</p>
<p>で、インストールが終わったら、インストール先ディレクトリの bin/netbeans を起動。おー、ちゃんと起動した。</p>
<p>[File]-[New Project] で Ruby On Rails Application が選択できる。Project Name を付けてやるだけで、cli 不要で、さくっと初期設定できちゃう。これはラクチンだ。IDE から Run すれば、デプロイ気にすること無く、WEBrick の起動からブラウザの localhost:3000 アクセスまで、全部やってくれる。</p>
<p>本家では <a href="http://www.netbeans.org/kb/60/rapid-ruby-weblog.html">10分でできるブログシステム開発のチュートリアル</a> も、flash ムービー付きで公開されている。ということで、早速試してみた。が、Controllerの [Generate] してみたら、右下にエラーアイコンぽいのが出た。NullPointerException 吐いたみたい。<br />
エラーメッセージは</p>
<div class="prompt">
A java.lang.NullPointerException exception has occurred.<br />
Please report this at http://www.netbeans.org/community/issues.html,<br />
:
</div>
<p>こんなかんじで、あと、ログには↓みたいのが出てた。<br />
<br />
<textarea rows="10" cols="50"><br />
java.lang.NullPointerException<br />
at org.netbeans.modules.ruby.railsprojects.GeneratorPanel.getName(GeneratorPanel.java:325)<br />
at com.sun.java.swing.plaf.gtk.GTKStyle.getInsets(GTKStyle.java:263)<br />
:<br />
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:539)<br />
[catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:964)<br />
</textarea></p>
<p>どうやらGUI周りでトラブってるぽいんだが、Classpath確認やらJDKの再設定やら試してみても、解決しない。</p>
<p>というところで、上記のKatakaiさんのエントリに、</p>
<blockquote><p>
Java6 u1 を使うと NetBeans 6.0 が GTK のネイティブルック＆フィールになるのでうれしい
</p></blockquote>
<p>というのを発見。ん、Look &amp; Feel が変わってるのか。何か関係してるかもしれない、と、試しに起動オプションで Look &amp; Feel をいじってみる。</p>
<div class="prompt">
$ ./netbeans &#8211;laf javax.swing.plaf.metal.MetalLookAndFeel
</div>
<p>これで、起動したGUIで [Generate] したら、ちゃんと generate 用のダイアログが表示された。GTK の Look &amp; Feel 制御周りがまだ怪しいのかな。</p>
<p>ともかく、これでRails開発ごりごりできるようになった。デバッグ環境が最初から整ってるのが、なかなか良い。<br />
<br/><br/><strong>関連していそうなエントリ:</strong>
<ul class="similar-posts">
<li><a href="http://tmty.jp/2008/12/11/around_filter-%e3%81%a7-reset_session-%e3%81%99%e3%82%8b%e3%81%a8%e3%83%a1%e3%83%a2%e3%83%aa%e3%83%aa%e3%83%bc%e3%82%afmemory-leak%e3%81%99%e3%82%8b/" rel="bookmark" title="2008 年 12 月 11 日">around_filter で reset_session するとメモリリーク(memory leak)する</a></li>
<li><a href="http://tmty.jp/2008/02/18/rails%e5%8b%89%e5%bc%b7%e4%bc%9a%e6%9d%b1%e4%ba%ac%e3%81%ab%e8%a1%8c%e3%81%a3%e3%81%a6%e3%81%8d%e3%81%9f080217/" rel="bookmark" title="2008 年 2 月 18 日">Rails勉強会(東京)に行ってきた(080217)</a></li>
<li><a href="http://tmty.jp/2008/02/19/tmail-%e3%81%a7%e6%90%ba%e5%b8%af%e3%83%a1%e3%83%bc%e3%83%ab%e3%82%a2%e3%83%89%e3%83%ac%e3%82%b9%e3%82%92-parse-%e3%81%99%e3%82%8b/" rel="bookmark" title="2008 年 2 月 19 日">TMail で携帯メールアドレスを parse する</a></li>
</ul>
<p><!-- Similar Posts took 28.503 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://tmty.jp/2007/06/12/netbeans-60m9%e3%81%a7rubyonrails%e3%81%99%e3%82%8b%e3%81%a8generate%e3%81%a7%e3%82%b3%e3%82%b1%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu 7.04 Feisty Fawn で Thunderbird 2.0 を動かしたい</title>
		<link>http://tmty.jp/2007/04/30/ubuntu-704-feisty-fawn-%e3%81%a7-thunderbird-20-%e3%82%92%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%84/</link>
		<comments>http://tmty.jp/2007/04/30/ubuntu-704-feisty-fawn-%e3%81%a7-thunderbird-20-%e3%82%92%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%84/#comments</comments>
		<pubDate>Mon, 30 Apr 2007 14:41:36 +0000</pubDate>
		<dc:creator>tmtysk</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Trouble]]></category>

		<guid isPermaLink="false">http://wp.tmty.jp/2007/04/30/ubuntu-704-feisty-fawn-%e3%81%a7-thunderbird-20-%e3%82%92%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%84/</guid>
		<description><![CDATA[Edgy -> Feisty のアップグレードは、メニューの [システム]->[システム管理]->[アップデート・マネージャ] であっさり行けた。dist-upgrade でも OK。結構入念にバックアップを取ってあった [...]]]></description>
			<content:encoded><![CDATA[<p>Edgy -> Feisty のアップグレードは、メニューの [システム]->[システム管理]->[アップデート・マネージャ] であっさり行けた。dist-upgrade でも OK。結構入念にバックアップを取ってあったのだが、想像以上に簡単に終わってしまい、拍子抜け。OS のバージョンアップがこんだけ簡単だとウレシイなあ。いまのところ、日本語フォント名が日本語だ、くらいしか変更点に気づけてないけど、他にもいろいろあるみたい。パフォーマンス向上も結構あるらしい。</p>
<p>で、そのあと、Thunderbirdも2.0を使ってみようとしたが、こちらはうまくいかない。現在未解決。(2007/05/22追記、動いた。)</p>
<p>そもそも、本家で配布しているバイナリがSIGSEGV吐いちゃって、そのままじゃ動かない。</p>
<p>で、<a href="ftp://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/2.0.0.0/source/">FTPサーバ</a>からソースを引っ張ってきて自前ビルドを試みた。</p>
<p>configure は、幾つかパッケージの不足があったものを追加インストールした後、<a href="http://d.hatena.ne.jp/uniker/20070427/1177654300">id:unikerさん</a> と同じ現象が出たので、同様に $ cp mail/config/mozconfig . で解決 (_ _)。でも、結局:</p>
<div class="prompt">
undefined reference to `nsHashKey::Write(nsIObjectOutputStream*) const&#8217; &#8230;<br />
:<br />
/usr/bin/ld: final link failed: Nonrepresentable section on output<br />
:<br />
:
</div>
<p>こんな感じでビルドできません。たぶん、<a href="https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/102518">launchpadフォーラムに上がってるこのレポート</a>と同じ症状なんだけど、この、うまく行くか、まだ分からないfirefox用パッチを解読するのが吉なのか、おとなしくSynapticでThunderbird 2.0がサポートされるのを待つべきか。</p>
<p>
そうそう、Feisty にしてから、beryl が、ちと不安定みたい。たまにタスクバーとか、ウィンドウが真っ白になってたりする。beryl 再起動すると復帰するんだけど、これもどこかに問題があるのかな。~/.xsession-errors 見ても、それっぽいエラーは吐いてないんだけど。。</p>
<p>その後、<a href="http://ubuntu-tutorials.com/2007/05/18/manually-install-thunderbird-2-ubuntu-704/">手動インストールに成功している勇者</a>を発見。</p>
<blockquote><p>
1. Download Thunderbird 2. (Save to disk)<br />
2. sudo tar -C /opt -zxvf ~/Desktop/thunderbird-*<br />
3. sudo ln -s /opt/thunderbird/thunderbird /usr/local/bin/thunderbird<br />
4. create a menu item:
</p></blockquote>
<p>なんと、実行場所がまずいだけだった。thunderbird起動スクリプト中の関連ファイルが解決できていなかったとか、その辺と思われる。もうちっとちゃんと調べたら分かってたかもなあ。</p>
<p>1.5からの移行については、<b>2.0の起動前に</b> ~/.mozilla-thunderbird を ~/.thunderbird にリネーム。失敗するとかなり寒いので最初はコピーにしときましょ。その後、起動すれば、1.5の設定、メール、spamフィルタの学習もちゃんと引き継げる。よかったよかった。</p>
<p>さっそくタグづけも使ってみた。物理的なフォルダは撤廃。MLやprojectに応じてフィルタ処理からタグを付ける。1-9のショートカットキーは<a href="http://www.amazon.co.jp/dp/4047041351/tmtysk-22">3色ボールペンのノリ</a>で [1_important] [2_so_important] [3_interesting] だけ定義。to_reply, to_read も作ったけど、使うかは微妙。</p>
<p>デフォルトで右上の検索ボックスでタグ検索ができないのは痛いけど、<a href="https://addons.mozilla.org/ja/thunderbird/addon/1339/">GmailUI Extension</a> を入れれば tag:&lt;タグ名&gt; で検索できる。よく使うケースは検索フォルダを定義すれば、いい感じにフラットな受信ボックスで使っていけそうだ。</p>
<p>うむうむ、いいかんじ。<br />
<br/><br/><strong>関連していそうなエントリ:</strong>
<ul class="similar-posts">
<li><a href="http://tmty.jp/2007/01/23/ubuntuberyl%e3%81%a7%e3%83%87%e3%83%a5%e3%82%a2%e3%83%ab%e3%83%a2%e3%83%8b%e3%82%bf%e3%81%8c%e4%bd%bf%e3%81%88%e3%81%aa%e3%81%84/" rel="bookmark" title="2007 年 1 月 23 日">ubuntu+berylでデュアルモニタが使えない</a></li>
<li><a href="http://tmty.jp/2007/07/09/gmail%e3%81%a7%e3%83%a1%e3%83%bc%e3%83%aa%e3%83%b3%e3%82%b0%e3%83%aa%e3%82%b9%e3%83%88%e3%81%ab%e6%8a%95%e7%a8%bf%e3%81%97%e3%81%9f%e3%83%a1%e3%83%bc%e3%83%ab%e3%81%8c%e5%b1%8a%e3%81%8b%e3%81%aa/" rel="bookmark" title="2007 年 7 月 9 日">Gmailでメーリングリストに投稿したメールが届かない仕様について考えた</a></li>
<li><a href="http://tmty.jp/2007/02/04/beryl%e3%82%92%e5%85%a5%e3%82%8c%e3%81%9f%e3%82%89%e3%80%8c%e3%83%86%e3%83%bc%e3%83%9e%e3%83%bb%e3%82%a8%e3%83%b3%e3%82%b8%e3%83%b3%e3%81%8c%e3%81%82%e3%82%8a%e3%81%be%e3%81%9b%e3%82%93%e3%80%8d/" rel="bookmark" title="2007 年 2 月 4 日">berylを入れたら「テーマ・エンジンがありません」</a></li>
</ul>
<p><!-- Similar Posts took 38.363 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://tmty.jp/2007/04/30/ubuntu-704-feisty-fawn-%e3%81%a7-thunderbird-20-%e3%82%92%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%84/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.861 seconds -->
