2009年9月1日火曜日

GPG Error

古いマシン(Debian etch)を引っ張り出して、apt-get updateしたらGPGでエラー吐いた...

キーが変わってたらしい。

GPGコマンドでキーを取得してaptに登録したら問題無く動いた。
まぁいまさらetchをupdateしようなんて人は居ないだろうて...。

2009年6月20日土曜日

Mac畑の話

実は、自宅のメインマシンは専らMacなんです。
一昔前のMacBookで、メモリは2GBまで制限がありますが2GB積んでます。
とても気に入っていて、プライベートの用事は大抵これで済ませています。
ネット以外の主な用途は以下のとおり。
  • 撮り溜めた写真の整理
  • 写真からのスライドムービー/DVD作成
  • iPod/iTunes関係
  • 家庭内オフィスドキュメント(OpenOffice使用)
  • Java/Coherence/Pythonの開発/実行環境。Pythonはあまりやってないけど。
一番最後はWindowsでもどこでもやってるので放っておくとして、
それ以外はこのMacでやるのが一番楽でかつストレスが無い気がするんだよね。
WindowsはVista スルーの予定でもあるけど会社で見てる画面は味気ないし、
Linuxが使えるのが理想だけどマルチメディアは苦手だし、
第一マシンスペックがボロボロなので、あれこれやるには非力すぎる。

と良い事づくめのように書いたのですが最近悩み事が。
フリーで配布されているソフトを使ったりするときに、
"Leopard以上"と言われてしまうことが多い気がするのです。
あまりに多いので"Leopard以上じゃないとMacじゃないぜ?"って言われている気になってきました。
Snowが出たら乗り換えようかな。

2009年4月24日金曜日

(遅いけど) Oracle Buys Sun

Oracle Buys Sun

遅ればせながら。
Oracle Corp.がSunと合意したとのこと。

なおきさんが書いているとおり、
僕も中の人なのでこれ以上はコメントできませんのであしからず。
# 聞かれないけどねー:p


2009年3月18日水曜日

いまさらオブジェクト

いまさらjava.lang.Object#notify()とwait()...でもjavadocの説明じゃ解らんよね。以下はnotify()の例。

このオブジェクトのモニターで待機中のスレッドを 1 つ再開します。

えー?サンプルくれよ、みたいな。

スレッドがオブジェクトのモニターのオーナになる方法は、次の 3 通りがあります。
  • オブジェクトの synchronized インスタンスメソッドを実行する
  • オブジェクトを同期化する synchronized 文の本体を実行する
  • Class 型のオブジェクトの場合は、そのクラスの syncronized static メソッドを実行する
平たく書いて欲しい。まじで。

結論としてはwait()/notify()はsynchronizedブロックの中でロックの対象になっているオブジェクトに使え、だ。
もうちょっとちゃんと書くと、synchronizedブロックを準備しただけではそれを実行するスレッドの順序の保証が出来ないので(先に呼んだもん勝ち)、やりたいならwait()/notify()を使ってちゃんと順序保証しなさい、だ。

多分よーく読むと解るんだろうけど...

後輩M(2人居る!)には少し省略して話をしてしまったので、調べた結果でした。

ちなみに近代Java(Java5以降なので)だとこんな事しなくても順序保証された並列処理ができるようになってる。
java.util.concurrentとかjava.util.concurrent.atomicとか。ちょーきもちいー。

2009年2月28日土曜日

jBPM 4.0.0-Alpha2 Released

jBPM4.0.0のAlpha2がリリースされてた。

JIRAによれば、fixされているissueは33個。まぁ個数は問題じゃないけど。

定義情報の名称に変更があったりするようなのでまだまだ開発途上な雰囲気は否めないが、早い時期に更新版をリリースできるのはオープンソースとしては良い傾向にあると思う。スピード感命的な。

jbpm-usersのメーリングリストに、Oracle Workflowからの移行ツールを作ったぜ!という内容の投稿を見つけた。勘弁してくださいよもぅ。

2009年2月19日木曜日

Coherence担当者と会うの巻

Coherenceの担当者であるが来日していたので、彼らに会う。
忙しい中時間を割いてくれて、我々のぼやけた?悩みを聞いてくれた。感謝感謝。
もっとも自分はカタコト英語なので迷惑をかけたかもしれないが...

Coherenceはとても素晴らしい製品(アプリケーションの構造が変わると言っても良いくらいだと思う)なので、もっと広く知れ渡って欲しい。
キャンペーンサイトがあるのでリンクしておく。

急増するリクエスト、データ量に対する拡張可能な超高速インメモリ処理 アプリケーション・グリッド/ Oracle Coherence / 日本オラクル

技術情報はこちら
Coherence Knowledge Base

2009年2月15日日曜日

jBPMに触れてみる 4 of n

jBPM(3.x)でデプロイしたプロセスは、jbpm-consoleというアプリケーションで実行することができる(実行できるようになるまで苦労したが、それはそれ)。

シンプルなjbpm-consoleの操作画面





基本的な機能としては以下のものがあるようだ。
  • プロセスの新規インスタンス起動、停止
  • プロセスの削除(途中キャンセル)
  • プロセスへの引数入力
  • プロセスへのシグナル送信
  • (ユーザのロールに応じた)タスク一覧の表示
  • プロセスの画像表示(インスタンスの状況に応じて該当部分をハイライトできる。ちょっと良い)





ハイライトされたプロセスの画像。

全体的に動作が軽く、使いづらさはさほど感じない。
問題は、時折JSF動作時のコンパイル関係っぽいエラーが出ることと、
このコンソールでプロセスをさくさく進行・確認出来ても、
業務プロセスの実装という観点ではあまり意味がないことだ。

後者は特に重要で...実装およびデプロイされているプロセスに関わる人が皆このアプリケーションを使ってプロセスを進めるとは思えないし。
jBPMのAPIとしての性格から見ると、組み込みプロセスエンジンとしての役割をある程度果たすためには、何かしら外のアプリケーションとのやりとりでプロセスが進んでいくことが必要になるだろうと思う。
管理コンソールで実行してるだけで満足しちゃいかんのである。

「ファイルを定期的に読み取ってプロセス開始」という単純なものでも、
プロセスの途中でメールを送ったり外部のアプリケーションを実行したりすることもあるわけだ。
# Oracle BPEL PMにはそういうことを実装するためのアクティビティやPartnerLinkがあらかた揃ってるわけだが...

今後jBPMを機能面で見ていくにあたり、この観点で調査をしていこうと思う。

2009年2月13日金曜日

Oracle Rich Enterprise Application サイト公開中

ちょっと前から、米国OracleサイトにてOracle REAのサイトが公開されています。

Oracle Rich Enterprise Applications

Oracle ADF/Oracle WebCenterを使った、
リッチなWebアプリケーションを実現するための情報を提供しています。

Oracle REAはJDeveloper 11gでの開発を前提にしています。
このサイトからリッチクライアントおよび
ADF Data Visualization(グラフや地図などデータを入れるだけで使える画面部品群)のデモ、
チュートリアルを見ることができます。

是非一度ご覧ください。

InfoQにもざっとした概要の記事があったので、貼っておきます。
Oracle launches Rich Enterprise Application (REA) site

今後開発Tipsなどをこのブログで紹介できればと思いつつ。

jBPMに触れてみる 3.2 of n (how to use jBPM 3.x)

インストール直後に利用できるwebsaleが動かない件。
なんかもーこの時点で駄目な気がするが、追ってみた。

MLアーカイブにひとまず回答らしきものを発見。

Re: Error setup with both MySQL and Hypersonic

実際にはMySQLがどうこうという話ではなく、websaleのタスクをExamineするとこんなエラーが出るんだよ!という話(実際私もこれではまっていた)。

Error completing task: An exception of type "org.jbpm.graph.def.DelegationException" was thrown. The message is: Cannot open connection

Closing the database context failed: An exception of type org.hibernate.exception.GenericJDBCException was thrown, with the message: Cannot open connection

で、回答にあたるのがリンク先なんだけど...何故かEJBTimerServiceのデータソースを変更しろっていう話なんだよね。投稿してる本人も解らんと言ってるので解らんのでしょう。JBossのjmx-consoleでEJBTimerBeanのPersistencePolicyの使うデータソースをDefaultDSからJbpmDSに変更し、MBeanを再起動したらとりあえずこの問題は出なくなった。JBoss再起動したりするので、今後はejb-deployer.xmlを変更しないと駄目だな。

何かまだ落とし穴がありそうな気がする。
環境でつまづくのはもうお腹いっぱいだから、早く開発に移りたい...

2009年2月9日月曜日

jBPMに触れてみる 3.1 of n (how to use jBPM3.x)

インストーラ通りにインストールしたんだが...
jsf-consoleが動かない。gwt-consoleは動く。うーん。

jbossのバージョンを5.0.0-GAから4.2.3-GAに変えて再インストールしてみたら動いた。
# JSF関連のエラーみたいだけど...面倒なので内容は追わないことにした。
なので、jBPM 3.3.1 + JBoss 4.2.3は一応動きましたってことで。








jsf-consoleの画面。すっきりしている。
このバージョンでもwebsaleプロセスが準備されているので、Think ITのjBPM記事を参考に実行できる...はずなのだが、最初のタスクでエラー...Hibernateがこけてるので、きっとバックエンドのDBあたりがおかしいんだと思う。インストール時にHipersonicを選んだのだが、勝手に設定してくれるわけじゃないのかな...。

[Think IT] 第2回 : 15分で試してみよう! (jBPMを試そう!特集)

以下はgwt-consoleの画面。BIRTだらけ。Preview機能だがBAMツールってことらしい。
プロセスを実行してないから?こっちもエラーが出てるけど...(^^;)

2009年2月7日土曜日

jBPMに触れてみる 3 of n (how to use jBPM3.x)

jBPM4はまだまだ実用レベルではないと判断して(alphaだからしょうがないが)、しばらくはjBPM3を触ることにする。以下、使えるようにするためのメモ書き。

PreRequiresとしてJBoss ASとEclipseがあると良い。今回はJBossAS-5.0.0-GAとEclipse3.4.1を選択。
  1. jBPM Downloadsから3.3.1をダウンロード。ページにSizeは28.0MBと書いてあるが実際は70MB程ある。
  2. ダウンロードしたjarファイルを実行するとインストーラが起動する。



  3. jBPMのインストール先を決める。



  4. インストールする追加コンポーネントを決める。



  5. 利用するJBossとサーバ構成を指定する。



  6. バックエンドで状態保持をするデータベースを指定する(Hypersonic/MySQL/Sybase)。



  7. JBossのHOMEを聞かれるので指定する。
  8. 確認画面後、ファイルが展開されて終了。
Eclipse側のセットアップはjBPM4で登録したプラグインを削除してから実施することにする。
(jPDL FeatureとFlow Common Featureを削除、XMLのスキーマ読み込みの解除)
マニュアルを見てないので正確ではないが、jBPM3をインストールしたディレクトリ/designerディレクトリにあるjbpm-jpdl-designer-site.zipをEclipseのSiteに追加したらOKな様子。

プラグインをインストールすると新規の一覧からJBoss jBPM >> Process Projectが選択できる。
とりあえずこれを使ってみよう。
  1. 新規でProcess Projectを選択するとプロジェクトの名前を聞かれる
  2. jBPMのRuntimeの場所を聞かれる。インストール先に指定したディレクトリを選択。
  3. finishでプロジェクト生成の完了。
生成されたプロジェクトにはサンプルが入っていて、src/main/jpdl/processdefinition.xmlを開くとプロセスエディタで見る事ができる。jBPM4より色々使えそう。そりゃそうか。
ひとまず今日はここまで...。



2009年2月4日水曜日

jBPMに触れてみる 2 of n (how to use jBPM4)

jBPM 4.0.0-Alpha1で遊ぶの巻。

セットアップ

Eclipseは3.4.1(ganymede)以上を利用。
セットアップ手順は同梱のreadmeに詳しいので参照されたし。
  1. jBPMサイトからアーカイブをダウンロード
  2. [GPD] ローカルに展開したファイルをサイトとして追加
  3. EclipseにjBPMライブラリを定義
  4. jPDL4 スキーマカタログを追加
  5. サンプルプロジェクトの追加 -> JUnitが足りないのでdependencyのUser Libraryも追加しておくと良い
プロセス構築について
  • 基本はプロセスを作る⇒それをハンドリングするJavaプログラムを書く、の順だと思われる。
  • GPDはどうも壊れることが多いようだ…
  • サンプルではstateアクティビティが良く使われているが、GPD利用時にstateがComponents一覧に無いのはどういうことなのか良くわからない。しょうがないのでjPDL4Editorは使わず、XMLEditorでごにょごにょすることにする。
プロセス実行までにソース上でやらなきゃいけないこと

ProcessEngineの初期化 <-- 設定ファイルが利用可能
ProcessServiceによるプロセスのデプロイ
ExecutionServiceによるプロセスの実行 <-- プロセスのバージョン指定も可能

プロセスを始めたり進めたりは出来るが、嬉しいポイントがまだわからない。
jBPM自体はただのライブラリなので「やろうと思えばどういう実装でも可能」というのが嬉しいところなんだろうけど...。
パートナーリンクとプロセス進行にあたる部分の自作を要求されているようで、そこが嬉しいのかどうかが今のところの疑問点。

このエントリを書いている時点では、jBPM4自体はAlpha版だけあってドキュメントも少なく、プロダクトとしての完成度はまだまだ。
ただTokenを使ってtoken.signal()とだけしていたもの(v3をちゃんと見ていないのでそれしか知らない)が、キー文字列やidでプロセスをあやつれる分API的には進化してそう。

jBPMに触れてみる 1 of n

某氏からリクエストを受けたのでjBPMについて書いてみることに。
まったく知らないので、一から勉強。

今のところjBPMについて自分が把握している事をとりあえず列挙。
知っていることと知らないことを明確にするのは重要だ。
  • 最新版はv4 Alpha1。安定版は3.3。
  • Embeddable。JavaSE環境での実行が可能。つまりJavaが動けばどこにでも載せられるBPMエンジン。
  • 自分の情報管理にDBを利用する(Oracle BPEL Process Managerのデハイドレーション・ストア・データベースみたいなもの?)。
  • jPDL (jBPM的プロセス言語、のはず), WS-BPEL, Seam Pageflowをサポートする。
  • Eclipse開発支援プラグインが準備されている(GPD)
  • 他未実装の機能がいくつか。
以下は未確認事項
  • v3とv4にどれだけ違いがあるのかはまだ調査していない。どっちを調べよう...
  • 依存ライブラリにhsqldbが入ってるので、外部にDBサーバが無いときはこれを使うに違いない。Java6からはJavaDBなんだろうか。
  • jPDLとWS-BPELの違いがどこまであるのか。
  • デハイド(正式名称が解らないのでこう呼んでしまうが)が同じ場所を指す二つのアプリケーションがある場合はちゃんと動くか?(Oracle BPEL PMのクラスタのイメージ)
Embeddableなのは良い事なのか悪いことなのか...予想できるのはプロセスのテストにデプロイが要らないだろうってことだが、BPM的なものが必要なアプリケーションって、WebサービスとかEJBとかとくっつけて一緒に動かないと意味ないんじゃーって思ったり。

2009年1月9日金曜日

Firefox3 on Debian etch 2 of 2

画像ライブラリビルド

しょうがないのでjpeg, tiff, pngの最新版をビルド。
jpegの共有ライブラリ(libjpegとかそんなの)はmake installではなく、make install-libを実行しないと
インストールされないらしい。
はまった...

gtk+ ビルド
  • jpegとtiffのヘッダファイルはhome/includeに直接置かれるので、CPPFLAGSに追加
  • jasper(JPEG2000)が無いと言われるが、withoutする。
  • gdk-pixbufのmakeで、gdk-pixbuf-enum-types.hだか何かでこける...なぜだー
    • どうもglib-mkenums(ヘッダを自動出力するPerlスクリプト)へのパスが/usr/binなので、これがいかんようである。PATHをglibをインストールした場所を先に読むようにする(つまりprefixのbin)。
      • PATH変更後もうまくいかない...
    • gtk+のソースを全削除、再展開してやってみることに。
      • うまくいったようだ...
gdk-pixbufの件はよく解らない。ググってもちゃんとした回答を得られている人が少ないようだったのでよしとしよう。

懸案事項として、ximをenableにしていない(デフォルトどっちなのか...)つまりこのgtk+では日本語入力があやしいかもしれない。

Firefox3ビルド
  • libIDLが無いといわれる。mozillaサイトからダウンロード。
    • libIDLのビルドでflex/lexが無いと言われる。debianパッケージでインストール。
    • flexインストールしconfigure成功するも、makeで失敗。うーん。
    • bisonが入っていなかったのが問題だった様子。
    • 念のため?libIDLも最新版(0.8.12)をビルドして使うことにする。
  • configureでsys/inttypes.hがどうのこうのと言われるが、libxt-devパッケージをインストールすることで解消。
makeのあとmake packageでtar玉が作成できるようだ。こりゃ便利。

で、tar玉をテキトーな場所で展開して、LD_LIBRARY_PATHをgtk+2.14がインストールされているディレクトリに通してあげて./firefox/firefoxを実行。
ちゃんと起動しましたよ、はい。
独自ビルドのFirefoxはMinefieldと呼ばれるらしい。なるほどね。

そういやcurlが無いんでcrashreporterをdisableにしてしまった。
これはあとでやり直しかな。

☆ ☆ ☆

独自ビルドの利点ってなんだろう?と思う。

Debianだとパッケージで準備されているものが古い(=こなれた)ものばかりなので、最新のものを使いたい!となると独自ビルドするのが常になるわけだ。これは立派な理由になる。

独自だと速い、ということもあるだろうが、そんなに違うのかな?
Linuxカーネルで要らないドライバを削除してモノリシックにくみ上げたら速くなるのは解るけど...今度Firefoxで計測してみよう。

なによりソフトウェアの依存関係がはっきりしたりとか、理解できたりするのが良いことなんじゃないかなぁ。構成管理とかパッケージメンテナって大変だよなって思う。
現にgtk.orgで入手できる依存相手のライブラリって古すぎたりするわけで。

このあたりの大変さを知って開発に望むのと、知らないでぼーっと参加するのじゃえらい違いだと思うわけです。

さて、折角gtk+の最新版をビルドしたから...次はGNOMEか!?

2009年1月7日水曜日

Firefox3 on Debian etch 1 of 2

今使っているDebian(etch)でFirefox3を使いたいが、現行ではGTKが2.8なので2.10以上を使え、と怒られる。
これでは埓が明かないので独自ビルドしてみることにする。

ライブラリの依存関係を良く知らないので怪しいが
  1. glib
  2. pango
  3. gtk+が依存するライブラリ
  4. gtk+
  5. firefox
という順番でビルドした。
gtk+やfirefox3自体は沢山のライブラリに依存していて
今回独自ビルドしたものでは足りないのだが、
そこはdebianが提供しているパッケージで済ませている。

...これは後になって気づいたことなのだが、gtk+までビルドが終わっていれば
firefox3のバイナリを落としてくるだけで使えるようである。
(LD_LIBRARY_PATHをビルドしたgtk+に通してあげるだけ)

基本的には依存関係の解決が出来ていれば問題無いようで、
makeで変にコケたのはgtk+だけ。

ダウンロード

ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/

からFirefox 3.0.5をダウンロード。

http://www.gtk.org/

からGTK一式をダウンロード。

gtk+-2.14.0
Pango-1.20.5
glib-2.18.3

gtk+のビルドに必要なatkとcairo, 画像ライブラリ(jpeg/tiff/png)は
GTKのサイトではなく配布元から取ってくる必要がある。
中途半端に置いておくのはやめてほしい...

http://ftp.gnome.org/pub/gnome/sources/atk/
http://cairographics.org/releases/
ftp://ftp.uu.net/graphics/jpeg
ftp://ftp.remotesensing.org/pub/libtiff

atk 1.25.2
cairo 1.8.6

cairoをビルドするのにpixmanも必要なので落としておくこと。
png用ライブラリはどこから落としたか忘れた...
firefoxをビルドするのに必要なlibIDLはGNOMEサイトから。

ftp://ftp.gnome.org/pub/GNOME/sources/libIDL

展開

ビルド用ディレクトリ($HOME/Garage/sourcesとしている)に上記のパッケージを展開

ビルド

glibのビルド

prefixに自分のビルド用HOME($HOME/Garage/home)を指定してビルド

pangoのビルド

インストールしたglibを指すようにしたあとでconfigure実行

export CPPFLAGS="-I<$HOME>/Garage/home/lib/glib-2.0/include"
export LDFLAGS="-L<$HOME>/Garage/home/lib"
export PKG_CONFIG_PATH="<$HOME>/Garage/home/lib/pkgconfig"
./configure --prefix=$HOME/Garage/home

次回はgtk+のビルド実施。