2011/03/15

もうちょっと南の値

茨城よりもかなり南だが、川崎市役所付近(大島局観測)のデータがあった。
http://www.atom.pref.kanagawa.jp/cgi-bin2/telemeter_dat.cgi?Area=5&Type=W

なかなかアクセスできないので画像を引用する。
このグラフによると3月15日5時40分前後と
10時40分前後に何かが発生しているようだ。
グラフの上限値を越えているが、少なくとも150nGy/h以上の
線量が観測されている。

東京都日野市で個人測定されている方
http://park18.wakwak.com/~weather/
のデータだと同日12時20分頃に通常の4倍程度の線量を観測されている。
また、5時20分前後に線量が多少増加している。

関東の広い範囲にわたって到達しているのだろう。

風まかせなのでどの地点にいつ頃届くのかを予測するのは
困難だろうが、多少なりとも届くことがあるということは分かった。

茨城県のモニタリングポスト

東電がモニタリングポストの値をなぜか更新しないので、
茨城県のモニタリングポストの値を見てみる。

データが消えてしまうかもしれないのでコピーしておく。
今日になってから放射線量がどんどん増えている。
おいおい。

----------------------------------
日時 北茨城市 高萩市 大子町
13日 9:30 50 — —
〜 〜 — —
14日20:30 51 — —
20:40 50 — —
20:50 50 — —
21:00 49 — —
21:10 50 — —
21:20 49 — —
21:30 49 — —
21:40 49 — —
21:50 49 — —
22:00 50 40 —
22:10 50 41 —
22:20 50 40 —
22:30 50 41 —
22:40 50 40 —
22:50 50 39 —
23:00 50 40 —
23:10 50 39 —
23:20 50 40 —
23:30 50 39 —
23:40 50 40 —
23:50 50 39 66
15日0:00 49 39 66
0:10 52 36 65
0:20 144 40 66
0:30 278 40 65
0:40 375 39 66
0:50 313 40 65
1:00 216 40 65
1:10 169 40 66
1:20 170 40 65
1:30 173 42 65
1:40 168 48 66
1:50 201 55 66
2:00 200 51 64
2:10 227 46 65
2:20 305 45 65
2:30 373 43 65
2:40 391 41 65
2:50 332 43 65
3:00 416 49 64
3:10 908 53 64
3:20 1190 60 65
3:30 1600 68 65
3:40 2910 87 64
3:50 4120 112 64
4:00 4870 204 64
----------------------------------

なお、3月13日、女川原発では福島第一原発の1号機の爆発で
21,000nGy/hを検出したらしい。

放射性物質が風にのって…

関東地域の人にとってはあんまりうれしくない事態のようだ。
気象庁の3月15日08時の風向・風速データによると、
風向きが福島付近から関東平野までおおよそ北東の風が
吹いている。

今、放射性物質が原発から漏れていたら
ゆらゆらと関東平野にまで到達するかもしれない。

朝日新聞社の2011年3月14日20時27分の記事
http://www.asahi.com/international/update/0314/TKY201103140372.html
によると14日に米軍が一時退避しているらしい。
航空機や救援活動をしていたヘリコプターの乗員から
低レベルの放射性物質が検出されたからだそう。

数字が出ているところは引用。
<引用>
# 空母ロナルド・レーガンは福島第一原発から
# 北東約185キロの洋上に展開していたが、
# 他の艦船群とともに原発の風下から逃れた。
# 米紙ニューヨーク・タイムズによると、
# 試料の採取は福島第一原発から約100キロ
# 離れたところで行われており、放射能汚染が風で
# かなり広がっている可能性を示唆している。
</引用>

185km離れてても米軍が風下から移動していたところを
考えると、福島から200km程度の距離の関東平野だと
風次第では到達しかねないな。

モニタリングポスト

福島第一原子力発電所付近のモニタリングポストの値
http://www.tepco.co.jp/fukushima1-np/monitoring/monita2.html
が地震の後から更新されてない。

いま表示されている範囲は
3/9 14:40 〜 3/11 14:40
である。

福島第二原子力発電所付近のモニタリングポストの値
http://www.tepco.co.jp/fukushima2-np/monitoring/monita2.html
は多少更新されているが頻度が低い。

いま表示されている範囲は
3/11 7:50 〜 3/13 7:50
である。グラフから読むと3/12 9:00前後に
通常の値の2倍程度の値が検出されている。
通常が〜40nGy/hなのがそのときだけ〜80nGy/hになっている。

何があったのだろうか。

いずれにせよ、こういうときにデータが更新されてこそ
モニタリングポストとしての意味があるのではないだろうか。

2011/02/07

英単語の上にルビで日本語訳を表示するサービス

「ずるっこ」(http://zurukko.jp)というサービスおもしろい。
見たいページのURLの後ろにzurukko.jpって追加するだけ。
いちいち辞書を引かなくていい!

2010/11/14

万有引力定数

万有引力定数Gの値は現在のところ3桁の精度しかないようだ。
MKS単位系で、

6.67428 (0.00067) x10^-11 : Wikipedia(JP)
6.674215(0.00009) x10^-11 : J. H. Gundlach and S. M. Merkowitz
6.67234 (0.00014) x10^-11 : H. V. Parks and J. E. Faller
6.67349 (0.00017) x10^-11 : J. Luo et al.

括弧内は1σ。

4桁目で異なるのがなんとも。
各々測定方法が違っているので誤差があるのだろうが、
Gを元に計算する必要のある値は3桁目+α程度の
精度でしか信用できないということになりそうだ。

2010/10/24

csrss.exe + XS35GT に不可解が現象が発生

XS35GTにインストールしたWindows7で動作しているプロセスの一つである
「csrss.exe」 の"I/O write bytes"がどんどん増加するという
現象が起きていることに、数日前気が付いた。

マウスかキーボードを操作すると、
I/O write bytes deltaが50GBとか意味のわからん値を叩きだしていた。
実際に何かを書き込んでいるわけではなさそう。
そもそもこんな速度で書き込めるわけがない。

調べて見ると同じではないが類似の症状の人が海外にいた。
http://blog.tatham.oddie.com.au/2007/07/28/strange-server-behavior-huge-io-other-count-for-csrssexe/
まさしく「the values skyrocketed.」と表現されている通りの現象が起きている。
この人は"I/O Other Bytes" に起きており、
マウスやキーボードの操作で発生しているわけでもなさそうだが、
現象だけは似ている。


ウィルスかスパイウェアかとも考えたがウィルススキャンにも
引っかからない。セーフモードで起動するとこの問題がなくなる。

結局、2日間調べた挙句、原因が突き止められないので
再インストールしながら調べることにした。やれやれだ orz

Windows7 をインストールした直後にはこの問題は発生しない。
マザーボード付属のドライバをインストールすると発生することが判明。
一つずつアンインストールと再起動を繰り返して調べたところ、
「Driver 1.2」が原因であることが判明。
「Install Control AP」のインストール中に一緒に
インストールされるドライバのようで、
とりあえずなくても動きそうなのでアンインストールすることにする。

というわけで、XS35GTにWindows7 Professionalをインストール
するときの手順は次のようになる。

-----
1. Win7をふつーにインストール。
既にWin7がインストール済みだとパーティションが2つ見えるが
2つとも削除してからインストールする。

2. XS35GTについてきてたドライバをインストール
Install Control APのところで
- Cisco EAP-FAST Module
- Cisco LEAP Module
- Cisco PEAP Module
- ControlAP 1.2
- Driver 1.2
の5つがインストールされる。

3. 再起動する。再起動後、I/O write bytesの値
(タスクマネージャだとI/O書き込みバイト数の値)が
どんどん増えていく。

4. Driver1.2をアンインストールして再起動。
たぶんControl APが正常に使えなくなるだけで
それ以外は問題はないと思われる(ほんとかな?)。
I/O write bytesの値が0であることが確認できる。

5. ついでにNTI Backup Now EZをアンインストール。
30日間しか使えないので。
一応、再起動しておく。

6. NVIDIAのドライバをインストールし、再起動
-----
これでOK。I/O write bytesは0のまま。

さて、ここから以前の状態に復旧するのが大変だ。
先が長い…

2010/10/10

細菌が協力して抗生物質に対抗

「Bacterial charity work leads to population-wide resistance」
doi:10.1038/nature09354
によると、抗生物質への耐性が高い菌が耐性の低い菌の
生存を助けているらしい。
また、抗生物質にさらされている中では
高耐性の菌だけで構成されたグループよりも
それらとそうでない菌を混ぜたグループのほうが
増殖率が高いということだ。

低耐性の菌が死滅して高耐性の菌が残りそれらが
増殖して耐性菌だらけになると思っていたが、
どうやらそう単純ではないらしい。

ちなみに、実験で使われた抗生物質は
norfloxacin(ノルフロキサシン)とgentamicin(ゲンタマイシン)で
細菌には大腸菌(Esherichia coli)が使われているとのこと。

2010/10/09

CPU の温度

XS35GTのCPUの温度を「Core Temp」で調べてみた。
他の測定ソフトもたくさんあるのだが、Windows7で
動作するものが意外と少ない。

その温度だが、負荷なしで
室温 25℃
CPU 63℃
SSD 41℃
となった。ファンレスだとどうしても
温度が高くなるようだ。

2010/09/30

IMAX 3D

バイオハザード4を観てきました。
内容は、ゾンビが出てくるマトリックス風味の
アクション映画となっておりました。
もう、ホラーじゃないよ、これは。

それよりもIMAX 3D全然だめ。
シャッター方式でなく偏光方式の3Dのためなのか
3D眼鏡を付けても画面は明るい。
あと、眼鏡の上に3D眼鏡をかけてもずり落ちにくい。

しかーし、黒地に白の字幕が3重に見える。その理由は
左目に右目用の光の一部が漏れ、右目に左目用の光の一部が漏れているから。
そんなわけで常に字幕の左右にゴーストのように文字が分裂します。
背景が明るいときは気になりませんが、
コンテンツがねぇ、暗めですし。

さらにわずかにでも首を傾けると光の漏れが大きくなって
まるっきり3Dにならなくなる。これは、疲れる。

画面全体が横に流れるようなシーンでは全くフレームレートが
足りてません。カクカクしてます。

音に関しては低音が強く、身体にとても響きます。
音量が大きすぎて耳が痛くなるくらい。
もしかすると耳栓持ってったほうがいいかもしれません。
難聴になるよ、こんなのずっと聴いてると。

というわけで、たっかい金額払って
わざわざIMAXで3D映画を見るようなことは
全くもってお勧めできません。
上映される映画の内容によらず、ですよ。

それはともかく、バイオハザード4の3D自体の
できもお粗末でした。
無駄に3Dにしたくてしたくてたまりませんっといった感じ。
風景が写ってるシーンなんて、手前の山が
すごく立体的なのに、奥の山などはただの平面の壁に
絵が描いてあるように見えてしまう。

飛行機がおもちゃに見えるとか、
妙に近いところに見えるようにしてみるとか、
意味がわかりません。

ところどころまともなシーンもあったので、
きちんと作りこめてないってことでしょう。
3Dなんかで観ずに、DVDでも借りて2Dで観るほうが
楽しめるんじゃないでしょうか。
コストも安上がりですしね。

結局のところ、「アバター」のときとは
何もかもが大違いでした。

2010/09/25

FF XIV BENCHMARK

無謀にもFF XIVのオフィシャルベンチマークを実行してみた。

ミコッテ&解像度1280x720で実行した。
結果、
Score : 161
Load Time : 45132ms
となった。

いやぁ、無理でしょう、無理無理。
大体、実行中に画面が秒間数枚しか書き換わらないし。

HDBENCHの結果

XS35GTをHDBENCH 3.3.0.4 で測定してみた

CPU Int181369
CPU Float127253
MemoryR99646
MemoryW94639
MemoryRW174418
DirectDraw37
Rectangle1137
Text719
Ellipse567
BitBlt35

Rectangle, Text, Ellipse, BitBltが
非常に低い。なんだこれ?
最近のGPUの2D描画性能が低いというのは
こういうことなのか。

2010/09/24

XS35GT の消費電力

ワットチェッカーで測定してみた。
とても低い。

起動中 : 21W
ログイン画面 : 17W (29VA, PF=0.55〜0.59)
USB接続のDVDドライブ使用中 : 21W 最大26W
ログイン後の通常状態 : 18W
スリープ : 1W未満(表示は0W)

ちなみにACアダプタの温度は非接触温度計の表示が
正しいなら、熱い部分は通常状態で43〜45℃、
消費電力が増えると48℃くらいまで上昇。

2010/09/22

gccでライブラリ

gccで使えるライブラリ(.a)の作成方法のメモ。
以下、cygwinで試した結果。

-- a1.c --
int AAA=123;
----------
コンパイルする。
$ gcc -c a1.c

できあがった内容を見る。
$ nm -g a1.o
00000000 D _AAA

ライブラリをarで作る。
$ ar -r a.a a1.o
ar: creating a.a

できた内容をチェック。
$ nm -sg a.a
Archive index:
_AAA in a1.o

a1.o:
00000000 D _AAA

インデックスを作ったほうがリンクが速くなるらしい。
既にインデックスができてそうだが、調べた範囲では
ar -r に続いて ar -s を実行するのが通常のようだ。

そこで一応、実行して見る。インデックスを作るには、
ranlib か ar -s を実行する。この2つのコマンドは
等価とのこと。
http://www.linux.or.jp/JM/html/GNU_binutils/man1/ar.1.html

実行してみる。
$ ar -s a.a
$ nm -sg a.a
Archive index:
_AAA in a1.o

a1.o:
00000000 D _AAA

変化なし。必要なのだろうか?

最後に、できあがったa.aをリンクする。
-- main.c --
#include <stdio.h>
int main(void)
{
printf("%d\n",AAA);
}
というファイルを作って、コンパイル&リンク&実行すると、
$ gcc main.c a.a
$ ./a.exe
123

となる。

2010/09/20

ファンレス&スピンレスPC

XS35GTを入手してきました。
http://www.shuttle-japan.jp/barebone/XS35GT/

ベアボーンなので、メモリとHDDをそろえるだけ。
メモリはバルク品のSO-DIMM DDR2-800 2GB。5000円弱。
HDDは使わずSSDを使用。偶然見つけたTrim対応の
東芝製SSD THNS128GG4BBAA を3万円弱で入手。

この2つを組み込んで、ファンレス&スピンレスなPCが出来上がりました。
ACアダプタがちっこくて、だいたい 85mm×35mm×27mm の大きさです。
緑色のパイロットランプ(?)が付いてます。
体温よりは熱くなりますが、手で握ってみると
冬場ならいい感じのあったかさになってます。
温度計がないので何度なのかは不明です。


ファンレスなのでOSインストール中に固まるかもしれないと
予想してましたが、そんなことは全然なくスムーズに
Windows7 Proをインストールできました。
インストール直後の時点でディスクが10GBほど消費されてました。
OSだけで10GB程度というのは予想外に小さいですね。


とりあえずインストール直後のWindowsエクスペリエンスインデックスは

プロセッサ : 3.3
メモリ : 4.7
グラフィックス : 1.0
ゲーム用グラフィックス : 1.0
プライマリハードディスク : 7.1

ベアボーンにくっついてきたドライバをインストールすると

プロセッサ : 3.3
メモリ : 4.7
グラフィックス : 3.3
ゲーム用グラフィックス : 4.6
プライマリハードディスク : 7.1

となり、ウィンドウが半透明で表示されるようになりました。

一時、エクスプローラでファイルなどのD&Dができなくなりましたが、
原因不明のままなぜか直りました。唯一不思議な現象でした。

このベアボーンは、見た目が網網なのでちょっと気色悪いです。
見えないところに押し込めば大丈夫でしょうが、
通気は確保しなければなりません。

ディスクアクセスランプの色は青で、
電源ランプは白色です。正面からみると眩しいです。

LANが100BASE-Tなので、ファイルサーバのようなことには
不向きです。

DVDドライブは付属ではないので、持ってないなら購入しないと
OSのインストールが苦しいです。
今回は外付けのUSB接続のDVDドライブを使いました。

SSDの温度は39℃。
そんなもんかな? ファンなしだし。

2010/07/10

Axonal hotspot

脳みそにあるニューロンの話。
ニューロンのシグナルは軸索起始部(Axon Initial Segment, AIS)で
発生するが、そのAISの領域が移動したり広がったりするらしい。
http://www.nature.com/nature/journal/v465/n7301/full/4651022a.html
(Nature Vol.465, pp.1022-1023, doi:10.1038/4651022a)

ニューロンの中心からAISが遠くなると入力に対する
出力が出にくくなり、AISの領域が広がると入力に対する
出力が出やすくなるそうだ。

あるニューロンにどの軸索が接続しているか、と
それらの軸索がニューロンのどの場所につながっているか
で入力シグナルに対する出力シグナルがおおよそ
決まるのだと思っていたが、他の要因もあるとは。
まだまだ分からないことだらけだ。

2010/07/05

脳波でコミュニケーション?

プレスリリース
http://www.aist.go.jp/aist_j/press_release/pr2010/pr20100329/pr20100329.html
によると、脳波で話せる機械ができたらしい。
言葉ほど速くコミュニケーションできるわけではないし、
伝えられる種類も512種類なので言葉にしゃべらなくても
いいようになるわけでもないので、話せる人には
意味はないかもしれんが、パーキンソン病みたいに
筋肉が動かせない人には朗報かもしれん。

黙読したら別の人にその内容が伝わるくらいになったら
すごいかもしれんが、まだまだ先のことだろう。

2010/05/30

cmake その1

いろんな環境でビルドできるようにするツール、"cmake" を使ってみる。
UNIXのMakefileやVisualStudioのプロジェクトファイルなどを
作成してくれるツールである。メタメイクともいえるかもしれない。
LinuxとWindowsの両方でのビルドやVisualStudioの色々なバージョンに
同時に対応するなどを行いたいときに便利だろう。
ここではWindows環境であると想定して説明する。

まずはここからダウンロード。
http://www.cmake.org/

cygwinを使うならパッケージに含まれているので
そちらからダウンロードする。

ベースになるディレクトリをbasedirとする。
ここに test.cpp を作成する。内容は、

#include <iostream>
int main(int argc, char *argv[])
{
std::cout << "test" << std::endl;
return 0;
}
とする。同じディレクトリに CMakeLists.txt を作成する。
ファイル名はこれでなければならない。内容は、

cmake_minimum_required (VERSION 2.6)
project (Test)
add_executable(Test test.cpp)

とする。1行目はなくてもよい。
2行目はプロジェクト名に Test という名前を指定してる。
Test というプロジェクトに test.cpp というファイルを
追加するのが3行目である。

これで最小限の準備が完了した。

これらをビルドするために、Visual Studio 2010 を使うとする。
ディレクトリ basedir/vc10 を作成し、
そこにカレントディレクトリを移す。
その後、cmakeでプロジェクトファイルを生成する。

> cd vc10
> cmake -G "Visual Studio 10" ..

version 2.8.1の場合、次のファイルがカレントディレクトリに
生成される。

> dir
CMakeFiles (ディレクトリ)
ALL_BUILD.vcxproj
ALL_BUILD.vcxproj.filters
CMakeCache.txt
cmake_install.cmake
Test.sln
Test.vcproj
Test.vcproj.filters
ZERO_CHECK.vcxproj
ZERO_CHECK.vcxproj.filters

CMakeFilesの下にも多くのファイルが生成される。

Test.sln を VS2010で開いて、ビルドする。
ビルドターゲットはデフォルトで次の4つが作成される。

Debug
MinSizeRel
Release
RelWithDebInfo

ターゲットをDebugにして ALL_BUILD プロジェクトをビルドすると、

Debug/Test.exe

が生成される。これを実行すると、
test

が表示される。


同様にVisual Studio 2008用のプロジェクトファイルも簡単に
作成できる。さっきと同じようにvc9ディレクトリを作成して、
cmakeを実行する。なお、cmake実行前にVS2010は終了しておく。

> cd ..
> mkdir vc9
> cd vc9
> cmake -G "Visual Studio 9 2008" ..

VS2008で同じようにTest.slnを開いてビルドして実行すると、

> Debug\Test.exe
test

となる。

今回はここまで。

2010/04/04

シャワーヘッドに細菌が

昨年のnatureの記事
http://www.nature.com/nature/journal/v461/n7262/full/461360a.html
によると、シャワーヘッドに細菌がいることがあるらしい。
塩素殺菌されてるだろうと思いきや、塩素耐性菌が生き残るとのこと。
弱っている人は日和見感染してしまうので、気を付けよう。

2010/03/07

変な形のゆでたまご

ゆでたまごがクレーターのようになってしまった。

☆作り方☆
湯にいれるときに殻にうまい具合にひびを入れる。
白身がすこし出てくる程度にする。
白身がまとわりついて卵が浮くが、そのまま茹でる。
茹で上がったら殻をむくだけ。
(湯が卵に入り込むのでちょっと水っぽくなる)

ちなみに左は普通のゆでたまご。

2010/01/27

アバター

話題の「アバター」観てきた。
(1)3D
3Dの眼鏡がずり落ちる。眼鏡の上にかけてるからだろうけど。
もう少し、考慮してもらえるとありがたい。

普通の眼鏡でいうレンズの部分を眼鏡拭きで拭いても
油がとれない。どうなってんだか。

映像のフレームレートが低い。動きの激しいシーンでは
3Dに見えない。なにか映像がちらちらしているようになる。
今の4倍くらいはフレームレートが欲しい所。

スクリーンは大きいはずなのに、原寸大のような感じがした。
人間はそれっぽい大きさに、アバターもそれっぽい大きさに。
不思議だ。

字幕を読むのは大変。特に原住民の字幕は右端にでるので、
読みにくい。そのうえ眼鏡のせいか像が2重に見える。
字幕が映像のど真ん中に表示されてたことがあったが、
これは読みやすかった。

(2)内容?
2足歩行メカのデザインがMATRIXに出てきたやつに似てた。
だれがデザインしてもあんな感じになるのかなぁ。

髪の毛の束なのか触覚なのか触手なのかよくわからんが、
それをつなげることで原住生物間でコミュニケーションが
とれるようだ。言葉よりもっと直感的な。
攻殻機動隊の首にケーブルをさしてデータのやり取りを
するのとおんなじだね。機械的でなくて生物的だけど。

自分自身をアバターに移動させることもできるようだ。
木を介して。
肉体という入れ物があったら移れるとは…戻れそうには
なかったけど。

原住民の死んだら先祖の元に戻るって思想は
なんだか「プロバビリティー・ムーン」で出てくる
世界(ワールド)人のようだ。

透明のディスプレーいいな。かっこいいな。欲しいな。
たしかCESかどこかで展示されていたはず。
数年後にでも市場に出てきたらうれしいな。

あ、ストーリーはありきたりだよ。上で挙げた要素も
突飛すぎるアイデアでもないし。ゆえに安心してみてられる。
ゲームをこんな風に3Dでできるときっと面白いと思う。

ちなみに、スタッフロールのなかに日本人の名前を2人、日系人の名前を1人
見つけた。もっといるだろうけど、数が多すぎてギブアップ!

なにはともあれ、見る価値はあるよ、面白い。

2009/10/27

Haskell その2

今度はリストを逆順にする関数を作る。

module Main where
import Text.Printf

main = do print (reverse([1,2,3,4,5]))
print (reverse1([1,2,3,4,5]))
print (reverse2([1,2,3,4,5]))
print (reverse3([1,2,3,4,5]))
print (reverse4([1,2,3,4,5]))

reverse1 x | length x == 1 =x
| length x > 1 =reverse1(tail x) ++ head x:[]
reverse2 (x:xs) | length xs == 1 =xs++x:[]
| length xs > 1 =reverse2(xs)++x:[]
reverse3 x=foldl (flip (:)) [] x
reverse4 =foldl (flip (:)) []
最初のreverseは最初から定義されている関数で、その名の通りリストを逆順にする。
reverse1 x | length x == 1 =x
| length x > 1 =reverse1(tail x) ++ head x:[]
これは引数xの長さが1ならxをそのまま返し、xが1より大きければxの先頭の要素を除いたリストを逆順にしたリストにxの先頭の要素を連結した結果を返す関数である。
++はリストの連結を行う演算子で:はリストの先頭に要素を追加する演算子である。
[]は空リストである。
reverse2 (x:xs) | length xs == 1 =xs++x:[]
| length xs > 1 =reverse2(xs)++x:[]
この関数は、リストを引数に取り、その先頭をxに、それ以外をxsとする。
xsの長さが1のとき、xsとxを連結したリストを返す。xsの長さが1より大きいとき、xsを逆順にしたリストにxを連結したリストを返す。
xsのsは英語の複数形で、こういう命名規則なのだそうだ(がどこで見たのかは忘れた…)。
別に従わないとコンパイルが通らないというわけではない。
reverse3 x=foldl (flip (:)) [] x
この関数も引数にリストを取り、それをxとする関数である。
これもリストxを反転した結果を返す関数であるが、少しややこしい。
foldlは引数を3つ取り、第3引数のリストの左側の要素から順に処理を行う関数である。
その処理をC言語風に書くと、第1引数を+、第2引数をa、第3引数のi番目の要素をx[i]、処理結果をrとして、
r = a
for(i=0; i<length x; ++i)
r = r + x[i]
return r
のようになる。

flipは2引数関数の引数を入れ替える関数である。f(x,y)ならf(y,x)になる。
:は右側(第2引数)にリスト、左側(第1引数)に追加する要素を書くが、そのままではfoldlが演算子:を呼び出すときに左右が逆になってしまう。そこで、flipを使って逆向きにする。

以上より、引数で与えられたリストの先頭の要素から順に新しいリストの左側に追加していくという処理になっており、リストの順序が逆向きになることがわかる。

reverse4 =foldl (flip (:)) []
この関数は、foldlの第3引数が指定されていない関数になっている。つまり、reverse4は引数を1つ取る関数である。
foldlの第1,第2引数が指定されている関数であるともいえる。

ああ、ややこしい。

2009/10/25

Haskell その1

erlangはネイティブのバイナリファイルが生成できなかったので、
今度はそれができるHaskellを試してみた。

C++系統の言語とは異なりすぎているので、
なかなか慣れるまでに時間がかかる。
とりあえず、絶対値を求める関数を作った。

module Main where
import Text.Printf

main = do printf "abs -10 is %d\n" (10::Int)
printf "abs -10 is %d\n" ((abst (-10)) ::Int)
printf "abs -20 is %d\n" (absi (-20))

abst x = if x < 0 then -x else x

absi :: Int -> Int
absi x = if x < 0 then -x else x

順に説明する。調べ始めたばかりなので、
間違いが混じっているかもしれない。

 module Main where
はプログラムのエントリポイントを指定している。
C++で言うところのmain関数の名前を指定している。
 import Text.Printf
printfを使うために必要
 main = do
これ以降にメイン関数の定義を書く。
printfは書式付の関数。10::IntはInt型の数字として10を使用することを明示している。明示しないとコンパイルエラーになる。
先に、abstとabsiについて説明する。
abst x = if x < 0 then -x else x
これは、引数xを取る関数abstの定義であって、もしxが0より小さければ-xを、そうでなければxを返すことを表している。
absi :: Int -> Int
これはabsiの関数の宣言でInt型の引数を取り、戻り値の型もIntであることを宣言している。
absi x = if x < 0 then -x else x
はabsiの定義であり、内容はabstと同じ。
printfの説明に戻る。
printf "abs -10 is %d\n" ((abst (-10)) ::Int)
abstに-10を引数として渡して、得られる値を出力するということである。
-10を()で囲っているが、囲まないと-と10が分かれてしまってエラーとなる。
さらに::Intで戻り値の型を指定している。
abstは関数の定義だけを行って、型がどうなっているかの宣言を記載していないので、ここで明示しないと型が曖昧だと言われ、エラーとなる。
printf "abs -20 is %d\n" (absi (-20))
こちらは::Intが不要である。関数の宣言で戻り値がIntであることを明示しているためである。

その他、コードを書くときのルールであるが、インデントによってブロックの範囲が決められる。
タブの使用には注意が必要である。
うっかりスペース4個のタブを使うとコンパイルエラーになる。
スペース8個のタブなら問題ない。

2009/10/18

サイレンサー(ただし戦車砲の)

http://gigazine.net/index.php?/news/comments/20091018_tank_silencer/
(笑)
砲身の先にながーいのがくっつくのかと思いきや、
ぶっとい!
こんなの↓

    ■■■
    ■■■
    ■■■
■■■■■■■  □□□
■■■■■■■――□□□
■■■■■■■  □□□
    ■■■
    ■■■
    ■■■
□:戦車本体
―:砲身
■:サイレンサー

実験用らしい。当然だが。

2009/10/10

世界の大学ランキング

今年の世界の大学ランキングが出ていた。
http://www.topuniversities.com/university-rankings/world-university-rankings/2009/results

上位の大部分はアングロサクソン系。
日本の大学で100位以内を抜き出すと、
=====
東京大学 22位
京都大学 25位
大阪大学 43位
東京工業大学 55位
名古屋大学 92位
東北大学 97位
=====

時系列で、総合ランキングの順位の変化を見てみた。
下位の大学(といっても、世界で見てだが)が徐々に
順位を上げている。

分野別のデータもあったので、それらもグラフにしてみた。
まずは、自然科学。総合順位とあまり大差ない。


次に工学とITのランキング。工業大学というだけあって、
東京工業大学が順位を伸ばしている。

最後に、ライフサイエンス系。
上位3大学とそれ以外の差が大きい。
なぜだろう。資金力の差なのか!?

2009/09/23

温室効果ガス25%削減

日本は温室効果ガスを1990年を基準に25%削減するらしい。
いつも思うのだが、
(1)なぜ1990年を基準とするのか。
(2)25%削減するとどうなるのか。
の2つが報道されない。

(1)は1人あたりの排出量のほうが公平だし、
(2)は達成できても今より温暖化は進む。

もちろん、1人あたりで計算すると先進国が極めて
不利だからだろうし、達成基準なんて「えいやっ」
って決めてるだけだろう。
どうなるかの予測はしてるだろうが。

2009/02/14

テトぐるみ

消波ブロック(「テトラポッド」は商標)のぬいぐるみ。
猫の枕にいいらしい。
数十個あれば、部屋の中が海岸っぽくなるかも!?

テトぐるみの写真
http://blog.livedoor.jp/sohsai/archives/51464356.html

ここで買えるらしい。
http://www.syumatutanken.net/200810/cgi-bin/shop/main.cgi?class=all&word=%83e%83g%82%AE%82%E9%82%DD

2009/02/11

C++0xの右辺値参照

右辺値参照の詳しい説明がここに。
http://blogs.msdn.com/vcblog/archive/2009/02/03/rvalue-references-c-0x-features-in-vc10-part-2.aspx

そしてありがたいことに日本語訳がここに。
http://d.hatena.ne.jp/ntnek/20090210/p1

これでもわからなければ、記事を参照しながら
gccで色々試せばよさそうだ。

2008/12/01

円グラフの見せ方

http://www.voltagecreative.com/blog/2008/11/scary-bailout-money-info-graphic/

め、目立つ。
やってることは簡単。

1位の項目が50%を占めていて、2位以下が残りを分け合っているときには、
円グラフを二つ書いて、片方は全て同じ色に塗りつぶして1位のみに割り当てて、
もう片方は2位以下のものを記入する。
1位の円グラフの色は目立つ色がよさそうだ。

まぁ、1位が50%になるように調整するのが難しいだろうが。

2008/10/23

ARM

ARMプロセッサの概略記事があった。
http://techtarget.itmedia.co.jp/tt/news/0810/23/news03.html

かいつまんでみると、

- 命令セット(アーキテクチャ)の名前の数字とプロセッサの名前の数字が
リンクしていない。
- バージョンが上がるほどパイプラインの段数が増えている。
ARMv3のころは3段、ARMv7では13段。
- パイプラインの段数増加に伴い、分岐予測機能が追加されている。
- ARMv6以降にはSIMD命令がある。
- Javaのバイトコードをネイティブ実行できる。

といったところだ。

2008/10/19

quilt

パッチ管理用スクリプト quilt というのがある。
https://savannah.nongnu.org/projects/quilt

使い方については、このページのDownloadから一番新しい
バージョンを取得し、それを展開するとドキュメントがdoc/以下に
できるので、それを参照すればよい。


ところで、googleでquiltで調べたのではなかなか
このページには行き着けない。
本当のキルトのページに行き着いてしまう…

2008/09/30

「食指」と「触手」

http://www.asahi.com/international/update/0930/TKY200809290353_01.html
タイトルが「…に仏も触手。」なんだが、
触手?食指?後ろがないといまいち分かりづらい。

gooの辞書によれば、
# 食指が動く:興味・関心をもつ。してみたい気持ちが起こる。
# 触手を伸ばす:自分のものにしようとして近づく。
だそうで、意味が似ているし、どっちでもよさそう。

2008/09/24

ホウレンソウ

そうかぁ、「ホウレンソウ」の意味は
「優柔不断に決断を先伸ばすこと」なのか。
http://www.doblog.com/weblog/myblog/17090/2615719#2615719

笑える。
確かに、報告して、連絡して、相談、するだけだったら、
何も決まらんもんな。

2008/07/20

WinXP SP3

SP3を当ててみた。
関連付けをことごとく壊してくれた。

.aviや.mpegの関連付けmplayer2にしていたのに
Windows Media Player 9 に再度割り当てられた。

そのうえ、Explorerの関連付けの設定からでは
どうやっても変更できず、mplayer2の関連付けの
設定部分でしか関連付けの変更ができない。


いったいどういう神経してんだか…
しょうもないところでいらん変更するなっつーに。

2008/07/19

ナノテクと電波で癌治療

新しい癌の治療方法が研究されているようだ。
http://wiredvision.jp/news/200807/2008071821.html
http://peswiki.com/index.php/Directory:John_Kanzius_Produces_Hydrogen_from_Salt_Water_Using_Radio_Waves

これまでは、放射線治療や化学療法や外科的な
処置が行われていたが、この方法が治療として
認められれば、かなり画期的なのではないだろうか。

その方法とは、ナノ粒子を癌細胞まで血液に乗せて運び、
そこに電波を当てることで、電子レンジのように
癌細胞を加熱して死滅させる方法だ。

ナノ粒子を使わない方法であれば、日本でも研究はされているとのこと。
http://www.okayama-u.ac.jp/user/ra1/forefront_rfa.htm

この方法については既に米CBSテレビで取り上げられている。
http://www.cbsnews.com/sections/i_video/main500251.shtml?id=4011961n?source=mostpop_video

2008/06/15

XAML でのアニメーション

XAMLのアニメーションについて分かったことをまとめる。

(1)
アニメーションには TargetProperty の型ごとに種類がある。
 DoubleAnimation : 型がDouble用
 SingleAnimation : 型がSingle用
 Int32Animation : 型がInt32用
 Int16Animation : 型がInt16用
 ColorAnimation : 型がColor用

基本的な型に対してこれ以外にも同様に存在する。

これらは AnimationTimeline を継承しているので
以下、各型に対するアニメーションの総称として
AnimationTimeline を用いる。

(1)
AnimationTimeline を管理するオブジェクトは<BeginStoryboard>である。
これが DoubleAnimation 等で指定する TargetProperty とリンクする。

リンク前の値を AnimationTimeline は憶えていて、
AnimationTimeline が破棄されると TargetProperty は元の値に戻る。

(2)
AnimationTimeline の FillBehavior に "HoldEnd" が指定されていると、
アニメーションが終わっても TargetProperty の値は最後の値が保持される。

"Stop"が指定されていると、アニメーションが終わると
該当する AnimationTimeline が破棄され TargetProperty は元の値に戻る。

デフォルトは"HoldEnd"

(3)
同じプロパティに対してEventTrigger と DataTrigger の両方を
設定し、さらにどちらにも FillBehavior="HoldEnd" としておくと、
EventTrigger の AnimationTimeline が優先される。

一度 EventTrigger によるアニメーションが発生すると、
そのままでは DataTrigger の AnimationTimeline は実行されない。

EventTrigger同士であれば、AnimationTimeline は
新しいものに書き換えられる。

(4)
EventTrigger によるアニメーション実行後に同じ TargetProperty に対して
DataTrigger によるアニメーションを有効に機能させるには、EventTrigger による
アニメーションを StopStoryboard によって破棄する必要がある。


具体的には次のようにすれば EventTrigger と DataTrigger が共存できる。

<EventTrigger RoutedEvent="Mouse.MouseEnter">
<BeginStoryboard Name="Test1">
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="Opacity"
To="1.0" Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<DataTrigger Binding="{Binding XPath=@AAA}" Value="XXX">
<DataTrigger.EnterActions>
<StopStoryboard BeginStoryboardName="Test1"/>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="Opacity"
To="0.5" Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>

2008/06/07

ListBoxでのホイールイベント (XAML)

マウスホイールのイベントをListBoxで取得するには、
  MouseWheel
ではなく
  PreviewMouseWheel
を使う。

MouseWheelはボタンなど他のコントロールでは有効だが、
ListBoxに関してはなぜか反応しないためである。


具体的には、
<ListBox Width="100" Height="100"
PreviewMouseWheel="MouseWheelHandler">
<ListBoxItem Content="AAA" />
<ListBoxItem Content="BBB" />
</ListBox>

のようにする。MouseWheelHandlerはC#で次のようなものを書けばよい。
private void MouseWheelHandler(object sender,
MouseWheelEventArgs e)
{
if(e.Delta > 0)
{
//前方に回転
}
if(e.Delta < 0)
{
//後方に回転
}
}

2008/06/03

ガソリン価格

街中のガソリンスタンドの価格を見てると、
ガソリン価格がどんどん上がっている。
店頭で1Lあたり170円くらいかな?
このまま行くと200円を超えそうだ。

でも、もっともっと上がればいい。
そうすればCO2の排出量が減って長期的には環境にはよいだろう。
市場原理で環境負荷が下がるなんて、なんてうまいシステムなんだ。

さらに毎年ガソリン税を上げていったほうがいいのではないだろうか。
加速度的に環境負荷を下げれるかもしれない。

今のシステムorフレームワークで商売をしている人たちには痛い話かもしれんが、
新しく台頭してくる企業もあるだろう。

車の使用コストが上がると、車がないと生活できない田舎が問題になる。
これは解決が難しいかもしれない。

2008/05/25

プラスチック分解バクテリア

http://www.technobahn.com/cgi-bin/news/read2?f=200805242225&page=2

プラスチックを分解するバクテリアの分離ができたらしい。
こんなのが空中浮遊して大量拡散したらまるで、

「終末のプロメテウス」 ISBN-10: 4150112339

のような話になるなぁ。
この小説の内容は確か記憶では、

1. 原油流出事故が発生
2. 原油を分解するためのバクテリアを散布
3. 予想外に拡散して、車がガス欠し始める。
4. ガソリンスタンドなどからもガソリンなどが消える。
5. プラスチック製品が分解され始める。
6. ほとんどの工業製品が動かなくなる。
7. みんな原始的な生活に…

とかいう話だったはず。

2008/05/17

米国税関、PCのデータをまるまるコピー

http://www.technobahn.com/news/2008/200805161507.html
より。

米国入国時にPCを持っていると、HDDの内容を全てコピーされるようになるらしい。
もしHDDの容量が1GBくらいあったら、コピーされるまでずーっと待たされる
ことになるのだろうか。何時間もかかりそうなんだが…


そもそも、この大量のストレージを準備する予算っていくらくらいなんだろう?

というわけで調べてみた。

http://www.dhs.gov/ximgtn/statistics/publications/YrBk06NI.shtm
の"Nonimmigrant Admissions: Fiscal Years 1997 to 2006"によると

Year Total nonimmigrant admissions
1997 2億3590万人
1998 2億3570万人
1999 2億4070万人
2000 2億4750万人
2001 2億3140万人
2002 1億9320万人
2003 1億8050万人
2004 1億8020万人
2005 1億7530万人
2006 1億7510万人

なので、仮にこのうち1%がPCを持ち込むとしても、
2006年なら1,7510,0000×0.01=175,1000台

1台あたり100GB搭載しているとすると、
175,1000台×100GB=1,7510,0000GB=17,5100TB

保存期間を1ヶ月とすると、
17,5100TB/12=1,4592TB

http://gigazine.net/index.php?/news/comments/20080329_1tb_hdd/
によると、1TBのHDDが2万円を切ったとのことなので、
仮に1TBあたり1万円とすると、
1,4592万円=1.5億円。

意外と安い…
多めに考えて10倍くらい必要になっても15億円か。

2008/04/25

ハイスピードカメラ

別に宣伝するつもりはないが、
1200fps, 336×96pixel で動画の撮影ができるデジタルカメラ。
価格は10万円前後。
http://dc.casio.jp/product/exilim/ex_f1/hispeed_mov.html

なかなか面白い映像が撮れそうだ。

2008/04/19

C++考案者Stroustrup氏のインタビュー記事

「言語の進化について語る Bjarne Stroustrup 氏」
http://msdn2.microsoft.com/ja-jp/magazine/cc500572.aspx

この記事、投稿日時がどこにもないが、多分今年だろう。

<引用>
Q. C++0x の設計の進捗状況はいかがですか。
A. 現在の予定では、新しい完全な標準を6月の公式発表に向けて
決定することになっています。
12〜18か月後に新しい正式な標準が完成するでしょう。
</引用>

てことは、あと2ヵ月後くらいに公式発表されて、
来年の今頃から9月ごろにはC++0xがC++09として発表されるということだ。

対応したコンパイラがいつ出てくるのか分からんが、
当初は変な実装が溢れるのだろうなぁ…

農業ビル

http://labs.cybozu.co.jp/blog/akky/archives/2008/04/vertical-farm.html
経由で
http://www.treehugger.com/files/2008/04/vertical-diagonal-farm-in-new-york.php

いろんな農業ビルのアイデア。
重なった部分の太陽光をどうするのかわからんが、
緑化と食料生産が一緒にできるのはよさげだ。

でもビルに食料生産機能をいれるだけなら、
「もやしビル」でもよさそう。
元々工場で作ってるし。

http://www.moyashi.or.jp/mamechisiki/02/02.htm
http://www.asahibsn.co.jp/info/fac_utihara.html

2008/03/30

2.5inch HDD

空間効率を上げるために、GB単価を無視して
BAFFALOの2.5インチのディスク(HD-PS500U2-BK)
を購入。

入っていたHDDの型番は
「Hitachi HTS545050KTA300」

価格は37620円。
バルクの3/29時点のkakaku.comでの最安値は32,800円なので、まぁまぁの値段だろう。

購入時のFAT32フォーマットでのサイズは 499,983,122,432 バイト。
NTFSにすると500,022,378,496バイトになった。

2008/03/22

携帯電話の持ち手

携帯電話をどちらの手で使っているのだろうと
いろんな人を観察していたのだが、
どうやら右手で操作する人が多いようだ。

日本では右利きが多くを占めているので、
そこから類推するに

右利きの人→携帯の操作は右手
左利きの人→携帯の操作は左手

となりそうだ。


意外だ…


電話の延長で考えると、利き手はメモを取ったりするのに使うので
電話(受話器)は左手で持つと思われる。
だから携帯電話は左手で操作する人が多いと思っていたのだが、
多くの人はそういう考え方ではないらしい。


ということは、電話に出るときは左手で持って、
端末として使うときは右手で持つということか。
なんとまぁ忙(せわ)しない!

2008/03/15

液体アタック

どうやら液体アタックは生産を停止したようだ。
在庫限りの模様。
近くの店にはもうない…

似たのを探すため&花王のサイトに細かい表示がないので、
とりあえず現物の容器等に記載の成分等をメモしておく。

-----[液体アタック つめかえ用]-----
品名:洗濯用合成洗剤
用途:綿・麻・合成繊維用
液性:弱アルカリ性
成分:界面活性剤[41%、ポリオキシエチレンアルキルエーテル]
   安定化剤
   抗菌剤
   分散剤
   アルカリ剤
   pH調整剤
   酵素
使用量の目安:洗たく機/水30Lに20ml(キャップ30Lの線まで)
       手洗い/水5Lに3ml(料理用小さじ1杯弱)

正味量:500ml
蛍光増白剤、漂白剤は入っていない。

別の欄には、
・ニオイの原因となる汗・皮脂汚れを落とし、イヤなニオイを残しません。
・抗菌剤配合。菌の繁殖を抑え、タオルや衣類のイヤなニオイを防ぎます。
・蛍光増白剤が入っていないので、きなりや淡色衣料も安心。
・色あせ防止成分が濃色・色柄も大切に洗います。
-------------------------------------

最初に買ったいれものの表示もメモ
-----[液体アタック]----------------
品名:洗濯用合成洗剤
用途:綿・麻・合成繊維用
液性:弱アルカリ性
成分:界面活性剤[44%、ポリオキシエチレンアルキルエーテル]
   安定化剤
   分散剤
   アルカリ剤
   pH調整剤
   酵素
正味量:640ml

別の欄には、
・ニオイの原因となる汗・皮脂汚れを落とし、イヤなニオイを残しません。
・防臭成分配合。菌の繁殖を抑え、タオルや衣類のイヤなニオイを防ぎます。
・蛍光増白剤が入っていないので、きなりや淡色衣料も安心。
・色あせ防止成分が濃色・色柄も大切に洗います。
-------------------------------------

途中で界面活性剤の割合が44%から41%に減っている。

あと「防臭成分」がいつのまにか「抗菌剤」に変わっている。
きっと中身は同じで表現を変えたのだろう。

2008/03/12

ゴンドラの飾り

昨日の続き…

前から調べたところ、ゴンドラの両脇についている飾りは
ARIA 6巻の扉絵と裏表紙の晃の乗っているゴンドラが最初っぽい。
両脇に白い馬が付いている。

他にも見ていると、どうやらゴンドラによってデザインが違うらしい。
灯里のゴンドラはARIA 8巻のNavigation 36で新しいゴンドラに
代わっているが、このときにデザインが代わっていて、
両側に狐みたいなのがついている。

気がつかなかったなぁ。
他にもあるかもしらん。

2008/03/11

狐?

昨日(10日)がARIAコミック最終巻の発売日。
そして初めて気が付いた。
黒いゴンドラの両脇に狐のような飾りがつけてあることに。

いったい、いつから付いたのだろう。

2008/02/23

ノルウェーで地震

http://www.reuters.com/article/scienceNews/idUSL2173668320080221

ノルウェーのSvalbard列島で地震があった。
記事によるとノルウェーでは史上最大規模の地震だったが
被害はなかったとのことだ。

とはいってもマグニチュード6.2だから
日本からすると大きな地震というほどでもなさそう。

Svalbardの場所は
http://maps.google.co.jp/maps?f=q&hl=ja&geocode=&q=Svalbard&ie=UTF8&ll=78.716316,19.335938&spn=4.428642,30.102539&t=h&z=5

ノルウェーからずいぶん北のほうの島だ。
寒そう…

暗号化ディスクのキーを奪う方法があるらしい

http://blog.livedoor.jp/dankogai/archives/51006737.html 経由で見つけた。

概要と動画
http://citp.princeton.edu/memory/

Full paper, "Lest We Remember: Cold Boot Attacks on Encryption Keys"
http://citp.princeton.edu.nyud.net/pub/coldboot.pdf

これによると、
1. 電源コードを引っこ抜いてPCの電源を切る
2. すぐに冷却する。これでメモリの内容が10分程度では消えなくなる。
(冷却しなくても数分は保持される)
3. USBディスクなどから別のOSを起動し、メモリの内容を全て記録する
4. そこから暗号化キーを探し出す
5. 見つけた暗号化キーを使って暗号化されたディスクの内容を読む

これが数分でできるらしい。
有名どころのディスク暗号化ツールにも有効らしい。
メモリにも重要な情報は記録してはいけないということか…

2008/02/13

bird flu in Bangladesh

http://www.reuters.com/article/scienceNews/idUSDHA28533120080211

バングラデシュでまだ鳥インフルエンザが拡がっているようだ。
いまのところ鳥→鳥のインフルエンザだが、鳥→人が起きる前に終息してほしいな。

2008/02/08

boostライセンスがOSIに承認されました

boost libraryに適用されているBoost Software License (BSL1.0)がOSIに登録になりました。
http://opensource.org/licenses/alphabetical

アナウンスメールはBoost Digest, Vol 2088, Issue 4 Message 8の
Wed, 06 Feb 2008 14:02:04(-0500)にDavid Abrahams氏より投稿されています。
http://lists.boost.org/Archives/boost/2008/02/133103.php

申請から登録まで数年かかったようです。

2008/01/20

コンタクトレンズ型ディスプレイ

ディスプレイを目につけるみたいなものだな。
http://www.technobahn.com/cgi-bin/news/read2?f=200801181400

しかし目に付けるわけだから、静止画を表示した場合には
網膜上の同じところに常に同じ光が当たってしまうことになる。

そうすると固視微動が機能しなくなるので、
静止画は見えなくなってしまうのではないだろうか?

2008/01/06

HDD

購入HDDの中のHDDの型番調査
どちらも HD-HS500U2

価格は8月は21400円、12月は17800円でずいぶん値下がりしている。
型番は
8月 ST350063 0AS
12月 SAMSUNG HD501LJ
だった。
やはり毎回毎回中身が変わる。

2008/01/04

MercurialをWindowsで

分散リポジトリのバージョン管理システム
Mercurial ( http://www.selenic.com/mercurial/wiki/ )
がWindowsのExplorerから直接使えるようになるようだ。

TortoiseHg
http://tortoisehg.sourceforge.net/

TortoiseCVSやTortoiseSVNと同系統のものだが
開発者が同じかどうかまでは未調査…

2007/12/09

英語の冠詞の使い方

英語の冠詞の使い方の分かりやすい説明があったので、メモ。

http://code.nanigac.com/source/wiki/view/398
http://diary.hykw.tv/index.php/category/english/
これによると、
> a,an : インスタンス生成
> the : 既存のインスタンスへのポインタ
> 冠詞なし : クラス
と考えればよいらしい。

OOPなプログラミング言語を知っている人には
分かりやすいのでは?

2007/11/22

バイオハザード3

邦題「バイオハザード3」を観た。
これまでと同じく雰囲気はゲームのそれと同じ。
日本風のじめじめとした怖さでもなく、
いわゆるホラーという怖さでもない。
変化の激しさとでもいうのだろうか、
扉を開けると…、暗い部屋を少しずつ進むと…
何か出てきそうとつい身構えてしまう。
それがはずれのときもあれば、そうでないときもあるし、
思わぬタイミングのときもある。
そういう怖さは十分あった。

ただ、アリスの設定はどうかと思う。
なんというか、「Matrix」を髣髴とさせるというか。
観ていて、「えーそんなんありかよ」と言いたくなる。

また、最後の盛り上がりが欠けていた。
息切れしたのか一定の時間に収めようとしたのかネタ切れなのか分からんが。
次に何が起きるか簡単に読めてしまったら
「怖さ」が出ないじゃないか!!

まぁ全体的にみれば、十分面白いんじゃないかな。
少なくともゲームをやったことがある人なら。

2007/11/18

ランダムウォークで目的地にたどり着くのは何時?

複雑媒質中の平均初到達時間(First-passage time)の評価ができる一般理論が開発された.
(First-passage times in complex scale-invariant media, Nature 450, 77-80)
http://www.nature.com/nature/journal/v450/n7166/full/nature06201.html

この理論では不規則媒質(disordered media),フラクタルや
スケールフリーネットワークに適用できるらしい。

これよりも平均で早く到達するなら適当に移動するより効率が良いということが分かるわけかな。

2007/11/04

生物系でのLevy flightの存在に疑問が

ワタリアホウドリ(wandering albatross)と鹿(deer)とマルハナバチ(bumblebee)の
探索戦略がlevy flight(http://en.wikipedia.org/wiki/L%C3%A9vy_flight)に従う
との証拠に疑問が呈されている.
http://www.nature.com/nature/journal/v449/n7165/full/nature06199.html

この調査では1992年に行われた調査よりも高精度にアホウドリの飛行時間を
記録できる装置を使用している.その結果,飛行時間の確率分布が
shifted gamma distribution :
f(t)=r^s y^(s-1) e^(-ry)/Γ(s)
に従うことが示された.
指数項は,飛行時間が十分に長くなるとその確率分布が
ポアソン分布に従うことを示している.

2007/11/03

マインスイーパーのチート

WinXPのマインスイーパーのチート。

http://www.geekpage.jp/blog/?id=2006/12/17
によると、
1. マインスイーパーを起動
2. 「xyzzy」と入力
3. シフトキーを1秒以上押す。

これで爆弾のないところにマウスカーソルを持っていくと、
"デスクトップ"の左上に1ドットの白い点が表示される。
爆弾があると白い点は表示されない。

2007/10/27

近接連星系での最大の質量を持つブラックホール見つかる

太陽質量の15.65(±1.45)倍のブラックホールが近接連星系で発見された。
http://www.nature.com/nature/journal/v449/n7164/full/nature06218.html
これまでに知られている中では最大の質量のもので、
近傍銀河のMessier 33(M33)の連星系M33 X-7に存在している。
連星系を構成するもう一方の星(伴星)の質量は太陽質量の70.0±6.9倍であり、
ブラックホールはこの星の周りを3.45日周期で回っている。
ブラックホールの質量が観測できたのは、この連星系が食連星であったためである。
つまり、連星系が回転している平面をほぼ真横から観測しているということになる。

なお、単に質量の大きいブラックホールであれば他にも存在が予想されており、
例えば、銀河中心に存在していると考えられているものがある。
その質量は太陽質量の10の6乗倍から9乗倍にもなる。

2007/09/05

トランスフォーマー

ハリウッド映画のトランスフォーマーを見てきた。
内容は金のかかったコメディといえそうだ。

CGの出来はなかなかのものだし、
米軍機がいくつもでてくる。F22やAC130などなど。

ただ、ストーリーが軽い。とっても軽い。
そう感じる原因は、おそらくあのちっちゃい
ディセプトロンのロボットだろう。
動きもしゃべり方もどこかでいそうな
ノリの軽いやつだからだ。

というわけで、きれいなCGを見たければ価値があるかも。

2007/07/28

ケロミン

カエルの人形で演奏!
みょーにかわいいし、おもしろそうだが、値段が微妙…
http://www.keromin.com/

2007/07/26

本の出版

本を出版するときって、出版社に企画書を出すところから始まるらしい。
http://itpro.nikkeibp.co.jp/article/Watcher/20070723/278082

IntelがTBBをGPLで配布

Intel Threading Building Blocks がGPL v2で配布。
http://www.threadingbuildingblocks.org/

ライセンスをよくよく見てみると、GPLv2 with the runtime exception
と書いてある。テンプレートやinline展開された部分については、
GPLが伝播しないよということっぽい。

boost licenseのほうが簡単でいいな…

記事
http://itpro.nikkeibp.co.jp/article/NEWS/20070725/278194/?L=rss

2007/07/01

GPL v3 リリース

とりあえず、メモ。
http://www.gnu.org/licenses/gpl.html

特許に関する条項も入っている。

2007/06/29

フリーのXML DB

IBM社製のXMLデータベース「DB2 Express-C 9」が公開されているとのこと。
http://www.ibm.com/db2/express/

記事はここ。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070531/273212/

2007/06/22

flash メモ

flash を作成するソフト「suzuka」を準備する。
http://www.cty-net.ne.jp/~uzgensho/

active scriptを使うなら、
http://www.geocities.jp/myflashsouko/flash/index4.html
が参考になる。

詳細を調べるには
http://livedocs.adobe.com/flash/8_jp/
にあるドキュメントを参考にすればいい。

2007/06/13

デスクトップ冷暖房機!?

Herman Millerの局所冷暖房装置 C2 だそうで。
http://www.itmedia.co.jp/bizid/articles/0706/12/news079.html
<引用>
社内テストでは、C2は周囲の室温が摂氏22.2度の段階からスタートし、
周囲15センチ四方の温度を44.4度まで暖め、17.8度まで冷却できたという。
</引用>

15センチかぁ、微妙だな。
装置の前方1mくらい効果があればよいのだが。

そもそも、暖房はいいとして、冷房の廃熱はいったいどこへ逃がすんだろう?
いまいち機構がわからん。

2007/05/19

逆指値注文の特許

逆指値注文の特許があるとは。

特許第3875206号

それにしても請求項の記述が長いので、文字数を調べてみた。
 請求項1:1338文字
 請求項2:1647文字

がんばったなぁ。

2007/05/15

リースの資産計上

WBSで出ていたが、08年度からリースで借りた設備が資産計上されるのだそうだ。
これじゃあリースのメリットが一つなくなるな。
リース業界も再編らしい。

2007/05/13

erlang その10

続続続ets module
ets:matchの関連関数を使ってみる。

<ets_tut5.erl>

-module(ets_tut5).
-export([test/0]).


test()->
P = ets:new(test1, [bag]),
ets:insert(P, [{a,1,r},{b,2,s},{b,3,u},{b,4,u},{c,5,u}]),
io:format("~p~n", [ets:match_object(P, {'_','$1','$2'})]),
io:format("~p~n", [ets:match_object(P, {'_','_','_'})]),
io:format("~p~n", [ets:match_object(P, {'_','_','u'})]),
ets:delete(P).


結果は次のようになる。
157> c(ets_tut5).
{ok,ets_tut5}
158> ets_tut5:test().
[{c,5,u},{b,2,s},{b,3,u},{b,4,u},{a,1,r}]
[{c,5,u},{b,2,s},{b,3,u},{b,4,u},{a,1,r}]
[{c,5,u},{b,3,u},{b,4,u}]
true

パターンに一致した要素をそのまま取得できていることが確認できる。また、ets:matchで使えた $1 や $2 は _ と同様に解釈されるようである。

次に、match_object(Tab, Pattern, Limit) と match_object(Continuation) を使ってみる。この2つの関数はPatternに一致した要素のうち、Limit個ずつ結果として受け取るために使う。ここでは、Patternに一致した要素を引数で指定した関数で処理する関数を作ってみる。
<ets_tut6>
-module(ets_tut6).
-export([test/0]).


test()->
P = ets:new(test1, [bag]),
ets:insert(P, [{a,1,r},{b,2,s},{b,3,u},{b,4,u},{c,5,u}]),
X = foreach(P, {'b','_','_'},
fun(X)->io:format("~p~n", [X]) end),
ets:delete(P),
X.


foreach(P, Pattern, Fun)->
foreach(ets:match_object(P, Pattern, 1), Fun).


foreach(X, _) when X=='$end_of_table' ->ok;


foreach({Match, Cont}, Fun)->
lists:foreach(Fun, Match),
foreach(ets:match_object(Cont), Fun).


tupleの先頭の要素が b である要素を表示するようにしたので、
199> c(ets_tut6).
{ok,ets_tut6}
200> ets_tut6:test().
{b,4,u}
{b,3,u}
{b,2,s}
ok

という結果が得られる。

2007/05/11

erlang その9

続続ets module

ets:matchを使ってみる。
この関数はパターンに一致したtupleをテーブルから取り出す。
取り出される値はtupleそのものではなく、指定したtupleの要素のリストとなる。
形式的な定義はリファレンスマニュアルをみればわかるので、使用例を示す。
<ets_tut4.erl>

-module(ets_tut4).
-export([test/0]).


test()->
P = ets:new(test1, [bag]),
ets:insert(P, [{a,1,r},{b,2,s},{b,3,u},{b,4,u},{c,5,u}]),
io:format("~p~n", [ets:match(P, {'_','$1','$2'})]),
io:format("~p~n", [ets:match(P, {'_','$2','$1'})]),
io:format("~p~n", [ets:match(P, {a,'$1','_'})]),
io:format("~p~n", [ets:match(P, {b,'_','$1'})]),
io:format("~p~n", [ets:match(P, {'$1','_',u})]),
ets:delete(P).


これを実行すると、
1> c(ets_tut4).
{ok,ets_tut4}
2> ets_tut4:test().
[[5,u],[2,s],[3,u],[4,u],[1,r]]
[[u,5],[s,2],[u,3],[u,4],[r,1]]
[[1]]
[[s],[u],[u]]
[[c],[b],[b]]
true

となる。matchの第1引数はテーブル識別子で第2引数にパターンを指定する。
最初の出力で指定したパターンは
 {'_','$1','$2'}
であるが、これはPに格納されているtupleのうち、全ての要素が任意であることを示す。
つまり、Pに記録されているtupleが全て得られる。'_'はただ任意であることを示す。
一方、'$1'や'$2'は戻り値として得たい要素であることを示している。
'$1'に指定された要素は戻り値のリストの1番目の要素に記録され、'$2'は2番目に記録される。
したがって、得られる結果は
[[5,u],[2,s],[3,u],[4,u],[1,r]]
となる。

2つ目の出力で指定したパターンは最初のものと'$1'と'$2'の位置が入れ替わっている。
これは結果が先ほどのものと順序が逆になるということであり、
[[u,5],[s,2],[u,3],[u,4],[r,1]]
が得られる。

3つ目の出力で指定したパターンは{a,'$1','_'}である。
これはtupleの最初の要素がaであるもののみ取得することを示している。
したがって、最初の要素がaであるのは{a,1,r}であり、出力結果は
2番目の要素で構成されることになっているので、結果は
[[1]]
となる。

4つ目の出力で指定したパターンは{b,'_','$1'}である。
先ほどと同様の理由で、
[[s],[u],[u]]
が得られる。

テーブルのキーでない要素でも指定することができる。
5つ目の出力ではtupleの3番目の要素を指定する。パターンは{'$1','_',u}である。
uに一致するもののうち、最初の要素を集めるので、結果は、
[[c],[b],[b]]
となる。

2007/05/10

erlang その8

続ets module

ets:foldlとets:foldr関数を使ってみる。
lists:foldsとlists:foldrと同様だそうだ。

<ets_tut2.erl>

-module(ets_tut2).
-export([test/0]).


fold(Option)->
P = ets:new(test1,Option),
ets:insert(P,{a}),
ets:insert(P,{b}),
ets:insert(P,{c}),
CL = ets:foldl(fun(X, Con)->[X|Con] end, [{d}], P),
io:format("foldl ~p ~p~n", [Option, CL]),
CR = ets:foldr(fun(X, Con)->[X|Con] end, [{d}], P),
io:format("foldr ~p ~p~n", [Option, CR]),
ets:delete(P).


test()->
fold([]),
fold([ordered_set]).


実行結果は次のようになった。
1> c(ets_tut2).
{ok,ets_tut2}
2> ets_tut2:test().
foldl [] [{c},{b},{a},{d}]
foldr [] [{c},{b},{a},{d}]
foldl [ordered_set] [{c},{b},{a},{d}]
foldr [ordered_set] [{a},{b},{c},{d}]
true

Optionが空、つまりsetの場合は、foldlとfoldrの結果は同じになった。
一方、ordered setの場合は、foldlとfoldrの結果は異なった。

ordered setの場合、foldlは最初の要素から順に関数を実行していくので、
まず初期値[{d}]の前方に{a}が付けられる。したがって、[{a},{d}]となる。
つぎの要素は[{b}]なので、[{b},{a},{d}]となり、最後の要素の処理が終わると、
[{c},{b},{a},{d}]となる。
foldrの場合はその逆に動作するので[{a},{b},{c},{d}]となる。


次に、ets:lookupとets:lookup_elementを使ってみる。
<ets_tut3.erl>
-module(ets_tut3).
-export([test/0]).


test()->
lookup([set]),
lookup([ordered_set]),
lookup([bag]),
lookup([duplicate_bag]).


lookup(Option)->
P = ets:new(test1, Option),
ets:insert(P, [{a,10},{a,20},{a,20},{b,1},{b,5},{b,2}]),
io:format("~p ~p~n", [Option, ets:lookup(P,a)]),
io:format("~p ~p~n", [Option, ets:lookup(P,b)]),
io:format("~p ~p~n", [Option, ets:lookup_element(P,a,2)]),
io:format("~p ~p~n", [Option, ets:lookup_element(P,b,2)]),
ets:delete(P).


実行結果は次のようになった。
1> c(ets_tut3).
{ok,ets_tut3}
2> ets_tut3:test().
[set] [{a,20}]
[set] [{b,2}]
[set] 20
[set] 2
[ordered_set] [{a,20}]
[ordered_set] [{b,2}]
[ordered_set] 20
[ordered_set] 2
[bag] [{a,10},{a,20}]
[bag] [{b,1},{b,5},{b,2}]
[bag] [10,20]
[bag] [1,5,2]
[duplicate_bag] [{a,10},{a,20},{a,20}]
[duplicate_bag] [{b,1},{b,5},{b,2}]
[duplicate_bag] [10,20,20]
[duplicate_bag] [1,5,2]
true

lookupは第2引数で指定したキーに一致する要素一覧を取得する。
setとordered_setの結果は同じ。
bagは同じキーの重複は許されるが、内容が全て同じ要素の重複は許されない。
duplicate_bagはどのようなケースでも重複が許される。
そのため、キーaに対するbagとduplicate_bagの結果が異なっている。

lookup_elementの第3引数にはtupleの何番目の要素を取得するかを指定する。
ここでは2と指定したので、tupleの2番目の要素である数字のリストが得られる。

2007/05/09

erlang その7

ets:new とその関連関数を使ってみる。
これらの関数はテーブルを作成して、そこに色々な要素を記録しておくために使われるようだ。
C++のstd::mapの高機能版のようなものか?

まず、テーブルを作成する。
第1引数はテーブルの名前で、第2引数はオプションを指定する。[]でデフォルトが利用される。
Pにはテーブル識別子(マニュアルではtid()と記載されている)が代入される。
1> P=ets:new(table1,[]).
16

次にこのテーブルの情報を見てみる。
2> ets:info(P).
[{memory,279},
{owner,<0.30.0>},
{name,table1},
{size,0},
{node,nonode@nohost},
{named_table,false},
{type,set},
{keypos,1},
{protection,protected}]

マニュアルによるとmemory は 「The number of words allocated to the table.」
とのことなので、単位をbytesであるとはいえそうにない。
sizeはテーブルに記録されているオブジェクトの数で、今は空なので0になっている。

テーブルに要素を追加してみる。
3> ets:insert(P, {aaa}).
true

テーブルの情報をみると、
4> ets:info(P).
[{memory,289},
{owner,<0.30.0>},
{name,table1},
{size,1},
{node,nonode@nohost},
{named_table,false},
{type,set},
{keypos,1},
{protection,protected}]

となっており、要素数が1増えている。
さらに追加してみると、
5> ets:insert(P, {bbb}).
true
6> ets:info(P).
[{memory,299},
{owner,<0.30.0>},
{name,table1},
{size,2},
{node,nonode@nohost},
{named_table,false},
{type,set},
{keypos,1},
{protection,protected}]

要素数が2になった。また、memoryが10ずつ増えている。
もう少し短いatomを追加してみる。
7> ets:insert(P, {c}).
true
8> ets:info(P).
[{memory,309},
{owner,<0.30.0>},
{name,table1},
{size,3},
{node,nonode@nohost},
{named_table,false},
{type,set},
{keypos,1},
{protection,protected}]

要素数が3になり、memoryは前と同様に10増える。

要素を順番に見ていくには、ets:first/1とets:second/2を使う。
まずets:first/1を使って、
9> ets:first(P).
c

最初の要素はcのようだ。次にets:next/2を使って、
cの要素の次に記録されている要素を順次取得する。
10> ets:next(P,c).
aaa
11> ets:next(P,aaa).
bbb
12> ets:next(P,bbb).
'$end_of_table'

テーブルの最後までくると、'$end_of_table'が返される。
これで終端かどうかが判断できる。

ところで、このテーブルの機能は便利なのだが
テーブルに記録した値は変更できてしまうことになる。
使い方によってはC言語っぽい書き方ができてしまいそうだ。

また、ets.erlによると、これらetsモジュールの関数の一部、
例えばnewやfirst, nextの実装はC言語でされているとのことだ。

2007/05/08

erlang その6

ファイル名に.を含めてみる。
<ets.tut1.erl>

-module(ets.tut1).
-export([test/0]).
test()->io:format("~p~n", ["test"]).

これをコンパイルしてみると、
1> c(ets.tut1).
** Module name ''ets.tut1'' does not match file name ''ets.tut1'' **
{error,badfile}

となる。また試しに ' でくくってみた。
2> c('ets.tut1').
** 2: syntax error before: c **

やはりエラー。
どうやらファイル名を . を含めると正常に処理できないようだ。
リファレンスマニュアルによると
<引用>
The name Module, an atom, should be the same as the file name minus the extension erl.
</引用>
である。また、atomには . を含んでもよい。
このことから、ファイル名の途中に . を含めることができそうにみえるが、できないようだ。
マニュアルのどこかに別途この点について記載がされているのかもしれない…

2007/05/06

erlang その5

●正規表現ライブラリ regexp を使ってみる。

一致した位置を取得する関数 match を使ってみる。
最初の引数が処理対象の文字列で、第2引数が正規表現。
1> regexp:match("a,bc,def,123", ",").
{match,2,1}
結果の2番目が一致した位置で、この場合は最初の,が一致している位置なので、2になる。
0 originではなく、1 originである。
戻り値の最後の値は一致した文字数になので、1になる。

2> regexp:match("a,bc,def,123", ",d").
{match,5,2}
この例では2文字一致しているので戻り値の3番目の値が2になっている。

3> regexp:match("a,bc,def,123", ",d.f").
{match,5,4}
ピリオド.は任意の1文字に一致するので、,defが一致している。

4> regexp:match("a,bc,def,123", ",d.*2").
{match,5,7}
*は0個以上の文字に一致するので、.*で任意の0個以上の文字への一致を調べることになる。
なので、「,def,12」に一致することになり、一致した文字の長さは7文字になる。

マニュアルによるとmatchよりもfirst_matchを使用する方が速いとのこと。
使いかたは同じで、
5> regexp:first_match("a,bc,def,123", ",d.*2").
{match,5,7}

一致する部分を全てみつけたい場合は matches を使う。
6> regexp:matches("a,bc,def,123", ",").
{match,[{2,1},{5,1},{9,1}]}
コンマ,の場所を見付けているので、2文字目、5文字目, 9文字目が見つかる。

今度は、一致した場所の文字を置換する。置換には sub を使う。
この関数では最初に見つけた位置の文字を置き換えるだけ。
7> regexp:sub("a,bc,def,123", ",", " ").
{ok,"a bc,def,123",1}
返される結果の2番目は、置換処理後の文字列となっており、
最初のコンマがスペースに置き換えられている。

一致した場所全てを置き換えたい場合は gsub を使う。
8> regexp:gsub("a,bc,def,123", ",", " ").
{ok,"a bc def 123",3}
結果の3番目の値は置き換えた"箇所"の数で、この例ではコンマが3箇所あるので3になる。

一致した場所で文字列を分割する。これには split を使う。
9> regexp:split("a,bc,def,123", ",").
{ok,["a","bc","def","123"]}
コンマで分割された文字列のリストとして結果が返される。

今回はここまで。

2007/05/03

erlang その4

●ファイル
ファイルの入出力の方法について調べてみた。
まずは、ファイルからの読み込み。
<tut11.erl>

-module(tut11).
-export([read/1]).

read(FileName)->
Handle = file:open(FileName, read),
if element(1,Handle) /= ok -> element(1, Handle);
true -> show_content(element(2,Handle)),
file:close(element(2, Handle))
end.

show_content(Handle)->
Result = io:get_line(Handle, prompt),
if Result == eof -> ok;
true -> io:format("~p~n",[Result]),
show_content(Handle)
end.

さらにテスト用のファイルを作成する。
<test1.txt>
abc
def
123

コンパイルして、
6> c(tut11).
{ok,tut11}

実行すると、
7> tut11:read("test1.txt").
"abc\n"
"def\n"
"123\n"
ok

のような結果が得られる。
io:get_lineでは改行コードは除去されないようだ。

次にファイルへの書き出しを試してみる。
ついでにio:formatの~pと~wと~sの違いを見てみる。
<tut12.erl>
-module(tut12).
-export([write/2]).

write(FileName, Str)->
Handle = file:open(FileName, write),
if element(1,Handle) /= ok -> element(1, Handle);
true -> write_content(element(2,Handle), Str),
file:close(element(2, Handle))
end.

write_content(_, [])->ok;
write_content(Handle, [Head|Rest])->
io:format(Handle, "~p,~w,~s~n", [[Head],[Head],[Head]]),
write_content(Handle, Rest).

コンパイルして、
36> c(tut12).
{ok,tut12}

実行してみる。
41> tut12:write("test2.txt", ["abc"]).
出力されたファイルの内容は、
["abc"],[[97,98,99]],abc

つまり、
~p : 入力された内容をそのまま出力。
~w : 各文字を値として解釈
~s : 文字列として解釈
ということになるようだ。(詳しくはerlangのreference manualを参照のこと)

今度は、日本語に挑戦。
ただ、erlang shellは日本語を受け付けてくれないので、
UTF-8の文字コードを直接入力してみる。

42> tut12:write("test2.txt", [227,129,130]).
出力されたファイルの内容は、
"�",[227],
[129],[129],�
[130],[130],�

ん?各値ごとに出力しようとしているようだ。

["abc"]のようにするには、
46> tut12:write("test2.txt", [[227,129,130]]).
とすればよい。
この出力結果は、
[[227,129,130]],[[227,129,130]],あ

のようになる。~sの出力が日本語になっている。
むろん、UTF-8で日本語が表示できるUNIX shell等で表示させている。

erlang その3

●文字列に関して
Atomは文字で、小文字から始まらないorアルファベットか数字以外の文字で
構成されるときはシングルクォート'で囲まないといけない。

Stringはダブルクォート"で囲まれた文字。
Erlangのデータ型ではなく、Listとして表現される。

●Shellに関して
Shellで定義した変数を消去するには、f()を使うとよい。
1> X=1.
1
2> X=2.

=ERROR REPORT==== 2-May-2007::22:19:18 ===
Error in process <0.30.0> with exit value: {{badmatch,2},[{erl_eval,expr,3}]}

** exited: {{badmatch,2},[{erl_eval,expr,3}]} **
3> f().
ok
4> X=2.
2

さらに特定の変数の定義を除去することもできる。
5> Y=3.
3
6> X=3.

=ERROR REPORT==== 2-May-2007::22:20:08 ===
Error in process <0.33.0> with exit value: {{badmatch,3},[{erl_eval,expr,3}]}

** exited: {{badmatch,3},[{erl_eval,expr,3}]} **
7> Y=2.

=ERROR REPORT==== 2-May-2007::22:20:10 ===
Error in process <0.38.0> with exit value: {{badmatch,2},[{erl_eval,expr,3}]}

** exited: {{badmatch,2},[{erl_eval,expr,3}]} **

この時点で、X=3, Y=2となっている。
8> f(Y).
ok

これでYの定義のみが消去された。なので、
9> X=3.

=ERROR REPORT==== 2-May-2007::22:20:18 ===
Error in process <0.40.0> with exit value: {{badmatch,3},[{erl_eval,expr,3}]}

** exited: {{badmatch,3},[{erl_eval,expr,3}]} **

のように、Xは定義済みなので再定義できないが、Yについては先ほど消去しているので
10> Y=2.
2
のように再定義できる。

●erlangプログラムのコンパイル
いろいろ探してみたが、ネイティブコードを出力するコンパイラを見つけられない…

とりあえず、UNIXのshellから実行できるようにするには、
(1)コマンドラインから.erlファイルを実行
(2).erlプログラムの最後にhalt().を書いて、shellを止める
の2つを行うしかなさそうだ。

あんましよさげではないが、例えば
<tut10.erl>
-module(tut10).
-export([main/1]).
main(X)->io:format("~p~n",[X]),
     halt().

のようなファイルを作成し、
UNIX> erl -compile tut10.erl

としてコンパイルして、
UNIX> erl -noinput -run tut10 main abc
["abc"]

のようにして実行する。ちなみに日本語を入れると、
UNIX> erl -noinput -run tut10 main あ
[[227,129,130]]

となり、日本語の出力ができない。
データの値からしてUTF-8でエンコードされているようだ。
なので、ファイルにバイナリで出力できれば読めそう。

erlang shell や UNIX shell に日本語を出力する方法は見つけられず…

2007/05/01

erlang その2

今度は、標準モジュールの説明。
マニュアルはコマンドラインから
# erl -man io
で見ることができる。この場合は、ioモジュールのマニュアルが表示される。
これはerlangのシェルからではなく、csh等の通常のシェルから実行する。

# io:format("test~n").
test
ok
# io:format("test~n", []).
test
ok

引数なしでも空リスト引数でも表示できる。

# io:format("test ~w.~n", [AAA]).
** 1: variable 'AAA' is unbound **
大文字だと文法違反のようだ。

# io:format("test ~w.~n", [aaa]).
test aaa.
ok
小文字ならOK。

# io:format("test ~w.~n", ["AAA"]).
test [65,65,65].
ok
""で囲むと文法違反にはならないが、文字列ではなく数字のリストに変換される。

6> io:format("test ~w.~n", ['AAA']).
test 'AAA'.
ok
''で囲むと望みどおりのAAAが表示される。

# io:format("test 1:~w 2:~w ~~.~n", ['AAA','BBB']).
test 1:'AAA' 2:'BBB' ~.
ok
2つ以上表示させたい場合は、リストの要素を増やせば良い。
フォーマット部分の文字列には~wを2個書く。このへんはC++のboost:formatのようだ。
~を表示させたいときは~~と書けば良い。

次に最小値を求める関数を作成する。
ここでは「guard」というのを使用する。

<tut6.erl>
-module(tut6).
-export([list_min/1]).
list_min([Head|Rest])->list_min(Rest, Head).
list_min([], Result)->Result;
list_min([Head|Rest], Result) when Head < Result ->list_min(Rest, Head);
list_min([Head|Rest], Result)->list_min(Rest, Result).

実行すると、
# c(tut6).
./tut6.erl:6: Warning: variable 'Head' is unused
{ok,tut6}
# tut6:list_min([7,2,5,7,9,1,3]).
1
のようになり、最小値が得られる。「when」というのが関数実行の条件で、
trueの場合に関数の中身が実行される。そうでない場合は、関数の次の定義が実行される。
このように条件をテストすることを「guard」と呼ぶようだ。

guardで使える条件文は <, >, == <=, >=, /=がある。
/=はnot equalであり、C++とは違うので注意。

リストにはもう少し機能がある。| operatorにはリストの先頭に要素を追加する機能がある。
まず、リストを作成する。
# L = ['AAA','BBB'].
['AAA','BBB']

| operatorでリストの先頭に要素を追加する。
# L3 = ['CCC'|L].
['CCC','AAA','BBB']

逆向きに書くと、
# L2 = [L|'CCC'].
[['AAA','BBB']|'CCC']
となり、'CCC'のみ持つリストの先頭に['AAA','BBB']というリストが
追加されることになる。

これを使って、リストの順序を逆にする関数を作ってみる。
<tut8.erl>
-module(tut8).
-export([reverse/1]).
reverse(List)->reverse(List, []).
reverse([Head|Rest], ReversedList)->reverse(Rest, [Head|ReversedList]);
reverse([], ReversedList)->ReversedList.

4行目でHeadから順にReversedListの先頭に追加しているところがミソ。
# c(tut8).   
{ok,tut8}
# tut8:reverse([1,2,3,4,5]).
[5,4,3,2,1]
逆順になった。

関数に連続した処理をさせたい場合は、「,」で区切ればよく、
<tut7a.erl>
-module(tut7a).
-export([format/1]).
format(Str)->
  io:format("test : ~w~n", [Str]),
  io:format("test2 : ~w~n", [Str]).

のように書ける。これを実行すると、
# c(tut7a).    
{ok,tut7a}
# tut7a:format(aa).
test : aa
test2 : aa
ok

となり、文字列の出力を2回行うようになる。
今度は与えられた値のリストから最小値と最大値をとってみる。
<tut7b.erl>
-module(tut7b).
-export([minmax/1]).

minmax([Head|Rest])->minmax(Rest, Head, Head).
minmax([Head|Rest], Min, Max)->
  if Head < Min -> NewMin = Head;
    true -> NewMin = Min
  end,
  if Head > Max -> NewMax = Head;
    true -> NewMax = Max
  end,
  minmax(Rest, NewMin, NewMax);
minmax([], Min, Max) -> {Min, Max}.

コンパイルして実行してみる。
# c(tut7b).
{ok,tut7b}
# tut7b:minmax([1,2,3,4,5,6,7]).
{1,7}
# tut7b:minmax([5,3,8,0,2,4,5]).
{0,8}

たしかに最小値と最大値がとれている。
条件文ifは上記のように書けばよく、条件の間は;で区切る。
endの直前の条件文には;はいらない。
elseがないので、代わりに一番最後にtrue->とすることで対応する。

もう少しifについて調べてみる。
<tut9.erl>
-module(tut9).
-export([test/2]).

test(X,Y)->
  if X==1 -> 'X == 1';
    Y==2 -> 'Y == 2';
    X==2, Y==5 -> 'X==2, Y==5';
    X==3;
    Y==4 -> 'X==3 or Y==4';
    (X==5) and (Y==5) -> 'X==5 and Y==5'
  end.

実行すると、
# c(tut9).
{ok,tut9}
# tut9:test(1,2).
'X == 1'
Xが1なので、一番最初の条件に一致する。

# tut9:test(0,2).
'Y == 2'
Xが1でなく、Yが2なので、2番目の条件に一致する。

# tut9:test(2,5).
'X==2, Y==5'
今度は3番目の条件に一致する。

# tut9:test(3,5).
'X==3 or Y==4'
これは4番目の条件に一致する。
C++でいうswitch-cast文と似ていて、;のみで->がない場合は、
->が見つかったところから実行するようだ。

# tut9:test(5,5).
'X==5 and Y==5'
最後は両方共が5の場合の条件である。

# tut9:test(6,5).

=ERROR REPORT==== 1-May-2007::17:01:33 ===
Error in process <0.44.0> with exit value: {if_clause,[{tut9,test,2},{shell,exprs,6},{shell,eval_loop,3}]}

** exited: {if_clause,[{tut9,test,2},{shell,exprs,6},{shell,eval_loop,3}]} **
条件にマッチしないとこんな風にエラーになる。

ちなみに10行目を
 (X==5) and (Y==5)
と書かず、
 X==5 and Y==5
と書くとコンパイルエラーになる。

最後に高階関数(higher order functions)について試してみる。
C++でいう関数ポインタみたいなもの。
シェルから使うと、次のようになる。

18> Fn = fun (X)->X*3 end.
#Fun<erl_eval.6.56006484>
19> Fn(5).
15

引数の値を3倍する関数Fnを定義して、その引数に5を入れると15が出力される。
高階関数の定義はfunとendで囲むようだ。

標準モジュールのlistsを使うと、次のようなことができる。
20> lists:map(Fn, [1,2,3]).
[3,6,9]

リスト[1,2,3]の各要素に対してFnを適用し、その結果をリストに入れる操作が行われている。

他にも、
25> Fp = fun (X)->io:format("elm : ~w~n",[X]) end.
#Fun<erl_eval.6.56006484>
26> lists:map(Fp, [1,2,3]).
elm : 1
elm : 2
elm : 3
[ok,ok,ok]
27> lists:foreach(Fp, [1,2,3]).
elm : 1
elm : 2
elm : 3
ok
といったことができる。

ソートも次のようにできる。
30> lists:sort([2,3,1]).
[1,2,3]
31> lists:sort(fun(X,Y)->X<Y end,[2,3,1]).
[1,2,3]
32> lists:sort(fun(X,Y)->X>Y end,[2,3,1]).
[3,2,1]

名前とペアになっている要素からなるリストに対してもソートできる。
33> lists:sort(fun({_,X},{_,Y})->X<Y end,[{'A',2},{'B',3},{'C',1}]).
[{'C',1},{'A',2},{'B',3}]

ここで、「 _ 」はanonymous variableと呼ばれ、使わない値に使用するようだ。
今の例では、文字は比較に使わないので「 _ 」を使って表現を簡略化した。

今回はここまで。

2007/04/30

erlang その1

erlangという関数型言語のプログラミング言語を使ってみる。
getting started を見ながらやってみることにする。
http://www.erlang.org/

起動するにはコマンドラインから
# erl
と入力する。

何か計算をさせてみる。
# 1 + 2.
3
と表示される。最後のピリオドはC++でいう;に相当するようだ。

括弧で優先順位をきめられる。
# (1+2)*5.
15

erlシェルを終了したいときはCtrl+Cを押すと
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
(v)ersion (k)ill (D)b-tables (d)istribution
と表示されるので、aを押すと終了する。

今度はファイルにソースを書いて、コンパイルしてから使ってみる。
[tut.erl]ファイルの中身に次のように書く。

-module(tut).
-export([double/1]).
double(X) -> 2*X.

そして、
# c(tut).
{ok,tut}
でコンパイル完了。
使うには、
# tut:double(50).
100
とすると、結果に2倍された値が表示される。
ところで、

-module(tut).
-export([double/1]).
double(x) -> 2*x.

つまり、Xをxに書き換えるとコンパイルが通らない。
チュートリアルの後の方に書いてあるが、
変数の先頭の文字が大文字か小文字かによって意味が変わるようだ。

今度は再帰。ループが使えないのでその代わりに使うようだ。
ためしに、1からXまでの値を足すプログラムを書いてみる。

-module(tut1).
-export([sum/1]).
sum(1)->1;
sum(X)->X+sum(X-1).

重要なのは、3行目のsumの定義の最後を;にすること。
もし.を使うとsumの定義が終了して、4行目で再定義されてしまうことになり、
コンパイルエラーになる。

さて、実行してみると、
# tut1:sum(10).
55
で、あってる。

今度は、このファイルに関数powを追加してみる。

-module(tut1).
-export([sum/1, pow/2]).
sum(1)->1;
sum(X)->X+sum(X-1).
pow(X,1)->X;
pow(X,Y)->X*pow(X,Y-1).

コンパイルして実行してみる。
# tut1:pow(2,8).
256

おそらく意外とC++とかでは面倒なことになりそうな2^1024を計算してみる。
# tut1:pow(2,1024).
17976931348623159077293051907890247336179769789423065727343008115773267580
55009631327084773224075360211201138798713933576587897688144166224928474306
39474124377767893424865485276302219601246094119453082952085005768838150682
34246288147391311054082723716335051068458629823994724593847971630483535632
9624224137216

合ってるのかどうかわからんが、たぶん正しいのだろう。
多倍長整数があるのはこういうときは便利だ。

今度はAtomsとかいうデータ型を使ってみる。
tut2.erlファイルを作って、次のような内容を記録する。
単位系を光年←→パーセクへ変換する関数である。

-module(tut2).
-export([convert/2]).
convert(L, parsec)->L/3.26;
convert(P, lightyear)->P*3.26.

# c(tut2).
{ok,tut2}
# tut2:convert(3, parsec).
0.920245
# tut2:convert(3, lightyear).
9.78000

第2引数の値によって、関数の呼ばれる部分が変わるということのようだ。
で、その第2引数が数字ではなくて、atomだということだろう。

次はTuplesだ。
値をひとまとめにして扱おうということだ。C++でいう構造体に似ているかな。
ここでは数字を単位と一つにまとめて処理してみる。
<tut3.erl>
-module(tut3).
-export([convert_length/1]).
convert_length({L, lightyear})->{L/3.26,parsec};
convert_length({P, parsec})->{P*3.26,lightyear}.

で、実行。
# c(tut3).
{ok,tut3}
# tut3:convert_length({3,parsec}).
{9.78000,lightyear}

計算できてる。無論、tupleの要素の位置を逆にしても同じことができる。
<tut3b.erl>
-module(tut3b).
-export([convert_length/1]).
convert_length({lightyear, L})->{parsec, L/3.26};
convert_length({parsec, P})->{lightyear, P*3.26}.

実行すると、
# c(tut3b).
{ok,tut3b}
# tut3b:convert_length({parsec,3}).
{lightyear,9.78000}
となって、逆にしてもOK。

次はListsだ。listは[]で囲む。
tupleと違って、サイズを変えられる。C++でいうとstd::listかな。
例えば、
# [First | TheRest] = [1,2,3,4,5,6,7].
[1,2,3,4,5,6,7]
# First.
1
# TheRest.
[2,3,4,5,6,7]
な風になる。|はリストの最初の要素と後の要素をわける。
コンマを使うと、要素ごとに分けられる。
# [First, Second | TheRest] = [1,2,3,4,5,6,7].
[1,2,3,4,5,6,7]
# First.
1
# Second.
2
# TheRest.
[3,4,5,6,7]

ちなみ、この2つの例を連続していれると、文句を言われる。
つまり、最初に定義したFirstを次の定義のFirstで上書きしていると。
定義済みの変数の消し方がわからんので、ここではerlを再起動して例を試した。

次に、リストの長さを求める関数を定義する。
<tut4.erl>
-module(tut4).
-export([list_length/1]).
list_length([])->0;
list_length([First|Rest])->1+list_length(Rest).

使ってみる。
# c(tut4).
./tut4.erl:4: Warning: variable 'First' is unused
{ok,tut4}
# tut4:list_length([1,2,3,4,5]).
5
警告がでたが、問題なく動作するようだ。
要素にatomを使ってもOK.
# tut4:list_length([a,b,c,d,e,f]).
6

ついでに文字列はどうなるかみてみる。
# tut4:list_length(["a","b"]).
2
""が何を意味するのか読んでいるチュートリアルの現時点では不明だが、
なにかの値として見てはくれているようだ。

# ["a","b"].
["a","b"]
ただ、リストの内容が表示されるだけ。

# [97,98].
"ab"
なんと、文字コードとして解釈してくれるようだ。
でも["a","b"]のときは気をきかせて"ab"と表示してくれるわけではないようだ。

============================
今回はこの辺で終了。

状態!?

<引用>
「新・闘わないプログラマ No.487」
http://www.amy.hi-ho.ne.jp/~lepton/program/p4/prog487.html
「状態」というのを理解して、それに応じた操作ができない人もいるので、「状態」を出来る限り作らないようなユーザーインターフェースが必要なのでは
</引用>

なるほど。
同じキーにたくさん機能を割り当ててると難しいわけか。
んで、避けようとすると、HDDレコーダのリモコンのように
余計わけ分からん状態になるってことだ。

多機能にすると、ボタンの数を増やすか「状態」を使って
1つのキーにいろんなことをさせんといかんわけで。

んー、要はシンプルに作るべきだってことだ。

Debian 4.0で遊ぶ その1

Debian 4.0 r0をインストールしてみた。
以下、そのログ。あんまり参考にはならないかも。

とりあえず、
http://www.debian.org/CD/netinst/
に書いてある方法で進める。

(1)ダウンロードするのは
debian-40r0-i386-netinst.iso
で、これをCDに焼く。

(2)CDからブートして、画面が表示されたらEnterを押す。
しばらく待つと、インストーラが立ち上がる。
今回使ったCDドライブはUSB接続のもの。

(3)まず言語を選ぶ。

(4)さらにキーボードの種類を選ぶ
すると、CDの検査が始まり、続いて追加コンポーネントのロードが始まる。

(5)ネットワークインターフェイスが複数あるため、
選択画面が出てくる。
Marvell Technology Group Ltd. 88E8053 PCI-E Gigabit Etherne
と表示されているものを選択。
DHCPでネットワークを検索し始める。
が、LANをつないでいない!ので見つからず。
そのまま「続ける」ボタンを押す。

(6)どうするか選択肢がでてくる。
・ネットワークの自動設定を再試行
・DHCPホスト名付きでネットワークの自動設定を再試行
・ネットワークを手動で設定
・今ネットワークを設定しない
3番目を選ぶ。

(7)IPアドレス、サブネットマスク、ゲートウェイ、ネームサーバーアドレスを設定。
若干、待つと、次の設定画面が現れる。

(8)システムのホスト名を入れる画面がでてくるので、
好きな名前をいれる。

(9)ドメイン名を入れる画面がでてくるので、
適当なのを入れる。

(10)ディスクのパーティショニングが画面が出てくる。ここでは
「ディスク全体を使い、暗号化LVMをセットアップする」を選択した。

(11)ディスクのパーティショニングするディスクを選択する。

(12)パーティショニング機構の選択画面になる。
ここでは、「すべてのファイルを1つのパーティションに」を選択

(13)ディスクへの変更をHDDに書き込むかの最終確認画面が出てくる。
「はい」を選択。

(14)HDDへアクセスするためのパスワードを設定する。
たぶん暗号化LVMを選んだためと思われる。

(15)ファイルシステムを書き込む前の確認画面が表示される。
/bootパーティションのみ通常のext3で、
残りはなぜかhda5_cryptに割り当てられている。
なぜにhda5なのかは分からない。
とにかく、「パーティショニングの終了とディスクへの変更の書き込み」を選択

(16)確認画面がでるので「はい」を選択

(17)Rootパスワードを要求される。

(18)ユーザー名の入力する

(19)新しいアカウントのユーザー名を入力する

(20)ユーザーのパスワードを設定する

(21)「ベースシステムをインストールしています」と表示され、
インストールが始まる。

(22)パッケージマネージャの設定で、
ネットワークミラーを使うかどうかを聞かれる。
「はい」を選択

(23)アーカイブミラーを選択

(24)ftp.jp.debian.orgを選択

(25)HTTPプロキシを設定する。とりあえず空でいく。
ミラーを検査していますと表示される。

(26)正しくないアーカイブミラーですと表示され、
画面が赤くなる。
どうやらネットワークに接続できていないようだ。

(27)設定をもどって、DHCPを使うように変更し、リトライ。

(28)debianパッケージ利用調査に参加しますか?
には「いいえ」。どっちでもよいと思うけど。

(30)ソフトウェアの選択では
デスクトップ環境, ウェブサーバ, 標準システムにチェック

(31)ネットワークからいろいろとダウンロードが始まる。項目数は700程度。
待つ
待つ
待つ








まる1日かかった… 。狭帯域なもので(w

(32)インストールが始まると、途中で使用する画面の解像度が聞かれる。

(33)途中でX関連の設定で失敗した。
ディスプレイの接続が切れていたせいかもしれない。

(34)やり直しを前回と同じ、
 デスクトップ環境, ウェブサーバ, 標準システムにチェック
実行すると、またダウンロードが始まった。
どうやら、前回ダウンロードできてなかった部分を落としているようた。
ファイルを取得しています xx/78 となっていて、78個落とす必要があるようだ。
待つ



こんどは1〜2時間待ち…

(35)ハードディスクへGRUBをインストール

(36)インストールの完了画面が表示される。
ので、CD-ROMをドライブから抜いて、「続ける」ボタンを押す。
すると、再起動が始まる。

ようやくインストール終了。
これからいじっていく予定。

2007/04/28

HDD 500GB

またHDD(HD-HC500U2)を買ってきた。25800円だった。

前回と同じく、箱の背面に緑色の丸いシールが、側面には赤い丸いシール貼ってある。
しかし今回はさらに、箱の上部に赤い丸いシールと四角い朱色(オレンジ色?)のシールが貼ってある。

以前の調査と同様、HDDのプロパティを見ると、
 WDC WD50 00AAKS-00TMA0
と書いてある。
たぶん、これ↓
http://www.wdc.com/jp/products/products.asp?driveid=301&language=en

ちなみに初期のFAT32フォーマットでは容量が499,983,122,432バイト。
NTFSでフォーマットしなおしたところ、500,105,216,000バイトとなり、
ちょっと増えた。

2007/04/25

ボッコロの日

今日はボッコロの日だ。イタリアはヴェネチアの習慣だそうで。

2007/04/24

ニュース

エリツィン大統領が死去とのこと。
いつ大統領をやめたのか忘れたが、時が進んでるのを感じるな。

2007/03/04

オフショア vs Agile

オフショア vs Agile について
http://d.hatena.ne.jp/masayang/20070302/1172860846

とりあえず、リンクだけメモ
オフショア:従来型より不具合増
Agile:従来型より不具合減

だそうだ。

2007/02/07

( 続々 )500GB HDD

昨日、またHDD(HD-HC500U2)を買ってきた。25800円だった。

箱の背面に緑色の丸いシールが、側面には赤い丸いシール貼ってある。
以前の調査と同様、HDDのプロパティを見ると、
 Hitach HDT725050VLA360
と書いてある。

日立製のDeskstar T7K500シリーズのようだ。
http://www.hitachigst.com/portal/site/en/menuitem.f053c8a6f66a6a14e85c1a70eac4f0a0/
http://www.hitachigst.com/tech/techlib.nsf/products/Deskstar_T7K500

フォーマット中の現時点では、筐体が熱くなりすぎているということはない。
ファンから出てくる排気は、ほんのり暖かい程度だ。

それにしても、毎回毎回買うたびにメーカーが違うので、
くじ引きみたい…。

2007/01/14

博士が100にんいるむら

博士(はくし)が100にんいるむら
http://www.geocities.jp/dondokodon41412002/index.html

なかなか現実的なはなしになってますな。

読んだほうが雰囲気がわかりますが、
博士取得者の進路を数字だけにするとこんなかんじ。

16% 医者
14% 大学(助手等)
20% ポスドク
8% 会社員
11% 公務員
7% 他分野へ
16% 無職
8% 行方不明or死亡

理学博士と工学博士で同じような分類をして比較したら
きっと差が出るだろうな。特に一番下のほうが…

ところで、このデータってどこからとってきたんだろう?

2007/01/07

攻殻機動隊 SSS

今頃、攻殻機動隊Solid State Societyを見てみた。
なかなか面白かったなぁ。何回か観れそうだ。
ただ、108分じゃちょっと短いようで、展開が早過ぎる感があったな。

以下、とりとめのない感想。

【タチコマ】
前作のSAC2でタチコマが衛星ごと失われたので、
今回の9課にはウチコマが配備されていた。
フチコマかと思いきやウチコマだった。形は似てるのにね。
天然オイルを使っても個性がでていないようだけど。

片や素子の支援AIのタチコマには固有名が振られてて、
マックスとかコナンとかムサシとかロキとかつけられている。
誰がどの色なのかはわからんかった。
名前は漫画の攻殻機動隊2から取ってきてるみたいだ。

一応、後半では前作同様の体を使ってたけど。
こっちは全部青色で統一されてる。

【バトー】
今回のバトー君はひたすらサポート役。

【トグサ】
隊長さんになったトグサ君は携帯電話経由で電脳ハックされてた。
こんな世界になったらおちおち電話もとれませんな。

・自殺しようとしたときに使った銃ってマテバかな?
・背景の案内板の電脳小児科ってなに?
・トグサ自殺阻止後のバトーと素子との有線のときのシーンに出てきた
 TOGUSA MEGA GAIZ NEURO COMPUTERってのは
 ネットを漂流していたデータから組み上げられたものかな?
・トグサの娘さん、名前がなかった。

【素子】
スタッフロールで草薙素子(クロマ)ってなってたが、
えーっと、どれがクロマだったんだろう。
まぁどれでも義体が違うだけで本体は同じだからどれでもいいが。

今回の素子の義体は全て遠隔操作みたいにみえるし、
本体はどこにいるのやら。
本拠っぽい部屋が描かれているシーンはあったが、
たしかそこには3人というか3体いたな。

物語の最後のほうでコシキが自殺するが、
その直後に草薙がコシキに接続した際に
コシキがようやく草薙と有線できたとかいっている。
目的は草薙との有線だったようなので、
有線後から意味消失するまでの会話をしている間に融合をしたのかな?

というのも、漫画の攻殻機動隊2の荒巻素子(素子11)がSSSの草薙素子で、
アンタレスやスピカのような他の同位体(傀儡廻し)がコシキを操っていたように思えるからだが。
あれ、逆か!?

【監視カメラ】
作品中のところどころのシーンに監視カメラから見た視点が挟まっていたが、
傀儡廻しか草薙素子かどっちが見ている視点だったのだろう。
どっちが見ていたとしても特に解釈に困ることはなさそうだし。
びみょーだ。

2006/11/13

( 続 )500GB HDD

買ってきたHD-HC500U2は箱に白色の丸いシールが貼ってあった。

色々と調べたところ、同じモデルでも、緑色の丸いシールの場合は
日立製(HDS72505 0KLA360)のようだ。

問題はディスクによって発生する熱が全く違っているところにあって、
Seagate製の場合はほとんど発熱がないのに、
上記の日立製の場合は体温以上に熱くなるってことだ。

ディスクによってここまで違うとは…

2006/10/14

500GB HDD

Buffalo HD-HC500U2をヨド○シで買ってきた。ついでにファンも。
結構安くて\30780だった。
入っていたHDDは ST3500641AS (Seagate製)だった。
毎回毎回、入っているHDDのメーカーが違うのう…

2006/09/24

気球で撮影

気球で丸い地球を撮影したそうだ(やじうまWatchで紹介されてた)。
http://www.srcf.ucam.org/~cuspaceflight/nova1selected/index.html

2006/09/16

Wii の発表

Wiiの宣伝 by 任天堂社長。約39分。
http://www.irwebcasting.com/060914/01/index.html

なかなかうまい。高橋メソッドっぽいか!?

さらにスライドと社長の映像が別なので、
広帯域だけでなく狭帯域でも十分見れる。

2006/09/02

OpenOffice で数式にアンチエイリアスをかけるには

OpenOfficeを使って数式を見ると、PCによってはぎざぎざの表示で
見難い場合がある。これの原因がわかったのでメモ。

綺麗に表示するには、
=================================
画面のプロパティ

デザインタブ

効果

「次の方法でスクリーンフォントの縁を滑らかにする」
にチェックを入れる。
=================================
とするとよい。

そうすると数式にアンチエイリアシングが適用されて、
綺麗に表示される。

2006/08/27

knoppix5 でapacheを動かす

とりあえず、次のところで説明がある。
http://www.aichi-c.ed.jp/apecknoppix/base34r2/knoppix_chap7.htm

上記を参考にして作業を行ったログが以下。
(knoppix自体はVirtual PC内でHDDインストールをしてある。)

1. rootに入る

2. root権限で、
# /etc/init.d/apache2 start
を実行。
すると、
Starting apache 2.0 web server ...apache2: Could not determine
the server's fully qualified domain name, using 127.0.0.1 for
ServerName
と出力される。

3. なにはともあれ、動いているかをFirefoxで確かめてみる。
URLに http://127.0.0.1 といれてみた。
すると、
Welcome to Your New Home in Cyberspace
とかいうタイトルのページが表示された。
何も設定していないときのデフォルトのページのようだ。

4. ホームディレクトリの下にpublic_htmlディレクトリを作成する。

5. public_htmlの中に、index.htmlを作成する。
内容は例えば、
apache test
などと書く。

6. http://127.0.0.1/~[user name]
でアクセスでき、ブラウザにapache testと表示される。

ゲストOS(というかVirtual PC)に割り当てられている
IPアドレスを指定すれば、ホストOSのブラウザでも
ゲストOSのブラウザでも見れる。

意外と簡単に動いたなぁ。
でもセキュリティーとかは?。

まぁ、ローカルPCでしか動いてないし、
問題がおきても、ゲストOSが壊れるだけだし。

2006/08/22

because とsinceとasの使い分け

http://tottocobkhinata.cocolog-nifty.com/bizieizakkicho/2005/08/becausesinceas_fb50.html
とか
http://blog.goo.ne.jp/takadono2004/e/6b43aa10a93cf7d850c3967c0d997a47
とか。

簡単には、becauseは聞き手がまだ知らない情報のときで、
文の後で使われるらしい。

で、sinceやasは聞き手がすでに知っている情報のときで、
文の前で使われるらしい。

ふーん、そーなんだ。

2006/08/19

touch-driven computer screen,

小鳥ピヨピヨさんのblogで紹介されていた、タッチスクリーンのデモです。
http://tedblog.typepad.com/tedblog/2006/08/jeff_han_on_ted.html#

1点だけをポイントできるタブレットではなく、
2点以上を同時にポイントできるところがミソ。

画像の操作がとてもしやすそうです。
拡大・縮小・回転をポイントした2点を広げたり縮めたり
回転させたりすることで行います。

3次元方向の回転もできて、3点をポイントして、最初の2点を
回転軸にして、もう1点を押すことで、押した点が遠くなるように回転します。

デモ映像を見る限りスムーズに操作できそうです。

それにしてもJeff Hanさんのこのデモ、見せ方がうまいです。
見習いたいもんですな。

〜補足〜
ちなみに動画ファイルがmp4なので、そのままではMSのmedia playerでは
きっと見れません。3ivxのインストールしてもだめです。
結局、VLC media player を使えば見れます。

2006/08/12

バッファ口ーの外付け HDD

外付けHDDを買ってきた。
おんなじ型番HD-H300U2なのだが、入っているHDDが違っていた。
しかも、今年の3月に買ったのに入っていたのが
WDC WD3200JB-00K
なのに、
今回買ったのに入っていたのは
WDC WD3000BB-00K
だった。

そりゃまぁ、箱に書いているスペックを満たしているけどさ。
サイズは小さいし、BBはバッファは2MBだし、最悪だ。
その上、前は17800円だったのに、今回は18800円。
250GBにしとけばよかったか。

ヨド○シが古い在庫を出したのか、それともバッファ口ーが
採用するディスクを変えたのか、どっちかねぇ。