Hatena::ブログ(Diary)

(ひ)メモ このページをアンテナに追加 RSSフィード

2007-05-30 (Wed)

hatenabookmark-comein-other.user.jsの1行パッチ

はてブのレイアウト変更の余波だと思うんすけど、動かんくなったんで1行パッチ。

--- hatenabookmark-comein-other.user.js.orig	2007-05-30 13:05:10.000000000 +0900
+++ hatenabookmark-comein-other.user.js	2007-05-30 13:05:26.000000000 +0900
@@ -188,7 +188,7 @@
 	var loading=document.createElement('span');
 	loading.innerHTML='<img src="'+loadIconSrc+'"/>';
 	loading.id='loadingText';
-	bmList.parentNode.getElementsByTagName('div')[0].appendChild(loading);
+	bmList.parentNode.getElementsByTagName('h2')[0].appendChild(loading);
 }else{ // まだはてなでブックマークされてない場合
 	document.getElementById('body').innerHTML+='<span id="loadingText"><img src="'+loadIconSrc+'" /></span>';
 }

2007-05-28 (Mon)

カーネルモジュールことはじめ#2

なんか流行ってるみたいなんでのっかってみるぉ!

crash.c

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>

static int __init crash_init(void)
{
  printk("crashing kernel...\n");
  /* *((char *) 0) = 0; */
  panic("Hello, panic!");
  return 0;
}

static void __exit crash_exit(void)
{
  printk("crash_exit called. this module is now unloaded.\n");
  return;
}

module_init(crash_init);
module_exit(crash_exit);

MODULE_AUTHOR("Maintainer: hirose31");
MODULE_DESCRIPTION("crash module");
MODULE_LICENSE("GPL");

Makefile

TARGET = crash.ko

all: $(TARGET)

crash.ko: crash.c
	make -C /lib/modules/`uname -r`/build M=`pwd` modules

clean:
	make -C /lib/modules/`uname -r`/build M=`pwd` clean

obj-m += crash.o

実行結果

# make
# insmod ./crash.ko
crashing kernel...
Kernel panic - not syncing: Hello, panic!

crashdumpのテスツとかで便利す!

ファイルを変更したら自動的にreloadする方法

ファイルの更新を監視して、変更されたらMozReplなFirefoxさんにreload指令を送る。

コンテンツのファイルをいじってて、いちいちF5するのがめんどいので。

reload指令を受理できるように

をインストール。

ツール→MozLab→Start Replで開始。

extensions.mozlab.mozrepl.autoStartをtrueにすれば、動きっぱなしにできるのかも。

4242でlistenしてるのはlocalhostだけなので、他のマシンからtelnetしたいときは、パケットリピータを使う。

例えばstoneを使って、

  • 4242宛てのパケットをlocalhost:4242にリピートする
  • ただし、接続を許可するのは10.6.25.201と10.6.25.202からのみ

とするときはこんな感じ:

stone -nr localhost:4242 4242  10.6.25.201 10.6.25.202

reload指定はこんなスクリプト (reload-firefox) で:

#!/bin/sh
[ $# -eq 1 -o $# -eq 2 ] || { echo 'usage: reload-firefox HOST PORT'; exit 1; }
host=$1
port=${2:-4242}

echo "reload: $host:$port"
cat <<EOF | nc $host $port
content.location.reload(true)
repl.quit()
EOF
echo

これで、10.6.25.20[12]なマシンから、

$ reload-firefox 10.6.25.100

すると、10.6.25.100で動いてるFirefoxにreloadがかかるはず。

ファイルの更新を監視

ファイル(複数指定OK)が更新されたら指定したコマンドを実行するスクリプトをこさえる (observe-mtime):

#!/usr/bin/env perl
use strict;
use warnings;
use Pod::Usage;
use Getopt::Long;
use File::Modified;

my $Interval = $ENV{INTERVAL} || 3; # sec
my $command;

Getopt::Long::Configure("bundling");
GetOptions(
    'command|c=s' => \$command,
    'help|h|?'    => sub { pod2usage() },
    ) or pod2usage;
my @files = @ARGV;

### @files
### $command

my $o = File::Modified->new(files=>[ @files ]);
my @changes;

while (1) {
    if (@changes = $o->changed) {
        ### @changes
        print qx{ $command };
        $o->update;
    }
    ### sleep: $Interval
    sleep $Interval;
}

__END__

=head1 SYNOPSIS

observe-mtime -c command file [file...]

=cut

これを10.6.25.201で動かす。

$ observe-mtime -c '~/bin/reload-firefox 10.6.25.100' foo.html bar.css baz.js

んで、foo.htmlをいじれば、数秒以内にFirefoxにreloadがかかる。


WindowsのFirefoxで確認しつつ、LinuxなマシンのEmacs+trampでリモートのWebサーバのファイルをいじってるんではげしく便利す。

追記

  • reload-firefoxで、「$# ==」を「$# -eq」に直しました。Perlとshをいったりきたりしてるとよく間違います><
  • id:ZIGOROu さんにMozRepl::Plugin::PageReloadというのを教えていただきました。カレーたべたらのんだらちょっと試してみたいと思います!

追記 2007-12-15

対話的にMozReplするときはsocatの行編集+履歴が便利かも

MozReplのTips&Tricksに書いてあるsocatを使うと、readlineの行編集、履歴機能が使えるので便利げ。

$ socat READLINE TCP4:localhost:4242

とか。

rlではうまくいかんかったす。

2007-05-25 (Fri)

「ディスク」への書き込み性能を上げるには

ユーザランドのプロセスから見たwrite(2)は、ページキャッシュのおかげで(メモリが潤沢にある環境下では)ブロックされない(待たされない)というのは id:naoya さんの丁寧な解説のおかげでわかると思うのですが、一方、fsync(2)などの実際にディスクに書き込む処理、

あと id:hirose31 さんがコメントしてますが、アプリケーションが SYNC モードでファイルを開いてたり、明示的に fsync() してたりするとそこで wait が発生するのは言わずもがな、です。

Linux I/O のお話 write 編 - naoyaのはてなダイアリー

The fsync() function does not return until the system has completed that action or until an error is detected.

fsync

常に処理待ちとなっている I/O リクエストが存在する、ということなります。なので、ページキャッシュの容量の問題ではなく、ディスクの性能がボトルネックになっている、と言えそうです。

403 error - Forbidden

は「ディスク」自身が『書き込みが終わったよ』というまでブロックして戻りません。

さて、ハードディスクにはキャッシュメモリ (なういハードディスクは32MBものキャッシュメモリがディスクユニット自体に搭載されているようです) が搭載されています。

にあるように、キャッシュメモリは読み出しだけでなく書き込みの性能も上げてくれます。つまり、OSから「これ、ディスクにちゃんと書き込んでね」と依頼されたときに、ハードディスクは実際の円盤には書き込まずとも、ハードディスクユニット内のキャッシュメモリに書き込んだら「うん。ちゃんと書いたよ!」とお返事を返せるわけです。

こうやってキャッシュメモリ上に格納されたデータは、後でちゃんと円盤に書き込まれて永続化されるわけですが、それまでの間に不意の電源断 (停電、ブレーカ(NFB,MCB,MCCB)が落ちた、電源ケーブルがひっかかって抜けたった) が起ってしまった場合は、キャッシュメモリ上の「ちゃんと書いたよ」といったはずのデータは失われてしまいます。(多分…)


さてさて、一部の RAID カード (例えば3wareのもの) には、256MBものwrite cacheが搭載できる製品があります。こんなにキャッシュしたら万が一電源断したときに失われるデータが多くなるのでは?と心配になるかもしれませんが、大丈夫です。BBUがあれば。

BBU (Battery Backup Unit) とは、電源断になったときに、蓄えておいた電源をキャッシュユニットに供給して、キャッシュ上のデータを保存し続けるためのものです。数十時間は持つようなので、BBUが枯渇するまでに通電再開できればキャッシュ上のデータは保たれますし、後、ハードウエアの電源が投入されディスクが回り始めればキャッシュ上のデータはちゃんと円盤に書き込まれます。


ちなみに、3wareの9550SXとかをLinux 2.6で使ってるのですが、ちゃんと元気に働いてます。DBサーバやストレージサーバなんかで使ってます。


ちょっと定量的な数値はないのですが、体験的にはこのRAIDカードのwrite cacheはかなり効果があると感じています。もちろん用途にもよるのですが、「ディスク」性能で困っている方は、多少の出費は必要ですが、試してみるのもいいんじゃないかと思います。

まとめ

  • ユーザランドのプロセス(アプリケーション)から見たwriteは、d:id:naoya:20070523:1179938637 が詳しい
  • ついでに、その次の、ほんとに「ディスク」に書き込む処理も考えてみよう
  • ハードディスクには、(数MB〜数十MBの)キャッシュメモリが搭載されている
  • ハードディスクは、円盤に書かずともキャッシュメモリに書いた時点で「書き込み完了」とOSに返すことができる
  • が、キャッシュメモリ上のデータは不意の電源断で失われる可能性がある
  • 例えば3wareのRAIDカードは256MBのキャッシュメモリを搭載できる
  • BBUで電源断時にキャッシュメモリ上のデータが失われることもない
  • キャッシュメモリのおかげで、『ほんとに「ディスク」に書き込む処理』はより短い時間で返すことができる(ことが期待できる)

ぜひ、おためしを!

ReiserFS と (XFS, ext3) での fsync(2) の挙動の違い

以前のWEB+DB PRESSの記事のコラムでも書いたんですが、当時試した限りでは、XFSやext3と違い、ReiserFSの場合はfsync(2)してもデータが永続化されませんでした。

今では違う可能性もありますし、ソースコードレベルの深追いはしてないのですが、「ReiserFSはfsync(2)が速いぉ!」と喜んでる向きはちとよく確認したほうがいいかもしれません。

2007-05-23 (Wed)

バイナリよりな一日

今日はひょんなきっかけで、

  • strace (HACK #82)
  • ltrace (HACK #83)
  • gcc -finstrument-functions (HACK #77)
  • LD_PRELOAD でもりっと挿入 (HACK #77, #60)
  • addr2lineでアドレスから関数の名前を引く (HACK #15)
  • valgrind --tool=callgrind --trace-children=yes (valgrind [ヴァルグリンド]自体は HACK #54, #55, #56)

のあたりを、同僚たちとわいのわいののりのりで手を動かしながら疾走した一日でした。

んが、うちに帰ってきて『BINARY HACKS』を読み直すと、HACK #ナンバで記したとおり、ほとんどがこの本に書かれてました。すごいよ『BINARY HACKS』すごいよ。

今日のできごとは、たぶん、あそこに(だれかが)書くと思います。

あと、スシ食べ砲台ビール呑み砲台な一日でもありました。(もちろん、カレーは昼に食べました)

2007-05-22 (Tue)

bashというかreadlineの補完展開

カレントディレクトリに↓なファイル/ディレクトリがあるときに、

$ ls -Ftr
foo  baz  bar  quux/  grault/  corge/

"\C-x*" (glob-expand-word) を打鍵。

$ ls *
  ↓
$ ls bar baz corge foo grault quux

$ ls b*
  ↓
$ ls bar baz

$ ls */
  ↓
$ ls corge/ grault/ quux/

"\M-{" (complete-into-braces) を打鍵。

$ ls 
  ↓
$ ls {ba{r,z},corge,foo,grault,quux}

$ ls b
  ↓
$ ls ba{r,z}

えるえるえる

alias l='ls --color=auto -lh'

える - higepon blog

$ type ls
ls is aliased to `LC_CTYPE=C ls --color=tty'
$ type l
l is aliased to `ls -F'
$ type ll
ll is aliased to `ls -l'
$ type lll
bash3: type: lll: not found

lllはlsよか長くなるからかどうかはわがんねけど定義してねっす。

ほかのalias letterも露出。

$ a|grep '^alias .='
alias a='alias'
alias c='clear'
alias k='kterm &'
alias l='ls -F'
alias x='exit'

まだまだ空いてるのに気づいた。

2007-05-19 (Sat)

Assurer::Plugin::Test::SSH::SupportedAuth

package Assurer::Plugin::Test::SSH::SupportedAuth;

use strict;
use warnings;
use base qw( Assurer::Plugin::Test );
use Net::Scan::SSH::Server::SupportedAuth qw(:flag);
use Assurer::Test;

sub register {
    my $self = shift;
    $self->register_tests(qw/ connect /);
}

sub connect {
    my ( $self, $context, $args ) = @_;

    my $conf = $self->conf;

    my $host = $conf->{host} || $context->conf->{host};
    my $port = $conf->{port} || 22;

    my $expect;
    for my $v (2,1) {
        unless (exists $conf->{$v}) {
            $expect->{$v} = 0;
            next;
        }
        for my $auth_method (split /,/, $conf->{$v}) {
            $expect->{$v} |= $AUTH_IF{ $auth_method } if exists $AUTH_IF{ $auth_method };
        }
    }

    my $ssh = Net::Scan::SSH::Server::SupportedAuth->new(
        host => $host,
        port => $port,
       );

    my $sa = $ssh->scan;

    $context->log(debug => $host . ': ' . $ssh->dump);
    ok($sa->{2} == $expect->{2} && $sa->{1} == $expect->{1},
       'SSH::SupportedAuth OK'
      );
}

1;
__END__

=head1 NAME

Assurer::Plugin::Test::SSH::SupportedAuth - Test for SSH supported authenication method

=head1 SYNOPSIS

  - module: SSH::SupportedAuth
    name:   SSH-SupportedAuth
    config:
      2: publickey,password
      1: publickey,password
    role: ssh

or

  - module: SSH::SupportedAuth
    name:   allow only SSHv2 publickey auth
    config:
      2: publickey
    role: ssh

=head1 DESCRIPTION

test server by Net::Scan::SSH::Server::SupportedAuth.

=head1 AUTHOR

HIROSE Masaaki <hirose31 __AT__ gmail.com>

SSHサーバが受け付けている認証方法を調べるPerlモジュール

を、CPANに上げしました。

  • Net::Scan::SSH::Server::SupportedAuth
    • 予め Math::BigInt::GMP をインストールしておくのをお勧めします。じゃないと、Net::SSH::Perl (が使っている Crypt::DH) が遅くて、まともに使えませんので。

このモジュールは、SSH protocol 1と2のそれぞれについて、どの認証方法(パスワード認証か鍵認証か)が受け付け可能か調べるためのものです。

アーカイブには、sample/scan-sshauth.pl というサンプルスクリプトもあるので、モジュールをインストールすれば、コードを書かずとも試してみることができます。

ちなみにこのサンプルスクリプトは、

に対して調査できるので、出力などは用途にあうようにアレンジして、

  • 外部にさらしているサーバたち
  • イントラのネットワークセグメント

などに対して定期的にスキャンすれば、うっかり/いつのまにかパスワード認証やSSHv1を有効にしてしまっているマシンをあぶりだす、といったことができます。

$ ./sample/scan-sshauth.pl foo bar baz
HOST                   : SSH2  SSH1 (K=publickey, P=password)
===================================
foo                    : 2=K-  1=--
bar                    : 2=KP  1=--
baz                    : 2=KP  1=KP

さて、認証方法を調べるなら、sshコマンドを使って、

$ ssh -2 -o PreferredAuthentications=keyboard-interactive,password HOST
$ ssh -2 -o PreferredAuthentications=publickey                     HOST
$ ssh -1 -o PreferredAuthentications=keyboard-interactive,password HOST
$ ssh -1 -o PreferredAuthentications=publickey                     HOST

などとすれば調べられますが、

  • 4回もforkが発生する
  • コネクションが 4 回発生する
  • 認証エラーになる

などなどこの方法はいまいちです。

対して Net::Scan::SSH::Server::SupportedAuth は、

  • PerlSSHの実装 (Net::SSH::Perl) を使っているのでforkはしない
  • コネクションは多くて (SSHv2とSSHv1の) 2 回
  • ネゴシエーションの過程でサーバから提示される認証方法の情報を利用しているといった利点/特徴があります。

/dev/randomと/dev/urandom

読み込みが行われると、 /dev/random デバイスはエントロピー・プールのノイズビットの数の評価値から、ランダム バイトのみを返す。 /dev/random はワンタイムパッド (one-time pad) や鍵の生成のような 非常に高い品質を持った無作為性が必要になる場合に適切であろう。 エントロピー・プールが空の時は、/dev/random からの読み出しは、 更なる環境ノイズが得られるまで、ブロックされる。


/dev/urandom デバイスから読み出しでは、 エントロピーがより高くなるのを待つためのブロックは行われない。 その結果、もしエントロピー・プールに十分なエントロピーが存在しない場合、 返り値はこのドライバで使われているアルゴリズムに基づく暗号攻撃に対して、 論理的には弱くなることになる。 この攻撃をどのように行うかという事については、現在研究論文などの 形で入手できる資料はない、しかし、そのような攻撃は論理的に存在可能である。 もし、この事が心配なら、(/dev/urandom ではなく) /dev/random を利用すればいい。

404 - エラー: 404

PerlのCrypt::DSAのmake testがえらい時間かかるので、

$ strace -f prove -l t/02-sign.t

とかしてみたら、/dev/randomからのreadで待たされてる感が。

試しに、lib/Crypt/DSA/Util.pmの/dev/randomを/dev/urandomに書き換えてmake testしたら、t/03-keygen.tで寝そうになるぐらいまたされることはなくなりました。(それでもt/06-fip.tはちびっつまたされました)

/dev/urandomに書き換えるのは妥当かどうかは置いておいて、原因がわかったのでメモ。

ところで「環境ノイズ」って具体的にはなんなんでしょうかね? ざわざわ

rayfillrayfill 2007/05/22 01:59 環境ノイズですが一般的なのだとマウス/キーボードなどのストロークの時間間隔が主なようです。あとはHDDのシーク時間とか。昔見たのではサウンドカードのinとoutをループバックさせて発生するノイズを使う、とかいうのもありました。
重要なのは擬似乱数と違って非決定性な乱数である、ということみたいです。
特殊なのだと放射性元素の崩壊検知器使ったの、とかいうのもあるそうです・・・

hirose31hirose31 2007/05/22 11:21 おぉ。情報ありがとうございますー Linuxだとdrivers/char/random.cあたりですかねぇ。

2007-05-17 (Thu)

元のメソッドを保存しつつオーバーライドしたい

とあるメソッド(Foo#greet)を呼ぶ前にちょっとごにょごにょ前処理的なことをしたい。

前処理した後は、オリジナルのメソッドを呼びたい。

でも、メソッド名はそのまま(greet)でコールしたい。

こんなんでいいのかなぁ?

#!/usr/bin/env perl

use strict;
use warnings;

package Foo;
sub new {
    my $class = shift;
    bless { @_ }, $class;
}
sub greet {
    my($self) = @_;
    print "Hello, ", $self->{name}, "\n";
}

package main;
{
    # override
    no warnings 'redefine', 'once';
    package Foo;
    *greet_orig = \&greet;
    *greet = sub {
        my($self) = @_;
        $self->{name} .= ' san';

        $self->greet_orig(@_); # call original
    };
}
my $o = Foo->new(name=>'ank');
$o->greet;

2007-05-14 (Mon)

Smart::Commentsとeach

#!/usr/bin/env perl

my %hash = (
    foo => 'one',
    bar => 'two',
    baz => 'san',
);
### %hash

while (my ($k, $v) = each %hash) {
    print "W $k\n";
}
print "F $_\n" for keys %hash;
print "bye\n";
$ perl t.pl
W bar
W baz
W foo
F bar
F baz
F foo
bye
$ perl -MSmart::Comments t.pl

### %hash: {
###          bar => 'two',
###          baz => 'san',
###          foo => 'one'
###        }

F bar
F baz
F foo
bye

なんでか-MSmart::Commentsするとwhile each が実行されない。なんでじゃろ。

「### %hash」の後で$gomi = keys %hash;とかするとOKなので、eachがリセットされてないんかな。

2007-05-13 (Sun)

DebianでEM64Tというかx86_64というかx64というかIntel 64

Debian名称アーキテクチャ
i386Intel x86 ベース
amd64AMD64 & Intel EM64T
ia64Intel IA-64

"x86_64"とかないなぁと思ってたら、Debian界では"amd64"がそれらしす。

完全に 64 ビットのユーザランド

AMD64 移植版は完全に 64 ビット化されており、ユーザは i386 と比べて同アーキテクチャ が備えているあらゆる利点を享受できます:

  • 低位および高位メモリにおいて、メモリセグメンテーションが無い
  • プロセス当たり最大 128GiB の仮想アドレス空間 (従来は 2GiB)
  • 従来の 4GiB に対し 64TiB の実メモリ対応 (PAE 拡張付きの場合は 64GiB)
  • CPU 内の汎用レジスタは従来の 8 個に対し 16 個
  • gcc のデフォルトは 387 FPU の代わりに SSE2 math
  • gcc で -O2 を指定した場合、デフォルトでフレームポインタを削除
  • コンパイル時間の最適化には、古い i386 cruft の代わりに AMD64/EM64T 用の共通ベースを使用
  • デフォルトでは、メモリページは実行不可

32 ビットバイナリのネイティブでの実行はカーネルが対応しており、コアライブラリは ia32-libs パッケージで提供されています。

no title

でかいメモリ空間以外で、x86_64の「これわイイわよ!おくさん!!」な(実効的)利点ってなんじゃろ。

2007-05-10 (Thu)

typespeeeeeeeeeeeeed!!

Unix Commandで435てん。「enlightenment」が出てきたときはなきそうになったよ。。。

typespeedは、

とかから。

でも、

■対象学年

小学校程度

KNOPPIX教育利用研究会 - フォーラム

だって><

sarの統計情報をグラフ化

  • isag
    • sysstatのcontribにも含まれている
  • sarvant
  • Sar2gp
  • sarplot
  • kSar (yoshiさんに教えていただきましたー)
    • 拡大縮小とかもできるんで、データ突っ込んでながめるときにはいいかも。グラフはPNGとかで保存可能。Java製。

あとなんかあるかな。どれがよさげかな。

追記

sar2gpを使ってみたす。

e --> Error: data file incorrect: unknown table:

とか怒られるのは、「00:00:01 CPU i000/s...」なIRQのデータの形式がsar2gpの期待した形式(sar2gp.xml)と違っているためでした。

IRQの情報は要らないので、

$ sar -A -f /var/log/sysstat/sa10 > sa10.sar

ではなくて、

$ sar -bBcdqrRuvwWy -n FULL -P ALL -f /var/log/sysstat/sa10 > sa10.sar

で入力ファイルをこさえればOKでした。

ちょっと見づらいけどwベンチマーク中の負荷を後で視覚化するのにいいかも。

f:id:hirose31:20070510162200p:image

moto0215moto0215 2007/05/11 00:13 あ、やっぱりsarの「見える化ツール」あったんですね。チョコチョコっと探して見つからなかったので無いのかなぁ?って思ってたんですが、やぱーり皆同じようにグラフ化したかったんですね。参考にさせてもらいます、ありがとうございます。

hirose31hirose31 2007/05/11 12:26 もっとよさげなのがあったら教えてください><

2007-05-08 (Tue)

Linuxの仮想環境 - KVM+QEMU w/ Intel VTなCore 2 Duo はかなり速そう

たまたまIntel VT対応なCPUのマシンが手に入ったので、ちょっとLinuxのKVM+QEMUを試してみました。その結果をちょちょっと書いてみます。

ちょちょちょっとなんで間違ってるとこがある可能性が高いのをまずお断りしておきます。m(_ _)m

それから、ちょちょちょちょっとなんで、

のあたりの説明とかインストール手順はさっくり省略します。

ちなみに Linuxの仮想環境の実装の比較は、

が見やすいかもです。


で、今回の環境:

  • ソフトウエア
  • OptiPlex 745は、BIOSでVTのon/offができるのですが、出荷時はoffになってるのでonにしておきます。
  • grep ^flags /proc/cpuinfoに「vmx」というのがあれば、VTが有効になってるのをだいたい確認できるらしいです。(でもvmxがあってもKVMとかXenで使えないこともあるらしいす)
  • modprobe kvm-intel してエラーにならなければVTが有効になってると思っていいのかも。

でで、途中ばっさり省略ですが、とりあえずKVMなQEMUが動いたんで、かなり適当な感じですがCPUを使うベンチマークをしてみました。こんな感じです:

  • あらかじめdd if=/dev/urandom of=infile bs=1M count=5で入力ファイルを作って、各環境にコピーしておく。
  • time openssl enc -aes256 -in infile -out out -k hoge の時間を計ってみる。

その結果:

環境所要時間[秒]性能比
ホストOS0.091.00
ゲストOS (KVMあり)0.121.33
ゲストOS (KVMなし)1.6618.44

※「KVMなし」は、qemuを-no-kvmオプションつきで起動しました。それ以外のオプションやディスクイメージは「KVMあり」と同一です。

VTすごいよVT。

ディスクIOとか安定性とかの部分はまだ試せてませんが、いまのところは、かなりイイ印象を受けました。

その他、QEMUのメモ

  • -redir tcp:8022::22
    • ホストOSのtcp/8022へのパケットを、ゲストOSのtcp/22にリダイレクトする。
  • -vnc :1
    • ゲストOSの画面を、vncサーバの中に表示する。vncviewer HOST:1 とかでそれを見られる。
    • ホストOSにモニタ、キーボードがないとかリモートからホストOSにSSHしてQEMUを上げたいときとかはこのVNCを使うのが便利。

30種類のメディアに対応してる、メモリカードリーダ/ライタ

1台で、30種類のメディアに対応できる、高速モデルのカードリーダー/ライター。現存するほとんどのメディアを、アダプタなしで使用できる。SDHC4G対応。複数メディアの同時使用/相互コピーも可能。メディアカードの活用には、カードリーダー/ライターが必須。現存するほとんどのメディア全30種類に対応する最強のカードリーダー/ライター。

を買ったす。

  • メモリスティックとSDカードを挿して、ちゃんと両方同時にマウントできた! (Mac OS X 10.4.9で)
  • アダプタ要らずなんで、カードリーダ本体と付属のUSBケーブルだけ!
  • カードリーダ本体はタバコの箱より小さい!
  • 軽い!

といった製品のうたい文句そのままのことに感動した。メモリカード複数挿してソフトウエアRAID組もうかと血迷うぐらい感動した。

2つも買ったけど一片の悔いなし。

2007-05-04 (Fri)

広角28mm

いままで使ってたデジカメ(SONYのDSC-F88)が壊れ気味になってきたので、新しいのを買いました。

YAPCのときにデジイチを自慢されて目がハートになったんで、家帰ってそれとなくデジイチのすごさをアピったんですが、「でも、重いのヤダ」という理由で一蹴され、結局 CanonのIXY DIGITAL 900ISにしました。

んでこれ、こうかくにじゅうはちみりというのがウリの1つらしいのですが、カメラさっぱりでよくわからんので、とりあえず撮り比べしてみました。被写体は、グっとくる風景が思いつかなかったので、家にあった置物のブツドリです。

↓まずこれが普通の。

f:id:hirose31:20070504160608j:image:w300


↓ほんでこれが広角28mmの。

f:id:hirose31:20070504160503j:image:w300


なにこの広角マジックは! 右の人の首の角度が全然違うつかこっち向いててコワいんすけど! すげー!! おもれー!!! m9(^Д^)


あと、最近のデジカメはUSB接続したときに、PTP (Picture Transfer Protocol) というので画像データのやりとりをするらしく、マスストレージにはみえないんですね… SDカードリーダ的にも使おうと思ってたんですが見事にダメでした。

2007-05-01 (Tue)

Linus曰く、

.. ok, enough waffling about it already. "Just do it!"

http://kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.21

意訳:ヤッチマイナー!!

2003 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 12 |
2012 | 01 | 02 | 03 | 06 | 08 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 |
2015 | 01 | 02 | 07 | 10 |
2016 | 01 | 05 | 10 | 12 |
2017 | 07 |
2018 | 05 |