ページ

2008年10月29日

IBMのJVMにはPermGenがないのか!

SunのJDKを使ってアプリケーションサーバを動かしていると時々OutOfMemoryの例外が出てしまいます。ヒープのサイズを変えても(ヒープは余っているのに)メモリがたらなくなることがあり、それは大体、PermGenが足りないせいでした。SunのJVMでは-XX:MaxPermSize=256mのように指定することでPermGenのサイズをコントロールしています。

さて、IBMのJVMでもOutOfMemoryが発生しました。PermSizeを指定し忘れていると思ってJVMに上のオプションを指定して起動しようとすると「Unrecognized Option」と言って怒られます。IBMのマニュアルらしきものを見るとオプションはあるのですが、指定できません。このスレッドを読んでいると、SunのVMと違ってIBMのVMはPermSizeを気にしなくてもいい作りになっているそうです。

Or you can switch to a JVM that does not use a permanent generation (or doesn't use it to store class files) like the IBM JVM.
さて、このすれっどから、「クラスローダーがリークしている」とか、「SunのJVMのPermGen」のお話とかで、以前IBMの人が言っていたJVMを定期的にリロードしたいと言うのが少し分かった気がします。

2008年10月28日

Eclipseにpydevも入れてみた

EclipseはJavaの開発以外はほとんど使いません。簡単に言えば、Eclipseがあまり好きではありません。一番好きな開発環境はVisual Studioなのです。でもMacじゃ使えないし、JavaはVisualStudioでは使えないし、ぶつぶつぶつ。

なので、PyDevもついでにインストールしてしまいました。http://pydev.sourceforge.net/updates/をSoftware Updateのサイトに追加して、インストールします。めんどーなのでEclipseの再起動はスキップ。で、Preferenceを開いてPyDevの「Inerpreter - Python」でNewボタンをおして、pythonの実行ファイルを指定します。

あんまり必要性を感じないのですがpylintも入れます。コンソールで

$ sudo easy_install pylint

してから、PyDevの設定のpylintのLocation of Pylintでlint.pyを指定して、Use Pylintにチェックをつけます。これで、うごくんですよね。きっと。

多分、僕はJythonは使わないので、このぐらいにしておきます。

MacBookにEclipseもインストールしてしまった

会社の仕事は、主にJavaを使っています。Javaのいい悪いや好き嫌いは別として、Javaの開発環境としてはEclipseはとても便利です。以前のMacBook(白)はハードディスクの容量が足りなくてEclipseをインストールしたり、製品のソースコードをチェックアウトするのは厳しかったです。

新しいマクブクたんは当分容量は心配しなくても良さそうです。

Filesystem       Size     Used  Avail    Capacity  Mounted on
/dev/disk0s2     233Gi   80Gi  152Gi   35%          /
なので、Eclipseをインストールしました。Eclipseはここからダウンロードしてインストール。僕はメニューが日本語でも英語でも気にしないので、日本語化するやつはいれません。次にSubclipseをインストールします。Eclipseのプラグインの管理画面でhttp://subclipse.tigris.org/update_1.4.x を指定します。

うーん、Eclipse速い。初めてマクブクたんの速さを実感した瞬間です。

2008年10月23日

マクブクへインストールしたもの

新しいMacBookにインストールしたもの。

  • iWorks
  • xcode
  • SafariStand
  • Firefox + Firebug, Tab Mix Plus
  • CotEdit
  • TwitterPod
  • Python関連いろいろ
  • Microsoft Remote Desktop
  • Flip4Mac WMV
  • Skype
  • Google Earth
  • Parallels
  • Komodo EditとExtensionたち
ちなみに、僕はEmacs使いじゃなくってKomodo Edit使いになっています。

マクブクたん来た

キーボードが光る方のメモリー4G。

2008年10月21日

Python 3.0にみんなすぐに移行しようとしているのか?

Python 3.0で大きく変わる言語仕様」は全体の論調が,「Python3.0は言語仕様が変わるので移行が大変。なので,大きな混乱のもと」と言う感じです。なんだか,3.0がでたらすぐに移行しないといけない,移行したくないならPython使うな,みたいな(僕の受けた印象)。

これから新しいプロジェクトを始めるなら3.0を使うべきですね。

って,作ったものを稼働させるシステムにPython 3.0が入っていなかったらどうするのさ?いろんな事情を考えると2.xを使い続けることになるし,そんなにあわてて3.0を使う必要もあんまりないし。

で,Zope 3.0みたいなパターンもあるし,3.0は暖かく見守っていればいいと思うんだけど。で,えらーい人たちが移行したら検討を初めてもいいかな,と。

で,僕?多分,メインは2.xで3.xの環境も作るかも。でも,必要なモジュールが対応しないと何もできないので,やっぱり,何もしないかな?

ちなみに僕は言語についてはかなり保守的です。

2008年10月20日

出荷日

出荷日:: 2008/10/20 配送業者: Eagle ASIA PACIFIC HOLDINGS

明日には届くか!?ウギャー。ちなみにお届け予定日は23日。

ブラッディ・マンデイを見た

週末に「ブラッディマンデイ」の1話と2話を見ました。一応マンガでは読んでいるのですが,主人公がカッコいいし,音弥が仮面ライダー電王だからいいらしいです。

Pythonがでているとかはどうでもいいですが,WindowsのPython使いはクラッカーの危険性があるということでいいんでしょうか?でもって,USBメモリにLinuxを入れている人は危ないと・・・。

で,ウィルスをばらまこうと言うドラマですが,それを見たせいなのか,主人公がクラッカーなせいなのか,週末風邪をひいてしまいました。馬鹿は風邪を引かないと信じていたので,僕は馬鹿じゃなくなったと言うことでしょうか?でも,久しぶりだった。

出荷準備中

「出荷準備中」になっていました。
今週かのう?待ち遠しいのう。仕事が手につかないのう。

2008年10月16日

MacBookのいらないもの

MacBookのDVDドライブですが,いつも思うのは,「いらねー」。ここにメディアを突っ込んだのがLeopardをインストールしたときだけです。それだけです。MacBookではCDをリッピングしたりしないし,映画を見ることもありません。Airだけじゃなく無印も無くすべきです。オプションか外付けがいいです。今時ソフトのインストールをCDからするだなんて,ほとんどないです。

それから,有線LANのポート。ここにケーブルを突っ込んだことはありません。ほとんどが無線LANです。滅多に使わないもののために穴を開けっ放しにしておくのはもったいないです。

それから,Firewireですが,これ,なんのことだか僕には分りません。わからないのでいらないです。

でも,新しいMacBookの光るキーボードは重要です。僕は薄暗い部屋で作業するのが好きなので,とても素敵なアイテムです。光るCPUクーラーとか大好きです。

2008年10月15日

Byline 2.0が凄いらしいので買ってみた

Byline 2.0が凄いらしいので,買ってみました。もともとGoogle Readerを使っていたので,Google Readerと同期ができるのは魅力的でした。でも,1.0だとオンラインのGoogle Readerより機能が遥かに劣っていたことと,それでいて1200円もするので,買う気がしませんでした。

2.0はしばらくは450円だそうです。300円ぐらいであればもっといいのに・・・。で,機能的にもまあ,いい感じで,Google Readerよりはさくさく動くし,使い易いので満足です。

この手のソフトはTouchとか使った場合にいいものだと思っていましたが,実際にiPhoneで使ってみても,データが手元にあると快適に動く(3Gはちょっと遅いのかも,もしくはSafariやそのJavaScript)ので,今までの考え方が間違っていたかもしれません。

でも,データの同期中は操作がめちゃくちゃ重くなるのが難点。

2008年10月14日

金沢動物園は意外と面白いかもしれない

週末に金沢動物園に行きました。当日に突然行こうと決めたので,実はあまり期待していませんでした。横浜にはズーラシアとか有名な動物園があるし,かなりしょぼい動物園を想像していました。でも,思ったよりいい感じかもしません。

コアラがいます。コアラは枝から枝へジャンプすることがあります。地上をのそのそ歩いているコアラは見たことがありますが,ジャンプするコアラは初めてです。それ以外の動作は鈍いですが。
カワセミという鳥がいます。お昼時はこのとりの餌の時間です。餌は生きた金魚です。小さな鉢に生きた金魚が入っています。カワセミはそれを捕獲して食べています。くちばしにつまんだ金魚がぴちぴちしています。子供は衝撃を受けています。

それ以外にもとてつも長いローダー滑り台があります。お尻に敷くものがないと,すべったあとお尻がかゆくなります。700円でお尻にしくものを売っています。

景色はいいです。房総半島が眺められます。
かなり広くて起伏が激しいです。なので、疲れます。

2008年10月10日

大分は日本です

まっちゃんに,一緒に大分行こうと誘ったら,「パスポートないから無理です」。

って,大分は日本です。パスポートいりませんから。

今度は一年続くのか?

そういえば,
日曜からガンダムが始まっています。
今回は1年間続くのでしょうか?

そういえば,
前々回は,途中で主人公が変わったし
前回は9ヶ月ぐらいでうちきられたし

今回は・・・。

でも見てしまう。

2008年10月8日

SMTPのRFCが新しくなっとる

SMTPのRFCが新しくなっとる。Internet Message Formatも。jpcertによると,


RFC 5321 では IPv6 への対応や、spam への対応に関する記述が追加されています。例えば、MUA からのメール送信に Submission ポートの使用を推奨しています。またその他、フォーマットやプロトコルに関してより厳格に記述するなどの変更がなされています。

スレッドとプロセスのできるまでの時間を比べる

昨日のエントリで,multiprocessingの方がthreadよりパフォーマンスがよいと言うお話でした。ただし,昔ながらの言い伝えによると,プロセスの生成はスレッドより遥かにコストがかかる処理です。どれくらいのコスト差があるのか,比較してましょう。テストに使ったスクリプトは次のものです。

import time, sys
import thread
from multiprocessing import Process

def doIt(start):
end = time.time()
print end - start

if __name__ == "__main__":
if len(sys.argv) > 1 and sys.argv[1] == "thread":
thread.start_new_thread(doIt, (time.time(),))
time.sleep(1)
else:
Process(target=doIt, args=(time.time(),)).start()

doIt関数が実行され始めるまでの時間です。これは実際にはプロセスやスレッドの作成のための正確な時間がでるわけではないですが,大体の目安にはなります。次のテーブルはスレッドによるものとmultiprocessingのものの時間(秒)です。
スレッドmultiprocessing
0.00019693374630.0215649604797
0.00020098686210.0210480690002
0.00069308280940.0213701725006
0.00007104873650.0214710235596
0.00031495094290.0205829143524

で,プロセスの生成はスレッドの生成に比べて100倍近く遅いです。昨日の計測では,重い処理をやっていたのでプロセスやスレッドの生成は誤差の範囲内ですが,処理自体が0.02秒以内でおわるようなものだと,いろいろとトレードオフが発生しそうです。もっともプロセスプーリングすればその辺は解消されるので,一概にだめとは言い切れませんが。

2008年10月7日

Python 2.6のmultiprocessingで性能を見てみる

Python2.6がリリースされて,気になっていたmultiprocessingとthreadを比較してみました。動作マシンは,MacBookでCore2Duoの2Gです。時間がないので,サンプルコードはかなり必要最小限になっています。ロック関係のオーバーヘッドがないようにthreadはjoinせずにsleepして終了するのを待っています(本当は結果が速く見たかったのでさぼった)。

それから,fibonacciは適当に重そうな処理だったので選んだけで深い意味はないです。

threadを使ったサンプルコード

import time
import thread
import threading
import sys

def fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)

def doInThread(i):
    start = time.time()
    for x in range(0, 30):
        result = fibonacci(x)
    end = time.time()
    print "%d Time %d sec" % (i, end - start)


if __name__ == "__main__":
    count = 1
    if len(sys.argv) >1:
        count = int(sys.argv[1])
    for i in range(0, count):
        thread.start_new_thread(doInThread, (i,))
    time.sleep(300)
multiprocessingを使ったサンプルコード

import time
import sys
from multiprocessing import Process

def fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)

    def doInThread(i):
        start = time.time()
        for x in range(0, 30):
            result = fibonacci(x)
        end = time.time()
        print "%d Time %d sec" % (i, end - start)


if __name__ == "__main__":
    count = 1
    if len(sys.argv) >1:
        count = int(sys.argv[1])
    for i in range(0, count):
        Process(target=doInThread, args=(i,)).start()
です。これで,それぞれ,スレッド数を増やしていって処理時間を見ます。下がその表です。単位は秒です。

スレッド数threadmultiprocess
122
262
3113
4144
5185
103610

で,Twisted教の教義からマルチスレッドは体に悪いし,Pythonのスレッドはインタープリタをロックしちゃうのでもともとパフォーマンスがよくないと言うことですが,思っていた以上に遅いです。Twistedのようにシングルスレッドで処理する方がよりよいパフォーマンスがえられます(単純に一度のメソッドの実行が2秒とすれば,10回で20秒なので)。

muliprocessingだとcoreが2つあるので,スレッド数(正確にはプロセス数)が2つまでは同じような結果です。その後,スレッド数に応じて速度が遅くなっていますが,正比例に遅くなるだけなので,OSのプロセス管理がちゃんとしているのでしょう。

まとめると,threadよりmultiprocessingの方が圧倒的に速い。
あれ?multiprocessingがどういうものなのか,書いていない。それはまた,いつか。

2008年10月6日

MacにPython2.6をインストール

Python 2.6がでたので,Macにインストール。python.orgからMac OS X用のバイナリをダウンロードしてインストールします。とりあえず,コンソールで

$ python -V

として「Python 2.6」が表示されればOK。次にeasy_installが使えるようにここからez_setup.pyをダウンロードして実行します。

$ sudo python ez_setup.py
次にPILをインストールします。Mac用のバイナリが見つからなかったので,自分でビルド・インストールします。PILでjpegを使えるようにするためには,jpegsrcと言うのが必要なのでダウンロードします。次に展開したディレクトリで

$ ./configure
$ make
$ sudo make install-lib
でインストールできました。次にPILのサイトからSource Kitをダウンロドして展開します。展開先のディレクトリで

$ python setup.py build
$ sudo python setup.py install
次にIPython。

$ sudo easy_install ipython
でおしまい。

あとは,
  • Twisted
  • Pylons
  • TurboGears
  • Django
ぐらいかな。もっと沢山忘れている気がする。とりあえず,これでmultiprocessingを試せるぜ。

2008年10月1日

CSSのハック,すげー

IE6で擬似的にmin-heightを指定する方法」,なかなか思い白くって凄いです。IEのバグを利用してCSSを書くらしいです。そこまでしてIE6に対応させないといけないのでしょうか?まあ,そうしないといけないケースと,そうしなくてもいいケースとあるとは思います。こうしたことはできることならしたくないですが,しないといけなければやるべきです。

CSSはまあ,特に多いのかもしれません(僕の印象)が,この手のものって言うのは昔から形を変えてありました。それがOSのバグだったり,MFCのバグだったりSTLのバグだったり・・・。相手のコードに手を入れられないのであれば,それがたとえ汚いやり方だったとしても,そのバグを迂回するコードを作るべきです。ただ,バグを利用したコードはかなり危険かもしれませんが,まあ,IE6はもう直さないだろうからいいのかもしれません。

でも,ぼくはこんなことはできません。でも,IEでもmin-heightは使いたい。