2009年11月29日日曜日

ubuntu で ext3からext4へ移行してみた

 ファイルシステムをext3からext4へ移行しました。本当はしっかりとした移行記事を書こうかと思ったんですが、普通じゃないやり方してしまって参考にもならないのでやめました(^_^;) ので、感想だけ。

 ext3からext4への移行は、ext3のマウントオプションをext4に指定してやればそのままext4として扱えるんですが、これだとext4本来の機能を利用した状態にはならず、ext4本来のパフォーマンスを発揮することは出来ません。というか意味がない。
 ですので、ext4本来の性能を体感したい、というかちゃんとext4を利用したいのなら、ext4でフォーマット仕直し、そこへファイルを書き戻すといったことが必要です。

 で、LiveCDから起動し、中身をせっせとバックアップしてext4でフォーマット仕直して、バックアップを戻すという作業をしました。もちろんUUIDが変わるので、fstabやgrubなども書き換えてね。

 そして再起動。

 いきなりびっくり。ubuntu 9.10があっというまに立ち上がるんです。デュアルブートのXPよりも速い。ext3の時はこんなものでしょうっていう起動速度だったんですが。
 そして実際にログインして使てみると、速いこと速いこと。ext4ではやっとエクステントベースになったのですが、これによってメタ情報がぐっと少なくなりました。ext3のブロックベースですと1GBのファイルに必要な管理情報は1MBも必要でした。メタ情報のやり取りだけでI/O処理がそれなりにかかっていた事を考えると・・・
 具体的にはfindやduなどのメタ情報を検索するコマンドの速度におおいに違いが表れます。
 数千個のファイルがある、GB単位のディレクトリなど、du で容量を調べるにはそれなりの時間がかかりましたが、ext4だとあっという間に合計容量が返ってきます。

 最初は保守的にシステムだけをext4にして/homeはext3でなんて考えていたんですが、あまりにも良いので全部のパーティションをext4にしてしまいましたw

 ext4は十分に問題なく使えるFSだと思います。

2009年11月22日日曜日

ubuntu 9.10 アップグレードメモ

 遅ればせながら ubuntu 9.10 にアップグレードしましたのでメモ。
 今回の目玉は起動速度がさらに速くなった? なんとなくそんな気がしないでもない。


  • アップグレードはCLIから行なった。
  • sdic-eijiro でエラーが出てアップグレードを強制終了せざるを得なくなった。
  • その後、sudo apt-get install -f をかけた。
  • synapticからいらないパッケージを削除。
  • emacs関係を入れ直した。使えるのはemacs22 emacs23 emacs-snapshot かな。
  • emacsのフォントまわりがまた変更されているみたいだ。おかげでまた再設定。
  • dmesg でみると、i801_smbus: probe of 0000:00:1f.3 failed with error -16 と出てる。
    カーネル2.6.31のリグレッション エラーらしい。おかげでCPUの温度が取得出来ない。
  • icewm は特になにもしなくても問題なし。自前でパッケージ作る必要がなくなったようだ。
  • mlterm はまた256色対応patchを当てなければorz


 暫時追加予定。
 とりあえず問題は sensors で温度やファンの回転数が取得出来ないのが問題かな。mrtg でグラフ化しているので。まあサーバーというわけでもないので単に自己満足のグラフ化なのでいいですけど・・・

 しばらく様子を見て、問題がなければ、/ をext4でフォーマットしなおしてみようかなと思います。やっぱり最大のメリットはext4ですからね。/home はext3のままでいきますw


●2009/11/24 追記:
 i801チップがエラーになるのは、カーネルオプションで acpi=off にすることで回避出来た。当座はこれでいくか。
 / をext4 にした。そのうち書く予定。

2009年10月10日土曜日

Emacsのタイトルバーにホスト名を表示させる

 Granzchesta's ぷち日常天国 さんの方で Emacs で tramp使用時にタイトルバーにホスト名を入れられないかどうか悩んでいたみたいなので試してみました。
 以下を ~/.emacs に追記。

;;; tramp でリモートホスト名をフレームに表示する。
(defun my-tramp-hostname ()
"tramp host name."
(if (buffer-file-name)
(if (string-match "\\`/\\([^[/:]+\\|[^/]+]\\):" (buffer-file-name))
(tramp-file-name-host (tramp-dissect-file-name (buffer-file-name)))
"local") nil ))
;; フレームにセット
(setq frame-title-format '("%b - " (:eval (my-tramp-hostname))))

 Emacsはテキストエディタなんですから決っして文字列操作が弱いわけではありません。テキストエディタなのに弱いとはこれいかに。

2009年9月11日金曜日

ubuntuにgoogle-earth 5.1 を入れる

google-earth Ver5.1 がリリースされたので、インストールメモ。


ポイント

  • 事前に前のバージョンを削除しておく。
  • qt4を使用しているみたい。
  • メニューのフォントはqtconfig から行なう。
  • フォントがビットマップで汚ない。
  • インストール先は自分のhomeにする。


インストール

 インストール自体はGoogleからダウンロードしてきた GoogleEarthLinux.bin ファイルに実行属性を付与してからダブルクリックで実行すればOK.

フォント

 このままだとフォントがビットマップで汚ないので、修正します。
同梱のqtライブラリを使用しないようにし、ubuntuのライブラリを利用するように変更します。以下を端末から実行。
sudo apt-get install libqtcore4 libqtgui4 libqt4-webkit qt4-qtconfig

cd ~/google-earth
mv libQtCore.so.4{,.bak}
mv libQtNetwork.so.4{,.bak}
mv libQtGui.so.4{,.bak}
mv libQtWebKit.so.4{,.bak}

cd ~/google-earth/plugins/imageformats/
mv libqgif.so{,.bak}
mv libqjpeg.so{,.bak}

ln -s /usr/lib/qt4/plugins/imageformats/libqjpeg.so .
ln -s /usr/lib/qt4/plugins/imageformats/libqgif.so .


フォントの変更は qtconfig から行ないます。フォントによってはうまく変更出来ないようです。

 これでアンチエイリアスの効いた状態になりました。



参考

GNU/Linux版Google Earth 5.0上の日本語フォントの問題とその対処

2009年9月10日木曜日

icewmの壁紙を変える

icewmの壁紙は、~/.icewm/preferences 内の、
DesktopBackgroundImage="ほげほげ.jpg"
行を書き換えてあげればいいわけですが、その後、icewmを再起動しないと反映されません。
けっこう面倒くさいので、さくっとシェルスクリプトでやっちゃいましょう。

以下のシエルスクリプトを、icewmbg-changer.sh という名前で保存し、実行属性を付けてください。

#!/bin/sh
# -*- coding: utf-8 -*-
# last updated : 2009/09/07 03:46:02 JST
#
# icewm用壁紙チェンジャー
# 使い方。
# icewmbg-changer.sh /home/foo/picture/hogehoge.jpg
# 引数がない場合はファイルセレクタが立ち上がります。
# ファイラのコンテキストメニューなどに登録して使うと便利でしょう。

# icewmの設定ファイル。フルパスで。
pref='/home/ほげほげ/.icewm/preferences'
# 壁紙のあるディレクトリ。フルパスで。
WALLPAAPERS='/home/ほげほげ/MyPictures/Wallpapers/'

if [ $# = 0 ]; then
cd $WALLPAAPERS
FILE=$(zenity --file-selection --title "Wallpaper Select")
else
FILE=$1
fi
sed --in-place=.bak -e \
's:^DesktopBackgroundImage=.*$:DesktopBackgroundImage="'"${FILE}"'":' $pref
icewmbg -r



設定

 以下二行を自分の環境に合わせて編集してください。
pref='/home/もげげ/.icewm/preferences'
WALLPAAPERS='/home/もげげ/MyPictures/Wallpapers/'


使い方

 そのまま起動すればファイル選択ダイアログが出ます。
 が、このシェルスクリプト単独ではあまりおいしくはないので、ファイラや画像管理ソフトと組み合わせて使うのがいいでしょう。
 ファイラなどのコンテクストメニューに登録しておけば、もっと便利に壁紙を変えることが出来ます。

 私はファイラに rox を利用しているので、こんな感じになります。



 ファイラと組み合わせれば、さくさく壁紙を変更出来るようになるので是非活用してみてください。

2009年8月9日日曜日

Emacsで行を右寄せをする

 昔作ったやつです。
 標準だと、M-x set-justification-right で右寄せしてくれます。がこれだとタブと空白で埋めてくれるので、空白だけで右寄せしてくれるものを作りました。

インストール

  1.  下の方のelispを right-line.el という名前で、~/.lisp などに保存します。
  2.  ~/.emacs

    (require 'right-line)
    (global-set-key "\C-cr" 'justify-right-line) ; 行を右寄せする
    と書いておきます。


使い方

 右寄せしたい行の上にカーソルを持っていき、C-c r とすれば右寄せされます。
 選択範囲内の右寄せも出来ます。
 桁数は C-u 桁数 M-x set-fill-column で。デフォルトだと C-x f かな?

right-line.el


;;; right-line.el --- 右寄せ
;; $Id: right-line.el,v 1.6 2007/10/11 09:55:17 yama Exp yama $
;; last updated : 2007/10/16 15:00:41 JST

;; Copyright (C) 2007 yama

;; Author: yama <yama@localhost>
;; Keywords:

;; This file is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; This file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.

;;; Commentary:

;; 行を右寄せする。範囲選択していれば範囲選択部分を右寄せする。

;;; ToDo


;;; Code:

(defun yama-region-active-p ()
"リージョンアクティブならtを返す.
2007年10月06日(土曜日) 12:45:08 JST by yama"

(if (and transient-mark-mode mark-active) t nil))

(defun right-line ()
"2007年09月15日(土曜日) 14:46:17 JST
カレント行を空白で埋めて、右寄せする"

(interactive)
(save-excursion
(end-of-line)
(let ((ln(- fill-column (current-column))))
(beginning-of-line)
(insert-char ?\ ln))))


(defun right-line-region (start end)
"選択範囲内を空白で埋めて右寄せする。範囲選択されてなければカレント行を右寄せする
2007年10月06日(土曜日) 12:44:41 JST by yama"

(interactive "r")
(save-excursion
(save-restriction
(goto-char start)
(unless (bolp)
(beginning-of-line)
(setq start (point)))
(goto-char end)
(unless (bolp)
(beginning-of-line)
(setq end (point)))
(narrow-to-region start end)
(let ((max-line (count-lines start end))
(count 0))
(goto-char (point-min))
(while (< count max-line)
(right-line)
(next-line)
(setq count (1+ count)))))))

(defun justify-right-line (start end)
"カレント行を右寄せする。範囲選択されているなら範囲内を右寄せする.
2007年10月16日(火曜日) 14:08:05 JST by yama"

(interactive "r")
(if (yama-region-active-p)
(right-line-region start end)
(right-line)))

(provide 'right-line)
;;; right-line.el ends here



 報告書とか文書の末尾の署名なんかに利用すると便利です。
 自分で作って使っていなかったり・・・orz

2009年8月2日日曜日

Emacsの起動時間を調べる

Emacs23.1 がリリースされましたねー。めでたいめでたい。やんややんや。
もっともだいぶ前から使っていたんで新鮮さはないんですが、やっぱりアンチエイリアスの効いたフォントは美しい。

んで、emacs23から追加された関数を使って、Emacsの起動に掛かった時間を表示する機能など。小ネタです。

;;;====================================
;;;; boot-time
;;;====================================
;;; 起動するまでにかかった時間を表示。
(defun boot-time ()
" 起動するまでにかかった時間を表示。"
(interactive)
(message "起動時間:%s秒"
(- (cadr after-init-time) (cadr before-init-time))))


M-x boot-time で起動時間が表示されます。

2009年7月2日木曜日

CLIで天気予報を表示する

 最近perlを触る機会があり、perlをいじるのは初めてだったのですが、なんとかでっち上げてみました。perlなんて記号だらけの省略記法だらけで大嫌いだったのでですが、時代は変わり、最近ではモジュールを活用してブロックを組み立てるかのように書けるとか。
 実際 CPAN の充実ぶりは凄いですね。あらためて perl を見直しました。

 んで今回はYahooから天気予報を取得して表示するコマンドです。前回は今現在の気象情報を表示するだったのですが今回は予報です。

インストール

 以下のスクリプトを適当な名前、yohou.pl みたいな名前で ~/bin/ あたりにでも保存し、chmod +x yohou.pl として実行属性を付けておいてください。

#!/usr/bin/perl
# last updated : 2009/07/02 15:46:45 JST
#
# Yahooから天気予報を取得する。

use utf8;
use strict;
use warnings;
use XML::TreePP;

binmode STDOUT, ":utf8";


# url
# 以下のurlから調べて下さい。
# http://weather.yahoo.co.jp/weather/public/rss.html
my $url = "http://rss.weather.yahoo.co.jp/rss/days/4410.xml";
# カットする文字列。
my $cut = " 東京(東京) ";




my $tpp = XML::TreePP->new(array_element => [qw( item )]);
$tpp->set( utf8_flag => 1 );
my $tree = $tpp->parsehttp( GET => $url);
my $channelhash = $tree->{rss}->{channel};
print $channelhash->{title} . "\n";
my $itemarray = $channelhash->{item};
foreach my $itemhash ( @$itemarray ) {
my $base = $itemhash->{title};
unless ($base =~ /^\[PR\]/) {
$base =~ s/ - Yahoo!天気情報$//;
$base =~ s/ (\d)日/ 0$1日/;
if ($base =~ /^【 \d\d日/) {
my $idx = rindex($base, '】');
my $day = substr($base, 0, $idx + 1);
$day =~ s/$cut//;
my $wea = substr($base, $idx + 2);
my @tenki = split(/ - /, $wea);
$tenki[0] = trim($tenki[0]);
print sprintf("%s %-4s %s", $day, ume($tenki[0]), $tenki[1]) . "\n";
}
else {
print $base . "\n";
}
}
}
print $channelhash->{copyright} . "\n";

sub trim {
my $val = shift;
$val =~ s/^\s*(.*?)\s*$/$1/;
return $val;
}

sub ume {
my $val = shift;
my $len = length($val);
if ($len < 4) {
$val = $val . " " x (4 - $len);
}
return $val;
}

 次に自分の住んでいる地域の天気予報を表示するために、http://weather.yahoo.co.jp/weather/public/rss.html から地域のurlをコピーして
my $url = ”http://rss.weather.yahoo.co.jp/rss/days/4410.xml"
の行を変更しておいてください。その下の my $cut も同じく地域に合わせて変更を。$cut は単に冗長な部分を削除するだけですから、ほっといても特に問題ありません。

 次にこのスクリプトは XML::TreePP というモジュールを利用しているので、
sudo apt-get install libxml-treepp-perl
としてインストールしておいて下さい。
 以上で準備は完了です。後は ~/bin/yohou.pl とでもして実行すれば、
~$ yohou
Yahoo!天気情報 - 東京(東京)の天気
【 02日(木)】 雨後曇  26℃/21℃
【 03日(金)】 曇り   26℃/21℃
【 04日(土)】 曇時々雨 25℃/22℃
【 05日(日)】 曇時々雨 27℃/21℃
【 06日(月)】 曇り   28℃/22℃
【 07日(火)】 曇時々雨 28℃/22℃
【 08日(水)】 曇時々雨 27℃/22℃
【 09日(木)】 曇時々雨 26℃/22℃
【 23区西部 】警報・注意報はありません
【 23区東部 】警報・注意報はありません
【 多摩北部 】警報・注意報はありません
【 多摩西部 】警報・注意報はありません
【 多摩南部 】警報・注意報はありません
Copyright (C) 2009 Yahoo Japan Corporation. All Rights Reserved.
な感じで天気予報が表示されます。天気情報コマンドと合わせて使えばいいでせう。


# ん〜それにしてもperl の文字列処理のやり方がまだ理解していない・・・でもモジュールは便利だね。というか便利すぎ。
# いままでrubyばかりだったけど、perlで便利なモジュールがある場合はperlを使おう。

2009年6月7日日曜日

ubuntuに Nagios を入れる

UbuntuでNagiosなんだけど、英語ですね。
という のっぽのブログ「バカンチ」さんの書き込みをみたので、Nagios を日本語化したものをPPAに上げておきました。
https://launchpad.net/~yama-natuki/+archive/ppa
からどうぞ。

これだけではあれなので自分でも入れてみました。
インストール後、パスワードを設定しないといけないみたい。
sudo dpkg-reconfigure nagios3-common
してパスワードを設定。
あとは、 http://localhost/nagios3/ にアクセス。

2009年6月2日火曜日

ubuntuで AppArmor を使ってセキュアな環境を構築する

AppArmor はubuntuにセキュアな環境を提供するフレームワークです。同様のものにSElinuxがありますが、あちらはがっちがちの強固なセキュアOSで、我々のようなエンドユーザーが気軽にほいほいと使えるものでもありません。SElinuxの中の人も、ポリシーは専門家が記述すればいいと言っています・・・

 幸いにして AppArmor はカジュアルに扱えるセキュリティツールとしてubuntuで採用されており、これを使わない手はありません。がしかし日本語での資料がほとんどなく、ろくに有効活用されていないのが実情だと思います。
 そこで、自分のためのメモとして簡単な使い方を書いてみたいと思います。

導入

 apparmor はアプリごとにルールを設定し、設定したルール以外の行動を禁止します。ですからあるアプリが脆弱性を利用してクラックされ、そのアプリから全然関係のないファイルにアクセスしようとしても、それはルールで許可されていませんから、アクセスが出来ず、被害を防げるという仕組みです。
 このルールをプロファイル(ポリシー)といい、あらかじめいくつか用意されていますので、まずprofileを導入します。
sudo apt-get install apparmor-profiles apparmor-utils
apparmor 自体は標準で有効になっているはず。

確認する

sudo apparmor_status
でステータスが確認出来ます。
 enforce mode が実際にprofileを適用しています。
 complain mode が学習モードで、システムログに学習結果をどんどん書き出しています。


新しいprofileを作る

 polipo を使っているので、こいつのprofileを実際に作っていきます。

sudo aa-genprof /usr/bin/polipo
とすると、
Please start the application to be profiled in
another window and exercise its functionality now.

Once completed, select the "Scan" button below in
order to scan the system logs for AppArmor events.

For each AppArmor event, you will be given the
opportunity to choose whether the access should be
allowed or denied.

Profiling: /usr/bin/polipo

[(S)can system log for SubDomain events] / (F)inish
と聞いてきますので、F キーを押して終了させます。そうすると、 /etc/apparmor.d/ 以下に usr.bin.polipo というファイルが作られます。
 次に、
sudo aa-complain /usr/bin/polipo
としてすぐさま学習モードにし、
sudo /etc/init.d/polipo restart
としてpolipoをリスタートさせ、しばらく動作させます。この間 apparmor はpolipoの動作ログを取り続けます。いろいろとpolipoを動作させ、その振る舞いを学習できたかなあと思ったら、
sudo aa-logprof
として学習結果を反映させます。
対話形式で、許可、不許可を聞いてきますので、逐次答えていきます。答え終わると、セーブするか聞いてくるので、もちろんセーブします。

 しばらく学習行為を終え、もう漏れがないかなあと思ったら、complainモードからenforceモードに
sudo aa-enforce polipo
として切り替えます。

 これでpolipoは設定したファイル以外にはアクセス出来なくなります。
 参考までに、/etc/apparmor.d/usr.bin.polipo の中身を。
# Last Modified: Tue Jun  2 16:00:15 2009
#include

/usr/bin/polipo flags=(complain) {
#include
#include



/etc/polipo/config r,
/etc/polipo/forbidden r,
/etc/polipo/uncachable r,
/usr/bin/polipo r,
/usr/share/polipo/www/doc/* r,
owner /var/cache/polipo/ r,
owner /var/cache/polipo/** rw,
owner /var/log/polipo/polipo.log a,
owner /var/run/polipo/polipo.pid w,

}

こんな感じになっています。もちろんエディタで直接変更してもかまいません。

 つまり簡単に言うと、
  1. プロファイルがなければ aa-genprof で作る。
  2. complainモードでしばらく学習させる。
  3. aa-logprof で学習結果を反映させる。
  4. Okなようなら enforceモードに切り替える。
こんな感じです。ね、簡単でしょう?w

 ちなみに aa-genprof でいきなりFキーで終了させていましたが、あのままの状態でアプリを立ち上げ、いろいろ操作をした後に、Fキーでなく、Sキーを押すと、許可、不許可の設定が続きます。ただ短時間の学習だとどうしても漏れがあるので、しばらくはcomplainモードで回したのちに、 aa-logprof で反映させるといいでしょう。

# 正直デスクトップユーザで セキュアOS必要かというと現状いらないんじゃないかと思うんですが、将来のことを考えると憶えておいて損はないと思います。でもその前に TOMOYO がubuntu にきちゃうかなw

2009年5月18日月曜日

ubuntuでcompiz使用時のmltermの描画がおかしい

Ubuntuを 9.04 に上げてcompizで mlterm を使用しているさいに、ls などでずらずらと表示させてみると描画されない区域が出てきました。マウスで表示されていない部分を反転させると表示されます。
 top コマンドで画面をじーっと見ていると、描画されない部分がぴょこぴょこ出るのがわかると思います。
 かなり不便というか問題なのでいろいろ悩んでいたんですが、compiz設定マネージャーを起動し、次善策プラグインの、Force synchronization between X and GLXenableにすることで解決出来ました。

2009年5月11日月曜日

Ubuntu 9.04 にアップグレードメモ

 Ubuntu 9.04 にしました。今回はクリーンインストールではなくアップデートをすることにしました。
 今まで使っていたのが 8.04 でしたので、8.04 → 8.10 → 9.04 へと順にアップデートしていきます。
 アップデート自体はなにも問題なく終わりました。
 アップデートするときのコツは、公式のリピジトリ以外から入れたものは全てpurgeすることです。また、デーモンなどの初期起動状態も sysconfig などで変更した場合は、入れた時の状態に戻しておきます。

 以下気づいたことなどをメモ。


  • Xorgがubuntu8.10になってVer1.5になり、いろいろと斬新に変更された。のでトラブルが多い。
  • Xorgが1.5から返ってくるキーコードが変更されている。従ってxmodmapでキーバインドを変更している場合は再度設定し直し。
  • 入力デバイスの設定が xorg.conf から読まなくなった。/etc/hal/fdi/policy/ 以下にXMLで書けばいいらしいが、XMLなんて人間が直接書くものじゃないと思う。アホー。とりあえず、
    setxkbmap -rules evdev -model pc101 -layout us
    としてicewm用に ~/.icewm/startup に書いて手動で設定した。GNOMEは自前で設定するので問題ない。けどXとGNOMEで設定分かれているっていうのはどうなのよ・・・
  • 制限付きドライバの名称が変わっている。そしてnvidiaのドライバが入らなかったので、envyng で入れた。
  • 解像度がおかしかった。ので手動でxorg.confを書き直して対処。
  • Ctrl + Alt + Backspace がデフォルトで無効になった。xorg.conf に

    Section "ServerFlags"
    Option "DontZap" "False"
    EndSection
    と記述して対処。
  • compizと端末の組み合わせがおかしい・・・色抜けする。
  • compizやcairo-dockなどは変更が激しいので、そのつど設定を破棄するか、見直ししたほうがいい。
  • mlterm 256色化済み jaunty 対応版をパッケージ化した。以下からどうぞ。
  • icewm で icewm が完全に立ち上がる前に startup などで指定したプログラムが起動したりすると、icewm の挙動がおかしくなる。キーバインドが一部効かなくなる。タスクトレイが表示されなくなるなど。~/.icewm/startup の各プログラムの間に sleep を入れることで対処。
  • Emacs23 が起動時に変なウィンドウサイズで起動したりする。
  • 起動は確かに速くなっている。アプリの起動速度は速くなっている。こちらの方が体感出来た。


まとめ


 8.10はnvidiaのレガシードライバが対応していなかったので見送っていました。他にXorgがラディカルに変更されていたのも理由です。
 うちでは KVM (キーボードマウスモニタ切換器)を使用しているのでhalの自動認識が機能しません。機能しない手動で設定しなけれならない環境にはやさしくないですね。
 結論としては、LTS使っている人ならわざわざ急いでアップデートする理由はないかなー。

2009年5月3日日曜日

hatena-keyword.el をちょこっと修正

Emacsからはてなキーワードを辞書のように引く hatena-keyword.el を修正しました。
とりあえずメジャーモードを実装して、履歴機能も付けました。
これで はてなキーワード をリンクをたどって読み歩くことが出来るように。

ここから落として下さい。

2009年4月23日木曜日

Emacsからはてなキーワードを引く hatena-keyword.el

 現在 Emacs から和英・英和・翻訳・国語辞書・などを SDIC lookup を使って引けるようにしているんですが、電子辞書版の「現代用語の基礎知識」が2007年度版で止まっており、最近のカタカナ語や新語などに対応できていませんでした。

 ということで最近の新語に対応するため、Emacsからはてなキーワードを辞書のように引くものを作ってみました。
 自分で使うには満足な状態なのと、これ以上手を入れる気もなく、埋もれさすのもあれなので公開しておきます。

 最近は小学生の間でも辞書を読むことがブームだそうで。はてなキーワードの散策なんていかがでしょうか。




●インストール

 w3mを使っていますので事前に入れておいてください。
sudo apt-get w3m-el あるいは w3m-el-snapshot

 として w3m を入れたら、~/.emacs に、
(require 'w3m-load)
としておきます。
 後は以下に貼ってあるEmacs lisp を、 hatena-keyword.el という名前で load path の通った場所に保存してください。
 次に ~/.emacs に、
(require 'hatena-keyword)
(global-set-key "\C-ck" 'hatekey)
と追記すればOKです。


●使い方


 調べたい単語の上で C-c k とすれば単語の意味を別ウィンドウで表示します。
 q キーで終了します。
 リンクされたキーワードの上でリターンキーを押すと、そのキーワードを検索して表示します。
 TABキーでキーワードにジャンプします。Shift + TAB で逆順。
 ←キーで過去に表示したキーワードに戻ります。


・hatena-keyword.el

;;; hatena-keyword.el ---

;; Copyright (C) 2009 yama

;; Author: yama <yama.natuki+elisp@gmail.com>
;; Keywords:

;; $Id: hatena-keyword.el,v 1.28 2009/05/03 13:35:06 yama Exp yama $

;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.

;;; Commentary:

;; はてなキーワードをEmacsから検索して表示するlispです。
;; Emacsからはてなキーワードを辞書のように扱えます。
;; より詳しい情報は、http://ubulog.blogspot.com/

;;; Install

;; (1) emacs-w3m を利用しています。事前に用意して下さい。
;; (2) このファイルをload-pathの通った場所に置きます。
;; (3) ~/.emacs に以下を追記します。
;; (require 'hatena-keyword)
;; (global-set-key "\C-ck" 'hatekey)

;;; Usage:

;; C-c k でカーソル付近の単語を調べます。
;; TABキーでリンクされたキーワードにカーソルを移動します。
;; Shift + TAb で逆順。
;; リンク上でリターンキーを押すとそのキーワードを検索して表示します。
;; リンクがキーワードではない場合はw3mでリンク先を開きます。
;; ←キーで表示したキーワードを戻ることが出来ます。

;;; ToDo

;;



;;; Code:

(require 'url)
(require 'xml)
(require 'w3m)

;;; configuration

(defvar hatenakey-window-height 14
"*Height of window to show entrys and contents.
検索結果表示ウインドウの高さ"
)

(defvar hatena-coding-system 'utf-8
"文字エンコードの指定。utf-8,euc-jp,shift_jis.")



(defconst hatenakey-version "1.1")
(defconst hatenakey-buffer-name "*hatena-word*"
"検索結果表示バッファの名前")

(defconst hatenakey-history-name "*hatena-history*"
"履歴バッファの名前")

(defvar hatenakey-history '()
"履歴スタック")

(defvar hatena-keyword-mode nil
"Non-nil if Hatena Keyword mode is enabled.
Don't change this variable directly, you must change it by one of the
functions that enable or disable Hatena Keyword mode."
)

;; Define keymap
(defvar hatekey-mode-map
(let ((map (make-sparse-keymap)))
(define-key map " " 'scroll-up)
(define-key map "b" 'scroll-down)
(define-key map "q" 'view-kill-window)
(define-key map "\t" 'w3m-next-anchor)
(define-key map [tab] 'w3m-next-anchor)
(define-key map [(shift tab)] 'w3m-previous-anchor)
(define-key map [backtab] 'w3m-previous-anchor)
(define-key map [left] 'hatena-view-previous-page)
(define-key map "\C-m" 'hatena-keyword-jump)
map))


;;; main ------------------------------------------------------

(defun hatekey-version ()
"バージョンを返す。"
(interactive)
(message "hatena-keyword %s" hatenakey-version))


(defun hatena-keyword-mode ()
"はてなキーワード を表示するメジャーモードです.
調べたい文字列の上で \\[
hatekey] を実行することによりキーワードを検索して表示します。
\\<hatekey-mode-map>

key binding
--- -------
\\[
view-kill-window] quit.
\\[
scroll-up] scroll-up
\\[
scroll-down] scroll-down
\\[
w3m-next-anchor] Go to Next Keyword Link
\\[
w3m-previous-anchor] Go to previous keyword Link
\\[
hatena-view-previous-page] Back to History.
\\[
hatena-keyword-jump] jump to keyword
"

(interactive)
(setq major-mode 'hatena-keyword-mode
mode-name "hatekey"
buffer-read-only t)
(use-local-map hatekey-mode-map)
(run-hooks 'hatena-keyword-mode-hook))


(defun hatena-url-restructure (keyword)
"はてなのurlを構築する。"
(concat "http://d.hatena.ne.jp/keyword?word="
(w3m-url-encode-string keyword hatena-coding-system)
"&mode=rss2&ie="
(symbol-name hatena-coding-system)))

(defun my-keyword (url)
"キーワードの解説を返す。"
(interactive)
(set-buffer (url-retrieve-synchronously url))
(if (string-match "200 OK" (buffer-substring (point-min) 20))
(progn
(let* ((root (xml-parse-region (point-min) (point-max)))
(base (car (xml-get-children (car root) 'item)))
(my-desc (nth 2 (car (xml-get-children base 'description)))))
(if (eq my-desc nil) (setq my-desc "No Match") nil)
(if (hatena-buffer-p) (setq buffer-read-only nil))
(set-buffer (get-buffer-create hatenakey-buffer-name))
(erase-buffer)
(insert (decode-coding-string my-desc hatena-coding-system))
(w3m-buffer)
(if (hatena-window-p)
(progn
(select-window (hatena-window-p))
(hatena-keyword-mode))
(split-window-vertically
(- (window-height) hatenakey-window-height))
(set-window-buffer (next-window) (current-buffer))
(select-window (next-window))
(hatena-keyword-mode))))
(message "%s" "Not Found")))


(defun hatena-buffer-p ()
"はてなバッファの存在チェック"
(if (get-buffer hatenakey-buffer-name)
(set-buffer hatenakey-buffer-name)))

(defun hatena-window-p ()
"はてなウィンドウのチェック。"
(get-buffer-window (get-buffer hatenakey-buffer-name)))

(defun hatekey (keyword &optional flag)
"はてなキーワードを検索する。"
(interactive
(list (cond ((or (eq last-command 'mouse-drag-region)
(and (boundp 'transient-mark-mode) transient-mark-mode
(boundp 'mark-active) mark-active)
(eq last-command 'exchange-point-and-mark))
(buffer-substring-no-properties
(region-beginning) (region-end)))
(t (thing-at-point 'word)))
current-prefix-arg))
(if (eq (fboundp 'w3m-buffer) nil) (message "w3m-buffer関数が見つかりません。")
(if flag nil
(let* ((keyword (read-from-minibuffer "Search word: " keyword)))
(my-keyword (hatena-url-restructure keyword))
(hatenakey-history-push keyword)))))


(defun hatenakey-close-window ()
"検索表示バッファを表示しているウインドウを消去する関数"
(interactive)
(let ((w (get-buffer-window hatenakey-buffer-name))
(b (get-buffer hatenakey-buffer-name)))
(if w
(progn
(bury-buffer b)
(if (= (window-height w) hatenakey-window-height)
(delete-window w)
(set-window-buffer w (other-buffer))
(select-window (next-window)))))))

(defun hatena-this-keyword ()
"現在位置のリンクのキーワードを返す。urlならw3mで開く。"
(let ((url (w3m-print-this-url)))
(if (string-match "keyword" url)
(replace-regexp-in-string
"http://d.hatena.ne.jp/keyword/" "" url)
(w3m-browse-url url))))

(defun hatena-keyword-jump ()
"pointのキーワードを検索"
(interactive)
(if (hatena-this-keyword)
(progn
(let ((key (hatena-this-keyword)))
(my-keyword (hatena-url-restructure key))
(hatenakey-history-push key)))))

(defun view-kill-window ()
"検索結果表示ウィンドウを削除する関数"
(interactive)
(if (get-buffer hatenakey-buffer-name)
(progn
(hatenakey-close-window)
(kill-buffer hatenakey-buffer-name)
(setq hatenakey-history '())
(delete-other-windows))))

(defun hatenakey-history-name-p ()
"履歴バッファが存在するかどうか"
(set-buffer (get-buffer-create hatenakey-history-name)))

(defun hatenakey-history-push (keyword)
"履歴にキーワードを追加する。"
(setq hatenakey-history (cons keyword hatenakey-history)))

(defun hatenakey-history-pop ()
"履歴からキーワードを取り出す。履歴からは消える。"
(setq hatenakey-history (cdr hatenakey-history))
(car hatenakey-history))

(defun hatena-view-previous-page ()
"一つ前に見たキーワードへ戻る。"
(interactive)
(my-keyword (hatena-url-restructure (hatenakey-history-pop))))

(provide 'hatena-keyword)
;;; hatena-keyword.el ends here

 きっかけは、現代用語の基礎知識を調べるうちにはてなキーワードが現代用語の基礎知識にいくつか採用という記事を思い出し、じゃあはてなキーワードを辞書代りに使用してもいいんじゃないか。というものでした。
 辞書のように、というのがポイントです。はずせません><

追記:
動作環境書いてなかったorz
ubuntu 8.04.2 LTS、Emacs22,23 emacs-w3m は以前CVSから取ってきたもので動作しています。
w3mどうしましょうかねー。はてなからhtml要素で返ってくるので、フォーマットするのにw3m利用するのが一番簡単で手っ取り早いんですよねえ。その分w3mに依存するけど。
w3m使わなければ可搬性も高まるのだろうけど・・・

追記:
(require 'w3m-load) を書き忘れていたので追記。

追記:2009/04/26
 リンクされたキーワードにジャンプするようにした。
 w3mべったりになった。

追記:2009/05/03
 メジャーモードを実装。履歴を戻る機能を付けた。
 変数を初期化していない凡ミスを直した。

追記:2009/05/04
 コードの色付けが変だったので直した。face2htmlだと量が多いとうまくいかないみたい。htmlizeに変更した。

2009年4月17日金曜日

Dropbox で友達紹介キャンペーン

 Dropbox がアップデートされて、公式に CLI 版がリリースされました。
 リポジトリを登録している方は自動的にアップデートされます。

 初回起動時は、 dropbox start -i で起動すると本体をネットからダウンロードしてきます。
 次回からは、 dropbox start でOK.
 詳しいことは、man dropbox すれば見られます。


 んで、久しぶりに公式サイトを見にいって気づいたんですが、Dropbox で友達紹介キャンペーンをやっているらしいです。
 一人紹介して登録するごとに250MB紹介した側と、紹介された側に容量が貰えるらしいです。最大3GBまで貰えるらしい
 ということでまだDropbox を使ったりしちゃったりしたことがない方は以下のリンクからゲットしちゃってくださいませんかお願いしますのよろしくですm(__)m

https://www.getdropbox.com/referrals/NTEzMTE3MTk

2009年4月9日木曜日

SKK用三国志辞書

 SKK用三国志辞書を作るためのシェルスクリプトを作ってみました。
 ginka さんが公開して下さっている しんぷる三国志辞書 を元にSKK用辞書に変換しています。
 蒼天航路も始まったことだし、三国志辞書などいかがでせう。

 変換には nkf と skkdic-expr2 が必要です。
sudo apt-get nkf skktools
としてあらかじめインストールして置いて下さい。
 あとは以下のスクリプト sangokusi2skk.sh としてを保存し、

#!/bin/sh
# -*- coding: euc-jisx0213 -*-
# last updated : 2009/04/09 20:41:45 JST

#wget http://homepage.mac.com/ginka/sanguo/data/simplesan_ver02otf.txt
TMP="sangokusi.tmp"
nkf -W16B --oc=EUC-JIS-2004 -Lu $1 > $TMP
cat $TMP | sed \
-e 's/\//,/g' \
-e 's/\t人名$//' \
-e 's/\t地名$//' \
-e 's/\t名詞$//' \
-e 's/\t/ \//' \
-e 's/(/;(/' \
-e 's/$/\//' | skkdic-expr2 > $TMP
echo ";; -*- mode: skk-jisyo-edit; coding: euc-jp -*-" | \
cat - $TMP > SKK-SANGOKUSI.JISYO
rm $TMP
 保存したら後は、ginkaさんのサイトから しんぷる三国otf02 Unicode(UTF-16) simplesan_ver02otf.txt というファイルを落としてきます。後は、
sangokusi2skk.sh simplesan_ver02otf.txt
とでもして実行すれば、SKK-SANGOKUSI.JISYO というSKK辞書が出来上がります。

 注意点としてはシェルスクリプトの文字コードに注意してください。
 もし変換して出来た辞書を配布する場合は、元データの作成者のginkaさんに許諾を取ってください。
 適当にでっち上げただけですのでうまくいっているかどうかわかりません。一応手元のDDSKKとEmacsの環境ではちゃんと動いています。
 しかし蒼天航路のOPの映像は素晴しい。

2009年3月24日火曜日

Ubuntuで起動時刻を取得する

 PCの稼動時間は uptime コマンドで取得できますが、
$ uptime
20:19:56 up 9:24, 3 users, load average: 0.11, 0.20, 0.21
起動した日時を取得するには last コマンドで取得できます。
$ last -R -1 reboot
reboot system boot Tue Mar 24 10:55 - 20:20 (09:24)

wtmp begins Sun Mar 1 16:13:24 2009
あるいは、
$ last -R -1 reboot | grep boot |  awk '{print $4, $5, $6, $7}'

Tue Mar 24 10:55
で抜き出すとか。

 後は現在時刻からuptimeで得られる稼働時間を引けば起動時刻が求められるので、計算して得るなら以下のようなシェルスクリプトを用意し、

#!/bin/sh
# last updated : 2009/03/24 19:41:43 JST
# 起動した時刻を表示する。

UPTIME=`cat /proc/uptime | awk '{print $1 }'`
NOW=`date +"%s"`
STIME=`echo "$NOW - $UPTIME" | bc`
awk 'BEGIN{print strftime("%c",'"$STIME"');exit}'
starttime.sh などという名前で保存し、実行すれば、
$ starttime.sh

2009年03月24日 10時55分08秒
などと表示される。perlやrubyに慣れている人ならワンライナーでもっと簡潔に書けるでせう。

 ちなみになんの役に立つのかはわからない・・・

2009年3月13日金曜日

Ubuntuで Twitter

 普段は twittering-mode を使用しているのだけれど、万人に勧められるものではないし、いろいろ他のtwitterクライアントを試してはみても、どれもいまいちしっくりこないというか。
 そこで今回 twitte.rb というクライアントがなかなかいいのでご紹介。


インストール

 必要なパッケージを事前にインストールします。
sudo apt-get install libglade2-ruby libgconf2-ruby libopenssl-ruby
ポップアップ通知を有効にしたいなら、libnotify-bin も入れておきます。
sudo apt-get install libnotify-bin

次に twitte.rb の最新版をここから落としてきます。
落としてきたら展開して適当な(今回は~/bin/以下にします)ディレクトリに、展開した中身を移動しておきます。

実行の仕方

 twitte.rb を実行するだけです。
~/.bashrc
alias twitte='~/bin/twitte.rb'
と別名定義しておき、端末から、
source ~/.bashrc
と即座に反映しておけば、次回から twitte とするだけで twitte.rb が実行されます。

使い方


初回起動時に設定画面が表れますので、twitterアカウントパスワードを入力してあげればOKです。



 設定の細かい部分は本家を参照するといいでしょう。

 設定が終ったら、メイン画面の下のメッセージエリアに適当に呟きを入力してリターンキーを押せばPOSTされます。

2009年3月9日月曜日

Emacs23 で Wanderlust

Emacs23 で Wanderlust で日本語フォルダが扱えなかった。他にネットで似たような情報がなかったので、うちだけの問題なのだろう。けっこうごちゃごちゃいじってあるので、自分でもわけがわからないw
 wl付属のutf7.el を削除すれば直ったというケースもあるようだけど、うちでは無理だった。
凹んだ(×_×)

 でまあ、emacs23になってから utf7 まわりがおかしいのだろうなと思っていたのだけど、wl のデバッグログを眺めていたら、デコードされたフォルダ名の先頭に空白が・・・・・・・・BOMだったorz

原因が判明したのでググって、 /usr/share/emacs/23.0.60/lisp/gnus/utf7.el に以下の変更を。

(defconst utf7-utf-16-coding-system
(cond ((mm-coding-system-p 'utf-16-be-no-signature) ; Mule-UCS
'utf-16-be-no-signature)
((and (mm-coding-system-p 'utf-16-be) ; Emacs 21.3, Emacs 22 (BOM?)
;; Avoid versions with BOM.
(= 2 (length (encode-coding-string "a" 'utf-16-be))))
'utf-16-be)
+ ((and (mm-coding-system-p 'utf-16be) ; Emacs 22 and later
+ ;; Avoid versions with BOM.
+ (= 2 (length (encode-coding-string "a" 'utf-16be))))
+ 'utf-16be)
((mm-coding-system-p 'utf-16-be-nosig) ; ?
'utf-16-be-nosig))
"Coding system which encodes big endian UTF-16 without a BOM signature.")
Emacs23 になって utf-16-beutf-16be になっているせいらしい・・・なんでやねん。

 同じようにwl付属のutf7.elも変更しないといけないのだけど、こちらは ~/.wl にバージョン判定で切り抜けるようにした。

(cond ( (string-match "^23\." emacs-version)
(defconst utf7-utf-16-coding-system
(and (fboundp 'find-coding-system)
(find-coding-system 'utf-16be))
"Coding system which encodes big endian UTF-16.")))

 結果は、見事に動作するようになった。 

・参考
 http://d.hatena.ne.jp/defiant/20081112/1226461505
 http://article.gmane.org/gmane.emacs.bugs/16892

2009年3月5日木曜日

ubuntuでフォルダ管理型の音楽プレーヤー

 iTunes 登場以来、ライブラリ管理型の音楽プレーヤーが主流になっていきました。Ubuntu だと、 rhythmbox や Amarok がそうです。
 これはこれで便利なのですが、大変重いという欠点があります。そもそもライブラリ型プレーヤーが登場する前は、みんなフォルダにアルバム名やアーティスト名などを付けて管理していました。
 こうしたフォルダ管理に慣れている人にとっては鈍重なライブラリ管理型ミュージックプレーヤーはなかなか馴染まないものです。
 そこで、フォルダ管理型音楽プレーヤ、 Decibel Audio Player の出番です♪



インストール

sudo apt-get install decibel-audio-player

使い方

 使い方は至って簡単です。
 起動したら、メニューから設定画面を呼び出し、File Explorer にチェックを入れ(最初から入っているかな?)



設定ボタンを押して、音楽フォルダをどんどん登録していきます。



 後は左側のペインから聴きたい音楽やフォルダ上で右クリックし、演奏を選ぶだけです。
 Playlist にも対応していますので、自由に再生リストを作成することも出来ます。
 これだけです。シンプルでamarokに比べてメモリも食わなければ余計なこともせず、ひたすら音楽を流し続けるにはもってこいのプレーヤーでしょう。

2009年3月2日月曜日

ubuntuで使える、いろんなネットワークモニタ

 いろいろありすぎるので、簡単な紹介だけ。実際い使ってみた方がはやいでしょう。

bwm-ng

 見てのとおり、実にわかりやすいですね。終了は、q キーで。



nload

 これもbwm-ngといっしょですね。棒グラフで転送量が分かります。終了は、q キーで。



vnstat

 統計に特化したモニタ。もちろんリアルタイムでの観測も可能。
 インストールすると5分置きに記録する。
 インストールしてすぐに起動するとデータベースがないかデータが足りなくてエラーになる。
 その時は、
sudo vnstat -u -i eth0
 としてデータベースを構築してあげよう。
 後は以下のオプションを指定してあげれば、さまざまな統計データが得られる。
 見ていて楽しいですね。

月別-m
週別-w
日別-d
24時間-h
top10-t
リアルタイム-l


 どんなイメージかは公式サイトが詳しいので、そちらをどうぞ。

speedometer

 時間軸に沿って転送量がグラフで流れていくという、オーソドックスな表示のモニタ。
 起動は、
~$ speedometer -tx eth0 -rx eth0



iptraf

 見た目が分かりやすい、定番のモニタ。
 起動すると、メニューから機能や設定を選べる。



iftop

 転送速度を横棒グラフで表示してくれる。
 シンプルで見やすいですね。





 以上、簡単な紹介でした。実際に使用してみれば、すぐわかると思います。どれも簡単な操作で使用できますし、直感的に扱えるかと。
 他にも、 ntop とか NetHogs とかまだまだ類似のツールがありますので試してみるのもおもしろいでしょう。

2009年2月24日火曜日

ubuntuの端末をmltermにする

 wmを icewm に変えてから日々メモリ節約に走る日々。刻むぜぇ〜ちょお刻むぜぇ〜w
 今回は惰性で使ってきた gnome-terminal を mltermに変えることにしました。
 gnome-terminalは20MB。対してmltermは5Mしかメモリを消費しません。なんと四分の一!!
 さらにスクロール速度も速く軽快に動作します。
 Unicodeの「●▲■」なども正常な幅で表示されます。(gnome-terminalでもできるがいまいち)


インストール

sudo apt-get install mlterm mlterm-tools
後はscimを使っているなら、mlterm-im-scim を。uimなら mlterm-im-uim パッケージを入れることで日本語変換がインライン入力で出来るようになります。

設定


 一応 Ctrl + 右クリックで GUIでも簡易的に編集することが出来ます。



 ですが細かい設定は ~/.mlterm/ 以下の各ファイルを編集することで行ないます。メインは、~/.mlterm/main です。以下設定例。
~/.mlterm/main の設定例。

# -*- mode: conf-unix -*-
# mlterm mail configuration
# last updated : 2009/02/24 14:02:41 JST

# 端末縦横サイズ(文字)
geometry=80x27

#ーーーーー文字関係ーーーーーーー
receive_string_via_ucs = true
# Unicode記号文字幅を半角2文字にする。
col_size_of_width_a = 2
# アンチエイリアス(Xft)時、JISX0208 の Unicode 変換に CP932 の変換テーブルを使う
use_cp932_ucs_for_xft=true
# UNICODE を適当な文字集合にmapして、UNICODE フォントを使わずに表示する
not_use_unicode_font=false
# すべての文字を UNICODE フォントだけを使って表示する
only_use_unicode_font=false
# US_ASCII の表示には、必ず ISO8859-1 フォントを使用する
iso88591_font_for_usascii=false
# DEC_SPECIAL フォントの罫線文字のグリフを動的に合成
compose_dec_special_font=false
# インプッドメソッドの設定
input_method = scim


#ーーーースクロールバーーーーー
# scrollbar_mode = right
scrollbar_mode = none
# 使いたいスクロールバーの名前
# (*simple* / sample / sample2 / next / motif / athena / mozmodern)
# scrollbar_view_name=sample2

#ーーーー色設定ーーーーーーーー
# 端末画面の前景色
# fg_color=white
# 端末画面の背景色
bg_color=#F6F0E6
# スクロールバーの前景色
# sb_fg_color=white
# スクロールバーの背景色
# sb_bg_color=black
# 紙にする画像ファイルのパス
# wall_picture
# Focus から外れたときの前景/背景色の Fade 率(百分率)
#fade_ratio=90
# 背景画像(透過処理含む)の輝度調整(百分率)
#brightness=80
"--------------------

●フォントの設定
 フォントは ~/.mlterm/aafont に。ビットマップフォントは、~/.mlterm/font に記述します。
 ~/.mlterm/aafont の設定例。
ISO10646_UCS4_1 = IPAMonaGothic-iso10646-1:100;
ISO10646_UCS4_1_BIWIDTH = IPAMonaGothic-iso10646-1:100;



色がドぎつい

 デフォルトでは色設定が原色系で目に痛いので、ubuntu の gnome-terminal のカラーテーマのTangoのような柔らかい色設定に変更します。
 ~/.mlterm/color に以下を記述。
black=#2e3436
red=#cc0000
green=#4e9a06
yellow=#c4a000
blue=#3465a4
magenta=#75507b
cyan=#06989a
white=#d3d7cf
hl_black=#555753
hl_red=#ef2929
hl_green=#8ae234
hl_yellow=#fce94f
hl_blue=#729fcf
hl_magenta=#ad7fa8
hl_cyan=#34e2e2
hl_white=#eeeeec


まとめ


 スクロールバーは表示していません。screenを使っているので。
 起動時に mlterm -j genuine として、デーモンモードで起動しています。
 ランチャーなどからは、mlclient を起動するようにしています。
 以上でgnome端末とまったく違和感のない同じ見た目までmltermを持っていくことが出来ました。
 メモリの使用量が四分の一になって、しかも軽快に動くとは素晴らしい。

 実はかなり前からmltermは入れていたんですが、ずるずるとgnome端末を使い続けて今日まできました。それがicewmを入れてから省メモリに目覚め、mltermを本格的に使ってみると、あらいいじゃな〜いとw
 こんなことならもっと早くに移行していればorz

参考

2009年2月22日日曜日

PPAに mlterm 256色対応版をアップしました

 PPA に多言語対応端末エミュレータ mlterm 256色 対応版をアップしました。
 よかったらどうぞ。

https://launchpad.net/~yama-natuki/+archive/ppa

2009年2月19日木曜日

icewm のいろいろな テーマ

 icewm は 最初から theme が豊富なのも良いところです。
sudo apt-get install icewm-themes
とすれば、最初からたくさんのテーマがインストールされます。
 それ以外にもこちらなどからもテーマがダウンロード出来ます。
 ダウンロードしてきたテーマは、~/.icewm/themes 以下に展開すればOK。

 いくつか私が気に入っているテーマを紹介します。
 基本的にダークなテーマは見にくいので嫌いです。奇を衒ったものも好きではありませんので、かなり偏った紹介なのですけどねw



●IceBuntu

  これでしょう。基本ですw
  赤茶けたアフリカの大地を彷彿とさせる(ry



●BubblyBlue
  ばぶりー



●eiskristall
  落ち着いた色調はいい・・・



●lice
  これもシンプルでクール。



●PlastiCrack
  プラスチックスタイル



●SmoothIceHybrid
  どこかで見たような。

2009年2月18日水曜日

icewm に音量ボタンを追加する

 タスクトレイに常駐しているスピーカーのアイコンのあれです。
 当初 AbsVolumeを使用していたのですが、常駐型ではないため、起動にワンテンポ遅れる感じでした。
 そこで今回 gvtray に変更しました。

インストール

sudo apt-get install python-alsaaudio python-gnome2-extras
wget http://gtk-tray-utils.googlecode.com/svn/trunk/gvtray-1.1.tar.gz
tar zxvf gvtray-1.1.tar.gz
cd gvtray-1.1
sudo mkdir /usr/share/gvtray
sudo cp gvtray /usr/bin
sudo cp gvtray.py /usr/share/gvtray/
sudo cp -r gvtray_about/ /usr/share/gvtray/gvtray_about


起動するとタスクトレイに数字のアイコンが追加されます。
クリックするとなじみの音量調節バーが。



 後は ~/.icewm/startup に書いておけば起動時に自動的に起動されます。