2009年6月17日水曜日

Vim: 同じ高さのインデントに移動



プロトコルが複雑なデバドラ等のコードの場合、switch-case文が長かったりネストしていたりと一画面に収まらない場面がある。そんな時、同レベルのcase文を追いたい場合、通常なら「case」まで移動して「*」や「#」でジャンプしたりする。
でもこれだと、検索レジスタ「"/」を汚してしまうし、ネストしたcase文には対応できない。

そこで、同じ高さのインデントに移動する術を期待し、Vimの本家で「move same indent」というフレーズで検索したら見事ヒット!
一行でしかもキーマップまで書けてしまうとは。。

このWikiには「Alt-,/.」に割り当てているが、しかしMeta(Alt)キーがうまく動作しない。
原因はここにあるようにgnome-terminalがAltの前にESCを付けてしまうのが問題らしい。


よって、以下の設定にした。
nn <C-k> k:call search ("^". matchstr (getline (line (".")+ 1), '\(\s*\)') ."\\S", 'b')<CR>^
nn <C-j> :call search ("^". matchstr (getline (line (".")), '\(\s*\)') ."\\S")<CR>^
※nnってのは:nn[TAB]で補完されるようにnnoremapの略

j/k」の上下移動にちなんで、「Ctrl-j/k」で同インデントに上下移動でき(カーソルが行頭にある必要もなし)、こっちの方がフィーリング的に合っている。
ちなみに、「Ctrl-j/k」はデフォルトでは大した機能に割り当てられておらず、またその機能には代替キーも用意されているので問題無い。


2009年6月7日日曜日

Vimスクリプト: 2HTML

ソースコードや設定ファイルをtoHTMLしてくれるVimスクリプト。しかも使用中のsyntaxに近い配色で。

Fedora10のvimにも入っている。
$ locate 2html.vim
/usr/share/vim/vim72/syntax/2html.vim
$ rpm -qf `!!`
rpm -qf `locate 2html.vim`
vim-common-7.2.148-1.fc10.i386
$ rpm -ql $(!!) |grep \.vim$ |view -
rpm -ql $(rpm -qf `locate 2html.vim`) |grep \.vim$ |view -
Vim: 標準入力から読込中...

とすると、標準でたくさんのVimスクリプトが入っているのがわかる。
気になるVimスクリプトは「gf」としてその中を覗いてみまっしょう。
「:set hidden」な状態の人は、「C-^」で検索結果に戻れるので他のスクリプトにもどんどん跳んでってください。

で、使い方だが
$ vi hello.c
:%TOhtml
hello.c.htmlという filename.htmlファイルが作成される。

ファイル内の一部分だけtoHTMLしたければ、「%(カレント・ファイル)」の代わりに Shift-Vでその部分に対し行選択してTOhtmlに渡せばよい。
:'<,'>TOhtml

保存して確認する(ファイルに落とさないとFirefox側からは読めないので)
:w |!firefox %

Vim表示に比べてちょいと蛍光色掛かって明る過ぎだけど、使用中のsyntaxに近い配色に仕上がっている。

恥ずかしながら今までは、インデント等の整形やHTMLの特殊文字の変換を一記号ずつ置換していた。。
例えば必要な範囲に対し、Shift-Vで行選択し「:'<,'>s/ /&nbsp;/g」や「:'<,'>s/^I/&nbsp;&nbsp;&nbsp;&nbsp/g」みたいな置換をいちいちしてたけど、流石はVim!そんなのとっくに用意済みで、2HTMLでは「:'<,'>TOhtml」(:TO[Tab]でOK)とするだけ!
しかも色付けまでしてくれる。無知って怖ッ!


2009年6月4日木曜日

sudo設定拡張

ここで設定したsudo設定をもう少し使いやすく拡張。

まずは、毎回パスワードを入力するのは面倒なのでその手間を省く設定。
$ sudo visudo
okap    ALL=(ALL)   ALL
           ↓
okap    ALL=(ALL)   NOPASSWD:ALL
※ちなみにデフォルトでもパスワードを入力して5分間位はパスワードは求められない

これで、「$ sudo -s」でノーパスワードでrootにもなれる。


次に、sudo時にalias設定が引き継がれない問題に対処。
Fedoraデフォルトの一般ユーザのaliasは以下のようになっている。
$ alias
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

でも、sudoをかますとalias設定が引き継がれない。
$ sudo ll
sudo: ll: command not found

なので、vi->vimのaliasも引き継がれず、
「$ sudo vi」としてもvimではなくviが起動してしまう。

そこで以下の様なおまじないをすると、上手くいくようになる。
$ sudo ll
sudo: ll: command not found
$ alias sudo='sudo '
$ sudo ll
...
この設定を~/.bashrcに書いておく。


2009年6月1日月曜日

Vim: ctags

vimでお馴染みなのctags。無いとコードが読めないくい必須のアイテム。しかし、デフォルトでは少々使い辛い部分があるのでカスタマイズ。

タグファイルの配置場所

デフォルトではカレントの「tags」か「TAGS」になっている。
:set tags?
  tags=./tags,./TAGS,tags,TAGS

これでは、階層を持ったソースコード群のトップ・ディレクトリで「ctags -R」と作成した場合、一つ下に潜った状態でviを起動したら当然タグファイルを見つけられなくなる。

かと言って、tags+=../tags,../../tags,… とかするのは現実的ではない。
そこで、~/.vimrcに以下を記述すると親ディレクトリを再帰的に/(ルート)まで探してくれるようになる。
:set tags=tags;
※正確にはタグファイルが見つかってもそのタグファイルに定義が存在しない場合は次(親ディレクトリ)のタグファイルを探しに行く

タグファイル名

上記でだいぶ使い易くなったが、もう一つ不満が。
それはgrepやgrep.vimでワイルドカード(*)指定したときにtagsファイルも検索対象になってしまい、タグ化しているので当然ヒットしてしまい判断の邪魔になる。

そこでタグファイル名をドットファイルにする。
「:set tags=」はタグファイルの場所を指定する以前にタグファイル名を指定するものなので以下のようにする。
:set tags=.tags;

すると今度は、ctagsコマンドがデフォルトで生成するタグファイル名は"tags"なので、毎度
$ ctags -f .tags
とするのは面倒になるから、~/.bashrcに以下のaliasを追加してしまう。
alias ctags='ctags -f .tags'


[今日の一言]

右のリリース・カウンタの値が増えたので、Fedora11のリリースがまた一週間伸びたようです。まぁ気長に待ちましょう。



2009年5月28日木曜日

PSP F/W アップデート

PSP-2000にUSBワンセグ・チューナを使って録画をしているのだが、F/WがVer.4.05でワンセグ録画機能が強化されているのを最近知った。



個人的に期待できる機能は以下かなぁ。

・電源OFF録画待機: 今まではスリープ状態にしておかなければならず電力のムダ
・日時指定録画予約: EPGが数時間後までしかないのでそれより先の時間の予約は出来なかった
・サイレント録画: 録画中も画面や音声が出ており通常視聴と同じ状態になりウザかった(電力もムダ)
・複数予約: 今までは一つしか予約できなかったもんで

これらで快適さが増したけど、日時指定での録画予約は面倒なので、あとはEPGが数日先までのリストを取得できれば良いなぁ(ケータイにワンセグ付いてないんで比較できないけどワンセグのEPGってこういうものなのかな?)。
それと、録画後にスリープではなくシャットダウンしてくれんと、見ようと思ったときバッテリー切れとかあるんで改善して貰いたいところ。

最近はHDDレコーダで録画したのをSDカードからケータイで見れるようになったみたいだけど同じメーカー同士の製品という限定的なので、規格ができないと手を出す気にはなれない。
でもHDDレコーダなら安定して録画できるし、そもそもモバイル機器で録画ってのが間違ってる?(自分もPSP録画は家に置いてしている)


ファームウェア・アップデート

一年ちょい前に2000系を買ったときのままなので現在のF/WはVer.3.80で、最新版はVer.5.50になっていた。

Fedora PCとUSB接続して(Mini-Bタイプはデジカメ付属のを流用)。Ver.3.80ではこのままでは自動マントされない、と言うかUSBストレージとして認識しない(デバイスリクエストに応答していない為?)

なので、PSPをUSB接続モードにすると内部のメモリスティック(MS)が自動マントされる。
※最新のVer.5.50ではこの操作は不要

$ lsusb -v
すると、Mass Storageデバイスとなっていることが分かる。
つまりPSPはPCからはMSカードリーダとして認識される。

ここにあるようにeboot.pbpってのをマウント先のpsp/game/updateに配置後、
アンマウントして取り外し、gameディレクトリに配置したんでゲームからアップデートを選択し実行。
1分位で完了。

このようにOSに依存しないアップデート方法は好感が持てる。
また、ネットワーク接続が当たり前になった現在ではソフトウェアのバグなら製品回収をしなくてもアップデートで修正可能だし、製品リリース時は最低限の機能だけに留めることにより早く市場に投入できるメリットもある。ネットワーク様様ですな。


PSPってUSB-OTG?

この様に、USBワンセグ・チューナと繋がったときはUSBホストに、Mini-BケーブルでPCと繋がったときはUSBデバイスとして振る舞うPSPはUSB-OTGってやつ?
正確にはUSBホストならデジカメとかが接続しに来てもきちんとホストの役割を果たすのはもちろん、PSP同士が繋がってもお話しできないとUSB-OTGとならないらしい。
さて、どうでしょう? まぁWi-Fi接続が一般なんで必要性はないですが。


[今日の一言]

gconf-editorで設定したEmacs風キーバインドが使えなくなっている。(テキストフィールドでCtrl-A/Eで行頭/末に移動できないとストレスが溜まる)
何かのアップデートでリセットされたのか?

$ rpm -qa --last |head -50 |view -
ん~、xkeyboard-config-1.4-8.fc10 辺りが犯人かなぁ。。
犯人はハイバネーションでした。。ハイバネート復帰後にgconfの変更を反映していないっぽい。

毎日シャットダウンしている職場PCは再設定すれば復活したんだけど、ハイバネートして使い続けている自宅PCは再起動をしないと戻らんかった。
(どの道カーネルのアップデートもあったんで久々に再起動したけど、自宅PCは起動が遅くてハイバネートじゃなきゃダメだ!!)


2009年5月24日日曜日

SCIM-Anthyセッティング ~その2~

キーバインド

今回はキーバインドについての設定。
IMエンジン -> Anty -> キーバインド を上から順に見ていく。

ON/OFF切り替え: Ctrl-jを削除
SCIM ON時にFirefoxのGoogleバーにジャンプするキーバインド(Ctrl-j)を奪うので。
それにAnthyのON/OFFは使用しないし(SCIMのON/OFFであるCtrl-Spaceのみで対応)。

以降では、
バックスペースがCtrl-h、削除がCtrl-d、確定がCtrl-j等々、、、bash操作に習っている点は非常にGood!
移動系コマンドも、最初/最後へ移動がCtrl-a/eだし、前方/後方へ移動もCtrl-f/bだし、文節間の移動も同様とbash操作に慣れている人にも対応している(M$なユーザだと、HomeとかRightとかの方を使うのだろうが)。

文節を縮めるがCtrl-i、文節を広げるがCtrl-o ってのもCannaチックで良い!

あとは以下を修正。Ctrl系ユーザとしてはタイピング中にFunctionキーを使うのは(ホームポジションから離れるという意味で)有り得ないので変更。
ひらがな変換: Ctrl-c
全角英数変換: Ctrl-u
英数変換: Ctrl-l

Cannaの場合Ctrl-pで最後の候補が"カタカナ"だったが、AnthyではSpaceで変換を開始してからでないと効かないのが面倒。"ひらかな"に対してはCtrl-cを使っていた。
全角/半角英数変換で「ぃぬx」はそれぞれ以下のような変換を辿る。
Ctrl-u: linux → LINUX → Linux
Ctrl-l: linux → LINUX → Linux




[今日の一言]

このblogの右側にFedoraリリース・カウントダウンのバナーを付けているのだけど、今まで順調にカウントダウンしていると思ったら、先週一週間程増えてた。。まぁ毎度のことなので。

ちなみに、F11ではSCIMがiBusとかというのに代わり、キーバインド変更があまりできないとのことなのでちと心配。



2009年5月17日日曜日

SCIM-Anthyセッティング ~その1~

今日は日本語入力環境の設定のお話し。

半角/全角キーを無効に

EscやTabと打ち間違った時にAnthyが起動してしまうのがウザいので、半角/全角を無効にする(何もデフォルトをM$ OSっぽくしなくても…)。
元々はkinput2+Cannaユーザなので、Shift+SpaceでON/OFFしてたが、SCIM+Anthyになったのを機にControl+Spaceに矯正。(お蔭でShift+Spaceはブラウザとかのバックスクロールに使えるようになった)
フロントエンド -> 全体設定 -> ホットキー -> 開始/終了
Zenkaku_Hankaku,Alt+grave,Control+space
    ↓
Control+space


ツールバーは非表示に

これまたM$ OSライクにしたウザさ!
Cannaユーザだったので、ON時に毎度ツールバーが表示されるのが凄くウザて邪魔!
なのでソッコー非表示に。王冠アイコンを右クリック「ツールバーを隠す」にチェック!
(デフォルトをM$ OSっぽくするのは辞めてもらいたいものだ!)

ただ、各ウィンドウの日本語入力ON/OFFはGnomeパネルの右上の「キーボード」と「王冠」アイコンで判断するしかないのが難点。Cannaの様に各ウィンドウの左下に「あ」表示がユーザー・フレンドリーかと思うのだが、なぜ真似しなかったんだろう?(M$ OSのIMライクに作ったからか…どんどん使い難くなって行く…)


全角記号は使わん

全角スペースなんて使わんのでAnthy時でもスペースは全て半角スペースに。
IMエンジン -> Anthy -> 記号等 -> 空白のタイプ -> 半角
※この状態でもShift+Spaceで全角スペース入力は可能

記号や数字もデフォルトは半角がいい。
IMエンジン -> Anty -> ローマ字入力
「記号は半角で入力する」「数字は半角で入力する」にチェック
※この状態でも変換で全角は選択可能


予測変換

Anthyが唯一Cannaより気に入った点がこの予測変換機能!
日本語入力中にTabを押すとその文字から始まる最近入力した単語の一覧が表示される。
更に IMエンジン -> Anty -> 予測 -> 文字入力中に予測候補を表示する にチェックするとTabを叩かずとも候補をsuggestionしてくれるようになる。

"プログラム"とか"コンパイル"とか長い単語を何度も入力する場合には手放せない機能。
今では、日本語入力に欠かせない存在に!


いただけない点

「OS」と「C言語」のどちらかの変換しかできない有り得なさ。
IMエンジン -> Anty -> ローマ字入力 -> 大文字入力時に一時ASCIIモードに切り替える
が有効になっている場合、「OS」は変換できるが「C言語」は「Cgenngo」になってしまう。
逆に無効にした場合は、「C言語」は変換可能になるが、「OS」は「おS」となってしまう。
アホです。

単語の先頭がアルファベットの大文字で始まろうが何だろうが普通に変換できるようにすべきで、余計な機能を追加したからの弊害。


[今日の一言]

エコポイントってのが始まった。
でもこの制度って消費電力が大きい製品程ポイントが貰えるっていう矛盾した制度。いつものように場当たり的に考えたのだろう。
「え~このーエコポイントのエコとはエコロジーのエコではなくエコノミーのエコでして…」と生太郎は言うでしょう。
液晶TVも大画面化が進んだ結果ブラウン管より消費電力が増えてる有様。。



2009年5月10日日曜日

gnome-terminalセッティング

bashやvimそしてminicom等は gnome-terminal上で動作するので、使い易くする為きちんと設定しておく必要がある。

キーボード・ショートカット

「次/前のタブへ切り替える」の Ctrl-Page_Down/Page_UpShift-→/← に変更。
通常Gnomeアプリのタブ切り替えは Ctrl-Page_Down/Page_Up になっているが
ワークスペースの切り替えが Ctrl-Alt-→/←
仮想端末(Ctrl-Alt-F2とかで移動)の切り替えが Alt-→/← なので
端末タブの切り替えとして Shift-→/← に割り当てるのが自然というか使い易い。

それに合わせて、タブの左右位置移動が Shift-Ctrl-Page_Down/Page_Up になっているところを、
ウィンドウのワークスペース移動の Shift-Ctrl-Alt-→/← に習い、
Shift-Ctrl-→/← に変更。

あと、メニューのアクセス・キーやショートカット・キーがbashのAlt系キーバインドを奪たりするので無効にする。
M$なユーザでよくGUIツールをマウスを使わずAltキーとかでメニューにアクセスし操作をしている人を見掛けるが、だったらCUIにしようよとツッコミたくなる。。┐('〜`;)┌

最後はヘルプの起動のショートカット: F1 を無効にする。
Escと間違って良くタイプしてしまいヘルプが起動するのがウザかったので。
(ちなみにこの状態でVim使用中にF1を押すとVimのhelpが起動する)


コピペの設定

bashやvimで、マウスを使用せざるを得ない場合の為に設定しておく。

ダブルクリック(単語)やトリプルクリック(一行)でコピって、ミドルクリックでペーストするのがX Window Systemの基本だが、gnome-terminalの場合そのダブルクリックで選択される単語の定義を動的に変更できる。
デフォルトでは「-A-Za-z0-9,./?%&#:_」となっており、これら記号は単語としてみなされる。
そこで 単語単位で選択する文字 から「,」や「#」、「:」を取り、「~」を加える。
すると「:」なら、ifconfig結果やscpコマンドラインからIPアドレスをダブルクリックでコピる場合「:」で区切られるようになり、IPアドレスだけがコピーできる(逆にIPv6の場合は上手くいかなくなるが使わないので)。
,」は、Cソースでの変数名をコピる時直後の「,」が含まれなくなるし、「#」なら、シェルスクリプトのコメントされた変数のみをコピるのに有効。
~」はホームdirを含んだパス(~/Desktop/XXXとか)をコピるのに使う。


UI

上記設定が完了したらもうメニューバーは不要なので非表示にして少しでも広くする。
設定は「プロファイルの設定」から「新しい端末の中にメニューバーをデフォルトで表示する」のチェックを外す。
ちなみに、右クリックかメニューキー(右Ctrlの隣)からのメニューで、表示/非表示の切り替えが可能。




その他

・ビープ音はうるさいので止める
・自宅PCはメモリ足んないので設定しないけど、余裕があればスクロールバック・サイズを512行より大きくする(ちなみに会社PCはメモリ2GB積んでるんで4096行にしてある)。



2009年5月1日金曜日

Firefox追加設定

前回はGoogle Toolbarを導入したが、その他のアドオンやプラグインを導入する。

Flashプラグイン

Adobeのyumリポジトリをインストール
$ sudo rpm -ivh http://linuxdownload.adobe.com/adobe-release/adobe-release-i386-1.0-1.noarch.rpm

Flashプラグインのパッケージ名を確認
$ sudo yum list flash*
...
Available Packages
flash-plugin.i386 10.0.22.87-release adobe-linux-i386
flashrom.i386 0-0.18.20090414svn4107.fc10 updates
...

Flashプラグインのインストール
$ sudo yum -y install flash-plugin

ここで追加したAdobeリポジトリが以降のyum使用時に毎回検索対象になるのを防ぐ為にyumリポジトリからを外しておく。
$ sudo vi /etc/yum.repos.d/adobe-linux-i386.repo
...
enabled=0
...


Flashblock


Flashプラグインをインストールしたが、今度はそのflashをブロックするアドオンを導入する。
スペックが低いマシンや低速回線等の環境での処理緩和に役立つ。
それにFlashをあちこちに使いまくる賑やか過ぎるサイトを見るのはしんどいんでブロック!
ここいら辺からDLしインストール。

ブロックしたFlashは三角形の再生マークになるので、見たい場合はそこをクリックすれば再生できる。
Flashが散らばっている場合でも見ているサイト内の全てのFlashの有効/無効を切り替えるボタンがあるので、一つ一つクリックして再生する必要もない。
※切り替えボタンの追加は、メニューバーの右クリックのカスタマイズから行える



また、ホワイトリストという許可するサイトを予め登録できる機能もあるので、Flashが目障りだと思う人にもお勧めかと。


Tab Wheel Scroll


Gnomeアプリのようにタブ上でスクロールすることでアクティブ・タブの切り替えが行えるアドオンがTab Wheel Scroll

Gnomeアプリに合わせて「下スクロールは右に移動」を選択。
「タブバーの末端を巡ってスクロールする。」のチェックは外す。

2009年4月25日土曜日

Firefoxセッティング

ブックマークの移行

Firefox3系のブックマークはbookmarks.htmlではなくplaces.sqliteになっている(DB化され高速化を図った模様)。
F8 → F9時がちょうど FF2 → FF3の移行期だったので前回Fedoraアップグレード時は少しハマったけど、今回も忘れていた…

いつものようにF9領域をマウントしてコピーする。
$ sudo mount /dev/sda3 /mnt/
$ cp /mnt/home/okap/.mozilla/firefox/xxx.default/places.sqlite ~/.mozilla/firefox/yyy.default/
$ sudo umount /mnt


about:config

・Googleバーからの検索結果を新しいTabで開く
    browser.search.openintab: false → true
通常はそのページで検索結果が開かれてしまい、Alt+Enterとすると検索結果を新しいTabで開いてくれるが、いちいち面倒なので設定する。この設定をすると今度は逆にAlt+Enterでは現在のTabに検索結果が表示さるようになる。

ここで設定したマウスだと両サイドボタンが「進む/戻る」に、第2ホイールがGnomeアプリと同様横スクロールになっている。(FF2系だと第2ホイールのイベントが無視されてしまうので、FF3は速度以外にもいろいろ使い易く進化している)

しかし、FirefoxがFirebirdやPhoenixと呼ばれたM$ OS版が無かった頃のUIはNetscape Navigatorライクな操作性で良かった。(初めて使ったWebブラウザはネスケ。当時のUNIXやLinuxのデフォルト的存在だった)
例えば、Alt+スクロールで「進む/戻る」、Shift+スクロールで「1ページ分スクロール」だったのに変わってしまったのだ!

なので、ネスケ・ライクな操作に戻す為次の設定を施す。
・Alt+スクロールで「進む/戻る」
    mousewheel.withaltkey.action: 0 → 2

・Shift+スクロールで「1ページ分スクロール」
    mousewheel.withshiftkey.action: 2 → 1
※ライブブックマークの長いエントリーでスクロールが必要な場合にも有効

with*key.actionの各値の動作は以下の通り。







0:無視(通常スクロール)?
1:その方向(縦なら縦、横なら横)へのスクロール量を1ページ分に
2:進む/戻る
3:フォントサイズの拡大/縮小

・同様に横スクロール時も、+Shiftで1ページ横にスクロールできるように
    mousewheel.horizscroll.withshiftkey.action: 0 → 1
HTMLソースのような横長なものをブラウズするのに重宝する。

Google Toolbar

GoogleバーはFirefoxのを使用する。
オプションは「検索」タブでは[ハイライト]、[検索]、[上へ]ボタンを有効にする。
「ツール」タブでは[翻訳]以外のチェックは全て外してしまう。

つまり、Google Toolbarで自分が必要なのは以下の機能。
・検索フレーズのハイライト(マーカー)ボタン
・検索フレーズのボタン化
・URLの一つ上のディレクトリに移動できるボタン
・マウス・オーバー翻訳


UI変更

メニューバー、ナビゲーションバー、ブックマークバー、Google Toolbarとメニューが4段になり縦に幅を取るので、不要なアイコンを取っ払いスッキリ(2段に)させる。
検索バーも広くなった(検索バーはCtrl-Jで移動できるFirefoxのを使用する)。

※「RSS」ってボタンはライブブックマークを集めたもので、RSSなニュースサイトのIndexを確認するのに便利


検索バーを日本語サイトに

Fedora付属のFFの検索バーは「ウェブ全体から検索」が使用されデフォルトでは「日本語のページを検索」になっていない。

デフォルトを退避して、F9で使用していたものをコピー。
$ sudo mv /usr/lib/firefox-3.0.9/searchplugins !#$.org
sudo mv /usr/lib/firefox-3.0.9/searchplugins /usr/lib/firefox-3.0.9/searchplugins.org
$ sudo mount /dev/sda3 /mnt/
$ sudo cp -a /mnt/usr/lib/firefox-3.0.9/searchplugins /usr/lib/firefox-3.0.9/
$ sudo umount /mnt
※これらファイルがない場合は本家から日本語版FFをDLし、展開したfirefox/searchpluginsを拝借すればよい

Google以外にもAmazonやWikipediaも日本語サイトからの検索が可能になる。
$ ls firefox/searchplugins/
amazon-jp.xml        oshiete-goo.xml   yahoo-jp-auctions.xml
creativecommons.xml  rakuten.xml       yahoo-jp.xml
google-jp.xml        wikipedia-ja.xml

2009年4月23日木曜日

Athlon X2 と Neo

Athlon X2

省電力タイプの3250eを搭載したベアボーンMINIX-1000が明日出るみたい。サイズはB5に近い感じかな。
15WのAthlon Neoはシングルコアなのでこれもありかとも思っている。
このベアボーンはCPU付きなので、メモリとHDDで+1万円弱で組めることになる。LFBも128MB搭載している模様。

これを買うと今のメインマシン(Athlon XP)より以下の性能アップが見込めるの。
CPU: 32bit Single Core → 64bit Dual Core
Memory: DDR 512MB → DDR2 4GB(予定)
HDD: IDE → SATA
Power: 省電力モデルなので22Wに!
Size: ベアボーンなので省スペースに!
(現メインマシンどんだけショボいねん。。)

しかしメインマシンにするにも、幾つか気になる点も。
1) 両サイドの4cm角の小さいファンがうるさくないか?
2) HDDは2.5インチベイしかないので、5400rpmとなりメインマシンとしてどうかな?
3) SO-DIMMってのが…

ん~微妙です。Phenom IIの省電力版がいつ出るかにも依るのでもう少し様子見かな。

Athlon Neo

以前書いたhp製のAthlon Neo搭載のノートPCが日本でも発売になるそうな。

12.1インチも1.7kgってことでモバイル型ではないけれどNetbookの上位モデル並の価格で買える。というか Athlon Neo 搭載のって現在では唯一なので貴重。

でも、M$-Office無しモデルがあるなら、M$-OS無しモデルもあって欲しい。。だって、-1万円とかなら魅力でしょ!
へんてこOSが強制的に付いてくるので今回はパスかな。(付いてこなけりゃ買ったのに。。)

なお、上位モデルには Athlon X2 や Turion X2 もあるようです。


2009年4月20日月曜日

Vimアドオン: grep.vim

前回前々回とmanpageview.vimを紹介したのでアドオン繋がりで今回はgrep.vim。

アドオンを一つだけ選ぶとすれば、このgrep.vimというくらい重宝しているアドオン。これさえあれば他はデフォルト機能だけでやっていけるというくらいの代物!

インストール

ここからDL。
DLしたgrep.vimを ~/.vim/plugin/ 以下に配置すれば完了。

検索対象ファイルに対して検索するには
:Grep search_phase search_file
再帰検索の場合は
:Rgrep search_phase search_path

結果がQuickfix(下10行が水平分割される)で表示され、目的の行で「Enter」を押せばその場所に跳べる(もちろんQuickfixリスト内もVim操作が可能なので、検索結果の最後に跳びたければ「G」でOK)。

しかし、これでは使い勝手がVimの内部コマンド(:grep)と検索結果がQuickfix以外さほど変わりない。
そう、Vimの基本ポリシー"カーソル下の単語に対して~"を満たしていないのだ。

キーマップ設定

そこでDLページの説明にもあるように、キーマップの設定を行う。
Vimでは当然既に通常キー及びそれらにShiftやCtrlを加えたキーバインドは埋まっている。なのでLinuxでは大して使用しないF3やF4を使うことにする。

~/.vimrcに以下を追加する。
nnoremap <silent> <F3> :Grep<CR>
nnoremap <silent> <F4> :Rgrep<CR>

すると、「F3」でカーソル下の単語(ここではsignal_names)が :Grepの第1引数に入り
Search for pattern: signal_names
Enter」でカレントDirの全ファイル(*)が第2引数に入る。
Search in files: *

これで、「F3」「Enter」「Enter」でカーソル下の単語をカレントDirの全ファイルから検索し、Quickfixリスト内に表示された結果から「Enter」で目的の場所へ跳べるようになる。


更に「C-W Enter」とすると水平分割で元のコードを残したまま目的の場所へ跳べる。



2009年4月19日日曜日

manpageviewの補足

前回のmanpageviewについての補足。

アンインストール方法

以前はVim7.2以上という制限があり(現在はVim7.0以上となっているが)、かつFedora9デフォルトのVim7.1.Xだったので、起動時にエラーが出て使えずアンインストールする必要があった。
しかし、アンインストーラがなく複数のファイルが散らばってインストールされるので、他のアドオンを使っている場合は、~/.vim/以下をバッサリと言う訳にはいかない。

そこで、アンインストール方法。
インストールした日時で判別する。その当日ならば以下でインストールされるファイル群を見つけられるので、xargsで受けて消せばよい。
$ find .vim/ -mtime 0 -type f
.vim/.VimballRecord
.vim/autoload/manpageview.vim
.vim/syntax/manphp.vim
.vim/syntax/info.vim
.vim/syntax/man.vim
.vim/syntax/mankey.vim
.vim/plugin/manpageviewPlugin.vim
.vim/doc/tags
.vim/doc/manpageview.txt

水平分割の割合

K」でコードを水平分割してmanを開けるようになったが、その際デフォルトではmanがほとんど占めてしまいコードが4行しか見えなくなってしまう。
好みの問題だと思うけど自分はもう少しコード部分を残してmanを見たいので、以下のように変更。
[autoload/manpageview.vim:394]
g:manpageview_winopen == "hsplit"
...
    3wincmd -
...
水平分割は horizontal split なので、"hsplit"の部分
    3wincmd -
       ↓
    9wincmd -
これで10行分のコードは表示されるようになる。

man中のmanからの戻り

man中から更に別のmanに跳んだ後、「C-o」や「C-^」で戻れない。
:lsすると前のmanが代替ファイル(#)に入っていないのが原因のようだけど回避策今のところ不明。まだまだ修行がたりましぇん。。



2009年4月15日水曜日

Vimアドオン: manpageview

前回紹介した「K」でカーソル下の単語のmanを引く方法ですが、ただmanコマンドを起動しているだけなので、いくつか不満があり(そりゃmanのページャがVimでないのでストレスが溜まるってもんです!)今回はそれらを補ってくれるアドオンを紹介しちゃいまっす。

不満点その1

C-w K」としても水平分割してmanを開いてくれず、コーディングしながらmanを見る場合、複雑な型だったりすると一度に覚えきれずmanとコードを行ったり来たりしなくてはならなくなる。
タグジャンプの場合なら「C-w C-]」とすれば水平分割して定義場所に跳んでくれるのに。

ちなみにEmacsではmanにしてもgdbにしても水平分割が基本みたい。ただし、Vimのように"K"一文字で開いてくれる訳ではなさそう。このポリシーの違いでVim派なだけであって、Emacsの方が優れているとかいないとかいう優劣を付ける気はさらさらない(まぁどちらも同等の機能を有しており、片方で出来ることはもう片方でも出来るはずなので)。
それに複数あることは選べる自由があるということで良い事である。GnomeとKDEとかもね。

→ このmanpageviewというアドオンを入れると、「K」とするだけで(デフォルトで)水平分割してmanを開いてくれるようになる!

不満点その2

デフォルトの「K」だと、単にmanコマンドに制御を移しているだけなのでmanのページャが起動される為、Vim操作が出来ない。Vim操作が出来ないとman内で「*」検索ができないし、man中の説明に出てくるコマンドや標準関数のmanを更に引きたい場合に「K」コマンドが使えない。

→ manpageviewでは、manのページャがVimになるので上記操作が可能になる!

不満点その3

上記に関連するがページャがVimでない為、必要なインクルード・ファイルを確認したとき、"#include~"を「yy」でコピれない!
散々Vimでマウスを使うのはNGと言ってきましたが、このアドオンを知るまでは自分もこの時ばかりは渋々マウスでコピペしてました(もちろん納得はいかずこのアドオンを見つけるに至った)。

→ manpageviewでは、以下でコピペできるようになる!
インクルード・ファイルの行にカーソルを持って行き
yy」でヤンク(コピー)
C-w C-w」でフォーカス・ウィンドウをコードの方に切り替えて
gg」でソースの先頭行に移動して
}」でインクルード・ブロックの最下行に移動して
P」で貼り付けて
d0」で前の空白を消去(インデントを揃える)

インストール

インストール方法はここよりmanpageview.vba.gzをDLして、そのページにもあるように
$ vim manpageview.vba.gz
   :so %
   :q
とする。

普通のアドオンは~/vim/plugin/に配置すれば良いだけだが、manpageviewはいろいろ突っ込む必要があり、インストーラとしてVimスクリプトを用意してくれているので、インストール方法が異なる。
$ tree ~/.vim/
.vim/
|-- autoload
|   `-- manpageview.vim
|-- doc
|   |-- manpageview.txt
|   `-- tags
|-- plugin
|   `-- manpageviewPlugin.vim
`-- syntax
    |-- info.vim
    |-- man.vim
    |-- mankey.vim
    `-- manphp.vim

4 directories, 8 files




2009年4月14日火曜日

Vim: 「K」 カーソル下のフレーズのmanを引く

またまたカーソル下の単語に対してシリーズ。今回はmanを引く方法。
スクリプトを読んでいるときコマンドやそのオプション、Cのコードを読んでいるとき標準関数の引数、を調べたくなった場合、またコーディング中では標準関数の使用するヘッダ・ファイルを知りたい場合などでmanを引くことが良くあると思う。
ここでも、別端末にコピペしてmanを引くなんて行為はVimでは御法度!

Vimの正しい使い方は、そのフレーズ上にカーソルを持って行き、「K」を押す。これだけ!!
すると、そのmanが開く。これだけでもコードリーディングに集中できるようになるでしょう!

コードに戻る場合は、単にmanを実行中なだけなのでman操作に従い「q」を押しmanを終了させ、その後「続けるにはENTERを押すかコマンドを入力してください」と表示されるので、Enterを押せば良い。


ちなみに、manで良くあるFAQとしてprintf(1)とprintf(3)の引き方だが、コマンドラインではセクション番号を指定しない場合小さい方が優先される。
$ man printf
とするとコマンド(セクション1)のprintfのmanが開く。
標準関数(セクション3)のprintfのmanを開くには次のようにセクション番号を指定する必要がある。
$ man 3 printf

Vimの場合も同様で、printf上で「K」を押すとprintf(1)のmanが表示されてしまう。そこでprintf(3)のmanを表示したい場合は、「3K」とセクション番号を頭に付ける。

この操作方法は、「10j」とすると「j」10回分を意味するのと同じように、数値を指定したい時のVim操作の基本に沿っていると言える。



2009年4月12日日曜日

ページャとしてのview

UNIX系コマンドは結果を標準出力に出力するのが一般的だ。その出力量が端末の画面範囲を越えた場合パイプ経由でページャを使用することが多いだろう。
そこで皆さんはページャに何をお使いだろうか? more?less?lv?私は当然viewです!
それには単にVimerだからという以外にちゃんとした理由がある。

moreやlessやlvはページャなのでデフォルトで標準入力からの入力に対応してるが、Vimでは「-」というオプション(これはtarのと同じ)と共に起動すれば可能。
$ ps ax | view -


で、なぜVimかだが、今まで(+これから)紹介してきた機能が使えるからだ!
more等他のページャとエディタであるVimが決定的に異なるのは、カーソルという概念があるか否かである。
Vimの特徴であるカーソル下の単語に対しての検索やファイル・オープンが使えると、マウスの出番は廻って来ずに済む。


「*」の場合

例えば、マルチプロセスなプログラムのシステムコールをトレースした場合、ここで紹介した*」検索を使えば、同じPIDを追いたい時に先頭のPID上で「*」を押せば素早く追える。
*」が単語を表す正規表現を含んでいたことを思い出せば、ディスクリプ番号のみの検索も容易である。
$ strace -fF multi_process 2>&1 | view -
straceの場合はカラー表示にもなる!

また、objdump等でアドレスを追っていく場合でも「g*」で簡単に追える。
$ objdump -d my_prog | view -
更に関数名からtagジャンプもできる!



「gf」の場合

極めつけは、grepとの連携!
grepでソースコードやスクリプト、設定ファイル等を検索する場合、検索結果をVimで受けることで幸せになれる。

前回紹介したように「gf」とすれば、カーソル下のファイルが開けるのであった。そしてgrep結果の先頭にはファイルパスが! そう、検索結果から該当ファイルにジャンプできるのだ。
$ grep -nr pthread_ * | view -
再帰検索でも相対パスで表示されるので問題なく開ける。

だだし、上記「gf」だとファイルはオープンできるが、grepが出力する行番号にまでは跳んでくれない。
そこで、「gf」の代わりに「gF」を使うと、今度はちゃんと該当行にまで跳んでくれるようになる!

なお、標準入力から「view -」で受け取りファイルにジャンプ後「Ctrl-O」で検索結果に戻ろうとしても空ファイルになってしまう。これを回避したい場合は「:set hidden」な状態にしておけばOK!

さらに、開いたファイルの上でタグジャンプ等の移動コマンドを多用する場合など移動履歴のスタックが増え最初の検索結果に戻るのが大変になりそうな時は「Ctrl-W gF」で新規タブとして開いてから跳んでいくとよい。



2009年4月10日金曜日

Vim: 「gf」 カーソル下のファイルをオープン

前回に引き続きカーソル下の単語がある場合のTips。カーソル下の単語がファイルパスのとき「gf」とするとそのファイルをオープンできる。これはスクリプトを読んでいる時に出てくるファイルパスやCのインクルード・ファイルを見たいときに便利。
なので、端末をもう一つ開いてマウスでコピペしてという使い方はVimの正しい使い方ではない!


スクリプト

例えば、~/.bash_profile を view すると ~/.bashrc を読み込んでいる箇所がある。スクリプトを読む側としてはこの ~/.bashrc で何をしているのか気になるところだ。そこで ~/.bashrc 上にカーソルを持って行き「gf」と押してみよう。すると ~/.bashrc を開いてジャンプしてくれる!
$ view .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/binexport PATH


ジャンプした先の ~/.bashrc 内では更に /etc/bashrc を読み込んでいる。なので更にそこにカーソルを持って行き「gf」を押すと見事 /etc/bashrc にまで跳んでくれるのでっす!

戻る場合は、「Ctrl-^」や「Ctrl-O」を使う。(厳密には「Ctrl-O」は前のファイルに戻るという訳ではなく、直前のカーソル位置に戻る。一方、「Ctrl-^」は直前のファイルに戻るので、連続して実行すると2つのファイルを行ったり来たりしてしまい最初に開いたファイルには戻れない)
よって、/etc/bashrc まで跳んだ場合は「Ctrl-O」を2度押せば元の ~/.bash_profile に戻って来れるでしょう。


タブで開く

上述のように「gf」として開いて行った場合、最初の方に開いていたファイルに戻る為には辿ったスタックを一つ一つ戻る必要があり面倒に思うことがある。
そこで、「Ctrl-W gf」とすると、開こうとするカーソル下のファイルをタブで開いてくれる。
タブ間の移動は「gt」もしくは「gT」で行い、閉じる場合は普段通りに「:q」とする。

でも、開いていたファイルの左側のタブに開くのが違和感あり。感覚的に新規タブって右側でしょ?


Cコード

Cのコードの場合、プリプロセスで#includeされるヘッダー・ファイルの確認時等に使用できる。
「<>」で囲まれた標準ライブラリ関数のヘッダー・ファイルや「""」で囲まれたローカルなヘッダー・ファイルを開き定義等を確認したい場合も、カーソル下に持って行き「gf」とすればよい。

ちなみにインクルード・ファイルの検索パス設定は以下で確認できる。
:set path?
   ↓
  path=.,/usr/include,,
デフォルトではカレントdirと標準インクルードパスが設定されている。

従って、gccの「-I」でインクルードdirを指定してコンパイルするプログラムの場合は、この"path"に追加すれば「gf」でオープン出来るようになる。
また、クロスコンパイルする場合も検索パスにそのコンパイラの標準インクルードパスを加えればよい。


まとめ

このように、Vimでは気になったファイルパス記述があった場合、新たな端末を開いてファイルパスをマウスでコピペして別途開くという一連の面倒な作業を軽減してくれる(一度きり操作だったら苦にはならないとは思うけど何度も繰り返してたら地獄でしょ)。
何せマウスを使う行為は一度キーボードから手を離なし再度ホーム・ポジションまで持って来なくてはならないので、どうしても遅くなってしまうものだから。。


2009年4月9日木曜日

Vim: 「*」/「#」 カーソル下のフレーズを検索

Vimの好きなところはいくつもある。個人的な見解だがVi系ってキーを打たずに済むポリシーのように感じる。キータイプが遅い自分としてはそこが一番気に入っている。
キーを打たないとは、カーソル下の単語に何かをするのである。
その何かとは、例えば検索だったり、ファイルパスだったり、manだったりする。

今回はその中で「検索」についてのTips(まぁVi系の基本操作の部類に入ると思うけれど)。
検索したいフレーズがあった場合マウスでその単語をコピペして検索してませんか? Vim(gVimを除く)においてマウスを使う行為はVimを冒涜していると言っても過言ではないかもしれません(笑
なぜならVimではマウスなんて使う必要がないのだから!

検索したいフレーズにカーソルを持って行き(もちろんジャンプ系コマンドで素早く。矢印キー連打なんて厳禁ですぞ!)、おもむろに「*」を叩いて見よう。すると次の検索対象にジャンプすると共に他の検索対象がハイライトされるでしょう。次のに移動したけりゃ「n」、前のに移動したけりゃ「N」を押せばよい。

また、「*」が正順方向に検索したのに対し「#」を使うと逆順方向に検索する。n/Nの動作も逆になる。


ちなみにVimの最下行のステータス・ラインに現在検索中のフレーズが表示されるが、お気付きのように「\<\>」に囲まれた正規表現の「単語」になっている。
よって"proc"にヒットしても"process"にはヒットしないので目的の単語が素早く見つけられる。これはループカウンタによく用いられる「i」とか一文字の変数名等を検索するのに便利。

この正規表現が邪魔な場合は頭に「g」を付ける。「g*」とするとステータス行(?)にも上記の正規表現は付かず"proc"で検索しても"process"にもヒットするようになる。「g#」も同様に使える。


このように検索したい時は単語を打つ必要が無く、その単語上にカーソルを持って行き「*」を押して「n」を押していけば良いのである。ん~楽チン。


2009年4月8日水曜日

AMD派

自宅には3台の(古い)PCがある。買った順番にDuron, Athlon XP, Geode LXと全てAMD製のものだ。
いずれもメモリ512MBで頑張っている。メインマシンはAthlon XPのやつ。
も~5年以上前のものでいい加減買い替えたいが、自作して自分で面倒見てるので全然ガタが来る気配がなく現役でピンピンしているのだ。

でも今年は買うでー。何せDDR2のメモリやSATAのHDDなんて持っていない。。一世代通り越してしまった感がある。

メインマシン

Phenom II(AM3)のベアボーンにしたい。ベアボーン・タイプの電源容量では今のPhenom IIではキツいと思うので低消費電力版を待っているところ。来月辺りに発表があるとの噂なので期待。
ベアボーンはShuttle製かなぁ。でもPhenom版のはバカ高かったのでPhenom II(AM3)版もちと心配。
メモリは4GB(←今の8倍っス!)積んで仮想化技術を体験するぞぃ!

ネットブック

当然ノートPCなんて持ってない。以前までの普通のノートPCは高いだけで魅力無しだったが、最近のネットブックは価格に加え小型軽量化で欲しくなってきた。

Athlon Neoっていう選択肢もあるが今の日本じゃ手に入らなそうなので、Intel製のAtomに浮気するしかなさそー。
で、どれを狙っているかというと現在の日本で唯一Linux(Ubuntu)モデルがあるDellのInspiron mini(9か12)しか選択肢はない。。だって使わんM$なOSに絶対金払いたくないでしょう!!
自慢じゃなけどM$に献金したことは一度もない(だからいつも自作しているんだけど)っていうかソフトに金払ったことがないOSSな生活をしてきている。
(とは言ってもケータイとかでは知らず知らずのうちに払っていると思うのだけれど、Andoridになれば…)

ちなみに他社の日本向けネットブックのいくつかは、Splashtopを組み込んだ高速起動Linuxをデュアルブートで使えるらしい(M$ OSが遅いから)、それもLinuxであることを隠して。
Linuxモデルが買える海外は羨ましぃ。まぁLinuxerとしてはLinuxモデルが欲しいのではなくOS無しモデルがあれば十分なんですけどね。
あと、Andorid版が出るという噂もあるようだけどどうなんでしょう。

組込みボード

仕事ではリファレンスボードやカスタムボードを触っているけどプロジェクトが終われば手元から離れていってしまうので、自分専用の組込みボードが欲しい~
そこで狙ってるのが、Beagle Board。USBホストのErrataが改善されたら是非購入したいものだ。
これにはARM系のが載っている(x86は組込みとは言いませんものね)ので浮気と言えば浮気になるが。。


2009年4月7日火曜日

bash-completion

zshの補完は魅力でもbashを捨てられないという人も多いだろう。自分もそのひとり。その悩みを解決してくれるのが、bash-completionである。

例えば、manの引数にコマンド名を補完しようとしても[Tab]では補完されない(コマンド名補完は[Alt-!]で可能だが)といった経験があると思う。bash-completionはそのコマンドの文法(オプション)に合わせて補完してくれるので[Tab]を叩いていればよい。

ただし、manの場合は存在するコマンドから補完するのでなく、manが存在するコマンド名を補完しようとするみたいなので、初回はその検索に時間を多少要する。
それが、rpm や yum のパッケージ名になるとDBが大きいので顕著になるので注意。キャッシュに残っていれば速いがそうでない場合は、"rpm -qa"とかをしているのと同じスピードになってしまうので。

次にtarコマンドの場合、foo.tbz2 と hoge.tgz の2つのみがカレントにあるとき
$ tar zxf [Tab]
とファイル名の頭文字さえも打たずに[Tab]しても zオプションなので".tbz2"は対象外となり、ちゃんと hoge.tgzの方が補完される。
また、hello.sとhello.oの2つみがある場合も
$ vi [Tab]
でhello.sを補完してくれる。

svnやgit、mercurialなどのサブコマンドが必要な場合でもそれぞれに合った補完をしてくれる。
また、killのようにPIDが必要な場合でも存在するPIDが補完される(PIDは順に振られるため補完対象が決定するまでタイプしてると結局全部タイプしてたとかということもあるので、あまり役に立たないけど)。

極めつけは、make。Makefile内のターゲットを都度確認して補完してくれるのだ。
「clean」ターゲットがあれば"make c[Tab]"で補完してくれるが、無い場合は補完しないといった具合に。更にMakefileからincludeされているファイルも解析するので、「menuconfig」や「uImage」なども補完してくれる(その分補完に時間が掛かるが)。
もちろん、その他コマンドに対してもキメ細かな補完をしてくれる。


インストールは以下で完了。
$ sudo yum -y install bash-completion

ただし、デフォルトの状態ではお節介過ぎる補完があるので修正をする。

"~/De[Tab]"とすると、通常は"~/Desktop/"と補完されるが、bash-completionの場合"/home/okap/Desktop/"とお節介なほどに補完されてしまう。「~」の方がスッキリしていて見やすいのでそこをホームディレクトリ名に展開されると長ったらしくなり困るのだ。

$ sudo vim /etc/bash_completion
...
# This function expands tildes in pathnames
#
_expand()
{
    [ "$cur" != "${cur%\\}" ] && cur="$cur\\"

    # expand ~username type directory specifications
    if [[ "$cur" == \~*/* ]]; then
        eval cur=$cur

    elif [[ "$cur" == \~* ]]; then
        cur=${cur#\~}
        COMPREPLY=( $( compgen -P '~' -u $cur ) )
        return ${#COMPREPLY[@]}
    fi
}
...
この部分でevalしてるのがお節介な箇所。なのでbashの"何もしない"(組込み)コマンド「:」に置き換える。
        eval cur=$cur
             ↓
        #eval cur=$cur
        :

これで新しいセッションでは、「~」がホームディレクトリ名に展開されなくなる。



2009年4月5日日曜日

visdo, vim(root), view

sudoコマンドを使えるように設定

(ubuntuはsudoで全て行うポリシーなのでデフォルトで設定済みかと思うけど)
# visudo
...
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
okap    ALL=(ALL)       ALL
...

ちなみに、visudoは/etc/sudoersをviで編集しているだけだが、排他のため/etc/sudoers.tmpを編集している。vipwやvigrも同様に排他をかけている。

rootユーザでもvimを

Fedora(というよりRedHat)ではrootユーザではviがvimにリンクされていない。
「vim」と打てば良いだけだが意外と面倒である。(rootでvimを使うときって大概設定ファイルをいじる時だからカラー表示してくれるだけでも違う!)

そこで、rootでもviでvimが起動出来るようにする。
# vi /etc/profile.d/vim.sh
if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then
  [ -x //usr/bin/id ] || return
  [ `//usr/bin/id -u` -le 100 ] && return
  # for bash and zsh, only if no alias is already set
  alias vi >/dev/null 2>&1 || alias vi=vim
fi

このスクリプトを見ると、uidが100以下の場合は以降のaliasが設定されない。
rootは当然uid=0なので、その判定をコメントアウトしてしまう。
  [ `//usr/bin/id -u` -le 100 ] && return
                    ↓
# [ `//usr/bin/id -u` -le 100 ] && return

これで、この設定を読み込むか新しいセッションではrootでviとしてもvimが起動するようになる。

viewでもvimに

viewとは "vi -R" つまりRead-onlyでファイルを開くコマンドである。"view:眺める(Read-only)"と"vi"をかけているのだと思う(笑
Vimerが言うのも何だがvimでファイルを閲覧中にキーを触って(vimのコマンド・モードが幸いし)変更してしまうことがる。なのでソースやスクリプトを見るときはviewを使用している。
でも上記同様Fedoraでは、viewは一般ユーザでもviにリンクされているのでviewとしてもカラー表示されない。
# which view
/bin/view
# ll `!!`
ll `which view`
lrwxrwxrwx 1 root root 2 2009-03-23 17:54 /bin/view -> vi

なので、vimにリンクを張り直す。
# rm /bin/view
rm: remove シンボリックリンク `/bin/view'? y
# which vim
/usr/bin/vim
# ln -s /usr/bin/vim /bin/view
# ll `which view`
lrwxrwxrwx 1 root root 12 2009-04-05 22:19 /bin/view -> /usr/bin/vim

これで、新しいセッションではviewでもvimが起動するようになる。

ちなみにこのリンクでコマンド名を変える手法はbusyboxのに似ている。
lsなら、"busybox ls"と引数指定でも実行出来るけど、/bin/busybox を /bin/ls にリンクを張っておくと、lsで実行出来るようになる。argv[0]で判別しているのだと思う。



2009年4月3日金曜日

GUIのテキストフィールドでもbash風キーバインドを!

正確にはbash風キーバインドというよりEmacs風キーバインドなのですがVimerなもので(汗

Gnomeアプリのテキストフィールドやテキストエリアでbashと同じように
C-A/E:カーソルを行頭/行末へ移動、C-H/D:BackSpace/Delete などが使えると便利(いや、使えないとストレスが溜まる)。というCtrl派(?)なので、もちろん私はキーボード設定で紹介した通りCtrlは"A"の左にないとダメな人です。

ちなみにbashのキーバインドはほぼ理解しているつもりです(man見て理解できなかったキーバインドはbashのソース見て理解したことも)。便利なbashキーバインドもおいおい紹介するつもりでつ。

設定方法はまず、gconf-editorをインストール。
# yum -y install gconf-editor

gconf-editorを起動
$ gconf-editor

「desktop」->「gnome」->「interface」->「gtk_key_theme」を"Default"→"Emacs"に。

すると直後から、firefox(Gnomeアプリじゃないけど)やgedit等でEmacs風キーバインドが手に入りまっす! firefoxのグーグルバーやWebサイトのテキストフィールドの入力が快適になります。
firefoxが途中のバージョンからC-AがM$ OSのように全選択に変わってしまったのにはショックでしたが、この方法で起死回生。ちなみに、この状態でもAlt-Aで全選択はできます(私は全選択なんて殆ど使わんのですが)。geditでは無理のようですがそこまでgeditを使い込まないので。

また、geditのようなテキストエリアではC-P/Nがカーソルの上/下移動になるようです。Emacsでもそうなのか? bashではコマンド履歴のPrevious/Nextなのでカーソルの上/下移動というのもまんざらでもないが。



2009年4月2日木曜日

カスタマイズ 〜その2〜

Nautilusの設定

シングルクリック派なので「動作」項目でそれに設定。また「常にブラウザ・ウィンドウで開く」にチェックしクラシック・スタイルに変更。

スクリーンセーバ

「画面をロックする」のチェックを外し、復帰時パスワード不要に。

ウィンドウ挙動

タイトルバーをダブルクリックで「巻き上げ」に設定。最近のデフォルトの「最大化」はどうもM$ユーザを意識した作りで、昔からのLinuxユーザにとっては「巻き上げ」がデフォルトであって欲しいものだ!(最大化したけりゃ「+」ボタン押せばよいだけの話だし)

あと今回から「横に最大」や「縦に最大」という項目が増えていたが、KDEは昔から「+」ボタンをクリックなら最大化、中クリックなら縦に最大化、右クリックなら横に最大化というのが以前からあって羨ましかった。ダブルクリックで一つしか選べないとなるとやっぱ「巻き上げ」以外考えられません!だってウィンドウの後ろにあるウィンドウなりアイコンなりを表示させるのにウィンドウの移動は戻すのが手間だし、最小化も大袈裟だと。

Gnomeパネル

システムモニタ:
 非力なシングルコアCPUなので動作が重くなった時に重宝する。
 CPU以外にメモリ、ネットワーク、スワップ、ハードディスクを追加。
 CPUはIOWaitをピンク系の色にして、単に処理が遅いのか、I/O Waitのせいか分かり易くしておく。また、ハードディスクは書き込みを黄色にしてR/Wのの区別をはっきりさせる。






天気(GNOME Weather):
 「お天気」アプリを追加して、レーダー・マップを設定する。レーダーにはasahi.comの天気予報のレーダーを使う。
 ※最新が30分以上前のレーダー情報なのが何点だが、雨は西から来るので何とか予測できる範囲

下部の(ウィンドウ一覧やワークスペースがある)パネル:
 自動で隠すに設定。これでオン・マウスしたときだけ下部パネルが現れるので少しワークスペースが広くなる。

Tomboyのアンインストール:
 Gnomeパネルの右上の方のメモ帳のようなアイコンにオン・マウスすると「Tomboyメモ」とでるが、このデスクトップ・メモを昔使った感想はいまいち使い難くメモリ消費大きかったので替わりに「付箋紙」というアプリを使用する。
Tomboyの動作を確認してみると
$ ps ax| grep tomboy
2750 ? Sl 0:02 mono /usr/lib/tomboy/Tomboy.exe --panel-applet --oaf-activate-iid=OAFIID:TomboyApplet_Factory --oaf-ior-fd=36
拡張子が.exeって;) これじゃM$ OSじゃん。キモいので早速アンインストール。

1) まず、動作を止めるのにパネルから削除

2) RPMパッケージを確認
# rpm -qf /usr/lib/tomboy/Tomboy.exe
tomboy-0.12.0-5.fc10.i386

3) パッケージのアンインストール
# rpm -e `!!`
rpm -e `rpm -qf /usr/lib/tomboy/Tomboy.exe`




2009年3月26日木曜日

カスタマイズ 〜その1〜

要らんデーモンを止める

システムの起動時及び動作が遅くなるので不要なデーモンを起動しないようにする。
ネットワーク設定の時、NetworkManagerと停止しnetworkを起動したが、それ以外の不要デーモンを止める。
bluetoothとかmdmonitorはデバイスが付いてないので無効化、sendmailとかも無効化。
これらを施してほぼ同一条件なったので比べてみたが、F10の特徴の一つとしてF9より起動が早くなったと言われているが体感的にはあまり変わった気が。。まぁいつもハイバネート使っとるんで再起動は滅多にしないのでどうでもよいけど。

画面の解像度

20.1ワイドモニタ(WSXGA+)を使用しているのだけれでも、GUIではその解像度が選択できないのでxorg.confをいじることに。
しかし、xorg.confが無い! なのでF9のを配置したらその設定をロードしてくれた。
# mount /dev/sda3 /mnt
# cp /mnt/etc/X11/xorg.conf /etc/X11
# umonut /mnt

一応モニタ関連の設定を載せておく。
Section "Monitor"
    Identifier   "Monitor0"
    ModelName    "LCD Panel 1680x1050"
    HorizSync    31.5 - 65.5
    VertRefresh  56.0 - 65.0
    Option      "dpms"
EndSection

Section "Device"
    Identifier  "Videocard0"
    Driver      "radeon"
EndSection

Section "Screen"
    Identifier "Screen0"
    Device     "Videocard0"
    Monitor    "Monitor0"
    DefaultDepth     24
    SubSection "Display"
        Viewport   0 0
        Depth     24
        Modes   "1680x1050" "1280x960" "1152x864" "1024x768" "800x600" "640x480"
    EndSubSection
EndSection


マウス設定

インストール時にも述べたが、A4Tech社のDualホイールマウスを使用しており、Anacondaで横スクロールできたと紹介したけど、Xの方も設定なしで(と言うかxorg.confが無いし)横スクロールが出来た!

しかしxevで各ボタンイベントを追ってみると、第2ホイールの上回転が右スクロールで下回転が左スクロールになっているので、入れ替えたい(6,7)。
また、左手でマウスを使うので、左右クリック(1,3)及び左右サイドボタン(8,9)を入れ替える設定も行う。

Xmodmapに次の行を追加して
pointer = 3 2 1 4 5 7 6 9 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

X再起動後に確認すると
$ xmodmap -pp
There are 32 pointer buttons defined.

    Physical        Button
     Button          Code
        1              1
        2              2
        3              3
        4              4
        5              5
        6              7
        7              6
        8              9
        9              8
       10             10
       11             11
       12             12
       13             13
       14             14
       15             15
       16             16
       17             17
       18             18
       19             19
       20             20
       21             21
       22             22
       23             23
       24             24
       25             25
       26             26
       27             27
       28             28
       29             29
       30             30
       31             31
       32             32

あれっ、左右クリックだけ替わってない!
原因はGUIのマウス設定が右利きになっていたので、Xmodmap設定後に上書かれていた。渋々GUI設定も行うと
$ xmodmap -pp
There are 32 pointer buttons defined.
    Physical        Button
     Button          Code
        1              3
        2              2
        3              1
        4              4
        5              5
        6              7
        7              6
        8              9
        9              8
        ...


ちなみに昔のXではボタンイベントが3つしかなくて、
    Option      "Protocol" "ExplorerPS/2"
を付けてホイール(4,5)、

    Option      "ZAxisMapping" "4 5 6 7"
    Option      "Buttons" "9"
を付けて両サイドボタン(8,9)を有効にしたもんだけど、最近じゃデフォルトで32イベントまであるのね。
だったらマウスにもっとボタンを付けて欲しいものですね。例えばFirefoxのタブ間の移動に使用するボタンとかねん。

キーボード設定

CtrlキーがCapsLockのポジションに無いと何の作業も出来ましぇ~ん。
Xで設定しても良かったが、GUIのキーボード設定を使ってみる。
レイアウト・オプションの「Ctrl key position」で"Make CapsLock an additional Ctrl."を選択。
"Swap Ctrl and CapsLock."を選択しても良かったがCapsLock何て使わんので。それに他人が操作するときを考えると"Make CapsLock an additional Ctrl."がいいかと。

2009年3月23日月曜日

初期設定 〜その3〜

ネットワーク設定2

前回のPPPoE設定後の再起動でppp0デバイスが ONBOOT=yes になっているにも関わらず起動していない。
そういえば、F8辺りからNetworkManager(Gnomeパネルの右上に居るアイコン)ってのがデフォルトで動いておりこいつが邪魔をしていた。このデーモンはDHCPによるアドレス取得が可能な環境とか無線LANなら便利だけどPPPoEとは上手く連携してくれていないっぽい。

なのでNetworkManagerを停止
# chkconfig NetworkManager off

これでも、ppp0デバイスが自動起動してくれないと思ったら、お馴染みのnetworkデーモンが代わりに停止していた。。ので起動
# chkconfig network on

これで無事ネットワーク設定が完了。


最近GPLなCのコードでも変数名や関数名に大文字小文字を混ぜて使うstudly capsな書き方をする人を見かけるようになったけど、デーモン名にもその余波が来ているとは。。
/etc/init.d/以下でNetworkManagerだけ異様な雰囲気を醸し出しており、デーモン名にまでstudly capsはちょっと勘弁して欲しい気がする。


ネットワークが繋がったのでシステムを最新にアップデートして今回は終わり。
# yum -y install yum-fastestmirror

# yum -y update
※インストール時にUpdateリポジトリを追加した場合はアップデート・パッケージが適用されるので不要。 DHCPな環境ではチェックしておいた方がいいでしょう。

2009年3月20日金曜日

初期設定 〜その2〜

ネットワークの設定

フレッツのモデムはルータ機能がないのでDHCPの接続はできず、PPPoEの接続設定をする必要がある。
ルータタイプのモデムでは、そのモデムのWeb画面でパスワード等を設定すればPCの方はDHCPで接続するだけなので何の設定も不要だが、PPPoEはPC側での設定も必要となるので面倒い。

別途BBルータを購入ってのも嫌だし、モデム以外にルータの置き場所やコンセントが余計に必要になってしまうのが嫌。電力消費も倍になるし。。
昔からフレッツやYahooBBはモデムにルータ機能を付けてなく避けて来たのだが、マンションがフレッツ光になってしまったので渋々加入したという背景がある(YahooBBはユーザの要望を汲んだのか途中からルータ機能が付くようになったっぽい)。
BBルータの購入を前提するならそこにモデム機能もくっつけて販売して欲しい。そうすればモデムのレンタル料も払わなくて済む。そうすれば購入も考えるんだけどなぁ。

PPPoEの設定はADSL(ルータ内蔵)から光(ルータ非搭載)に変わったときのFedora5辺りにGUIで設定したが、毎度GUI設定は辛いので設定ファイルをコピる方法でいく。

# mount /dev/sda3 /mnt/

半年に一度の作業なのでどの設定ファイル(つまりGUI設定で編集される)をコピるのかは忘れている。そこでファイルのタイムスタンプを利用する。
タイムスタンプの古い順にソートして表示すると最後の2つの*-secretsというファイルであることが分かる。
# ll -tr /mnt/etc/ppp/
合計 56
-rw-r--r-- 1 root root 104 2008-02-16 07:36 pppoe-server-options
-rw-r--r-- 1 root root 978 2008-02-16 07:36 firewall-standalone
-rw-r--r-- 1 root root 2276 2008-02-16 07:36 firewall-masq
-rw-r--r-- 1 root root 0 2008-03-04 02:51 ioptions
-rw-r--r-- 1 root root 5 2008-05-13 18:13 options
-rwxr-xr-x 1 root root 3200 2008-05-16 01:19 ipv6-up
-rwxr-xr-x 1 root root 1687 2008-05-16 01:19 ipv6-down
-rwxr-xr-x 1 root root 6460 2008-05-16 01:19 ip-up.ipv6to4
-rwxr-xr-x 1 root root 430 2008-05-16 01:19 ip-up
-rwxr-xr-x 1 root root 3258 2008-05-16 01:19 ip-down.ipv6to4
-rwxr-xr-x 1 root root 386 2008-05-16 01:19 ip-down
drwxr-xr-x 3 root root 4096 2008-05-16 01:27 peers
-rw------- 1 root root 549 2008-06-28 13:04 pap-secrets
-rw------- 1 root root 550 2008-06-28 13:04 chap-secrets
※llはls -lのalias

# cp /mnt/etc/ppp/*-secrets /etc/ppp/

あとはppp0デバイスを定義したファイルもコピー
# cp /mnt/etc/sysconfig/network-scripts/ifcfg-ppp0 /etc/sysconfig/network-scripts/ifcfg-ppp0

ppp0を起動
# ifup ppp0

ifconfigでppp0デバイスがPPP接続していることが確認できる
ppp0      Link encap:Point-to-Point Protocol

2009年3月17日火曜日

初期設定 〜その1〜

インストール完了後の再起動から立ち上がったら、ライセンスや日時設定、ユーザ作成を経てログイン画面になる。

1. xdgの無効化

だが、初回のGUIログイン前に重要な作業が!
Fedora7辺りからホームディレクトリに"Download"とか"Pictures"とかが10個近く勝手に出来てしまってCUI操作の妨げになっていた。(ホームディレクトリに自分で作成したディレクトリと"Desktop"以外が10個近くもあると、lsした時やTab補完しようとした時に大変困る)
しかも、Fedora8辺りからは更にたちが悪く"ダウンロード"とか"画像"と日本語化されてしまっているのだ! "Desktop"も"デスクトップ"になってるし。。

これを食い止めるために、初めてGUIログイン前にxdgとかいうやつを無効にする設定を施す。
まず、Ctrl-Alt-F2でtty2の仮想端末に移りrootでテキスト・ログインし以下を実行。
# vim /etc/xdg/user-dirs.conf
enabled=True
     ↓
enabled=False

その後は、Alt-←(もしくはCtrl-Alt-F1)でGDMに戻り普通にGUIログインする。
※Fedora10ではGDMがtty1になっていた

ちなみにGUIログイン後にこれらディレクトリをrmdirすると支障がでたりする。例えばFirefoxのデフォルトのDL先が"ダウンロード"になっているからだ。なので今回のようにGUIログイン前にxdgを無効にした方が無難かと。

2. GRUBの設定

次に、Fedora9も起動出来るようにする。
Fedora9のパーティションをマウントし、grub.confの内容を加える。
# mount /dev/sda3 /mnt/
# cat /mnt/boot/grub/grub.conf >> /boot/grub/grub.conf

その後、grub.confを以下のように編集
・Fedora9のgrub.confのコメント行やオプション行を削除
・Fedora 8カーネルのエントリーを削除
・HDDインストールに使用した"Fedora 10 Installer"のエントリーは次回Fedora11をインストールする時に流用するので残しておく



2009年3月15日日曜日

Fedora 10 インストール 〜後編〜

少しググってみるとインストール・ガイドにこんな情報が。

どうやら、F10からはAnacondaもインストール・イメージから予め取り出しおく必要があるっぽい。
F9までは、HDDインストール開始時に自動でインストール・イメージ内のAnacondaを実行してくれていたのに。。

ということでその設定。
$ sudo mount -o loop ~/Fedora-10-i386-DVD/Fedora-10-i386-DVD.iso /mnt

$ mkdir ~/Fedora-10-i386-DVD/images

$ cp /mnt/images/install.img ~/Fedora-10-i386-DVD/images

$ sudo umount /mnt
※なお、インストール・ガイドにあるようにimagesディレクトリとFedora-10-i386-DVD.isoを同じディレクトリに配置しないと、パーティション・フォーマット後にISO9660が見つからないとなり、インストールが先に進めなくなるので注意!

これでHDDインストールが可能となった。


さてF10のインストーラを体感して他に気づいたことは、
- インストール画面が小さくなっている
 これは大型やワイドモニタへの対応と思われる。
- 横スクロールも何の設定もなしに使用できる
 A4Tech社のDualホイールマウスを使用しているのだが、各パッケージの説明など横スクロールバーが表示されているウィンドウで、2つ目のホイールで横スクロールできた、Anacondaでだ。

ちなみに今回もext4はパス。/bootを別パーティションとしていないので、F9の時GRUBがext4に未対応のため起動できなかったから。
F10のカーネルは2.6.27なのでext4devだけど、2.6.28からext4と安定版になった。なのでF11からはデフォルトのFSになるらしい。それまでにGRUBもext4対応がなされれば良いのだが。



2009年3月12日木曜日

Fedora 10 インストール 〜前編〜

Fedora 10 を新規インストールしたときのメモ。
メインPCのパーティション構成は、Fedora N と N-1 のデュアルブート構成になっており新バージョンがリリースされる度に古い方を消去しそこに新規にインストールする形をとっている。
(yum upgradeをすればと突っ込まれそうだけど、インストーラの進化を体感しておきたいのと、初期設定の変化を追わないと新PCとかにインストールをしようとしたとき全く変わっていて出来ないってなことにもなり兼ねないので)
なので現在はFedora8/9のデュアルブートになっている。
/dev/sda1: Fedora 8
/dev/sda2: swap
/dev/sda3: Fedora 9

では、インストールへ。

1. インストール・イメージのDL

Fedora9のFirefoxからfedoraproject.orgにあるFedora-10-i386-DVD.torrentをクリックすると、BitTorrentクライアントであるTransmissionが起動し、DL開始。
ホームディレクトリにFedora-10-i386-DVDというディレクトリが作成されその中にISOイメージ(Fedora-10-i386-DVD.iso)ができる。

2. インストールの準備

ダウンロードしたISOイメージを毎回CDやDVDに焼くひともいるようだけど1度きりの為には勿体ない。
(と言うかこのPCには光学ドライブを付けていないので)
インストール方法は上記のようなパーティション構成になっているのでHDDインストールを選択。

HDDインストールではUSBメモリ等からboot.isoを使ってインストーラを起動する必要はなく、GRUBを流用する。
その設定は、Anacondaを起動するカーネルとinitrdをISOイメージから取り出しGRUBのエントリに追加する。

1) インストーラ用カーネルの配置ディレクトリを作成
# mkdir /boot/install

2) DLしたインストール・イメージをループバック・マウント
# mount -o loop ~okap/Fedora-10-i386-DVD/Fedora-10-i386-DVD.iso /mnt/

3) カーネルとinitrdを1)で作成したディレクトリにコピー
# cp /mnt/isolinux/{vmlinuz,initrd.img} /boot/install

4) インストール・イメージをアンマウント
# umount /mnt

5) 上で配置したカーネルのエントリをgrub.confに追加
title Fedora 10 Installer
    root (hd0,2)
    kernel /boot/install/vmlinuz ramdisk_size=8192
    initrd /boot/install/initrd.img

3. インストーラの起動

上記追加のGRUBエントリから起動し、HDDインストール方式を選択。
ISOイメージが保存してある下記を指定。
パーティション:     /dev/sda3
ディレクトリ・パス: /home/okap/Fedora-10-i386-DVD
ところが、Anacondaが起動しない!
images/install.imgが見つからないというメッセージが出る。
今までこの設定で起動していたのに、Fedora10から変わったのか?