ページ

2011年4月29日

Ubuntu 11.04をインストール

Ubuntu 11.04がでたので、家のiMacのVMWare上にインストールしました。11.04はベータ版を会社のマシンの仮想マシン上で動かしていたので特に感想はありませんが、やっぱり、だんだんMacみたいになってきているな・・・、と感じます。それがいいか悪かは、人によって違うようですが・・・。

さて、OSのインストール自体は普通です。そのあとやったことたちです。

まず、VMWare Fusion3上にインストールしたのですが、FusionはLinuxをゲストにしているときに3Dが有効になりません。Parallelsの最新は対応しているらしいので、VMWareもがんばって欲しいところです。11.04の売り文句にunityの導入がありました。unityの大きな特徴の一つはメニューバーがウィンドウの中ではなく、パネルに格納されます。でも、unityは3Dが使える環境でないと有効になりません。つまり、VMWareで使うときは素の状態ではメニューはパネルではなく、ウィンドウの中にいます。それでも困らないのですが、11.04を使っている感じがしません。そういうときは、sudo apt-get install unity-2dのおまじないを唱えると解決します。これで、Macみたいにメニューがパネルに格納されます。おっと、おまじないを唱えた後に、パネルに「インジケータアップレット・アプリメニュー」を追加するのを忘れないで。

さて、その後いろいろやるのに、vimがいないとつらいです。vimっていうのは、設定ファイル編集エディタです。きりっ。なので、sudo apt-get install vim-noxです。さて、そのあと、/etc/apt/source.listでcanonicalのソースを有効にして、みんな嫌いなsun-java6-jdkをインストールします。インストールができたら、sudo update-alaternatives --config javaで使用するJavaを切り替えます。

メールはEvolution?何それ? おいしいの?ということでsudo apt-get install thunderbird-locale-jaでthunderbirdを召喚します。Firefoxは4.0がインストールされているのでそれでもいいのですが、Chromeをダウンロードしてインストールします。Eclipseとか、Oracleはまあ、別の機会に。

その後、ツールバーがでかかったり、文字が表示されているのが嫌なので、それを設定します。昔は普通のUIからできたと思うんですが今はgconfから直接いじらないといけません。gconf-editorを起動して、/desktop/gnome/interfaceのtoobar-icon-sizeをsmall-toolbarに、toolbar-styleをiconsに指定します。これでツールバーはちっちゃく、アイコンだけになりました。

他にもやったような気がしますが、まあ、そんなところです。

でわでわ

ついでに、この画像みたいにウィンドウの右下に無様な四角でウィンドウの大きさを変えるつまみがあります。こういうところがまだまだというか、やっつけなんだよな・・・。

2011年4月28日

Chrome 11が出たのでHTML5のSpeech API

今日は何かと忙しい日ですが、Chrome 11がリリースされました。いろいろ変わったところもあるようですが、Speech APIが搭載されたとよく聞きます。Speech APIはGoogle Translateで既に利用可能だそうです。早速試します。僕が試したときは、日本語は無理でした。英語なら入力できます。まわりを気にしながらしゃべりかけてみると・・・、僕の発音ではちゃんと認識してくれません。悲しいです。それで、英語教材の音を認識させてみると・・・、やっぱりちゃんと認識してくれません。ひょっとして文のように長いものだとダメ?と思って単語をひっそりとささやくと・・・、今度は認識してくれました。Googleは優秀ですね。

さて、Google Translateのhtmlを見てみると、inputタグにspeechとx-webkit-speechという属性が二つ書いてあります。残念ながらspeechていう属性はまだ飾りのようです。まだ、webkitの独自機能なんでしょうか?まあ、Speech API自体はそんなに興味がないのです。langは音声認識エンジンの言語なんでしょう。langがないとブラウザのロケールに応じて音声認識エンジンを変えてくれるみたいで、日本語もちゃんと認識してくれました。

で、こんなhtmlを使って試してみました。マイクのアイコンがinputのフィールドに出現して、それをクリックすれば認識してくれます。とっても簡単ですね。でも、やっぱり、ちょっと試してみるのが恥ずかしく、大昔の音声認識関係の仕事の恥ずかしいことを思い出すので、もう、近づかないことにします。

<html>
<body>
<input type="text" speech="speech"
  x-webkit-speech="x-webkit-speech" size="20" />
</body>
</html>

それから、speechに対応しているタグは今のところinputタグだけらしいです。textareaは「改行とかどうするんじゃ?」と言うことらしいです。

でわでわ

2011年4月27日

MongoDBの文書保存時のsafeオプション

MongoDBのドキュメントを保存するときはsafeと言うオプションがあります。これは、ドキュメントを保存するときにサーバ側で成功したかどうかのチェックを制御します。簡単にいっちゃえば、Falseの場合はドキュメントの保存時にリクエストを投げっぱなしにするので、データの送信までの時間しかわかんないと言うことです。デフォルトだとFalseになっています。僕のベンチマークのデータをみて@buzztaikiは「MongoDBとCouchDBの保存パフォーマンスの違いってこのオプションの違いで、実際は大差ないんじゃないの?」とdisります。なので、調べてみました。今回はinsertだけです。
グラフにするほどのことでもないですが、グラフにしました。やっぱり、グラフじゃ違いがよく分からないです。数値は、

  • memcache 0.2 m sec
  • MongoDB(No Safe) 0.2 m sec
  • MongoDB(Safe) 0.5 m sec
  • CouchDB 5 m sec


と言うことで、確かにsafeをTrueにすると約2.5倍遅くなります。memcacheとの比較で言えば、十分遅いです。けれども@buzztaikiがdisっていたほど遅くはなりません。やっぱり、CouchDBは遅いです。

@buzztaikiも僕もあんまりCouchDBは好きになれません。少なくともMongoDBを触った後はなおさらです。使いところはあるんですが、基本はキーをがんばって設計しないといけないんですが、それが多分予想以上に大変だと。
それから、MongoDBもキーによる検索はまともな速度ですが、検索条件を複雑にしていくと期待しているような速度では動いてくれないですね。

と言うことで、MongoDBが好きです。


2011年4月26日

CouchDBもベンチマークしてみた

MongoDBの方が好きなんですが、CouchDBのパフォーマンスも見てみました。viewを作るところとかのパフォーマンスは見ていないので、厳密な比較にはならないかもしれませんが、ある程度の傾向とか、感覚は分かると思います。CouchDBとか、MongoDBって何じゃ?と言う人は、ASCIIのHadoop & NoSQLを読めば分かるかも。今回はmemcached、MongoDB、CouchDBの3つについて比較しました。memcached、mondodbのコードは以前のものを使っています。

次のグラフが測定結果です。単位はミリ秒です。
データの追加はmemcacheやmongodbが0.2ミリ秒弱の時間です。memcacheはオンメモリなので当たり前ですが、mongoはディスクへの書き出しが遅延されているのでmemcacheに迫るスピードになっているのでしょう。それらに比べてCouchDBは5.4秒と30倍ぐらい遅いです。CouchDBはインストール後、設定をいじっていないデフォルトの状態です。ちょっと残念なぐらい遅いです。バルクインサートをすればもっと速度は稼げるとは思います。

次に検索スピードです。memcacheが0.2ミリ秒なのに対して、MongoDBが0.4ミリ秒強と2倍から2.5倍遅いという結果になっています。MongoDBのできることからすると、納得できそうな気になっていました。さて、今回の計測のメインディッシュのCouchDBです。グラフを見てもらえば分かると思います。えっ、わからない?じゃあ、拡大してください。数値は0.02ミリ秒でした。Memcacheの10倍速い?信じられません。別のPCで計っても大体一桁速いです。ちょっと驚異的です。viewを作るスピードは計測していませんが、もしかしたその辺に秘密があるのかも。

ということで、CouchDBはデータの追加はめっぽう遅いが、検索はサクサクだぜ!

2011年4月8日

Oracle 11.2 Expression Edition (beta)

会社では製品のストレージにOracleを使っています。Oracleを選択したのはいろいろな事情があります。その選択が正しかったのか間違っていたのかはまだ分かりませんが、なんだかんだ言いながら、素敵なバグを踏みつつ抱腹前進をさせています。そんな大好きなOracleですが、今までは10gを使っていました。でも、よく分からないメンテナンス期間が今年の夏に終わります。世界はやっと11gに入れ替わります。会社の製品はとっくの昔に11gに対応していましたが、顧客の都合で10gもIE6のようになかなか無くならないかもしれないし、Chromeのように・・・。

さて、11gになっての不満というか困ったことは、製品は正式なOracleを使っていましたが、開発は10g Express Editionを使うことも多かったのです。無料なので・・・。11gはExpress Editionがでる気配もなくずっと悲しい思いをしていたり、今後もするんだろうとあきらめていたら、Express Editionのベータ版がでているらしいです。会社の中にはこっそりインストールしていた人がいます。

その人、仮にたばたんとしておきましょう、たばたんが言うには、インストール後におまじないをかけないと、半年後にインストールしたOracleにつなげなくなるそうです。ベータ版の罠なのか、ベータ版ならではのバグなのか、真相は闇の中です。
さて、おまじないですがsqlplusでsysユーザで入って、次の真言を唱えるらしいです。たばたんはどうやってこれに気づいたのでしょう?きっとオタクです。

alter system set sec_case_sensitive_logon=FALSE scope=both;
alter system set audit_trail=NONE scope=spfile;

-- 製品版の場合、@?/rdbms/admin/undoaud というScriptを実行するが、β版には存在しないので直接入力
noaudit all;
noaudit all privileges;
noaudit exempt access policy;

-- 製品版の場合、@?/rdbms/admin/undopwd というScriptを実行するが、β版には存在しないので直接入力
ALTER PROFILE DEFAULT LIMIT
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_GRACE_TIME UNLIMITED
PASSWORD_LOCK_TIME UNLIMITED
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
/
でわでわ

2011年4月7日

CouchDBを始めてみる

MongoDBのほうが好みなのですが、CouchDBももっと触ってみないとフェアじゃないということで、しばらくはCouchDBで遊んでみます。CouchDBのアーキテクチャとかはまだ、あんまり調べてません。とりあえず、小手先の遊びだけです。

MacなのでHomebrewで普通にCouchDBをインストールできます。今は1.0.2がインストールされました。それからJavaScriptでCouchDBを操作してもいいのですが、このあと計測するときに環境をそろえた方がいいのでPythonを使います。jsonを直接扱うほど若くはないので、Wikiのページの一番上にリストされていたcouchdbkitを使います。couchdbkitはpipでインストールしました。インストールが終わると、counchdbを起動します。

さて、Pythonです。まずは、データベースを作ります。
import couchdbkit

server = couchdbkit.Server("http://localhost:5984")
db = server.get_or_create_db("test")

これでtestというデータベースが作られたはずです。次に文書を保存します。保存するにはdb.save_doc関数をコールします。ipythonはdb.save_doc以外にもsave_docsがいることをおしえてくれます。それからbulk_saveっていうのがいます。名前からどういう機能か想像がつきますね。なので、説明しません。

save_docには
save_doc(self, doc, encode_attachments=True, force_update=False, **params) method of couchdbkit.client.Database instance
    Save a document. It will use the `_id` member of the document
    or request a new uuid from CouchDB. IDs are attached to
    documents on the client side because POST has the curious property of
    being automatically retried by proxies in the event of network
    segmentation and lost responses. (Idee from `Couchrest `)
    @param doc: dict.  doc is updated
    with doc '_id' and '_rev' properties returned
    by CouchDB server when you save.
    @param force_update: boolean, if there is conlict, try to update
    with latest revision
    @param params, list of optionnal params, like batch="ok"

    @return res: result of save. doc is updated in the mean time
と言うことらしいです。最初の引数には辞書で保存したいデータを渡せばいいようですね。と言うことで、

doc = {"key": 1, "value": "value 1"}
db.save_doc(doc)
で保存します。とりあえず、保存したデータが本当に保存されているか確認したいですね。ということで、viewを経由して確認します。viewって何?と言うのも知っているという前提で・・・

print db.documents().all()
で、とりあえず確認できます。出力は困難でした。
[{u'id': u'30149720151e9b6c0629b470ad1e876d',
  u'key': u'30149720151e9b6c0629b470ad1e876d',
  u'value': {u'rev': u'2-7fc14c5ecc566e386a36f7717a84c8d6'}}]

こっから先はまた今度。

保存がどれくらいの速度なのかを知りたかったので、save_docの時間を計測すると、僕のiMacでは大体2ミリ秒から3ミリ秒でした。一個ずつsave_docを呼ぶとあんまりパフォーマンスが出ないかもしれないです。save_docsとかbulk_saveでまとめてやると、一件あたりの保存スピードは上がるかもしれません。

以前のmongodbの保存スピードも同じぐらいだったので、そんなものなのかもしれません。Pythonのせいなのかもしれません。


でわでわ

2011年4月2日

VMWareでEclipseを動かす

VMWareは、去年キャンペーンで10ドルで購入しました。円高なので、実質800円ぐらいです。とっても安いといえば安いんですが、Windows版やLinux版が実質無料であることを考えるとMac版は高いですね。気にならないレベルでしたが・・・。さて、そのVMWare上にUbuntu 10.10を入れて使っていました。Compizが有効になりませんが、それはどうでもいいことです。とある事情からそのVMWareのUbuntuにEclipseを入れて使っています。なぜ、Macに入れないかって? システムがばっちくなるからです! と言うのは嘘です。これを機会に会社の開発環境を移動できるようにすることと、何か壊れても簡単に復元できるようにです。

EclipseはEclipseのサイトに行って「Eclipse IDE for Java EE Developers」をダウンロードします。Javaってついています。そうです。僕はJavaっていうのを扱う会社で働いています。そして、ぼくはアプリケーションは大体ホームディレクトリのApplicationsというディレクトリを作ってそこに展開しています。それからSunのJDKも段ロードして同じようにApplicationsディレクトリに保存します。JavaのディレクトリにPATHを通して、eclipseの起動スクリプトを書きます。まあ、カレントディレクトリを変えとかないと、変なところにディレクトリが作られたりしてぐちゃぐちゃになることがあるからです。

その後、間違ってもSubclipseをインストールしてはいけません。SubclipseはEclipse用のSubversionクライアントですが、ちょっと機能が貧弱です。最低限の機能はあるので、人によっては十分なんですが僕にとってはストレスフルです。なので、Subversiveというクライアントを使います。こっちは「Install New Software」のダイアログのWork withにsubversiveって打てばすぐにインストールできます。インストールしたらPreferencesのTeam/SVNを選択すれば必要なコネクターをさらにインストールしてくれます。

それから、会社のコードの中にはPythonのコードもいます。EclipseでPythonといえば、PyDev・・・。まあ、そんな人をインストールしてもいいですね。でも、会社はEmacsの人たちがうじゃうじゃいます。特に若者ほどEmacsを使っちゃったりしています。僕も若者なので、Pythonのコードを書くときはEmacsを使います。いや、大昔からの風習を抜けられないともいうのですが・・・。PyDevインストールしてもいいんじゃない?でも、僕はEclipseは嫌いです!ちなみに、Eclipseは遅いと思っていましたが、おうちだと速いです。

あとは、OracleとかTomcatとかRabbitMQとかMemcachedとか、いろいろインストールするんですが、これ以上は企業秘密です。嘘です。めんどくさいだけです。

それから、Eclipseを使っているとCtrl-Shift-RのキーがMacに奪われてしまいます。正確にはMacのIMEにキーイベントが横取りされてしまいます。Ctrl-Shift-Rのキーは今まで押したことがなかったので、IMEのこのショートカットは無効にします。

それから、やっぱり長く使っているとVMWare Fusionのデフォルトの設定だとCmd+VとかがCtrl-Vとかにこっそり割り当てる設定になっていて、中途半端にあわせなくてもいいかな〜ということで、VMWareの環境設定で無効にします。それからCtrl-クリックがマウスの右ボタンに割り当ててくれていますが、これのせいでリストの複数選択ができません。その前にトラックパッドには右ボタンがついています。なので、この機能は無効にします。

それからユニティで一時期使っていましたが、Cmd-Tabでアプリを切り替えるときにUbuntuのアイコンがあまりにもぼやけてかっこわるいのでユニティは使わなくなりました。そのかわり、Spacesで一つの領域をフルスクリーンで使っています。

そんなところかな?

でわでわ