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)

以上。

2010年5月10日月曜日

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

rvm で ruby をインストールするとすさまじく楽勝。
ただし、事前セットアップがかなり必要なため、そこをメモしておく。

* よく分からないがおそらく ruby インストール前にインストールしておく必要アリ。

□事前セットアップ
$ sudo apt-get install gcc
$ sudo apt-get install build-essential
$ sudo apt-get install bison byacc gperf
$ sudo apt-get install zlib1g-dev
$ sudo apt-get install libreadline5 libreadline5-dev
$ sudo apt-get install libncurses5 libncurses5-dev
$ sudo apt-get install libssl-dev
$ sudo apt-get install sqlite3 libsqlite3-dev
$ sudo apt-get install curl
$ sudo apt-get install git-core


最新が入っていますといわれるものは無視する。
上記パッケージをすべてインストールした状態で
$ rvm install 1.9.1
とかする。

□rails(3 beta3) インストール
$ gem install rails --pre
$ gem install sqlite3-ruby


これで rails3 beta3 が完動する。(rails cも含めて)
もちろん rails g scaffold も動く。
rvm さまさまである。
自力でインストールした際は GEM_PATH の設定や、bindle のエラーなどではまりまくったがすんなり動くところまでたどり着いた。

明日から rails3 使ってみよう!

以上。

ubuntu 10.04 で Ruby(環境構築編)

複数バージョンの Ruby が簡単に切り替えられる rvm を使う。
□必要なもののインストール
1.git
$ sudo apt-get install git-core

2.curl
$ sudo apt-get install curl

3.zlib(開発環境)
$ sudo apt-get install zlib1g-dev

□rvm のインストール
1.github からソースのダウンロード
$ mkdir -s .rvm/src
$ cd .rvm/src
$ git clone git://github.com/wayneeseguin/rvm.git
$ cd rvm
$ ./install


□インストール後に表示されるメッセージに従い、.bashrc を変更
$ vi ~/.bashrc

先頭行に追加
if [[ -s /home/◯◯/.rvm/scripts/rvm ]] ; then source /home/◯◯/.rvm/scripts/rvm ; fi

□1.9.1インストール
$ rvm install 1.9.1

□1.8.7インストール
$ rvm install 1.8.7

各バージョンを利用する場合は
$ rvm 1.9.1

すばらしいな、これ。

2010年5月6日木曜日

ubuntu 10.04 を VMware へインストール

VMware player に ubuntu 10.04 を新規簡易インストールした際
ログイン画面で文字入力ができなくなった。
ググってみたが話題には上がってなかったためメモ。

原因は VMware へインストールする際のバグらしい。

以下の方法で対処。

1.ログイン画面の右下で再起動を選択。
2.再起動中、shift キーをずっと押し続けておく。
  (GRUB ブートローダを起動するため)
3.recovery mode を選択。
4.Recovery Menu の root(Drop to root shell prompt) を選択。
5./etc/default/console-setup を vi で開いて編集。
  以下の項目を編集

XKBMODEL="hhk" # SKIP
XKBLAYOUT="jp,us" # us
XKBVARIANT="," # U.S. English

XKBMODEL が SKIP なのが問題のよう。ここだけ hhk にしても大丈夫。
残りの項目はログイン時のデフォルト設定っぽい。
XKBLAYOUT => keybord
XKBVARIANT => language

google 先生が答えてくれなかったのはたぶん世間一般は
9.10 からアップデートしているんだろうな。

以上。