« 2008年12月 | トップページ | 2009年2月 »

2009年1月の31件の記事

Becky!からMaildir(dovecot)への移行+WebMail

メーラはOSにも依存しないようにEmacs上でWanderlustを使ってるんやけど、以前はBecky!を使っていました。メールの管理にはPOPとIMAPの2種類の方式があるけど、Becky!ではPOPを使ってましたダ。POPだと手軽やけど、複数マシンで同じメールデータを管理する方法がちょっと面倒。例えば、共有フォルダにデータを置いて両方から開くなどしなくちゃならなくて・・・

で、IMAPなわけです。
IMAPではサーバ上にメールデータを置くため複数マシンからアクセスしてもまったく問題なし。ゴミ箱やら送信箱やらも全てサーバ上に保存する事ができるからバックアップシステムもそのまま使えるわけですな。そこでBecky!のデータをIMAPサーバ上に動かそうとしたのだけど、これがちょっとだけ面倒。覚書きしておきます。とは言っても、大分前にやった作業なんで少し忘れてるかも。

我が家の環境は以下の通り。

IMAPサーバ    dovecot
クライアント     wanderlust on Emacs
WebMail          SquirrelMail

それぞれのインストール方法は適当に調べてくださいな。(無責任・・・
移行方法の手順は大体以下の通り。

  1. Becky!のメールデータをmbox形式で保存(「ファイル」-「エクスポート」)
  2. mbox2maildirを使ってデータ変換

mbox2maildirって何もん?って感じですが、これはhttp://www.qmail.org/mbox2maildirにあります。qmailのパッケージの一つですな。見ての通り、mboxからMaildir形式に変換するPerlスクリプトです。実行にはもちろんperlが必要。

さて、まずはmbox形式での保存方法ですが、これは特に問題ないね。Becky!で各フォルダ毎に「エクスポート」からmbox形式での保存を選択しまする。mboxファイルは複数のメールデータを記録できる形式でBecky!ではフォルダ単位でのエクスポートになります。まぁ、この方が後々便利なんでね。全てのフォルダをエクスポートしたら、mbox2maildirを使って変換させます。この時、ちょっとだけ気をつけなければならないのが環境変数の設定。mbox2maildirはコマンドオプションではなくて環境変数からディレクトリ情報等を取得するようになってます。

例えば、Becky!で受信箱をmbox形式でエクスポートすると、そのまま「受信箱」というファイル名ができるのだけど、これをホームディレクトリに置いたとして

export MAIL=/home/****/受信箱
export MAILDIR=/home/****/Maildir
perl mbox2maildir

とする事で、mbox形式のデータを指定したディレクトリのMaildir形式に変換しまする。MAIL環境変数ではmbox形式のファイル名まで指定、MAILDIRはMaildir形式のディレクトリまで指定する必要があるわけです。ちなみにmbox2maildirはそのままでは最後にmbox形式のファイルを削除するようになっているので、それが嫌だったらmbox2maildir最終行のunlink〜を行毎コメントアウトするか削除しちゃいましょう。

これを繰り替えしてサブフォルダも変換していきます。たとえば「送信済み」の場合は、

mkdir /home/****/Maildir/.outbox

として送信済みデータを保存するディレクトリを作成して

export MAIL=/home/****/送信済み
export MAILDIR=/home/****/Maildir/.outbox
perl mbox2maildir

とすればOK!
これを繰り替えして全てのフォルダを変換すれば完了っす。wanderlustで扱うためにはディレクトリ名は必ず"."(ピリオド)から開始する必要があります。でも、SquirrelMailのようなWebMailだけから使うのであれば、好きに変えてもらって良いと思いますダ。試してないけど、日本語も使えるんちゃうかな?wanderlustではダメやけどね。

デザイン変更(再び)

またまたデザイン変更してしまいました。
文字がちょっと読みにくかったもので・・・

【Emacs Tips】 compileコマンドの拡張

Emacsでプログラム書いてると、C-ccで compile できるんやけど、この時に*compilation*っていう特殊バッファが作成されます。でもって、通常は現状のwindowを上下半分に分割して下のwindowに*compilation*バッファが表示されるのやけど、実際コンパイルのログ表示にwindowの半分持ってかれるのはちょっと不便。もっと悪いのは、例えばフレームを左右2分割して2種類のソースファイルを編集している時に compile コマンドを実行すると、compileコマンドを実行したwindowと別のwindowが*compilation*バッファに切り替わってしまうのですわ。どういう事かと言うと...

Screenshotmule1cameracpp

こんな感じ。左のwindowでソースファイルを編集中に compile コマンドを実行すると右のwindowにログが表示されてしまうのですわ。でも右は別のソースとか表示してるからそのまま残しておきたい。あと、この*compilation*バッファを閉じるためには、C-x1とするか C-xo C-xk RET みたいにするしかないっすなぁ。これも不便。
ちゅー事で、*compilation*バッファを現在編集中のソースwindowを分割して表示するようにしたいなぁと思ったわけです。ついでに、*compilation*バッファも簡単に閉じれるようにしたいなぁと。そんなこんなでできたのが以下の関数ですわ。

             ;; 自前compilation関数 (windowを固定化する)
             (defun compilation-open ()
               "*compilation*バッファを表示するwindowをオープンする"
               (interactive)
               (let ((cur-window (selected-window))
                     (com-buffer (get-buffer compilation-buffer-name)))
                 (if (null com-buffer)
                     (setq com-buffer (get-buffer-create compilation-buffer-name)))
                 (let ((com-window (get-buffer-window com-buffer)))
                   (if com-window
                       (select-window com-window)
                     (select-window
                      (split-window (selected-window) (- (window-height) 15) nil)))
                   (switch-to-buffer (get-buffer compilation-buffer-name))
                   (select-window cur-window))))
             (defun compilation-close ()
               "*compilation*バッファを表示しているwindowをクローズする"
               (interactive)
               (let ((com-buffer (get-buffer compilation-buffer-name)))
                 (if com-buffer
                     (let ((com-window (get-buffer-window com-buffer)))
                       (if com-window
                           (delete-window com-window))))))
             (defun my-compile (command &optional comint)
               "*compilation*バッファの表示位置を固定化してcompileコマンドを実行する関数。"
               (interactive
                (list
                 (let ((command (eval compile-command)))
                   (if (or compilation-read-command current-prefix-arg)
                       (read-from-minibuffer "Compile command: "
                                             command nil nil
                                             (if (equal (car compile-history) command)
                                                 '(compile-history . 1)
                                               'compile-history))
                     command))
                 (consp current-prefix-arg)))
               (unless (equal command (eval compile-command))
                 (setq compile-command command))
               (save-some-buffers (not compilation-ask-about-save) nil)
               (setq compilation-directory default-directory)
               (compilation-open)
               (compilation-start command comint))

my-compileはcompile.elのcompileコマンドを持ってきて、compilation-startの前に*compilation*バッファを開くようにしています。ちょっと強引やけどね。ま、突貫工事で書いたコードやし・・・
動作のスクリーンショット貼っておきます。
Screenshotmule1cameracpp1
ほらね、こんな感じで左のwindowの下15行分にコンパイルログが表示されてますだ。もちろん、このwindowは*compilation*バッファやから、C-x`で次のエラー箇所にどんどん飛べますダ。あとこのコンパイルウィンドウもすぐに閉じれるようにcompilation-closeコマンドも用意しました。

設定方法

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; cc-modeに入るときに呼び出す hook の設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(add-hook 'c-mode-common-hook
          '(lambda ()
             ;; 自前compilation関数 (windowを固定化する)
             (defun compilation-open ()
               "*compilation*バッファを表示するwindowをオープンする"
               (interactive)
               (let ((cur-window (selected-window))
                     (com-buffer (get-buffer compilation-buffer-name)))
                 (if (null com-buffer)
                     (setq com-buffer (get-buffer-create compilation-buffer-name)))
                 (let ((com-window (get-buffer-window com-buffer)))
                   (if com-window
                       (select-window com-window)
                     (select-window
                      (split-window (selected-window) (- (window-height) 15) nil)))
                   (switch-to-buffer (get-buffer compilation-buffer-name))
                   (select-window cur-window))))
             (defun compilation-close ()
               "*compilation*バッファを表示しているwindowをクローズする"
               (interactive)
               (let ((com-buffer (get-buffer compilation-buffer-name)))
                 (if com-buffer
                     (let ((com-window (get-buffer-window com-buffer)))
                       (if com-window
                           (delete-window com-window))))))
             (defun my-compile (command &optional comint)
               "*compilation*バッファの表示位置を固定化してcompileコマンドを実行する関数。"
               (interactive
                (list
                 (let ((command (eval compile-command)))
                   (if (or compilation-read-command current-prefix-arg)
                       (read-from-minibuffer "Compile command: "
                                             command nil nil
                                             (if (equal (car compile-history) command)
                                                 '(compile-history . 1)
                                               'compile-history))
                     command))
                 (consp current-prefix-arg)))
               (unless (equal command (eval compile-command))
                 (setq compile-command command))
               (save-some-buffers (not compilation-ask-about-save) nil)
               (setq compilation-directory default-directory)
               (compilation-open)
               (compilation-start command comint))
             ;; cc-modeの自前スタイル設定
             (c-add-style "personal" my-c-style t)
             (setq tab-width 4)
             (setq indent-tabs-mode nil)
             (setq completion-mode t)
             ;; compile-windowの設定
             (setq compilation-buffer-name "*compilation*")
             (setq compilation-scroll-output t)
             (setq compilation-read-command t)
             (setq compilation-ask-about-save nil)
             (setq compilation-window-height 10)
             (setq compile-command "make")
             ;; cc-mode内で定義されるキーバインド
             (define-key c-mode-base-map "\C-c\C-c"   'comment-region)
             (define-key c-mode-base-map "\C-c\C-M-c" 'uncomment-region)
             (define-key c-mode-base-map "\C-ce"      'c-macro-expand)
             (define-key c-mode-base-map "\C-cc"      'my-compile)
             (define-key c-mode-base-map "\C-c\M-c"   'compilation-close)
             (define-key c-mode-base-map "\C-cg"      'gdb)
             (define-key c-mode-base-map "\C-ct"      'toggle-source)
             ;; cc-modeに入る時に自動的にgtags-modeにする
             (gtags-mode t)
             ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

c-mode-common-hookでmy-compileコマンドとcompilation-open/compilation-closeコマンドを定義しています。ローカルマップでお好きにキーアサインしてくださいな。僕の環境では

C-cc (my-compile)
C-cM-c (compilation-close)

としました。これで、いつも通りC-ccでコンパイル、C-cM-cで*compilation*バッファをクローズできます。便利になりましたわ。もうちょっと綺麗に書きたいんやけど、まぁそれはそのうち。

【VirtualBox】 Windows7 beta on VirtualBox 2.1.2 on ubuntu 8.04 LTS

Windows7 β版をVirtualBox 2.1.2上で動かしてみた。
まずはマイクロソフトのβテストサイトからWindows7のDVDイメージをダウンロード。実にサイズが2.5GBもある。VirtualBoxは 2.1.2にアップデートしておかなければならない。2.1.2でWindows7をサポートしたのだよ。GuestAdditionsも2.1.2をインストールしないとおかしな事になるです。

Windows Vistaすらパスしてた僕には中々新鮮ですな。でも、やっぱり見た目に凝ってる面が強くて個人的には余り好きではないかも。まぁ、自宅PCの環境を全部Linuxにしてしまったのはそれが理由だけど・・・

スクリーンショットを貼っときます。
Screenshotwindows7beta_sun_xvm_virt

ガジェットをいくつか表示してみた所。
今の所、同じVirtualBox 2.1.2で動作しているWindows XPの方がサクサク動いて軽いです。これがWindows7による問題なのか、β版だからなのか、VirtualBoxのせいなのかは分かりまへん。

ちなみに一つだけ注意点を。
VirtualBox 2.12にWindows7をインストールした後、GuestAddtionsは必ず「デバイス」メニューから選択して2.1.2のGuestAddtionsをインストールしてください。何を間違えたか、僕はここで予めhomeに置いてあったGuestAddtions 1.5.6のディスクイメージをマウントしてインストールしてしまったのやけど、これが失敗やった。1.5.6のインストーラが「このバージョンには対応してまへん」と言ってきたので気づいてん。でも、なぜか一部インストールされてしまったらしく、2.1.2のGuestAdditionsをインストールしようとしても「Old versionがあるから先にアンインストールせい」と言ってくる。で、言われるままに1.5.6のアンインストールをしようとすると「このバージョンには対応してまへん」って・・・

Windowsではインストーラもアンインストーラも同じ実行ファイルである事が殆どなんやけど、ご丁寧にもアンインストール時にもバージョンチェックされて実行を跳ねてるらしい。ちゅーか、アンインストール位はやって欲しかった。レジストリをいじれば良いのだけど、β版なのとインストールしたばかりやったので、もう一度HDDイメージを消してWindows7を再インストールする羽目になってしもた。

今のところ、それ位かなぁ。ハマりポイントは。
常用はしないけど、もうちょっと使ってみてフィードバック入れてみますだ。

【Emacs】 最終更新日時の自動埋め込み

Emacsでプログラムやドキュメントなんかを書いてると、最終更新日時を記述する事が多いです。でも最終更新日時を自分で手作業で更新するのもあんまり効率良くないし、面倒なわけですな。それにこんな作業を手作業で行うなんてナンセンスやから、自動ですべきやと思うわけですわ。

これもやはりMeadow memoを参考にして以下のように記述しました。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 最終更新日時の自動埋め込み
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 表示形式
(setq time-stamp-start "last updated : ")
;;(setq time-stamp-format "%04y/%02m/%02d-%02H:%02M:%02S")
;; 行端のデリミタ
(setq time-stamp-end "$")
(if (not (memq 'time-stamp write-file-hooks))
    (setq write-file-hooks
          (cons 'time-stamp write-file-hooks)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

これで、テキストファイルの初めの方に

last updated: $

と書いておくだけで、ファイルの保存時に自動的に最終更新日時が埋め込まれます。便利ですなぁ
time-stamp-format の設定を有効にすれば任意の形式で更新日時を埋め込めます。

【Emacs】 GUD on Emacs23 (Debug by gdb)

ちょっと仕事がらみのネタを紹介。
一応ソフト屋さんなんでソフト開発をするんやけど、プログラムを書くのはもちろんEmacsで色々な機能を使って書きます。これで結構手抜きができるんで助かるんやけど問題はデバッグの時やね。Windowsのアプリ開発時はVisutalStudio、Linuxではgdb、組み込みではgdbのリモートデバッグやったりEclipseやったり、専用の開発ツールやったりするわけです。毎回環境が変わるんも不便やし効率悪いし、エディタとデバッガの環境が違うのも使いにくいよなぁ。そういう意味でもEmacsでデバッグができればと思うわけです。

EmacsにはGUDというgdbのフロントエンドがあって、これを使うとgdbのコマンド操作をEmacs上から行う事ができるわけです。特にステップ実行やらスタック情報表示、ウォッチ式の編集とかできるんで結構便利。もちろんベースがgdbなので専用のソフト程は、簡単ではないのやけど、それでも環境が統一できるし最近じゃLinuxでもWindowsでもこの環境でデバッグしとるんですわ。

Screenshotmule1gudmxcoreelf_2 ←デバッグ中の画面はこんな感じ
左上: GUDバッファ、右上: ローカル式表示
中央: ソースコード
左下: コールトレース、右下: ブレークポイント情報

環境としてはその辺のIDE並の充実具合です。
特にステップ実行は秀逸で現在実行行のソースにマークが出るので分かりやすいですなぁ。
Photo ←ステップ実行中のマーカー

さてさてGUDの使い方です。

設定編
GUD自体は標準設定のまま使えるのやけど、上記のような色んな情報を表示するには.emacsに以下の設定を記述します。あと、c-mode-common-hookにGUDを起動するためのキーをローカルマップしておくと便利やね。以下に僕の環境の例をあげておきます。compileやcomment-regionなんかも定義してますだ。

(setq gdb-many-windows t)
(add-hook 'c-mode-common-hook
        '(lambda ()
            ;; 色々な設定
            (define-key c-mode-base-map "\C-c\C-c" 'comment-region)
            (define-key c-mode-base-map "\C-c\M-c" 'uncomment-region)
            (define-key c-mode-base-map "\C-cg"       'gdb)
            (define-key c-mode-base-map "\C-cc"       'make)
            (define-key c-mode-base-map "\C-ce"       'c-macro-expand)
            (define-key c-mode-base-map "\C-ct"        'toggle-source)
            ))

僕の環境では C-cg にgdbを割り当ててます。一応自分のルールではローカルマップキーはC-cをプレフィックスにするようにしとるんですわ。
さて、GUDのmany-windows環境は残念ながらECBと共存できないのでgdb-mode-hookでECBを無効化します。

(add-hook 'gdb-mode-hook
        (lambda ()
            (if ecb-minor-mode
                (ecb-deactivate)
            )))

これでgdb-modeに入る時にECBが有効だったら無効化します。
gdbから通常のcc-modeに戻った時にECBを有効にするにはちょっと面倒なんでやってまへん。というか、このGUDを使うために必要な時だけECBを起動するようにしてたりして・・・

操作編
プログラムを編集しているバッファから
C-c g (gdb)
とするとミニバッファに

Run gdb (like this): gdb --annotate=3 (実行ファイル)

と表示されます。実行ファイルが表示されなかったら自分で入力しましょう。一旦入力した値は記憶してくれるので、次からは C-cg だけで表示されます。(下線がユーザ入力部分)
(gdb-many-windows)がnon-nilの場合、上記のIDEのようなウィンドウ構成に自動的に切り替わります。この時に元のウィンドウ構成を破棄してしまうので、GUDを抜けた時に元に戻したければ予めウィンドウ構成をレジスタに記憶させておくと良いでしょう。僕はいつもレジスタ d に記録してます。

C-x r w (window-configuration-to-register)

この後、レジスタ名(任意のアルファベット1文字)を入力すればそのレジスタに現状のウィンドウ構成が記録されます。後で戻したい時は

C-x r j (jump-to-register)

で先ほどウィンドウ構成を記録したレジスタ名を指定すればバッファ、カーソル位置等を戻してくれます。

さて、GUDの画面に入ったらあとはgdbの使い方と同じやねんけど、まぁ大体以下のような流れかなぁ...。

  1. 任意の位置にブレークポイントを設定
  2. runコマンドで実行
  3. ブレークポイントで停止したら、ステップ実行&ローカル変数値確認
  4. 必要に応じて広域変数をウォッチ式に追加

GUDバッファで使うキー
gdbのコマンドをそのまま打てるけど、emacsユーザならCtrlキーの組み合わせで使いたいっすね。いくつか基本的なものを。

C-c C-n  (next step)  関数内に入らない
C-c C-s  (step)          関数内に入る
C-c C-b                    現在行にブレークポイントを設定
C-c C-d                    現在行のブレークポイントを削除

こんな感じで C-c から始まるキーが定義されています。
あと任意の位置にブレークポイントを設定するにはソースバッファで

C-x C-a C-b
C-x C-[Space]

どちらでも良いです。ちなみにソースバッファでは C-x C-a をプレフィックスとする事でGUDバッファのコマンドと同じものが使えます。つまりソースコードで現在ポインタのある行のブレークポイントを削除するには

C-x C-a C-d

とすれば消せるわけです。
ブレークポイントの削除にはもうひとつ方法があって、右下のブレークポイントバッファで削除したいブレークポイントにポインタを合わせて D(大文字) でも消せます。

これくらいのキーでも、そこそこデバッグできるので便利でしょ〜
特にローカル変数バッファは良くできてて、変数値の自動更新や配列の表示やら構造体のメンバ表示もしてくれるので良いですわ。

我が家ではコンパイラはgcc、エディタはEmacs、デバッガがgdbという事で、このGUDのお陰ですっかりプログラム開発環境が整いました。個人的にはEclipseよりも便利だと思う。まぁ、gdbの良し悪しはあるのやけど・・・

デザイン変更

なんかちょっと、デザイン変更したくなったんで変えてみました。
文字の読みやすさ重視のシンプルなデザインって事で。

しかしまぁ、ココログのデザインテンプレートってメッチャ数ありますなぁ。
どれにするか迷って迷って....時間があっという間に過ぎてしまう。

しばらくこれで行ってみるとしますわ。

【Emacs】 MHC with Wanderlust 2.14.0 with Emacs 23.0 on ubuntu 8.04 LTS

ubuntuのEmacs 23.0環境に移行してめっちゃ快適やねんけど、一つだけ良く使うパッケージがまだインストールできてなかってん。仕事でもスケジュール管理にMHCを使ってたんやけど、ubuntu 8.04 LTSで提供されているmhcのバイナリパッケージはEmacs 22と依存関係があって、emacs-snapshotではそのままインストールできひんのだ・・・

しばらく諦めて様子を見てたのやけど、やっぱり不便なんでソースから入れる事にしました。
この際なんで開発版のスナップショットにしようかと思って(なんせ安定版が2年前のものしかないから・・・)、そこから開始したら色々とでてきたですよ。という事で、これも覚書きしときまする。

ちなみにMHCってのはEmacs上で動作する予定表&ToDoリストです。僕は主に予定表としてしか使っていないけど、会議やら出張やらアポイント、飲み会などなんでも登録してます。大抵の予定はメールで日時が送られてくるんやけど、MHCの利点はそのメールの本文から予定の情報と思われる箇所を探して適当に日付と時間と予定の内容・場所を記録してくれる事なのだなぁ。

MHCの公式サイトはこちら
でも、今回はここに全ての手順を書いてしまおう。情報が古くなる可能性があるので気をつけて。

まず材料から。

  • cvs                最新ソースの取得に必要
  • ruby1.8-dev   mkmfとかrubyの開発用パッケージが必要
  • libpisock-dev  configure.rbで必要

手順は大体以下の通り

  1. cvsとruby1.8-dev、libpisock-devパッケージのインストール
  2. cvsで最新ソース取得
  3. elispバイナリコンパイル
  4. rubyでmakefileの生成・make・インストール
  5. *.elcの移動、*.elのシンボリックリンク、アイコンのコピー
  6. .emacs編集、.scheduleコピー

ふぅ、長そうやな。

cvsとruby1.8-devパッケージインストール
Synapticパッケージ・マネージャで "cvs"と"ruby1.8-dev"、"libpisock-dev"をインストール。ruby1.9を使っている人は "ruby1.9-dev"やね。僕はついでなんで "ruby1.8-elisp" も入れたけど。

cvsで最新ソース取得
公式サイトに手順が書いてあるねんけど、そのままでOKです。anonymousのスペルを間違えて少しはまったけど・・・。適当なworkディレクトリを作っておくと良いです。あとインストール後は、このディレクトリ毎消しちゃっても問題ないです。

$ mkdir ~/cvs
$ cd ~/cvs
$ cvs -d :pserver:anonymous@cvs.quickhack.net:/cvsroot login
$ cvs -d :pserver:anonymous@cvs.quickhack.net:/cvsroot co mhc

elispバイナリコンパイル
.elから.elcを作るわけね。少しでも高速化したいし。

$ cd ~/cvs/mhc/emacs
$ make

rubyでmake.rbの作成・make・インストール
libpisock-devをインストールしていないと、configure.rbでエラーになります。

$ cd ~/cvs/mhc
$ ruby configure.rb
$ ruby make.rb
$ sudo ruby make.rb install

*.elcの移動、*.elのシンボリックリンク、アイコンのコピー
howm1.3.7のインストールの時もやったけど、ubuntuでemacs-snapshotを使ってるため必要な作業ですな。もうちょっと賢いやりかたもあるのだけど、まぁいいや。あと、アイコンはMHC内で予定の種類に応じて表示されるものです。有った方が見た目が良いのでいれてます。文字の桁ずれるけど・・・

$ cd /usr/share/emacs-snapshot/site-lisp
$ sudo mkdir mhc
$ cd mhc
$ sudo mv /usr/share/emacs/site-lisp/mhc/*.elc .
$ sudo ln -s /usr/share/emacs/site-lisp/mhc/*.el .
$ cd ~/cvs/mhc/icons
$ sudo cp *.xpm /usr/share/emacs/23.0.60/etc/images/icons

最後の行はemacs-snapshotのインストールされているディレクトリに合わせて変更してくださいな。

.emacs編集、.scheduleコピー
さて、いよいよ.emacsを編集してMHCが使えるようにしましょうかねぇ。
僕のメーラーはwanderlustなので、wlの設定だけです。MHCは色んなメーラーに適合できるのだけど、他のメーラーでは使った事がなくて・・・。まぁ、ネット上に情報は転がっていますので大丈夫でしょう。

;; MHCをwanderlustで使う
(setq mhc-mailer-package 'wl)
(autoload 'mhc-wl-setup "mhc-wl")
(add-hook 'wl-init-hook 'mhc-wl-setup)
;; *.xpmファイルのインストール先
(setq mhc-icon-path "/usr/share/emacs/23.0.60/etc/images/icons")

$ cp ~/cvs/mhc/samples/DOT.schedule.sample.jp ~/.schedule

アイコンが表示されない場合は*.xpmのインストール先を再チェックしてみてくださいな。それでもダメなら、mhc-icon-setupをmhc-setup-hookにadd-hookすると良いかもしれない。

さて、こんな風にしてインストールしたMHCってどないやねんという方のためにもスクリーンショットを貼っておきます。インストール直後なんで休日しか表示されていないけどね。でも、国民の休日もちゃんと認識するのだよ。最後にコピーした.scheduleのお陰です。単なるテキストファイルなので、自分専用の記念日とかを追加するのも有りやね。そうやって便利にするのがDIY Linuxの勧めですかね。

Screenshotmule1schedule200901

【Emacs】 auto-completeと自動インデント

最近、こちらでauto-complete.elなるものが開発された事を知り早速試してみました。
リンク先のスクリーンショットにもある通り、非常にグラフィカルにVisualStudioのインテリセンスみたいな感じで補完の候補が表示されるので「こりゃ便利かも〜」と思い使ってみると、確かに動作も軽快やし直感的やから使いやすいのだけど、一つだけ問題が...。

文字の入力直後から補完候補を表示してしまうために、cc-modeの自動インデントが効かないみたいなのです。

どういう事かと言うと、例えばクラス定義を書いた時に、クラス名の後(中括弧の後)ではブロックが開くのでtopmost-introのルールが適用されて、以下のように1レベルインデントされるのだけど

class TestClass {
    public

いつもならpublicの後のコロン":"を入力する事で自動的にaccess-labelルールで再インデントされて先頭に戻るわけです。で、結局

class TestClass {
public:

となって、意図通りに表示されます。
でも、auto-completeが有効だとpublicを入力した時点でpublicの補完候補が表示されており、その後の":"を入力すると public: 補完候補表示が非表示されるだけでaccess-labelルールでの再インデントがされないのですわ。もちろん、その状態でもう一度TABを押せば再インデントされるのだけど、そりゃ不便やなぁ。

という事で、残念ながらしばらくcc-modeでは補完候補を表示しないようにしておく事にしました。auto-complete.elの中を見て簡単に修正できそうならやってみるのだけど・・・。上記、作者様のサイトでも、文字入力と同時に補完候補が表示されてしまう事について指摘がされてて、将来的にはキーバインドを見直す可能性もあるみたい。補完候補の表示が自動でなければ、この問題はおきないと思うのやけどね。

もうちょっと調べてみよう。

【Emacs】 howm 1.3.2 with Emacs 23.0でコメントのハイライトが無効になる

(2009/01/08の投稿)

通常はちゃんとfont-lockが有効になってて、Emacs LispやらCのソースやらアセンブラとかのソースを見ると思った通りに色付けされているのだけど、一旦"CTRL-, ,"でhowmを起動すると大部分のフォント色設定が外れてしまう う〜、こりゃ不便だ。

Emacs 23でhowm 1.3.2を使った時に各モードのコメント行のハイライトが無効になってしまう問題があって悩んでたんやけど解決しました。どうやらhowm 1.3.2の問題やったみたいで、1.3.6以降なら正常に動作するみたい。やっぱり最新のhowm 1.3.7に乗り換えました。これで万事快調

残念ながらubuntu 8.04 LTSではhowm 1.3.2パッケージしか用意されていないので、手動でインストールしなくちゃならんのです。という事で、覚書きしておこうっと。

howm 1.3.7 with Emacs 23.0 on ubuntu 8.04 LTS インストール方法

  1. Synapticパッケージマネージャでhowm 1.3.2をアンインストール
  2. こちらからhowm 1.3.7をダウンロード
  3. howmをバイナリコンパイル
  4. emacs-snapshotのsite-lispに*.elcを移動&.elをシンボリックリンクする

howmのバイナリコンパイル方法

$ tar -zxvf howm-1.3.7.tar.gz
$ cd howm-1.3.7
$ ./configure
$ make
$ sudo make install

ubuntu 8.04 LTSのEmacs 23.0は、実際には/usr/share/emacs-snapshotにインストールされているので、*.elcファイルはそちらに存在していないと読み込めないです。他のelispパッケージは*.elを/usr/share/emacs/site-lispに保存して、emacs-snapshot/site-lispではシンボリックリンクになっていました。*.elcはsnapshot側に実体を持つようです。バージョンに依存しないソースはemacs側に置いておいて置くという事ですなぁ。

*.elcのインストール

$ cd /usr/share/emacs-snapshot/site-lisp
$ sudo mkdir howm
$ sudo mv /usr/share/emacs/site-lisp/howm/*.elc .
$ sudo ln -s /usr/share/emacs/site-lisp/* .

これで、普通にemacs起動すれば(既にhowmの設定がされていれば)正常に動作しましたです。
ふぅ、良かった良かった。

【Linux】 findコマンド

プログラム作ったり、写真を管理したりすると特定のディレクトリ以下について大量のファイル操作する事は結構あるわけです。
例えば・・・

  • 拡張子がbakのファイルを全て削除する
  • ファイル名にtestを含むファイルの数を数える
  • 拡張子jpgを全てpngに変更する(そんな事ないと思うけど
  • ディレクトリの一覧を表示する
  • .svnディレクトリ以外のファイルについて文字コードをUTF-8に変更する

等など。
実は、これ全部 find とその他のコマンドの組み合わせで実現できます。findは特定ディレクトリ以下の条件に当てはまるファイルやディレクトリを検索するコマンドです。めっちゃ便利やから良く使うねんけど。

基本的な使い方

find ディレクトリ
    指定ディレクトリ以下の全てのファイルとディレクトリを表示する
find ディレクトリ -type タイプ
    指定ディレクトリ以下の全てのタイプで指定したファイルorディレクトリを表示する
find ディレクトリ -name 名前
    指定ディレクトリ以下の全ての名前のファイルorディレクトリを表示する
find ディレクトリ -exec コマンド {} \;
    指定ディレクトリ以下の全てのファイルを引数にしてコマンドを実行する

凝った使い方

find . -name \.svn -type d -prune -or -type f -print
    カレントディレクトリ以下の.svnディレクトリ以外のディレクトリに含まれる全ファイルを表示する
find . -name \.svn -type d -exec rm -Rf {} \;
    カレントディレクトリ以下の全ての.svnディレクトリを削除する
    SubversionでチェックアウトしたディレクトリからSubversionの管理情報を削除する時に便利

findと組み合わせると便利なコマンド

grep
    ファイル内の文字列探索(-rコマンドでもできるけど、findの方が高度な検索が可能)
wc
    ファイルの情報を表示(行数とか単語数とか)
file
    ファイルの情報(キャラクタコードとか)を表示
mv/cp/rm
    ファイルのコピーやら移動やら削除やら
nkf
    ファイルの文字コードを変更
perl/sed
    ファイルの内容置き換え

かなり応用可能なコマンドですなぁ。

【Emacs】 タブ・全角スペースのハイライト表示

プログラム作ってると全角スペースが入っていると不都合があったりするので、それを目立たせる設定です。これもMeadow memoで教わったものやったような。個人的にはタブも余り好きではないので、一緒に目立たせています。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; タブ、全角スペースを表示する
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defface my-face-r-1 '((t (:background "gray15"))) nil)
(defface my-face-b-1 '((t (:background "gray"))) nil)
(defface my-face-b-2 '((t (:background "gray26"))) nil)
(defface my-face-u-1 '((t (:foreground "red" :underline t))) nil)
(defvar my-face-r-1 'my-face-r-1)
(defvar my-face-b-1 'my-face-b-1)
(defvar my-face-b-2 'my-face-b-2)
(defvar my-face-u-1 'my-face-u-1)
(defadvice font-lock-mode (before my-font-lock-mode())
  (font-lock-add-keywords
   major-mode
   '(
     ("\t" 0 my-face-b-2 append)
     (" " 0 my-face-b-2 append)
     ("[ \t]+$" 0 my-face-u-1 append)
     (" [\r]*\n" 0 my-face-r-1 append)
     )))
(ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode)
(ad-activate 'font-lock-mode)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

やりかたはカーソル行のハイライトと同じやね。カスタムフェイスを定義して、それを各文字に設定してるみたいです。

【Emacs】 カーソル行のハイライト

どのエディタをつかっても現在の編集行(カーソル行)を目立たした方が使いやすいと思ってまする。Emacsも例外ではないのだけど、単純な下線だけだとちょっとね・・・。という事で、編集行をハイライトする設定です。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 編集行を目立たせる(現在行をハイライト表示する)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defface hlline-face
  '((((class color)
      (background dark))
     (:background "dark slate gray"))
    (((class color)
      (background light))
     (:background "ForestGreen"))
    (t
     ()))
  "*Face used by hl-line.")
(setq hl-line-face 'hlline-face)
;; (setq hl-line-face 'underline) ; 下線
(global-hl-line-mode)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

hiline-faceというカスタムフェイスを定義して、それをhl-line-faceに設定すればOKです。カスタムフェイスの代わりにunderlineを指定すれば下線だけの強調表示になります。色は好みのものを設定してくださいな。

【Emacs】 改行時のインデント

ごく基本的な事なんだけど覚書き。
Emacsでmajor-modeがcc-modeやtext-mode等になっている時リターンキーを押して改行する際に自動的にインデントをしてもらえないのが困る。そんな時は以下の行を追加する。リターンキーはCtrl-mなので、これで良いはず。

(global-set-key "\C-m" 'newline-and-indent)

ちなみにdefaultではC-mはnewlineになっていて、newlineだとインデントを自動では行ってくれない。

【Emacs】 テーブル編集

Emacsの編集機能はめっちゃ強力です。
プログラムを書いてるとコメントとかに表組みを書きたくなったりします。ステートマシンとか真理値表とか書きたいですからなぁ。そんな時にアスキーアートを使って表を作るんやけど、いちいちキーボードから入力してたら埒があかないです。そんな時に使える機能の紹介。

任意のバッファの任意の位置で以下のコマンドを実行します。

M-x table-insert

そうすると、ミニバッファに

Number of columns (default 3):
Number of rows (default 3):
Cell width(s) (default 5):
Cell height(s) (default 1):

が順番に聞かれます。それぞれの意味は見ての通り

  • 横方向のセル数
  • 縦方向のセル数
  • セルの横幅
  • セルの縦幅

全てのパラメータを入力するとカーソル位置に表が表示されます。通常は表の中に文章を書くと表を壊してしまうのですけど、テーブル編集モードでは自動的にテーブルの枠を拡張してくれます。おかげで表を壊す心配なく表がかけるので、めっちゃ便利。
記入が終わったら、そのままファイル保存しても良いのだけどテーブル編集モードを解除するために

M-x table-unrecognize-table

を実行しましょう。これで、カーソル位置のテーブルがテーブル編集モードから抜け出ます。再度テーブル編集モードに入る時はテーブルの位置にカーソルをもっていって、

M-x table-recognize-table

でOKです。この仕組みをつかうと、一つのテキストファイルの中に複数のテーブルがあってもうまく動作します。良くできてるよなぁ・・・(しみじみ)

さて、あとは色々とコマンドを紹介しておきますかな。

C-> (table-widen-cell)
    カーソル位置のセルを横拡張
C-< (table-shorten-cell)
    カーソル位置のセルを横収縮
C-: (table-justify)
    セル中の文字列の位置を操作(Left/Center/Right)
    縦方向・桁方向の両方が可能
table-split-cell
    セルの分割
C-- (table-split-cell-vertically)
    セルの横分割
C-| (table-split-cell-horizontally)
    セルの縦分割
C-* (table-span-cell)
    セルの結合

これ位あれば十分やね。セルの分割・結合ができるからエクセルよりも簡単に表が作れる気がする。

Emacsの世界も奥が深いですなぁ。

【Emacs】 カーソル位置の単語や文章をバッファに格納

Emacsで便利に良く使う機能の紹介。
文字列をコピーする時は・・・

  1. Ctrl+Spaceでリージョンの先頭を指定
  2. Ctrl+F/B/P/Nでカーソル移動(別にページジャンプや段落ジャンプでも良いけど...
  3. ESC+wでリージョンをkill-ringにコピー
  4. C-yで貼り付け

という手間になります。まぁ、これはこれで慣れていれば問題ないし、そもそもカーソルの移動系が強烈に強力なEmacsでは特に不自由なかったりもする。(Emacsユーザが時に何やっているのか付いていけないと言われる原因がこのカーソル移動にあると思う・・・)

でも、カーソルのある場所の単語や文字列を簡単にリージョン設定できたらメッチャ便利やなぁと思っておったのです。そこで、current-string-to.elのご紹介。作者さんに感謝感謝。
後は.emacsにこんな感じで設定します。2行目は日本語対応のためのようです。

(require 'current-string-to)
(setq current-string-to-delimiter-regexp current-string-to-delimiter-regexp-jp)

これを導入すると、

Ctrl+Space,Ctrl+Space                ・・・ カーソル位置の単語をリージョンに設定
Ctrl+Space,Ctrl+Space,Ctrl+Space ・・・ カーソルのある行をリージョンに設定

という事ができます。後はお好きにkill-ringにコピーするなり、killするなり・・・。

中々便利ですなぁ。

【VirtualBox】 Windows XP on VirtualBox on ubuntu with USB2.0

1/7にWindows XP on VirtualBox 2.0 on ubuntu 8.04 LTS (Hardy)の事を書いたのだけど、肝心のUSB2.0を有効にする方法を書き忘れてました・・・ ちょっとだけ面倒なんよねぇ。

  1. USBマウント用のグループ作成して自分を参加させる
  2. /etc/fstabで/proc/bus/usbをautoマウントする
  3. VirtualBoxでのフィルタ設定

要はホスト側でusb busを直接マウントして、仮想マシンにブリッジしてあげるわけですなぁ。ネットワークと同じようなものやね。

 
VirtualBox with USB2.0の設定

Screenshot
「システム」-「システム管理」-「ユーザとグループ」を起動
ロックの解除をしておく。
んで、「グループの管理」をクリック

Photo
「グループの追加」をクリック




Screenshot_2 グループIDは自動的に空いている番号が割り当てられるので、そのままで良いです。
ここではこの番号を覚えておきましょう。グループ名を適当に入力します。例えば「usbusers」とでもしておきましょうか。最後にグループのメンバから自分のユーザIDにチェックを入れて、このグループに参加するように設定します。

これで、USBを使うためのユーザを作って自分のアカウントを参加させました。
次に /etc/fstab を修正します。

sudo gedit /etc/fstab

ファイルの末尾に以下の行を追加

none /proc/bus/usb usbfs auto,devgid=(上記で作成したグループのID),devmode=664 0 0

この設定を有効にするために、ここで一旦再起動でもしましょうか。
次にVirtualBoxの設定画面を開きます。

Screenshotsun_xvm_virtualbox 多分、最初はUSBの所が「無効」になっていると思うので、USBをクリックして設定画面を開きます。で、「USBコントローラを有効化」にチェックを入れます。ついでに「USB 2.0 (ECHI)コントローラを有効化」にもチェックいれます。これでUSB 2.0をサポートできるはず。もし、High Speedデバイスで問題が起きるようであれば、このチェックボックスを外してUSB2.0を諦めましょう。

さて、下の「USBデバイスフィルタ」ですが、ここは右の「+」がついたUSBのアイコンボタンを押すことで現在接続しているUSBデバイスから、マウント時に自動的に仮想OSに見せるデバイスを指定できます。良く使うやつは登録しておくと手間がかからなくて楽っすね。

ちなみに、ここに何も登録していない時は仮想OS起動後、VirtualBox Windowの「デバイス」メニューもしくは、右下ステータスバーのUSBアイコンを右クリックする事でマウントするデバイスを選択できます。

ふぅ、駆け足やったけど、これで全部かなぁ

【Emacs】 White Spaceの削除

Emacsでプログラムを書いている身としては、この関数がないとやっていかれません。
特に、Visual Studioとか会社で使ってる統合開発環境とかは平気でWhite Space入れまくるので、見た目にも悪いし、ファイルサイズも大きくなるしで無駄この上ない。なんでもエコのこの時代やからこそ、こんな所にもこだわりたい(と、勝手にこじつけしてみる・・・

確か元ネタは Meadow Memo やったと思いまする。元ネタの作者様に感謝しつつ、無断ですが転載させて頂きます。

.emacsに、下記関数を記述して ESC-x trim-buffer でバッファ内の全テキストについてtrim処理を行います。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; White spaceを削除する関数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun trim-buffer ()
  "Delete excess white space."
  (interactive)
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward "[ \t]+$" nil t)
      (replace-match "" nil nil))
    (goto-char (point-max))
    (delete-blank-lines)
    (mark-whole-buffer)
    (untabify (region-beginning) (region-end))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

やっている事は、空白とタブが行末まで続く場合にこれを削除するという動作です。
ちなみに、僕はインデントに空白を使う派なので、untabilfyも入れています。インデントのtabを消したくなければ、最後のuntabify節は不要ですな。

「エコと叫ぶのであればインデントにタブを使え」というお叱りが飛んで来そうですねぇ。でも、これだけは譲れない。ソースの美しさがエディタによって崩されるようなコーディングは嫌じゃぁ〜

【ubuntu】 Picasa3 on ubuntu 8.04 LTS

4〜5年前に一眼レフデジカメ(EOS Kiss Digital N)を買ってから、かなり頻繁に写真を撮るようになって、どんどん写真が溜まってってしまいました。まぁ、RAIDのストレージサーバに置いて、DLNA経由で自宅内のどこからでも見れるようにしているんやけど、それでも管理という面では結構大変。ホンマは一切手間かけずに管理したいわけですよ。

Canon デジタル一眼レフカメラ EOS Kiss X2 レンズキット KISSX2-LKIT CE Canon デジタル一眼レフカメラ EOS Kiss X2 レンズキット KISSX2-LKIT

販売元:キヤノン
発売日:2008/03/21
Amazon.co.jpで詳細を確認する

希望としては...

  1. デジカメのコンパクトフラッシュをPCに差すと自動的にファイルコピーされる
  2. ファイルは予め決められた場所に日付順に管理される
  3. 高速ビュワーで一覧を見る事ができる

これを満たしたいわけですな。
Windowsの時はEOSに付属のソフトで管理してたんやけど、ちょっと動作が遅くて(特に一覧表示)余り使い勝手も良くなった。上のリストで言うと1と2は一応満たすのやけど、それ意外がイマイチ。

その後、GoogleからPicasaがリリースされて、これを試したら動作は機敏やし使いやすいで結構気に入ったのさぁ。ubuntuに移行した今でも、やっぱりPicasaが使いたいなぁなんて思ってたので、最近Picasa3もリリースされた事やし、ちょっとやってみました。

Picasa3をubuntu 8.04 LTS (Hardy)にインストール
全然、まったく、難しい事は無いです。Googleの日本サイトではWindows版しかないように見えるのですけど、実はLinux版もベータ版として提供されていますです。しかもubuntuのパッケージ情報付き。こりゃ使うしかないですな。

  1. http://picasa.google.co.jp/linux/download.html#picasa30を開く
  2. Instructionsの中に「deb, for Debian/Ubuntu i386:」とあるので、この.debファイルをダウンロード
  3. パッケージマネージャで開いてインストール。

AMDな方は、amd64:とある方をダウンロードしてくださいな。
PicasaはJPEG等の高速デコードのためにCPUのSIMD演算等を使いますんで、プロセッサへの依存性がありまする。メッチャ、チューニングしてあるソフトやから、おそらくキャッシュシステムの特性とかまで考慮して実装されているのではないかと...。お〜、そうだ。今度、自前のJPEGデコーダの情報を公開しましょうか。まだ、あんまり速くできていないんやけどね。

ubuntuでのPicasa3は中々良いです。というか、Picasa3自体が凄く良い
動作が軽快やし、デジカメからの取り込みも可能。上に書いた目的を全て満たしてくれるソフトなんですなぁ。

しか〜し、問題が1点。
なんか日本語が文字化けします。
Picasa Font Settingsっちゅーソフトが付いていて、それで日本語フォントを選んでもPicasa Font Settings自体の文字化けは直らんのよねぇ。とはいえ、Picasa内では日本語のフォルダも一応表示できているので実用上は大きな問題はないか・・・

と自分に言い聞かせてそのまま使う事にしました。
↓こんな感じっす。
Screenshotpicasa_3

ちなみに、Picasaが探索するフォルダを指定するのは Tools - Folder Manager を開いて
Screenshotfolder_manager 任意のフォルダを
Scan Once ・・・ 一度だけ
Remove from Picasa ・・・ Picasaで表示しなくする(ファイルは残る)
Scan Always ・・・ 常に探索する
から選べばOKです。

よしよし、これで大分快適になった。
後は、CDのリッピングをできるようにしておこう。
う〜、その前に色々プログラムを作らなくちゃ。
まずはWebカメラを認識させなくちゃなぁ・・・

【ubuntu】 ubuntu kernel-2.26.24-23 その後

2009/01/09に投稿した件

ひとまずアップデートしました。
結果は再起動後に。

やっぱりトラブりました。

kernel 2.6.24-23で起動するとVirtualBoxが起動しない。

Screenshotvirtualbox_error_in_supli vboxdrvが起動していないって怒られた。

あれ〜っと思って、sysv-rc-confでチェック。

sudo sysv-rc-conf

Screenshotkankanpc ちゃんと起動設定されている...

んじゃ、手動での起動を試みるも...

$ sudo /etc/init.d/vboxdrv start

* Starting VirtualkBox kernel module

* No suitable module for running kernel found

あぅ host OSのkernelバージョンに対応するkernel moduleがないって。

「ん〜、そうやろなぁ。アップデート直後でmoduleが含まれているはずないわなぁ」

仕方がないので、再度VirtualBoxのパッケージをチェック。

Screenshot_virtualbox21ん〜...

ん〜〜...

ん〜〜〜...

・・・やっぱり無いです。kernel 2.26.24-23のmoduleが。

という事で、kernel 2.6.24-22に戻すことにしました。

sudo gedit /boot/grub/menu.lst

として、kernel 2.6.24-23-genericと(recovery mode)の記述(計8行かな?)をコメントアウト

(ちょっとお茶でいっぷく中)

ふと・・・最初のメッセージを良く見てみた。

/etc/init.d/vboxdrv setupをせい!

と書いてある。実行してみた。

$ sudo /etc/init.d/vboxdrv setup

* Recompiling VirtualBox kernel module

お・・・

無事起動しました。

つまりkernelのマイナーバージョンが変更された時は、対応するVirtualBoxのkernel moduleを再生成すれば良いのですな。解決しました。

その他のアップデートはそのままでも問題なさそう。

【Emacs】 細かいの諸々

自分の".emacs"からの抜粋。小ネタ集やね。

キー操作関連

;; CTRL-kで改行コードも含めて行を削除する。
(setq kill-whole-line t)

;; regionを[BS]で一括削除
(delete-selection-mode t)

挙動設定

;; ビープ音の代わりにwindowをブリンクさせる
(setq visible-bell t)

;; search時に大文字小文字を区別しない
(setq case-fold-search nil)

;; ファイル末尾に必ず空行があるようにする。
(setq require-final-newline t)

;; ファイル末尾でCTRL-nで新しい行を作成しない
(setq next-line-add-newlines nil)

タブ関連

;; タブ幅の設定
(setq tab-width 4)

;; タブ幅の倍数を指定する
(setq tab-stop-list
    '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60))

バックアップファイル関連

;; バックアップファイルを作成する
(setq make-backup-files t)

;; バックアップファイルの保存場所を指定する
(setq backup-directory-alist
    (cons (cons "\\.*$" (expand-file-name "~/.backup"))
             backup-directory-alist))

;; バージョンコントロールする
(setq version-control t)

;; 新しいものをいくつ残すか?
(setq kept-new-versions 2)

;; 古いものをいくつ残すか?
(setq kept-old-versions 2)

;; 古いものを削除する時に問い合わせない
(setq delete-old-versions t)

【ubuntu】 ubuntu 8.04 LTS システムアップデート

なんか今日デスクトップを立ち上げたら、システムアップデートの通知が出てましたよ。つい先日もopensslとかアップデートしたばかりなんやけど、今回は何かな〜って思ったら...

27個のアップデートがインストールされます

・・・
27個って・・・Windowsのパッチより多いっすねぇ。
と思いながら中身をちぇっく。

Screenshot2ふむふむ、セキュリティパッチが色々ありますな。

あれま、推奨アップデートが随分とたくさん。

お、kernel 2.6.24-23-genericがリリースされたのね。

あ、nvidia-xglまでアップデートしとる。

ひとまずアップデートしました。
結果は再起動後に。

【Emacs】 バッファ移動

Emacsでのバッファ移動は通常

CTRL-x o  (other-window)

ですけど、これはバッファを古い方(分割元)から順に移動していくコマンドですね。バッファ分割が2つ位だとトグル動作になるので問題ないのだけど、僕の使い方みたいに細かくバッファを切ってると一つ前のバッファに行くのに一周してこなくちゃならなくなって不便なのだ。
そこで愛用しているのが

Shift + ↓ or → or ← or ↑

でバッファ移動する方法。これなら上下左右、どこでも移動できるのでめっちゃ便利。感覚的だしね。
設定方法も簡単で、",emacs"の任意の場所に

(setq windmove-wrap-around t)
(windmove-default-keybindings)

って書くだけっす。
お試しあれ。

【Emacs】 Emacs 23でhowm 1.3.2を使った時のfont-lock問題

Emacs 23.0 on ubuntuを使っててちょっと悩んでいる問題が...。
通常はちゃんとfont-lockが有効になってて、Emacs LispやらCのソースやらアセンブラとかのソースを見ると思った通りに色付けされているのだけど、一旦"CTRL-, ,"でhowmを起動すると大部分のフォント色設定が外れてしまう う〜、こりゃ不便だ。

color-themeを使ってカスタムのテーマを読み込んでいるのだけど、howmを起動するとどうやらfont-lockの設定を変えてしまうみたいですなぁ。でも、Emacs 22.2 on Windows XP with howm 1.3.6だと問題ないのですわ。う〜む。

ひとまずhowmの最新がリリースされているんで、1.3.7にしてみるかなぁ。
ちょっと中を見てみた感じでは、おそらくcheat-font-lockが設定を上書きしているのではないかと思ったりするのだが。やっぱ、ちゃんとデバッグしなくちゃダメやなぁ。

さすがに色が付かないのは不便じゃ...

(2009/01/19追記)

howm 1.3.7にアップデートする事で解決しました。解決編はこちら

【Emacs】 Emacs 23.0 on ubuntu with お好きなフォント

ubuntu 8.04 LTSのSynapticパッケージ・マネージャを見ると、Emacs 21とEmacs 22のパッケージが既に用意されていました。ビックリです。だって、昔はEmacsをインストールするために、gccをビルドする必要があって、そのためにvi使って...って感じだったから。
いやぁ、確実に世の中は恵まれた環境になっているのですね。そういう事をしなくて済むという事はそういう事を知らなくて済むという事で、最近の環境って人を打たれ弱くしているような気がしてならない...そうならないように「日々此精進」ですわ。

話が反れてしまった。
えーと、ubuntuに移行した時にもちろんEmacsをインストールしようとしたのだけど、Emacs 22を最初使ってたわけです。でも、なんかフォントが綺麗くない(変な言い方やなぁ)どうやらアンチエイリアシングがかかっていないみたいなんですわ。調べてみると、Emacs 23だったら綺麗なフォントで見れるそうな。でもパッケージがにゃい...

実は、ubuntu 8.04 LTSだと emacs-snapshot というパッケージがあって、これの実態が Emacs 23 らしい。開発中のバージョンを誰かがパッケージ化してくれてるそうな。ありがたやありがたや。もちろん、安定版ではないので動作については使う側が責任を追う必要があります。変な挙動したり、トラブルなんかも自分で対処する事が前提です。まぁ、さすがに枯れてるアプリだし、結構みんな使ってるみたいで得に大きな問題はないですけどね。

さて、emacs-snapshotをインストールした後、フォント設定をどうしようかと思ったわけです。IPAモナーもなぁ(シャレやないで...さむっ)と思ったし、東風フォントはいまいち、東雲はビットマップフォントやし、果てはWindowsからMSゴシックやメイリオを持ってきてってしてみてもイマイチ気に入らんかった。色々試した結果、結局VLフォントに落ち着きました。MS UI Gothicも割と良い感じだったので、結局以下のような設定になりましたとさ。

(cond (window-system
       (set-default-font "MS UI Gothic-10")
       (set-fontset-font (frame-parameter nil 'font)
                         'japanese-jisx0208
                         '("VL ゴシック" . "unicode-bmp")
                         )))

これでdefaultフォントをMS UI Gothicの10ptに、日本語フォントをVLゴシックにできました。アンチエイリアシングが効いててメールとか、かなり読みやすくなりましよ。人によってはなんかボケた感じがするって人もいるでしょうね。ソースコードとかだともっとクッキリとした文字が良いなぁって思う時がありまする。そんな時はフォントを切り替えればええねん。でもまぁ、結局上の設定で慣れたけどね。

なんでubuntuでMS UI Gothicが使えるの?って思った方へ、TrueTypeフォントのubuntuへの導入方法をお教えしましょう。フォントとは言っても単なるファイルです。TrueTypeフォントの場合はttfやttcの拡張子を持つファイルなんだけど、Windowsではちょっと見つかりにくい。作業自体は簡単なんで、以下のようにしてみてくださいな。

  1. 「スタート」-「設定」-「コントロールパネル」-「フォント」を開く
  2. フォントの一覧からTrueTypeフォントを選択
  3. デスクトップにでもドラッグ&ドロップ(これでフォントファイルがコピーされる)
  4. ubuntuで、$HOME/.fontsディレクトリが無ければディレクトリ作成
  5. $HOME/.fontsに3でコピーしたファイルをコピーする。

MS UI Gothicは"msgoth04.ttc"というファイル名です。MS ゴシックとか使いたければ"msgoth04.ttc"をコピーしてくださいな。メイリオは"meiryo.ttc"かな?ちなみにexplorerで探す場合は

C:\WINDOWS\Fonts

にフォントファイルがあります。
ちなみに MS UI Gothic は言わずもがなマイクロソフトのフォントです。こうやってubuntuで使う事は権利的にもグレーな気がします。当方は一切責任持てませぬので、ご了承を。

↓色んなフォントを入れるとこんな感じ
Screenshotfonts

【Emacs】 個人的なEmacs歴史

使い慣れたソフトって色々ありますけど、ぜ〜ったいこれだけは外せないってソフトを1本だけ選ぶとしたら、やっぱりEmacsかな?と思います。Emacsはもはやウィンドウマネージャのような環境と言っても良い位拡張性のある高機能なソフトですからね。Emacs Lispでプログラミングすれば機能拡張も思いのままやし。
でも、Emacsも元は単なるエディタだったはず。いや、今でも確かにエディタなのですが、余りの機能拡張度合いに忘れそうな勢いですなぁ。僕がEmacsでしてる事の一例を挙げてみると...

  • テキスト編集(文章書いたり)
  • プログラミング(プログラム書いたり。ECB使ってたりする...)
  • コンパイル(もち、CTRL-C Cですな)
  • デバッグ(gdbをEmacsから使うとライン単位のステップ実行も余裕)
  • バイナリエディタ(意外と使うんですなぁ、まぁもうちょっと便利なフリーウェアもあるけど)
  • メール(WanderlustでIMAP使っとります。メールの実態はサーバ上。無いと生きていけません)
  • ブログ(風?howmで日記書いとります。ToDoも書いとります。無いと生きていけません)
  • 画像ビュワー(Meadow時代は散々お世話になりました。Emacsではあんまり使ってない)
  • シェル(ずっと、eshellですな。ま、普通のターミナルの方が便利な事は多いけど)
  • 辞書(sdicとsaryと英辞郎の組み合わせは無敵です)

なんかもっとあるような気もするけど、少なくともこれくらいのアプリを一手に引き受けてるEmacsは凄いと思う ただ単にテキスト書くって言っても、インクリメンタルサーチはできるし、正規表現を使っての検索や置き換えとかもできる。果ては表の編集(スプレッドシートみたいな感じ)や当然の矩形編集、まぁ毎日毎日お世話になってますよ...。

Screenshotmule1emacsmiscel
そんな僕のEmacsはこんな感じ

職業柄プログラムを書く事が多いので、ECBが有効になっていて細かいバッファを複数開いてる状態。この状態で、SHIFT+カーソルでバッファ間を行ったり来たりしてます。



こんなEmacsだけど派生種類は色々あって、もちろん僕のEmacs遍歴(もう15年位かなぁ?)も紆余曲折なのです。最初に触ったのは大学の時に情報センターのUNIXに入ってたNEmacsだったと思う。日本語を使えるEmacsという事でネーミングされたと聞いたけど、この頃はこれしかスクリーンエディタがないからという理由で使ってたなぁ。

あ、余談だけどMS-DOS時代はEDLINでしたよ。やっぱり。 EDLINでプログラム書くのはかなりキツいね。というか、もう今じゃ無理。

NEmacsはUNIXで使ってたけど、自宅では普通にMS-DOSからWindows3.x、Windows95と遷移しました。Windows95時代だったかなぁ?Mule for Win32を使ってました。その頃はまだEmacsが日本語に対応していなかったという事で多言語化したMuleができたわけですな。でもMuleってかな〜り重かった..その後は流れとともにMeadow1.xに移行。Meadowはグラフィックも標準サポートしてたし、そもそも日本語対応のために派生したものだから言語サポートもばっちり。という事でMeadowはその後2.x、3.xとず〜っと使ってたのです。

でもね、Meadowも2.xはかな〜り重かったし、3.xでも多少改善したとは言えやっぱり重かった。フォントのレンダリング回りだと思うんやけど、僕のマシンではちょっとコードサイズの大きいソースファイルを開くとフリーズ状態になったりしてしまって、困ったものだったのです。

そうこうしている内に、本家Emacsが22.xになって日本語にもばっちり対応して(ちゅーか、多言語対応したのですな)UTF-xもサポートできるようになったしで、本家に戻る事にしたのですよ。まぁ、ちょうどその頃メインマシンをubuntuにしたものだから、必然でもあるのだけどね。

そんなこんなのEmacs遍歴公開でした。

あ、他にもXEmacsとかあったけど、実は僕XEmacsは殆ど使った事がない。
なんか苦手って言うか「Emacsにメニューやツールバーなんてあってはいけない」というタイプだもんで...

【VirtualBox】 Windows XP on VirtualBox on ubuntu

家のPC環境をLinuxに移行して快適PC生活なのだけど、やはり世の中はWindowsでないと成り立たない物もあるわけです。Windows版しかないアプリとか著作権保護されたコンテンツとか...。という事で仕方ないのでubuntu上にVirtualBoxをインストールしてそれでWindows XPを動かす事にしてみたわけです。
今のところWindowsでないと困る事は以下の事位かな。

  • GyaoとかDRM対応のストリーミングサイト
  • SDオーディオ(Panasonic SD-Jukebox)
  • IEでないと見れないサイト
  • PaSoRi(Edyリーダ)
  • Microsoft Money
  • TANITA InnerScan

DRM対応のストリーミングはどうしようもないですね。そもそもWindows Media Playerを前提に作られているからこればっかしは仕方がない。SDオーディオはCPRMなんで、これもやっぱり仕方がない。IEでしか見れないサイトはそんなん作るのが悪いんだが、まぁテストとか大変やろうから仕方がない。とは言え、Firefox on ubuntuでも十分なんで、それほど不満はないかな。Microsoft MoneyとTANITA InnerScanはWindows版しかないんで、これも仕方がない。当たり前だけど...

ubuntu 8.04 LTSにはVirtualBox 1.5.6 OSEのパッケージが提供されていて、Synapticパッケージ・マネージャからインストールできるのだけど、このOSE版はUSBに対応していないのです。USBに対応しているのは2.xのOSE(Open Source Edition)でないバージョンしかないので、これをインストールする必要があります。

VirtualBox 2.1 for ubuntu 8.04 LTS (Hardy)のインストール方法
(参考サイト:http://www.howtoforge.com/installing-virtualbox-2.0.0-on-ubuntu-8.04-desktop

http://www.virtualbox.org/wiki/Linux_Downloads

上記サイトでubuntu 8.04 LTS (Hardy Heron)を選択。
使用しているCPUによって正しいパッケージを選んでください。
ウチはIntel Core2 E6600なので、i386版をインストールしました。
Firefoxでアクセスすれば自動的にubuntuのインストール情報(.deb)を引っ張ってくれるので、そのまま進めればすんなりできるはず。

後は仮想マシンの設定をしていつも通りWindows XPのインストールディスクをセットして起動すればOKなんだけど、ちょっとだけコツが必要かも。
まず仮想マシンの設定は以下のような感じにしました。

OSタイプ                     Windows XP
メインメモリ                  512MB
ビデオメモリ                 32MB
起動順序                     CD/DVD-ROM、ハードディスク
ACPI                          有効
IO APIC                       無効
VT-x/AMD-V               有効
PAE/NX                       無効
3Dアクセラレーション      有効

メインメモリはWindows XPなら1GBは必要なのですが、クリーンインストールして常駐アプリも少なく上記の用途だけであれば、512MBでも問題なく動作します。そもそもVT-xを有効にしてもネイティブCore2上で動作させた時よりも遥に重くなるので、メモリがボトルネックにはならないです。一応試してはみたのですが、768MB位までは動作が軽くなった感じがしたけど、それ以上だと変わらなかったです。まぁ、仮想マシンはシングルコアで動作するんでこんなもんでしょうね。

この状態でインストールディスクをセットして仮想マシンを起動すれば良いのですが、起動後に仮想マシンウィンドウの「デバイス」からディスクをセットしたドライブをマウントするようにしましょう。そうしないと起動ディスクが見つからないとか何とか...

この後ちょっとトラブルが...
仮想マシンを起動しようとするとACCESS_DENIEDとかで起動しない。
これはどうやらvboxdrvが起動していない事とVirtualBoxを起動するユーザがvboxusersグループに参加していない事が原因らしい。vboxdrvはsysv-rc-confを使って起動可能なんだけど、そのためにはまずsysv-rc-confをSynapticパッケージ・マネージャからインストールする。その後ターミナルで

sudo sysv-rc-conf

SysV Runlevel Configでvboxdrvのサービスをrunlevel 3〜5まで起動すればOK。念のためubuntuを再起動して、後は普通にWindows XPのインストールをするだけ。
↓こーんな感じになります。
Screenshot

でも、ここでちょっと問題が発生。
ネットワークが繋がらない...

ネットワークが接続できない問題を解決
(参考サイト:http://superlinux.blog50.fc2.com/blog-entry-19.html
(参考サイト:http://blog.s21g.com/articles/942

  1. brigde-utilsをインストール
  2. /etc/network/interfacesを編集
  3. ブリッジポートを作成
  4. VirtualBoxでホストインタフェースを設定

結局やっている事は、ゲストからホストのネットワークインタフェースにつないで、それを外部ネットワークにブリッジ接続するという事ですな。VMwareとかVirtualPCだったら自動的にやってくれるのだけど、VirtualBoxの場合は自分でしなければならないからちょっと面倒。で、Linuxでのブリッジ接続の設定方法ですが、通常ネットワークポートが1ポートの場合、eth0に接続されていると思います。この状態だと、ループバックデバイス(通常lo)と外部ポート(eth0)の2種類だけが見えるのですが、今回はここにブリッジ用ポート(br0)を新規に作るわけです。で、eth0の中身はクリアしてbr0に接続してあげればホスト側はOK。ゲスト側も新しいインタフェース(上記サイトの例だとvbox0)を作って、br0に接続してあげると...。
う〜む、賢いですな。
結果、我が家の/etc/network/interfacesは以下のようになりました。

auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0

auto eth0
iface eth0 inet static
address 0.0.0.0

auto br0
iface br0 inet static
address xxx.xxx.xxx.xxx
netmask 255.255.255.0
gateway xxx.xxx.xxx.xxx
bridge_ports eth0

IPアドレスの所は伏せ字になっています。各自の環境に合わせて正しい値をいれてください。
あとハマったのは、VirtualBox 2.xはOpen Sourceではないので、VBoxAddIFスクリプトがないという事結局OSE版のパッケージから探して持ってきました。面倒だったら、一旦VirtualBox 1.56 OSEをインストールして仮想マシン用のインタフェースを作成した上でアンインストールすれば良いのではないかと思われまする。

参考サイトにも書かれているのだけど、この状態でも/dev/net/tunのパーミッションの問題で毎回エラーが出て気になる人もいるはず。そんな時はchmod 666 /dev/net/tunをサービスかセッション起動時に実行しておけば良いです。

VirtualBox 2.xならUSBのフィルタ設定をしておけば自動的にゲストOSにもマウントされるので便利です。TANITA InnerScanのUSBとか登録しときました。

ちなみに、ここまでの処置を行ってもSD-Jukeboxは正しく動作しなかったです。CPRM対応のカードリーダはやはりデバイス認証で失敗するようで、マウントできませんでした。残念!でも、それ以外は全部OK。Windowsのライセンス余らすのも勿体ないので、ちょうど良かったですな。

【ubuntu】 Dual Displayの設定

我が家のメインマシン(デスクトップ)には、nVidia GeForce 7900GSに

  • DELL 2405FPW  (1920x1200)
  • SONY SDM-M61 (1280x1024)

のモニター2台がDVI-Iで接続されているのですが、OSをubuntuに乗り換えた時に一番ハマったのがこのデュアルディスプレイの設定でした。Windows XPではデュアルディスプレイ化した上で、双方のディスプレイをシームレスにウィンドウ移動したり、片方のディスプレイで最大化するとそのディスプレイだけで最大化されるなど使い勝手が良かったのですが、これと同じ事をubuntuで設定したかったわけです。
で、あちこちのサイトを参考にやってみた結果、ようやく思い通りになったので覚書きをしとくわけです。
ちなみに実現したディスプレイ環境はこんな感じ。

Screenshot

まずは環境を...

OS      ubuntu 8.04 LTS

VGA    nVidia GeForce 7900GS

モニタ  DELL 2405FPW + SONY SDM-M61

解像度 3200 x 1200 (ただし一部欠ける箇所あり)

こんな感じです。

手順は大体以下のような感じ。

  1. xorg.confのバックアップ
  2. nVidiaのプロプライエタリドライバのインストール
  3. nvidia-settingsのインストール&設定
  4. xorg.confの編集
  5. ウィンドウマネージャの再起動

こういう設定をいじる時は設定ファイルのバックアップが必須ですね。特にディスプレイ関係は設定をミスるとまともに起動しなくなるので、最悪runlevel 1からでも戻せるようにしておくべきかと。よって、まずは/etc/X11/xorg.confをバックアップしておきましょう。

次にnVidiaのドライバですが、ubuntuインストール時にビデオカードを差しているとnVidia用プロプライエタリドライバ(新しいカード用)を使うか聞いてくると思います。後から有効にするのであれば、「システム」-「システム管理」-「ハードウェア・ドライバ」でチェックを入れれば良いはず。

さらにSynapticパッケージ・マネージャでnvidia-settingをインストールします。
その後、ターミナルから

gksudo nvidia-settings

でNVIDAのX Server設定画面が表示されます。この時にスーパユーザ権限をつけないとxorg.confが正常に書き換えられないみたいですね。ここで若干ハマりました。コマンドラインだからsudoを使ってたのだけど、どうもそれではうまくいかなくてgksudoにしたらできましたとさ。

Screenshotnvidia_x_server_settings で、表示される画面がこんな感じ。



ここで「X Server Deisplay Configuration」を選択して、「Configure」を押してSeparate X Screenを選択。ちなみにウチの環境みたいに左右のディスプレイの解像度が異なる時はディスプレイの相対位置を変えたかったりします。そういう時は「Advanced...」を押して「X Screen」」タブを選択、Positionを"Absolute"にすると位置を絶対座標で調整できるようになります。

Screenshotconfigure_display_device デュアルディスプレイの選択画面
ここでTwin Viewを選択するとうまく動作しなかった。
Twin Viewだと2つのディスプレイを連続したスクリーンとして扱うのでウィンドウを最大化した時に両画面にまたがってしまうのだ...。

最後に「Save to X Configuration File」を押して /etc/X11/xorg.conf を設定しましょう。
ちなみに、ここまでで2つのモニタを認識していない時はまずモニタを認識させる所からスタートですな。やり方は...え〜と......忘れたかも...。まぁ、そんなに難しくないはずです。イザとなったらxorg.confを自分で書けば良いので...。

ウィンドウマネージャを再起動します。別にやらなくても良いのだけど、すくなくとも再起動して2つのモニタにデスクトップが表示される事を確認した方が良いかと...。もちろんubuntuを再起動しても良いけど、確かCTRL+ALT+BackSpaceで再起動したと思われますダ。この手の作業をしている時は結構便利。

最後にxorg.confを編集して Xinerama を有効にします。もちろん管理者権限が必要なので...

gksudo gedit /etc/X11/xorg.conf

とでもしてエディタでxorg.confを開きます。次に適当な箇所に

Section "ServerFlags"
    Option    "Xinerama" "1"
EndSection

を記述すればOK。既に記述が存在する場合は後ろの数字を"1"にしてください。

これで次にウィンドウマネージャを再起動した時に目的のデュアルディスプレイ化がされているはず...なんですが、結構動かなかったりするんですよねぇ。その時はバックアップしていたxorg.confを戻して、TwinViewを設定してみて横長の(ご所望ではないタイプの)デュアルディスプレイができるか確認すると良いかもしれません。Twin Viewなら長〜いタスクバー、Separate X Screenにしてそれぞれのモニタに別々のタスクバーが表示される事が確認できれば、割とすんなり行くとは思います。

nvidia-settingsの画面にxineramaを有効にするチェックボックスがあります。気づいた人もいると思いますけど。このチェックボックス、なんかちゃんと動作しない(チェックしてもxineramaが有効にならない)ような気がするのですが気のせいかな。僕の場合はGUIだけではNGでした。結局xorg.confを直接書き換えたら、次からnvidia-settingsの画面でxineramaのチェックが入るようになってました。まぁ、この辺は余り細かく追わない方が良いかと思って手を出してないっす。

最後に結局できあがったxorg.confを張っておきます。参考になれば此幸い。
Deviceを2つ定義して、ScreenもMonitorも2つずつというのがミソのようですな。
「xorg.conf」をダウンロード

【ubuntu】 携帯電話用AACトランスコード

昔から通勤時は音楽を聞く事が多いのだけど、最近はすっかり携帯電話を使って音楽聞いてます。通勤が自転車やからコードがあると邪魔なので、Bluetoothヘッドフォンを使用してるんだけど、これが結構便利。音質は悪いけど、マイクも付いているので通話もできるわけです。ハンズフリーで。
もちろん自転車乗りながらの通話はしないようにしているのだけど、自転車乗ってると携帯をカバンの中に入れてしまっているので、着信に気づかないという問題があるわけです。でもBluetoothヘッドフォンで音楽を聞いてると、着信時に割り込んでくれるのでちゃんと気づくと。

ちなみに今使っている携帯はSoftbankの913SH、BluetoothヘッドフォンはSONY DR-BT21Gです。

SONY ワイヤレスステレオヘッドセット ブラック DR-BT21G B CE SONY ワイヤレスステレオヘッドセット ブラック DR-BT21G B

販売元:ソニー
Amazon.co.jpで詳細を確認する

このヘッドフォン、使い勝手が結構優秀で、軽いし耳も痛くならないしで重宝してます。個人的にはネックバックなのがうれしい。髪型も崩れないし、ずり落ちないし。でも、密閉型ではないので、音もれはそれなりにあります。音量に注意かな。ボタンの操作性もマイク感度も悪くないですよ。

と、ちょっと話はズレましたが、問題は携帯用の音楽データを作成する方法ですな。
取り合えず手っ取り早くubuntuでAACを作成しようと思ったわけです。
我が家の場合、全てのCDはリッピングをした上でMP3 192KHz化してRAID1のファイルサーバ上に保存されています。913SHでは単純に音楽データとして再生する時はAACに変換する必要があるので、ubuntuでffmpegを使ってデータ変換させる事にしました。

手順は以下の通り。

  1. Synapticパッケージ・マネージャで ffmpeg をインストール
  2. コンソールで以下のコマンドを実行

ffmpeg -i 入力ファイル名 出力ファイル名

ここで、入力ファイル名は ***.mp3 といった形式なのですが、出力ファイル名は ***.mp4 にしておく必要があります。単純に913SHが拡張子.mp4しか認識してくれないからです。
各種パラメータ(サンプリングレートやビットレート等)はdefaultでとりあえず再生できました。元々、通勤用なので音質は気にしていないのでこれで十分ですわ。

最後に出来上がったファイルを携帯に転送するのですが、必ず「ミュージック」の所に転送する事。ここでないとメディアプレーヤでうまく再生してくれないです。

ちなみにウチでは913SHへの転送は以下の方法を使っています。

  • microSDカードを抜いてアダプタつけてPCのカードリーダに差してファイル転送
  • Bluetoothアダプタ軽油でOBEXで転送

前者は高速なので大量に転送する時に楽。後者は遅いけど無線で転送できるのでファイルを1つだけとか転送する時に楽。まぁ使い分けですな。
ちなみにubuntuでもBluetooth OBEX転送できます。色々とコツが必要ですが、意外とすんなり動作しました。使用しているBluetoothアダプタはLogitechのMX900のステーションです。OBEXだけでなくネットワークプロトコルとかにも対応しているので、結構便利かも。

Inspiron mini 9 ファーストインプレッション

今回は画像を交えて年末に届いたDell Inspiron mini 9のレビューを書いてみたいと思います。

Img_2337 まずは外箱から。
届いた箱を見て嫁が一言...「ちいさっ」...確かに。
大体A4サイズ、厚さは7〜8センチ位かなぁ。
FMV LOOX T50Eの外箱よりも圧倒的に小さいですな。

Img_2338
外箱をあけると梱包材の内箱が出てきました。
箱にDELLの文字がかかれてます。
最近じゃダンボールで作られた内箱も多いんやけど、あれは手を切ることがあってちょっと苦手。それに比べると、この箱は良いですなぁ。

Img_2339 んで内箱を開けると、ようやく見えてまいりました。
Inspiron mini 9本体ですわ。
いや〜、ちっちゃ〜
赤色も生えるし良い感じですわ。

Img_2340 付属品は本体の下に入ってました。
ACアダプタ(これまた小型で扱いやすい。でも一体型なので場所によってはそのまま刺さらなかったりしますが...)
インストールCD、ドライバCD、ファーストガイド、取扱説明書
かなりシンプルですな。

Img_2341 内容物をすべて並べてみました。
となりにちょっと写っているのはFILCOの英語キーボードです。
それと比べても(CDと比べても)Inspiron mini 9の小ささがよくわかりますなぁ。
ACアダプタも確かに小さい。十分、持ち歩き可能なネットブックです。
ちなみに重量は1Kg強といった所。

Img_2342 本体を開いてみました。
今回はBTOで英語キーボードを選択したため、見た通りスッキリとした感じですなぁ。いやぁ、ノートPCで英語キーボードを選択できるのって少ないんですわ。以前はSonyや富士通も選択できたのですけどね、今はDell位なんじゃないかなぁ?しかも追加料金がないし。

ちなみに今回のカスタマイズは以下の通り。

  • 英語キーボード
  • メモリ1G
  • Bluetooth搭載
  • 16GB SSD

ホンマはInspiron mini 12の方がWXGAなので良かったのだけど、英語キーボードの選択ができひんかったから、こっちにしました。ネットブックなので、解像度は 1024x600 とXGAよりちょっと小さめ。これが後になって以外な問題を引き起こす事になりましたけどね。それはまた今度の話。

Img_2343

起動してみました。
アカウント作成とかの初期設定が若干ありましたが、作業自体は5分もかからず非常に簡単。で、このログイン画面に辿り着くと。起動時間を調べてみましたが、さすがSSD約20〜30秒で起動しました。前に使ってたFMV LOOXがWindows XP Homeで起動時間が2分以上という代物なので、非常に早くなりやした。

Img_2344 ユー ザ名とパスワードを入力すると、この画面になります。ログインからこの画面が出るまではほんの数秒。サクサク動作して気持ちよいですなぁ。で、この画面は 実は通常のubuntuのデスクトップではなくて、Dellカスタマイズ版ubuntuの画面です。画面上に見えているランチャはDellのオリジナルラ ンチャとの事。使い勝手は意外と悪くないね。

Img_2345このランチャ、トップレベルはカテゴリになっており、それを選択すると実際に起動するアプリの一覧を表示できるようになってます。カテゴリ及びアプリは任意に編集する事ができます。アイコンをクリックすると、フェードアウトしたり半透明になったりと画面エフェクトもそれなりに見栄えがあって悪くないですなぁ。

とはいえ、僕はマウスを余り使わない派なので、このランチャを余り使ってなかったりする。一応デスクトップ切り替えツールがあって、通常のubuntuデスクトップも選択できるのだが、なぜかこのDellランチャを起動しなくする事ができないのだなぁ。一応セッションマネージャでDellランチャを外してみたのだけど、やはり起動してしまう...。ま、ここは今度調べる事としよう。
ちなみに、現在このInspiron mini 9は嫁のPCとなっているので、余りいじれなかったりする。

しっかし今回ノートPCのOSもubuntuになったという事で、家のPCは全てLinuxになったのだけど世の中まだまだWindowsじゃないと困る事も多いんだなぁ。そのため結局デスクトップではVirtualBoxをインストールして、その上でWindows XPを動かしていまする。実際にubuntuを使ってみるとWindowsよりも良い所が多いです。動作が快適やったり画面の切り替えが早かったりという事もあるけど、それより何よりアプリのインストールが非常に楽です。

Img_2346 Windowsだとフリーウェアとかを窓の杜とかそういうサイトから探して来てダウンロード・インストーラー起動といった手順を踏みますが、ubuntuならパッケージマネージャを起動してインストールしたいアプリを選ぶだけ。アンインストールもパッケージマネージャから削除を選ぶだけ。いやぁ、楽ですなぁ。

さて、このInspiron mini 9は嫁のネット&メール用PCとなりました。
元々ネットしかしーひん人なので、このPCで十分なようです。

しかしまぁ、Atom N270って意外と早いね。
ubuntuをネットメインで使う分には全くストレス感じないですわ。

一年の計は元旦にあり

新年明けましておめでとうでござんす。
いよいよ、2009年の始まりですなぁ。
去年は新しい環境でターっと流れてしまった一年やから、今年は何かをモノにしてみたいと思ったりしまする。まぁ、できる事からコツコツと...。

と、徒然に書いておきながら、あと3日となってしまった正月休みをどうやって有意義に過ごすかを考えながら正月休みを過ごそうかと...えっアカンのん?

« 2008年12月 | トップページ | 2009年2月 »