はじめてのHaskell

IDE環境の構築とHello world出力までの手順

  1. ghcをダウンロード(http://www.haskell.org/ghc/)してインストールする。今回はGHC 7.2.1を使いました。
  2. Eclipceをダウンロード、インストールと実行
    1. http://mergedoc.sourceforge.jp/からEclipse 3.7をダウンロードします。Platform 、Ultimate、JavaC/C++PHPなどの種類がありますが、Ultimate、Javaのどちらかをダウンロードしてください。
    2. zipファイルを任意のディレクトリに展開する。今回は"C:\Haskell"に展開します。
    3. "C:\Haskell\eclipse\eclipse.exe"を実行して、Eclipceを起動する。
  3. EclipceFPをインストール。EclipceFPはEclipce上でHaskell開発を行うためのプラグインです。
    1. Eclipceを起動し、メニューバーからヘルプ⇒新規ソフトウェアのインストールを選択する。
    2. 開かれたインストールウィンドウの作業対象に"http://eclipsefp.sf.net/updates"を入力し、"追加"ボタンを押す。
    3. 開かれたリポジトリの追加ウィンドウの名前入力欄に"EclipceFP"と入力し、"OK"ボタンをを押す。リポジトリの追加ウィンドウが閉じた後に自動でEclipceFPのサイトに接続し、インストールするファイルの情報をダウンロードします。この処理には少し時間がかかります。インストールウィンドウの名前やバージョンと書かれたテーブルに"Functional Programming"と表示されていれば次に移ります。
    4. Functional Programmingの左のチェックボックスにチェックを入れ、"次へ(N)"ボタンを押します。
    5. インストールされる項目の確認が表示されます。"FP: Haskell support for Eclipse"があることを確認後、"次へ(N)"ボタンを押します。自動でインストール作業が開始されます。
    6. ライセンス確認を求められます。ライセンスに目を通して同意できるならば、"使用条件に同意します(A)"をチェックし、"完了(F)"ボタンをを押します。
    7. インストール作業中にセキュリティー警告ウィンドウが表示されますがOKを押してください。
  4. Haskellプロジェクトを作ってみる
    1. Eclipceを起動し、メニューバーからファイル⇒新規⇒プロジェクトで新規プロジェクトウィンドウを開く。
    2. HaskellフォルダのHaskell Projectをダブルクリックする。
    3. プロジェクト名を設定する。今回は"HelloWorld"とする。
    4. "完了(F)"を押してプロジェクトを押すとプロジェクトが作成される。
    5. プロジェクトのsrcフォルダ内にあるMain.hsを選択する。(このファイルがソースファイル)
    6. 以下のようにファイルを記述する。 main = print("Hello world.")
    7. メニューバーから実行(R)⇒実行(R)を選択。次を実行ウィンドウでGHCi sessionを選び、"OK"ボタンを押す。
    8. コンソールに下記のような表示がされている。

GHCi, version 7.2.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
[1 of 1] Compiling Main ( C:\Haskell\workspace\HelloWorld\src\Main.hs, interpreted )

C:\Haskell\workspace\HelloWorld\src\Main.hs:1:1:
Warning: Top-level binding with no type signature: main :: IO ()
Ok, modules loaded: Main.
*Main>

ここでコンソールに

*Main> main(+Enter)

を入力すると

"Hello world."

と出力される。

以上でHello worldまで完了。

subversion インストール

バージョン管理がほしくなったのでUbuntu10.04にsubversionを導入

Subversion本体とツール郡のインストール

$ sudo aptitude install subversion subversion-tools

Apache2とsvn用モジュールをインストール

$ sudo aptitude install apache2 libapache2-svn

dav_svn.confの設定を行う。

$ sudo vi /etc/apache2/mods-enabled/dav_svn.conf


SVNListParentPath on
DAV svn
SVNParentPath /home/svn/svn

今回はsubversion用のディレクトリを/home/svn/svn(事前に作成済み)にしています。
設定をしたら、Apacheを再起動します。

$ sudo /etc/init.d/apache2 restart

ブラウザから
http:///svn/
にアクセスしてCollection of Repositories(リポジトリ一覧)とでればOK。
リポジトリ一覧はリポジトリは作っていないので、空の表示になる。

テスト用のリポジトリ作成

$ cd /home/svn/svn
$ sudo svnadmin create test
$ sudo chown -R www-data.www-data test

http:///svn/test/
アクセスできればOK

http:///svn/
にアクセスするとリポジトリ一覧にtestが追加されています。

Cassandraインストール

Cassandra wikiの通りに設定すれば終わるのだけど一応メモ
Cassandra wiki
Cassandra wiki 公式debianパッケージ説明
Cassandra wiki Configの説明

環境は以下の通り
OS:Ubuntu10.10
Cassandra:0.7


まずはCassandraを動かすためにjdkをインストールする。

$sudo apt-get install openjdk-6-jdk

続いて、Cassandraをインストールするためにsources.listに設定を追加する。

$sudo gedit /etc/apt/sources.list

下記の設定を追記する。

deb http://www.apache.org/dist/cassandra/debian unstable main
deb-src http://www.apache.org/dist/cassandra/debian unstable main

aptをアップデートをしたいのだが、

$sudo apt-get update

実行するとすると

W: GPG エラー: http://www.apache.org unstable Release: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY F758CE318D77295D

と出力され、公開鍵が設定されていないことが分かる。

$gpg --keyserver pgp.mit.edu --recv-keys F758CE318D77295D
$gpg --export --armor F758CE318D77295D | sudo apt-key add -

公開鍵を設定を設定します。

aptをアープデートしてCassandraをインストールします。

$sudo apt-get update
$sudo apt-get install cassandra

これでインストールは完了

次に基本的な初期設定をする。
Cassandraをスタートさせる。

$sudo /etc/init.d/cassandra start

Schema構造情報を読み込ませる。

$schematool localhost 8080 import

cassandra-cliを使ってCassandraの状態をを確認する。

$cassandra-cli

>connect localhost/9160;
>show keyspaces;
Keyspace: Keyspace1:

と出力されれば初期設定完了

>exit;

でcassandra-cli を終了します。

VNCによるリモートログインまとめ

Ubuntu10.10でのVNCによるリモートログインの方法。
インストール時のGDMではXDMCP接続ができないので、まずGDMのバージョンアップをします。
https://launchpad.net/ubuntu/+source/gdm/
で最新版のgdmをダウンロードし、Ubuntuソフトウェアセンターからアップグレードする。今回は2.32.0-0ubuntu3を使いました。
GDMでXDMCPを有効にするため、custom.confを設定する。custom.confがない場合は新規に作成します。

$sudo gedit /etc/gdm/custom.conf

custom.confに以下を付け加える。

[xdmcp]
Enable=true

編集したら保存し、gdmを再起動する。再起動するには Ctrl-Alt-F1 でシェルプロンプトに移り、

$sudo /etc/init.d/gdm restart

で再起動する。再起動するとGUI画面に移るので、Ctrl-Alt-F1でシェルプロンプトに戻り、

$exit

でログアウトする。ログアウトしたら Ctrl-Alt-F7で X グラフィックのGUI画面に戻る。
gdmの再起動がうまくいできないならばPC自体を再起動すればよい。

次に、vnc4serverとvnc4serverをアクセスがある度に起動させるためのxinetdをインストールする。

sudo apt-get install vnc4server xinetd

vnc4serverでのパスワードファイルを作る。パスワードは短すぎると怒られます。

sudo vncpasswd /etc/vncpasswd
sudo chown nobody /etc/vncpasswd
sudo chgrp nogroup /etc/vncpasswd

xinetdの設定ファイルの記述。

sudo gedit /etc/xinetd.d/xvnc

今回は下記のようにする。

service Xvnc
{
type = UNLISTED
disable = no
socket_type = stream
protocol = tcp
wait = yes
user = nobody
group = tty
server = /usr/bin/Xvnc
server_args = -inetd -query localhost -geometry 800x600 -depth 24 -once -DisconnectClients=0 -desktop vboxpc -NeverShared PasswordFile=/etc/vncpasswd
port = 5900
}

xinitdを再起動する。

$sudo /etc/init.d/xinetd restart

ここまででVNCクライアントからの接続はできるようになるがショートカットキーの初期設定がおかしく?、d キーが全てのウィンドウを隠すショートカットに当てられているので直します。(直さないと小文字のdが押せない状態です。)
VNCでログイン後、上部のパネル(Windowsでのタスクバー)から
[システム]⇒[設定]⇒[キーボードショートカット]
でキーボードショートカットウィンドウを出し、スクロールして「すべての通常ウィンドウを隠してデスクトップにフォーカスを移す」の項目を探す。
ショートカットキーがd キーになっているならば選択し、バックスペースで無効にする。
ログアウト(VNCクライアントの切断ではない)をし、再度ログインすればショートカットキーの変更が適応される。
日本語入力の切り替えは、半角/全角キーが使えないので代用手段として標準設定ならばCtrl+スペースで切り替えができます。

Ubuntu HDD 追加

SSDの容量ではNASの運用に対応できなくなってしまったのでHDDを追加

HDDを設置した後、認識されているかチェック

$sudo ls -l /dev | grep sd

lrwxrwxrwx 1 root root 4 2011-01-09 04:16 root -> sda1
brw-rw---- 1 root disk 8, 0 2011-01-09 04:16 sda
brw-rw---- 1 root disk 8, 1 2011-01-09 04:16 sda1
brw-rw---- 1 root disk 8, 2 2011-01-09 04:16 sda2
brw-rw---- 1 root disk 8, 5 2011-01-09 04:16 sda5
brw-rw---- 1 root disk 8, 16 2011-01-09 04:16 sdb

sdの後にアルファベットが続き、数値のいないものをチェック。
数値のついているものはパーティションが分けられた結果なので、新規にHDDを追加した場合、パーティションの存在しないものが新規のHDDとわかる。(今回はsdb)
追加したHDDのパーティションを作成する。

$sudo fdisk /dev/sdb

fdiskの指示にしたがえば簡単にパーティションを分けられる。
パーティションを分けたらフォーマットをする。

$sudo mkfs -T ext4 /dev/sdb1

パーティションをマウントするディレクトリを作成し、マウントする。
今回はNASということでexportをルートに作り、そこにマウントする。
きっと一般的出ない設定のはず

$sudo mkdir -p /export
$sudo sudo mount -t ext4 /dev/sdb1 /export

マウントできたかは以下で確認できる。

$sudo df -h

最後に自動的にマウントされるようにfstabを書き換える。

$sudo gedit /etc/fstab

最後の行に以下を追加

/dev/sdb1 /export ext4 defaults 1 1

再起動してマウントできていれば、設定完了

VirtualBox IO ACPI関係のメモ

VirtualBox3.2.8 OSE で確認しています。
・IO ACPIはVM上でマルチCPUを使う際に必須のオプションになる。VirtualBox3.2.8では各VMから[Setting]->[System]->[MotherBoard]から設定できる。
WindowsXPではACPIを使うかはインストール時に決めておいたほうが無難、後から変更するのは難しそう
WindowsXPリモートデスクトップを使用した場合、ACPIによるPowerOffはできない。リモートでVMを終了させたい場合はAlt+Ctrl+Endからシャットダウンを選び、終了させる。