Home > プログラミング Archive

プログラミング Archive

「BPEL4People」について少し調べてみました 「BPEL4People」について少し調べてみました

「BPEL4People」について知る必要があったので、少し調べてみました。

BPEL4Peopleとは

BPEL4Peopleとは、「BPEL for People」、つまり人間のためのBPELのことを指します。

BPELは本来、SOAの概念を実現するためにWebサービスを連携させて一つのシステムを構築する際の、Webサービスの連携フローを記述するために用いられるXMLベースの言語です。

しかし、多くのシステムの稼働時では、人が参加して作業を実行したり確認したりすることが多くなっており、Webサービス同士の連携のみ記述できるBPELではシステムの動作・仕様を正確に表現することが難しくなってきたようです。

そこで、人の行動・アクティビティもWebサービスと同じようにサービスとして統一的に記述することができる、BPEL4Peopleが開発されました。
人の行動をサービスとみなし、それらを含めたWebサービス同士の連携を記述可能とすることで、より詳細、正確なSOAに基づいたシステムが構築可能になるようです。

まとめ

人の行動もサービスとして統一的に記述するというBPEL4Peopleのアイデアに非常に関心を持ちました。

イレギュラーな行動をする可能性がある人をサービスとみなすことをは、非常に難しいことだと思います。
しかし、これが実現されると、世界でもっとも知的なサービス(人をサービスとみなしたもの)を既に存在するWebサービスと連携して利用することが出来るようになります。

これはすごい。
実用化例はあるんでしょうか?気になるところです。

自分の研究でも利用したいと思うので、下記の仕様書をより詳しく読んでみたいと思います。

参考文献

「SOA」について少し調べてみました「SOA」について少し調べてみました

「SOA」という言葉について知る必要が出てきたので、少しだけ調べてみました。

SOAとは

SOAとは、システム全体を「サービス」と呼ばれる部品を組み合わせることによって構築しようという手法、およびシステムアーキテクチャのことを指します。

部品を組み合わせてシステムを構築する手法は、オブジェクト指向などが従来にも存在していました。
それらの従来手法とSOAの違いは、組み合わせる部品(SOAにおけるサービス)の定義にあります。

SOAにおけるサービスは、実際に人間にとって意味のある単位を最小単位としています。
「人間にとって意味のある」というのは曖昧な表現ですが、しばしば業務上の処理単位を示しているようです。
(注文受付、在庫確認、発注処理など)

つまりSOAとは、人間にとって意味のある業務上の処理を単位としてサービスを定義し、それらを組み合わせることで一つの大きなシステムを作り上げることのことを指すのでしょうか。

SOAにおけるサービスは、グローバルに公開され、組織外における利用も想定されているため、標準的な技術によって実現、呼び出し可能であることが必要です。
サービスの呼び出し方法・インタフェースとして、しばしばWebサービスが利用されるみたい。
Webサービスは、XML、SOAP、WSDL、UDDIなどの標準的な技術によって構成されるので、SOAのサービスが満たすべき条件はクリアしていますね。
サービスの処理部分は何で実装されていても(Java or .Net or その他)いいようです。

また、複数のサービスを連携して一つのシステムを作り上げる必要があるため、それらの連携を記述する方法も標準化されている必要があります。
連携手順の記述言語としては、BPELと呼ばれるXMLベースの言語が用いられるみたい。
BPELは、BPMNという表記法によって図として作成することができ、視覚的に簡単に作成可能だとか。

まとめ

少し勉強した感じですが、すごく便利そうな概念ですね。
実際に世の中にSOAの考え方で構築されたシステムってどのくらい稼働しているんだろう。

あと、業務システムだけじゃなく、たとえば家電機器の連携に使ったりしても面白いんじゃないかと思いました。
既に研究されているような気もしますが。

新しいことを勉強するのってすごく楽しいですね。
これからも色々勉強したことをメモしていきまーす。

参考文献

[Java]ソースコード内で利用するhttpプロキシサーバを設定する[Java]ソースコード内で利用するhttpプロキシサーバを設定する

  • Posted by: kadoppe
  • 2008年4月29日 17:58

先のエントリーで、VM引数によりプログラムが利用するhttpプロキシサーバを設定する方法を紹介しました。
[Java]VM引数で利用するproxyサーバを設定する

今回はソースコードの中で、プログラムが利用するhttpプロキシサーバを設定する方法を紹介します。

Javaソースコード内に以下を記述することで利用するhttpプロキシサーバを設定することが出来ます。

System.setProperty("http.proxyHost", "proxy.bar.com"); // 利用するProxyサーバのhost名
System.setProperty("http.proxyPort", "8080"); // port名
System.setProperty("http.nonProxyHosts", "localhost"); // Proxyサーバに介さず直接アクセスするhost名

ソースコードの中に、プログラムを動作させる環境に依存する記述をするのは良くないことかと思います。
ですがまぁ、手っ取り早く利用するProxy環境を試したいときに使ってみるのはいかがでしょうか。

[Java]VM引数で利用するproxyサーバを設定する[Java]VM引数で利用するproxyサーバを設定する

インターネットに接続する必要があるJavaプログラムを、proxy環境で実行する場合、利用するproxyサーバを設定しなければなりません。

proxyサーバの設定方法は色々あると思うのですが、今回はVM引数により設定する方法を紹介します。

Javaプログラムを実行する際に以下ののようにコマンドを打つことでproxyサーバを設定することが出来ます。

$ java -Dhttp.proxyHost=<proxyサーバのアドレス> -Dhttp.proxyPort=<プロキシサーバのポート番号> <クラスファイル名>

僕はこれ知らなくて、結構悩んでしまいました。
proxy環境って色々面倒ですね;;

日曜プログラミングで作ってみたいアプリケーション日曜プログラミングで作ってみたいアプリケーション

僕の今年の目標の一つに「3つアプリケーションを自分で作って、なおかつ公開する」というものがあります。

しかし、今年に入って丸3ヶ月たちましたが、まだ一つも作っていない、というか作り始めてもいない状況です。

時間を追うごとに忙しくなってる感がありますが、ここでめげてはいけません!
作りたいアプリケーションを記事に書いて、ちょっとモチベーションを高めてみたいと思います。

サイクルシステムのWeb版

エンジニアのための時間管理術」という書籍で紹介されていた、「サイクルシステム」というタスク管理ツールのWeb版です。

サイクルシステムの詳細な説明は割愛しますが、これほど自分にぴったり合ったタスク管理ツールは無いと思いました。
自分でサイクルシステムを使ったタスク管理ができる手帳もどきを作ったぐらいです。
20070510211433.jpg

でも、やっぱりアナログなツールは記入効率の面でデジタルなツールよりも少し劣る気がします。
なので、Webでサイクルシステムを使ったタスク管理ツールを作れたらいいな、と思いました。

できればWeb版はFlexで作って、クライアントアプリ版をAIRで作りたいな。
両方は完全に同期出来る感じで・・・

Mac用メモ&データベースツール

さくさくメモを作成&階層的に管理できて、なおかつPDFやWord、PowerPointのファイルを管理できてしまう、Mac用の総合的なデータベースツールを作ってみたいです。

この種のアプリは結構種類があって、今話題のEverNoteや、MoriMacJournalTogetherDEVONthinkなど、あげればキリがないのですが、どれも微妙に自分のニーズを満たしていないような気がします。

僕が満足する条件は次のような感じ。

  • テキスト、ソースコード、PDF、Word、プレゼン用スライド、メール、Webページなど、ファイルの種類を問わず一つのデータベースで管理可能
  • 上記のファイルに対し全文検索可能(Spotlightでいいじゃん、というのはナシで・・)
  • ソースコードは自動で色分けしてくれる
  • Web版とクライアントアプリ版があって、両方で完全に同期できる(これ重要)
  • 黒字に白文字の画面でメモがとれる

あるようで無いんですよね・・・(もしかしたら見落としてるだけかも・・)
現時点で一番近いのはEverNoteなのかな・・?(手書き文字認識出来るのはすごいなぁ)

まとめ

完全に自己満足ですね。
でも、何かを作る時って、「自分を満足させるため」というようなモチベーションもいくらか必要な気がします。

もし作るとしたら、結構な労力になりそうです。(特に2つ目)
まぁ、頑張って作ってみよー!

もう、どこかで既にあったりするのかなぁ・・?
ご存じの方はもし良かったら教えてください!

[Wicket修行日記:9]ExampleGuestBook[Wicket修行日記:9]ExampleGuestBook

Wicket修行日記目次

今回は次のExampleを勉強しました。
Apache Wicket - GuestBook

このアプリケーションはいわゆるゲストブック、つまり簡易掲示板です。
試しに使ってみたい方は以下のページにアクセスしてください。(書き込みが荒れまくってますがw)
http://wicketstuff.org/wicket13/guestbook/

それでは、このアプリケーションを実際に動かしてみてわかったことを書いていきます。

Continue reading

[Wicket修行日記:8]ExampleNavomatic[Wicket修行日記:8]ExampleNavomatic

Wicket修行日記目次

久々の更新です。
滞ってしまい、ごめんなさい。

今回は、Apache Wicket - Examplesの「Navomatic」について勉強しました。
ちょっと難しかったです・・・

アプリケーションの内容については、説明するよりも実際に使ってもらった方がわかりやすいと思います。
http://wicketstuff.org/wicket13/navomatic/

本家ページでは英語でチュートリアルが書かれているのですが、日本語に翻訳されたページも発見しましたので紹介します。
Wicket Examples ■Navomatic - iad_otomamay@kronos-jp.netの日記

それでは、気づいたこと、学んだことを書いていきたいと思います。

Continue reading

[wicket修行日記:7][Apache Wicket - Examples編]HelloWorldをやってみる[wicket修行日記:7][Apache Wicket - Examples編]HelloWorldをやってみる

Wicket修行日記:目次

前回、Wicketの開発環境を構築しましたが、色々あって、結局Emacs + JDEE + ECBの組み合わせに落ち着きました。
Eclipse使いたかったなぁ・・・

何はともあれ開発環境も構築できましたので、そろそろ実際にコードを書いて勉強しようと思います。
(進むのが遅くてごめんなさい)

Wicketの公式ページにちょうど良さそうな「Examples」というページがありましたので、今回からしばらくの間「Apache Wicket -Examples編」ということで記事を書いていこうと思います。
Apache Wicket -Examples

「Apache Wicket - Examples編」の記念すべき第1回は、その名も「HelloWorld!」です。
Apache Wicket - ExampleHelloWorld

それでは順を追って説明していきたいと思います。

Continue reading

[Wicket修行日記:6]Wicketの開発環境を構築[Wicket修行日記:6]Wicketの開発環境を構築

Wicket修行日記:目次

このところ学校の用事でとても忙しかったので更新が滞っておりました。
ごめんなさい。

今後、色々なチュートリアルを試しながら勉強していこうと思うので、その下準備として開発環境を構築してみることにしました。

ちなみに僕の基本的な開発環境は以下の通り。
ここから先の説明は、使っているOSの種類によって変わってくると思うので、適当に読み替えてください。

  • PC

    Mac Book

  • OS

    Mac OS X Leopard

何を使うか色々考えたのですが、結局Eclipse、Maven2、Jettyの組み合わせで開発していくことに決めました。

今回は、Wicketプロジェクトを作成、Eclipseにインポート、Jettyで動作確認、までの流れを紹介したいと思います。

Continue reading

Maven2でエラーがでて困りました。Maven2でエラーがでて困りました。

研究室で、

mvn eclipse:eclipse

コマンドを実行すると、以下のような結果が表示され、コマンドが成功しませんでした。

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'eclipse'.
[INFO] org.codehaus.mojo: checking for updates from central
[WARNING] repository metadata for: 'org.codehaus.mojo' could not be retrieved from repository: central due to an error: Error transferring file
[INFO] Repository 'central' will be blacklisted
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] The plugin 'org.apache.maven.plugins:maven-eclipse-plugin' does not exist or no valid version could be found
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Mon Feb 18 20:56:09 JST 2008
[INFO] Final Memory: 1M/2M
[INFO] ------------------------------------------------------------------------

一瞬考えたあと、プロキシ環境化でMaven2を使うときは設定が必要だということを思い出し、以下のサイトを参考にしてプロキシの設定を行いました。
(settings.xmlは.m2ディレクトリ直下に配置します。なければ新規作成)
Maven2のTipsを集めるWiki - CookBook

気を取り直して、再度コマンドを実行!
しかし、メッセージは変わったものの結局はコマンドが成功しませんでした。

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'eclipse'.
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] The plugin 'org.apache.maven.plugins:maven-eclipse-plugin' does not exist or no valid version could be found
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Mon Feb 18 21:00:01 JST 2008
[INFO] Final Memory: 1M/2M
[INFO] ------------------------------------------------------------------------

試しに、プロキシ環境ではないネットワークからコマンドを実行したりもしたのですが、結果は同じ。

もう駄目かも・・・と途方に暮れていると、解決方法が書かれた次のページを発見しました!
自宅環境もOK - 豆無日記

原因

どうやら、プロキシ設定を行っていないときにmvnコマンドを実行すると、リモートリポジトリにアクセスした際に必要なファイルを取得することができず、ローカルには壊れたファイルのみが残るようです。

そして、次回以降mvnコマンドを実行した際には、ローカルに残った壊れたファイルを参照するため、エラーが発生してしまうようです。

この問題を解消するためには、壊れたファイルを一旦手動で削除し、リモートリポジトリから再度取得しなければなりません。
なんとまぁ不親切な設計・・・。
僕の中のMaven2株が少し落ちました。

なにはともあれ、これで問題解決です!
id:nobeansさん、どうもありがとうございました!

[Wicket修行日記:5]wicket-ja.orgが公開[Wicket修行日記:5]wicket-ja.orgが公開

Wicket修行日記目次

日本Wicketユーザグループ、Wicket-jaのウェブサイトが公開されました!
WicketやWicket-ja(うぃけっとじゃ、と読むみたい)が紹介されています。

http://www.wicket-ja.org/

また、ユーザグループの皆さんで作っていくWikiもあるみたいです!

http://sourceforge.jp/projects/wicket-ja/wiki/FrontPage

今は活用するだけですが、ゆくゆくはWicketマスターになってユーザグループに貢献したいと思います!

頑張るぞー!

次へ進む。

[Wicket修行日記:4]自動生成したWicketプロジェクトの中身を調べてみる[Wicket修行日記:4]自動生成したWicketプロジェクトの中身を調べてみる

Wicket修行日記目次

前回に引き続き、自動生成したWicketプロジェクトがらみのないようです。

今回は、前回自動生成したWicketプロジェクトの中にある個々のファイルについて調べてみようと思います!

Continue reading

[Wicket修行日記:3]自動生成したWicketプロジェクトを動かしてみる[Wicket修行日記:3]自動生成したWicketプロジェクトを動かしてみる

Wicket修行日記目次

前回の記事で自動生成したWicketプロジェクトを実際に動かしてみたいと思います。
[Wicket修行日記:2]Wicketのプロジェクトを自動生成!

方法は前回の記事でも紹介した「Apache Wicket -QuickStart」ページに書いてありました!

早速動かしてみる

まず、最初にターミナル(コマンドプロンプト)を起動して、前回作成したプロジェクトのディレクトリに移動します。
僕は「ホームディレクトリ/work/」に「myproject」というプロジェクトを作成したので、以下のコマンドを入力します。

$ cd ~/work/myproject/

次に、以下のコマンドを実行します。

$ mvn jetty:run

「Started Jetty Server」と表示されたら、Webブラウザで以下のアドレスにアクセスします。
http://localhost:8080/myproject

すると、以下の画面が表示されます。
英語で「あなたがこのメッセージを見ているなら、Wicketは適切に設定され動作しています」と書かれています。

wicket3.jpg

まとめ

「あれ、これで動いたの?」と一瞬疑ったくらい簡単ですね!

Jettyという単語がでてきましたが、これはTomcatと良く似たServletコンテナのようです。
Tomcatよりも軽い、HTTPサーバとしての機能がしっかりしていることが特徴のようです。

JettyもWicketも僕自身の手ではインストールしていないのですが、動いてしまいました。
これは、Mavenが動作に必要なプログラムを自動でダウンロードしてくれてるからのようです。
恐るべし、Maven。
役に立ち過ぎですよ。

何はともあれ、なんとかWicketのはじめの第一歩を踏み出せたような気がします。
(まだコードは一切書いていないですが・・)

次回はMavenで作成したプロジェクトに含まれるコードの中身について書きたいと思います。
乞うご期待!

次に進む。

[Wicket修行日記:2]Wicketのプロジェクトを自動生成![Wicket修行日記:2]Wicketのプロジェクトを自動生成!

目次

前回の記事で、Wicketの勉強に役立ちそうなページを列挙しましたが、どのページから始めればわからない・・・

とりあえず、本家ページから攻略していこうと思い、Apache Wicketにアクセスしたところ、QuickStartというページを発見しました。
Apache Wicket - QuickStart

Wicketプロジェクトの作成

ページにアクセスするとまず目につくのは以下のフォーム。

wicket1.jpg

どうやらこのフォームから、Wicketのプロジェクトを作成するコマンドを生成できるみたい!
早速試してみることに。

以下、フォームの各項目の説明です。

  • GroupID

    ソースを格納するパッケージ名。よくわからなければとりあえずはそのままでOK。

  • ArtifactID

    プロジェクトを格納するディレクトリの名前。また、実際にブラウザからWicketアプリにアクセスするときは、「http://localhost:8080/<ArtifactID>」でアクセスすることになります。

  • Version

    Wicketのバージョンを指定。1.3.1でOK。

以上の項目をすべて入力し終えると、いつのまにかCommand Lineテキストエリアにプロジェクトを作成するためのコマンドが出力されます。

mvn archetype:create -DarchetypeGroupId=org.apache.wicket -DarchetypeArtifactId=wicket-archetype-quickstart -DarchetypeVersion=1.3.1 -DgroupId=com.mycompany -DartifactId=myproject

mvnコマンド???

「mvn」という見慣れないコマンドですが、これはMaven2というプログラムを呼び出すためのものです。
もし自分の環境に入っていない場合は、以下のページを参考にインストールしましょう。

コマンドの実行

生成されたコマンドをMacのターミナルか、Windowsのコマンドプロンプトで実行します。
すると何やら色々なファイルをダウンロードしたあとに、プロジェクトの作成が完了します。

どうやらMaven2ではWicketの構築に必要なライブラリ等も自動的に作成してくれるみたい。

コマンドの実行が完了すると、実行したディレクトリに以下のような構成のプロジェクトが作成されます!

wicket2.jpg

まとめ

Maven2恐るべし・・・、なんて便利なんでしょう・・・

次回は、自動生成したプロジェクトを実際に動作させてみようと思います。
乞うご期待!

次に進む。

[Wicket修行日記:1]Wicketを勉強できそうなページを集めてみる[Wicket修行日記:1]Wicketを勉強できそうなページを集めてみる

Wicket修行日記:目次

Wicketの学習に取りかかる前に、Wicketの学習に役立ちそうなページを集めてみました。

今回は集めたページを簡単に紹介していきたいと思います!

公式系

メーリングリスト

  • Wicket-ja-user

    Wicketの日本語メーリングリスト。まだあまり活発な議論は行われていませんが、これからに期待!?

チュートリアル系

ブログ

  • A Wicket Diary

    その名の通り、主にWicketについて書かれているブログ。英語。

  • 矢野勉のはてな日記

    Wicket-ja創設者のブログ。Wicketのことについての記事が結構ありそうです。

  • Wicket学習帳

    ブログまるごと全体がWicketの情報です。ただ、あまり更新頻度は高くない模様。

まとめ

探せば色々ありますね!
まだまだ見つかるかも・・・

新しいページを発見次第、また追加していきたいと思います。

次へ進む。

Carbon EmacsにECBとpsvn.elをインストールCarbon EmacsにECBとpsvn.elをインストール

Mac OS X Leopard上のCarbon EmacsにECBとpsvn.elをインストールします。

ECB

ECB(Emacs Code Browser)はEmacsの画面を3ペイン、またはそれ以上に分割し、Eclipseのような環境を構築するためのmodeです。

ディレクトリやファイルのブラウジングがとても快適になるみたい。

psvn.el

psvn.elは、Emacs上でSubversionのレポジトリを操作するための拡張です。

Eclipseでいうと「Subclipse」の位置づけですかね!

インストール方法

インストール方法は全面的にmasuidriveさんの
OSX Emacsで快適なRails開発ライフを送る
を参考にさせて頂きました。
ありがとうございました!

スクリーンショット

ecb.jpg

まとめ

無事インストールできたものの、使い方をあまり理解していない僕・・・。

これから使いこなせるように頑張って勉強します!

[Wicket修行日記:0]はじめに[Wicket修行日記:0]はじめに

こんにちは、当ブログの管理人のkadoppeです。

今回、Wicketという技術を習得するため、「Wicket修行日記」というタイトルで勝手に連載を始めることにしました。

まずは最初ということで、Wicketがどういう技術なのか(僕もほとんど知らない状態)、僕自身のスペック、連載のスタンス、最終的な目標などを述べたいと思います。

Wicketって??

Wikcetは、Javaのウェブアプリケーションフレームワークだそうです。

アルバイトでStrutsを使っているのですが、xmlを記述するのに嫌気がさして、何か他にいいフレームワークがないかなぁ、と探していたところ、Wicketを発見しました。

Strutsなどの他のフレームワークでは大量のxmlを記述する必要があるのですが、Wikcetではhtmlとjavaのソースコードを記述するだけでWebアプリケーションが構築できるみたい。
これが、僕がWicketを勉強しようと思った最大のきっかけですね。

また、オブジェクト指向でプログラムを書く人がとっつきやすい方法でWebアプリケーションを構築できることも特徴のようです。

僕のスペック

年齢:23
性別:男
職業:大学院生
プログラミング歴:4年(中身はスカスカ)
使用したことのある言語:C, C++, Java, PHP, VB
主な経験:
PHPによるWebサイト構築のアルバイトを約1年
StrutsによるWebサイトの構築ボランティアを少し
Struts+EJBによるWebサービスの構築アルバイト(現在進行中)

プログラミングに関しては、本当に必要となった部分だけしか勉強をしていないので、「あれ、そんなこともしらないの?」と思われる部分が多々あるかもしれません。
そこは、やる気と飲み込みの早さでカバーです!

この連載の目標

最終的にWicketを使って一つのWebアプリケーションを構築し、それを公開することを目標とします。

作りたいものは一応頭の中にはあるんですけど、詳しくは後ほど説明したいと思います。

目標を達成するまでのトライ&エラーも含めてエントリーに書いていこうと思うので、チュートリアルとしては不出来なものになるかと思いますが、暖かい目で見守ってやってください。。

というわけで。

これから僕は、Wicketマスターを目指します!

よろしくお願いします!

次に進む。

Carbon EmacsにインストールしたJDEEをバイトコンパイルするCarbon EmacsにインストールしたJDEEをバイトコンパイルする

Emacsの起動や、その他もろもろの動作を速くするため、先ほどインストールしたJDEEをバイトコンパイルしてみました。
CreativeStyle - Carbon EmacsにJDEEをインストール

なお、当方の環境は以下の通り。

  • Leopard
  • Carbon Emacs 2008年冬版
  • jde-2.3.5.1

「JDEE:Java Development Environment for Emacs」を参考に、以下のコマンドを実行しました。

$ cd /Applications/Emacs.app/Contents/Resources/site-lisp/jde-2.3.5.1/lisp/
$ make EMACS=../../../../MacOS/Emacs CEDET=../../cedet ELIB=../../elib

途中まではうまくっていたんですが、途中でエラーが出てしまいました。

In end of data:
setnu.el:452:64:Warning: the following functions are not known to be defined:
    set-extent-begin-glyph, remove-specifier, set-specifier
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/jde-2.3.5.1/lisp/setnu.elc
make: *** [all] Error 1

ですが、emacsを起動してみると、確かに起動がバイトコンパイルを試みる前より速くなってました。
謎です。不思議です。

まぁ、動いたのでよしとしますか!
でもちょっと心配・・・

Carbon EmacsにJDEEをインストールCarbon EmacsにJDEEをインストール

Mac OS X Leopard上のeclipseがあまりにも重い&不安定なため、これから特に支障がなければemacsでJava開発を行うことにしました。

で、どうやらJDEEというemacs用のJava開発環境があるみたいで、それを試してみようと思います。

具体的にはこんなことができるみたいです。

JDEEは、Emacs用の強力なJava開発パッケージです。コーディング支援機能、ビルド用のプロジェクト管理機能、デバッガなど豊富な機能を持っています。昨今の統合開発環境との違いは、ユーザインタフェースがキャラクタ指向(CUI)な点だけといってもいいでしょう(GUI指向よりCUI指向の方を好む人も多いです)。Emacsの強力過ぎる編集機能に慣れてしまうと、統合開発環境のおまけ的なエディタの貧弱な編集機能ではストレスを感じてしまいます。
JDEE:Java Development Environment for Emacs

インストールは以下の記事を参考にして無事完了しました。
ありがとうございました。
MacのCarbonEmacsにJDEEを入れる:さむしんぐにゅぅ

僕の環境はLeopard + Carbon Emacs (This is GNU Emacs 22.1.50.1 (i386-apple-darwin8.11.1, Carbon Version 1.6.0)でしたが、記事に書いてある通りのことを実行するだけでインストールできました。
あ、一応xcode toolsはインストールしておかなければならないみたい。
CreativeStyle - Mac OS X(Leopard)にXcodeをインストール

インストールが完了したものはいいものの、大変そうな設定、emacsに慣れる、などなど、ものすごく前途多難な気がします・・・

頑張れ、自分!

[Java]ArrayListの中身をソートする[Java]ArrayListの中身をソートする

ArrayListの中身をソートする方法を覚えたのでメモ。
もう忘れないぞー!

サンプルコードを以下に示します。

SortTest.java

mainメソッドを含むクラス。
Collecttionsクラスのsortメソッドに、ArrayListのオブジェクトと、ソートのルールを記述した無名インナークラスのオブジェクトを引数として渡しています。

引数として与えたArrayListのオブジェクトの中身が、メソッド終了時にはソートされた状態になっています。
sortメソッドは何も返さないので注意!

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortTest {
	public static void main (String args[]) {
		// ArrayListを作成
		List<TestClass> list = new ArrayList<TestClass>();
		
		// ArrayListに格納するオブジェクトを作成
		TestClass tc1 = new TestClass();
		TestClass tc2 = new TestClass();
		TestClass tc3 = new TestClass();
		TestClass tc4 = new TestClass();
		
		// オブジェクトに名前をセット
		tc1.setName("zzz");
		tc2.setName("bbb");
		tc3.setName("ppp");
		tc4.setName("jjj");
		
		// オブジェクトに値をセット
		tc1.setValue(4);
		tc2.setValue(6);
		tc3.setValue(1);
		tc4.setValue(3);
		
		// オブジェクトをArrayListに格納
		list.add(tc1);
		list.add(tc2);
		list.add(tc3);
		list.add(tc4);
		
		// ArrayListの内容を表示
		System.out.println("----- 初期状態 -----");
		for(TestClass tc : list) {
			System.out.println("name: " + tc.getName() + " value: " + tc.getValue());
		}
		
		// nameの昇順でソート
		Collections.sort(list, new Comparator<TestClass>() {
			public int compare(TestClass tc1, TestClass tc2) {
				String tc1Name = tc1.getName();
				String tc2Name = tc2.getName();
				if (tc1Name.compareTo(tc2Name) < 0) {
					return -1;
				} else if (tc1Name.compareTo(tc2Name) > 0) {
					return 1;
				}
				return 0;
			}
		});
		
		// ArrayListの内容を表示
		System.out.println("\n----- nameでソート -----");
		for(TestClass tc : list) {
			System.out.println("name: " + tc.getName() + " value: " + tc.getValue());
		}

		// valueの昇順でソート
		Collections.sort(list, new Comparator<TestClass>() {
			public int compare(TestClass tc1, TestClass tc2) {
				int tc1Value = tc1.getValue();
				int tc2Value = tc2.getValue();
				if (tc1Value < tc2Value) {
					return -1;
				} else if (tc1Value > tc2Value) {
					return 1;
				}
				return 0;
			}
		});
		
		// ArrayListの内容を表示
		System.out.println("\n----- valueでソート -----");
		for(TestClass tc : list) {
			System.out.println("name: " + tc.getName() + " value: " + tc.getValue());
		}
	}
}

TestClass.java

ArrayListに格納するオブジェクトのクラス。

public class TestClass {
	private String name;
	private int value;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getValue() {
		return value;
	}
	public void setValue(int value) {
		this.value = value;
	}
}

実行結果

きちんとソートされているのがわかります。

----- 初期状態 -----
name: zzz value: 4
name: bbb value: 6
name: ppp value: 1
name: jjj value: 3

----- nameでソート -----
name: bbb value: 6
name: jjj value: 3
name: ppp value: 1
name: zzz value: 4

----- valueでソート -----
name: ppp value: 1
name: jjj value: 3
name: zzz value: 4
name: bbb value: 6

まとめ

無名インナークラスを使う事で、ソートのルールを記述する用のクラスを作成しなくてもよくなり。
手間が省けていい!

もっと上手い方法があればどなたか教えてください!

Java(自分が使っているプログラミング言語)って何だろう。Java(自分が使っているプログラミング言語)って何だろう。

みなさんは、自分が普段使っているプログラミング言語がどんな言語か理解していますか?

とある面接にて

先日、僕はとある研究所の面接で次のような質問を受けました。

「普段、Javaを使っているとのことでしたが、Javaってどんな言語ですか?」

僕は少し考えた後に次のような感じで答えました。

「一度作成したプログラムが、アーキテクチャの異なる複数のマシンで動くのが特・・・・・」

最後まで答えきる前に次のように返されました。

「それは中間コードを生成するプログラムの説明であって、Javaの説明にはなっていない」

僕以外の面接者が「ガベッジコレクション」のことを話していましたが、それも意図した答えではないようでした。

「答えはあってないようなもの」
と言われ、面接は終了しました。

結局その日、質問の答えが明かされることはありませんでした。

それから少し考えたこと

それからしばらく、
「Javaってどんな言語だろう」
「なんで僕はJavaを使っているんだろう」
みたいなことを考えました。

でも、僕がJavaを使っている理由を考えてみても、

  • 大学で2番目に習った言語で、みんなやってるから
  • 大学でオブジェクト指向を習うときに使った言語で、それ以来「プログラムを書くならオブジェクト指向→オブジェクト指向で書くならJava」というイメージを持ったから

のような、他人が主体となるものしか浮かんできません。

Javaはいったいどのような言語なのでしょうか?
Javaと他の言語との本質的な違いは??

今まで深く考えたことの無い事。
考えずに使っているのは僕だけなのでしょうか?

自然言語に置き換えてみる

少し煮詰まったので、自然言語に置き換えて考えてみました。

僕が一番使えるのは「日本語」です。

僕が日本語を使っている理由は、

  • 両親が日本語を使っていたから
  • 自分の生活圏にいる人と会話するのに日本語が一番便利だから

だと思います。
つまりは、「みんな日本語使っているから」。

日本語が他の言語と比較してどんな言語か考えたこともないです。

実はそれはとてもいけないことで、日本語と中国語、日本語と韓国語などなど、近隣諸国の言語と比較することで、「日本語とはなんであるか」について日々追求していかなければならないのかもしれません。
だから学校で古文とか漢文とかを習うのかもしれない。

まとめ

自然言語に話を置き換えて余計に混乱したかもしれません。

でも、自分の使っている言語の事は、他人に聞かれたら明確に答えられるくらい知っておかなければならない気がしてきました。
いや、きっとそうです。

僕は現状、Javaがどんな言語で、どんな特徴を持っているのか、正しく答える事ができません。
これはもしかすると、とても危機的な状況なのかもしれません。

なので、僕はこれから、今自分が使っている言語がどういうものであるかということを、常に意識しながらプログラムを書いていきたいと思います。
ある言語について知るためには、もしかすると他の言語についても知る必要がありません。
特定の言語だけではなくて、プログラミング言語全体の流れ・歴史のようなものも知っておく必要があるかも知れません。

もしかして、こんな事を考えているのは僕だけなのでしょうか?
実は、「自分が使っている言語がどのようなものであるか」を知らないのはごく少数?

みなさんは自分が使っている言語のこと、きちんとわかってあげられてますか?

PHP勉強会@大阪に参加してきましたPHP勉強会@大阪に参加してきました

昨日、大阪の心斎橋で行われたPHP勉強会に参加してきました!

とても簡単な参加レポート

勉強会会場はアップルストア心斎橋の2階。
「あれ、ここであってるのかな?」と一瞬疑ってしまうほど、「勉強会」っぽくないとてもオープンな会場。
横長で席が2列しかなかったので、どこに座ってもスクリーンを近くで見ることができる良い感じの場所でした。

参加人数が思っていたよりも多く、立ち見の方がおられるほどの大盛況!
どうやら参加人数は50名を超えていたようです。すごいですね!
意外に女性の方も多かったです。

勉強会の内容は、初心者向けということもあってPHPの概要がメインでしたが、「TextMate」や「Pleiades All-in-one」等のPHPでの開発に使える開発環境に関するお話も聞けたのでとても満足でした。

少し二つの開発環境についてまとめ。

  • TextMate

    シェアウェア。
    日本円にすると大体6000円ほどするそうなので、少し高めですね。
    日本語の入力・表示に難があるようなのですが、プラグインでなんとかなるようです。
    機能的には、普通のテキストエディタよりも賢い感じ。
    関数名補完や引数補完が可能です。

  • Pleiades All-in-one

    無料です。
    僕は以前から「All-in-one」ではなくてプラグインを愛用させていただいております。
    ほとんどのメジャーなプラグインを一気に日本語化できるため、とても重宝しています。
    「All-in-one」は、かなりの確率の利用されるだろうプラグインをプリインストールしたEclipseのディストリビューションです。
    Eclipseベースなので補完機能や変数定義場所にジャンプできる機能など、機能面では申し分ないと思います。
    ただ、Eclipseベースの開発環境はテキストエディタと比較して動作が遅いのが気になるところです。

勉強会後の懇親会も参加させて頂きました!
こちらも参加人数が30人越えということで、とても賑やかな飲み会になってました。

席をご一緒させて頂いた方からは、普段研究室にいるだけではあまり聞けないようなお話を聞かせていただき、とても楽しい時間を過ごすことができました。
ありがとうございました!

まとめ

大阪で行われる勉強会ということで参加を即決した今回の勉強会。

参加してみて、やっぱりこういう場に出ていくということはとても大事な事だと思いました。
普段お会いできないような方々と交流することで、自分が知らない分野へ一歩踏み出すきっかけを作ることができると思います。

次回があるようでしたら、是非参加させていただきたいと思います。
僕も何かお手伝いできることがあればいいんですけどね…(何かお話するとか、会場とか)
僕はただの学生なので、普段仕事でPHPをされてる方には到底かないませんが…(笑)

内容的には、セキュリティ関連のお題もあれば面白いかなと思いました。
(タイムリーな話題だったり・・・)

では、最後に主催者のid:ku-sukeさん、そして発表者のみなさんにお礼を申し上げたいと思います。

今回のような貴重な場を設けていただき、どうもありがとうございました!
また、よろしくお願いします!

[Struts]ActionFormの検証にvalidateメソッドとvalidatorの両方を使う方法[Struts]ActionFormの検証にvalidateメソッドとvalidatorの両方を使う方法

今日Strutsを使っていて、ActionFormのvalidateメソッドをオーバライドしたときに、validatorによる検証が出来なくなってしまう問題に直面しました。

ドンピシャの解決策が以下のページにありました。
failuresoft.com Validator と ActionForm.validate メソッドを同時に使う
大変参考になりました!

validatorによる検証が出来なくなってしまった理由は簡単で、オーバライドする前のvalidateメソッドには記述されていたvalidatorを呼び出す部分が、オーバライド後のvalidateメソッドにはなかったからです。

オーバライド後のvalidateメソッドでvalidatorを呼び出すためには、スーパークラスのvalidateメソッドをオーバライドしたvalidateメソッド中で呼び出す必要があります。

ActionErrors errors = super.validate(mapping, req);

これができなかったために15分ほど詰まってしまいました。解決策がわかって良かった!

[Struts]DynaActionFormで使える属性の型一覧[Struts]DynaActionFormで使える属性の型一覧

StrutsのDynaActionFormとDynaValidatorFormで利用可能な属性の型の一覧です。
今日必要になって勉強したのでメモ。

DynaActionFormStruts-TECHSCORE-
を参考にさせて頂きました。

プリミティブ型

  • int
  • long
  • short
  • float
  • double
  • boolean
  • byte
  • char

プリミティブ型と対応するクラス

  • java.lang.Integer
  • java.lang.Long
  • java.lang.Short
  • java.lang.Float
  • java.lang.Double
  • java.lang.Boolean
  • java.lang.Byte
  • java.lang.Character

文字列

  • java.lang.String

大きい数字系

  • java.lang.BigDecimal
  • java.lang.BigInteger

配列系

  • 配列
  • java.util.Mapを実装したクラス
  • java.lang.Classを実装したクラス

時刻系

  • java.sql.Date
  • java.sql.Time
  • java.sql.Timestamp

まとめ

この中で自分が一番使うのは「String」型ですねー。

配列が利用できるとのことなんですが、どのように記述すれば使えるのかがまだわかっていません。

またわかり次第書きたいと思います。

2月から3月にかけてCocoaセミナーが東京で開催されるらしい2月から3月にかけてCocoaセミナーが東京で開催されるらしい

つい先ほど、Appleから「Cocoaセミナー」のお知らせメールが届きました。

Cocoaセミナー 初級編
 2008年2月6日(水)
Cocoaセミナー 中級編
 2008年2月13日(水)
Cocoaセミナー 上級編
 2008年2月20日(水)
Cocoaセミナー グラフィックス編
 2008年3月5日(水)
------------------------------------------
アップルジャパン株式会社
東京オペラシティタワー32階
セミナールーム
http://developer.apple.com/jp/briefing/cocoa.html

Cocoaで何か一つアプリケーションを作って後悔しようと考えているので是非とも参加したいと思ったのですが、開催場所が東京・・・orz。

大阪在住の僕にとっては、参加することは難しそうです。

と思ったら、資料とセミナーの動画を見る事ができるページを発見!
Apple Developer Documentation

実際に参加するのと比べると楽しさが薄れちゃうかもしれませんが、とりあえずこれで我慢することにしますー!

PHP勉強会@大阪に参加しますPHP勉強会@大阪に参加します

1月31日に大阪(心斎橋)で行われるPHP勉強会に参加しようと思います。

1月31日木曜日、大阪の心斎橋でPHPの勉強会をやってみたいと思います。id:ku-sukeが中心となり参加者と発表者を募集しています。初回なのでPHP初級者や他の言語を普段利用してるプログラマの方、 デザイナの方を主な対象に考えています。
更新:[PHP]1月31日 PHP勉強会 at 大阪を開催します - ku-sukeのはてなダイアリー

せっかく住んでいる大阪で行われるので参加しない手はないですよね!

場所がApple Storeという点も魅力的・・!

これからはこういう勉強会イベントを発見したら積極的に参加しようと思います!

[Java]ヒープの最大サイズのデフォルト値を変更する[Java]ヒープの最大サイズのデフォルト値を変更する

今日、PeersimというP2Pシミュレータを動かしていたんですが、シミュレーション途中でプログラムが落ちてしまうというトラブルが起きてしまいました。

メッセージも何もなしに落ちたので原因がわからなかったのですが、「おそらくメモリ関係だろう」ということで、JVMのヒープの最大サイズのデフォルト値を変更する事に。

ちなみにデフォルト値は64MBとなっています。

変更の方法は簡単。次のようにVM引数を加えてプログラムを実行するだけです。ここではヒープの最大サイズを512MBに設定しています。

$ java -Xmx512M Hoge

Hogeという部分はクラス名に置き換えてください。「512M」の前に空白が無い事に注意です。

ヒープの最大サイズを上げるとシミュレーションは無事完了しました!めでたしめでたし!

Mac OS X LeopardにJBoss 4.2.2をインストールMac OS X LeopardにJBoss 4.2.2をインストール

Mac OS X LeopardにJBoss 4.2.2をインストールする方法です。

ファイルの取得

こちらから「jboss-4.2.2.GA.zip」というファイルをダウンロードします。

インストール

以下のコマンドを実行し、ダウンロードしたファイルを展開します。

$ unzip jboss-4.2.2.GA.zip

次に、インストール先のディレクトリを作成しておきます。

$ sudo mkdir /usr/local/jboss

作成したディレクトリの中に展開してできたディレクトリをコピーします。

$ sudo cp -R jboss-4.2.2.GA /usr/local/jboss/

後々、複数バージョンをインストールしたときのことを考えて、currentというシンボリックリンクを作成します。
こうすると、currentの指し示す先を変えるだけでバージョンの切替ができるようになります。

$ sudo ln -s /usr/local/jboss/jboss-4.2.2.GA /usr/local/jboss/current

最後に、使い易いように所有者を変えてインストール完了です。(ユーザ名は各自読み替えてください)

$ sudo chown -R username:staff /usr/local/jboss/jboss-4.2.2.GA /usr/local/jboss/current

環境変数の登録

~/.profileファイルに以下の記述があるかどうか確認します。なければ追記します。

export JAVA_HOME=/Library/Java/Home

新たに追記した場合は、ターミナルを再起動する事で有効になります

動作確認

以下のコマンドを実行し、JBossを起動します。

$ /usr/local/jboss/current/bin/run.sh

起動できたら、http://localhost:8080/にアクセスします。

以下のような画面が表示されればインストール完了です。

jboss.png

[Struts]ArrayListオブジェクトの各要素をJSPで扱う[Struts]ArrayListオブジェクトの各要素をJSPで扱う

ActionFormの属性として定義したArrayListオブジェクトの各要素を、JSPで表示&取得する方法を学んだのでメモ。

以下のページを参考にさせていただきました。ありがとうございます!

ActionForm

public class TestForm extends ActionForm {
	private List tags = new ArrayList();
	
	// このメソッドが必要	
	public Tag getTag(int index) {
		while (this.tags.size() <= index) {
			this.tags.add(new Tag());
		}
		return (Tag)this.tags.get(index); 
	}
	
	public List getTags() {
		return tags;
	}
	public void setTags(List tags) {
		this.tags = tags;
	}
}

tagsというArrayList型のオブジェクトを属性として持つTestFormクラスです。

getTag(int index)メソッドが必要みたいです。

ArrayListが格納するオブジェクトのクラス

public class Tag{
	private String name;
	private String locale;
	public String getLocale() {
		return locale;
	}
	public void setLocale(String locale) {
		this.locale = locale;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

ArrayListが格納するオブジェクトのクラスです。
localeという謎の属性を持っていますが気にしないでください。

Action

public class TestAction extends Action {
	public ActionForward execute(
			ActionMapping mapping,
			ActionForm form,
			HttpServletRequest request,
			HttpServletResponse response)
			throws Exception {

		TestForm form = new TestForm();
		form.getTag(0);
		request.setAttribute("TestForm", form);
		
		return mapping.findForward("success");
	}
}

ArrayListオブジェクトの各要素を扱うJSPを呼び出すためのActionクラスです。

「form.getTag(