2010年6月8日火曜日

ubuntu の apt-get と aptitude について

なんか、aptitudeのほうが安全・安心らしい。
が、いままで apt-get でインストールしまくっていた。
乗り換えできるのか調べてみたが、どうやら(おそらく)
パッケージ管理はどちらも apt で行っていて、削除する
際のパッケージ依存チェックなどが強力なのが aptitude
なだけのよう。

実際、apt-get でインストールしたパッケージを aptitude show
で確認してみるとインストール済みとなっていたし。

気にすることはなさそう。(たぶん)
これからは aptitude で作業を行おう。

以上。

2010年6月7日月曜日

Ubuntu 10.04 Ctrl+Space の入力切替をつぶす

eclipse や emacs を使っていると
Ctrl+Space
ってよく使うのに、これをやると入力切替になってしまう。

なので以下の方法で潰す。

  1. システム > 設定 > IBus の設定 を選択

  2. 一般タブの切り替え:欄のリストを選択

  3. Ctrl+space を選んで削除ボタンを押す



ubuntu 9.10 から SCIM から IBus になったらしい。

以上。

ubuntu 10.04 で conky 最前面表示の対処

家で使用している PC がそろそろ 8 年くらいになるのかな?
結構古さを感じるようになってきたので、ubuntu 10.04 に鞍替えした。
今までは VMware でしか使ってなかったが、クライアント PC として正式に利用してみると結構好印象。デスクトップはかなりカスタマイズできるし、古い PC なんでドライバ類もそろってる。
で、conky をインストールし、自動起動の設定をしてみたが、常に最前面に表示される。ググってみたら対処方法のってたけど、家では解決しなかったので補足事項を追記。

まず、他のサイトと同じようにシェルを作成する。
$ cd
$ mkdir .autoexec
$ cd .autoexec
$ vi conky-start

ファイルの内容を以下のように設定
#!/bin/sh
sleep 10
/usr/bin/conky &

他のサイトではこのシェルを.profileに記述するようにしていたが家では改善されなかった。
なので、家ではこのシェルを自動起動の設定に追加した。

Compiz よりも Conky が先に起動するとマズイらしいが、家ではsleep 分待った後にしっかり
Compiz > Conky の順番で起動しているようだったので意味がなかった。
sleep の時間は環境によってマチマチと思うので臨機応変に変更が必要。
私は 60 秒もまてるほどのんびりしてなかったので 10 秒にした(笑)

2010年5月28日金曜日

ThreadPoolExecutorの挙動

本職Javaで Thread を管理する仕組みを作成することに。
Java 5 なので、まよわず ThreadPoolExecutor を利用することに。
んで、ハマった挙動についてメモ。

ThreadPoolExecutor はシンプルな FIFO (LIFO) を提供してくれるものと
思っていたが、実はそうではない。ハマりどころはcorePoolSizemaximumPoolSizeの設定値と指定する Queue のサイズによっては
シンプルな FIFO(LIFO) にはならないということ。

Javadoc からすると、
corePoolSize
通常使う thread の数。

maximumPoolSize
thread の最大数


とある。なので、
corePoolSize = 3
maximumPoolSize = 5

とかで Executor を作ったら、通常は 3 つ。Queue があふれてきたら、最大 5 つで動作するという認識だった。
この認識は正解で、最初は thread 3 つで稼働。thread 3 つが埋まると、キューイングされていき、最大キューイング数に達すると thread が増えていった。
が、thread が増えた際に処理されるキューが FIFO ではなかった。
何が処理されたかというと、キューイングであふれた新着 JOB だった。
挙動をまとめると、

  1. job 到着時、通常 thread が開いていたら即座に thread 生成。

  2. 通常 thread が埋まっている場合、キューイング

  3. 通常 thread が埋まっているかつ、キューイングも埋まっている場合、新着 Job を 新規 thread 生成で実行。

  4. MAX thread まで埋まるかつ、キューイングが一杯の場合、execute 時にエラーを吐く。

  5. 新着 Job がこなくて、thread が空くと、キューの先頭 Job が処理される。



FIFO ではないでしょ?

Java 屋なんだけど、初めて Java の記事をのっけた気がする。。。

以上。

2010年5月27日木曜日

VMWare チューニング

Java開発(仕事)とRails(趣味)は ubuntu で行っている。
メインはWindowsだが、会社のルール上別 OS に切り替えるのは厳しいため、
VMWare で ubuntu を動かしている。
ほとんどはターミナル経由でCUIなのだが、Eclipseを使いたくなり
GUI で操作し始めたのだが、死ぬほど遅い。
いちいち固まる。Windowsも固まる。
なのでチューニングを調べたらあった。

参考:DJ_SATORUの研究日誌

同じように .vmx ファイル上に
mainMem.useNamedFile = "FALSE"
MemTrimRate = "0"

を記述したら劇的に変わった。

もっと早くにやるんだった。

2010年5月14日金曜日

Rails(3beta3) で国際化(I18n) その1

Rails3 で国際化を試していく。
自分の中でもあやふやだった部分を潰していく。(ブラウザの言語設定は本当に参照できないのかとか)

テスト用の MVC を生成して確認していく。
$ rails g scaffold state code:string, name:string


ブラウザの言語設定で判定する場合
HTTP_ACCEPT_LANGUAGE を参照する。

# app/controllers/application_controller.rb
before_filter :set_locale
def set_locale
I18n.locale = request.env['HTTP_ACCEPT_LANGUAGE'].split(",").first
end

URL で判定する場合

# app/controllers/application_controller.rb
before_filter :set_locale
def set_locale
I18n.locale = params[:locale]
end


# config/routes.rb
scope "/:locale" do
map.resources :states
end

$ rake routes
GET /:locale/states(.:format) {:action=>"index", :controller=>"states"}
states POST /:locale/states(.:format) {:action=>"create", :controller=>"states"}
new_state GET /:locale/states/new(.:format) {:action=>"new", :controller=>"states"}
GET /:locale/states/:id(.:format) {:action=>"show", :controller=>"states"}
PUT /:locale/states/:id(.:format) {:action=>"update", :controller=>"states"}
state DELETE /:locale/states/:id(.:format) {:action=>"destroy", :controller=>"states"}
edit_state GET /:locale/states/:id/edit(.:format) {:action=>"edit", :controller=>"states"}

URL パラメータで判定する場合
ロケールの選択は上記URL で判定する場合と同様で before_filter で行う。
rails で生成する URL には自動で現在設定されているロケールを付け足す。

# app/controllers/application_controller.rb
def default_url_options(options={})
{ :locale => I18n.locale }
end

routes は普通の設定で問題ない。(ってかこっちじゃないと動かない)

# config/routes.rb
map.resources :states

ドメインから判定する方法もあるらしいが、com などだったらどうするんだろう?
と、いうことでドメインはぱす。
RESTful で考えると URL か URL Param になる。
が、やっぱりブラウザの言語設定で判断したいかな。

参考
http://guides.rubyonrails.org/i18n.html

2010年5月12日水曜日

ubuntu 10.04 で Ruby on Rails(環境構築編)2

$ rails example
$ cd example
$ rails g scaffold test code:string name:string
$ rake db:migrate

を実行後、config/application.rb をつついて
$ rails s

を実行し、http://localhost:3000/tests にアクセスすると
なにやら怪しげなエラーが発生した。

google先生に質問したところ、英語で
「1.9.1 は非サポートなんで、1.9.2 を使ってね」
と、いうありがたい回答をいただいた。

なのでまた環境構築しないと。。。

□ruby1.9.2のインストール準備
$ sudo apt-get install subversion
$ sudo apt-get install autoconf

□ruby1.9.2のインストール
$ rvm install ruby-head

ruby1.9.2はheadからインストールしないと、rails3は動かない。
preview1では実際 scaffold できなかった。(ruby BUG)

以上。