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にしとけばよかったか。

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

2006/07/23

台風への眼

台風のアーカイブ情報が公開されている。
http://agora.ex.nii.ac.jp/digital-typhoon/

さらに、台風にトラックバックできるようだ。
http://eye.tc/