MIRACLE
メールサービス申込 ユーザー登録 パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

プロフィール

コアテクノロジー部

ミラクル・リナックスのOS開発やサポートを担う、技術部の精鋭陣が交代で担当します。

ミラクル関連リンク

採用情報

サイト検索

2008年5月

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

« 2006年8月 | メイン | 2006年10月 »

マクロ機能(キーボードマクロ)

秀丸エディタの話を読んでふと気がついた事がありました。vimにもマクロ機能があるのかどうかいろいろ調べてみると、さすがは高機能エディタ。やはり存在していました。

  • マクロ記録の開始
  • q[任意の小文字アルファベット]

    下部に「記録中」と表示されます。ここからマクロ化したい操作を行います。新しく記録する場合にはこちらを使います。

    q[任意の大文字アルファベット]

    下部に「記録中」と表示されます。既に記録されているアルファベットを選択した場合は追加ということになります。

  • マクロ記録の終了
  • q

    下部に表示されていた「記録中」の表示が消えて、記録を終了させます。

  • マクロ実行
  • @[マクロを記録したアルファベット]

    記録したマクロを実行します。

2,3文字の操作の繰り返しであればドット(.)を使ってもよいのですが、より複雑な操作や数十回以上同じ操作を繰り返すのであれば、こちらの方が便利です。

実用的な例ではありませんが、たとえば

aaa
aaa
aaa
aaa

という文字が1000行にわたって書きたい場合は、以下の操作でマクロを記録します。

q[任意のアルファベット]iaaa[ENTER][ESC]q

そして、以下のコマンドを実行します。

999@[記録したアルファベット]

するとaaaとかかれた行が1000行作ることができます。こういった普段何気ない操作でも、応用すれば作業の効率化を図ることができる一つの手段になります。

今はこんな単純な例しかあげられませんが、今後はより実践的な例を挙げて説明したいと思います。

英辞郎もLinux

今回はおそらくミラクル・リナックスでは誰もやっていないであろう英語辞書の設定を。。。

入れたものは「rdic」と「英辞郎」
「英辞郎」の方は2002年に買った本にCDがついているもので○indows用に買ったものです。とっても便利なのでなんとかLinuxでも動かないかと調べたらrdicに出会いました。と言う訳でまずは現状調査から

CDの中身は

K14-2004-1.bdf.gz  eijiro52.txt  otojiro.txt  waeiji52.txt
eijiro.exe         fonts.dir     ryaku52.txt

でこのうち「eijiro52.txt」が辞書データ、こんな風に入っています

■#1 | USE OF FIELD BY PERMIT ONLY : 《野球場の看板》1番球場。許可{きょか}を得ず に使用{しよう}することを禁ずる。
■$1 store : 米国版{べいこく ばん}100円ショップ

「$1store」ってアメリカにもあるんだねぇ、どんなものが置いてあるのだろうか?と関係ないところで感心したりする

さて、ASIANUX V2.0 への導入に戻りますが大体以下の感じで導入は進みます。

辞書データのコピーrdicの導入辞書データの変換辞書の設定

「rdit &」みたいに使ってみると↓こんな画面が表示されます。

Rdic_1

これはXWindowに表示されているテキストを↓な風にハイライトすると

Editnote

自動的に表示されます。かなり便利ですしかも早い!私の感覚では○indowsで使っていたときよりもレスポンスでは上ですね。

以下はインストール手順です。
1.辞書データのコピー
 これはそのままCDをセットして
 mount /mnt/cdrecorder ← 私のLet's noteにはDVD-RWがついてます
 cp /mnt/cdrecorder/eijiro52.txt  /tmp/.

2.rdicの導入
 必要なモジュールは
  Ruby 1.6.7 , Mmap 0.1.7 以上となっています。MmapはRubyのMmapモジュールです。
  ASIANUX V2.0 では
  Ruby 1.8.1-7 が入っていますが Mmapがありませんのでダウンロードが必要です。
> tar xvzf mmap-0.2.6.tar.gz
> ruby extconf.rb
> make
> make install

 rdicもダウンロードが必要です。

> tar xvzf rdic-0.1.8.tar.gz
> cd rdic-0.1.8
> ruby extconf.rb
> make
> make install

3.辞書データの変換
 rdicは現時点ではeucにのみ対応だそうです。このため、sjisで記述されている
「英辞郎」のデータをeucに変換します。
> ruby -Ke cnv2alc.rb EIJIRO52.TXT | sort -k1,1 -t: -f > EIJIRO52.euc
> ruby -Ke cnv2alc.rb RYAKU52.TXT  | sort -k1,1 -t: -f > RYAKU52.euc
> ruby -Ke cnv2alc.rb OTOJIRO.TXT  | sort -k1,1 -t: -f > OTOJIRO.euc
> ruby -Ke cnv2alc.rb WAEIJI52.TXT | sort -k1,1 -t: -f > WAEIJI52.euc


4.辞書の設定

> rdic EIJIRO52.euc RYAKU52.euc OTOJIRO.euc WAEIJI52.euc

 として辞書を指定して起動します。ただし、ASIANUX V2.0ではUTF8が標準ですので、EUCでしか動作しない英辞郎を起動する場合は

> LANG=ja_JP.eucjp ; rdic ・・・

 で文字化けせずに起動が可能になります。

ML4.0でiTunesサーバ

こんにちはyosuzukiです。前回に続いてiPod関連の話。我が家のSambaサーバも要領オーバー気味なので、ML3.0からML4.0へアップグレードもかねてディスク320GB増設しました。今はディスクが安いですね、IDE320GB(Seagate)がツクモで11000円でした。

容量が増えたので、iTunesサーバも追加してみました。我が家の3台のノートPCに分散されている大きなファイルたち(.m4a,.m4v)をiTunesサーバへ一元管理するのです。これでノートPCのディスクも余裕が出るというものです。

さて、LinuxにてiTunesサーバを立てるには今はdaapのみが必要。最新のmt-daapにはmDNS機能が入っているのでBonjour用のソフトは特に必要ないようです。

必要なファイルと手順は以下の通り。

■ ダウンロード

OSはML4.0でmlupdaterかけて最新状態です

■手順

  • libid3tag
  • # tar zxvf /tmp/libid3tag-0.15.1b.tar.gz -C /usr/local/src
    # cd /usr/local/src/libid3tag-0.15.1b
    # ./configure
    # make
    # make install

    # vi /etc/ld.so.conf
    include ld.so.conf.d/*.conf
    /usr/local/lib ←追加
    # ldconfig
  • mt-daapd
  • # cd /usr/loca/src
    # tar zxvf /tmp/mt-daapd-0.2.4.tar.gz -C /usr/local/src
    # cd /usr/local/src/mt-daapd-0.2.4/src
    # patch -p1 < /tmp/mt-daapd-0.2.4-cp932.patch
    patching file src/db-gdbm.c
    patching file src/mp3-scanner.c
    patching file src/parser.c
    # ./configure
    # make
    # make install

    # cp /usr/local/src/mt-daapd-0.2.4/contrib/mt-daapd.conf /etc/
    # vi /etc/mt-daapd.conf

    以下、適宜変更します。

    web_root      /usr/local/share/mt-daapd/admin-root
    mp3_dir       /back/iTunes
    servername    iTunes-Yosuzuki
    runas         yosuzuki
    extensions    .mp3,.m4a,.m4p,.m4v

    # cp /usr/local/src/mt-daapd-0.2.4/contrib/mt-daapd /etc/init.d/

    以下のように変更してます。

    # diff -u /etc/init.d/mt-daapd /usr/local/src/mt-daapd-0.2.4/contrib/mt-daapd
    ----------------------------------------------------------------------
    --- /etc/init.d/mt-daapd        2006-09-25 00:28:29.000000000 +0900
    +++ ./mt-daapd  2004-04-07 06:27:59.000000000 +0900
    @@ -3,18 +3,18 @@
    # chkconfig: 2345 85 15
    # description: mt-daapd is a multi-threaded DAAP server for iTunes
    # processname: mt-daapd
    -# pidfile: /var/run/mt-daapd.pid
    +# pidfile: /var/run/mt-daapd
    #

    # source function library
    . /etc/init.d/functions
    -[ -e /etc/mt-daapd.conf ]
    +[ -e /etc/daapd.conf ]

    RETVAL=0

    start() {
            echo -n $"Starting DAAP server: "
    -       daemon /usr/local/sbin/mt-daapd
    +       daemon mt-daapd
            RETVAL=$?
            echo
            [ $RETVAL -eq 0 ] && touch /var/lock/subsys/mt-daapd
    @@ -23,8 +23,8 @@
    stop() {
            echo -n $"Shutting down DAAP server: "
            # This is broken.
    -       #killall -INT mt-daapd
    -       killproc mt-daapd
    +       killall -INT mt-daapd
    +#      killproc mt-daapd
            RETVAL=$?

            echo
    ----------------------------------------------------------------------
    # service mt-daapd start
    # chkconfig mt-daapd on

Itunesserver01
これで我が家にiTunesサーバ on ML4.0が出来ました。Pen31G/mem512MBの6年物の自作マシンでsmbと共に快適に動作しております。

USBメモリで遊ぶ

社外で仕事をする事がそれなりにありますが、そのときに重宝するのが、USBメモリです。ノートPCをお客様のネットワークに接続する事はセキュリティ上の観点から基本的にはしないので、CD-ROM等のメディアを用いて作業を行う事がほとんどです。

ただ、細かいファイルをPCで編集したり、サーバからデータを採取する場合には書き込み可能なある程度の容量のUSBメモリが必須となります。(もちろん、お客様の許可がある場合に限られますが。)

しばらくI○データ製512M、転送速度の公称値22MB/secというモノを愛用していたのですが、

  • 容量的に不足する事態にたびたび遭遇
  • サイズがちょっと大きいのでちょっと邪魔

といったマイナス面が見え始めたので、買い換える事にしました。

良く行くショップで目についた1GByteで4千円くらいのを手に取り、『こんなに安くなったのか…』と関心してたのですが、実は前にケースが壊れたた事がある(しかも2個連続で。)メーカ製だったので敬遠。帰宅して改めてネットで調べてみると、近頃は8GByte 定価13万8000円!というモノまであってちょっと吃驚。実勢価格を見ると2GByteでも3,4000円位からあって、さっき買わなかった事が正解だったと改めて納得しました。

これらの情報を踏まえた上で、買い換えのポイントは、

  • サイズが小さいこと
  • 容量は2G(コストパフォーマンスが一番良いので。)
  • 書き込みが出来れば早いこと(容量が大きいと特に重要。)

としました。この条件で絞ったところ、○REEN HOUSE製の2GBのモノが5000円台で売っているのを発見、即注文しました。こちらの転送速度は公称27MB/secとなっています。せっかく買ったので、以前のモノと書き込み速度を比較してみました。

(いい加減なテストなのであまり信用しないように。。)

FAT32で300MBをddコマンドで書き込む場合、

  • 旧512M      9.5sec     (umountで18sec)
  • 新2G        18.7sec    (umountで7sec)
                

いずれもキャッシュが動くのでumountで時間が掛かるみたいです。
umount時間を足した時間を実効時間と考えると、

  •   旧512M      10.9 MB/sec
  •  新2G         11.6 MB/sec

となりました。書き込みでこの位でれば、まぁ満足でしょうか。
ついでなので、新2Gを使い、USBメモリをext3,xfs,ReiserFSで試してみました。(意味あるのか??)

  書込み時間[sec] umount時間[sec] 実効速度[MB/sec]
ext3 2.2 5.7 37.9
xfs 1.4 4.5 50.8
ReiserFS 2.8 8.5 29.6

ファイルシステム的にはxfsが一番早かったみたいです。これで○racleのパッチもUSBメモリに入るぞ。(PSRデカスギっす!)

ご当地3

またまた全国各地を回っているtake0513の番となりました。前回までのご当地は「食」、「銅像」ときました。

今回は観光名所!?です。(最近は都内関連が多かったため、以前に行った箇所のことですが)

みなさんは下記の画像のことを覚えて(知って)いますか?

Pa0_001

最初、ホテルにて「十勝帯広空港へ向かう途中、どこか寄っていくような場所はありますか?」と確認したとき、「こうふくえきはいかがですか」と紹介されましたが、恥ずかしながら私にはピンときませんでした。まー飛行機の離陸までの時間があったため、とりあえず向かったところ、先ほどの画像の駅とお土産店を見つけたのとで段々と昔なんか騒いでいたことを思い出しました。(幸福行きの切符がどーとかこーとか・・・当初に騒がれた時は、私は産まれていません。廃線になる時に切符購入者が多いとかで聞いたことがある程度です。戻ってから調べると当時は歌も作られたほどのようです。)

廃線となった駅が10何年も観光地化して残っていることはやはり、縁起がよさそうな名のおかげと日本人の縁起担ぎのおかげなのかと思いつつも、切符には購入した日付が入るため自分も切符を買ってしまった。(なんと姪がその日に産まれたと朝連絡が入っていたために)。さすがに写真のように名刺や定期などは置いてきませんでしたけどね。

切符は「愛国から幸福ゆき」となっている、愛国駅は2つ先(帯広駅より)であって隣の駅ではないことにご注意。(間の駅はたいしょうである。漢字にすると大正。そこでたいそうと読み、「たいそうこうふく」と言うことで、この切符も当時は売れたらしい。)

Pa0_0002

Lotus Notes Domino 7 on MIRACLE LINUX

非技術系blog担当のtonokiですが、今回は少し技術的なことを書いてみます。
本当はblogじゃ無くてFAQとして公開するべきですが、blogのネタが無いんで。。。ほほほ

最近IBMさんには、AsianuxへのIBMソフトウェアの対応をアナウンスしていただいておりま

す関係で、ユーザー事例第一号?となるべくDomino on MIRACLE LINUXです。

NotesクライアントもLinux対応版がリリースされていますので、AAAプロジェクト絡みでも

Dominoは良さそうです。

材料は以下をご用意ください。
・サーバー(32bit版 MIRACLE LINUX V4.0 がインストールできるもの)
・MIRACLE LINUX V4.0 - Asianux Inside(32bit版)
・Lotus Domino 7.01 for Linux(c88r9na.tar)
・ランゲージパック(C90TKJA.tar)
・ホットフィックス(C90D4NA.tar)

英語版をインストールしてから、ランゲージパックを追加してもいいのですが、日本国内で

しか利用しませんので、ランゲージパックのインストーラーを利用してone time setupします。

では、インストール作業に入っていきます。

1.サーバーにML40をインストールします。

  パッケージ選択は「すべて」が吉でしょう。

2.ML40のインストールが終わりましたら、X-Windowを利用したGUIモードでログインして、

lotusユーザとlotusグループを作成します。

  # groupadd lotus
  # useradd -g lotus -G wheel lotus

3.Lotus Domino 7.01 for Linux(c88r9na.tar)とランゲージパック(C90TKJA.tar)を

展開します。

  # tar xf c88r9na.tar
  # tar xf C90TKJA.tar

4.インストール先のディレクトリを作成しパーミッションを変更しておきます。

  # mkdir /opt/ibm
  # chmod 777 /opt/ibm

5.rootユーザで、ランゲージパックのGUIインストーラ-を起動します。

  # cd C90TKJA
  # ./LNKDomLP701_GUI

 InstallShieldが起動します。

6.英語版DominoServerのインストール

 ウィザードで使用する言語で「日本語」を選択しインストールを進めていくと

「英語版DominoServer」をインストールするか聞かれるので「はい」選択します。

7.インストール先ディレクトリの選択
 データディレクトリはデフォルトで空欄なので「修正」ボタンを押して、l今回はotusユーザ

ホームディレクトリ内のnotesdataというディレクトリを指定します。(場所は任意です。)


8.ランゲージパックのインストールタイプ選択
 追加と置き換えではファイル構成などが違います。ここでは「置き換え」を選択します。


9.インストールするランゲージパックで「日本語」にチェックを入れます。


10.英語版のインストーラーの場所を聞かれますので、最初に展開したディレクトリ

/root/linux/dominoを指定します。


11.以下の画面が表示されればインストールは終了です。



12.Dominoサーバの設定前にホットフィックスを適用します。
   ホットフィックスのアーカイブ展開先がlinuxなので、先ほどの英語版Dominoの

ディレクトリ名を変更してから、ホットフィックスを展開します。
   # cd
   # mv linux linux_701e
   # tar xf C90D4NA.tar
   # cd linux/domino
   ホットフィックスのインストールスクリプトはdominoのバイナリが/opt/lotusに有ることを

前提に動作するので、環境変数に現在のディレクトリを与えてinstallスクリプトを起動します。
   # NUI_NOTESDIR=/opt/ibm/lotus ./install
   [tab]キーを押しながらインストールを進めてください。

13.次にDominoサーバの設定に移ります。
   rootユーザでログインしている場合は、lotusユーザがX-Windowを表示できるように

以下のコマンドを実行します。
   # xhost +localhost
   lotusユーザになりDominoサーバをリモートセットアップ状態で起動します。
   # su - lotus
   $ cd /home/lotus/notesdata
   $ /opt/ibm/lotus/bin/server -listen &

   次にGUIのリモートセットアッププログラムを起動します。
   $ /opt/ibm/lotus/bin/server -remote

14.接続先のサーバを聞かれますので、localhostを指定します。


 あとは皆さんご存知の通りの設定画面ですので、画面の案内にしたがって設定を

進めてください。

15.設定が完了するとlistenモードのサーバを停止するか聞かれますので、

[はい]を押して停止します。


16.Dominoサーバの起動はlotusユーザで行います。

   # su - lotus

   notesdataディレクトリに移動してserverを起動します。

   # cd /home/lotus/notesdata

   # /opt/ibm/lotus/bin/server

17.サーバが起動できたら、WebAdminに接続してみましょう。
   WebAdminを利用するブラウザにはjreプラグインがあると幸せなので、

以下のコマンドを実行してプラグインをインストールします。
   # cd /usr/lib/firefox-1.0.8/plugins/
   # ln -s /usr/java/jdk1.5.0_04/jre/plugin/i386/ns7/libjavaplugin_oji.so
    http://localhost/webadmin.nsfに接続して設定時に設定した管理者アカウントで

ログインしてください。



次回は、Linux版のNotesクライアントの設定方法などご紹介できればと思います。
(よっしゃ!次のネタは困らないぞ。)

奥田瑛二はグーグラー?

「「ブランドとしての家族」にアイデンティティーを見出す父親」

先日行われたモントリオール国際映画祭で、奥田瑛二監督、緒方拳主演の「長い散歩」がグランプリ以下3部門を独占した。

「長い散歩」は、家族に見放された老人と虐待を受ける少女との交流を描いたものだが、実はこの映画のシナリオ制作過程が興味深い。

映画が制作されている間、奥田家の食卓の上にはいつも執筆途中のシナリオが開いて置いてあり、奥さんである安藤和津さんやふたりの娘さんがそのシナリオに勝手にどんどん朱を入れたり、台詞を付け足したりしていった。誰かが直したものを、また、別の誰かが直したり、時には、それについて家族みんなで議論を戦わせたり。まるで、ネット上で書き込み自由の辞書サイト「ウィキペディア」のようなカタチでシナリオが制作されていったというのである。

パパが自分の仕事を家族にオープンにし、誰かが特権的な権威を持つでもなく、ヨコ型のコミュニケーションによって、よりよい作品へと仕上げていく。たいていの場合、こういったアプローチは、作品の質を低めてしまうことになるのだが、冒頭に書いたように、歴史ある賞を受賞する作品にしっかりと仕上げたわけだから、奥田監督の手腕も含め、お見事というしかない。

これを読んで素直に"奥田瑛二"氏に脱帽しました。オープンソース的アプローチというべきか、インターネット技術による知の集約方法というべきか、いずれにしろIT業界の最先端な手法を、氏が明確に認識していたのかは不明ですが、それを駆使し結果を残したのは賞賛に値しますね。

あくまでも書籍等の受け売りですが、Google社内でもblogなどを使い同様の手法によって
数多くのプロジェクトが運営されていると聞きます。最近、立場上、組織のあり方について考えることが多いのですが、社員すべてに対して情報をオープンにし、社員すべてが積極的に情報を蓄積する「知の集約モデル」を実現した企業ほど、強固なものはないとつくづく思います。これには情報漏洩というリスクが常につきまとうのですが、社員一人一人の貢献度が経営に大きく影響を与えるベンチャーほどメリットの方が大きいのではないでしょうか。一部の社員が情報を握るピラミッド型組織は、もう時代遅れなんでしょうね。

そうそう、この手法、家庭にも導入できるんですね。思いもよらなかった。確かに家庭では権威主義を振りかざしていた、もとい、振りかざされていた(?)かも。
反省(苦笑)。

標準出力のバッファリング

こんにちは、shigeonsdです。

先日作成したシステムで、X サーバ上で発生するマウスボタン押下イベントを検出するプログラムを作
成することになりました。システムを動かしているPC に接続されているマウスのボタンが使えるか
どうかを確認することが目的です。プログラムの仕様を決めたときには、「xev の出力を
grep したら終わりでしょ?」と甘く考えていました。具体的には、以下のような簡単な
シェルスクリプトです。

xev | grep " state 0x100, button 1"

仕様には、xev のウインドウ上でマウスの左ボタンが押下されたときに「即座に」検出するこ
とを含んでいます。しかし、上記のスクリプトでは期待通りには動作しませんでした。

● 不具合内容
xev のウインドウ上にマウスカーソルを合わせマウスの左ボタンを押下したのですが、grep は全
くマウスイベントの発生を検出してれません。ボタンを押したあと、少しマウスカーソルと動かしたり
するとようやくイベントの発生を検出してくれました。

$ xev | grep " state 0x100, button 1"
    state 0x100, button 1, same_screen YES
    state 0x100, button 1, same_screen YES
    state 0x100, button 1, same_screen YES

● 調査
これではイベント発生後に「即座に」イベントを検出する、という仕様を満たせません。xev
を grep に与えている状態では、なにがおこっているのかよく分かりません。grep を
cat -u に変更して実行してみました。

KeymapNotify event, serial 24, synthetic NO, window 0x0,
    keys:  58  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

ButtonRelease event, serial 24, synthetic NO, window 0x2c00001,
    root 0x3a, subw 0x2c00002, time 507151157, (38,34), root:(468,483),
    state 0

最後の行に注目してください。state 0 まで出力され、なぜか行が途中まで出力
されて止まっています。マウスカーソルを動かすとつづきが表示されました。

   x100, button 1, same_screen YES

LeaveNotify event, serial 24, synthetic NO, window 0x2c00001,
    root 0x3a, subw 0x0, time 507151157, (38,34), root:(468,483),
    mode NotifyUngrab, detail NotifyInferior, same_screen YES,
    focus YES, state 0

しかし、xev の出力をそのまま端末に表示させているときはこのようなことは
起りません。どうやらどこかで誰かがバッファリングしているようです。最初は xev
の出力を受けるプログラムの入力でバッファリングしているのではないかと思って調査
していたのですがハズレでした。犯人はxev の出力でした。調査には strace
を使いました。strace は引数で与えたプログラムを実行し、システムコールの呼び
出しを記録するプログラムです(man strace)。

$ strace -o xev-strace.out /usr/X11R6/bin/xev | cat -u

このログを grep して標準出力への書き込みを確認しました。

$ grep 'write\(1'  xev-strace.out
write(1, "Outer window is 0x1e00001, inner"..., 4096) = 4096
write(1, "fy event, serial 24, synthetic N"..., 4096) = 4096
write(1, "0, same_screen YES\n\nMotionNotify"..., 4096) = 4096
write(1, "ame_screen YES,\n    focus YES, s"..., 4096) = 4096

この出力をみると、write システムコールの返却値は 4096 で 4096 byte
の書き込みに成功したことを表しています。また、第2引数の内容をみると、書
き出すメッセージが設定されていることが分かります。先頭が実際に出力されるメッ
セージの先頭でなことも分かります。これらのことから、xev の標準出力がバッファ
リングしていると判断しました。

● ソースコード調査と変更

xev のソースは、xorg-x11-6.8.2.tar.gz に含まれているものを使いま
した。ざっとみたところ fflush しているところが見当たらなかったので、以下
のような変更を加えました。

    1044           default:
    1045             printf ("Unknown event type %d\n", event.type);
    1046             break;
    1047         }
    1048         fflush(stdout);
    1049     }
    1050
    1051     XCloseDisplay (dpy);
    1052     return 0;
    1053 }

ちなみに変更したのは、1048 行目の fflush の追加だけです。
コンパイル手順は以下の通りです。

$ cd xc/programs/xev
$ xmkmf
$ make

修正を加えた xev では標準出力への書き込みがバッファリングされなくなり、期
待通りの動作をするようになりました。

ここまでやって、ようやく標準出力が端末に出力する場合は行単位でバッファリン
グされ、ファイルに出力する場合は、普通にバッファリングされることを思い出しました
(man stdout 参照)。

● その後

すべての作業が終わったあと、同僚からこんなメールをもらいました :-p

>> xev のイベントが即座に取得できないのは xev の出力の問題でした。
>> パッチを当てた xev のソースツリー(といっても一行追加しただけ)を送ります。

> ちなみに、X.org 7.x の最新版ではそのような仕様に変更されたようです。Debian unstable の
> /usr/share/doc/xbase-clients/changelog.Debian.gz より抜粋:
>
> xbase-clients (1:1.0.1-2) experimental; urgency=low
>
>   * Add an empty /var/lib/xkb directory so that the server loads the correct
>     keymaps. Thanks Silvestre Zabala, Eugene Konev, and Daniel Stone.
>     (closes: #354130)
>   * Port patches from trunk
>     + general/014_startx_hostname_fix.diff
>     + general/015_startx_dummy_fix.diff
>     + general/073_xev_flush_standard_output.diff
>       ------------------------------------------
>
> ご参考まで。

既に対応された問題だったようです。やれやれ。

Bashプチ拡張(とまではいきませんでしたが)

前回Altキー使ってますか?でBashのキーバインドを紹介しましたが、他に自分が欲しいと思った機能がBashに実装されていないようなので今回はちょっとそのコードを覗いて見てみようと思います。(注: 私は業務でコードを書くことは無い素人なので、その辺をまず理解して読んでください)

その前にまず前回の紹介が締切間際だったということもあり、良い例が思いつかずうまく説明できていなかったのでおさらいを兼ねて改めて紹介することにします。

Bashでは[Alt-.]を一回押すと直前のコマンドの最後の引数が入力できます。もう一度押すと更にその前のコマンドの最後の引数に変わります。この機能を使う場面はいくつもありますが、例としてMIRACLE LINUX V4.0のDeveloper CDからctagsパッケージをインストールする作業を考えてみましょう。

  1. まずマウントします。
  2. # mount /mnt/cdrom
  3. そしてマウントした中身を確認するでしょう。このとき『ls [Alt-.]』とすれば以下を入力したことになります。
  4. # ls /mnt/cdrom
  5. インストールはTab補完も使い『rpm -ivh [Alt-.]/A[Tab]/R[Tab]ctag[Tab]』とすれば以下を入力したことになります。
  6. # rpm -ivh /mnt/cdrom/Asianux/RPMS/ctags-5.5.4-1.i386.rpm

    この例では直前のコマンドのみでしたが、このような場面に役立ちます。

復習が終わったところで私が欲しいと思う機能を書きます。それは[Alt-.]と反対の最初の文字列つまりコマンドにあたる部分を入力できるキーバインドです。もちろん押す度に履歴を遡る機能も付けて。なので[Alt-.]とは貼り付ける文字列が先頭なのか最後なのかの違いになります。

その機能を念頭に入れコードを見てみます。bashのソースを展開し以下の様に検索してみると

# grep -ir "meta-\." *
lib/readline/emacs_keymap.c:  { ISFUNC, rl_yank_last_arg},    /* Meta-. */

lib/readline/emacs_keymap.cというファイルでキーバインドの定義をしているようです。Emacsのキーバインドに合わせているのでこのファイル名は納得ですね。このファイルの中身はキーバインドのリストになっており、rl_yank_last_argが[Alt-.]の機能を提供する関数のようです(名前からしてそんな感じですね)。

また前後では

(rl_command_func_t *)0x0

となっているのがいくつか見受けられますがこれは未割り当てのようです。そこで[Alt-.]が最後の引数であれば、最初の文字列はキー配列から[Alt-,]に割り当てればルック&フィール的にも良いと思います。実際、[Alt-,]は未割り当てのようですし。

{ ISFUNC, (rl_command_func_t *)0x0 },   /* Meta-, */

次にこの rl_yank_last_arg関数の定義にジャンプしてみると

rl_yank_last_arg (count, key)

と仮引数を2つ持つ関数であり、戻り値が

rl_yank_nth_arg_internal ('$', key, history_skip);

と仮引数に何やら'$'だのhistory_skipだのそれらしき処理をしていることが伺えます。

ここで一旦 emacs_keymap.cに戻り「yank」で検索して見ましょう。すると以下のリストが得られます。

{ ISFUNC, rl_yank },              /* Control-y */
{ ISFUNC, rl_yank_nth_arg },      /* Meta-Control-y */
{ ISFUNC, rl_yank_last_arg},      /* Meta-. */
{ ISFUNC, rl_yank_last_arg },     /* Meta-_ */
{ ISFUNC, rl_yank_pop },          /* Meta-y */

[Ctrl-y]はご存じの通り単純にyankです。[Alt-y]は無反応なので動作からは良く分かりません。[Alt-_]は[Alt-.]と同じrl_yank_last_arg関数が設定されているので[Alt-.]と同等のようです。実際確かめて見ると[Alt-.]と同じ動きをしています。ただ『_』は[Shift]キーも必要となるので私は[Alt-.]でいきます。

最後に[Alt-Ctrl-y]ですが、動作から直前のコマンドの第一引数(通常オプションの位置)を貼り付けるようです。ただ動作は[Alt-.]のように押す度に履歴を遡るのではなく、押す度に直前の第一引数が追加されていきます。

この rl_yank_nth_arg関数を追ってみると

rl_yank_nth_arg (count, ignore)

戻り値が

rl_yank_nth_arg_internal (count, ignore, 0);

と rl_yank_last_argと同じ rl_yank_nth_arg_internalという関数の処理が返されるようです。第3引数が0となっており、一方[Alt-.]の方はhistory_skipとなっていますが、これがキーを押す度に貼り付けるのか履歴を遡るのかの違いでしょうか。

そこでrl_yank_nth_arg_internal関数に適切な引数を設定してやれば、あとはrl_yank_nth_arg_internalがうまく処理してくれるのではと期待しましたが、その先を追ってみるとどうやら'$'など予め決まった引数の処理のみしか定義されていないようでした。

なのでもっとしっかり読んでいく必要があるようです、と言ったところで時間が来てしまいました。機会があればこの機能を実現したいところです。また以下の機能も盛り込み楽をしようと目論んでいたりします。

  • [Alt-.]や今回の[Alt-,]に対するトグルバック
  • 例えば[Alt-.]で3つ前の最後の引数を得たく連打していたら4回押してしまったら戻れません。一旦削除してやり直しです。これに対して[Ctrl-p]でコマンドの履歴を遡ったとき行き過ぎても[Ctrl-n]で戻れます。これと同じ機能を追加できれば便利です。

  • 現在入力中のコマンドラインで直前に入力したフレーズの張り付け
  • バックアップをとるときブレース展開を使い

    # cp /etc/samba/smb.conf{,.org}

    としたり、オリジナルに戻すとき

    # mv /etc/X11/xorg.conf{.org,}

    などとしますが、疲れているときなどはどちらが先に展開されるかなんて考えたくなくなります。そんなときこの機能が視覚的で分かり易く役に立つでしょう。

中国の連休

中国には大型連休が年3回ほどあります。

春節 …  日本の正月にあたる休暇で陰暦の1月1日~1月7日。
労働節 … 日本のGWと重なる感じで陽暦の5月1日~5月7日。
国慶節 … 建国記念日みたいなもので10月1日~10月7日。

です。
他は陽暦の1月1日に1日だけあるのみで、この他の祝日は一切ないので日本の休暇日数よりもかなり少ないです。
自分は、中国の暦に合わせての勤務形態です。

休みの間は日本に帰国すればいいのでしょうが、飛行機に乗って移動っていうのがどうも嫌い(飛行機だけでなくどこかへ行くっていうのがあまり好きではない)な自分の場合、結局中国で長い休みを過ごすことになります。
で、やはり、どこかへ行くわけでもないため家でぐ~たら過ごすハメになり、下手すると一週間一歩も外へ出なかった。なんてことになります。

2週間後に国慶節がありますが、今年の国慶節はどこかへふらふらっと行ってこようかと思っています(あくまで思っているだけ)。どこに行くかははっきりしてないです…。

 峨眉山月半轮秋
 影入平羌江水流
 夜发清溪向三峡
 思君不见下渝州

       - 李白

李白の詩のように故郷への念が強ければ帰国っていうのもあるんでしょうが、中国にきて2年と10ヶ月、北京以外に行ったことがないってのも…。

でもホントに行くだろうか。

Webページの文字化けデバッグ

こんにちは、moriyama です。

みなさんは、Web アプリケーションなどで Web ページが文字化けする時に、どのようにしてデバッ>グしているでしょうか?

HTTP の Content-Type ヘッダーや HTML の meta タグの指定が実際と食い違って文字化けしているという事がありますので、今回は、それらの確認方法を紹介したいと思います。

まず、HTTP、XML、HTML での文字コードの指定のおさらいをしておきましょう。

W3C Architecture domain の「文字符号化」のページからの引用です。

符号化の宣言

どのような XML あるいは (X)HTML 文書でも、文字符号化が明確にラベル付けされていることは極めて重要です。これは以下のような方法で行なうことができます:

  • HTTP の Content-Type ヘッダで 'charset' パラメータを使ってください。例:
    Content-Type: text/html; charset=EUC-JP
  • XML の場合、文書の最初にXML 宣言内の encoding 疑似属性を使うか、実体の最初にテキスト宣言を使ってください。例:
    <?xml version="1.0" encoding="iso-8859-1" ?>
  • HTML の場合、<head> 内で <meta> タグを使います。 例:
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >

    XHTML の場合、最後にスラッシュが必要です:

    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

私は、以前、telnet で 80 番ポートを指定して Web サーバーに接続し、直接 HTTP コマンドを叩いて HTTP のヘッダーを確認するなどしていました。

さすがにこの方法は、面倒なので wget コマンドを使って次のようにして HTTP ヘッダーとコンテンツ内の文字コードが食い違っていないか確認するようにしています。

HTTP の Content-Type ヘッダーの確認
$ wget -S -O/dev/null http://www.miraclelinux.com/ 2>&1 | grep -i content-type
Content-Type: text/html
XML / XHTML の encoding 指定の確認
$ wget -O- http://blog.miraclelinux.com/ctd/index.rdf 2> /dev/null | grep 'xml.*encoding'
<?xml version="1.0" encoding="utf-8"?>
HTML / XHTML の meta タグでの指定の確認
$ wget -O- http://www.miraclelinux.com/ 2> /dev/null | grep -i '<meta.*content-type'
<meta http-equiv="content-type" content="text/html;charset=Shift_JIS">

ここで注意しなければならないのは、charset や encoding に指定できる名前は IANA に登録されているキャラクタセット名だけであるという点です。Shift-JIS や CP932、EUC_JP などといった登録されていない名前を指定した場合は、Web ブラウザが解釈できずに文字化けの原因となりますのでご注意下さい。

そして、コンテンツ自身の文字コードも上記の指定と一致している事を確認しておきましょう。

新しめの nkf であれば --guess オプションで文字コードの推定が出来ますので、次のようにして確認する事ができます。

$ wget -O- http://www.miraclelinux.com/ 2> /dev/null | nkf --guess
Shift_JIS

これらの情報を元に、間違った指定がなされている場合は、それぞれの情報を出力している場所を特定し適切に修正していきます。

シェルで名前なしパイプの作り方

さとうふみやす です。またブログ当番の日が来てしまいました。 筆の遅い私にこうも頻繁に記事を書かせるのは酷というものです。 …などと文句を言いつつ本題に入ります。今回も技術ネタです。

あるプロジェクトで Xdialog を利用したシェルスクリプトを作成することになりました。 ここで問題が一つ。 ふつうのシェルは任意の名前なしパイプを作成できません。 もちろん | 構文がありますが、あまり汎用性が高くありません。 このため、Xdialog のような標準入出力で IPC を行なうプログラムをシェルで扱うのは多少の困難を伴います。

続きを読む "シェルで名前なしパイプの作り方" »

不定期Wine談義(1) : WineはWindowsエミュレータではない (Wine Is Not an Emulator)

こんにちは、rkです。今回は個人的に注目している、最近全く流行っていないあるソフトウェアの話をしたいと思います。

Wineというソフトウェアをご存知でしょうか。最近Linuxを業務で使い出した方はひょっとしたらご存知ないかもしれません。一方、Linuxの古参ユーザーの方は「ああ、そんなものもあったな」と思い出されるかもしれません。

Wineというのは、Xウィンドウシステムの走るLinuxを始めとするUNIXライクなシステムで利用することのできる、Windows APIのオープンソース実装です。

というと、古参の方は異論を挟みたくなるかもしれません。そこで、今回は少しばかりそれらについて話してみます。

「Wineは、WindowsアプリケーションをLinuxで動かすためのエミュレーターだったはずでは...(でも全然使いものにならなかった。)」

ということをです。

Wineは、日本に紹介されたその時から、既存のWindowsアプリケーションをLinux上で動作させるためのエミュレーター(WiNdows Emulator)として一般に認識されてきました。しかし、いくつかの理由でそれは正しい認識では無くなってきています。

(1) Linux以外で動作するようになった

まずは、簡単な方から。現在WineはFreeBSDおよびSolaris、さらにMac OS Xに移植されています。(Mac OS X版はまだ別プロジェクト。) ですので、これらのOSでもWindowsのAPIを使ったアプリケーションが走ることになります。

(2) Wineの利用者層が変化した

Wineが紹介された初期のころ、ほとんどの利用者は単に今まで使っていたWindows環境からの移行手段、あるいはWindows(やその他のアプリケーション入れ替えの)ライセンス費用の節約方法として、Wineに期待を寄せていました。そして、実際には動くソフトが多くないことが分かり、利用を諦めたケースが多かったようです。しかし、現在ではWindowsアプリケーションの移植手段として、デベロッパにより利用されるケースが増えてきたと感じています。

例えば、一太郎 for Linux(除くATOK)は、中身はWindows版の一太郎2004であり、Wine上で動かすことによりWindowsと全く同じ使用感を実現しています。また、Google LABSでは画像ツールのpicasaのLinux版を提供するにあたりWineを活用しています。

実際のところ、Wineの中身は多彩でありエミュレーターの範疇を超えています。例えば、MinGW相当のgccすら備えています。したがって、単にエミュレーターと言うより、Windows APIというくくりで見た方が良いということになります。

Wineのツリーの中身については、そのうち紹介したいと思います。

(3) Wineの完成度は高まりつつある

昔のWineと今のWineではかなり完成度が違います。Wine HQのページによると、Windows APIの62%(8/24現在)が実装済みとしています。私の感覚としては、落ちるソフトより落ちないソフトの方が増えたと感じています。

Wineの完成度がこのまま高まっていけば、いずれWindowsのソフトをWineで動かしたり、Wineを内包して極力プログラム側を修正しないでLinux版を作成するというようなことが増えるのではと期待しています。

スピンロックその5

前回の_raw_spin_trylock()の紹介では、CONFIG_PREEMPとCONFIG_SMPとCONFIG_DEBUG_SPINLOCKのすべてが定義されているケースの実装における

if (ret)
      debug_spin_lock_after(lock);

について触れていませんでした。そこを補足します。

変数 ret が真になるのは、ロックを獲得できた場合です。この時、デバッグ用途のロック情報を保存するためdebug_spin_lock_after()が実行されます。

static inline void debug_spin_lock_after(spinlock_t *lock)
{
     lock->owner_cpu = raw_smp_processor_id();
     lock->owner = current;
}

typedef struct {
     raw_spinlock_t raw_lock;
#if defined(CONFIG_PREEMPT)&& defined(CONFIG_SMP)
     unsigned int break_lock;
#endif
#ifdef CONFIG_DEBUG_SPINLOCK
     unsigned int magic, owner_cpu;
     void *owner;
#endif
} spinlock_t;

ロックを取得したタスクおよびその時のCPUが記録されるわけです。ダンプ情報でこれを確認したブログ「kernel-2.6.17でのspinlockのオーナー情報」も参照して下さい。

さて、その2からスピンロック取得処理の実装を追ってきましたが、今回でようやく(b)のケースが終わりです。次回は最後の(c)のケースです。

(a) CONFIG_SMPとCONFIG_DEBUG_SPINLOCKがともに未定義の場合、すなわちデバッグ無しのユニプロセッサ・カーネルの場合。

(b) CONFIG_PREEMPとCONFIG_SMPがともに定義されている場合、すなわちプリエンプションなマルチプロセッサ・カーネルの場合。

(c) それ以外の場合。

江南一遊

この前、ツアーに参加して中国の江南数省を巡りました。今回のツアーは中国現地の旅行代理店にコースの選定を任せたのが良かった。というのは、日本の旅行代理店の知らない場所がコースの中に入っていたからです。江南というのは長江を境目に南に位置するエリアを指します。長江流域に洞庭湖を始め、西湖など歴史上人物の活躍舞台となったところがいくつか日本にも知り渡っています。抗州の西湖を小型の観光船に乗って一周したところ、予想外ですが、湖の岸辺にあの宋朝の大文人の蘇東玻の記念館にめぐり会えました。しかし、日本では李白の方が良く知られています。白蛇伝に出る雷風塔は西湖にあるのが知りませんでした。今は建て替えられ、鉄で出来ているとのこと。ところで、白蛇伝って何でしたっけ?

_200506200608_009_3

_200506200608_004_1

rootパスワードを忘れた場合の対処方法

今日は、Linux初級編として、ML40でrootパスワードを忘れた時の対処法(ブートローダがGRUBの場合)について書きます。

GNU GRUBのブート画面で起動するカーネルの行にカーソルを移動し、「e」キーを押します。

Asianux (2.6.9-34.21AXsmp
Asianux (2.6.9-34.21AX)

次に

kernel /vmlinuz-2.6.9-34.21AXsmp ro root=LABEL=/1

のように書かれているkernel行にいき、「e」キーを押します。

その後は

grub edit > kernel /vmlinuz-2.6.9-34.21AXsmp ro root=LABEL=/1

のような編集画面が出てくるので、以下のように1またはsingle(S,s)と追記します。

grub edit > kernel /vmlinuz-2.6.9-34.21AXsmp ro root=LABEL=/1 1
or
grub edit > kernel /vmlinuz-2.6.9-34.21AXsmp ro root=LABEL=/1 single
or
grub edit > kernel /vmlinuz-2.6.9-34.21AXsmp ro root=LABEL=/1 s
or
grub edit > kernel /vmlinuz-2.6.9-34.21AXsmp ro root=LABEL=/1 S

書き終わったら、Enterキーを押します。その後、「b」キーでブートします。

そうするとシングルユーザモードで立ち上がるので、passwdコマンド使用してパスワードの変更を行います。

sh-3.00# passwd

これでrootのパスワード変更完了です。

Emacs global-set-keyとverilog-mode

こんにちは、tshojiです。前回はサーバールームの管理のことをお話しましたが、今回は進捗があまりない(段ボールの整理くらい^^;;)のでEmacsのキー設定とverilog-modeについてお話することにします。

まずはEmacsのmode問わず、キーにマクロを当てるglobal-set-keyを紹介します。Emacsの設定は通常ホームの.emacsファイルに記述します。

私はよくファンクションキーに割り当てたりしています。例えば、F1にshellやF2,F3,F4にキーマクロ記憶、停止、再生などです。実際に書くと下記のようになります。

(global-set-key [f1] 'shell)
(global-set-key [f2] 'start-kbd-macro)
(global-set-key [f3] 'end-kbd-macro)
(global-set-key [f4] 'call-last-kbd-macro)

M-x describe-binding やM-x describe-function、M-x describe-key を使うと設定しやすいかと思います。

次にVerilog-HDLをEmacsで調べやすく、書きやすくするverilog-modeの紹介です。verilog-modeはc-modeと同じように予約語を色分け表示してくれたりします。但し、verilog-modeはc-modeのように標準で入っていないので、ダウンロードする必要があります。verilog-modeはverilog.comのサイトからダウンロードすることができます。

キーワードのmoduleやinput、outputが色分けで表示されるので大変便利です。他にもVHDLスキーな方はVHDL-modeや、もっと抽象度の高いSystemC使いの方はSystemC-modeもあるのでググってみてはいかがでしょうか。

Emacsの話題はもっと詳しいサイトがたくさんあるので、調べながら自分用に色々とカスタマイズするといいと思います。

秀丸になりたーい

実は私はつい半年前まで、まったく Linux を利用したことがありませんでした。学校でも研究室が窓系 OS だったため、UNIX にすら触る機会がなく、純粋培養の窓ユーザーとしてコンピュータ歴 10 年です。

そんな私なので、初めて vi を起動したとき、画面の前でフリーズしてしまいました(直観的に何もできない !)。今では大分慣れましたが、やはり今でもエディタは「秀丸」がベストと思っています。

というわけで、手間をかけずに vi をどれだけ「秀丸」に近づけるか色々試した結果、以下のようにしています。

■ taglist.vim

taglist.vim というアドオンを使っています。

このアドオンを使うと、このように左側に関数や変数一覧が出てきます。

Vim_1

■ grep.vim

grep.vim というグレップのアドオンも入れています。

ちなみに、.vimrcで以下のように設定し、自分なりに秀丸っぽくしています。

nnoremap <silent> <F1>  :help taglist<CR>
nnoremap <F3>           :Rgrep -i
nnoremap <silent> <F5>  :copen<CR>
nnoremap <silent> <F6>  :cclose<CR>
nnoremap <silent> <F9>  :TlistHighlightTag<CR>
nnoremap <silent> <F10> :set number<CR>:TlistOpen<CR>
nnoremap <silent> <F11> :TlistClose<CR>:set nonumber<CR>

まだまだ他にも便利ツールを日々探し中です。何かないかなー ???

PRIDE OF MIRACLE

9/2(土曜日)に、弊社では「PRIDE OF MIRACLE」というイベントを行いました。イベントと言っても対外的なlinuxのイベントというものではなく、弊社で働く人達の家族を招いてのレクリエーションです。普段、こころおきなく仕事に集中できるのは、家族のご支援あってのことです。ご主人、奥さま、お父さん、お母さんが何の会社で働いていて、どんな仕事をしているのか、実際にオフィスに来てもらって披露し、理解してもらうという目的のもと企画しました。

オフィスツアー、会社説明、パーティーの3部構成で、最後には豪華商品をかけての壮絶な勝負となったイベントでしたが、最終的にご家族の方にはミラクル・リナックスの雰囲気を理解していただいたのではないかと思っています。実行委員もお疲れさまでした。

しかし、ここではあえて反省点に着目し、来年以降の開催に役立てていきたいと思います。

1.オフィスが殺風景すぎ

今のオフィス環境は、家族を招くには、効率重視のあたりまえのオフィスすぎます!見せ甲斐がない。来た人があっと驚くような楽しいオフィスにしたいものです。ちなみに私の希望は木がうっそうと生い茂ったジャングルのようなオフィスです。犬を離し飼いで飼いましょう。

2.社長の会社説明が難しすぎ

社長曰く、超簡単なプレゼンのはずだったんですが、、、正直子供に"OSとは"は難しすぎでした。。。社長、来年にむけて桜坂やっくんのようなキャッチーなイラスト入りプレゼンと客いじりを会得しましょう。

3.マジシャンが未熟

パーティーの余興でマジシャンを呼んだのですが、まだまだ経験が浅いのでしょうか、ネタバレにこっちが気をつかうくらいでした。って、彼がこのブログ見ていないといいけど。

4.CTOの話長すぎ

パーティー開始の乾杯のあいさつで前に出たCTO""さんでしたが、一旦マイクを持つと、話がとまりません。乾杯前のあいさつは短めにしましょう。

というわけで、クールな関係が好まれる世の中に逆行するようなイベントですが、こういうアットホームな関係を今後も大切にしたいものです。

写真は、これまた余興で呼んだ、子供に恐がられるピエロです。

2006_09_02_017

MIRACLE LINUX v4.0が実質割引に!?

ミラクル・リナックス オンラインショップの話ではありませんので御注意を。

すでに弊社のWebサイトIPAのWebサイトでも一般に公表されていますが、現在ミラクル・リナックス社ではMIRACLE LINUX v4.0に対してISO/IEC15408(CC、Common Criteriaとも呼ばれます)というセキュリティ認証規格を取得するための作業を進めており、私もそのための作業の一員として関わっています。

ISO/IEC15408という単語を初めて目・耳にされた方も多いと思うのですが、正式な名称は「ISO/IEC 15408 情報技術セキュリティ評価基準」と言い、簡単に言ってしまうと、IT製品やITシステムがセキュリティの観点から適切に設計・実装されていることを評価する国際標準規格です。まだ日本での認知度は低いですが、アメリカでは国防総省に納入する製品には必須の条件となっていることが有名ですし、現在では日本電子政府計画の調達要件にもなっています。

ではなぜMIRACLE LINUX v4.0の割引の話になるかと言いますと、この認証制度に絡む話として、昨年まで実施されていたIT投資促進税制(IT減税)が前年度で終了し、代わって本年度から施行された情報基盤強化税制の対象がISO/IEC15408認証済みの製品に限られているため、結果としてMIRACLE LINUX v4.0は認証を取得してから、この税制が終了する2008年3月までの期間は実質的に割引となるわけです。

税金が控除されるための条件などもありますが、せっかくの制度を有効活用しない手はないと思いますので、今後MIRACLE LINUX v4.0の購入を検討されている場合は、対象となるかどうかを確認するだけでも価値はあるのではないでしょうか。

さて、実際の認証取得作業はと言いますと、ISO/IEC15408の理解に始まり、書類の作成やセキュリティに関連する技術的調査などなど、やるべきことは非常に多くありますし、作成する書類も記述方法がある程度決まっており、その書き方を理解するだけでも一苦労しているところです。しかも、MIRACLE LINUX v4.0は国内初のOS認証であるため、参考にできる資料も少ないこともあり、作業はほとんど手探りの状態です。

日本国内では、デジタル複合機や組み込み機器に認証済み製品が多く見られるのですが、最近はそういった製品の資料(ISO/IEC15408認証に必要な書類の中でも、セキュリティターゲットという書類だけは一般公開されます)を読み漁り、作業を進めつつ理解を深めつつといった日々を送っています。日本中で考えてもこの認証に関わった経験のある人は少ないでしょうから、この苦労を共感できるような人とはなかなか出会うことはないだろうなぁなどと考えたりしています。

現時点ではまだ認証申請が完了し、作業を進めている段階ですので、実際に認証取得が完了するのはもう少し先ですが、できるだけ早くに完了し、プレスリリースやこのブログでお伝えできればと思います。

素敵なペアプログラミング?

3ヶ月くらい前から、10歳以上年が離れた若手と一緒にとあるプログラムのデバッグ作業をしています。ここでは彼をAくんと呼ぶことにします。この作業は、私は他の作業と掛け持ち、Aくんはほぼ専任、という体制で進めています。

このAくんは5月に入社したばかり、入社したときにはまだ19歳で新人歓迎会ではお酒が飲めなかったという、ピカピカの新入社員です。一方、私は、すでにこの業界13年目のそれなりの経験を積んできた、ややくたびれたエンジニア兼マネージャです。作業を始めた当初は、経験年数13年差がお互いにとってかなり負担でした。私が5秒で解決できる問題も、Aくんにとっては始めてのことですからなかなか解決できません。基本的なコマンドの使い方、コードの読み方、仕事の進め方を手取り足取り教えなければならない状況でした。作業が煮詰まってくるとなかなか優しく教える余裕が持てず、きつく言ってしまうこともたびたびありました。かなり辛かっただろうと思います。

しかし、最近、二人で作業をしている相乗効果が現れてきましたように感じています。これが世間でいうペアプログラミングというヤツかも知れません。私が彼と作業をしていて、明らかに一人でやっているときよりも効果があると感じたことを紹介します。

●作業進捗アップ

私は複数の作業を掛け持ちしているので、お客様との打ち合わせや社内の打ち合わせにたびたび出席しています。一人で作業していると、この時間は作業が完全にストップします。しかし、いまはAくんが作業を続けてくれています。最初は、私がいないとほぼ足踏み状態だったのですが、最近は、打ち合わせから返ってくると、バグがいくつか修正してくれていたりします。つかれているとき、「小人さんが作業を進めてくれるといいのにな」と思ったことはありませんか?いままさにそれが実現しています :-)

●相互チェック作用

一人で作業していると、ちょっとした思い込みで間違った判断をしてしまうことがあります。しかし、二人で作業していると自分の考えを相手に伝え、それを互いが理解することで、ミスの検出率がアップします。最初のうちは、私がAくんに自分の考えを説明することで、自分の頭を整理していたのですが、今はしっかりとレビューアとして聞いていてくれて、間違いを指摘してくれるようにまでなりました。

●モチベーションアップ

一人で作業していてモチベーションが下がってしまうと、リセットするために早めに帰宅することがありました。二人で作業をしていて、私のモチベーションが下がっていても、Aくんの頭が冴えているときは、Aくんのモチベーションに引っ張られてやる気が少し回復したりします。お互いのやる気を支えあっている、というところでしょうか。

Aくんは、とても技術の習得や仕事に対して前向きに取り組んでいます。そんな彼と一緒にしていて、彼がいまの仕事からいろんな事を学んでくれ、成長しているのを見るのが、とても私は嬉しく感じます。いまでは、私の至らない部分をしっかりフォローしてくれて本当に助かっています。

コーチングの本を読んだりしましたが、私にはそんな器用なことはできません。かつて自分がそうであったように、昔の職人さんの世界のように徒弟関係でしか技を伝えられません。やっぱりコード書きの仕事は職人仕事なのかな?と改めて感じていますが、みなさんは如何でしょうか?