2007年8月31日金曜日
Taskbar Shuffle

基本的にはウィンドウはたくさん開かない。
まぁ、以前はスペックの低いマシンを使っていたってこともあるし、自宅じゃせいぜいアプリひとつ(例えばブラウザ、メディアプレイヤくらい)とエクスプローラくらいだから。
ひとつのことしかしないからね。

仕事でも出来る限り不要な窓は開かない方針なんだけど、あれこれやってるとそうはいかない時もある。

窓の切り替えは「Alt + Tab」なんだけど、マウス使ってる時はやっぱりタスクバーをクリックする。
そんなとき、一番使うのが一番奥(左端)にあったりして、ちょっと…
窓を行き来する時に、隣同士になかったり…

そんな時の強ーい味方がコレ。

Taskbar Shuffle

このblogで紹介されてて、早速入れてみた。
タスクバーの中ならフツーにドラッグ&ドロップで入れ替え可能。


タスクトレイは「Ctrl」を押しながらで移動が可能。まぁ、こちらはそうそう動かす必要はないと思うけど。


ここでCtrlを押しながら、ドラッグすると…




これを入れた頃には、仕事が落ち着き、動かす程も窓が開いていないという…

ちなみにタスクマネージャで見てみると、メモリは6,356K使用。
どうなでしょ?


参考URL
タスクバーやタスクトレイで並べ替えができる無料ツール『Taskbar Shuffle』 | P O P * P O P
http://www.popxpop.com/archives/2007/07/taskbar_shuffle.html


home of the nerd cave | taskbar shuffle and more
http://www.freewebs.com/nerdcave/taskbarshuffle.htm



0 コメント | コメントを書く | コメントの表示
2007年8月30日木曜日
vi で対応する括弧にジャンプする

単純にモノ忘れの世界。

対応する括弧にジャンプするのは、

%

です。



0 コメント | コメントを書く | コメントの表示
2007年8月28日火曜日
「Linuxプログラミング―例題で学ぶUNIXプログラミング環境のすべて」でお勉強

久しぶりに、Cのお勉強。
僕自身、そんなにまじめに勉強したことがないので、きちんとやらなきゃと思いながら…
でもって、2~3年くらい前に買った本を久しぶりに開いてみた。

当時よりも幾分Cの知識はあるし、ワリとサクサク進む。

しかし…

ところどころ動かないんですけど?

でもって、版元のサイトを調べると、サンプルソースがダウンロードできるね。

改訂後
http://www.sbcr.jp/books/download/art.asp?newsid=1333

改訂前
http://shop.sbcr.jp/isbn/old/1st/linux/index.htm

実行すると画面がクリアされ、中央ほどに簡単なメニューが表示されるというプログラムがある。
サンプルどおりに打ち込んでコンパイル、実行するのだが、一向に画面が変わらない。
入力待ちになる。

ここでENTERとかなにかキー入力をすると、画面がクリアされ、メニューが表示される。そして誤った入力である旨、表示される(メニューとしては、「a」「d」「q」しか許可していないため、先ほど入力した値を受け取って誤りだと出力する)。

でもって改訂版のソースを見ると、

fflush(out);

が追加されている。
※outは出力先(この場合は標準出力)を指す。

こいつが無いせいで画面が切り替わらなかったんだな。

しかもtputsの第3引数用に関数char_to_terminal()というのを設定しているのだが、この引数の型が改訂前後で違う。
改訂前
int char_to_terminal(char char_to_write);

改訂後
int char_to_terminal(int char_to_write);


おーい!
とか思ってたら、このchar_to_terminal()は単純にputcをコールしてるだけ。
よくよく考えてみると、このputcって第1引数(つまりchar_to_terminal()の第1引数)はintなんだよねぇ。
これはすぐに気が付いてもよかったなぁ。

古いOS(もしくはコンパイラ)だったら動くんか?

まぁ、とにかく、これは注意せねばならんね。


 こっちは僕の持っている改訂前。



0 コメント | コメントを書く | コメントの表示
2007年8月20日月曜日
lessの不思議

つづき。

manが文字化けするので、lessのオプションの変更を/etc/man.configに施したんだけど、根本的な対策ではなかった。
要するに、less自体が文字化けしているのだ。

個人的には多少不便でもmore派だし、サーバ本体を操作する機会なんてほとんどない。
PoderosaとかTeraTerm使ってれば、スクロールバーを操作して、前の画面見られるし、全然気がつきませんでした。

現状、

ls -la | less

を実行すると、ファイルのタイムスタンプの"7月"が"7<B7><EE>"となってしまう。

とりあえずJLESSCHARSETをユーザの環境変数に組み込んでみる。
これはたいていどこのサイトにも書いてある手法だ。
でもダメ(この時点ではmanのPAGER設定にJLESSCHARSETがなくてもOKなことに気が付いていない)。

で、man.configに何を設定したのか思い出してみる。
まずは
JLESSCHARSET=japanese
を入れた。
次に、lessのオプションをRからrに変更した。

やってみた。

alias less='less -r'


直った。

ふぅむ、オプションの問題か。

とりあえずJMにお伺いをたててみる。

Manpage of LESS

-r または --raw-control-chars
「そのままの」制御文字を表示させるようにする。デフォルトでは、制御文字をキャレット表記を使って表示する。例えば、control-A (8 進数 001) は "^A" と表示される。警告: -r オプションが指定されると、 less は (制御文字のタイプにどのように画面が反応するかに依存しているために) 画面の実際の状況の経過を追うことができない。よって多くの場合、長い行が誤った位置で分割されてしまうといった問題が生じる。


まったくもって今回の事象の説明にならん、気がする。

こんなときはUNIXの部屋だ!
UNIXの部屋 検索:less (*BSD/Linux/Solaris)
ここに、オプションの一覧があり、-rの説明には以下のようにある。

コントロールコードをそのまま表示する。デフォルトでは control-A は ^A と表示されるが、-r を指定するとそのまま表示する。これによって、cat で日本語が表示できる環境なら、less -r で日本語が表示できるかも。


一応、「ふむふむ」と言えるような説明文だ。

Googleで"less -r"で検索してみても、正直、満足のいく文章はなかった。
JMやmanpageじゃ、オプションはrよりもRを薦めてるし、実際のところどうなんだろう?

ついでに、UNIXの部屋で知った環境変数を。
環境変数LESSにはlessのオプションを指定できるらしい。

export LESS=-rgj10

としてみた。


元記事
HOMEGROWN | lessの不思議
http://homegrown.jugem.cc/?eid=273



1 コメント | コメントを書く | コメントの表示
manの文字化け

仕事でRed Hat Enterprise Linuxをインストール、設定することになった。
調査段階でほとんどのことは終わってるので、実質的には作業するだけなんだけど…実際にはそうはいかない。

Red HatってUTF-8なんだけど、インストールするサーバプログラムがEUCなので、i18nを修正して無理矢理EUCに変更した。
その影響もあって、manが化ける。
Red Hatの9からFedora Coreになったときに、文字コードがEUCからUTF-8になったせいで、EUC->UTF-8への変換方法ってワリといろんなところに書かれてた。
しかし、その逆UTF-8からEUCへの変更ってどこにも出てこない(見つけられないだけかも)。

しかも大半がPAGERにlvを使えとある。
which lv しても出てきませんが?(パッケージを厳選しすぎたか?)

でもまぁ、直せたので、一応残しておこうと思って。

参考にしたページはここ。
ミラクル・リナックス:日本語manページの文字化けについて
http://www.miraclelinux.com/technet/faq/data/00087.html

ここでは/etc/sysconfig/i18nで文字コードをShift-JISかUTF-8にした場合の修正手順が載っている。
UTF-8の場合の、iconvをはさむやり方はNGだったので、Shift-JISのパターンで行ってみる。

上記ページには、以下のように記載されている。

JNROFF LANG=ja_JP.eucJP /usr/bin/groff -Tnippon -mandocj
PAGER JLESSCHARSET=euc-sjis /usr/bin/less -isr


jnroffは入ってないので、ここは無視して、PAGERのみ変更を加える。

PAGER JLESSCHARSET=euc-sjis /usr/bin/less -isr


…まぁ、これだけ。
念の為、再起動…は大袈裟なので、ログアウトして、再度入ってみる。
でもってman lsと入れると…

無事、日本語が表示されてました。

その後、JLESSCHARSETはセットしなくても、正常に表示されることが判明。
問題はmanコマンドそのものではなく、実はlessそのものにあったと気が付くのに、時間がかかった。

つづく…

元記事
HOMEGROWN | manの文字化け
http://homegrown.jugem.cc/?eid=268





追記(2007/09/03)
@ITにて、UTF-8からEUC-JPに変更する方法が記載されていた。

デフォルトの文字コードをEUC-JPに変更するには - @IT
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/a043eucjp.html

そこでもmanの文字化けが触れられているが…
lvがインストールされていない場合には、事前にlvをインストールしておく

ってのは、どうよ?



0 コメント | コメントを書く | コメントの表示
cal

やっと…

やっとCygwinでcalが使えるようになった。
Cygwinを入れた目的の数%はcalを使いたかったってのもある…ってゆーのは大袈裟だけど。

「util-linux」というパッケージを入れなきゃならんとは、気が付くかよ。

JFのサイトだけど、一応参考までにリンクを。

Util-linux
http://www.linux.or.jp/JF/JFdocs/LFS-BOOK/appendixa/util-linux.html


元記事
HOMEGROWN | cal
http://homegrown.jugem.cc/?eid=241



0 コメント | コメントを書く | コメントの表示
Cygwin 環境設定(3) - lessの文字化け

最初、全然気がつかなかったんだけど、そのままじゃ less が文字化けするのね(接続したサーバによっては新しいものが取得できるかもしれないけど)。

色々検索すると、どうやら Cygwin JE で日本語対応の less が入手できるらしい。
このURLにアクセスして、
http://cygwin-je.sourceforge.jp/cygwin_je/release/less/
ブツをダウンロードする、と。
僕が見たときは「less-358_iso254-3.tar.tar」だったけど、今見たら「less-358_iso254-3.tar.bz2」になってるね。なんでだろ?

まぁ、ダウンロードしたtar(tar.bz2)を展開して… 「/」に置いて展開したら、適当なディレクトリに入れてくれたので、特に気にすることもなかったんだけど。一応、「/tmp」かどっかで試した方がいいかもね。

これでCygwinからは less も問題なく使えるんだけど…


(追記)
結局は、「setup.exe」の「other site」に「http://cygwin-je.sourceforge.jp/cygwin_je/」を放り込んどきゃよかったって話かな?

参考URL
Using Cygwin. Compiled package
http://sohda.net/cygwin/#compiled


(追記2)
ためしにコマンドプロンプトでlessを使ってみた。
コマンドプロンプトから、例えば

dir | less

としてみると…
<83>

とかがズラッと。

そもそもコマンドプロンプトで使うなよって話なんだろうけど、Cygwinはちょっと起動が遅いし、Poderosaのようなのを起動させるのもなぁ…と思うと、「win+r」で「cmd(.exe)」を叩いた方が早いなぁ、とか思っちゃう。

基本的にはmore派だからいいんだけど、問題解決はしておきたい。

…と、よく考えてみたら、これってHeartache Reborn: lessの不思議で書いた内容と同じじゃんか。

直接入力するのなら、
dir | less -r

で解決する問題だった。
やっぱりWindowsにもaliasが欲しいけど…

元記事
HOMEGROWN | Cygwin 環境設定(3) - lessの文字化け
http://homegrown.jugem.cc/?eid=214



4 コメント | コメントを書く | コメントの表示
Cygwin 環境設定(2) - viで日本語を使う

ようやく、Cygwinのviで日本語を使う方法が判明。
ホームディレクトリに .vimrc を作って…

set encodin=japan
set fileencodings=sjis


を書き込む。

マァ、フツーに.vimrcだったね。
これですっきりした…

元記事
HOMEGROWN | Cygwin 環境設定(2) - viで日本語を使う
http://homegrown.jugem.cc/?eid=213



0 コメント | コメントを書く | コメントの表示
UNIX系OSのプロンプト(PS1) - bash

えーっと、よく忘れるので、メモ書き…
bashの場合、プロンプトの設定を行うには、~/.bashrc に以下のような設定を行う…と。
PS1="変数や文字列色々"
で、なにが設定できるかというと


\d

日付

\h

ホスト名

\n

改行

\s

シェル名

\t

時間(タブじゃないのね)

\u

ログインユーザ名

\w

ワーキングディレクトリ(ホームディレクトリは"~"で、一応フルパス表示のようです)

\W

同じくワーキングディレクトリ。こちらはベース名…つまり/home/Sophie/binにいたらbinのみってことです。

\#

コマンド番号

\!

ヒストリ番号

\$

UIDが"0"(スーパーユーザ)の場合には"#"で、それ以外は"$"を表示。


ま、使いそうなところは、こんなモンかな?
再度ログインするか、source .bashrc かなにかで再読み込みを行う、と有効になるはず。
csh とかになると、set prompt=""で設定してやらなくてはいけないハズ。
ま、こちらはそのうちってことで。

と思ったら、こんなサイトが…

UNIX FAQ LIST #2.1
2.4) プロンプトに、カレントディレクトリ名を出力させておくにはどうすれば良いのですか。
http://www.nurs.or.jp/~asada/FAQ/UNIX/section2.4.html

元記事
HOMEGROWN | UNIX系OSのプロンプト(PS1) - bash
http://homegrown.jugem.cc/?eid=212



0 コメント | コメントを書く | コメントの表示
愚痴 - Solaris の awk ってさぁ

ワケあって、シコシコと他人が作ったスクリプトを弄くりまわしてるんだけどさ。
これがまた、Solarisのawkがムッチャクチャ使えねー。

いや、nawkとか使えばいいって話なんだけどさ。

今回はそういうワケにもいかない理由があってさ。


しかし、Solarisのawkがここまで使えないなら、いっそのことawkをnawkのシンボリックリンクとかエイリアスで解決できそうなもんだけど…とか思わなくもないんだけど、そういうワケにもいかないか。

なんで正規表現が使えないんだろうね。

で、やりたかったことってのは、ファイルからパスリストを引っ張って…

まず、整形する。
末尾のスペースを削除する。んで、パスなので、末尾に"/"があったら削除する。
ここで gsub() を使って、" +$"を" "に置換する…

gsub(検索文字列, 置換文字列, 検索対象文字列);


…んだけど、Solarisってgsub()ないんね。
しかたないんで sed を使って置換する。
まぁ、こんなカンジ。

sed 's/[ ]*$//g'

あ、でもこれだと、文字列じゃなくって、ファイルを読み込むって手順になるねぇ。


さて、取得したパスが、期待するパスかどうかをチェックする…

で、match()を使って(文字通り)マッチするかどうか確認するんだけど

match(対象文字列, 探したい文字列);

マッチした場合、その開始位置(1から始まる)を返す。

…Solarisじゃmatch()使えないんだね。

で、同じ機能のindex()を使ってみる…んだけど、正規表現が使えない。
マァ仕様的に、検索したいパスが固定できるなら、index()に置き換えて、新しいロジックを考えなくていいからと上司に確認してみると…

「確認しとくから」と言いながら放置プレイ。

挙句に「出来た?」なんてぬかしやがる。

どうやら正規表現は必須なようなので、index()は不可。
文字列が含まれるかどうかって話なんで、system()を使ってgrepさせようか?
すでにawkスクリプトの範疇を超え始めてるな。
gsub()を外してsedにして、挙句に処理をsystem()で外部的に処理をさせるって…

ってことで、whileを使って、ファイルを一行ずつ読み込む

while read LINE
do

done < $1


…と。
で、変数LINEに読み込んだものをチェックするのは case でいいかな?

while read LINE
do
case $LINE
in
/path/*/path*)
(処理)
;;
*)
(処理)
;;
esac
done < $1

んんー… ダサイなぁ。

愚痴愚痴。


おっと、忘れてたので追記。
文字列比較って、"~"(チルダ)でもできるんだね。

if( 文字列A ~ 文字列B ){
処理
}


と、こんなカンジ。
これもSolarisのawkじゃNGでした。




元記事
HOMEGROWN | 愚痴 - Solaris の awk ってさぁ。
http://homegrown.jugem.cc/?eid=206



0 コメント | コメントを書く | コメントの表示
Cygwinの環境設定

一応、参考にさせてもらったサイト
etc #020 ≪cygwinで日本語入力をする方法≫
http://www.nurs.or.jp/~ppoy/access/etc/etc020.html
ログインユーザのホームディレクトリにある「.inputrc」を編集します(無い場合は作成)。
以下の内容を追記する。

set kanji-code sjis
set convert-meta off
set meta-flag on
set
output-meta on

ま、viが入っていれば、立ち上げたCygwinから「vi .inputrc」で開けばいい。
これで日本語の入力ができるらしい。

…が、日本語名で「touch」しても、「ls」で文字化けしてる。

でもって、今度は表示の方。
これは「.bashrc」を編集する。
export JLESSCHARSET=japanese-sjis
alias ls='ls --show-control-chars'

※JLESSCHARSETのパラメタって、よく判らないね。
「source .bashrc」で再度読み込ませてもいいんだろうけど、一旦ウィンドウを閉じて、Cygwinを再度起動させた。
…と、正常に日本語が扱えるのを確認できました。
meta-flagを忘れてたけど、正常に動いたなぁ

続いて参考にさせていただいたのは、ここ↓
【特集】Windowsユーザーへ贈るUnixへの架け橋 - Cygwinを使いこなそう (MYCOMジャーナル)
http://journal.mycom.co.jp/special/2002/cygwin/menu.html
ここの中に、Cygwinを起動しなくても、UNIXコマンドを使う方法が載ってた。
【特集】Windowsユーザーへ贈るUnixへの架け橋 - Cygwinを使いこなそう (5) 環境設定と簡単な使用方法(1) (MYCOMジャーナル)
http://journal.mycom.co.jp/special/2002/cygwin/004.html
一言で言うなら、「PATHを通す」ね。
「マイコンピュータ」→「プロパティ」→「詳細」→「環境変数」で、ユーザかシステムの環境変数の「PATH」に「c:\cygwin\bin」を追加するだけ。
こちらはUNIX系OSと違って、読み込み直す必要はないので、「ファイル名を指定して実行(win+r)」あたりからプロンプトを起動させて、「ls」とかしてみると…

日本語表示できねーじゃんか!
よく考えてみれば、コマンドプロンプトからのlsはエイリアス設定が効いてない。
Cygwinからだとlsはls --show-control-charsに置き換わるワケだけど、コマンドプロンプトからじゃ、lsはlsのまま。
試しにls --show-control-charsを実行すると正常に日本語が表示される。
んんー、どうしよう。
中途半端な。

元記事
HOMEGROWN | Cygwin 環境設定
http://homegrown.jugem.cc/?eid=205



0 コメント | コメントを書く | コメントの表示
Template Design: © 2007 Envy Inc.