<< 6月 2011 | Home | 8月 2011 >>

第17回 G*ワークショップに参加しました #jggug

第17回 G*ワークショップに参加してきました。
7月29日 第17回 G*ワークショップ(東京都)
G*ワークショップはJGGUG(Japan Groovy/Grais User Group)の主催が定期的に開催している勉強会で、今回2回目の参加でした。

内容はGrails徹底入門の著作で知られる山本 剛によるGrails 2.0のアップデート、それから@kyon_mmによるGradleを中心とした開発ノウハウです。

GrailsもGradleも使ったことがなく、またGroovyもまだ2行くらいか書いたことがない状態なので正直全部理解できたわけではありませんがGroovy界のアツいところを垣間見ることができました。
ここだけの話ウサミミが意味不明でちょっと怖かった@kyon_mmですが私と同じEclipseアレルギー持ちということで懇親会ではちょっと盛り上がりました!
次回までにはプログラミングGroovyで勉強して臨みたいと思います。

GroovyはAndroidでも動くらしいのでAndroidの習作に使ってみたいかも?

関連記事:
USTREAM: jggug: .
「プログラミングGROOVY」を頂きました #groovy #twitter4j - 侍ズム
Groovyist夏の思い出 2011 第17回 G*ワークショップのまとめ #jggug - みちしるべ
第17回 G*ワークショップに参加してきた #jggug - Shinya’s Dairy Report




タグ :
このエントリーをはてなブックマークに追加   

第16回WebLogic Server勉強会 - 「エンタープライズアプリケーションとTwitterの連携」 #wlstudy

7月28日のWebLogic Server勉強会に参加してきました。
今回は2部構成で、後半は私がお話させて頂きまたç。

・「Java 7 + 8の概要」 寺田 佳央(Javaエヴァンジャリスト)
リリースをほんの数時間後に控えていたJava7の主な機能、Project CoinやFork/Join、Invokerなどの総まとめ、それから現在仕様策定が進められているJava8の話。
Mac OSX版はいつ出るんでしょうか・・・期待してます。

・「エンタープライズアプリケーションとTwitterの連携」 山本 裕介(Twitter4J.org)
ざっくり言うとTwitter APIの概要、企業でどのようにTwitterを応用できるのか、またJava(EE)で実装する際どのようなアーキテクチャにすれば良いのか、という内容です。
JavaEEでTwitterと連携するサービス、アプリケーションを開発する際のヒントになれば幸いです。
またTwitter4J関連で講演やLTをする機会は何度もありましたが、Twitter4Jそのものの使い方を解説したのは初めてです。
これからTwitter4Jをいじってみようという人はスライドの29〜34ページがちょっと役に立つかもしれません。



普段WebLogic Server 勉強会はタイムラインがいまいち盛り上がっていないんですが、今回はTwitter関連ですよ!、と事前の告知が良かったのか参加者のおよそ8割位の方がTwitterをやっているという状況でした。
タイムラインもなかなか賑やかです。
Togetter - 「第16回 WebLogic勉強会 #wlstudy」

タグ :
このエントリーをはてなブックマークに追加   

ScalaConsole で快適 Scala生活 #scala #repl #scalaconsole

DZoneでScalaのREPLのフロントエンドGUIであるScalaConsoleというのを見つけたので試してみました。
centaur / ScalaConsole / wiki / Home — Bitbucket

使い方:
1. scalaconsole_2.9.0-1-1.3.jar をダウンロード

2. 起動
起動は簡単。scalaコマンドにjarファイルを渡してあげるだけ。

$ scala scalaconsole_2.9.0-1-1.3.jar

お、動いた!

左ペインにスクリプトを入力、Ctrl+Rで右ペインに実行結果が表示されます。
REPLはターミナルから操作した方がオトコマエなんだろうけどGUI派の自分としては嬉しいです。
長めのスクリプトをトライ&エラーで試したいときもテキストエディタから貼り付け直したりせずガンガン編集しながら実行できるのが特に良い!

ちなみに選択した部分だけ実行(Shift+Ctrl+R)することもできます。

3. gistにアップロード
なんと編集したスクリプトをショートカット1つでgistにアップロードすることも可能。
Fileメニューから、またはCtrl+Gで、ScalaConsoleというアカウントでgistにアップロードされます。しかもgistのURLをクリップボードに保存してくれるという親切設計!


試しにアップロードしてみたのがこれ。

匿名ユーザーとして貼り付けられちゃうみたいだけどちょっと改造すれば自分のアカウントでアップロードできるようになるかな??bitbucketでホストされているのでhgとScalaの勉強がてらいじってみるのもいいかも・・。

いやー便利!

タグ :
このエントリーをはてなブックマークに追加   

Mac OSX LionにWebLogic Server 11g Rel 1 (10.3.5)をインストール

Mac OSXにWebLogicをインストールする場合、以前はちょとしたコツが必要でしたが、最近はMac OSXもサポートしているようで簡単にインストールできます。(Oracle Fusion Middleware Supported System Configurationsには載っていないのでたぶん開発環境のみでプロダクション環境はサポートしていない)

以下にインストール手順を書きます。ドキュメントは読んでいないので間違っているかもしれません。

1. ダウンロード
以下のページよりwls1035_dev.zipをダウンロード。
Oracle Fusion Middleware 11g ソフトウェア・ダウンロード

2. 展開
wls1035_dev.zipをダブルクリックして展開。

3. MW_HOMEを設定
Fusion Middlewareに統合された関係か、いつからかMW_HOMEという環境変数を設定することになったみたいです。

$ export MW_HOME=/Users/yusukey/Downloads/wls1035_dev/


4. .product.properties ファイルの作成
.product.propertiesという名前のファイルがないとコンフィギュレーションビルダー起動時にエラーが出てしまいました。なにか大事なステップを忘れている可能性がありますが、とりあえず空のファイルを作成してしのぎました。
$ touch /Users/yusukey/Downloads/wls1035_dev/wlserver/.product.properties


5. コンフィギュレーションビルダーでドメインを作成
コンフィギュレーションビルダーを起動してドメインを作成しようとすると・・・
Share photos on twitter with Twitpic
致命的なエラーとかでコンフィグレーションビルダーが終了してしまいます。

ひとまず 10.3.4 で作成してあったドメインを移行してしのいでます。
Share photos on twitter with Twitpic

タグ :
このエントリーをはてなブックマークに追加   

7月28日講演「エンタープライズアプリケーションとTwitterの連携」 #wlstudy

「エンタープライズアプリケーションとTwitterの連携」というテーマで7月28日(木)にOracleで講演します。

・Twitterをエンタープライズでどのように応用できるのか
・セキュリティ確保のために気をつけるべき点は?
・JavaEEアプリケーションからTwitter APIを叩く方法
等を説明する予定です。

「WebLogic Server勉強会」なのですがWebLogicユーザーでなくても興味をもっていただける会なのではないかと思います。
WebLogicと普段縁のないJavaエンジニアもお気軽に!(・・・と言っちゃっていいですかね?)
Twitter使っている方の参加率が普段低い気がするので・・・是非参加してつぶやきながら楽しんでもらえれば幸いです。当日つぶやくとイイことあるかも!

場所: オラクル青山センター(外苑前駅直結)

アジェンダ:
18:30~19:10 「Java 7 + 8の概要」
寺田 佳央(Javaエヴァンジャリスト)

19:20~20:20 「エンタープライズアプリケーションとTwitterの連携」
山本 裕介(Twitter4J.org)

お申し込みは以下のページから。
7/28開催のWebLogic Server勉強会のお知らせー #wlstudy


関連記事:
第16回 WebLogic Server勉強会@東京

タグ :
このエントリーをはてなブックマークに追加   

Jiraプラグインを作る その1 - 空のプラグインプロジェクト作成とデプロイ #jira

ありそうでないらしい、Jiraのアップデート状況をTwitterで通知するプラグインが欲しいのでプラグインSDKを試してみました。

英語ではしっかりとドキュメントがあるのですが日本語リソースはあまりないと思うので簡単にメモしておきます。

1. Plugin SDKをダウンロード
Atlassian製品のプラグインは全てmavenベースの統一された開発環境が提供されています。まず以下のサイトより atlassian-plugin-sdk-X.X.X.tar.gz をダウンロードします。
Developing your Plugin using the Atlassian Plugin SDK - Atlassian Developer Network - Atlassian Documentation - Confluence

2. 空のプラグインプロジェクトを作成
atlassian-plugin-sdk-X.X.X.tar.gz を展開すると bin ディレクトリがあります。
以下の様に atlas-create-[製品名]-plugin コマンドを叩き、プラグインのgroupIdやartifactIdを指定すると空のプラグインプロジェクトを作成できます。

$ cd atlassian-plugin-sdk-3.3.4/bin 
$ ls
atlas-clean atlas-help
atlas-clean.bat atlas-help.bat
atlas-cli atlas-install-plugin
atlas-cli.bat atlas-install-plugin.bat
atlas-clover atlas-integration-test
atlas-clover.bat atlas-integration-test.bat
atlas-compile atlas-mvn
atlas-compile.bat atlas-mvn.bat
atlas-create-bamboo-plugin atlas-package
atlas-create-bamboo-plugin.bat atlas-package.bat
atlas-create-confluence-plugin atlas-release
atlas-create-confluence-plugin.bat atlas-release-rollback
atlas-create-crowd-plugin atlas-release-rollback.bat
atlas-create-crowd-plugin.bat atlas-release.bat
atlas-create-fecru-plugin atlas-ruin
atlas-create-fecru-plugin.bat atlas-ruin.bat
atlas-create-home-zip atlas-run
atlas-create-home-zip.bat atlas-run-standalone
atlas-create-jira-plugin atlas-run-standalone.bat
atlas-create-jira-plugin.bat atlas-run.bat
atlas-create-refapp-plugin atlas-unit-test
atlas-create-refapp-plugin.bat atlas-unit-test.bat
atlas-debug atlas-version
atlas-debug.bat atlas-version.bat
$ ./atlas-create-jira-plugin
Executing: /Users/yusukey/Downloads/atlassian-plugin-sdk-3.3.4/apache-maven/bin/mvn com.atlassian.maven.plugins:maven-jira-plugin:3.3.4:create
[INFO] Scanning for projects...
Downloading: https://m2proxy.atlassian.com/repository/public/com/atlassian/maven/plugins/maven-jira-plugin/3.3.4/maven-jira-plugin-3.3.4.pom
1K downloaded (maven-jira-plugin-3.3.4.pom)
.
.
.
[INFO] Generating project in Interactive mode
[INFO] Archetype repository missing. Using the one from [com.atlassian.maven.archetypes:jira-plugin-archetype:5 -> https://maven.atlassian.com/public] found in catalog internal
Define value for groupId: : org.twitter4j
Define value for artifactId: : jira-twitter
Define value for version: 1.0-SNAPSHOT: : 1.0-SNAPSHOT
Define value for package: org.twitter4j: :
Confirm properties configuration:
groupId: org.twitter4j
artifactId: jira-twitter
version: 1.0-SNAPSHOT
package: org.twitter4j
Y: :
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating OldArchetype: jira-plugin-archetype:3.3.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: org.twitter4j
[INFO] Parameter: packageName, Value: org.twitter4j
[INFO] Parameter: package, Value: org.twitter4j
[INFO] Parameter: artifactId, Value: jira-twitter
[INFO] Parameter: basedir, Value: /Users/yusukey/Downloads/atlassian-plugin-sdk-3.3.4/bin
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] ********************* End of debug info from resources from generated POM ***********************
[INFO] OldArchetype created in dir: /Users/yusukey/Downloads/atlassian-plugin-sdk-3.3.4/bin/jira-twitter
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 minute 56 seconds
[INFO] Finished at: Sun Jul 17 01:26:43 JST 2011
[INFO] Final Memory: 32M/86M
[INFO] ------------------------------------------------------------------------


3. プラグインをビルドする
生成されたpom.xml には Central Repository に存在しない artifact への dependency があり、素で mvn を叩いてもビルド出来ません。手動でリポジトリを追加するなどすればビルドできないこともないと思いますが、便利なことにプラグインSDKに含まれているバージョンのmavenを使えば一発でビルドできます。

$ cd jira-twitter
$ ../atlas-mvn package
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building jira-twitter
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------------
[INFO] [jira:copy-bundled-dependencies]
.
.
.
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running org.twitter4j.MyPluginTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.026 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] [jira:validate-manifest]
[INFO] No manifest found or validation skip flag specified, skipping validation
[INFO] [jira:jar]
[INFO] [jar:jar]
[INFO] Building jar: /Users/yusukey/Downloads/atlassian-plugin-sdk-3.3.4/bin/jira-twitter/target/jira-twitter-1.0-SNAPSHOT.jar
[INFO] [jira:generate-obr-artifact]
[INFO] Skipping OBR generation... no OSGi bundle manifest instructions found in pom.xml
[INFO] [jira:test-jar]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 35 seconds
[INFO] Finished at: Sun Jul 17 23:13:39 JST 2011
[INFO] Final Memory: 84M/123M
[INFO] ------------------------------------------------------------------------


IntelliJではプロジェクトのMaven home directoryにプラグインSDKに含まれているmavenを指定すればok。Eclipseの設定方法は知りません。


4. テスト環境を起動する
プラグインをテストするのは簡単。atlas-run コマンドを叩くだけ。初回はテスト環境用のバイナリを色々とダウンロードするのでちょっと時間がかかります。

$ ../atlas-run
[INFO] Scanning for projects...
Downloading: https://m2proxy.atlassian.com/repository/public/com/atlassian/maven/plugins/maven-amps-dispatcher-plugin/3.3.4/maven-amps-dispatcher-plugin-3.3.4.pom
977b downloaded (maven-amps-dispatcher-plugin-3.3.4.pom)
Downloading: https://m2proxy.atlassian.com/repository/public/com/atlassian/maven/plugins/maven-amps-dispatcher-plugin/3.3.4/maven-amps-dispatcher-plugin-3.3.4.jar
9K downloaded (maven-amps-dispatcher-plugin-3.3.4.jar)
.
.
.
[WARNING] [talledLocalContainer] INFO: Server startup in 51329 ms
[INFO] [talledLocalContainer] Tomcat 6.x started on port [2990]
[INFO] jira started successfully and available at http://localhost:2990/jira
[INFO] Type CTRL-C to exit



起動したところ。
Unable to retrieve gadget xml. HTTP error 404 というOpenSocial臭のするエラーが出ているけれどもとりあえずプラグイン開発には関係ないので無視。
admin/adminでログインできます。

5. プラグインを確認
Administration → Plugins よりプラグインがインストールされていることを確認できます。


atlas-create-jira-plugin スクリプトは何にもしない空のプラグインを作成するので今のところプラグインはなにもしてくれませんが、ひとまず開発する環境が整ったことは確認できました。

タグ :
このエントリーをはてなブックマークに追加   

「Twitter APIポケットリファレンス」本日発売 #twtr_ref

先日よりアナウンスしてきた拙著「Twitter APIポケットリファレンス」がいよいよ本日発売です。




また注文されていない方は是非一度お手にとって・・・そのままレジに駆け込んで貰えれば幸いです。

目次は以下の通りです。

1章 Twitterの基本
・Twitterの用語と関連する仕組み
2章 Twitter APIの基本
・APIの基本
・アプリケーション開発の事前準備
・Twitter APIの認証
3章 REST API
・REST APIの基本
・REST APIのレートリミット
・REST APIリファレンス
4章 検索API
・検索APIの基本
・検索APIのサンプルコード
5章 ストリーミングAPI
・ストリーミングAPIの基本
・ストリーミングAPIのサンプルコード
・ストリーミングAPIリファレンス
- Streamed Tweets
- User Streams
- Site Streams
6章 Webサイト向けAPI
・Webサイト向けAPIの基本
・フォローボタン
・ツイートボタン
・Web Intents
・@Anywhere
付録
・アプリケーション開発のコツ
・Twitter接続ライブラリ
・リファレンス

REST APIに加えて、ストリーミングAPI、フォローボタンや@AnywhreまでカバーしているTwitter APIリファレンスは現時点では世界唯一の本になります。

誤字脱字だけでなく、公式ドキュメントと照らし合わせながら手間暇をかけて丁寧に校正をしていただいた渾身の一冊です。
また表紙だけでなく各章のトビライラストも各APIにちなんだ素敵なものになっていますので楽しんでもらえると思います。

本書について不明な点などありましたらどんどんお答えしまうので@yusukeyまで気軽にメンションを投げてください!24時間以内には対応しますよ!

またご購入頂いた方はブログやTwitterなどに書き込むさい、ハッシュタグとして #twtr_ref をつけて頂ければ幸いです。



関連記事:
書籍案内:Twitter APIポケットリファレンス|gihyo.jp … 技術評論社
転石はどん底まで止まらない(・∀・) Twitter API ポケットリファレンス
献本御礼「Twitter API ポケットリファレンス」 - 都元ダイスケ IT-PRESS
Someday: Twitter APIポケットリファレンス
だらりらり : Twitter APIポケットリファレンスの挿絵を描かせていただきました
404 shin1のつぶやき ないわー Not Found: Twitter API ポケットリファレンスが発売開始されてますー

タグ :
このエントリーをはてなブックマークに追加   

「プロになるためのWeb技術入門」4刷増刷

以前紹介した「プロになるためのWeb技術入門」、順調に売れて4刷増刷だそうです。
おめでとうございます。ただの増刷にとどまらず、直せるところはかなり大幅に手をいれているそうで。



VBやクラサバ全盛の時代もほぼ終わって今はWeb/モバイル全盛期となっています。
Webアプリケーションは参入障壁が低く、簡単に開発できる反面、良く仕組みがわかっていなくても「なんとなく開発できてしまう」という性質があります。
この「なんとなく開発」が結構危険で、それなりのトラブルシューティイング経験や運用経験がないと簡単にセキュリティホールだらけのアプリケーションができあがってしまうことになります。

この本はCGIからアプリケーションサーバを使ったWebシステムまでのちょっとした歴史的背景から、いかにしてセキュリティ脆弱性が作り込まれてしまうのかといった仕組みを分かりやすく説明しており、
・「これからWebアプリ開発することになるんだけど・・」
・「何となくWebアプリケーション開発できるよ!」
・「脆弱性対策?SQLインジェクション対策はバッチリ。えーとCSRFとXSSって何が違うんだっけ?」
という方には特にオススメです。
またそれなりに詳しい人でも本書から学ぶことは多いと思います。

関連記事:
[執筆]『プロになるためのWeb技術入門』4刷増刷ありがとうございます - こもりん日記

このエントリーをはてなブックマークに追加   

JIRAを使うプロジェクトのクオリティを測る JiraGrader #jira #jiragrader

JIRAでまわしているプロジェクトのクオリティメトリクスを測定する JIRAGrader というサービスをDZoneで見つけました。

dzone.com - Introducing JIRAGrader: a world-wide benchmark of JIRA projects

プロジェクト中のissue中のバグの割合や、解決までに要した時間などを基準にランク付けをするみたいです。
試しに Twitter4J を測定してみたところ 1040 プロジェクト中 24位。まぁまぁ悪くない?
Twitter4J [#24] quality report - JIRAGrader


測定してもらうにはクレデンシャルを入力しなくてはいけないのがちょっと気持ち悪いですが、面白いサービスです。

タグ :
このエントリーをはてなブックマークに追加   

「Twitter APIポケットリファレンス」7月15日に発売 #twtr_ref

拙著「Twitter APIポケットリファレンス」がいよいよ今週金曜日、7月15日に発売されます。

池袋ジュンク堂、秋葉原有隣堂/書泉ブックタワー、新宿紀伊國屋などでは先行発売しているとのことで、週末に下見してきました。

お父さんの本置いてあるじゃない!


@tsuda本や@kogure本と並んでる!!

一足早く手に入れたい方はどうぞ!そんなに多くは入荷していないと思いますので足を運ぶ前に電話で確認した方がいいかもしれません。

Twitter4Jの開発者が出す本、ということでTwitter4Jの解説本と勘違いされることがありますがこの本はあくまでTwitter APIのリファレンス本です。
Twitter APIの基本的な使い方から始まりAPIの出来ることを網羅的に、またAPIを利用する上でどんなことに注意すべきなのか、といった内容が中心になっています。

もちろんサンプルコードでTwitter4Jも使っていますがJavaに限らずPHP、Ruby、Python、.Net系などあらゆる言語を使う方に活用していただける本になっています。
また@AnywhereやWeb IntentsなどWebサイト向けのAPIもカバーしているのでWebデザイナやJavaScript使いにも役立ちます。

【送料無料】Twitter API ポケットリファレンス

【送料無料】Twitter API ポケットリファレンス
価格:2,499円(税込、送料別)


タグ :
このエントリーをはてなブックマークに追加   

「プログラミングGROOVY」を頂きました #groovy #twitter4j

Scalaと同じく最近コミュニティが活発、そしてJavaと文法が似ていてとっつきやすそうな言語がGroovyです。

Groovyと同じく比較的歴史がある言語ですがこれまで触る機会がほとんどありませんでした。
が、最近やたらとTwitter4JをGroovyでいじっているすばらしい輩がおり、その単純明快な記述に惹かれていました。

今回最新のGroovy1.8にも対応した日本発の本が出たわけですが、Twitter4Jについてもチョロっと触れてるよ!、ということで献本していただきました!

Scalaと併せて勉強させていただきます!

Groovyという言語そのものだけでなくGrailsやGriffon、GParsなど気になる周辺技術についても触れられているのが良さそうです。

日本のGroovy界の四天王が執筆されていますのでGroovyをこれから学びたい人はこれを買っておけば間違いないでしょう!



関連記事:
Togetter - 「ghello (Groovy "Hello World" Tweets!)」
今すぐフォローすべきGroovy界のスーパーエンジニア - みちしるべ
モテるGroovy力を上げたい人向けにGroovyの本がでるよ。 - みちしるべ
2011-06-13 - Grな日々(uehajの日記)

タグ :
このエントリーをはてなブックマークに追加   

「Scala実践プログラミング」を購入 #scala

Javaで当面大丈夫でしょ!・・・と思っていた時期もありました。

が、最近ScalaやGroovyなど、JVMで動く言語が盛り上がりを見せているので先日出版された「Scala実践プログラミング」を購入しました。
主軸はまだJavaに置くつもりだけど他の言語も知っておいて場面場面で最適なものを選択できたら面白そうだなーと。



プログラミング言語は、文法は書きながら、動かしながら覚えていく物だと思います。
まだ読み始めたばかりですが、この本は「Scalaはこんな風に書けるんだぜ!カッコイイだろ!」と言わんばかりにコード例、実行例から入っているところが好きです。

難点は・・・460ページで結構重いこと!最近持ち歩いていてちょっと肩が凝ります。


タグ :
このエントリーをはてなブックマークに追加   

Mac OSXにOpenJDKをインストール #openjdk #java7

Mac OSXにOpenJDKを入れてみました。
ソースコードからビルドしなければいけないと思っていたけれども既にインストーラが用意されていて簡単です。

1. インストーラをダウンロード
以下のページより OpenJDK-OSX-1.7-universal-2011MMDD.dmg をダウンロード。
以前は32bit版と64bit版で分かれていましたがおとといユニーバーサルバイナリがリリースされたようです。
Downloads - openjdk-osx-build - Build and package scripts for OpenJDK 1.7 under OS/X - Google Project Hosting

2. .dmgをダブルクリックし、インストーラを起動
Java7正式リリースを目前にDukeも上機嫌のご様子。


3. インストール完了
フツーのインストーラです。簡単。


4. 確認
Appleより提供されているJVMは通常 /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home に置いてありますが、OpenJDKは /Library/Java/JavaVirtualMachines/openjdk-1.7-x86_64/Contents/Home に配置されるようです。

/Applications/Utilities/Java Preferences.app からもちゃんと認識されていますね。

32ビット版と64ビット版が別々に認識されているのはいいとして・・なぜか3つ認識されてます。・・???まいっか。

5. JAVA_HOMEの設定
JAVA_HOMEを設定すればok。

$ java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, mixed mode)
$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-1.7-x86_64/Contents/Home/
$ java -version
openjdk version "1.7.0-internal"
OpenJDK Runtime Environment (build 1.7.0-internal-henri_2011_06_24_19_03-b00)
OpenJDK 64-Bit Server VM (build 21.0-b16, mixed mode)


6. アプリケーションの起動
を起動してみます。

$ java -jar samurai.jar
java.awt.HeadlessException
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:202)
at java.awt.Window.(Window.java:534)
at java.awt.Frame.(Frame.java:420)
at java.awt.Frame.(Frame.java:385)
at javax.swing.JFrame.(JFrame.java:180)
at samurai.swing.MainFrame.(MainFrame.java:93)
at samurai.swing.Samurai$1.run(Samurai.java:33)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

はい、ダメでした。
HeadlessExceptionは通常 -Djava.awt.headless=true (サーバなどでGUIがない環境)を指定しているのにSwingやAWTのウインドウを表示しようとした際に投げられる例外です。つまりまだMac版のOpenJDKはサーバサイド用途にしか使えない???

試しに headless=false と指定してみたところ一X11が起動した後クラッシュしました。
$ java -Djava.awt.headless=false -jar samurai.jar
Trace/BPT trap


クラッシュレポートをみるとスレッド17、com.apple.CoreFoundation#__CFInitialize で落ちているみたい。

OSX OpenJDK7 crash report — Gist

ひとまずヘッドレスでは動くので自宅サーバにも入れてみようと思います。

7. IntelliJ IDEA で認識させる
IntelliJ IDEA はもちろんJava7に対応済みです。
設定は簡単でFile → Project Structure → SDKs → 右ペインの+ボタン → JSDK を選択し、/Library/Java/JavaVirtualMachines/openjdk-1.7-x86_64/Contents/Home/を指定します。

ただ、Mac のJVMはディレクトリ構成がちょっと異なるので標準API(java.*, javax.*)をそのままでは認識してくれません。
Classpathタブの[Add...]ボタンより、Contents/Home/jre/lib/rt.jar も付け加えます。

OpenJDKを指定し、rt.jar をクラスパスに追加したところ。

あとはJava7を多いに楽しむだけ!

ちなみにソースコードからビルド、インストールするのも比較的簡単です。以下の頁にステップバイステップで説明されています。
Mac OS X Port - OpenJDK - wikis.sun.com

タグ :
このエントリーをはてなブックマークに追加   

Java7シンタックスで レガシーコードを快適メンテナンス #java7

7月28日にリリースされるJava7に合わせて開催された「Java SE 7 リリース記念 特別イベント」に参加してきました。
Java SE 7 リリース記念 特別イベント

わかっているようなよくわからないJava7の新機能の概要をつかめ、大変勉強になりました。

LT枠もあるということで出しゃばって話をしてきました。
Java7の新しい文法を使ってJava6またはそれ以前のJava用アプリケーションの開発ができますよ、というテクニックの紹介です。

スライドはこちら↓



Twitter4JはJava7はまだ導入していませんが、同じテクニックを使ってJava6相当のシンタックスで開発しつつ、コンパイルしたコードはJava1.4.2互換になっています。

タグ :
このエントリーをはてなブックマークに追加   

Google App Engine ハッカソン #ajnhack に参加しました #twitter4j

先週土曜日に開かれた「Google App Engine ハッカソン」に参加しました。

場所はATNDの開発などを行っているリクルートメディアテクノロジーラボ。こじんまりとしながらもオシャレで快適な空間でした。
Google App Engineハッカソン(東京) on Zusaar

Google App EngineはHello Worldアプリをデプロイしたことがある程度でほとんど初心者なのですが、Twitter4JのGAE対応最適化を一気にやってしまおうと思い参加しました。

Togetter - 「Google App Engine ハッカソン #ajnhack & appengine ja night #17 #ajn17」

ベースとなるのは@takawitterコントリビュートのURLFetchServiceを使った非同期通信コンポーネント。Twitter4J自体AsyncTwitterという非同期処理を行うインターフェースが用意されていますが、内部でスレッドを起こします。なのでスレッドの作成が許されていないGoogle App Engineでは使えません。
一方、URLFetchService#fetchAsync()を使うとGAE環境が用意しているスレッドでサーブレットのスレッドとは別に非同期でHTTP通信を行ってくれます。
URLFetchService#fetchAsync()について詳しくは以下のサイトで説明されています。
非同期URLFetch、FetchAsync()の使い方【Google App Engine】

レスポンスを返すまで30秒という制限があるGAE環境で平行して複数のAPIコールが行えるようになるので便利ですね。

Twitter4JはHTTP通信部分を差し替えるフックポイントが用意されているのですが、APIコールと同時にオブジェクトの初期化を行うため、単にURLFetchService#fetchAsync()を使うだけではだめです。オブジェクト初期化時にHTTP通信のレスポンスを取得してしまい、レスポンスを完全に受け取るまでブロックされてしまい結局同期APIコールになってしまうからです。

当日は遅延初期化を行うラッパを作成することでTwitter4Jの公開インターフェースは変えずに透過的に内部でURLFetchServiceを利用する仕組みの実証コードを作るところまでできました。(それに伴う大幅なリファクタリングも必要でした)

通常ステータスのアップデートには3000ms〜5000msくらいかかるところ、URLFetchService#fetchAsync()を使ったパターンではなんと1〜2msほどで完了するようになりました!(実際の処理は別スレッドで行われているわけですが)

あとは大量のgetterがあるデータクラス群の遅延初期化用ラッパクラスを作ればいいのですが、単調で面倒な作業なのでインターフェースからラッパクラスを生成するスクリプトをゴリゴリ作りました。(bashスクリプトとかsedは結構ニガテ)
twitter4j-gae/src/test/resources/generate-lazy-object.sh at master from yusuke/twitter4j - GitHub

今回の成果はすでにスナップショットリリースに反映済みです。

関連リンク:
[#TFJ-610] improve performance on Google App Engine with URLFetchService#fetchAsync() - JIRA

タグ :
このエントリーをはてなブックマークに追加   

svnserveとgit-svnを使ってsvnのリポジトリをGitHubに移行する #github #svn #svnserve

すっかり放置しているLog4Twitterをちょっといじろうと思ったらGitHubに置いていませんでした。以前自宅サーバのsvnリポジトリに置いていたものの、もはやsvnサーバがない状態。

そこでsvnserveで臨時svnサーバを立てて、git-svnと組み合わせることでGitHubに移行したのでメモ。

1. svnserveを立ち上げる
$ svnserve -d --foreground -r /Users/yusukey/repos/ --listen-port 8080

2. git-svnで吸い出す

$ git svn clone -s svn://localhost:8080/log4twitter
Initialized empty Git repository in /private/tmp/log4twitter/.git/
Using higher level of URL: svn://localhost:8080/log4twitter => svn://localhost:8080
r27 = 59674090c6680982783d119bcbdaf7750769540e (refs/remotes/trunk)
A LICENSE.txt
A logback.xml
A config/logback.xml
A config/log4j.xml
A lib/commons-codec-1.3.jar
A lib/slf4j-api-1.4.0.jar
A lib/jdom.jar
A lib/junit.jar
A lib/logback-classic-0.9.6.jar
A lib/twitter4j-1.0.jar
A lib/log4j-1.2.14.jar
A lib/logback-core-0.9.6.jar
A src/test/java/log4twitter/log4j/TestLog4jTwitterAppender.java
A src/test/java/log4twitter/logback/TestLogbackTwitterAppender.java
A src/main/java/META-INF/LICENSE.txt
A src/main/java/META-INF/MANIFEST.MF
A src/main/java/log4twitter/log4j/TwitterAppender.java
A src/main/java/log4twitter/logback/TwitterAppender.java
A src/main/java/log4twitter/TwitterWrapper.java
A build.properties
A pom.xml
A build.xml
A log4j.xml
r55 = 2dac12070129a6bb7e898a151f07bee19ad0fc7e (refs/remotes/trunk)
Checked out HEAD:
svn://localhost:8080/log4twitter/trunk r55
$ git branch
* master

3. GitHubにpushする
$ git remote add origin git@github.com:yusuke/log4twitter.git
$ git push origin master
Counting objects: 40, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (34/34), done.
Writing objects: 100% (40/40), 960.63 KiB, done.
Total 40 (delta 5), reused 0 (delta 0)
To git@github.com:yusuke/log4twitter.git
* [new branch] master -> master


終わり。
yusuke/log4twitter - GitHub

タグ :
このエントリーをはてなブックマークに追加   

JIRA GitHub Connectorをインストール #jira



JIRA4.3に当初対応していなかったgitプラグインも最近動くようになったのですが、当方ではうまく設定ができていないのか特にエラーメッセージは出ないけどコミットしたソースがissueからリンクされていないという現象に悩まされていました。厳密にはあまり悩まずにスルーしていました・・・。

今日ちょっと調べてみたところ、gitプラグインよりもグッとくるJIRA GitHubプラグインというものがリリースされていることに気がつきました。
JIRA GitHub Connector - JIRA - Atlassian Plugin Exchange

gitプラグインは5分間隔とかで定期的にポーリングすることでissueとgitを連携させていました。GitHubプラグインはGitHubにプッシュしたタイミングでPost-Receive URLを使ってJIRAに通知するため即座に反映されます。
GitHub専用なだけあって設定項目もよりシンプルで使いやすいです。これはオススメ!


JIRA4.3より標準導入されたUniversal Plugin managerでWebUIから簡単にインストール可能


リポジトリの追加は非常に簡単!



githubタブが表示されたところ

実際のissueはこちら↓から見られます。
[#TFJ-609] can't configure HTTP proxy server on Android platform - JIRA

タグ :
このエントリーをはてなブックマークに追加