Archive for 2月, 2008

Java-jaと1000speakers

先週末は怒涛のイベントラッシュだった。
まず金曜日。Java-ja第5.7回ということで、元薬剤師/現在ニート/もうすぐプログラマなSeasarコミッタのダイチャンの家に会社帰りに突撃。
えびちゃんNAGASEYASUHiTOさんとのっちさんgakkiyさんせとあずささん(男)にお会いして、飲みながらもはや高齢恒例のえびちゃんの自作のボロネーゼを食し、色々しゃべった。
次の日もイベントあるから朝までご一緒せずに帰ったけど、boseな人は予告どおり午前3時にやってきたそうで、その行動力は心底見習いたいと思った。

んで土曜日。こちらは第2回1000speakersが13時から新橋のミラクル・リナックス本社で行われるということで、ちょっと前に着くぐらいの予定で12時過ぎに家を出た。
が、新橋が敷居高すぎて迷ってしまい、ついたのは13時20分すぎ。ビルの入り口でThinkPadにGoogleMap表示しながら急いで歩いてる丸刈り長身の人がいたので、「1000speakersですか?」って聞いてみた。あとでその人がitkzさんだとわかった。
会場につくと吉岡さんの講演の最中でした。会場前に、なんか学生服着た少年がいた。1000speakersに参加しにきたという中学生だった。itkzさんが親切に話を聞いていた。いい人。
吉岡さんの講演後に会場内にずかずか入っていったら、cactusmanさんが席をつめてくれて電源確保できた。cactusman++
個々の発表とかはcactusmanさんのこのまとめが詳しいので任せる。
発表終わって、ピザ食べてビール飲んで自己紹介して記念撮影して、2次会で新橋に飲みに行って、その後amachangに連れられてサイボウズラボに。
サイボウズラボに芋焼酎一本持ち込んだんだけど、朝までに空になってた。いつの間にかに飲み干してたらしい。
みんなそれぞれに好きなことしてたけど、僕はMacでの開発に慣れてなくて乗り切れなかったからUst流してた。気づいたらみんな結構寝てた。学生組はほとんど起きてたけど。
以下、個人的な感想。

  • Java-ja多すぎ。30人ぐらいしかいないのに、7人ぐらいはJava-jaだったような。
  • 必然的に発表内容もJavaなのが多かった。今は動的言語ブームだと思うのにこれはどうしたことか。ただ、Java-jaなonkはJavaには触れずunkとJavaScriptについて語ってたけど。
  • 学生多い。上述したコンパイラ書いてる中学生とか。上野氏(笑)は言うに及ばず。僕が学生のころにもこういう集まりあったらよかったのに。
  • Ustの画面を発表資料の横に映してるのもいいよね。Java-jaでもできないかな。

んで、日曜日。朝家に帰って相方にDISられながら就寝。11時に起きて13時からのJava-ja第8回への参加の準備。第6回よりも第7回よりも先に行われる第8回。
だが、前日飲み過ぎたのか胃が気持ち悪くなかなか準備できず。結局ちょっと遅刻ぐらいの時間で出発。
そしたら強風で電車狂いまくってて結局開始が30分ずれ込んでたので開始に間に合った。
こちらは、ペアプロとTDDの実践ということで和田卓人さんを先生に講義+実践を行った。
講義中にMacのEclipseに慣れなくて苦戦する僕とダイチャン。でもなんとか慣れてきた。っていうかEclipseのショートカットを全然使いこなしていなかったことに気がついた。Eclipseすげー。空気読めるIDE。
実践ではペアプロでWicket-jaのNewsをRSS配信する機能を実装してみた。でもやっぱペアプロもTDDも難しい。ってかTDDは完全に出来てなかったし、ペアプロも1分で書く人交代するとか出来てなかった。でもなぜかRSS配信機能は完成した。整形してからコミットする。
その後、懇親会。これがヤバかった。もうカオス。あっちこっちで爆発しまくってた。リア充なyamashiroさんが店員のおねーさんに絡みまくってるし、高井さんはえびちゃんの腹筋崩壊させたり嫁さらしを強要されたりしながらクネクネしてたし、yoshioriさんが過去の恋愛を暴露したり、矢野さんが酔拳発動させたり、「お客様のサービスを作るより自社製品・サービスを作りたいなー」って言った僕は高井さんと和田さんにすごい勢いでDISられるし、cojiさんid:yuripopと「付き合ってんの?」って見当違いのこと言われるし、お会計のレシートがこんなことになってるし。
面白すぎた。Java-jaの一員になって本当によかった。

各イベントの会場提供をしてくださった皆さま、企画運営をなさった皆さま、そしてお金を貸してくれたyamashiroさんとonkさんに深く御礼申し上げます。

そして、明日はlalhaさんの会社の見学に行ってきます。たのしみ~。

はてなスター始めました

今更だがBlogにはてなスター付けてみた。はてなのサービス使うのはこれが初めて。

今まで知らなかったんだけど、はてなのアカウントなくても、はてなスターの設置できたのね。
さらに、はてなスターポチってすんのもlivedoorアカウント等のOpenID対応サービスのアカウントでいいのね。

ってことで、まだはてなのアカウントは持っていない。

Jaxerのライセンスについて

前回のエントリで、db4oとMySQLは同じGPLなのに、それぞれを使うプログラムのライセンスは異なってくると書きました。
そうなると、ちょっと前に話題になったAptana Jaxerはどうなのかが気になったので調べてみました。

Aptana Jaxerとは、サーバサイドJavaScriptを実現するサーバ/フレームワークであり、これを使えばJavaScriptだけでWeb+DBアプリケーションが書けるようになります。

んで、各所でチュートリアル連載が始まったりと盛り上がりを見せてるんですけど、ライセンスがGPL v3ってのが気になってて、でもその辺のこと書いてる記事が見当たらなかったので公式のFAQ見ると、「If I run my software on Jaxer do I need to license my software under the GPL?」って項目があって、

Running your software on the Jaxer server does not at all compel you to license your software under the GPL. Jaxer itself is licensed under the Gnu Public License version 3 (the GPL) in order to keep it free to use and distribute and extend, as long as distributed extensions to Jaxer itself are offered back to the community under the GPL. But software programs that run on top of Jaxer are not bound by the Jaxer GPL license. Indeed we place no restrictions on the software you run on top of Jaxer, in terms of licensing or anything else.
(後略)
Jaxerサーバ上でソフトウェアを走らしたとしても、それは全然そのソフトウェアをGPLにしろって強制することにはなりませんよ。Jaxerそのものは、使ったり、配布したり、拡張したりするのを自由にできるようにGPL v3のライセンスを採用してるんで、Jaxerそのものに対する拡張を配布する際は、GPLライセンスの元にコミュニティに還元しなきゃいけません。でも、Jaxer上で動くソフトウェアプログラムに関しては、JaxerのGPLライセンスに縛られはしません。うちらは、あんたらがJaxer上で動かすソフトウェアに対して、ライセンスその他を盾に何らかの制限を掛けようなんて思っちゃいません、いや本当に。
(後略)

と、あるので(訳はmesoによる)、どうやらMySQLのように使うだけなら商用でもOKっぽいですね。安心しました。

というわけで、中途半端なJavaScriptの知識を充足させてJaxerでWebアプリが作れるようになるためにJavaScriptの勉強も始めました。

とりあえず、オライリーのJavaScript 第5版を読んでいきます。

昨今のJava向けのオープンソースなオブジェクトデータベース

そういえば、前のエントリでオブジェクトデータベースについて書くと宣言してから、気づけば一ヶ月半以上経っていました。
そろそろ書いとかないと、イケメンタップダンサー兼プログラマのNAGASEYASUHiTOに怒られるので、書きます。
基本的にJava向けの実装があるものしか知らないし(PythonとかSchemeにもあるよね)、オブジェクトデータベースのプロでもなんでもないんで、間違いがあるかもしれません。
オブジェクトデータベースに関する情報を見つけたら、僕はlivedoor クリップにTag: ODBMSでクリップしてるので、オブジェクトデータベースに興味のある人はここを購読するといいかもしれません。

  • Java向けのオープンソースなオブジェクトデータベースにはどんなものがあるのか
  • 表を作ると

    名前 ライセンス 標準準拠とか 活発度 その他の言語
    db4o GPL/オープンソースプロジェクト用/商用 JDOとは繋がるらしいよ 活発っぽい .NETとか
    MyOODB GPL/LGPL 標準なんて関係ねえ 1人なのにめっちゃ活発。2008/02/08に最新リリース。 Jython/JavaScript/C++(予定)
    EyeDB LGPL ODMG 3 2006/10/06以降リリースなし なし
    ozone GPL/LGPL ODMG 3 2005/11/26以降リリースなし なし
    Perst GPL/商用 ODMG 3 2006/10/06以降リリースなし C#
    Orient ODBMS Apache 2.0 ODMG 3/JDO 1.0 製作者がJDOのExpertGroupのメンバだったりするんだけど、その人がRomaってフレームワークに注力してて、結果2004/08/06以降リリースなし C++
    JDOInstruments LGPL JDO 2006/12/08以降リリースなし なし
    NeoDatis ODB LGPL 標準なんて無視 活発。2008/02/12に最新リリース。 .NET(予定)
    Ener-J GPL ODMG 3/JDO 2.0 まだリリースなし。最終コミットが2007/07/25 なし
  • どれがイケてる?
  • 表見てのとおりなんだけど、まずライセンス的に厳しいのが多い。
    恐らく一番名前が売れていて、実績があって、機能も豊富で、性能もよくて、扱いやすいのがdb4oなんだけど、db4oは商用で使うには金が掛かる。
    オープンソースプロジェクト向けの新しいライセンスとか作ってるけど、あんまり意味ないっぽい。
    ScalaによるWebアプリケーションフレームワークであるLiftが、MLでdb4oをそのライセンスで組み込もうかとか相談してたけど、なんか色々制約あるっぽいってことでやめてたな。
    MySQLみたいなリレーショナルデータベースは、GPLであっても直接そのAPIを叩くわけじゃないから商用でも使えるという解釈っぽいけど、オブジェクトデータベースは直接そのデータベースのAPIを叩くので、使う方もGPLにしなきゃいけないらしい。
    というわけで、上表でGPLのやつは軒並みアウト。GPL/LGPLなものは、ソースコードに手を入れた場合はGPL適用だけど使うだけならLGPL適用だから商用もいいよって感じ。

    次に、開発の活発さがまた問題。
    オブジェクトデータベース自体が長いこと冬の時代を送っていたこともあってか、活発だといえるのはdb4o, MyOODB, NeoDatis ODBぐらい。

    最後に、標準準拠について。
    ODMG 3とか、誰も知らないよね。ってかむしろ準拠してると設定ファイルとか必要になったりでめんどいだけ。
    JDO準拠はいいかもしれんけど、最高のJDO実装であるJPOXでさえ最近JPAにも準拠しちゃったぐらいだし、JDOであることのメリットってもうないかも。ってか、JPOXすごいな。
    まあ、そういうわけで標準準拠とか気にしなくてよし。

    となるとね、残るのってMyOODBとNeoDatis ODBだけなのよ。
    というわけでこの両者について紹介します。

  • MyOODBの特徴
  • このオブジェクトデータベースは、すごい。
    何がすごいって、開発者が一人だけなのにカバーしてる機能が多く、言語も多いこと。
    上表にもあるとおり、JavaだけじゃなくてJythonやJavaScriptからもオブジェクトデータベースを扱える。
    JavaScriptから直接だよ?もちろんAjaxみたいに非同期にもクエリできる。
    さらにそのうちC++から扱えるようになる予定。
    機能も半端ない。
    オブジェクトデータベースにしては珍しく組み込みモードがなくてクライアント/サーバモードだけなんだけど、その通信もHTTPだけじゃなくてHTTPSはもちろんTCP/TCPSプロトコルでもいける(って書いてあるけどレイヤーが違うような)。
    MyOODBが管理するオブジェクトはサーバにしか存在せず、クライアントが操作するのはその参照(Proxy)にすぎないため、複数同時のネストしたトランザクションなんてのも扱える。
    DBの自己回復機能や汚染分離機能などもある。
    自称だけど最速のオブジェクトデータベースらしい。検証データはない。
    もちろん欠点もある。
    まず、ドキュメントがまったくない。「ドキュメント?サンプル嫁」が基本スタンス。
    さらに、少なくとも僕の環境ではそのサンプルもそのままじゃ動かせず、バッチファイルにクラスパスを追加してやる必要とかがあった。
    さらに、使うにしても、まずモデルをJavaクラスとして定義し、そのクラスを引数にJythonスクリプトを実行して、MyOODB用のクラス(Proxyクラスとか)を2つ作ってやる必要がある。
    あ、Javaのときの話ね。JythonとかJavaScriptから使うときにどうするかは知らない。
    まとめると、玄人好みの渋い奴って感じ。

  • NeoDatis ODBの特徴
  • こちらは、実はしばらく開発中断してたんだけど、2007年後半ぐらいから活発に活動再開したんだよね。
    MyOODBとは違いこちらは会社が中心となって開発してる模様。
    現在はJavaだけだけどそのうちC#.NETからも扱えるようになる予定。
    NeoDatis ODBのいいとこは、とにかく扱いやすいこと。
    格納するオブジェクトは特に何かのインタフェースを実装する必要も何かのクラスを継承する必要もないただのPOJOでいい。
    さらにドキュメントもPDFで丁寧なのがついてくる。英語だけど読みやすいよ。
    jarファイル一個入れるだけってのもお手軽でいい。
    さらに、データベースブラウザツールまでついてくる。ただし日本語だとところどころ文字化けするけど。
    パフォーマンスもそこそこみたい。
    検証データもあって、オブジェクト数が多すぎないうちはdb4oとパフォーマンスがほとんど変わらない。
    オブジェクト数が多くなったときのパフォーマンスの低下の仕方がちょっと気になるけど。
    クエリに関しても、db4oで言うとこのNativeQueryって奴が使える。
    どういうことかというと今流行の流れるようなインタフェースみたいな感じ。

    odb = ODBFactory.open(ODB_NAME);
    IQuery query = new SimpleNativeQuery() {
        public boolean match(Player player) {
            return player
                        .getFavoriteSport()
                        .getName()
                        .toLowerCase()
                        .startsWith("volley");
        }
    };
    Objects players = odb.getObjects(query);
    

    いわゆる流れるようなインタフェースによるクエリだと、どうしてもフィールド名を文字列で書く必要があるみたいだけど、こちらは、そのままそのクラスのgetterメソッドを呼べばいい。
    これがオブジェクトデータベースのいいとこだよね(ただしこういうクエリが出来るのはdb4oとNeoDatis ODB以外知らない)。
    こちらは、MyOODBとは違い、組み込みモードも対応してる。また、HTTPによるクライアント/サーバも対応。
    ただし、ネストしたトランザクションとかそういうことは出来ない。
    Index張ったりとかもできるけど試しにやってみたことがある程度なので効果がどれぐらいかはしらない。
    あーちなみに、MyOODBもNeoDatis ODBも両方ともDBの中身をXML形式でimport/exportすることができる。
    まとめると、初心者でも安心の可愛い奴って感じ。

  • というわけで
  • 是非、オブジェクトデータベースも試してやってくださいな。
    試すなら、NeoDatis ODBとMyOODBがお勧め。
    とくにJavaScriptからMyOODB使うのを試すなんてかっこいいよね。Jythonから使うの試すとか猛者だよね。
    まあ、そこまでしなくても、NeoDatis ODBなら手軽に試せるから是非どうぞ。

MacBook Air

MacBook Air届いた。

さようなら、Windows。さようなら。

次のページ »