2010/04/26

Ubuntu 10.04 RCとDebian lenny 5.0.4でOCFS2を試してみる

しばらく前にUbuntu 8.04 LTSとDebian lenny 5.0.4の組み合せでocfs2を使った時に、Ubuntu側のカーネルバージョンが低いためにocfs2のバージョンについて整合性が取れず、クラスタの作成に失敗してしまいました。

Ubuntu 10.04もRC版が公開されて、RAID、nvidia周りのバグも取れたようなので、デスクトップをバージョンアップし、ocfs2を試すことにしました。

おおまかな流れ

基本的な進め方は 前回の投稿::Ubuntu 8.04 LTSでDRBD+OCFS2を試してみるの通りです。

/dev/drbd0デバイスを作成し、mkfs.ocfs2でのファイルシステムの準備と、mount.ocfs2を使ったデバイスのマウントを行なっていきます。

OCFS2ファイルシステムの作成

ファイルシステムを作るだけなら、コマンドを一つ叩くだけです。

$ sudo /sbin/mkfs.ocfs2 /dev/drbd0

ただし、Ubuntu 10.04 RCからmkfs.ocfs2を行ない、Debian側でmountした時には次のようなメッセージが表示されエラーとなりました。

mount時に出力されたメッセージ

mount.ocfs2: Unsupported feature(s) found while opening device /dev/drbd0

このためmkfs.ocfs2は、Debian lenny側で行なっています。

/dev/drbd0デバイスのマウント

マウントでも当初はタイムアウトエラーとなってしまいました。 そのため /etc/default/o2cb ファイルの設定値を同じにすると、無事にマウントできるようになりました。 参考までに次のような設定にしています。

/etc/default/o2cbファイルの内容

#
# This is a configuration file for automatic startup of the O2CB
# driver.  It is generated by running 'dpkg-reconfigure ocfs2-tools'.
# Please use that method to modify this file.
#

# O2CB_ENABLED: 'true' means to load the driver on boot.
O2CB_ENABLED=true

# O2CB_BOOTCLUSTER: If not empty, the name of a cluster to start.
O2CB_BOOTCLUSTER=ocfs2

# O2CB_HEARTBEAT_THRESHOLD: Iterations before a node is considered dead.
O2CB_HEARTBEAT_THRESHOLD=61

# O2CB_IDLE_TIMEOUT_MS: Time in ms before a network connection is considered dead.
O2CB_IDLE_TIMEOUT_MS=30000

# O2CB_KEEPALIVE_DELAY_MS: Max. time in ms before a keepalive packet is sent.
O2CB_KEEPALIVE_DELAY_MS=2000

# O2CB_RECONNECT_DELAY_MS: Min. time in ms between connection attempts.
O2CB_RECONNECT_DELAY_MS=2000

やはり違うディストリビューションを使うと、問題は発生しますが、根本的な問題は解決されているので、無事に使う事ができました。

あまり負荷をかけるつもりはないので、しばらくはログファイルの転送に使うつもりです。

2010/04/25

BeagleboardのDebian lennyを入れたSDカードでnilfs2を試す

いままでSDカード全体をext3でフォーマットしていたのですが、一部のディレクトリで書き込みができなくなってしまったので、他のSDカードでパーティションを増やし、 nilfs2を使うことにしました。

いきなりnilfs2の領域を作成してインストールすることはできないので、まずは普通にext2/ext3でフォーマットしたSDカードにdebian lenny環境を構築しておきます。 ここからは別のSDカードにnilfs2の領域を作成して、引っ越した時の状況をメモしておきます。

進め方

すでにSDカード上にdebian lennyが導入されているので、待ち受け側のSDカードにnilfs2用のパーティションを追加してファイルをコピーするだけです。

ただし、カーネルがnilfs2をサポートしているか確認が必要です。 手元の2.6.32.6-x6.2ではnilfs2.koがないのですが、2.6.32.11-x13には含まれています。 できるだけ安定している最新のカーネルを使うべきでしょう。

配布されているカーネルではnilfs2はカーネルモジュールなので、起動時のパーティションには引き続きext2/ext3が必要です。

SDカードのパーティショニング

いま稼働しているSDカードは2GBのもので、次のようなパーティションに分かれています。 /dev/mmcblk0p3をext3な最小限の部分と、残りをnilfs2な領域に分割します。

稼働中SDカードのパーティション

Disk /dev/sdg: 2014 MB, 2014838784 bytes
64 heads, 63 sectors/track, 976 cylinders
Units = シリンダ数 of 4032 * 512 = 2064384 bytes
Disk identifier: 0x00000000

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1               1         125      251968+   6  FAT16
/dev/mmcblk0p2             126         250      252000   82  Linux swap / Solaris
/dev/mmcblk0p3             251         976     1463616   83  Linux

次のようなSDカードを別に準備しました。

nilfs2をロードするまでに必要となる/sbin, /bin, /lib, /etcなどはext2/ext3な領域に配置する必要があります。 今回は/dev/mmcblk0p4をnilfs2にフォーマットし、/usr, /var, /homeを配置することにしました。

移動先カードのパーティション

Disk /dev/mmcblk0: 2021 MB, 2021654528 bytes
20 heads, 19 sectors/track, 10390 cylinders
Units = cylinders of 380 * 512 = 194560 bytes
Disk identifier: 0x00000000

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1               1         659      125200+   6  FAT16
/dev/mmcblk0p2             660        1976      250230   82  Linux swap / Solaris
/dev/mmcblk0p3            1977        3293      250230   83  Linux
/dev/mmcblk0p4            3294       10390     1348430   83  Linux

ちなみに /dev/mmcblk0p1 は、USBカードリーダを通して普通のPCでmountすると/dev/sdg1のようになります。 "mmcblk0"が"sdg"、"mmcblk0p1"が"sdg1"のようになる感覚です。

'w'コマンドでfdiskを終了してから、各パーティションをフォーマットします。

フォーマット

各パーティションに合った

$ sudo mkfs.vfat /dev/sdg1
$ sudo mkswap /dev/sdg2
$ sudo mke2fs -j /dev/sdg3
$ sudo mkfs.nilfs2 /dev/sdg4

もし必要ならfsckが走らないようにtune2fsで/dev/sdg3の設定を変更しておきます。

$ tune2fs -c 0 -i 0 /dev/sdg3

Debian lenny x86_64版でのファイルの引っ越し

beagleboardにUSB経由でSDカードアダプタを接続しようとしましたが、I/O負荷が高くなった時にUSBポートが安定的に稼働するか自信がなかったので、VMWare上のdebian lennyでカーネルを作業を行ないました。

Debian lenny x86_64版でのnilfs2の有効化

対応するモジュールが準備されているので、それを導入します。

$ sudo apt-get install nilfs2-modules-$(uname -r)
$ sudo apt-get install nilfs2-tools
オリジナルSDカードからのバックアップの作成

まずはオリジナルのSDカードの各パーティションの内容をtar形式でバックアップを作成しておきます。 あらかじめ$ sudo mkdir /mnt/sdで/mnt以下にマウントポイントを作成しておきます。

$ sudo mount /dev/sdg1 /mnt/sd
$ cd /mnt/sd
$ sudo tar czf ~/mmcblk0p1.tar.gz .

あとは同じようにmmcblk0p3.tar.gzを作成します。

待ち受け先SDカードの準備作業

nilfs2が有効になったdebian lennyにSDカードを認識させて、fdiskでパーティションを切っていきます。

それから各パーティションをマウントして、バックアップからファイルシステムを戻していきますが、"/dev/mmcblk0p3"は'/'(root)にマウントし、"/dev/mmcblk0p4"は'/nilfs2'にマウントします。

その上で次のようにシンボリックリンクを使い、'/usr', '/var', '/home'を準備しておきます。

$ tree .

マウントポイントからみたディレクトリ構造

.
|-- home -> nilfs2/root.home
|-- lost+found
|-- nilfs2
|   |-- root.home
|   |-- root.usr
|   `-- root.var
|-- usr -> nilfs2/root.usr
`-- var -> nilfs2/root.var

これでバックアップを展開すれば'/usr', '/var', '/home'などは自動的に/nilfs2以下にファイルが作成されます。

"/dev/mmcblk0p1"はFAT領域で、単純にバックアップからtarで戻せばOKです。

起動時にnilfs2モジュールをロードする

起動時にカーネルモジュールをロードする方法は、ディストリビューションによって違いがあります。

Debianでは/etc/modulesに、起動時にロードさせたい名前を記入します。

/etc/modulesファイルの内容 (コメント、空行は除く)

loop
nilfs2

beagleboardでの稼働

基本的にはここで作成したSDカードをbeagleboardに差し込んでうまく動いています。

ただしbeagleboardではカーネルに統合されたnilfs2ドライバを使っているため、nilfs2本家のFAQにあるようにapt-getで入手できるnilfs2-toolsパッケージとは互換性がありません。

そこでlscpなどのnilfs2に固有のコマンドはnilfs-utils-2.0.18をコンパイルして使っています。 xstowを使うために--prefixオプションでインストール先を変更しましたが、/etc/nilfs_cleanerd.conf, /sbin/mkfs.nilfs2などのコマンドのインストール先は標準では変更することができないようになっています。

これらのファイルは手動で配置しています。独自にパッケージを作成するのであれば、既存のnilfs2-toolsのソースファイルを展開して参考にするのが良いでしょう。

さいごに

ext2/ext3のようにあらかじめカーネルに組み込まれていれば良いんですが、 ARM用にカーネルの再構築を試していないのと、beagleboard実機でのカーネルコンパイルはおそろしく時間がかかりそうなので試していません。

また、次のようなログがシステムに出力されているため、原因についても少し追い掛けてみようと思っています。

現在dmesgに出力されているエラーメッセージ

[56527.452941] NILFS error (device mmcblk0p4): nilfs_check_page: bad entry in directory #14570: unaligned directory entry - offset=0, inode=134777631, rec_len=770, name_len=99
[56527.478210] NILFS error (device mmcblk0p4): nilfs_readdir: bad page in #14570
[73378.520874] NILFS error (device mmcblk0p4): nilfs_readdir: bad page in #14570

2010/04/23

V4L2のサンプルコードで遊んでみる

手元にWebカメラがあってbeagleboardに接続して使えないかなと思って、V4L2 APIを使ってみました。 V4L2 APIリファレンスのAppendix B. "Video Capture Example"にあるコードを使うと、static void process_image(void *p)関数の中身を作成するぐらいで動画や静止画を書き出す事ができます。

ただ「〜するぐらいで」とはいっても、使うUSBカメラのスペックなども関連して、 そんなに簡単ではなったので試行錯誤した結果をまとめておきます。

今回はbeagleboardに入れたdebianに、ライブラリなどを入れましたが、特に問題なく試す事ができると思います。

環境

今回はprocess_image関数を実装するために、motion(GPLv2)のコードを参考にしました。 参考にしたものも合わせて、環境をまとめると次のようになります。

  • HW: BeagleBoard Rev. C3
  • USB Camera: BUFFALO BSW13K05H
  • OS: Debian Lenny 5.0.4
  • Kernel(uname -r): 2.6.32.6-x6.2
  • gcc --version: gcc (Debian 4.3.2-1.1) 4.3.2
  • Packages: libjpeg62 libjpeg62-dev
  • References: motion-3.2.9 (derived by: apt-get source motion)

サンプルコードをコンパイルする

まずは APIリファレンスのAppendix B.にあるコードをコピーして、コンパイルできるかどうか確認するのが良さそうです。 とりあえず"v4l2_example.c"という名前でコピーしてきました。

$ gcc v4l2_example.c

特別なライブラリをリンクすることもなくコンパイルできるはずです。 これはそのまま実行できます。

$ ./a.out -d /dev/video0

正常に実行できた場合

....................................................................................................

/dev/video0が存在しない場合

Cannot identify '/dev/video0': 2, No such file or directory

v4l2_format構造体に指定するデバイスの初期設定値が間違っていた場合

VIDIOC_S_FMT error 22, Invalid argument

コード中では /dev/video が指定されていますが、debian/ubuntuではudevはデバイス名の最後に番号を割り振ってくれます。 "-d"オプションを使う必要がないように"/dev/video"を"/dev/video0"に書き換えて良いのかもしれません。

fmt.pixelformatに設定できるデバイスの画像形式を確認する

最後の「v4l2_format構造体に指定するデバイスの初期設定値が間違っていた場合」では、試した範囲では接続したUSBカメラに対応したpixelformatを選択しない場合に、エラーになるようです。

サンプルコードではカバーされていませんが、ioctlでVIDIOC_ENUM_FMTを要求するとデバイスからpixelformatに設定できるフォーマットを得る事が可能です。

例えば次のような関数をmain()の中のopen_device();の直後に呼ぶと、出力例のようにデバイスのサポートする形式が出力されます。

motionを参考にしたVIDIOC_ENUM_FMTを利用したコード例

static void list_formats()
{
    int i;
    struct v4l2_fmtdesc fmt;
    fmt.index = i = 0;
    fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

    while(-1 != xioctl(fd, VIDIOC_ENUM_FMT, &fmt)) {
        printf("%i: %c%c%c%c (%s)\n", fmt.index,
                           fmt.pixelformat >> 0, fmt.pixelformat >> 8,
                           fmt.pixelformat >> 16, fmt.pixelformat >> 24, fmt.description);
        memset(&fmt, 0, sizeof(struct v4l2_fmtdesc));
        fmt.index = ++i;
        fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    }
}

実行時のlist_formats()の出力例

0: YUYV (YUV 4:2:2 (YUYV))
...

このコードはmotionを参考にしました。

検索でみつかるV4L2 APIについてのプログラミング例は、だいたいV4L2 APIのサンプルをベースにしているようです。 そういうサイトの説明ではpixelformatに、V4L2_PIX_FMT_RGB24やV4L2_PIX_FMT_MJPEGを指定しているものがありますが、これは接続するUSBカメラに合ったものでなければなりません。

問題となるコード例

...
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB24;
...

今回の場合は、"YUYV"と表示されているのでV4L2_PIX_FMT_YUYVだけが唯一pixelformatに指定できる形式です。

"VIDIOC_S_FMT error 22"をキーにして検索するとMLに質問を投げて無視されているようなものもみつかりますが、まずは使うUSBカメラがサポートする形式を調べるところから始める必要がありそうです。

外部コマンドによるデバイス出力形式の確認

自前でコードを書かなくとも、デバイスの出力形式を調べることは可能です。

例えば、luvcviewコマンドの'-L'オプションを使う方法があります。

$ luvcview -L

luvcviewコマンドの出力例

luvcview 0.2.4

SDL information:
  Video driver: x11
  A window manager is available
Device information:
  Device path:  /dev/video0
/dev/video0 does not support read i/o
{ pixelformat = 'YUYV', description = 'YUV 4:2:2 (YUYV)' }
...

ブログなどをみると比較的高めなUSBカメラで、MJPEGにも対応しているものがあるようです。 デバイス毎の出力形式が一覧になっていると良いんですけどね。

YUYV(YUV422)形式からJPEGファイルへの出力の作成

画像処理ではtiff形式をよく使いましたし、汎用性が高そうなYUV422からRGBへの変換などは他にまとめている方が大勢います。 ここら辺は専門分野ではないので、motionのコードを流用する事にしました。

今回のUSBカメラとV4L2 APIを使った背景目的は、動画ファイルの作成ではなくて、監視カメラとして1,2秒間隔で静止画を得る事だったのでJPEG形式に出力させてみました。 motionをそのまま使ったほうが良いんじゃないかって感じですが、swfファイルとか必要ないですし、V4L2の勉強を兼ねてコンパクトなアプリを作ることにしました。

motionはデバイスからのRGB24やらYUYVやらの出力形式を受けて、YUV420形式に統一して扱っています。 JPEGファイルに出力する場合は、さらにそのYUV420形式を入力にします。

motionからのコードコピー

関数の内容は次のプロトタイプ宣言に対応するコードをmotionのvideo_common.cとpicture.cからコピーしておきます。

motionからコピーしてきた関数のプロトタイプ宣言

void conv_yuv422to420p(unsigned char *map, unsigned char *cap_map, int width, int height);
void put_jpeg_yuv420p_file(FILE *fp, unsigned char *image, int width, int height, int quality);

put_jpeg_yuv420p_fileはlibjpegライブラリを使うため、libjpeg.hファイルをincludeする事が必要です。

サンプルコードに追加するinclude文

#include <jpeglib.h>
#include <jerror.h>
process_image関数の実装

オリジナルのサンプルコードは、単純に'.'(ピリオド)を表示するだけのコードですが、(void *)型のp変数から準備した関数を使い画像形式を変換していきます。

process_image関数の概要

int ya_count = 0;
#define IMG_WIDTH 640
#define IMG_HEIGHT 480
#define FILENAME_LEN 10
...
static void process_image (const void *p) {
    FILE *fp;
    unsigned char *dst;
    char filename[FILENAME_LEN];

    snprintf(filename, FILENAME_LEN, "p_%02d.jpeg", ya_count++);
    fp = fopen(filename, "w");
    dst = (unsigned char *)malloc(sizeof(unsigned char) * (IMG_WIDTH*IMG_HEIGHT) * 2);
    conv_yuv422to420p(dst, (unsigned char *) p, IMG_WIDTH, IMG_HEIGHT);
    put_jpeg_yuv420p_file(fp, dst, IMG_WIDTH, IMG_HEIGHT, 99);
    free(dst);
    fclose(fp);
}

毎回mallocしなくても、一回確保してmemsetで初期化した方が良さそうにも見えますね…。

$ gcc v4l2_example.c -ljpeg

beagleboardなのでSDカードに220KB程度のファイルを書き出していますが、とりあえずI/Oはボトルネックになっていない模様。

とりあえず動くコードはできたので、V4L2のAPIリファレンスを読み進めていこうと思います。

この記事で取り上げた品々

2010/04/15

「共生のための技術哲学」を読んで

共生のための技術哲学 村田純一編」を読み終ったので、感想をまとめておこうと思います。

概要

この本は村田純一先生が企画・運営に携わり2006年に開かれた本の表題と同名のワークショップの成果をまとめたものです。

ワークショップでは「ユニバーサルデザイン」の考え方をベースに、様々な方々が自らのバックグラウンドにもとづいて講演されており、本書にはその講演録を元に書き直されたり、ワークショップを受けてその後に書かれたと思われる論文が収録されています。

そのため、前の講演内容を受けて説明を行なっている論文があったり、聴衆に呼びかけたり、読み易く編集されてはいますが、いくらかライブ感の残る内容になっています。

読み終えての感想

この本の前半に大きな位置を占める「社会構成主義」については、先日ブログにまとめて投稿しました。

全体を読み終えて思ったことは、私たちの周りには人間の持つ柔軟性に頼っている、本質的に使いずらい建築物や工業製品があふれているのではないか、ということでした。

この感想を持った理由は、おそらく私自身のバックグラウンドも多少は関係していると思います。

感想のベースになっている自分のバックグラウンド

私自身の技術的なバックグランドはネットワークセキュリティであったり、Gnomeアプリケーションの改良だったりしますが、仕事としてはシステムの運用経験が大きな位置を閉めています。

その業務は基本的に誰かが作ったものを引き受ける先である性質上、設計書や手順書などのドキュメントに大きく依存していました。 どのようなドキュメントであれば短時間に、間違いを起さず、必要な作業(計画、変更、確認、etc.)が行なえるのか、常に模索していたと、いま振り返って思います。

基本的にドキュメントというのは、書き手の持つ観点に依存しています。 良く考えられた印象を受けるドキュメントは複数の観点を持って書かれたものといえるでしょう。

しかし実際には、想定されるフローから外れた事象には対応できなかったり、当たり前と思われる前提は省かれていて、その内容は、所詮、書き手の知識・経験に大きく依存し、またそれを反映しただけのものに過ぎません。

そのために落とし所として、再起動などのスタートラインの敷き直しをするわけですが、それすらも全ての事象に対応できるわけではありません。 ガバナンスだ、標準化だ、といってみたところで基本的には開発者に細やかな配慮が求められ、最終的には運用担当者のスキル、という属人的なものに依存せざるを得ない性質を持っています。

そのため部分的にアウトソースしても、観点を見えないところに追いやっているだけで、考慮されていない観点は常に、より属人的なスキルの低い、下流に流れていくのが常でした。そしてより大きな問題として表面化し、場合によっては下流で受けた担当者単独のミスとして扱われることすらあるでしょう。

運用に限らず社会的に、この見落した、配慮の欠けた観点が下流に流れていく、最終的には利用者がツケを払うという構図があると感じています。 そのために法律といった形で、より上流で行き届いた配慮を行なうことになりますが、最大公約数的な対応となり必ずしも十分な対応にはならないでしょう。

最低限守らなければいけないルールを活かすためには、本来の趣旨を考え、それに沿って行動することが必要で、そうしなければ、最低限のルールに従うという投資に対して十分な見返りを得られないというのが個人的な見解です。

経済的に考えても、どうせやるなら意味のあるものにする、ルールは守ってこそのルール、だと思います。

「ユニバーサルデザイン」の普及について

本の中では「ユニバーサルデザイン」という言葉について違う表現で語られますが、より多くの人に多様な機会・方法を提供するという捉え方がとても気に入りました。

人間は生まれてから成長を続け、やがて老いていきます。 車イスに乗るぐらいのことは多くの人が、これから体験していくでしょう。 糖尿病になり失明する人も決っして少なくありません。 そういった自分に対して、これから起り得る、様々な局面の中で使い易いものを作るだけの話しに過ぎません。

もちろん理想的な成果物はコストなどの理由で作られないわけですが、本書の中ではユニバーサルデザインの考え方を、思想・哲学・運動・教育などの言葉で修飾することで、理解度の向上、社会的な圧力が生まれ、発展してゆくだろうという展望が語られています。

より多くの人が使いやすいものを求める、自分の使っているものが使いやすいかどうか、十分快適かどうか、自分が機械に身体を合わせていないか、十分に疑ってみる必要があります。

工業製品のレベルでは経済原則によって十分にユニバーサルデザインが普及するでしょう。 ただ、それよりも規模感の大きな建造物では、コストも大きくなり少し状況が違うかもしれません。

日本の風土

個人的には日本では、みんなが頑張って「標準的な枠」に収まろうとする活動が常にあって、その枠に収まれない人を援助をするという捉え方があるように感じています。 この枠に収まらないことで自らを恥しく感じるということもあるでしょう。

身近なレベルでは、成人男性に合わせた工業製品は小柄な女性には使いづらいという事は良くあることです。 枠を変化させなければ、その延長線上で、足腰の衰えた老人は次第に枠から外れていくのだろうと想像がつきます。

ユニバーサルデザインという考え方を教育や運動によって実現していくというのは自然な意見に聞こえますが、はたしてそうでしょうか? 意思決定に関わる全ての人がこれから老いていき、関わるものをデザインしているというのに、どうしてこの視点が欠落してしまうのでしょう。

将来の老いてゆく自分のために、ユニバーサルデザインという考え方を自然に身につける機会があると考えることはできないでしょうか。 もちろんこれは個人レベルでの道徳的、倫理的な感覚に依存しています。 最初のステップで教育は重要です。 しかし、そこからは自分自身の問題として受け止めることができるかどうか、それがより大きな課題だと思います。

若い人間を非難する言葉の中に、想像力の欠如という言葉をみますが、現在老人となった世代の想像力が欠如していたために、生きずらい環境を構築してしまったという事も言葉遊びとしてはできると思います。 もちろんそこには、個人レベルの想像力と世代全体を動かす想像力の違いがあるわけですけれども。

老人世代の復権

ある時代の多数派であった世代が老人となり、その要求は数の力を帯びています。 現実にはその数の力によって世の中が変化してゆくでしょう。

しかし、数の力は時に局所的な変化を作り出してしまい、「バリアフリー」で見られるように、建物全体はバリアフリーでも、そこに至る道や交通機関はバリアフリーではない、という現象を引き起しかねません。

残念ながら既に作られた「標準の枠」に収まっている私の所属する世代は、そのデザインについての決定権を持っています。 きっとこれからもコストのなどの理由で、いまの老人世代が見過してきたようにユニバーサルデザインという考え方を無視する意見はあるでしょう。

ユニバーサルデザインの考え方を取り入れ、実行する理由があるとすれば、いま生きずらい環境にいる老人をみて決定権を持つ世代が想像力を働かせる以外にはないのではないでしょうか。

ほんの少しだけ、自分の生きやすい未来を考える事で、この観点を得ることはできそうに思えます。 日本では欧米の他者をいたわるキリスト教的な観点よりも、より自分自身の問題として問う事がより説得力を持つでしょう。

自分自身の問題、その中にも障碍者と呼ばれる人たちのいくらかの助けになるデザインがあり、それをふくらませる事で自然に対応できる課題が多くあると思います。

ユニバーサルデザインという考え方に思うこと

ここまで書く中で、何が「ユニバーサルデザイン」なのか、ということを感じています。 老人世代を考慮するだけで障碍者と呼ばれる人々の助けになる部分もあるでしょう。 けれど、より多くの人々の助けになるためには、もっと多くの配慮が必要そうです。

まずは車イスを移動手段として暮せる社会、次に視覚に不自由があっても暮せる社会、次に…、と考えても、そこには同時進行的に並列に解決できる問題も含まれています。

このように特定の問題を解決してゆくのではなく、様々な観点を導入し、お互いに相互作用することがユニバーサルデザインとなってゆくのだろうということです。

いままで当然と思っていたものについても、なぜそうなのか、という観点を持つ事がまずは必要に思われます。

地域毎のユニバサールデザイン

川崎、横浜での7年間の生活に終止符を打って田舎に引っ越してきて感じることですが、 建物や道路など都市のデザインは関東圏のそれと、大きな違いがないような印象を受けました。

例えばショッピングセンターの周りには屋根のない通路があって、駐車場と出入口を結ぶ道になっています。 もちろん雪が積ると通れないですし、吹雪を防ぐために屋根だけでなく壁があってしかるべきでしょう。

そして本を読み終えて、この雪深い、4月でも深夜の気温はマイナスになる、この地域に共通に適用できる雛型、ユニバーサルデザイン、があるのではないかと感じました。

いまの日本は物流や情報の均一化が進み、ファッションなどの消費行動の流行も均一化しているといわれています。 沖縄の購買パターンを分析して、夏物衣料の流行を予測するという会社もあるようです。

そんな流れの中で都市のデザインも均一化が進むのかもしれません。 しかし豪雪地域ではトタン屋根が実用的とされ、瓦屋根を嫌う雰囲気があるように、地域にあったデザインは必ずあるはずです。

その考えを広く家族構成や生活パターンといった文化的な背景も含めて広げていくと、着眼点ごとにデザインができてゆくと思います。

この考え方に違和感を感じるとすれば、それが障碍者と呼ばれる人々に対してアプローチしていないということかもしれません。 より多くの人に機会・手段を提供するのがユニバサールデザインの機能だとすれば間違いないはずですが、これまでのバリアフリーから発展してきた流れとは明らかに違うでしょう。

障碍者とは呼ばれない自分の手の届くところにユニバーサルデザインはあるのだと思います。 その考え方を少しずつ広げていくだけで、障碍者と呼ばれる人々も少しずつ巻き込んでいく事ができるはずです。

それこそがユニバーサルデザインなのでしょうけれど、現実には教育が重要でしょうね。 みんなが楽をしたいためエレベータに殺到するなら、最初からエレベータを複数設置するのが正解かもしれません。 しかし現実には、代替手段のない車イスの人を優先的に列の先頭に配置するといった工夫も当然バランスを取るために必要です。 こういう考え方を当然のマナーとするためには、教育が必要になります。

近所にあるハートビル法に準拠しているスーパーのデザイン

よく使う近所スーパーは、いわゆるハートビル法に準拠して作られた、というメッセージが掲げられています。 確かにエレベーターはあるし、天井は高い、通路は比較的ゆったりと作られてはいますが、2階に行くための階段は、横幅は5〜7mはありそうで、2階まで一直線、スカートの丈が短い人をみると心配してしまう作りになっています。

まぁよほど健康な人でも疲れてしまうし、踊り場がないのは落ちたら死ねますね…。 間違いなく杖をつく人はゆっくりでも登らない方が身の為という階段で、私はいつも手すりにつかまっています。

しかし手すりは階段の片側にしかありません。 階段の真ん中に柵のような手すりもないのです。

これでも国交省の「 建築物移動等円滑化基準チェックリスト」には準拠していると思います。 トイレの通路が狭いと思いましたが、これは新基準に合致していないのか、トイレまで120cm以上の通路が連続しているかどうかは出発点をどこに設定するかで解決したのかもしれません。

現在はハートビルを名乗れないかもしれませんが、作られた当時は間違いなく、陳列棚の間に車イスがすれ違えないような通路があっても、ハートビルと呼ばれた建造物であったはずです。

これはそのスーパーを糾弾したいわけではなくて、基準がある事による弊害のようなものがあると思います。 この基準が変化することで、ある時点ではハートビルだったものが、突然ハートビルと呼ばれないようになります。

そんな変化があっても万人に使い易い、使いにくい、という事実に変化はないはずです。 これはチェックリストを元にデザインではなく技術で解決してしまうことによる悲劇のような印象を受けました。

基準があることで、それを解決する責任がデザイナーからエンジニアに移ってしまうことはないでしょうか。 デザインがなくとも基準を満せばよいという考え方は、本来の趣旨を歪めてしまうはずです。

この基準を満し、かつその建物や地域の実情にあったデザインがあるはずだからです。 これからはエンジニアにデザイナーとしての役割を意識することが求められてゆくのかもしれません。

ソフトウェアのデザインとユニバーサルデザイン

アプリケーションの設計はエンジニアの仕事ですから、 ユニバーサルデザイン的な観点の導入について、テクニカルな問題として扱いがちになると思います。

特にWeb系でデザイナーというと、設計に携わるというよりも、見映えのファッションの部分を扱うのが実情だと思います。

アラン・ケイ先生がいうように、いまのパソコンは使いずらいという印象を強く持っています。 これまでの経験から人間は、あまりにも柔軟性でドキュメントの不備も克服できる機能を持っています。 その人間に依存した作りになっている部分が多くあり、人間をサポートする機械であることは間違いありませんが、使いやすいか、という点には疑問を持っています。

ユニバーサルデザインの観点がこれを簡単に解決するとは思いません。 しかし、すべては参加者の意識とデザインの問題なのだと思います。

エンジニアはフレームワークを構築したり、ライブラリを開発することで、手の届くところにある問題を解決してきました。 それは全体からみて、局所的な対応であったため、場当たり的な「バリアフリー」問題の解決策のように、問題のある側面のみを解決してきたのかもしれません。

開発者は開発者の観点からみえる問題を積極的に解決してきたということはできると思います。 現在のコンピュータは高機能で複雑の度合いを高めています。 もはや革命的な変更は難しいところにまで成熟の度合いは高まっているのかもしれません。 何らかのフレームワークの導入とその対応の強制ですらハードルは高いでしょう。

ユニバーサルデザインの考え方が広がることでエンジニアが開発側の立場や経済的インセンティブに加えて、万人に受け入れられるデザインという観点からも提案できること、またそれが受け入れられる環境の醸成が必要と感じています。

すべてはデザインの問題なのです。 ファッション以外のデザインの意味、意義について教えを乞う機会はあまりにも少ないですが。

この記事で取り上げた品々

2010/04/13

またまたフラッシュメモリが使えなくなる

概要

しばらく前に 突然USBフラッシュメモリが使えなくなることがありましたが、 またalixのバックアップに使っているフラッシュメモリが書き込めない状態になりました。

今回はコジマで買ってきたKodakブランドのLexar製なUSBフラッシュメモリで、980円ぐらいの特価品だったと思います。

用途と症状

フラッシュメモリの領域にディレクトリやファイルを作成しようとすると、次のメッセージが表示されます。

mkdir: ディレクトリ `/misc/bk/test' を作成できません: デバイスに空き領域がありません

ext3フォーマットにして、pdumpfsでバックアップを取っていましたが、2/17〜4/03のデータを取得していました。 だいたい全体の半分まで使いきらないうちに使えなくなった事になります。

$ df -k /misc/bk

dfコマンドの出力

Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sdb1              3853472   1587748   2069976  44% /misc/bk

このフラッシュメモリは前回の記事の時に壊れたメモリの代りではなく、新しいalixに付けたものでした。

前回の記事の対応として、SONY製の4GBフラッシュメモリを買って、DNS/SVN/Apacheサーバとして使っているalixに接続していて、そちらは同様の使い方で、2/16〜4/13までのバックアップがちゃんと取れています。

こちらはまだ全体の30%(1GB前後)を使っているだけなので、このまま様子をみようと思います。

Beagleboardに使うSDカードのhdparm結果メモ

SDカードのパフォーマンスはいろいろな計測方法があるので、この数字だけで、どうこういうわけではないですが、手持ちのカードをhdparmを使って計測したデータを羅列しておきます。

$ sudo /sbin/hdparm -Tt /dev/mmcblk0

上海問屋オリジナル 150倍速 2GB SDカード

hdparm -Tt /dev/mmcblk0

/dev/mmcblk0:
 Timing cached reads:   234 MB in  2.00 seconds = 116.79 MB/sec
 Timing buffered disk reads:   18 MB in  3.33 seconds =   5.41 MB/sec
$ sudo /sbin/hdparm -Tt /dev/mmcblk0

Panasonic Class6 2GB SDカード

/dev/mmcblk0:
 Timing cached reads:   230 MB in  2.01 seconds = 114.31 MB/sec
 Timing buffered disk reads:   18 MB in  3.32 seconds =   5.42 MB/sec

あれ、もう少しスピードが出ても良いような気もするけれど…。

OMAP3との接続は20MHzで4bitモードだっていうから、1byteに2cycle必要で、送受信が同時できないとすれば、5MB/sec前後のパフォーマンスは妥当なのかなぁ…。

どういうわけかMMC用の8bitモードで駆動させるパッチの情報があったり、カーネルのバージョンを上げるとパフォーマンスが向上するといった情報があったり、ちょっと謎な感じもします。

どうしたってUSBバス経由でフラッシュメモリを搭載した方がよさそうなのは、ちょっと残念だなぁ。 beagleboardのディスクI/O周りはどうするのが良いんだろう…。

2010/04/11

Ubuntu 8.04 LTSでBeagleboardにDebian lennyを導入してみる

今回はしばらく前に入手した Beagleboard(Rev. C3)にdebian lennyをインストールします。 alixでtracを稼働させていたのですが、パフォーマンスに満足いかなかったのでBeagleboardを試すことにしたのでした。

beagleboardに接続するSDカードはUbuntu 8.04 Hardyで作成します。 mkimageコマンドを除けばUbuntu 8.04を意識することはありませんが、その他のメモと一緒に気になった点をまとめました。

構成

今回作成した機器は次の通りです。

  • Beagleboard Rev. C3
  • SDカード1:Panasonic Class6 2GB
  • SDカード2:上海問屋オリジナル 150倍速 2GB
  • シリアルUSBケーブル: SRC06-USB
  • USBイーサネット: PCI UE-200TX-G

インストール

参考にしたのは http://elinux.org/BeagleBoardDebianで、 基本的には書かれている手順に従いました。 気になったところをメモしていきます

kermitのパラメータ

Ubuntu 8.04 Hardyとbeagleboardとの接続はUSBシリアルケーブル(SRC06-USB)を使っています。 Ubuntu側ではckermitパッケージを導入し、/usr/bin/kermitを使っていますが、connectするために次のようなコマンドを入力しています。

$ kermit
C-Kermit> set port /dev/ttyUSB0
C-Kermit> set carrier-watch off
C-Kermit> set speed 115200 

kermit画面出力

Type ? or HELP for help.
(/home/yasu/) C-Kermit>set port /dev/ttyUSB0
(/home/yasu/) C-Kermit>set carrier-watch off
(/home/yasu/) C-Kermit>set speed 115200 
/dev/ttyUSB0, 115200 bps
(/home/yasu/) C-Kermit>connect
Connecting to /dev/ttyUSB0, speed 115200
SDカードのパーティションについて

ブートローダを配置するためにFATフォーマットで最初のパーティションに128〜256MB程度の領域を確保します。 この時に残りの領域をext2などでフォーマットしてしまうと、参考にした手順で Guided - Use the largest continuous free space という選択肢は表示されません。

この場合はManualを選択し、ext3でフォーマットし、'/'にマウントさせ、bootflagをONに設定する必要があります。 簡単ですが、面倒だと思えば、使わないパーティションは削除し、空きスペースを割り当てずにbeagleboardの電源を入れるのがお勧めです。

netinstall.cmd, boot.scrファイルの配置場所

前のセクションからの流れで作業をしていれば問題ありませんが、boot.scrファイルはSDカードに作成したFATパーティションに配置します。 そのため、参考にした手順では /media/disk に移動した上で、netinstall.cmdファイルを配置する事になります。

nanoはテキストエディタで、これが便利であれば良いですが、単純にcatを使ったりviを使ってnetinstall.cmdファイルを作成することもできるでしょう。

mkimageコマンド

beagleboardの起動イメージを作成するために、mkimageコマンドを使う手順があります。

debian lennyや、最近のUbuntuでは uboot-mkimage パッケージが準備されているため、問題はありません。 しかし8.04 (Hardy)では手動でmkimageコマンドをインストールする必要があります。

手順自体は簡単で、debianや ubuntuのuboot-mkimageパッケージのページから、sourceファイルを展開しコンパイルするだけです。

$ tar xvzf uboot-mkimage_0.4.tar.gz
$ cd uboot-mkimage
make

カレントディレクトリにmkimageコマンドが作成されるため、頻繁に使うようであれば/usr/local/binなどに移動させるのが良いでしょう。

リブート後の作業について

インストールが一通り終ると、インストーラはbeagleboardを再起動します。 画面に Hit any key to stop autoboot: 10 のメッセージが出ている間に、適当なキーを押して処理を停止させ、電源を落すなどして一端SDカードを抜き、デスクトップ(Ubuntu 8.04 Hardy)側にSDカードを移します。

ここで適当なマウントポイント(例えば/media/disk)にFATパーティションをマウントし、normal.cmdファイルを作成していきます。

normal.cmd, boot.scrファイルの作成

/media/disk等にFAT領域をマウントし、そこへcdすると、既存のboot.scrファイルが存在するはずです。 もし再び同じSDカードを使ってdebianをインストールするのであれば、boot.scrファイルは保存しておいた方が便利かもしれません。

インストール後、マウントしたFAT領域の状態

-rwxr-xr-x 1 root root     310 2010-04-11 09:01 boot.scr
-rwxr-xr-x 1 root root 6023680 2010-01-22 21:53 initrd
-rwxr-xr-x 1 root root 8388608 2010-04-11 08:42 initrd.pad
-rwxr-xr-x 1 root root     238 2010-04-11 08:50 netinstall.cmd
-rwxr-xr-x 1 root root  188660 2010-04-11 08:57 u-boot.bin
-rwxr-xr-x 1 root root 2989884 2010-04-11 08:48 uImage

boot.scrファイルは適当な名前に変更して、normal.cmdファイルを作成し、参考にした手順の通りにboot.scrファイルを作成します。 最終的にはFAT領域は次のような内容になりました。

boot.scrファイルを作成し直した後のFAT領域の状態

-rwxr-xr-x 1 root root     245 2010-04-11 11:56 boot.scr
-rwxr-xr-x 1 root root 6023680 2010-01-22 21:53 initrd
-rwxr-xr-x 1 root root 8388608 2010-04-11 08:42 initrd.pad
-rwxr-xr-x 1 root root     310 2010-04-11 09:01 inst.boot.scr.old
-rwxr-xr-x 1 root root     238 2010-04-11 08:50 netinstall.cmd
-rwxr-xr-x 1 root root     173 2010-04-11 11:52 normal.cmd
-rwxr-xr-x 1 root root  188660 2010-04-11 08:57 u-boot.bin
-rwxr-xr-x 1 root root 2989884 2010-04-11 08:48 uImage
マニュアルで2番目以外のパーティションに導入した場合の対応

normal.cmdファイルにはパーティションを指定する記述があるため、3番目などに導入した場合にはroot=/dev/mmcblk0p3のように変更する必要があります。

uImageファイルの置き換え

ここまでの手順ではインストールに使ったカーネルイメージ(uImage)を起動するようになっています。

基本的にはuImageファイルを置き換える事でカーネルを切り替えることができるはずです。 Beagleboard: install kernel-imageではinstall-me.shを入手して実行するように書かれています。

この install-me.sh を読むと実行するためには、いくつかの前提条件があります。事前にチェックされていないので予期しないエラーになる可能性もあるでしょう。

  • カレントディレクトリに"temp"ディレクトリを作成するための書き込み権限と数十MBの余裕があること
  • SDカードのFAT領域は/dev/mmcblk0p1としてmountできること (既に他の領域にマウントしていないこと)

副作用としては次のようなものがありそうです。

  • /tmp/bootディレクトリが削除されること
  • uboot-mkimageパッケージが導入されること

まぁエラーが起きても問題の個所を修正して繰り返す事で問題なく修正できると思いますが、念のためにメモしておきます。 またinstall-me.shを実行した際の出力メッセージも下記にメモしておきます。

install-me.sh実行時の出力

Installing uboot-mkimage
Reading package lists... Done
Building dependency tree       
Reading state information... Done
uboot-mkimage is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Downloading Recommended Kernel
--2010-04-11 18:22:17--  http://rcn-ee.net/deb/kernel/beagle/lenny/v2.6.32.6-x6.2/linux-image-2.6.32.6-x6.2_1.0lenny_armel.deb
Resolving rcn-ee.net... 69.163.149.169
Connecting to rcn-ee.net|69.163.149.169|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10814762 (10M) [application/x-debian-package]
Saving to: `linux-image-2.6.32.6-x6.2_1.0lenny_armel.deb'

100%[===============================================================================>] 10,814,762   566K/s   in 19s     

2010-04-11 18:22:36 (551 KB/s) - `linux-image-2.6.32.6-x6.2_1.0lenny_armel.deb' saved [10814762/10814762]

Installing linux-image
Selecting previously deselected package linux-image-2.6.32.6-x6.2.
(Reading database ... 21583 files and directories currently installed.)
Unpacking linux-image-2.6.32.6-x6.2 (from linux-image-2.6.32.6-x6.2_1.0lenny_armel.deb) ...
Setting up linux-image-2.6.32.6-x6.2 (1.0lenny) ...
Mounting Fat32 partition
Extracting vmlinuz
Backing up Previous uImage
Creating uImage from vmlinuz
Image Name:   2.6.32.6-x6.2
Created:      Sun Apr 11 18:23:15 2010
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    3609320 Bytes = 3524.73 kB = 3.44 MB
Load Address: 0x80008000
Entry Point:  0x80008000
Please Reboot

ここからはRTCもないので、ntpdate, openntpdやらopenssh-serverやらsudoなどをインストールして環境を整えていかなければいけません。 とりあえず試している範囲では十分にtrac and subversionサーバとして活躍してくれそうです。

まとめ

先頭のFAT領域を最初はインストーラー、次はuImageをそのまま使って起動用領域にする手法はシンプルで便利です。

alixに比べてパワフルなのでtracとsubversionのサーバにしようとしましたが、USB-Ethernetが一度ダウンしてしまい、安定性については少し懸念がありますが、CPUのワークロードに依存する処理については任せるしかないと判断しています。

beagleboardに拡張ボードもありますが、ネットワークへはSPI経由での接続ですし、スピードは期待できないでしょう。安定性はどうなんでしょうね。

アクリル板でケースを作って、しばらく稼働させてみようと思います。

予防原則の適切な運用

今日の午前中までで「 共生のための技術哲学 村田純一編」の第一章までをようやく読み終りました。 この本は国立新美術館でみつけた本で、ユニバーサルデザインについての話題に関連した論文が収められています。 ライブラリで途中まで読んだのですが難しくて読み切れなかったので、amazon経由で入手しました。

この第一章の論文に出てくるキーワードはいくつかありますが、その中の一つが「予防原則」でした。

第一章を読む 〜社会構成論と予防原則〜

「予防原則」については漠然と意味は想像できたのですが、ちゃんと調べてみるとwikipediaのリンク先になっている「 予防原則に関するウィングスプレッド会議/声明」というサイトに辿り着きました。

概ね意図するところは、次の2点に集約できるようです。

  • 企業、政府に対し、科学的な根拠がその時点で明確でなくとも、発生した事象から先行処置を講じる事を求める
  • 立証責任を行為者の側に移すこと

具体的には深刻な環境汚染などが発生した時点で、汚染源と考えられる物質の排出規制など(強制力のある対応)を講じるよう政府に求めるということを想定しているようです。

この論文では、その結論に至る過程で、極端にこの主張を利用することの懸念について述べられています。 懸念を持つ人達が極端に全ての行為を停止させることさえあるでしょうし、それを受けて(おそらく企業側が)予防原則によって、全てのイノベーションが停止してしまうという懸念があるという指摘もあります。

それで、どうするのか

日本で身近な例では、遺伝子組み換え大豆やトウモロコシがあるでしょう。 論文の著者はナノテクノロジーを例として取り上げています。

ここまでを読んで、予防原則に伴う懸念は合理的な説明のつくところでバランスを取れば良いよね、と考えていました。 なにしろ立証責任を請求人に置かなければ、無制限に嫌がらせのような申立を行なうインセンティブを与えたようなものになってしまいます。

しかしこの論文の前半の社会構成主義について説明なども読むと、そもそも説得が難しいかなり主観的な問題提起を出発点としているのですから、現実的に説得が可能なのかという疑問も湧きます。

双方の立場を考えれば、元々のあるべき姿から離れ、事業主は言い掛かりだと考え無視しようとし、申立人は事業そのものが環境に負荷を与えているから操業を止めるべしという考えを持っていても不思議ではありません。

この論文の結論としてはナノテクノロジーの諸技術のリスクを従来の化学物質のリスク評価を応用する事で、そのリスク分類に沿った対応(モニタリング、規制)を取ることで柔軟な対応が可能だとしています。 その解決方法自体は他分野のソリューションですが、それを導出するための論理展開には社会構成主義の観点が有効そうです。 ただし具体的なツールについては述べられていません。

とりあえずの感想

科学的な根拠と呼ばれるものも、その基準値の決定、あるいは決定方法は社会的、政治的な影響を受ける可能性を否定することができないでしょう。 少なくとも事業主はビジネスを継続させるために、最低限の根拠があれば、それ以上の影響に関する調査・研究を継続するインセンティブを持たないことになります。 その研究の先には現在の理論が否定され、ビジネスを継続することができなくなるという恐れを持っているといい換えることができそうです。

そういう意味では社会構成主義の観点には意味があると思います。 しかしこの観点だけでは分析はできそうですが、論文で行なわれているように他の分野の知識を導入することで実際の問題解決を行なう必要がありそうです。 この他分野の知識を導入するところで恣意的な選択が働く可能性があり、客観的に状況を捉える能力を前提として持つ必要がありそうです。

分析者が、自分は研究者でステークスホルダーではない、という主張をしてみたところで、それを証明することは難しそうなところに社会構成主義の落とし穴がありそうな気がします。

ソフトウェア技術の社会構成主義は応用が効きそう

ソフトウェア技術はその出自を考えると、自然法則の利用というよりは、社会や企業の論理が色濃く反映されているといえるのではないでしょうか。 問題を解決するために作成されるソフトウェアも、様々な制約の元に作成され、プログラミング言語やライブラリ・フレームワークの選定には設計側の意向が反映されるのではないでしょうか。

まだ社会構成主義をフレームワークとして知ったところで、その分析のためにどんなツールを持っているか理解しているわけではありません。 これからのリサーチ次第ですが、特にSOAを語る時に組織に分散している分断されたソリューションをまとめる意義や、そもそもソリューションが分断していること自体が間違っていると認識させるために(これは私の主観ですが…)説得力のある論旨を作成できる可能性には少し期待を持っています。

ステークスホルダー自身がフレームワークを適用することで、客観的な観点を手に入れることができれば良いんですけどね。 いまのところはあくまでも客観的な第三者の視点が必要そうで、その点に注目してもう少し勉強してみようと思います。

この記事で取り上げた品々

2010/04/09

PS3のlinuxをどうすればいいのか…

PS3のシステムソフトウェア 3.21アップデートの お知らせが出され、実際のアップデートがリリースされ、いろいろと困ってしまいました。

今回のアップデートはPS3のハイパーバイザーの制限を回避してハードウェアにアクセスすることができる可能性がでてきたため、その土台となるLinuxを起動することをできなくするというのが主な修正内容になっていると理解しています。

とりあえず感想

まぁソニーとしてはIPを保護しなくてはいけませんし、ソニー以外にも迷惑をかけてしまうわけですから、今回の対応は理解できます。 従うしかないとはいえ、PS3でLinuxをたまに動かすために、PS3の使い道が制限されてしまうのが悲しいところです。

でも理解はしても、IBMのPower系ハードウェアでハイパーバイザを迂回できるという話しを聞いたことがないし、いずれにしてもハイパーバイザの問題はソニーの実装上の瑕疵のような気もするわけです。

そう考えると一方的にユーザーに不利益だけをもたらすような修正を行なって、Linuxを使うようなのはマイノリティだから切り捨てるという姿勢にもみえる今回の対応には憤りを感じています。

とはいえ、アップデートを適用した後で元に戻したいというニーズに対応するのは難しいでしょうし、ソニーにできる事はあまりないんですよね。 けれど現在linuxを使っているユーザーに向けたガイドを整備するといった努力は一切みえません。 アップデートを適用しなければ将来リビングに置かれたPS3はBlu-rayを再生できなくなるかもしれない、という潜在的な恐怖を利用者側に残したまま放置するのはエンターテインメント企業としては問題があるでしょう。

まぁlinuxを使うぐらいなら放置しても自力で対応できるっていうのは分かるんですけどね。 しかし興味本位でlinuxを入れてしまったフリークな方々はとても大事な潜在顧客なわけで、気を使うふりを見せるぐらいのフォローは必要だと思います。

気になっていること

家のリビングに普通にBlu-rayディスクの再生機として使っていますが、時々ゲームやlinuxを動かすことがあります。 また時々ですが、数少ないSuperAudioCDの再生環境としても使っています。

いま3.21を適用しないために遭遇している不具合
  • PlayStation Networkにログインができないため、
    • Storeでのお買い物ができない、評価版、ムービのダウンロードができない
    • オンラインモードでゲームができない

まぁここら辺はしょうがいないですね。 ゲームをオンラインで購入できないのは余計なお金を使わずに済んでいるといえるかもしれません。

3.21の適用に躊躇している理由
  • linuxが起動できなくなる
  • 頻繁に使っていないからlinuxを捨てても良いのかもしれないけれど、元に戻れないし、CELLのプログラミング環境を後から調達するのは難しそう
  • linuxを捨てた後で、フォーマット以外に割り当てたHDDの区画をPS3側に取り戻す事ができなさそう
  • 新しいPS3を買う余裕はない
  • 新しいPS3を買うなら、現状のまま放置しなきゃいけない。データの移行はどうすればいいんだろう…。
将来に向けての不安

いつかはシステムソフトウェアをアップデートするしかないでしょうね。

  • Folding@homeに参加できなくなる、かもしれない
  • 新しく発表されるゲームソフトが遊べない、かもしれない
  • Blu-rayディスクを再生するために必要な復号キーの更新ができない

ちなみに現時点でのFolding@homeの統計は次のようになっています。

Last updated at Wed, 07 Apr 2010 05:01:28

OS Type  	Native TFLOPS*	x86 TFLOPS*  	Active CPUs 	Total CPUs
PLAYSTATION®3 	991  	2091 	35142	951823

いまのところゲームソフトで遊ぶために、どのレベル以上のシステムソフトウェアが必要かはパッケージをみても明記されていません。 将来的に、もし動かないという事になればアップデートがゲームディスクに含まれるかもしれませんが、購入前に分からないと意味がないでしょう。

また購入したBlu-ray Diskを再生してみるまで、システムソフトウェアのバージョンアップが必要かどうかわかりません。 これは本当に再生してみるまで分からないという事になるのでしょう。

おそらく何等かの不具合を体験するのは、1,2年は後のことなんじゃないかという印象を持っています。 それに今回の対応をみていると、再生できないBlu-rayタイトルのリスト提供(網羅できないだろうけれど)といったフォローもないんだろうなぁと感じています。

まとめらしきもの

一方的でフォローの少ないソニーの今回の対応はPS3でLinuxを動かす人を脅威とみなしているというメッセージにもみえます。 あるいは、ソニーは被害者だという意識を(無意識に)持っているために、フォローにまで目が向かないのかもしれません。

PS3の役割が変化したというのが大きな理由なのでしょうけれど、いろいろと残念な結果になってしまいました。

今回のアップデートはソニーからの「ゲーム、BD再生は新型PS3で」というメッセージなのかもしれません。

いっそ旧世代のPS3を持っているユーザにクーポンを発行して、ゲーム機、BD再生機としての役割は新型の薄型PS3に移行させてくれないかなぁ。

2010/04/08

デザイン思考という言葉

はじめに

しばらく前にいわきに日帰りで遊びにいった時に、駅前のビルに入っている市立図書館に入りました。 そこで中を歩いていたところ、たまたまデザイン論の本棚が目につきました。

その本棚にあった一冊が「 デザイン言語2.0」で、慶應義塾大学出版会が出している本ですが、時間があったので2時間ほどで全体に目を通してみました。 おそらく、この分野を知らない私のような人間にとって、価値があるのは前書きにあった奥出直人先生と脇田玲先生の文章と、自分の知っている領域の方が書かれた本文の論文一本だけかなと感じました。

読み終った後で心に残っていたのは次のような言葉でした。

序:デザイン思考とデザイン戦略 P.10

彼らの考えに従えば、「デザイン思考」とは、
1)観察対象に感情移入をして経験を拡大し、
2)一気に物事の本質を見抜き、
3)それを物語として語り、
4)プロトタイプを構築して検証し、
5)実際に人びとに使ってもらい、その有効性を検証する、
というプロセスそのものである。

序:「デザイン言語」のアップグレード P.24

知識は、理解の一部にすぎない。
本物の理解は、実際の経験によって得られる。
セイモア・パパート

どちらも両氏が作った言葉ではなく、本文を補強するために引用されている文章ですが、ソフトウェアに関わる人間には大切な言葉のように思えました。

ほかに興味深い論文もありましたが、とにかくこれが「デザイン思考」という言葉との最初の出会いでした。

国立新美術館にて

先日、以前働いていた会社の方からお花見に誘われて、のこのこと東京見物にいってきました。 到着した日はチェックインまで時間があったので、乃木坂にある国立新美術館に行きました。

以前、横浜で暮していたときには、あまり外に出る機会を作りませんでした。 その反動か田舎に引っ込んでからは東京に行く度に、いろいろ見て周るようになりました。

その国立新美術館の上にはライブラリが併設されていて、大抵は画集などの美術書を閲覧する人が利用するような雰囲気の良い場所です。 しかし、たまたまその奥に工業デザインの歴史や、デザイン論についての本が並んでいて気になる本をいくつか読んできました。

そこでみつけたのが、「 デザイン思考の道具箱 奥出直人著」と「 共生のための技術哲学 村田純一編」の2冊でした。 他にも気になる本は沢山あって、数は少なくてもポイントを抑えているすばらしいライブラリーだと思います。

閑話休題:図書館の役割

大学に行けば別ですが、地元の図書館だと、新書やハウツーといった実用的な本、その時々で必要とされる本、が中心に並んでいます。

限られた予算とニーズを考えればしょうがないと思いますが、デザイン論のような本はほんどなく、デザインの本棚には画集などが並んでいます。 画集も大切な資料ですが、全体的に資料的な図書の少ないところが残念です。

おそらく地元の図書館は、短期的な利益を求められる企業経営のようなものなのだと思います。 その弊害が長期的にみて所蔵価値の低い図書の収集という結果につながっているのでしょう。

とはいえ歴史関連の図書収集には力を入れているので、司書さんも割り切っているんだと思います。

「デザイン思考の道具箱」を読み始めて

さて、この本に限りませんが、とても良い観点から構成されているのに、その全体からなんとなく違和感を感じるときがあります。

うまく言葉にできないのですが、それは私がコンピュータと利用者のインタラクションではなく、プログラマーとコンピュータのインタラクションに、より注力しているせいなのではないかと思いました。

この「プログラマー」は"プログラムする人"という意味なのですが、私の頭の中では「利用者」とほぼ同等の位置付けです。

一般的にコンピュータの「利用者」と書かれた時のニュアンスは「消費者」に近いことが、この違和感の一因なんだろうと考えています。

本を読みながら、iPadにまつわる報道に触れるとコンピュータの利用者はますます消費者の側に近づいているなぁと感じます。 また同時に、日々の生活を楽にするような用途のためにコンピュータを使っていくことはできないだろうかという方向に考えを深めてしまいます。

おそらく私がしなければいけない事は、批判ではなくて利用者がコンピュータを少しは自分の側に引き寄せて、便利な道具として使えるようにするためのソフトウェアをプロトタイピングすることなのでしょう。

大人であれば知らないことが罪になる場合もあるでしょう。 それど同様にエンジニアであれば、批判に終始しソリューションの模索を怠ることは罪でしょうから。

そうはいっても革命的なものが必要ではないんですよね。 道具はもう手に入っているのだろうと思います。 普通のおじさまが認識できるデータ構造とフィルター的な可視化とデータ処理ができる環境を与えて、バリコンを回してインピーダンスを合わせる程度の作業で操作できれば。

結局はデザインの問題なんだろうと思います。

この記事で取り上げた品々