ck@cygwin 1.7

cygwin 1.7 より前では、ターミナルエミュレータにckを使っていたのですが、cygwin 1.7から動かなくなってしまったので、仕方なく mintty や poderosa を使用してきました

しかし、mintty はフォントの色をうまく変更できなかったり、poderosaは動作が少し不安定だったりしたので、困っていました。

それが、とうとう cygwin 1.7 に対応したckを公開してくれた人がいましたので使用させて頂きました。 これで、元の cygwin 生活に戻れそうです。

インストール方法は簡単で、zipを展開してck.app.dll, ck.con.exe, ck.exe を cygwinの/binにコピーします。さらに。.ck.config.js を自分のホームディレクトリにコピーします。

起動は、ck.exe を起動するだけです。

.ck.config.js は設定ファイルです。デフォルトでは(vista以上では?)透過ウィンドウになっていて見にくいため、

Config.window.transparent = 0;

にすることをお勧めします。またデフォルトのウィンドウサイズは小さいため

Config.window.cols = 160;
Config.window.rows = 45;

としています。さらに、バックグラウンドが黒で濃い青は見にくいため、色設定を以下に変更してあげました。

Config.window.color_color4 = 0x5555cd;
Config.window.color_color12 = 0x5555ff;

download : ck-330.zip


CodeReadingWiki 改造版でソースコード解読

etherさん作成のCodeReadingWiki が、ソースコードを読むのにすごく便利で使わせて頂いていました。これはソースコードにglobalというツールでタグをつけ、Webブラウザから閲覧しながら必要に応じてソースコードにコメントを挿入できるソフトウェアです。

ソースコードはタグ付けされているので、簡単に変数や関数の定義位置に飛べたり、検索することができ、Webブラウザから閲覧できるので、複数の人とコメントを共有したりできます。

しかし、最近は更新が全然ないようなので、独自に少し改造しました。変更点は以下の通りです。

  • 見た目を変更
  • コメントはダブルクリックした行の下ではなく上に挿入
  • 複数のプロジェクトに対応 → データベースの構造を変更したので互換性がなくなりました。
  • コメントの検索機能を実装
  • Linux用のセットアップスクリプト作成
    • 元々のCodeReadingWikiはWindows前提でしたが、これはLinux前提です。mkcrwiki.shを移植すればWindowsでも動くとは思います。
  • ディレクトリ構造・ファイル構造を変更

スクリーンショット (gnu-globalのソースコードの例)

トップページ

crwiki01.jpg

コメントを入れたいソースコードの行(262行目)をダブルクリックしてコメントを挿入していることろ。

crwiki02.jpg

コメントを入れた後に、同じ行(262行目)をダブルクリックして、コメント挿入完了したところ。赤枠と赤文字でコメントが表示されます。

crwiki03.jpg

コメントの検索結果。global.cの262行目にfunctionというコメント文字列が存在しています。

crwiki04.jpg

ダウンロード

crwiki-mazn-0.2.tar.gz

インストール

動作確認はCentOS 5 + firefox 3.6 で行っています。手順はあまり詳細に書いていないので、不明点がある場合はコメントください。

MySQLのインストール

yumで簡単にインストール可能です。設定ファイル例はcrwiki-mazn-x.x.tar.gzに入っていますので参考にしてください。

# yum install mysql-server

MySQLのインストールの詳細は省略します。MySQL起動後、以下をMySQLに対して発行しテーブルを作成します。

CREATE DATABASE crwiki;
CREATE TABLE remarks (prj VARCHAR(65) NOT NULL, src VARCHAR(255) NOT NULL, line INT NOT NULL, remark MEDIUMTEXT NOT NULL, PRIMARY KEY(prj, src, line)) TYPE = MYISAM ;

PHPのインストール

# yum install php

PHP mbstring や php-mysqlのインストール

PHP関連の必要なモジュールをインストールします。

# yum install php-mbstring php-mysql

Apacheのインストール

Apacheはデフォルトでインストールされるので、必要に応じてApacheのルートディレクトリを設定してあげてください。ここでは、/home/www とします。

Gnu Globalのインストール

Gnuglobal はCentOSには付属していないので、ソースからインストールします。今回は global-5.8.2 で動作確認をしています。バージョンが異なると、globalで生成されるhtmlファイルに違いが出て、うまく動かない可能性がありますので注意です。

CodeReadingWiki (crwiki) のインストール

今回のディレクトリ構成は以下のようにします。

/home/www                        ・・・ Apacheのルートディレクトリ
       |--- crwiki               ・・・ crwiki用のディレクトリ
               |--- linux-kernel ・・・ 解読したいソースコード

crwiki をダウンロード・展開し、すべてのファイルを/home/www/crwikiのディレクトリに移動します。ファイルに含まれているファイルは以下のファイルです。

  • crwiki.awk          ・・・ globalで生成したhtmlを変更するためのawkファイル。mkcrwiki.sh から使われる
  • crwiki.js               ・・・ Webブラウザへ送信されるJavaScriptファイル
  • crwikiconf.cgi     ・・・ crwikiの設定ファイル。主にDBの接続設定を記述
  • crwikilib.php      ・・・ crwikiの処理を行うメインファイル
  • mkcrwiki.sh        ・・・ 解析実行用シェル。解析したいソースコードのあるディレクトリに対して実行する
  • style.css               ・・・ Webブラウザに送信されるスタイルシート
  • my.cnf                    ・・・MySQLの設定ファイル例。削除しても構いません

crwikiの設定を行います。MySQLに接続するためのホスト名、ユーザ名、パスワードを設定してください。

# vi /home/www/crwiki/crwikiconf.cgi
<?php
$dba_class   = "MySQLAgent";
$host        = "localhost";
$user        = "root";
$password    = "hogehoge";
$db          = "crwiki";
$db_charcode = "utf8";
?>

読みたいソースコードをcrwikiディレクトリにディレクトリを一個作って置きます。ここでは、linux-kernel というフォルダにLinux カーネルソースコードがあるとします。

ソースを置いたら、mkcrwiki.shでソースコードの解析をします。

#  cd /home/www/crwiki/
# ./mkcrwiki.sh linux-kernel

プロジェクト名を設定します。プロジェクト名はユニークにしてください。
デフォルトではディレクトリ名が入っています。プロジェクト名が空の場合は動作しません。

# vi linux-kernel/crwiki.php
<?php
// Prject Name
$prj = "linux-kernel“;
require ‘../crwikilib.php’;
?>

あとは対象サーバのURLにWebブラウザでアクセスしてください。

参考URL

http://rainyday.blog.so-net.ne.jp/2006-10-07

http://sourceforge.jp/projects/crwiki/


Firefox 3.6.x のメモリ消費が激しすぎる

Firefox を長時間使っていると、メモリ消費が700MBを超えています。

タブの開きすぎかなと思い 全部閉じてみても意味なし。URLにabout:configと入力し、いろいろとチューニング。

browser.cache.offline.capacity=0
browser.cache.offline.enable=false
browser.cache.memory.capacity=16384

これで様子を見てみます。

== 追記 ==

今のところ100MBちょっとで安定しています。


ディスクイメージをデバイスファイルとして扱う@CentOS5.4 + Xen

Xenの仮想マシンのディスクは、パーティションやファイルを使用できますが、これらのパーティションやファイルを、仮想マシンを起動せずに中身を覗きたい場合があります。こういうときは、パーティションやファイルをLinuxのデバイスファイルとして扱ってあげることで、ディスクイメージをマウントすることができます。

デバイスファイルにするには、losetupコマンド、さらに作ったデバイスファイルをディスクと見立ててパーティションを読み取るのがkpartxコマンドです。

まずはlosetupコマンドで、パーティションやファイルをループバックデバイスとして設定していきます。ループバックデバイスは/dev/loop0や/dev/loop1などですが、使われていないループバックデバイスを探します。

# losetup -f
/dev/loop1

ディスクイメージを/dev/loop1にマッピングします。ここではファイルを指定していますが、パーティションでもOKです。

# losetup /dev/loop1 /root/xen.img

設定できたかを確認します。下の例ではloop1にxen.imgが設定されています。

# losetup -a
/dev/loop0: [0803]:41058319 (/root/cent5.4.iso)
/dev/loop1: [0803]:42238103 (/root/xen.img)

これで/dev/loop1は、通常のディスクでいう/dev/hdaなどに相当します。しかし実際のディスクの場合、パーティションをつくると、/dev/hda1とか/dev/hda2とかいった風に番号がついていきますが、losetupだけではこれらのパーティション毎のデバイスファイルが作られません。そこで使用するのがkpartxコマンドです。

kpartxでloop1上のパーティションを見てみます。ここでは3っつのパーティションを確認できます。

# kpartx -l /dev/loop1
loop1p1 : 0 208782 /dev/loop1 63
loop1p2 : 0 4192965 /dev/loop1 208845
loop1p3 : 0 20980890 /dev/loop1 4401810

パーティションテーブルから、パーティションのデバイスファイルを作成します。

# kpartx -a /dev/loop1

確認します。/dev/mapperやfdiskコマンドで確認します。

# ls /dev/mapper/
# fdisk -lu /dev/loop1
~省略~
/dev/loop1p1   *          63      208844      104391   83  Linux
/dev/loop1p2          208845     4401809     2096482+  82  Linux swap / Solaris
/dev/loop1p3         4401810    25382699    10490445   83  Linux

ext3フォーマットのパーティションなどはそのままマウント可能です。

# mount /dev/mapper/loop1p3 /mnt/tmp

元に戻すには、アンマウント後、以下のようにコマンドを実行するだけです。

# umount /mnt/tmp
# kpartx -d /dev/loop1
# losetup -d /dev/loop1

minttyの色変更を変更する@Cygwin 1.7

最近、Cygwin 1.7でコンソールにminttyを使用してます。

このminttyでsshを使って、他のシステムにログインしているのですが、青が濃く見づらいです。こういう時は、以下のようなシェルを実行すると、色を変更できます。

#! /bin/bash
ESC="e]4;"
echo -e \
       "${ESC}0;#000000\a" \
       "${ESC}1;#ff0000\a" \
       "${ESC}2;#00ff00\a" \
       "${ESC}3;#ffff00\a" \
       "${ESC}4;#4444ff\a” \
       “${ESC}5;#ff00ff\a” \
       “${ESC}6;#00ffff\a” \
       “${ESC}7;#bbbbbb\a” \
       “${ESC}8;#666666\a” \
       “${ESC}9;#ff9999\a” \
       “${ESC}a;#99ff99\a” \
       “${ESC}b;#ffff99\a” \
       “${ESC}c;#9999ff\a” \
       “${ESC}d;#ff99ff\a” \
       “${ESC}e;#99ffff\a” \
       “${ESC}f;#ffffff\a”

== 2010/6/5 追記 ==

この設定をしたホストにscpをすると、なぜかファイル転送ができなくなります。どう回避するのか・・・