Archive for 2月, 2010

emacs23始めました on Ubuntu 9.10

標記のとおり。遅まきながら,ですが。

普段,NetBeansのRailsモードで開発してたんですが,Rinariなる凄く便利なelispができたようなので,試すついでに色々設定してみました。emacsは23.1.1です。パッケージで言うとemacs23、と明示的に指定します。単純に23のほうが日本語フォントの設定がしやすいからです。。

インストールと設定

一部,emacsとRinariで快適Rails開発! と言う素晴らしい記事を激しくコピペしつつ,以下の手順です。

Read the rest of this entry »

grub2のちょっと良い話

Ubuntu 9.10等,GRUB2を採用するディストリビューションも増えてきたこの頃,イカがお過ごしでしょうか。今日は,そんなGRUB2を色々いじっていて気づいたいくつかのtipsをメモしたりなんかします。

/boot/grub/menu.lst はもういない

GRUBのメニュー表示設定といえば /boot/grub/menu.lst という勢いで,インターネット上にもそのファイルの編集ノウハウがたくさん転がっていますが,GRUB2採用のUbuntu9.10にはそんなファイルありません。とっとと忘れましょう。

udzura@ubuntu-vaio:~$ ls /boot/grub/menu.lst
ls: /boot/grub/menu.lstにアクセスできません: No such file or directory
udzura@ubuntu-vaio:~$

デュアルブートしてるんだけど,起動画面で,正直Windowsが上にきてほしい

Windowsを入れているPCに,デュアルブート構成でUbuntuその他Linuxを入れると、「Ubuntu, Linux 2.6.31-19-generic」とかそういうエントリーが上のほうにきて,デフォルトでブート(ほっといてブート)するのもLinuxになります。 /boot/grub/menu.lst はもういないので,この順序を変えるにはどうすればいいの???

大丈夫! 実は簡単なんです。 /etc/grub.d と言うディレクトリをご覧ください

udzura@ubuntu-vaio:~$ ls /etc/grub.d
00_header        10_linux       30_os-prober  README
05_debian_theme  20_memtest86+  40_custom
udzura@ubuntu-vaio:~$

そう,実はこの順番でメニューが表示されるのです。10のlinux、20のmemtest、そしてやっと30のその他OS,と言う風に……

その他OSたるWindowsを上に持ち上げるには,30になってるos-proberを05より大きく10より小さい数に mv(1) すれば良いと思います。07とかいいんじゃないでしょうか。

1
sudo mv /etc/grub.d/30_os-prober /etc/grub.d/07_os-prober

そして、

1
sudo update-grub
udzura@ubuntu-vaio:~$ sudo update-grub
[sudo] password for udzura:
Generating grub.cfg ...
Found Windows Vista (loader) on /dev/sda1
Found Windows Vista (loader) on /dev/sda2
Found linux image: /boot/vmlinuz-2.6.31-19-generic
Found initrd image: /boot/initrd.img-2.6.31-19-generic
Found linux image: /boot/vmlinuz-2.6.31-17-generic
Found initrd image: /boot/initrd.img-2.6.31-17-generic
Found linux image: /boot/vmlinuz-2.6.31-16-generic
Found initrd image: /boot/initrd.img-2.6.31-16-generic
Found linux image: /boot/vmlinuz-2.6.31-15-generic
Found initrd image: /boot/initrd.img-2.6.31-15-generic
Found linux image: /boot/vmlinuz-2.6.31-14-generic
Found initrd image: /boot/initrd.img-2.6.31-14-generic
Found memtest86+ image: /boot/memtest86+.bin
done
udzura@ubuntu-vaio:~$

Windowsが先に認識されたのが分かります。

Linuxのカーネルのバージョンがたくさん出てきてうっとうしい

上記のとおり,update-grub(8)はインストールされているLinuxのカーネルをすべて引っ張り出してしまいます。なので、アップデートが為されるたびにエントリーが追加されていきます。

でも、正直行って最新のカーネルしか使いませんよね。。

実はupdate-grub(8)は、 /boot/grub/grub.cfg を生成しているだけに過ぎないのです。なので、最悪、直接いじってしまえばいいのです。

ここで要注意なのは,/boot/grub/grub.cfg はrootを含む全ユーザに対してしてリードオンリー属性なので,いったん chmod(1) してあげないと,編集しても保存できなかったりとか何かと都合が悪いという事です。

1
2
3
sudo chmod u+w /boot/grub/grub.cfg
sudo gedit /boot/grub/grub.cfg
sudo chmod u-w /boot/grub/grub.cfg
menuentry "Ubuntu, Linux 2.6.31-14-generic" {
        ......
}

↑のカギカッコの塊を好きなだけ消しちゃいましょう(※ 消しすぎると起動できなくなります!)。

* * *

以上,実施した結果は無保証ですが。。お役に立てば何より。

またRails: たくさんincludeしてるときの検索

以下のようなモデルがあります(適当に考えたんですが、SNS的な何かを想定してみましょう)。

1
2
3
4
5
6
7
8
9
10
11
12
class Post < ActiveRecord::Base
  belongs_to :member
end
 
class Member < ActiveRecord::Base
  belongs_to :job
  has_many :posts
end
 
class Job < ActiveRecord::Base
  has_many :members
end

「日付が2010年2月6日で、かつ書いた人の職業名が”Engineer”の人の日記一覧を抽出したい」んですけど、どうしましょう。なお、date属性はPostクラスに、job_name属性はJobクラスにくっついています。

なので、以下では全然ダメです。

1
2
3
4
5
6
Post.find(:all,
  :conditions => {
    :date => Date.new(2010, 2, 6),
    :job_name => "Engineer"
  },
  :include => {:member => :job})

SQL (0.2ms) SET NAMES 'utf8'
SQL (0.6ms) SET SQL_AUTO_IS_NULL=0
Post Load (0.0ms) Mysql::Error: Unknown column 'posts.job_name' in 'where clause': SELECT * FROM `posts` WHERE (`posts`.`date` = '2010-01-31' AND `posts`.`job_name` = 'Engineer')

Read the rest of this entry »