google-code-prettify

2006-06-30

1.5GHzのCPUで20%=700MHzのCPUで100%か?

nikkeibpより。

1.5GHz動作のCeleronで動作させたところ,20%程度の負荷率であったという。このため理論上700MHz動作でも処理可能と見積もった。

どのような計算(理論)だと「700MHzで動作可」となるのか、わかる方教えてください。

2006-06-29

3Dアバターによる仮想会議システム[etc]

5台のカメラで撮影した3D画像を仮想会議室に配置するシステム

私がTV会議システムで重要だと思う点は、重要な順に
  1. 音声が確実にとどく
  2. 解像度が悪くても良いので、動画がとどく
  3. 電子ホワイトボード的な機能がある
  4. 人物のジェスチャーなどの細かいニュアンスが伝わる
だと思っている。このシステムは4.を改善する物なので重要度は低いかもしれないが、なかなか楽しそうなシステムだ。

個人的には、現在のTV会議システムでは1.をなんとかして欲しい。
声が良く聞こえなくて、「もう少し大きな声でお願いします」と言うのにはウンザリ。
「相手に声が十分な音量でクリアに届いているかインジケーター」が欲しい。

自動再起動ダイアログの間隔を長くする[windows]

windowsの自動更新を有効にしていると、インストール後に再起動を促すダイアログが何度も出てきて、かなりウザイ。
しかもこのダイアログ、キャンセルしても10分後にまた同じダイアログが出てくる。
この時間間隔を長くするには、グループポリシーを変更してやれば良い。

スタート->ファイル名を指定して実行->gpedit.msc

で、グループポリシーを開く。




スケジュールされたインストール時の再起動を再確認する

を有効にし、値を大きくしてやれば良い。

via lifehacker

2006-06-28

manのintroduction[NetBSD]

昨日初めて知った。manの各セクションにはintroductionがあった事を。

$ man 3 intro

なら、system libraryのintroductionを読む事ができる。

2006-06-27

Palm OS5のクローンを作るプロジェクト[palm]

オープンソースでPalm OS5のクローンを作る試みがあるそうだ。
おもしろそうではあるが、この試みはあまり成功するとは思えない(成功の定義にもよるが)。
理由は以下の通り。
  1. 携帯情報機器は、OSをブートさせるのが難しい。
  2. OSをブートできたとしても、ベンダから情報が出てこないなどの理由でデバイスドライバが作成できない事がある。
  3. 動作できたとしても、その機器が壊れたらまた1.からやり直しになる。
  4. PalmOSは死んだOSなので、新しく革新的なアプリが出てくる可能性は低く、ユーザー数は減少の一方。

私もPalmを愛用しているので、心情的には応援したくはなるのだが。

2006-06-22

postfixでSMTP認証[postfix][NetBSD]

postfixでSMTP認証を使えるようにしたので、そのメモ。

まず、NetBSDに標準で入っているpostfixはsaslが有効になっていないので、pkgsrcのを使う。
/etc/mk.confにPKG_OPTIONS.postfix+=saslを追加して、mail/postfixをインストールすれば良い。

postfix側の設定として、/usr/pkg/etc/postfix/main.cfに以下を追加。
smtpd_sasl_auth_enable = yes
smtpd_sasl_application_name = smtpd
smtpd_sasl_local_domain = $myhostname

saslの設定として、/usr/pkg/lib/sasl2/smtpd.confに以下を追加。
pwcheck_method: auxprop
mech_list: plain

pwcheck_methodをauxpropにすると、sasl独自のdbが使われるので、そのdbにuser/passを追加しておく。
# saslpasswd2 -c -u `/usr/pkg/sbin/postconf -h myhostname` sakurai

ちなみに、dbは/usr/pkg/etc/sasldb.dbとして作成される。

…で、これでばっちりのはずなのだが、
$ telnet localhost 25

としても、すぐにTCPコネクションを切られてしまう。
/var/log/maillogを見ると、
postfix/smtpd[4006]: fatal: no SASL authentication mechanisms

という文字が。

さんざん(3hour程)悩み、認証アルゴリズムは別にインストールしなければいけない事に気付いた。
# pkg_add -v cy2-plain
# pkg_add -v cy2-login
# pkg_add -v cy2-crammd5
# pkg_add -v cy2-digestmd5

仮想マシン機能が後からVistaに入る理由[windows]

Vistaに入る仮想マシン機能の提供は、Vistaの出荷よりも遅れるそうだ
仮想マシンの提供がVistaのリリースよりも遅れ、また遅れてでもVistaの機能として提供するのは、以下のような理由だろうか。
  • サーバー版とデスクトップ版を早目に同時リリースしたい。そのため、仮想マシン機能の実装が間に合わない。
    • 同時リリースしたい理由は、圧倒的なデスクトップでのシェアを足がかりにサーバー市場へ食い込みたいから。「同時リリースされたサーバーとクライアントの連携で実現できる新機能」をユーザーに提供することで、サーバー市場のシェア拡大を狙っている。
    • 早目にリリースしたい理由は、主にデスクトップユーザーの興味を失わないため。
  • OSの一部として提供されている機能は圧倒的な競争力を持つので、仮想マシンの機能はOSの標準機能の一部であるとユーザーに見せたい。

2006-06-18

pkgsrcのwip-jpにfreemindをimport[NetBSD]

pkgsrcのwip-jp(work in progress JP)に、freemindをimportした。
あまりcvsを使った事が無いので、importはキンキョーするなあ。

日本語を出すためには、

# pkg_add kochi-ttf
# cd /usr/pkg/java/sun-1.5/lib/fonts
# mkdir fallback
# cp /usr/pkg/lib/X11/fonts/TTF/kochi-* fallback/

などとすれば良い。

次回importする時のためのメモ。

$ cd wip-jp/newpkg.import
$ export CVS_RSH=ssh
$ cvs -z3 -d:ext:vimrc@cvs.sourceforge.jp:/cvsroot/pkgsrc-wip import wip-jp/freemind sakurai sakurai_20060618

jreをインストール[NetBSD]

1pkgsrcからlang/sun-jre15をインストールしようとするが、パッケージのextractステージで

install.sfx.21689: 1: Syntax error: "(" unexpected

のようなエラーが出て、インストールができない。

install.sfxでググったら、どうやらinstall.sfxはjre-1_5_0_07-linux-i586.binの中に含まれているプログラムのようだ。
jre-1_5_0_07-linux-i586.binは自已解凍(展開)のシェルスクリプトだったので、その中からinstall.sfxを取り出した。
で、install.sfxを実行すると、

$ ./install.sfx
bash: ./install.sfx: cannot execute binary file

と出て、実行できない。fileコマンドで見ると

$ file install.sfx
install.sfx: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped

とまあ、Linux用のバイナリで、/emul/linuxが無いのが動かない原因だった。

$ sudo mkdir /emul/
$ sudo ln -s /usr/pkg/emul/linux /emul/linux

で解決。

余談1:
/emul/linuxを作るのは、誰が行うべき事なのだろう?
今回は手動で行ったが、suse_baseのインストール時に自動でやってくれても良いような気もするのだが…

余談2:
install.sfx.21689: 1: Syntax error: "(" unexpected
のエラーメッセージは、/bin/shでinstall.sfxを実行しようとすると出る。

2006-06-15

Veriexec - fingerprintが違う場合にアクセスを制限する[NetBSD]

tech-kern@netbsdで、
「metahook(8)っていう汎用的な仕組みを作れば、Veriexecにも使えるよね」
という話が出ている。

Veriexecって何?と思って調べた。
  • ファイルのfingerprint一覧を、/etc/signaturesにあらかじめ書いておく
  • ファイルへのアクセス時にfingerprintをチェックし、違う場合にはアクセスさせない
というような事が可能なシステムのようだ。
レベルによっても機能が異なり、
  • レベル0 - signatureが合わない時はwarning
  • レベル1 - signatureが合わない時はアクセスできない
  • レベル2 - signatureがあるファイルの書き換えも禁止
  • レベル3 - signatureが無いファイルにはアクセスできない

wikipediaによる説明
NetBSD Veriexec subsystem

2006-06-14

古いコードを受け継ぐ時にすべき事[programming]

InfoQより、Dealing with Legacy Code
アジャイル開発のおいしい所をつまみぐいで学べる本Ship It!の著者による記事。

telnetでサッカー観戦

telnetでログインして、ASCIIアートでサッカー観戦
アクセスしてみたが、試合の10分前にならないと観れないようだ。

2006-06-13

リトルエンディアン推進団体?[etc]

タイトルだけ見て、リトルエンディアンの推進団体なのかと思った。
Korean triumvirate joins FSG with LSB-enrichment plans

Symbianが普及した理由[embedded]

@ITの記事より。携帯電話OS市場を制したシンビアン、次の一手

Symbianが携帯電話市場でシェアの伸ばしたのには、携帯電話の特性も強く影響していると考えられる。
  • 生活やビジネスの必需品となっている
  • 電話していると、課金される
このため携帯電話はPDAなどと比較して、誤動作が許されない。バグがあった時に回収騒動となる事からも、誤動作が許されない市場である事がうかがえる。

そのような市場の場合、Linuxと比較して責任の所在がはっきりし、実績のあるSymbianが選ばれるのも必然なのだろう。
たとえドコモがLinux向けの開発環境(MOAP(L))を日本で提供していたとしても、世界を相手にしているSymbianの実績にはかなわない。
また今後は携帯のCPUは2チップではなく1チップ化する流れになっており、さらに誤動作が許されなくなる。この事も実績のあるSymbianを後押しする事になるだろう。

2006-06-12

3x3の逆行列の計算[python]

3x3の逆行列を計算する必要があったので、pythonで以下のscriptを作成。

#!/usr/pkg/bin/python

f = file('data.txt', 'r')
(a, b, c) = [float(i) for i in f.readline().split(' ')]
(p, q, r) = [float(i) for i in f.readline().split(' ')]
(x, y, z) = [float(i) for i in f.readline().split(' ')]
f.close()

# A B C
# (D E F)
# G H I

base = (a * q * z - a * r * y - p * b * z + p * c * y + x * b * r - x * c * q)
A = (q * z - r * y) / base
B = (c * y - b * z) / base
C = (b * r - c * q) / base
D = (r * x - p * z) / base
E = (a * z - c * x) / base
F = (c * p - a * r) / base
G = (p * y - q * x) / base
H = (b * x - a * y) / base
I = (a * q - b * p) / base

print "%f %f %f" % (A, B, C)
print "%f %f %f" % (D, E, F)
print "%f %f %f" % (G, H, I)

…とここまで作った後で、Numerical Python(NumPy)という便利な物がある事を知った。

# pkg_add -v py23-Numeric
$ python
>>> from Numeric import *
>>> from LinearAlgebra import *
>>> a = array(([1,2,3],[4,5,6],[7,8,9]))
>>> print inverse(a)
[[ -4.50359963e+15 9.00719925e+15 -4.50359963e+15]
[ 9.00719925e+15 -1.80143985e+16 9.00719925e+15]
[ -4.50359963e+15 9.00719925e+15 -4.50359963e+15]]

NumPyのドキュメントはこちら

authenticateとauthorizeの違い[English]

今まで違いを良く知らずにいたのだが、 LongmanのONLINE辞書によると、

authenticate

to prove that something is true or real

authorize

to give official permission for something

との事。つまり、user名/passwordが間違っていたような時にはauthentication failedを使い、permissionが無いような時にはauthorization failedを使う。

2006-06-09

lazy FPU context switchとは[NetBSD]

FPUはレジスタが多数あるので、process switchの度に全てのレジスタを退避していたのでは、ムダが生じる。FPUを使わないアプリもあるし。
lazy FPU context switchを使うと、FPUの退避を必要最少限にする事ができる。
  • この機構が使えるのは、以下の条件を満たすCPUのみ。
    • FPUをdisableにする事ができる
    • FPUがdisable時にFPUを使おうとするとexceptionが発生する
  • process switch時には、FPUをdisableにしておく。
  • processがFPUを使おうとした時にexceptionがかかる。この時に(前にだれかが使っていた)FPUの中身を退避し、FPUをenableにする。
つまり、FPUの退避(FPU context switch)と他レジスタの退避(通常のcontext switch=process switch)は同期していない。
NetBSD Documentation: How lazy FPU context switch works

2006-06-08

google spreadsheesを使ってみた[google]

google spreadsheetsを使ってみた。
あちこちで言われているように、基本的な機能しかなくグラフを作る事もできない。しかし、思ったより軽快に動作する。
Excelとの比較がされる事が多いようだが、Excelの代替が欲しい人はOpenOfficeを使えば良いし、googleもExcelを置き換える事を目指しているわけではないだろう。

google spreadsheetsの利点は、情報を他人とシェアできるという点にある。
HTMLに他人の作った表を埋め込んだり(引用)、表を再編集したり、表に間違いがあればその事を通知したりといった、他人との連携を行うための機能が今後追加されていくのだろう。

windowsのexe,dll間の依存関係をツリー表示[windows]

Dependency Walkerを使うと、windowsのモジュール(exe,dll,ocxなど)間の依存関係をツリー表示してくれる。
via dev@tsvn

mk.confのルール[NetBSD][pkgsrc]

mk.confのルール
  • /etc/mk.confは、カーネルのビルドでもpkgsrcのビルドでも使われる
  • CFLAGS=-march=pentium3とすると、コードが少し大きくなる。このCFLAGSでカーネルのビルドをすると、bootblockが制限サイズより大きくなる。
  • よって、カーネルのビルド時には、/etc/mk.confでCFLAGSやCXXFLAGS、COPTSなどを直接指定すべきではない。
  • pkgsrcのcpuflagsは、各ビルドに応じて適切なオプションを指定してくれるので、pkgsrcにまかせておくのが良い。

/usr/pkg/share/mk/cpuflags.mkを見ると、cpuflagsがどのようにオプションを切り換えているかを知る事ができる。
via current-users

2006-06-07

Freetalkをビルド[NetBSD][jabber]

NetBSDで、コマンドラインjabberクライアントであるFreetalkをビルドした。

# pkg_add loudmouth
# pkg_add guile
# pkg_add gettext
# pkg_add glib2

FreetalkはGNU LIBCに含まれるargp.hを使っている。
NetBSDのLIBCにはargp.hは無いので、以下のパッチでargpの代わりにgetoptを使う。

diff -u -r freetalk-0.69-orig/src/freetalk.cc freetalk-0.69/src/freetalk.cc
--- freetalk-0.69-orig/src/freetalk.cc 2006-04-19 09:31:49.000000000 +0900
+++ freetalk-0.69/src/freetalk.cc 2006-06-08 06:21:09.000000000 +0900
@@ -21,7 +21,7 @@
#include
#include
#include
-#include
+#include
#include

#include
@@ -123,31 +123,6 @@
g_io_add_watch (chan, G_IO_IN, (GIOFunc) stdin_input_cb, NULL);
}

-const char *argp_program_version = PACKAGE_NAME " " PACKAGE_VERSION;
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-
-static error_t
-parse_opts (int key, char *arg, struct argp_state *_state)
-{
- switch (key) {
- case 'j':
- do_set_jid (arg);
- break;
- case 's':
- state.script = arg;
- break;
- case 'r':
- ft_register ();
- break; /* not reached */
- default:
- /* hack to allow args to script */
- if (!state.script)
- return ARGP_ERR_UNKNOWN;
- }
-
- return 0;
-}
-
static void
mode_init (void)
{
@@ -165,20 +140,30 @@
static void
args_init (void)
{
- struct {
- char *f[2];
- } f;
- static char doc[] = "Freetalk is a console based jabber client/bot with a readline interface and guile extensions";
- static char argp_doc[] = " ";
- static struct argp_option options [] = {
- {"jid", 'j', "JABBERID", 0, "user@domain Jabber ID" },
- {"script", 's', "SCRIPTFILE", 0, "Freetalk script" },
- {"register", 'r', 0, 0, "Register an account with a server"},
- { 0, }
+ extern char *optarg;
+ int ch;
+ static struct option longopts[] = {
+
+ { "jid", required_argument, 0, 'j' },
+ { "script", required_argument, 0, 's' },
+ { "register", no_argument, 0, 'r'},
+ { NULL, 0, NULL, 0 },
};
- static struct argp argp = { options, parse_opts, argp_doc, doc };
-
- argp_parse (&argp, state.argc, state.argv, 0, 0, &f);
+
+ while ((ch = getopt_long(state.argc, state.argv, "j:s:r", longopts, NULL)) != -1) {
+ switch (ch) {
+ case 'j':
+ do_set_jid(optarg);
+ break;
+ case 's':
+ state.script = (char*)malloc(strlen(optarg));
+ strcpy(state.script, optarg);
+ break;
+ case 'r':
+ ft_register();
+ break;
+ }
+ }
}

static void
diff -u -r freetalk-0.69-orig/src/primitives.cc freetalk-0.69/src/primitives.cc
--- freetalk-0.69-orig/src/primitives.cc 2006-04-19 09:31:49.000000000 +0900
+++ freetalk-0.69/src/primitives.cc 2006-06-07 07:27:53.000000000 +0900
@@ -22,7 +22,7 @@
#include
#include
#include
-#include
+//#include

#include


あとは、configure, make

$ cd freetalk-0.69
$ CPPFLAGS=-I/usr/pkg/include LDFLAGS=-L/usr/pkg/lib ./configure

トップディレクトリでmakeすると、version.texiの作成のあたりでエラーが出る。
何かよくわからんので、バイナリと.scmのみインストールする。

$ make (エラーが出る)
$ cd src
$ make
$ cd ../extension
$ sudo make install

NetBSDからext2をマウント [NetBSD]

LinuxマシンでExt3使っていたディスクをNetBSDマシンに挿した所、
# mount -t ext2fs /dev/wd1e /mnt
mount_ext2fs: /dev/wd1e on /mnt: incorrect super block
と出て、マウントができなかった。
fsck.ext3で修理すると、mountできた。
# pkg_add e2fsprogs
# fsck.ext3 /dev/wd1e
# mount -t ext2fs /dev/wd1e /mnt

ラベルプリンターとミューチップの連携 [gtd]

私はEggXスターターキットから購入したラベルプリンタKP-C10を使って、資料整理をしている。
一つ困った点は、私の記憶力が悪いせいで、資料棚(GTDでのGRF)に資料を入れておいた事自体を忘れる事があるという点だ。
そんな私にピッタリのシステムを考えた。
  • - ラベルプリンタ用のテープに、ミューチップが埋め込まれている。
  • - ラベルプリンタでの印刷時に、印刷した文字列とID番号をPC上のデータベースに記録しておく。
  • - 資料棚はミューチップのリーダーとなっていて、棚に入っている資料のID番号がわかる
  • - 資料を探したい時には、google desktop等でPC上で検索を行う。

まあ、ミューチップを使わなかったとしても、印刷時に印刷した文字列のログを取っておいてくれるだけでも、ありがたいかも。

ブラウザでダウンロードダイアログを出す方法 [firefox]

Content-Disposition: attachment; filename="hogehoge.txt"

をHTTPヘッダに入れておくと、常にダウンロードダイアログが出るらしい。

Firefoxにdragdropuploadを入れると、tasktoyが遅くなる [firefox][gtd]

最近Firefoxでtasktoyを使うと、なぜか動作がとっっても遅くなっていた。
原因を調べたら、FirefoxのextensionであるdragdropuploadがEnableになっていると、tasktoyが重くなるようだ。

D-BUSとは[linux]

D-BUSとは、デスクトップアプリ間での通信を行うためのプロトコルらしい。

トランスポートレイヤーが何なのかが気になっていたのだが、UNIXドメインソケットやTCPなどを使うようだ。

bloggerにfeedburnerを設置[blogger]

将来、使っているブログサービスを変える かもしれない事を考えると、RSSはfeedburnerの物を使った方が良いだろう。

てなわけで、bloggerのtemplateを書き換えて、feedburnerのRSSを使うようにした。

bloggerを使ってみる[blogger]

今までChangeLogメモ + chalowを使っていたのだが、ふと思う事があってbloggerを使ってみる事にした。
理由は以下の通り
  • ChangeLogをsvnでcommitした時に自動でchalowが動作し、FTPサーバーにuploadするようにしていたが、svnサーバーが死んだ。
  • svnサーバーの復旧がメンドイ
うーむ。なんてネガティブな。