2009年10月18日日曜日

WineでJavaアプリ起動不可問題解決

WindowsのJavaアプリで、Wineから起動すると、次に起動するときに
Access Violationがでて起動しなくなってしまうものがありました。
今日調べてたら、どうも、winecfgで、pixelshaderをオフれば大丈夫という
ことが判明。

2009年9月24日木曜日

こころに響いた言葉

カンブリア宮殿に、サイゼリヤの社長がでていた。
その中で、社長のお母様からもらった手紙の内容がでたのだが、これがとてもよい言葉であった。

大きなことを成し遂げるために力を与えてほしいと神に求めたのに謙虚に学ぶようにと弱さを授かった 
偉大なことができるよにと健康を求めたのにより良いことをするようにと病気を賜った 
幸せになろうとして冨を求めたのに賢明であるようにと貧困を授かった 
世の人の賞賛を得ようとして成功を求めたのに得意にならないようにと失敗を授かった

2009年9月19日土曜日

読書@Cafe

スティーブ・ジョブズ 人を動かす神ーなぜ、人は彼に心を奪われるのか?


http://www.amazon.co.jp/exec/obidos/ASIN/4766710584/playnote-22/ref=nosim

Jobsの生き様の本。前よんだのと内容はあんまり変わらん感じ。
Jobsのことがタイトルにあるのに、なんで、松下幸之助がでてくんのよって思ってたら
著者はPanasonic出身の人だったのね。もういいよ、Pは。

2009年8月22日土曜日

Hash.new

x = Hash.new{|h,k| h[k]=Hash.new(&h.default_proc)}
とすると、
x[:a]=1
とか、
x[:b][:c]=2
とか、やれるみたい。便利。

2009年8月6日木曜日

metacityでcomposition

gconftool-2 -s '/apps/metacity/general/compositing_manager' --type bool true

2009年7月19日日曜日

読書@Cafe

「すべての男は消耗品である。 Vol.10 大不況とパンデミック」
http://www.amazon.co.jp/gp/product/images/4584131651/ref=dp_image_0?ie=UTF8&n=465392&s=books

村上龍のエッセイ。テレ東のカンブリア宮殿ででていて、どんな本書いているのかということで
ちょうど、Cafeに本があったので読んでみた。
1箇所だけ
「どうして貧困はいけないのだろう」
この問いかけだけ頭にのこった。彼の結論はひらたくいうと
「歴史的にみると、ひどくなると暴動がおこってしまい、事前に救済するよりコストが高くつく」
ということらしい。そういう視点もあるなといった感じ。

読書@Cafe

ビジネスマンのための「読書力」養成講座

http://www.amazon.co.jp/gp/reader/4887596596/

本の紹介の本といった感じ

2009年7月12日日曜日

MySQL Error 1016

mysqldumpで、Error 1016がでたときは、open-files-limitの値を増やす必要あり。
パーティショニングを使うとファイル数が増えるので対応しないといけない。

[mysqld_safe]
open-files-limit = 20480
などのようにする

2009年7月7日火曜日

MySQL インデックス

whereの中で、
datetime < '2009-1-1 0:05:00'
ではindexが使われない
datetime <= '2009-1-1 0:00:00'
としないといけない。

2009年5月17日日曜日

債券 2

- デュレーション
要は、プライスに対する利回りの微分
ゼロクーポン債で、pをプライス、nを残存期間、Cを償還額としたときの現在価値は以下の式
p = C / (1+r)^n
本来のデュレーションは、dp/drとのこと。
実務ではこれに味付けしたものをデュレーションと呼んでるっぽい。

- 修正デュレーション
変化率にマイナスを付加したもの -(dp/dr)/p

- マコーレデュレーション
額面C%の半年複利のクーポン、利回りr%
式を展開するとクーポン部分も1つの債券と考えて、それの変化率を足し合わせたものという
ことがわかる。
(1+r/2) * 修正デュレーション

債券 1

ピムコの本を読んで債券にちょっと興味を持ったので
少しお勉強してみた。

- ゼロクーポン債
利子がない代わりに、はじめから価格が償還額より低く売られている債券
利回り一番計算楽 :D

Q. 90円が2年後に100円になるゼロクーポン債の年複利の年利回りは
A. 90(1+r)^2 = 100
なので、r = sqrt(100/90) - 1

Q. 90円が2年後に100円になるゼロクーポン債の半年複利の年利回りは
A. 90(1+r/2)^4 = 100
を満たすr

- 利付債
ある期間ごとにクーポン(利子)が支払われる債券

Q. 割引率2%、償還期限2年、額面100円で年に4%が支払われる利付債がある。現在価値は?
A. 1年後のクーポンの現在価値は
(100*0.04)/(1+0.02)
償還金の現在価値は
(100*0.04)/(1+0.02)^2
足したものが現在価値

2009年5月13日水曜日

読書@Cafe

「債券王ビルグロース常勝の投資哲学」
まず重要なのは「知己」。最も警戒しなければならないのは自分

リバモア
- 抵抗が最小の道を辿る

2009年5月3日日曜日

読書@Cafe

ロジック作成に尽力しようとしたのだけど、、、ついついたくさんある本に
惑わされよんでみた。

1.餃子屋と高級フレンチでは、どちらが儲かるか?
ストーリー仕立ての初学者用の会計の本。で、タイトルの答えはまぁ、どっちでも
なく、単にビジネススタイルが違うぞっていう感じで流されてた。
この本で学んだことは、
「時間を使うことは、お金を使うこと」。つまりTime is moneyってことかな。

2. タートルズの本 (タイトル忘れた)
P/Lフィルターがためになった。
ほとんど同じことを読む前に自分もやろうとしてたから。

研究記録を残そう

Blogもほとんど備忘録になっているので
ちゃんとレポート形式みたいにして
研究テーマも設けて何をやって、明日何をすると
いうことを書こう。とりあえずやりたいことリストは

List:
- リアルタイム情報取得 & 解析用 ( DecisionStance)のview設計
- Sumida logic Ryhogokuの設計 & 実装

2009年5月1日金曜日

Bluetooth & GPS

Bluetooth経由でGPSを受信する方法

1. sdptool add --channel=1 OPUSH
2. rfcomm bind /dev/rfcomm0

以上。

2009年4月25日土曜日

winner-mode

Emacsには、winner-modeというのがついていて、Windowの分割のundo/redoができるみたい。

2009年4月17日金曜日

deadlock due to conn pool

新しいDB環境を作ってやろうとしたら、急にdeadlockが発生するようになったが
その時は、他のことも色々といじっていたので、原因解析に1日かかってしまった。
結局、コネクションプール(pool stanza)をdatabase.ymlに記述していなかったので
データをとりにいこうとして、ロックされたみたいだった。
4つ以上のdecisionで並行テストをしようとすると、どんなときでも起こっており
テーブルからデータをひっぱってくるところでとまっていたようだったので
怪しいと思い、mysqladmin processlistでチェックをしていたら、Bingoだった。

2009年4月15日水曜日

invest_productの移動

finance pluginsのなかで、tickerをcurrency, commodity, stock,...と
いうようにわけて、それぞれで特殊なメソッドを追加したかったので
invest_product_idをtickからticker_symbolの属性へと変更した。
まぁ、symbolがおなじで違うproductってのもないだろうから
よいか。

あと、ちょっとsignsテーブルをみたりするのにSQLを打つのが
面倒になってきたのでyasnippetを導入してみた。
sumida-modeもそこそこ便利になってきたので
もう少し改善できないか考える。

2009年4月9日木曜日

読書@Cafe

今日読んだ本
「和のセンス」
Amazonで検索できなかった。

日本の独自の文化および、海外のものを改良してきたものについての内容。
電車の横長シートや、家のドアが外側に開くというのは
よくよく考えてみると、海外ではほとんどみたことなかった。

2009年4月4日土曜日

読書@Cafe

今日は、Cafeでちょっと読書。
読んだ(というより見た)のは
道具と暮らす

本の中に生活道具、衣類など色んな写真が
載っていたけど、木製のものが非常に味があって
良かった。年月を重ねるごとに趣がでていて
いづれ自分も少しづつ集めたい。

音が出ない問題解決

Debian (sid/experimental) Kernel 2.6.28で
ずっとalsaの音がでなかった件が解決。
ただ単に、/dev/snd/*の権限がなかったみたい。
2.6.29にあげて気付いたので、2.6.28でも
そうだったのかは未確認。
とりあえず、ユーザを、audioグループに追加して終了

読書@Library

今日からステキな図書館 & カフェで開発をすることにしました。
そこは7:00 - 23:00までやっていて気兼ねなくいれるので
開発の拠点をそこに移します。

あと、そこのにある本で読んでいったものを記録に
残すことにします。まずは今日読んだ本は

「スティーブ・ジョブズ 偉大なるクリエイティブ・ディレクターの軌跡」

ジョブスの様々な栄光と苦難の歴史が書かれています。
ここでも非凡な人は模倣ではなく簒奪という生き方を
やるのだという点が感慨深いものがありました。
あと、カンファレンスでいった言葉で響いたものが
ありました。

「今日が人生最後の日と考えて、今日やることは
本当にやりたいことか問いかけて、数日間 NOで
ある場合は何かを変える必要がある」

2009年4月2日木曜日

MySQL 大量データインサート & 設定 & grant

mysqldumpをとって普通にやると、今で、2Gくらいのテキストファイルができる。
で、こいつは普通にオープンしようとするとエライことになるので
追記できない。そういう場合は

$ mysql
$ set autocommit=0
$ set global general_log = 'OFF'
$ set global slow_query_log = 'OFF'
$ source xxx.sql

で、my.cnfのメモリ関連
innodb_buffer_pool_size=128M
innodb_log_file_size=32M
sort_buffer_size=1M
read_rnd_buffer_size=1M
innodb_doublewrite=false
innodb_file_per_table

## Debian
log_bin = /var/log/mysql/mysql-bin.log
とした。

## 備忘ログ
grant all on *.* 'user'@'%' identified by 'password' with grant option
''でくくる部分は注意。

2009年3月28日土曜日

Xrea serverへRails install

1. Gem install
$ ruby setup.rb config --prefix=~/local

2. Rails install
$ gem install rails -i ~/local/lib/gems --no-rdoc --no-ri

3. Add environment into .bashrc
$ echo 'export GEM_HOME=~/local/lib/gems' >> ~/.bashrc

4. link
$ ln -s ~/local/lib/gems/bin/rails ~/local/bin
$ ln -s ~/local/lib/gems/bin/rake ~/local/bin

## Create test project ##
$ cd tmp
$ rails test
$ ln -s ~/tmp/test/public ~/public_html/rails

Now we can access to http://xxx/rails

しかし、、、Rails 2.3.2のCGIハンドラが動かない。バグっぽい。
同じことがpostされている
http://www.ruby-forum.com/topic/182327

2009年3月21日土曜日

rails 2.3.2対応

Rails 2.3.2へのUpgrade

Debian experimentalのRuby1.9.1を使用する

1. ruby1.9.1をインストールにする。
URI::ParserというクラスがRuby1.9.1 (1.9.0はダメ)から入っているようで
Rails 2.3.2もそれを想定してあるためまずUpgradeする。

2. gemのインストール
ソースからインストール (/usr/bin/gem1.9というのができる)

3. rails for ruby1.9.1のインストール
$ sudo gem1.9 install -v=2.3.2 rails

4. narrayのインストール
$ sudo gem1.9 install narray

5. hpricotのインストール
$ sudo gem1.9 install hpricot
コンパイルにしくじるので、hpricot_scan.cの
RHASH(hash)->tblをRHASH_HASH(hash)に変更して
xxx.soをlib以下へコピー
あと、fast_xsは、hpricot_scanのエラーのせいでとまっているので
ruby extconf.rb; make
でコンパイルしてコピー

6. mysql.so
2.8.1のソースをもってきてmake install

7. libopenssl-rubyのインストール
$ apt-get install libopenssl-ruby1.9

8. rackのインストール
webrickを起動するのに必要
(今は1.8で動作させているので1.9ではいらないけど一応入れとく)

ruby1.9.1だと、./script/consoleとか動かないので
sumida-systemで起動するものは、ruby1.8で稼動させる。
そのために、ruby1.8でもrails/hpricotなどを入れる。

追記:
state_machineをgemで導入

2009年3月16日月曜日

mysql index

backtestをしていると、ある一定時間経つと急激に遅くなっていたので
調査をしてみた。
最初は、Buffer poolが足りないのかなと思って増やしていたのだけど
それでも、遅くなるまでの時間が長くなるだけでまた遅くなる。
backtestを行うtick tableのスタートポイントを変えてみたのだけど
必ず遅くなっていた近辺でやっぱり遅くなることが判明。
ということで、SQLをexplainしてみてみると、
where: file: sortといった感じで、見たくない文字が、、、。
そこで、MySQLのIndexが使用されない場合を検索してみると
order byで指定しているカラム以外をwhereに使ってると
使われないといった記述があった。
実はそれ以外にも結構使用されない場合があるみたい。
named_scope: barsの中のSQLで、datetimeをorder byで使っていて
whereの中は、
datetime >= xxx and open is not NULL, close is not NULL
としていたので、sortがfileになっていたみたい。
とりあえず、NULLかどうかはアプリ側で判断することにして条件を外す。
1テーブルあたりのselectが0.43msから、0.01msへ。
ということで、体感的にもかなり速くなった。SQLは重要。

2009年3月11日水曜日

SVM

Ruby/SVMをruby1.9を使用してコンパイル。
extconf.rbでMakefileが作成されるみたいなので
/usr/bin/rubyを/usr/bin/ruby1.9の
symbolic linkにしただけ。

deadlock解消

Decisionをつねにdupして、ThreadPoolに投げこんで処理をすすめていたが
毎回@sessionを利用してDBに書くのもSVMを利用するとなるとコストが高いのでdupしないでいけるようにデザイン変更。
その際、deadlockが発生していたが、原因は以下だった。

1. Decisionのstatusが1度実行するとdoneになる。
2. statusをreadyにしなかったため、2度目の実行がすぐに終わってしまう。
3. Agentは、Decisionの終了を待つため、condition_waitするがその前に
Decisionがready statusじゃないので、Decision::start/finalizeを
実行せずに終了してしまう。つまり、spin_lockして待つわけではないので、Agentのcond_waitを待たない。 したがってdeadlockしてしまう。

とりあえずstatusをちゃんと変更するようにして解消

2009年3月6日金曜日

仮想環境のネットワーク

kvm で仮想ネットワークを使用するときは、-net nic -net tapとして
ifconfig tap0 0.0.0.0 up
brctr add br0 tap0
で tap0をbridgeインターフェースに入れる。

udhcpdのconfigは
start 192.168.5.30
end 192.168.5.254
interface xenbr0
max_leases 225
option subnet 255.255.255.0 <- 必要
option router 192.168.5.1
option dns 192.168.5.1
で設定しておいてあげるとd-iがいい感じに設定してくれる

2009年3月5日木曜日

Design change

すべてのサービスをThread化して
- MarketAgent
- CandleMaker
- DealAgent
と3つのうち、CandleMakerは1つだけ起動するようにやっていたが
例えば、Forex, Commodity, Stockと3つのマーケットを監視するように
していたとき、処理が重くなってしまい、その後に稼動するDealAgentが
遅れてしまうため、マーケットごとに起動するようにした。
つまり、各マーケットごとに3つのタスクが1セットになる。
コンテナは1つで、いくつでもスレッドをたてられるようにしてあるので
まぁ、9個のタスクをあげてもいい。

Todo:
- クラスアンロードの実装
- スレッドを制御するためのインターフェースの実装
今は、とりあえず、feedsテーブルから登録を削除すれば
トリガーとなるupdateメッセージは送信されなくなるので
その後は、タスクは何もしなくなる。あるタスクだけ変更して
リロードしたい時のための口が必要
- 上記Serviceをまとめた設定ファイルの実装
例えば、services.ymlというファイルに

forex:
- fetch
- candle_maker
- deal

commodity:
- fetch_commodity
- candle_maker_commodity
- deal_commodity
みたいな感じにして、起動時にロードして起動する

2009年3月2日月曜日

RubyのException

今さらながら、rescueでExceptionを捕捉してraiseする場合でも
ちゃんと、ensureは実行される。
raise以降のやつはもちろん走らない

begin
begin
raise Exception
rescue Exception
p 'Hello'
raise Exception
p 'Hello2'
ensure
p 'Yahoo'
end
rescue Exception
p 'Finish'
end

-- Result --
"Hello"
"Yahoo"
"Finish"

2009年3月1日日曜日

Gnome Applet改良


Gnomeのアプレットを
indust product別にし
またずっと表示してても
気にならないように
30%の透過Windowにした。
ままいい感じ。
Gtk::Window::set_opacity(0.3)
一発。

2.6.28での注意点

Kernelを2.6.28にしたのだけど、MAQUARADEを入れていると
listenしていないポートへのTCPのconnectでblockしてしまう。
正確には、RSTをサーバ側は返しているのだけど、なんらかにより
Timeoutまでまっているっぽい。
2.6.26までは、そんなことなかったのだけども、、、。
Mac miniのサーバにはMASQUARADEはしないので、まぁ、問題はないけど
ThinkPadでの開発のときは外しとかないと、、、

2009年2月26日木曜日

exim4

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!をしてしまうと、再利用されないで
切られてしまう。次にまた新規のコネクションを開こうとするので
時間がかかる。

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が起動に失敗する

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日土曜日

ticker applet


ようやくTicker Appletがほぼ完成した。
あとはデザインと、設定画面だけ。Ruby/Gnome2で
Preferenceメニューを作るやり方が不明。
Gtk+だと、from_fileみたいな関数があるけど、、、。

まぁ、とりあえず、あとは片手間でもできそうなので
一旦終了し、SVMでパターン認識によるトレード戦略の
デザインにとりかかろう。

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日水曜日

Race condition


Sumidaで起こったRace conditionの状態をまとめてみた。
とりあえず、Threadの数を増やして解決してみた。

thread

n秒sleepしているThreadを待つとdeadlockしてseg fault
まぁ、待つThreadはいつまでまてばいいか不明なので理解はできるけど
この場合はThreadをkillしてあげないといけないのかな、、、。
Threadの処理の中に、残りの時間を持たせてpollingするか。

2009年2月14日土曜日

Inject

Injectorになった。

BoardPrice.with_symbol.inject({ }) { |h, e| h[e[:name]] = e[:bid]; h}

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)

Sumida Project 2

Sumida systemをRuby 1.9に対応させた。こちらへBlogを移動して
開発過程を記述していく。その際に理解したこと、勉強したことも綴る。

元のblog
http://blog.livedoor.jp/projsumida/

SKK more

1. 間違って入力したひらがなを漢字にやりなおしたいとき
* あたまに戻って [Q]
* M-Qとすると便利


2. 外来語のローマ字入力
* [/]を打ってから入力

3. 記号
* きごうと入力

4. ギリシャ文字
* /greek

5. 文字コードで入力
* \

6. 読みのコンプリーション
* [tab]、 '.', ','

7. 一時入力
* [Q]を押してから、最後に[q]を入力

SKK more

1. 間違って入力したひらがなを漢字にやりなおしたいとき
* あたまに戻って [Q]
* M-Qとすると便利


2. 外来語のローマ字入力
* [/]を打ってから入力

3. 記号
* きごうと入力

4. ギリシャ文字
* /greek

5. 文字コードで入力
* \

6. 読みのコンプリーション
* [tab]、 '.', ','

7. 一時入力
* [Q]を押してから、最後に[q]を入力

2009年2月9日月曜日

ssh コネクション共有方法

sshで、1つのコネクションを共有する方法

速いし、passfraseいれなくてよくなるので便利。

.ssh/configに

Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p

を追加。