lennyがreleaseされてから、sid内のeximがデフォルトでrelay禁止になってた。
ということで、以下をupdate-exim4.conf.confに追加して
update-exim4.confを実行する。
dc_relay_domains='xxx'
dc_relay_nets='192.168.16.0/24'
これでOK。
2009年2月25日水曜日
Thread化
今まで、1 process - 1 serviceという形で設計してきたのだが
やはり、Marketの数が増えてくると、serviceで分けなければならなくなり
Rubyのインスタンス数が増え、それごとに、30MB近くメモリが必要と
なるため、1 process - Many services on threads という
設計にした。
(当初このようにしていたのだが、途中で変更したが、元に戻す)
注意点 1: Thread周り
スレッドプールを自作して使っているのだが、
デーモン化した子プロセス内で
ちゃんとThreadを作ってあげないと、ダメ。
プロセスコピーするから、Threadもコピーされるからいいかと
思ってたんだけど違うのかな。ちゃんと勉強しよう。
注意点 2 : 設計に関して
listenするagentは、メッセージを受信したあと、
Threadでyield内が実行されるため
DBコネクションをきちんとお掃除してあげないと
残ってしまう。
処理するThread内で、
ActiveRecord::Base.clear_active_connections!を
読んであげると、DB connection poolに返し
再利用されるみたい。
connection.disconnect!をしてしまうと、再利用されないで
切られてしまう。次にまた新規のコネクションを開こうとするので
時間がかかる。
やはり、Marketの数が増えてくると、serviceで分けなければならなくなり
Rubyのインスタンス数が増え、それごとに、30MB近くメモリが必要と
なるため、1 process - Many services on threads という
設計にした。
(当初このようにしていたのだが、途中で変更したが、元に戻す)
注意点 1: Thread周り
スレッドプールを自作して使っているのだが、
デーモン化した子プロセス内で
ちゃんとThreadを作ってあげないと、ダメ。
プロセスコピーするから、Threadもコピーされるからいいかと
思ってたんだけど違うのかな。ちゃんと勉強しよう。
注意点 2 : 設計に関して
listenするagentは、メッセージを受信したあと、
Threadでyield内が実行されるため
DBコネクションをきちんとお掃除してあげないと
残ってしまう。
処理するThread内で、
ActiveRecord::Base.clear_active_connections!を
読んであげると、DB connection poolに返し
再利用されるみたい。
connection.disconnect!をしてしまうと、再利用されないで
切られてしまう。次にまた新規のコネクションを開こうとするので
時間がかかる。
2009年2月22日日曜日
Gnome session使用時の注意点
今日は、急にGnome sessionが途中で止まるようになったのだが
調べていくと、gnome-settings-daemonで止まっているようだった。
そこで調べた結果が↓
http://projects.gentoo.gr.jp/docs/chkdoc/data/20070127155510.xml
consoleからxinitってもうみんなやんないのかな??
以下引用:
調べていくと、gnome-settings-daemonで止まっているようだった。
そこで調べた結果が↓
http://projects.gentoo.gr.jp/docs/chkdoc/data/20070127155510.xml
consoleからxinitってもうみんなやんないのかな??
以下引用:
gnome-settings-daemonでは、ローカルのdbusセッションが動作している必要があり、 それが動作していない場合は起動に失敗します。 GDMは自動でdbusセッションを起動しますが、 別のDMや.xinitrcファイルと共にstartxを使用している場合は、 dbusセッションを手動で起動してあげる必要があります。それには、 Xのスタートアップファイル(startxでは.xinitrc、 DMでは.xsession)に下記を追加します。
| Code listing 1.1: dbusセッションの起動 |
eval `dbus-launch --exit-with-session --sh-syntax` |
必ずgnome-session(直接起動しているのであれば、 gnome-settings-daemon)を起動する行手前に上記をおくようにして下さい。
別の方法として、 startxを使用し.xinitrcで何か特別なことをしていない場合に、 .xinitrcを削除し.profileや/etc/rc.confでXSESSIONをgnomeと設定することも可能です。 これにより、gnome-sessionが立ち上がる前に正しくdbusセッションが起動されます。
2009年2月21日土曜日
Ruby Cairoまとめ

CairoのRuby bindingであるrcairoを使ってみた。
で、それで、ticker-appletのメッセージボックスを描いてみた。
pythonには、pynotifyというメッセージボックス描画APIがあるようだが、Rubyにはなさげだったので、真似してticker-appletに描いてみた。
Cairoは以下のストーリーで使用する
1. Surfaceの作成
surface = Cairo::ImageSurface.new(format, width, height)
2. Contextの作成
context = Cairo::Context.new(surface)
3. Contextへの描画
## 背景 ##
context.set_source_rgb(1,1,1)
context.rectangle(0,0,width,height)
context.fill
## Text
markup = "Hello World "
attr_list, text = Pango.parse_markup(markup)
layout = context.create_pango_layout
layout.attributes = attr_list
layout.text = text
context.show_pango_layout(layout)
## 移動 ##
context.translate(100, 200)
## 画像ロード ##
context.set_source_pixbuf(Gdk::Pixbuf.new('file.png')
context.paint
といった感じ。
## GTKとの連携プレー ##
drawing_area = Gtk::DrawingArea.new
drawing_area.signal_connect('expose_event') do |widget, event|
context = widget.window.create_context
## ... ##
end
意外と簡単に使えるのでグラフ描画ライブラリも将来デザインしてみよう。
2009年2月18日水曜日
2009年2月14日土曜日
2009年2月10日火曜日
SQL join
Joinは時間がかかる。3.3ms↓
@fetch_symbols = Tick.all(:select => "name", :joins => :ticker_symbol).map { |u| u[:name]}.uniq
0.1+0.2+0.1ms = 0.4ms↓
m = Market[@market_config["market"]]
@fetch_symbols = TickerSymbol.find(m.ticks.map(&:ticker_symbol_id)).map(&:name)
@fetch_symbols = Tick.all(:select => "name", :joins => :ticker_symbol).map { |u| u[:name]}.uniq
0.1+0.2+0.1ms = 0.4ms↓
m = Market[@market_config["market"]]
@fetch_symbols = TickerSymbol.find(m.ticks.map(&:ticker_symbol_id)).map(&:name)
Sumida Project 2
Sumida systemをRuby 1.9に対応させた。こちらへBlogを移動して
開発過程を記述していく。その際に理解したこと、勉強したことも綴る。
元のblog
http://blog.livedoor.jp/projsumida/
開発過程を記述していく。その際に理解したこと、勉強したことも綴る。
元のblog
http://blog.livedoor.jp/projsumida/
登録:
投稿 (Atom)


