2012年3月28日水曜日

ubuntuにruby-1.9をインストール

ちょっと入れてみたいOSSがあり、それがデータ作成にruby-1.9を使ってました。最初、ubuntu11.10にもrubyが入っていたのでいいと思ったら、どうもエラーがでます。よく見たら、force_encodingという関数が見つからない様子。調べてみたら、ruby-1.9から追加された関数らしい。
ubuntuのサーバにはruby-1.8までしかなく(調べてみると、大抵のディストリビューションがまだ1.8系らしい)、かといって既存のものをいきなり外して新しいのを入れるのもどうかと・・・(ruby使ってるツールがありそうで、最初に外したところでエラーでとまっちゃいそうな気がして) 調べてみたらrvmというコマンドがあるらしい。(ruby version managerというらしく、複数バージョンを使い分けられるらしい)ただデフォルトではrvmが入っていません。Ubuntuのサーバにはありました。

$ sudo apt-get install rvm

これでrvmが使えるようになりました。

$ sudo rvm install 1.9.2

こうすると/usr/share/ruby-rvm以下にソースをgetしてきて、展開しビルドしてくれます。とここまではいいんですが、どうもSSL2のところでエラーがでます。色々調べてたら、英語のページで同様の現象とその対策がありました。

/usr/share/ruby-rvm/src/ruby-1.9.2-p180/ext/openssl/ossl_ssl.c


// OSSL_SSL_METHOD_ENTRY(SSLv2),
// OSSL_SSL_METHOD_ENTRY(SSLv2_server),
// OSSL_SSL_METHOD_ENTRY(SSLv2_client),

100行目くらいにある上記の3行をコメントアウトしてしまいます。(いいんかい!という気もしますが、まあとりあえず外部接続に使う気はないんで)その後、ビルドできました。
ただ、バージョンがどうにもうまく切り替えれません。rvmをインストールすると、${HOME}/.rvmというディレクトリが作られ、その下に展開されるらしいんですが当該ディレクトリができていません。もう少し格闘しないといけなさそうです。

PS
ようやくわかりました。どうも/etc/profile.d/rvm.shを実行しないといけないようです。${HOME}/.rvm以下にスクリプトを展開するというものもあるようですが、ubuntuの現状だと/usr/share/ruby-rvm以下に展開されてしまい、そういう場合はrvm.shを実行しないといけないようです。rootになるとhomeに.bashrcがないので/etc/bash.bashrcが実行され、そこからrvm.shが実行されるんですが、通常ユーザーの場合は~/.bashrcがあるので、そこの最後に以下の行を追加しました。

source /etc/profile.d/rvm.sh

これでrvm関係の環境変数がセットされ、バージョンが切り替わるようになりました。というこで、やっと目的のOSSのインストールにかかれます。、

2012年3月21日水曜日

hadoop お試し

(何か操作を失敗したのか内容が消えてしまっていたので、記憶の限り簡単にメモしなおし)
最近話題の「ビッグデータ」のさわりを簡単に試してみたくなりました。

1.VMwareのイメージで試す
これが一番お手軽です。Yahoo! Cloud Virtual Machine Applianceここにubuntu8上に設定したhadoop-0.20があり、VMplayerを用意すれば簡単に試せます。ただシングルマシンの環境なのにセキュリティがばっちり入っていて、毎回kinitしないといけないのがめんどくさいですが。

2.Cloudera社のHP上からパッケージを落とす
Ubuntuなんか使ってる方だと簡単に環境を構築できます。リポジトリリストにCloudera社のものが入ってしまうので、通常の更新確認で若干遅くなったり、たまに反応がこなくなったりするのが玉にきずですが。(自分は結局外してしまいました)

どちらも同じサンプルプログラムが入っていて、MapReduceを実体験できます。(どうみても同じものにしか見えんw YahooでHadoop作った人が独立してCloudera立ち上げたせいなのかもしれません)当然、複数nodeの動作状態をモニタする機能もあります。(ブラウザで見ることができます)

(1)HDFSの状況を確認
HDFS上にできているファイルの確認用画面です。http://localhost:50070で見れます。(もちろんほかのマシンからでもOKです)

(2)MapReduceの動作状況の確認
今度はサンプルのPIを計算しているときの動作状況をモニタしてみます。http://localhost:50030で見れます。

最下段にRunしているジョブが表示されています。そこをクリックするとより詳細なMapReduceの状態がモニタできます。
これは見ていて非常に面白いです。ブラウザの表示を更新すると計算状況の進捗状態が直接わかります。

2012年3月18日日曜日

ubuntuの環境メンテナンス

しばらく電源を入れてなかったubuntuのマシンもメンテナンスしないと。
ちょっと久しぶりにnoSQL関係の性能を見てみたくなり(google leveldbです)、そうなるとboostいれないと、となります。素手でインストールしてもいいんですが、更新の手間やらC++のライブラリでほとんど採用されそうな状況でどうしようかとおもいましたが、Canonicalのパッケージにしときます。(現状、48ですがCanonicalは46でした。まあ、ちょっと遅れてますが、そのあたりはあきらめて。)
さて、この連休中にちょっとleveldbの性能をみてますか。(ちょっと、従来テキストベースでデータを読み込んでいたプログラムが、最近読み込むデータがGBクラスになってきて、こりゃnoSQL(KVS)の採用を考えないといけないなと・・・)
仕様を考えるセクションはComputer Scienceに詳しいわけではなく、使ってる状況を見てこちらから提案しないと互いにHappyにはなれません。

2012年3月17日土曜日

計算機のメンテナンス

最近、windows等で脆弱性に対する更新がまた多くなっています。新しい計算機が欲しいなあ~と考えてたら、家中のPCの更新すませとかないと(ウイルススキャンもやらないと、電源もしばらく入れてないのがあるし)と思いたち、休日の土曜日の午前中にマシンのメンテナンス。いや~、時間かかりますね。(ついでにいくつかはハードディスクの最適化もしとかないと)これで更にマシン増やしたら、面倒みきれないぞと考えてしまいました。(Macやlinuxのマシンもあるので大変です)

2012年3月5日月曜日

Android GUI開発-部品の配置

AndroidのGUIを作るのに、ボタンを並べますが大抵の例は「垂直方向」か「水平方向」ばかりです。垂直と水平を混在させるにはどうしたらいいんだろうかと調べていたんですが、やっとわかりました。Eclipseの開発環境のマウスだけでやる方法はわかりませんでしたが、部品はマウスで配置して、後はXMLを直接編集することでできました。main.xmlはこんな感じになります。(最初にボタンを5個配置して、赤字部分をテキストで追加し3個のボタンだけ水平に配置しました。部品の配置方向を最初に"vertical"としておき、3個だけインデントして"horizontal"と定義してあるところがポイントです。)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="A" />

    <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content">
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="B" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="C" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="D" />
    </LinearLayout>

    <Button
        android:id="@+id/button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="E" />

</LinearLayout>

エミュレータで実行してみると以下の様になります。

こんな感じになります。

2012年3月2日金曜日

Linux ファイルの最大オープン可能数

Linuxにおける、ファイルの最大オープン可能数を調べたのでメモしておく。

1.ファイルオープン数

# cat /proc/sys/fs/file-nr
1395 10 76503

3つの数字が表示されますが、
左から順番に、
・今までにオープンしたことのあるファイルの最大数
・現在オープンしているファイルの総数
・オープン可能なファイル数

なお、3個目のオープン可能最大数は以下のファイルで管理されている。
   /proc/sys/fs/file-max
これをシステム起動中に、rootでechoコマンドで書き換えてもいい。正式にはsysconfigを書き換えてリブート。

2.あるディレクトリ下のファイル数

上記と関係するが、プログラムである特定ディレクトリ以下のファイルをすべて開く処理がよくある。
そのとき上限にひっかかってないか調べるため、ファイル数を調べたいが、以下のコマンドでわかる。

$ find . -type f | wc -l