Scala勉強会@関東-1行ってきました。

いかんなー。しばらくBlog書かないでいると、なかなか書こう!って気にならない。

4/30にもJJUGのクロスコミュニティカンファレンスに参加して、岡崎さん(一緒にお食事できました)や櫻庭さん(懇親会の最後に名刺交換だけできました)他、沢山の方々にお会いできたりしたんだけど、Blog書くのメンドクサくてほったらかしてました。すみません。

んで、Scala勉強会@関東-1
これは、関東でやるって決まった瞬間に参加表明をだしました。
余りに早かったので、懇親会の参加表明が幹事を抜いて1番だったほど。
まあおかげで、自己紹介のいいネタになったんですが。

当日開始前に会場に到着。
到着してまず笹田さんが目に入り、「うぉ、Rubyの有名な人がいる!」とミーハーに興奮。
思えば場所提供が笹田さんなんだから、居るのは当然か。

そんなこんなで開始。
まずは自己紹介。参加表明をしていたYoshioriは当然のようにまだ寝ている模様。
まあおかげで、自己紹介のいいネタにさせてもらいましたが。

最初は水島さんScalaチュートリアルから。
Scalaの文法を基礎から多少マニアックなところまでカバーする内容なんだけど、笹田さんをはじめ多くの方の突っ込みが入る入る。僕も多少の突っ込みを入れる。
いやー、大学のゼミを思い出しましたね。
まあ、会場は東大のキャンパスだし、笹田さんは東大の講師だし、水島さんは大学院生だし、ゼミの雰囲気になるってのも当然っちゃあ当然か。

でも突っ込みのおかげで、ただPDF見ていただけの段階よりはずっと理解が進んだ気がする。
Scalaってとっても変態的。よく考えられた行き当たりばったりさというか、なんというか。
まあ、いじっていて楽しい言語には間違いない。
でもJJUGで言われてたような、Next Javaとなり得るかというと、やっぱりそれはまだ微妙な気も。

そんなこんなで、時が経つのを忘れて発表が進み、結局懇親会の開始を1時間遅らせることに。
soutaroさんの発表と水島さんの残りの発表を駆け足気味で終わらせ、懇親会へ。

懇親会では恐れ多くも笹田さんの真向かいの席に陣取らせていただきました。
横にいたYoshioriが会話を盛り上げてくれてとても楽しかった。
1次会が終わった段階で僕は用事があったので珍しく大人しく帰宅。

今回はjava-jaとは違って、Java系じゃない人が沢山いたから知り合い増やしたかったんだけど、そういえば懇親会中に名刺交換のターンがなかったなぁ。
東大院生、筑波大院生、Googleの中の人とかが多かった気がする。

第2回があればまた是非参加したいと思うのでよろしくお願いします。

197Xsの第1回オフパーティに

行く予定だったけど風邪ひいていけなかったよ!

LTの資料だけあるから、喋る予定だった部分とか付け加えてUPしたんでよかったら見てください。
http://server.mesolabs.com/197Xs_1/


次回は必ず参戦するぞ!

新年度を前に、今の僕の現状を振り返り。

僕が、現状興味がある技術を整理してみた。
長くなったから、感想を先に書く。

なんていうか、浮気しすぎだな、うん。
これっ!って決めたものに対して集中して究めるということが出来ないタイプのようだ。
とはいえ、これだけの技術に興味を持つ好奇心とアンテナの高さはなかなかのものだ。
って、なぜか自己分析してしまった。

優先順位も日々変動しちゃってるんだよね。あ゛~~~!ホントは全部究めたいのに!
僕だけ一日48時間にならんかな。必要睡眠時間はそのままで。
業務で使われることのない技術がほとんどだから、これらを勉強したくても業務時間外にするとなると時間が全然足りない。
中途半端にリア充だから平日帰宅後や休日にも自分の時間なんてほとんど取れないし。

っていうか、僕、業務でWebサイト作ったことなんて一度もないんだけど、なんで興味がそっちに偏ってんだろ?
興味の方向性を修正すべき?仕事を修正すべき?

こういう幅広い技術を(ある程度)知っているから多方面の技術者とそれなりに意味の通じる会話ができて、新しいサービスを考え出す発想力と実装して公開しちゃう実行力もあって、コミュニティにも積極的に参加する人材が是非欲しいってとこありませんかね。
あ、メールアドレスは上のWHOに載ってますよ!

それはそれとして、みんなどう整理してんだろ?興味のある技術いっぱいだよね?時間全然足りないよね?どうやって優先順位決めて勉強してる?
よかったらやり方を伝授してください。

あ、あとこれは絶対勉強しとけ!とか、これは廃れるから勉強しなくていいよ、とかあれば是非教えてください。

言語

  • 仕様を完璧に理解している
    • なし
  • 実際に使ったりしているけどまだ仕様をキチンと理解しているとはいえず中途半端
    • Java
    • Ruby
    • JavaScript
    • C
    • Scala
    • SQL
  • 今現在は使っていなくて理解もまだまだ
    • C++
    • Objective-C
    • Python
    • Common Lisp
    • Scheme
    • ActionScript 3.0

Java関連

  • 仕様を完璧に理解している
    • なし
  • 実際に使ったりしているけどまだ仕様をキチンと理解しているとはいえず中途半端
    • Apache Wicket
    • Echo 2
    • Google Guice
    • EJB 3.0
    • ActiveObjects
    • Restlet
    • JBoss
    • Tomcat
    • GlassFish
    • Jetty
    • Ant
    • Maven 2
  • 今現在は使っていなくて理解もまだまだ
    • Echo 3
    • Click
    • JSF
    • GWT
    • DWR
    • jMaki
    • ZK
    • Ajax4JSF
    • Facelets
    • Spring
    • Seasar2系
    • JBoss Seam
    • JPA
    • Hibernate
    • iBatis
    • Cayenne

Ruby関連

  • 仕様を完璧に理解している
    • なし
  • 実際に使ったりしているけどまだ仕様をキチンと理解しているとはいえず中途半端
    • Ruby On Rails
    • JRuby
  • 今現在は使っていなくて理解もまだまだ
    • Merb
    • Waves

JavaScript関連

  • 仕様を完璧に理解している
    • なし
  • 実際に使ったりしているけどまだ仕様をキチンと理解しているとはいえず中途半端
    • Ajax
    • Aptana Jaxer
  • 今現在は使っていなくて理解もまだまだ
    • Comet
    • jQuery
    • Ext.js
    • Prototype.js
    • Script.aculo.us
    • Yahoo! UI Library
    • Google Gears

Python関連

.

  • 仕様を完璧に理解している
    • なし
  • 実際に使ったりしているけどまだ仕様をキチンと理解しているとはいえず中途半端
    • なし
  • 今現在は使っていなくて理解もまだまだ
    • Django
    • TurboGears
    • web.py

Scheme関連

  • 仕様を完璧に理解している
    • なし
  • 実際に使ったりしているけどまだ仕様をキチンと理解しているとはいえず中途半端
    • なし
  • 今現在は使っていなくて理解もまだまだ
    • Gauche
    • Kahua

Common Lisp関連

  • 仕様を完璧に理解している
    • なし
  • 実際に使ったりしているけどまだ仕様をキチンと理解しているとはいえず中途半端
    • なし
  • 今現在は使っていなくて理解もまだまだ
    • SBCL
    • Weblocks

Scala関連

  • 仕様を完璧に理解している
    • なし
  • 実際に使ったりしているけどまだ仕様をキチンと理解しているとはいえず中途半端
    • Lift
  • 今現在は使っていなくて理解もまだまだ
    • なし

ActionScript関連

  • 仕様を完璧に理解している
    • なし
  • 実際に使ったりしているけどまだ仕様をキチンと理解しているとはいえず中途半端
    • なし
  • 今現在は使っていなくて理解もまだまだ
    • Flex 3
    • AIR

データベース関連

  • 仕様を完璧に理解している
    • なし
  • 実際に使ったりしているけどまだ仕様をキチンと理解しているとはいえず中途半端
    • PostgreSQL
    • SQLite
    • NeoDatis ODB
    • MyOODB
  • 今現在は使っていなくて理解もまだまだ
    • Oracle
    • MySQL
    • H2
    • eXist
    • MonetDB

XML関連

  • 仕様を完璧に理解している
    • なし
  • 実際に使ったりしているけどまだ仕様をキチンと理解しているとはいえず中途半端
    • XPath
  • 今現在は使っていなくて理解もまだまだ
    • XQuery
    • XSLT

Webデザイン関連

  • 仕様を完璧に理解している
    • なし
  • 実際に使ったりしているけどまだ仕様をキチンと理解しているとはいえず中途半端
    • (X)HTML
    • CSS
  • 今現在は使っていなくて理解もまだまだ
    • HTML 5
    • canvas

その他

  • 仕様を完璧に理解している
    • なし
  • 実際に使ったりしているけどまだ仕様をキチンと理解しているとはいえず中途半端
    • Linux
    • Windows
    • Mac OS X
    • Apache HTTP Server
    • Subversion
    • HTTP
    • TCP/IP
    • SOAP
    • REST
    • 正規表現
    • Eclipse
    • NetBeans
    • xyzzy
    • Emacs
    • Vim
    • screen
    • zsh
  • 今現在は使っていなくて理解もまだまだ
    • Mercurial
    • OpenSocial
    • Facebook Platform
    • Android
    • iPhone SDK

全部リンクを張ろうかと思ったけど、めんどくさすぎたんでやめた。

id:naoya氏のやろうとしてることって

僕が「ぶっこめ!」でやろうとしてることとモロ被りなんだけど。

津田大介が伊藤直也に聞く、「はてなブックマーク」の今と未来(中編)
http://ascii.jp/elem/000/000/119/119638/

特に4ページあたりね。
本家にやられると、困っちゃうね。でもまあ、先見の明があったってことで喜ぶべきなのかな。

ちなみにこのエントリは、上のページのid:naoya氏のブックマークコメントへのトラックバックエントリです。
http://server.mesolabs.com/bukkome/url/http://ascii.jp/elem/000/000/119/119638/#1206498845000

java-jaでBuriの話を聞いてきました

java-jaの第7回に参加してきました。
第8回よりも後で、第6回よりも前に行われる第7回。

java-jaのアルファスーツ、はぶあきひろさんのビジネスプロセスの話とBuri(escafeFlow)作者のまこたんさんのBuriの実装とか今後とかの話。
そして、LTとしてYouchanさんのTwitter的な何かの話と矢野さんWicket-jaの宣伝。

はぶさんのビジネスプロセスの話はすごくためになった。こんな話聞ける機会なんて本当にないだろうしすごくいい経験をした。
社会人3年目ぐらいの人には、エンジニア・営業・総務とか関係なしにみんなに見てもらいたい。
資料も公開される予定だし、Ustreamには録画が残ってるし、boseさんがデジタルビデオカメラで録画したデータもそのうち公開されるはずなので、是非是非見てください。

これはっと感じた名言の一部

  • 「従業員を大事にする」とか言うが、お客様をだいじにしない従業員を大事にしてどうするんだ!
  • 価値連鎖こそがビジネスの本質である。社内にも価値連鎖がある。
  • 作り2分に売り8分
  • 改善はやりっ放しじゃ意味がない。トヨタはそれを数字でモニタリングしているからすごい。
  • 会計とはお金という切り口でビジネスプロセスをモニタリングするためのメーターである!
  • 原価削減を伴わない改善は改善ではない!
  • 日本の会社員の一人当たりの年間平均売り上げは、中小企業は平均2000万円、上場企業は平均5000万円
  • お客様からしかお金がもらえないのに、誰をお客様にしたいのか決まっていないから、ものにならないものが多い
  • 提案の基本はドラえもん。のび太くんを探せ!
  • B2Cをやるならライバルはディズニーランド
  • 車のCMは買った人を後悔させないために流している。
  • いけてない組織が作ったサービスはいけてない
  • 業務アプリ開発では、作る人が使う人の意図をソースコードにコンパイルしているのだ。その時点でズレてしまっていればプログラミング言語の優位性なんて関係ない。
  • ドキュメントなんて意味がない。どんなときにどこを変更してはいけないかが書かれていないから。

今までの人生で誰も教えてくれなかったことばかり。むちゃくちゃ勉強になりました。

まこたんさんのBuri作成の動機となった「if文が嫌い」という話も面白かった。「要件のif」「設計のif」「実装のif」の3つifがあるという話。その通りなんだけど今まで意識なんてしたことなくって目から鱗だった。
Buriのバージョンを1.0にしないのは、使う人が増えすぎないようにする意図もあるらしい。
Buriを使って業務アプリを開発する場合、ツール使ってビジネスプロセスを図に書いてそれをXPDLというXMLに変換して、そのXMLをBuriに食わせてJavaのクラスを吐かせてそれをS2のコンポーネントとして登録し、それを呼び出すBAOというインタフェースを作成し、画面からBAOを叩くという流れになるんだと理解したんだけど、そのBAOを作るのが手作業なのが気になった。XPDLから自動生成できるんだろうけど別にそれをやる予定はないみたいな話をしていて、僕としてはやっぱりBAOは自動生成させるべきなんじゃないかなって思ったから懇親会で話聞いてみたら、だってスタロジではBAO使ってないもんって言われた。なるほど。

YouchanさんのLTも興味深かった。
Twitterってサーバ集中型だけど、FollowersとかFriendsの関係ってP2P的だよねってことから、P2Pによる落ちない分散メッセージングアプリケーション兼Twitterクライアントみたいなの作ってますという話。SkypeAPI使ってるらしい。
プロジェクトページ教えてもらったけど、TwitterのDMで教えてもらったんで公開していいのかわかんないのでとりあえず秘密。

矢野さんのLTは、Wicket-jaの宣伝。Wicket-jaのページのコードを誰かまともにしようよって話。後で矢野さんにDBのテーブル定義とかしてもらわんことにはコードいじりようがないって言っといた。

んで、メインの懇親会。

実は、java-ja主催者のYoshioriが勉強会会場に来てませんでした。もう終わりかけのときにようやく起きたらしく、懇親会の途中からやってきました。
懇親会に向かう途中に、boseさんに「mixiによると今日Yoshioriの誕生日らしいぞ」と聞いたので、Yoshioriがやってきたときにみんなで「Happy Birthday」を熱唱。
・・・が、「あぁ、それ嘘だから!」という予想外の反応。ブーイングの嵐でした。

そっからまた色々カオスな状況に。yuripopの太ももがNekopによって10連射ぐらいの勢いで写メ撮られるし、ニコ動にあるにぽたんのコンドーム講座鑑賞会始まるし、今回は自重が合い言葉だったのに結局会計一人7000円超えてるし・・・。
そういえば、NekopとYuripopは家が近いとのことで一緒に途中で帰ったんだが、大丈夫だったんだろうか。

んで、その後勉強会会場に戻って朝まで語り合い。朝になって電車で帰る途中でもboseさんと一緒に熱く語り合い。
家に着いたら相方に強烈にdisられました。あー楽しかった。とても勉強になった。

会場提供はいつものようにATL Systemsさまでした。ありがとうございました。

「ぶっこめ!」更新情報

ぶっこめ!」へのブクマコメントとしてこのようなコメントがありました。

al001@はてなブックマーク
「相手が自分のブックマークコメントへのトラバを確認しなかったらこれまでと同じ?」

http://server.mesolabs.com/bukkome/url/http://server.mesolabs.com/bukkome/#1205727877000

(このエントリはこのブックマークコメントへのトラックバックエントリになっています。)

このコメントは至極ごもっともで、いくらトラックバックエントリを書こうが、ブクマコメントを書いた人がトラバを確認してくれなければ気づかれることもなくこれまでと同じ状況でした。
これは、構想を練っているときから気づいていた問題点で、結局解決できずまま先走って公開したわけですが、公開したおかげで矢野さんから次のようなアドバイスをいただくことが出来ました。

ぶっこめ!は、はてなに「ぶっこめ!」という名前のダイアリーを作って、ぶっこめ!にトラバが来たら自動的にトラバ先アカウントをid:記法で、トラバ元URLと一緒にダイアリーに書き込むようにしたら、自動idトラックバックできるよね。

http://twitter.com/t_yano/statuses/772457453

なるほど。
そもそも、僕ははてなIDを持ってなくて、idトラックバックってものもよくわかっていなかったのですが、この矢野さんの一言を見て即はてなIDを取得し、実現可能性を検討しました。

んで、まあ結局は、はてダはXML-RPCなどでの投稿を受け付けてないことや、JavaMail使うのめんどかったことや、AtomPub(もどきのAtomAPI)を使ってみたかったことなどから、はてブに書き込むことで自動idトラックバックするようにしました。

結果、全体の流れはこうなります。

  • Aさん(非はてなユーザでも可)がブログにエントリaを書く。
  • Bさんがはてブにaをブックマークし、コメントbを書き込む。
  • bのコメントに対して反論したいAさんは、「ぶっこめ!」を使い、b宛てのトラックバックエントリaaを書く。
  • aa投稿時に、「ぶっこめ!」ではトラックバックを受け付けると同時にid:bukkomeとしてaaをブックマークし、コメントに「id:Bさんのブクマコメントへのトラックバックエントリ」と書き込む。
  • Bさんは、idトラックバックされるので、自分のブクマコメントへのトラックバックが存在することを知る。

これでどうでしょう。

まあ、但し、現状だとAさんが1エントリで複数のブクマコメントへのトラックバックを打ったとしても、1つしかブックマークできないため1人にしかidトラックバックが飛ばないという問題がありますが。

というわけで、このエントリは先ほど引用したブクマコメント主のid:al001さんへidトラックバックが飛んでいるはずです。
気づいてもらえましたか?

はてブやLDCのコメントにトラックバックを打てるサービスを公開しました。

ネット実名論争やらはてブのネガティブコメント論争やらが起こったり沈静化したりする今日この頃ですが皆さまいかがお過ごしでしょうか。

さて、めそらぼでは、表題の通り、はてブやlivedoor Clipのコメントにトラックバックを打てるサービス「ぶっこめ!」を公開しました。
これによって、反論を受けないところから安全に暴言を吐いてくるからソーシャルブックマークサービスなんて嫌いだ!という池田信夫先生のような方々も反論をすることができるようになります。精神衛生上よろしいのではないかと思いますので、是非使ってみてください。

例えば、拙作サービスのランチオフったーへのブックマークコメントのページは
http://server.mesolabs.com/bukkome/url/http://server.mesolabs.com/lunchofftter/
になります。
また、このエントリ自身が、執筆時点での最新コメントである
http://server.mesolabs.com/bukkome/url/http://server.mesolabs.com/lunchofftter/#1203802507000
へトラックバックを打っています。どのように表示されているかご確認いただけると思います。

なお、まだまだ全くブラシュアップ出来てない状態での公開ですので、不具合/バグ等は沢山あると思います。実装されてない機能等もございます。
どうか、生暖かく見守ってやってください。

さて、今回もJavaのみで作成しました。Web層のフレームワークはもちろんApache Wicketを使いました。
また、ソーシャルブックマークサービスとの連携のクライアントとして、またトラックバックを受け付ける処理の窓口としてRestletも使ってみました。
さらに、今回はデータベースとして、オブジェクトデータベースであるNeoDatis ODBを使ってみました。
その辺の技術的な話に関してはまた改めてエントリを書きたいと思います。

なお、このサービスによって生じたいかなる不具合や不利益に関して一切の責は負いかねます。自己責任でお使いください。
また、問答無用で予告なくサービスを終了させたり、データベースを初期化したりすることもございます。ご了承ください。
不具合や要望等ありましたら、このエントリへのコメントやTwitter@mesoへお願いします。

(追記:3/17 10:10 現在、上記ランチオフったーへのブックマークコメントのページはエラーが表示されています。原因究明中…)
(追記:3/17 10:50 とりあえずエラー原因のデータを削除して復活させました。)
(追記:3/17 11:20 トラックバックURLにブラウザでアクセスする(GETでアクセスする)と発生する不具合だと判明。修正しました。)

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なら手軽に試せるから是非どうぞ。

« 前のページ次のページ »