JRockit JVM 技術セミナーに行きました
先週木曜日の話ですが、Oracleのさとうなおきさんが開催してくださった JRockit のセミナーに参加いたしました。
・緊急開催! JRockit開発者が語る Oracle JRockit JVM 技術セミナー : ATND
Appeal Virtual Machines(後にBEAに買収され、BEAがOracleに買収される)時代から在籍しているという Marcus Hirt さんが来日ということで開催されたセミナーです。
・参加の目的
目的はもちろん最新の JRockit に搭載されたフライトレコーダー機能!
JRockit はもともと JRA と呼ばれる競馬関係の何かとまちがえそうなオンラインVM解析機能や、さらにそれを洗練させた JRocikt Misson Control という機能が内蔵されていました。
フライトレコーダーはその名の通り、JRockit Misson Control を発展させ、オフラインで後からでも解析できるというすばらしい機能です。
・所感
デモを見てみましたが、VisualVMとMemoryAnalyzerと侍の良いところを足してかっこいい見栄えにした感じと言えば良いでしょうか。
一言で言うと「おぉ!良い感じ」
これまでメモリリークの解析にはヒープダンプと Memory Aanalyzer が標準的?な解析方法だったと思いますが問題が2点ありました。
1点はヒープダンプの取得はとても重く、運用環境での取得が難しい場合があること。もう1点はリークしているインスタンスをどのクラスローダを保持しているか見極められない事です。
フライトレコーダーはオンラインでもオフラインでも非常に軽くヒープ内の解析が行えること、またクラスローダ別に解析できることでこの2つの問題を見事にクリアしています。
まさに Memory Analyzer / 侍 いらずといえるでしょうか?
・侍は本当にもういらない?
ただ、フライトレコーダーではスタックトレースの解析やオブジェクトのロック関係の解析は行えないそうなので、この点に関してだけ言えば侍の使い道もまだあると言えそうです。
JConsoleのプラグインに対応していたり、Swing-SWTのブリッジライブラリを使っているそうなので Swing ベースの侍を統合するのも難しくないはず、やろうぜやろうぜ!という話になりました。
・OpenJDK + JRockit = ?
大人げなく「オープンソース化(OpenJDKとの統合?)の予定はないのか?」と質問したところ、議論はあったそうですが今のところ予定はないそうです。ただ、フレームワーク部分や GCのアルゴリズムなどは OpenJDK との統合もありえなくもないそうなので、今後の動向が気になるところです。
・OTNライセンス万歳
JRockit Misson Control は以前、評価ライセンスだと VM 起動後一時間であれば利用できる(再起動すれば何度でも使える)というむず痒い仕様でした。つまり、簡単に再現できる現象であればホイホイ使えるけれども運用環境で使いたければ WebLogic を買いましょうということです。
ところが、Oracle に買収されたことで製品の評価ライセンスが一律 OTN ライセンスという形態に統一されました。
WebLogic の接続IPアドレス数制限は撤廃され、なんと JRockit Misson Control も時間制限なく使えるようになったそうです。(これはセミナー話された内容ではなく後で中の人に聞いた話です)
つまり VM に依存しない現象であればさくっと JRockit をインストールして試験してしまえば良いわけです(、よね?)
ただ運用環境での利用はだめですよ。以前は at your own risk であれば使えた気がするのですが・・・。
・飲み
セミナーの後は元同僚やOracleの人、そして Marcusと飲みに行きました。席の配置からあまり Marcus とは話せませんでしたが、侍で今後コラボできたら面白いかな?と思っています。
以上セミナーレポートでした。
関連記事・ブログ:
・メモリリークトラブルシューティング記 - その5: Memory Analyzer でヒープダンプを解析(最終回) - 侍ズム
・緊急開催! JRockit開発者が語る Oracle JRockit JVM 技術セミナー (7/22) - S/N Ratio (by SATO Naoki)
・Togetter - 「緊急開催! JRockit開発者が語る Oracle JRockit JVM 技術セミナー」
・Marcus Hirt's Blog
Google App Engine 上のアプリからの Twitter API へのアクセスが不安定
現在 Google App Engine 上のアプリからの Twitter API へのアクセスが不安定になっています。
Twitter4Jのメーリングリストで話題になっているのですが、これはTwitter4J 固有の問題ではなく、Google App Engine から Twitter API へ異常な負荷があったため GAE のネットワークからの接続を Twitter サイドから一部遮断したために発生している現象だそうです。
現在 Twitter のチームで対策を考えているそうですが、問題解決の時期などは提示されていません。
Google App Engine に Twitter API を使ったアプリケーションをデプロイしている方はご注意ください。
詳しくは以下のスレッドをご参照ください(英語)。
- Not able to connect to twitter API from Google Appengine
- Server-side OAuth Authorized instance preventing me from calling any methods
Twitter4J 2.1.3 リリース - YFrog/TwitPic, UserStream をサポート
Twitter API の Java バインディングライブラリ、Twitter4J の最新版をリリースしました。
http://twitter4j.org/
最新のAPIセットを実装しています。
Maven Central Repository にも入っています。
現在はバージョン 2.1.4 を開発中です。スナップショットビルドの公開時など、最新情報は @t4j_news で配信しています。
・バージョン 2.0.x から 2.1.x への移行
・twitter4j 2.1.3 JavaDoc
・自前 maven repository
・snapshot ビルドをプロジェクトで利用する方法
・サポートAPIリスト
Release Notes - Twitter4J - Version 2.1.3
Bug
- [TFJ-326] - xAuth: setOAuthConsumer() fails with IllegalStateException if the instance is Basic auth'ed
- [TFJ-338] - getIncomingFriendship() / getOutgoingFriendship() are not checking credentials availability
- [TFJ-341] - StackOverFlowError at RequestToken.hashCode()
- [TFJ-342] - Streaming API: wait time for TCP level error is always initialized to 250ms
- [TFJ-346] - java.lang.IllegalStateException with httpclient-support
- [TFJ-347] - StatusUpdate#setInReplyToStatusId() is not functioning
- [TFJ-348] - JSONObject["created_at"] not found.
- [TFJ-356] - typo in reportSpam method
- [TFJ-357] - NoSuchMethodError with Log4J 1.2.16
- [TFJ-369] - httpclient connection closing still not quite right
Improvement
- [TFJ-349] - JSONObject["created_at"] not found.
- [TFJ-355] - make PagableResponseList mocking test friendly
- [TFJ-358] - Apache HttpClient need to be shutdown gracefully
- [TFJ-359] - defaulting useSSL=false
- [TFJ-364] - getRetweets() returns only 20 retweets
- [TFJ-370] - support location element in Tweet
New Feature
- [TFJ-39] - ability to upload images to TwitPic
- [TFJ-299] - support YFrog APIs
- [TFJ-330] - include error code generated from stacktrace in TwitterException#getMessage() for the ease of support
- [TFJ-334] - support User Stream API
- [TFJ-339] - support statuses/id/retweeted_by and statuses/id/retweeted_by/ids
- [TFJ-343] - Add Twitter Search option parameter, result_type
- [TFJ-350] - support include_rts
- [TFJ-352] - Have a source code jar in the release zip
- [TFJ-354] - add verifyCredentials in AsyncTwitter
- [TFJ-360] - add httpclient max conns configuration
- [TFJ-361] - Add support for clients specifying arbitrary stream endpoints
- [TFJ-362] - Streaming API - OAuth support
Task
- [TFJ-363] - deprecate Basic auth methods
- [TFJ-365] - move JavaDoc links from https://apiwiki.twitter.com/* to http://dev.twitter.com/doc/*
- [TFJ-368] - deprecate nearby_places
関連記事:
・Twitter4J 2.1.2 リリース - 最新APIセットをサポート - 侍ズム
・Twitter4J 2.1.1 リリース - 最新APIセットをサポート、パフォーマンス/Android対応を改善 - 侍ズム
・Twitter4J 2.1.0 リリース - 最新APIセットをサポート、パフォーマンスを大幅改善 - 侍ズム
・Twitter4J 2.0.10 リリース - geo location API, retweet API をサポート - 侍ズム
・Twitter4J 2.0.7 リリース - 侍ズム
・Twitter4J 2.0.6 リリース - 侍ズム
・Twitter4J 2.0.5 リリース - 侍ズム
・Twitter4J 2.0.4 リリース - ストリーミング API をサポート
・Twitter4J 2.0.3 リリース - JDK1.4.2 互換性を確認 - 侍ズム
・Twitter4J 2.0.2 リリース - trends API や gzip 圧縮をサポート - 侍ズム
・Google App Engine 対応 の Twitter4J 2.0.1 リリース - 侍ズム
・Twitter4J 1.1.8 リリース - 侍ズム
・Twitter4J 1.1.5 リリース
・Twitter4J 1.1.1 リリース
・Twitter4J 1.1.0 リリース
・Twitter4J 1.0.6 リリース
・Twitter4J 1.0.5 リリース
・Twitter4J 1.0.4 リリース
・Twitter4J 自前 maven リポジトリを公開
・Twitter4J 1.0.3 リリース
・Google Calendar と Twitter を連携 - Twittercal
・ Suitter Public beta 1.0
・メールで Twitter! - TwitterMail.com
・Twitter4J 1.0.2 リリース
・Twitter4J 1.0.1 リリース
・Twitter4J 1.0 リリース
maven releaseプラグイン メモ - release をやり直したいときは?
release プラグインでリリースしたものをやり直したい場合。
$ git reset --hard HEAD^
$ git tag -d リリースバージョン名
Deleted tag '2.1.3' (was 247b341)
$ git push origin :refs/tags/リリースバージョン名
To git@github.com:yusuke/twitter4j.git
- [deleted] 2.1.3
$ git push -f origin master
$ mvn release:prepare -Darguments="-Dmaven.test.skip=true"
INFO] Scanning for projects...
[INFO] Reactor build order:
[INFO] twitter4j
[INFO] twitter4j-core
[INFO] twitter4j-httpclient-support
[INFO] twitter4j-examples
[INFO] Searching repository for plugin with prefix: 'release'.
[INFO] ------------------------------------------------------------------------
[INFO] Building twitter4j
[INFO] task-segment: [release:prepare] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [release:prepare {execution: default-cli}]
[INFO] Verifying that there are no local modifications...
[INFO] Executing: /bin/sh -c cd /Users/yusukey/opensource/twitter4j && git status
[INFO] Working directory: /Users/yusukey/opensource/twitter4j
[INFO] Checking dependencies and plugins for snapshots ...
What is the release version for "twitter4j"? (org.twitter4j:twitter4j) 2.1.3: :
What is the release version for "twitter4j-core"? (org.twitter4j:twitter4j-core) 2.1.3: :
What is the release version for "twitter4j-httpclient-support"? (org.twitter4j:twitter4j-httpclient-support) 2.1.3: :
What is the release version for "twitter4j-examples"? (org.twitter4j:twitter4j-examples) 2.1.3: :
What is SCM release tag or label for "twitter4j"? (org.twitter4j:twitter4j) twitter4j-2.1.3: : 2.1.3
What is the new development version for "twitter4j"? (org.twitter4j:twitter4j) 2.1.4-SNAPSHOT: :
What is the new development version for "twitter4j-core"? (org.twitter4j:twitter4j-core) 2.1.4-SNAPSHOT: :
What is the new development version for "twitter4j-httpclient-support"? (org.twitter4j:twitter4j-httpclient-support) 2.1.4-SNAPSHOT: :
What is the new development version for "twitter4j-examples"? (org.twitter4j:twitter4j-examples) 2.1.4-SNAPSHOT: :
[INFO] Transforming 'twitter4j'...
[INFO] Transforming 'twitter4j-core'...
[INFO] Transforming 'twitter4j-httpclient-support'...
....省略....
$ mvn release:perform -Dgpg.passphrase=************ -Darguments="-Dgpg.passphrase=********** -Dmaven.test.skip=true"
[INFO] Scanning for projects...
[INFO] Reactor build order:
[INFO] twitter4j
[INFO] twitter4j-core
[INFO] twitter4j-httpclient-support
[INFO] twitter4j-examples
[INFO] Searching repository for plugin with prefix: 'release'.
[INFO] ------------------------------------------------------------------------
[INFO] Building twitter4j
[INFO] task-segment: [release:perform] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [release:perform {execution: default-cli}]
[INFO] Checking out the project to perform the release ...
....省略....
あとは sonatype でリポジトリを選択して"close" → "release"すれば maven central repository に伝わります。
以上自分向けのメモでした。
関連記事:
・clmemo@aka: Git でリモート・リポジトリーのタグを削除する
・歴史を振り返る、歴史を書き換える – Git を勉強してみる (4) - ちからの備忘録的日記
maven releaseプラグイン / Sonatypeメモ - Staging Checksum Validation..-Incorrect SHA1
Twitter4JSonatype へのアップは settings.xml を配置することでうまくいきました。
今度はStating状態のリポジトリをクローズしようとしたら Staging Checksum Validation..-Incorrect SHA1 というエラーが。![]()
Maven Central SHA1やMD5がオカシイという指摘は前にも頂いていたのですが放置していました。
Sonatype でクローズする際のバリデーションが以前よりも強化されて今回はクローズできなかったようです。
調べたらこれは Maven2.1.0 のバグらしいです。
・[#OSSRH-484] Tumbler - a Behaviour-Driven Development library for Java - Sonatype JIRA
以上自分向けのメモでした。
maven releaseプラグイン / Sonatypeメモ - Error deploying artifact...Return code is: 401
Twitter4J 2.1.3 を maven central repository にアップしようとしたらこんなエラーがでました。
調べたら原因は sonatype の id、パスワードを settings.xml に書いていないこと。
・Old Nabble - Artifactory-Users - [artifactory - Help] can't deploy to artifactory -- always get 401
新しいMacBook Proに移行したときにコピーし忘れていたみたいです。
以上自分向けのメモでした。
TFJ CodeCamp #001 に参加してきました
TFJ CodeCamp #001 に参加してきました。
TFJ といっても Twitter4J ではありません。クックパッド・百式の田口さん共催の日帰り開発合宿(?)です。
クックパッドに足を運ぶのは二回目で、一度目はカカクコムとクックパッド共催の勉強会でにお邪魔したことがあります。1年半ほど前だったでしょうか?
クックパッドは相も変わらずオシャレなキッチン、そしてキレイなロビーで気持ちよかったです。
開発合宿ということで私も開発したわけですが、最近トテツモナイ数のissueをcloseしている Twitter4J からは手を離して、ちょっとした Web アプリのプロトタイピングをしました。
これまでセミナーやトレーニングを通してスピーカー/トレーナーとして「あったらいいな」とぼんやり思っていたものをハリボテ+αくらいの形にしました。良くあることですが作りながらどんどん膨らむ構想・妄想・・・。開発に終わりはありません。
最後に成果発表のタイミングで成果を見せたところまずまずの反応。なにもすごいことはしてないけど便利そうなのは想像してもらえた感じかな?マネタイズの仕組みは全く考えていませんが、近いうちに公開して少しずつ膨らまして行きたいと思っています。
他所感としては以下の通りです。
・PHP/Rubyだらけ、Javaが少ない
ほぼ全員が Web サービスの開発をしていらっしゃったようですが大半は Ruby か PHP の様子。30人ほどの参加者中、Java使いは私一人でちょっと寂しかったです。
・Macだらけ
やっぱり開発にはなにかと Mac がいいですね。PCのユーザは数名だけ、MacBook Pro や MacBook Air で銀色づくしでした。
・田口さんにお会いした
色々なサービスの「中の人」にあえました。中でも百式で有名な田口さんは気軽に話せる雰囲気を作ってくれるナイスガイでした。![]()
成果発表-「チェックアウト」の儀式の様子
関連リンク:
・クックパッドにてプチ開発合宿(Tech Founders Japan CodeCamp #001)を開催したよ! - IDEA*IDEA ~ 百式管理人のライフハックブログ
・『TFJ CodeCamp #1』のお知らせ « クックパッド開発者ブログ
・【7/19】 クックパッドにてプチ開発合宿のお誘い『Tech Founders Japan CodeCamp #1』 - IDEA*IDEA ~ 百式管理人のライフハックブログ
・プチ開発合宿「TFJ Code Camp #1」に参加中。クックパッドさんのオフィスにおじゃましてます。 - exdesign
・クックパッドオフィスでプチ開発合宿「TFJ CodeCamp #1」に参加してきました - F.Ko-Jiの「一秒後は未来」
・TFJ CodeCamp #1に参加してきました - ふるろぐ
・プチ開発合宿『TFJ CodeCamp #1』に参加してきました - exdesign
・ツイッターで節約、お小遣い管理! | Cashbook for Twitter
・Cashbook Blog - ツイッターのつぶやきでお小遣い帳がつけられるキャッシュブックのお役立ち情報をお届けしていきます!
・Meity.jp - TwitterのIDやリストで公開先を指定するメッセージ作成サービス