ソフトウェアエンジニア現役続行

雑多なことを綴ります

ndiswrapper-1.56 と kernel-2.6.35

ndiswrapperはカーネルが上がるたびに自分で再コンパイルして、カーネルモジュールをインストールしなくてはなりません。

fedora14が出たので、13から上げてみました。kernelのバージョンは2.6.35です。構造体のメンバーが変わったようで、コンパイルでエラーになりました。現時点でndiswrapperの最新バージョンは1.56です。


$ make
wrapndis.c: In function ‘set_multicast_list’:
wrapndis.c:953: error: ‘struct net_device’ has no member named ‘mc_count’
wrapndis.c:956: error: ‘struct net_device’ has no member named ‘mc_count’
wrapndis.c:960: error: ‘struct net_device’ has no member named ‘mc_count’
wrapndis.c:960: warning: type defaults to ‘int’ in declaration of ‘_min2’
wrapndis.c:960: error: ‘struct net_device’ has no member named ‘mc_count’
wrapndis.c:967: error: ‘struct net_device’ has no member named ‘mc_list’
wrapndis.c:968: error: dereferencing pointer to incomplete type
wrapndis.c:969: error: dereferencing pointer to incomplete type
wrapndis.c:971: error: dereferencing pointer to incomplete type

インターネットで調べたところ、既知の問題らしく、すでにパッチは発行されていました。
SourceForge.net: ndiswrapper: Detail: 3034422 - 2.6.35 compatible
Attached Fileのところからパッチをダウンロードできます。

ダウンロードしたら、次のようにしてパッチを適用すれば、コンパイルが通るようになります。


$ patch -p0 < 2.6.35.patch

デバイスドライバは、カーネルのバージョンが上がるたびに追随しなくてはならないので大変ですね。シャープ社がIS01のAndroid OSのバージョンアップを諦めたのも分かる気がします。利用者としてはとても困りものですが。。。

KDDIが「IS01」のOSアップデート打ち切り決定、「実現は不可能」という結論に - GIGAZINE

関数のスタック使用量を計算する方法

POSIXが使える環境でC言語のプログラムを書いていて、特定の関数が使用するスタックの量を調べる必要がありました。

別スレッドを生成してその特定の関数を実行させることで、スタックの使用量を調べることができます。あらかじめ別スレッドのためのスタック領域用に明示的にメモリを確保しておき、マジックナンバーで充たしておきます。そしてpthread_setstack()によって別スレッドがそのスタック領域を使用するようにして、別スレッドで関数を実行させます。実行後にスタック領域のマジックナンバーを見ることで、関数が使用したスタックの量が分かります。

ソースを読んだほうが分かりやすいかも知れません。以下では function() という関数が使用したスタックの量を標準出力しています。


// コンパイル方法:gcc -Wall -Werror -std=gnu99 -o check_used_stack check_used_stack.c -lpthread

#include
#include
#include
#include

#define STACK_SIZE (1024 * 1024 * 10) // 10 MB
#define MAGIC_NUMBER 'Z'

static void *function(void *arg);
static void check_stack(char *adr);

int main(void)
{
 // 子スレッド用にスタック領域を確保して、MAGIC_NUMBERで塗りつぶす
 char *stack_adr = (char *) malloc(STACK_SIZE);
 for (int i = 0; i < STACK_SIZE; i++) {
  stack_adr[i] = MAGIC_NUMBER;
 }

 // 子スレッドに確保したスタック領域を使用させる
 pthread_attr_t thread_attr;
 pthread_attr_init(&thread_attr);
 pthread_attr_setstack(&thread_attr, (void *) stack_adr, STACK_SIZE);

 // 子スレッドを生成
 pthread_t thread;
 pthread_create(&thread, &thread_attr, &function, NULL);

 // 子スレッドが終了するのを待つ
 pthread_join(thread, NULL);

 // 子スレッドが消費したスタックサイズを出力
 check_stack(stack_adr);

 // mallocしたスタック領域を返却
 free(stack_adr);

 return 0;
}

static void *function(void *arg)
{
 char buff[1024 * 100]; // 100KB
 memset(buff, MAGIC_NUMBER + 1, sizeof buff);
 return NULL;
}

static void check_stack(char *adr)
{
 int i;
 for (i = 0; i < STACK_SIZE; i++) {
  if (adr[i] != MAGIC_NUMBER) {
   break;
  }
 }
 printf("Used %d byte\n", STACK_SIZE - i);
}

僕の環境で実行すると「Used 106128 byte」となりました。buffに100KB割り当てたのが効いてます。

Jolt Productivity Award: Testing and Debugging

昨日(2010年12月1日)、Jolt Productivity Award: Testing and Debuggingが発表されていました。

Jolt Productivity Award #1: Test and Debugging - QA Wizard Pro 2011 (Seapine Software)
Jolt Productivity Award #2: Testing and Debugging - Sonar
Jolt Product Excellence Award: Testing and Debugging - AutomatedQA TestComplete 8 (SmartBear Software)

2番目のSonarオープンソースなので無料で利用することができます。
f:id:Oswald:20101202072603p:image
まだWEBページをさらっと読んだだけですが、ソースコードからコードの品質向上のための次の7項目のチェックを行ってくれるようです。

対応されている言語は、Javaがビルドインされていて、プラグインによってFlexPHPPL/SQLCobolVisual Basic 6が使えます。

時間のあるときに使ってみようと思います。

オープンソースで、商用のアプリケーションと肩を並べるほどのものが作れるのは本当にすごいことです。感謝しながら利用しないといけませんね。

Fedora14にMozcをインストール

FedoraにデフォルトでインストールされているAnthyというIMEはあまり優秀ではありません。特に長い文字を変換しようとするとうまく行かないようです。

例:
ゆいがどくそん → 湯意が独尊
すみとみしんたくぎんこう → 隅とも信託銀行
しゅかいせん → 首魁せん

そこでIMEとしてMozcを使ってみることにしました。MozcとはGoogle日本語入力オープンソース版です。Anthyよりはずっと賢くて満足しています。しかし残念な事にGoogleが収集した大規模語彙データは入ってません。

インストール方法

インストール方法は簡単です。Fedoraでもパッケージが提供されるようになったので、yumでインストールすることができます。パッケージ名はibus-mozcです。

[root@fedora ~]# yum install ibus-mozc

あとは「メニュー」→「設定」→「入力メソッド」をクリックまたは「ibus-setup」コマンドをたたいて「入力メソッド設定ツールを起動させて「入力メソッドの個人設定」をクリックします。
f:id:Oswald:20101127110328p:image
そして「インプットメソッド」タブの「インプットメソッドの選択」から「日本語」→「Mozc」を選択して「追加」をクリックすればOKです。
f:id:Oswald:20101127110342p:image
f:id:Oswald:20101127110354p:image

これでインプットメソッドでMozcを選択できるようになります。

※最初は、MozcをGoogle CodeのLinuxBuildInstructionsを見ながらインストールしようと思ったんですが、

Currently, we only support Ubuntu 9.10 and 10.04 for building Mozc. We plan to add support for other platforms.

と書かれており、apt-getをyumに置き換えて試したものの、途中でビルドエラーが出て、原因を調査するも途中で挫折しました。

メディアマーカーを始めました

アプレンティスシップ・パターンを読みましたで紹介したとおり、アプレンティスシップ・パターンは具体的な行動まで記載されていて良いです。

僕がすぐに始めてみようと思ったことの一つが、読書リストを作ることです。アプレンティスシップ・パターンでは、読書リストを作ることの是非を次のように述べています。

このパターンは、単に、読む予定の本を管理することに関するものではありません。あなたの過去の読書週間を振り返る仕組みでもあります。(中略)この本の情報を公開すれば、他の人達が今後の読書のための提案を寄せてくれる可能性があります。

ということで、僕は読書リストとしてメディアマーカーを使ってみることにしました。このブログでも、サイドバーでメディアマーカーブログパーツを使っています。

読書リストとしては、メディアマーカーの他にも有名どころでは、ブクログ読書メーターがあります。僕がメディアマーカーを選んだ決め手は、ここだけが読了日順に登録した本を並び替えることができるからです。

今後、読んでいく本はメディアマーカーで管理していきます。今まで読んだ本も時間があるときに追加していこうと思っています。

僕のメディアマーカーの情報を見て、お勧めの書籍があればぜひ教えてください。

ダイバーシティ

ダイバーシティという本を読みました。
きっかけは、自分の部署に外国人が来て、そのときに上司から「ダイバーシティ・マネジメント」という言葉を聞いて、興味を持ったからです。ダイバーシティとは英語で「多様性」のことです。

読みやすくて、そしてとても考えさせられる本でした。

本書は2部構成になっていて、前半は「六つボタンのミナとカズの魔法使い」という物語で、後半はアメリカの大学の社会科学の講義で「ライオンと鼠」という物語を通じて先生と生徒が日本とアメリカ文化の違いを議論し、そこから今の日本の社会問題を指摘しています。

前半は、社会科学的問題を考えるための「生きた素材」としての物語で、とても分かりやすく楽しみながら読み進められました。

後半では、今の日本の社会問題として、現在の子どもや若者の自尊心が低いことを指摘しています。

それよりもっと大きな問題は、日本の子どもの自尊心が低いことである。
1990年代の半ばに、ベネッセ教育研究所は、11歳の小学生の国際6都市比較調査によって、恐るべき事実を明らかにした。東京のおいて自分を「正直な子」「親切な子」「勤勉な子」「勇気のある子」とした子は、それぞれ10数%にすぎないというのである。
一方、アメリカのミルウォーキとオークランド、ブラジルのサンパウロ、中国の北京などではどれも40%以上で、アメリカでは60%以上にのぼる項目もあった。


また、別の社会問題として、「空気を読む」ことが会話をとても非合理的なものにしていると指摘しています。

現在の日本の若者の対話には消費的価値しかない。皆で集まって、面白おかしく楽しんで、ノリにノって、ああ楽しかった。それでおしまい。そのときはよい。でも人がバラバラになったら、宴の後みたいに、空っぽでむなしいだけ。寂しくてしょうがない。将来にも全然つながらない。そういう対話だ。そして、たまに生産的な対話を持ち込む者がいようものなら「疲れる」と拒否する。思考や想像を要求される対話を不快と感じるほど、対話が消費的になっている。

日本では会議などの意思決定の場でも「空気を読んで」行動する人が多い。自分が少数派になって、孤立することをいやがるからだ。でも、そうやって「空気を読んで」行動すると、「空気に合う」情報は出すが「空気に合わない」情報は出さないということになりかねない。つまり、会議での合意は、偏った情報だけで達成されることになる。または、会議の最初のほうで誰が何を言ったかに基づいてみなが「空気を推測する」結果、どういうふうに議論が始まったか、というような偶然の事柄に結論が左右されかねない。これも非合理的だ。


そしてこれらの問題の解決策を論じる上で、ダイバーシティを強調しています。

社会が変わる必要がある。どう変わるべきかというと、これは僕の考えにすぎないけれど、社会にいる一人ひとりの才能が十分開花し、発揮され、そしてそういう社会だということをみなが信じられるような社会になることだ。
(中略)
人々の個性が生きてこそ全体として一つの豊かな創造になる、ということだ。そして、それこそダイバーシティの真価を示している。つまり、みながそれぞれ違うからこそ、一緒にクラスを作れば、似たような人間が集まってできるものより、はるかにすばらしい創造に結びつく。


上記のような論理を展開する上で、社会背景の説明がとても丁寧で分かりやすく、また、さまざまな論文や著書などの資料を紹介していて、とても説得力がありました。それでいて読みやすかったです。

とても良い本だと思いました。お勧めです。

ファイルサーバのためのユーザ

Linuxでファイルサーバを立ち上げるとき、クライアントPCがWindowsであることを考えると、Sambaによる共有フォルダ機能を使う方法と、Ftpサーバを使う方法があります。

Sambaの場合、ログインできないユーザを作って、クライアントからはそのユーザで認証して利用させることができます。しかしFtpの場合、ログインできるユーザを作らないと、クライアントから利用することができません。

たとえばOswaldというユーザを作り、クライアントからはそのユーザの認証で利用してもらう場合、

Sambaだと、次のようにログインできないユーザで利用が可能です。

# useradd -s /bin/false Oswald(ログインできないユーザで十分)
# smbpasswd -a Oswald
(OswaldのSambaパスワードを設定します)


Ftpだと、次のようにログインできるユーザでないと利用できません。

# useradd Oswald(ログインできるユーザでないダメ)
# passwd Oswald
(Oswaldのパスワードを設定する)


ちょっとハマったので、備忘のためにメモしておきます。