2007年 6月 22日 金曜日 |
JavaOne 2007報告会, Java版資料 English Translation: (Yahoo!) / (Google) 公開すると言って忘れていたのですが、JavaOne 2007報告会の時に作成したJava/Swingで書いたプレゼンテーションのソースを公開しました。
何せ時間がなかったものでソースの中身をみるとかなり恥ずかしいことになっていますが、それでもちょっとしたTIPSがあるのでご紹介しておきましょう。
マルチモニタを使う今回のプレゼンは手元のPCと、プレゼンを映すプロジェクターとは別々の内容を表示しておきたかったので、マルチモニタ対応にしてあります。マルチモニタ環境では、AWTにあるjava.awt.GraphicsDeviceを選択することで、目的のディスプレイに表示することができます。ちなみにGraphicsDeviceを列挙するにはこんな感じにコーディングすると取得できます。GraphicsDevice[] devices = GraphicsEnvironment.getLocalGraphicsEnvironment() .getScreenDevices();この後、JFrameや、JWindowをその目的のディスプレイに表示するわけですが、このとき、全画面表示にしない場合は JFrame#setLocationなどを使って、そのディスプレイの開始位置を設定してやります。 JFrame frame = ... // 初期化 GraphicsDevice selectedDevice = ... // 何らかの方法で選択 GraphicsConfiguration gc = selectedDevice.getConfiguration(); Rectangle bounds = gc.getBounds(); // このデバイスの境界を取得 frame.setLocation(bounds.x, bounds.y); // このデバイスの開始位置に位置を設定 画像表示の高速化このプレゼンソフトは急ごしらえということもあり、かなり強引な方法を使っています。プレゼンの資料は全部画像ファイルとして作ってあり、それをJava/Swingを使って表示するという強引なプレゼンソフトなのですが (一応テキストの配置とかも全部Javaでやろうとも考えましたが、開発時間の消耗を考えると現実的ではありませんでした)、それでもスムースにアニメーション表示をしようとするとなかなか厳しいところがありました。最初に作ったバージョンではMacBook Pro, Core Duo 1.83GHz, Radeon X1600(128MB)を使っているのにフレームレートが5〜10fps程度しか出ずカクカクな感じ・・・。せめて20fpsはほしい・・・。ということでいくつか工夫をしました。
OpenSolaris インストールフェスタを会津大で開催 English Translation: (Yahoo!) / (Google) 来週末ですが、会津大学にてOpenSolarisインストールフェスタが行われます。もうslashdot.jpにも出ていますね。
今回はSolaris/OpenSolarisだけではなく、Javaネタも少しあって、岡崎と片貝さんも参加させていただき、Javaのセッションを持たせていただく予定になっております。タイトルはそろそろ夏ということで、夏らしい感じにしてみました。
JavaFXで遊ぼう -- お題、挑戦受けて立ちます!! English Translation: (Yahoo!) / (Google) 来週水曜日(6月27日)に恒例のJavaナイトセミナーVol 6.が行われます。今回はタイトルの通りJavaFXです。参加されたい場合には参加申し込みの方法に従って申し込みをしてください。
JavaFXはこんな感じのカッコイイアプリケーションが作れるスクリプト言語です。
明日のイベント English Translation: (Yahoo!) / (Google) 明日は二つイベントがあります。両方とも参加無料のイベントで、たぶんまだ滑り込みで参加可能だと思いますので、ご興味をお持ちの方は是非ご参加ください。
shingoy氏のthought English Translation: (Yahoo!) / (Google) メモ: Mac OS Xでファイルの関連づけをリセットしたい English Translation: (Yahoo!) / (Google) いろいろなソフトを評価したりしていて、インストールやアンインストールを繰り返しているとファイルの関連づけがおかしくなってしまって、かなり前から困っていました。実用上は困らない場合がほとんどですが、表示されるアイコンがおかしくなってしまったり、見栄え上も気持ちよくありません。
そういう設定はどこでやるんかな〜、なんて思って $HOME/Library以下を探してみたり、/Libraryや/System/Library以下を探してもそれらしきものは見つからず・・・。 そんなときはとりあえず、Googleさんに聞いてみようということで聞いてみたところ出てきました。How to rebuild the LaunchServices databaseこれです。 $ /System/Library/Frameworks/ApplicationServices.framework/\ Frameworks/LaunchServices.framework/Support/lsregister \ -kill -r -domain local -domain system -domain userLaunchServicesはMac OS Xでファイルの実行に関する関連づけを管理しているサービスで、この(隠しコマンドみたいな)コマンドで、-kill -r なんてやると関連づけデータベースが再構築されるようです。-domainで、どのデータベースに対して操作をするかを指定するようです。 かれこれ半年ぐらい時間があるときに探していましたが、もっと早くググってれば良かったなあと思いました(でも、すっきり)。 今月の2時間で学ぶ Java Hot Topic(6月号) English Translation: (Yahoo!) / (Google) クロスポスティング(手抜き・・)ですいません。blogs.sun.com/javaevにも書きましたが、来週6月20日(水)に恒例のナイトセミナー、今月の2時間で学ぶ Java Hot Topic(6月号)を行います。今回のテーマはいま急速に注目が集まっている(参考: RailsとGlassFish、JBoss Seamに注目-NRI調査)GlassFishと、JavaOne 2007でも注目の集まっていたリアルタイムJavaの2本立てです。無料セミナーですが、事前登録制となっております。まだまだ登録は間に合いますので登録ページより参加登録をお願いいたします。 今が旬の GlassFish をおいしくいただくために
完成間近の GlassFish v2 のインストールからアプリケーション実行までを、実演を交えて丁寧に解説します。また、少しずつ見え始めてきた、次期 v3 の新機能についてもこっそり紹介します。 Java パズラーズちょっとおかしな振る舞いをする Java プログラムに関するクイズです。正解者にはすてきな景品が... リアルタイム Java はここが違う!
時間についての制約が厳しいリアルタイムシステムにおいては、GC による遅延やタスクのスケジューリングなど、さまざまな課題があります。リアルタイム Java が、これらの課題をどのようにして解決するかを、その実装である Sun Java Real-Time System 2.0 を使って解説します。 第7回デベロッパーズ・ラウンジ English Translation: (Yahoo!) / (Google) 昨日はもう第7回目を数えるデベロッパーズラウンジに行ってきました。このデベロッパーズラウンジはオープンソース・コミュニティーをリードされている方々を招き、コミュニティー間のコミュニケーションをもっと親密にしていこうというような趣旨の集まりです。
なので、どんどん積極的にコミュニケーションすることが必須とされています。また、前の方ではプレゼンが行われるのですが、そのアジェンダも自分でホワイトボードにどんどん書き込んでいくという形式です。
今回はちょうど来日されているTim Brayさんのプレゼンテーションも。
最近はすこし概要的なお話を見聞きする機会が多かったように思いますが、今回はバリバリテクニカルなお話で、Atomのお話でした。
ただし、プレゼンテーションといっても、全員がきちんと座って聞くのではなく、全員勝手にコミュニケーションをとる!という感じで、全然形式張っていなくて楽しいです。 また、今回は時期的にRuby会議直後であることと、JRubyのコア開発者 Tomas Eneboさん、Charles Nutterさんもこのデベロッパーズラウンジに来られていたのでRuby関連の話題が多かったように思います。
橋本さんによるNetBeans Ruby IDEの紹介や、
Charlesさん、TomasさんによるJRubyの実演デモなど。
今回はJRuby Tシャツを頂きました(しかもCharles、Tomasにサインしてもらいました) 日替わり実験室: JRubyとグラフィックス English Translation: (Yahoo!) / (Google) JRubyのデモでは多くの場合、Javaとの親和性をデモンストレーションするためにSwingとの連携が披露されますが、実際にやってみると、JavaでSwingを書くのと同じ記述量が必要なのであまりうまみを感じません・・・。たぶん、フレームの作成とか、パネルの配置とかはJavaでNetBeansなりを使って書いて、スクリプトで書きたい一部分だけをJSR-223を使って呼び出すのが賢いやり方なのでしょう。
しかしながら、それでも負けずにコンソールからJRubyだけを使ってグラフィックスを使ってみることにしました。Swingだけだとおもしろくないので、今回はTimingFrameworkも使っています。 Java標準以外のライブラリをJRuby実行時に指定するには環境変数CLASSPATHにそれを入れておけばよいだけのようです。 $ export CLASSPATH=$CLASSPATH:~/Library/Java/timingframework/TimingFramework-0.54.jarなお、Java SE 6のAPIを一部使っていますので、Java SE 6が使われるようJAVA_HOME環境変数を設定しておきましょう。Macなら次のような感じです (Java SE 6はApple Developer Conenctionからユーザ登録をして事前にインストールしておきます)。 $ export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Homeこんな感じで指定すればよいでしょう。ではいきなりですがコーディングです。
#!/usr/bin/env jruby
require 'java'
include_class 'java.awt.Color'
include_class 'java.awt.Graphics'
include_class 'java.awt.geom.Path2D'
include_class 'javax.swing.JPanel'
include_class 'javax.swing.JFrame'
include_class 'org.jdesktop.animation.timing.TimingTargetAdapter'
include_class 'org.jdesktop.animation.timing.Animator'
def draw_suncurve(g, w, h, c)
s = Path2D::Float.new
s.move_to(0, 0)
s.line_to(w, 0)
s.curve_to(w, 0, w - h / 10, h / 4, w, h / 2)
s.curve_to(w, h / 2, w + h / 10, h * 3 / 4, w, h)
s.line_to(0, h)
s.line_to(0, 0)
g.set_color(c)
g.fill(s)
s
end
class SunCurveAnimator < TimingTargetAdapter
attr_accessor :panel
def begin
g = @panel.get_graphics
g.set_color(Color::WHITE)
g.fill_rect(0, 0, @panel.get_width, @panel.get_height)
end
def timingEvent(f)
draw_suncurve(@panel.get_graphics,
(@panel.get_width - @panel.get_height / 10) * f,
@panel.get_height, Color.new(231, 111, 0))
end
end
class FrameExecutor
include java.lang.Runnable
def run
panel = JPanel.new
frame = JFrame.new('Sun Curve')
frame.set_default_close_operation javax.swing.WindowConstants::EXIT_ON_CLOSE
frame.set_size 800, 600
frame.get_content_pane.add panel
frame.set_visible true
sca = SunCurveAnimator.new
sca.panel = panel
a = Animator.new(2000, sca)
a.set_acceleration(0.2)
a.set_deceleration(0.2)
a.start
end
end
javax.swing.SwingUtilities.invoke_later FrameExecutor.new
では実行です。
はい、実行されました。なお、JRubyのデモンストレーションでは手間を省くために、しばしばJFrameをメインスレッドから起動していますが、Swingのスレッド扱いの流儀からSwingUtilities#invokeLaterを使うのが本筋でしょう。 日替わり実験室: JRubyとGEM English Translation: (Yahoo!) / (Google) この間の土日に行われたRuby会議2007で見聞きしたことを早速手元で試そうと、最近、いろいろとRubyをさわっているところなのですが、Javaとの連携も試したいのでJRubyを中心にさわっています。Ruby会議で興味を持ったのは朴 芝印さんが発表されたHpricotというHTMLパーサです。
これを使うと、Webスクラッピングなんかも簡単にできるとのこと。今までPerlを使ってちょっとしたHTMLの整形とかをやっていたのでこれには興味津々です。早速、JRubyで使ってみよう!、ということで gem (JRubyには最初からgemがついています)でHpricotをインストール・・・。と、思ったのですが早速つまずいてしまいました。インストールに失敗してしまいます。 最終的には片貝さんからにたまごほうれん草: JRubyでgemという日記に解決策が載っているということを教えていただきインストール完了です。 では早速、あるWebページからリンクだけ取ってくるというスクリプトを作ってみます。
#!/usr/bin/ruby
require 'rubygems'
require 'hpricot'
require 'open-uri'
events = Hpricot(open('http://jp.sun.com/company/events/').read)
(events/'a[@href]').each { |a| p a.attributes['href'] }
こんな感じですね。だいぶ楽ちん。
Mac向けOpenOffice.org Aquaを試してバグレポートしよう English Translation: (Yahoo!) / (Google) (一部の)世の中はWWDCの発表でお祭り騒ぎのようですね。次期Mac OS XであるLeopardの詳細が徐々に明らかになってきたようです。
さて、先週の話題なのでもうご存じの方も多いと思いますがOpenOffice.org 2.3ベースのMac OS X Aqua向けのアルファ版がリリースされています。
現在のところ次のような制約があるそうです。
NeoOfficeがあるのにいまさら?と思われるかもしれませんが、NeoOfficeは画面描画などの処理をJavaで行っているために、本来C++で書かれているOpenOffice.orgとの間でいろいろ通信や変換などの処理が行われています。このため、Keynote等のアプリケーションと比べればややもっさりした感じの動作になってしまいます。 一方今回のOpenOffice.org AquaはX11も不要で、Javaもいらないほぼ完全にC++なアプリケーションとなるため、より軽量な動作を望むことができます。実際に、体感的にはこのOOo AquaはすでにNeoOfficeやX11版OpenOffice.orgよりも軽快に動作します。 このような期待の持てるプロジェクトがうまく進むためにも今、特に日本からのバグレポートがどんどん出てくることが期待されています。
Ruby会議2007, 2日目の日曜日 English Translation: (Yahoo!) / (Google)
Jimさんも大絶賛のRuby会議2007の二日目の様子です。二日目は初日に比べればやや空席が目立ちましたがそれでも会場の熱気と一体感は一日目以上でした。
今回のRubyKaigiは最後のDaveさんによるキーノートがうますぎた(?)ということもあり、IT系のイベントでは少なくともここ6年以上の中ではもっとも、感動的なイベントでした。Daveさんのプレゼンテーションの後にはスタンディングオベーションも。
このパワーには本当に圧倒されるだけでなく、見習いたいところが本当にたくさんたくさんありました。 さて、話は変わって晩ご飯は今回、Tim Brayさん、Charles Nutterさん、Tomas Eneboさんらとしゃぶしゃぶを食べに行きました。
うーん、さすが。皆さんよく食べます。ところで、Timさんは電気屋でカメラをいろいろみてきたそうで、しかもRICOHのGR DIGITALとCaplio GX100が気になっていたとのこと。
(Photo by Tim Bray, by using Okazaki's GX100) Ruby会議2007, 1日目の土曜日 English Translation: (Yahoo!) / (Google) Ruby会議2007の一日目が終わりました。Ruby会議の内容は速報ログが随時更新されているようで、詳細な内容はそちらを参照していただくとして、個人的な感想をいくつか。
とても活気がある400人はいる会場がいっぱいになるほどの人で、画面にはIRCのログが映し出されていて会場(あるいは会場外から)のつっこみがリアルタイムではいるという感じでした。年齢層が若い年齢層も、Javaやそれ以外のイベントよりもかなり若いという印象がありました。若いから活気があるのか、活気があるから若いのかはよくわかりませんが。どなたもプレゼンがうまいどのプレゼンを見てもユーモア感たっぷりで、しかも、要点がわかりやすい。また、IRCからのつっこみにもうまく対応されているということで、技術系のイベントのなかでもかなりレベルの高いセミナーだったと思います。
セミナーの後は懇親会が行われました。
ミーハーなのでTim Brayさんと写真を撮ってもらいました。 Ruby会議2007 English Translation: (Yahoo!) / (Google) 今週末に行われるRuby会議2007に行けることになりました。Rubyというと、7〜8年前に何かの雑誌で見て、お!?これは!!と思っていましたがこれほどまでに盛り上がってくるとは予想もしていませんでした。当時、すでにPerlに手を染めていたのでもったいないことにRubyistになれませんでしたが、最近はちょっとしたスクリプトを書くときにもなるべくRubyを使うようにしています。
こういうちょっとしたスクリプトは1日ひとつぐらいは書くので、この調子で続けていけば3ヶ月ぐらいすればなんとか文法も身についてきそうです(まだ2〜3週間しか続けていませんが)。 写真とブログのワークフロー #1, iPhotoを捨てる日 English Translation: (Yahoo!) / (Google) かれこれ5年ほどですが、写真の管理にはiPhotoというApple製のハードウエアを買うと一緒についてくる写真管理ソフトウエアを使っているのですが最近どうも限界を感じています。
多くの場合、iPhotoの機能に対して不満はなく、むしろ使いこなせていないぐらいなのですが、次の2点においてワークフローを変えざるを得ないだろうという考えに至っています。 1. よく落ちる・・・うちの環境依存なのか、あるいは使い方が悪いのかわかりませんがiPhoto 4の頃からずっと使い続けていますが、1ヶ月に最低2〜3回はクラッシュを経験します。(周囲で使っている人に聞くとそれほどクラッシュするという話は聞かないので、本当にうちだけかもしれません (;_;)
このクラッシュの頻度はiBookでiPhoto 4を使っていた頃と、現在のMacBook ProでiPhoto 6を使っているときとではやや減少したかもしれないという程度です。クラッシュすると多くの場合、消したはずのピンぼけ写真が再起動すると復活していたりする程度なのですが、写真の取り込み中かつ、取り込み後に消去の設定をして処理をしている最中などタイミングが悪いと写真データも見事に消えてしまうことがあります。 このため、最近は「取り込み後に消去」のオプションは恐ろしくて有効化できず、一度メモリカードからデスクトップなど適当なフォルダにコピーしてからiPhotoに取り込んでいます。なんだかiPhotoのうまみが半減以下になってしまっています・・・。 2. Flickrとの連携iPhotoにはもともとFlickrと連携する機能はないので、Flickr Exportという3rd Partyのプラグインを使って連携することになるのですが、このソフトウエアが気がついたらシェアウエアに・・・。まあ、ライセンスの変更は仕方ないことですが、このFlickr Exportの使い勝手も自分のやりたいところとは微妙にずれていてお金を払う気にはなれません(今のところは仕方なく昔の無償版の頃のものを使っていますが・・・)。自分のやりたいことは、複数のSet(FLickr上で写真をひとまとめにする単位)に対して一度にアップロードしたいということです。毎日Flickrにアップロードしていればそれほど問題にならないのですが、1週間分をまとめてアップロードする場合など、どうしても複数のSetを作りながらアップロードという作業をしたくなります。最近のデジカメは画素数も増えて容量も増加の一途ですから、このアップロード作業は夜間バッチでやりたいのです (^^ゞ ところがFlickr Exportでは1アップロード処理あたり、1 Setというようになっているので、その処理が終わるまで次のSetへのアップロードができませんし、そもそもそういった処理の予約も無理です。また、悲しいことにFlickr Exportを使っているとiPhotoはさらにクラッシュしやすくなります。 Flickrはハードディスクの残り容量がほとんどないうちの環境にとってはもはや欠かせないWebサービスの一つです。このため、Flickrとの連携が便利ではない写真管理ソフトにはそれほど魅力を感じなくなってきました。 そんなこんなで最近、このiPhotoを中心とした写真管理のワークフローはあきらめて、Java/Swingで自作しようと決心しました。暇なときにちょびちょび開発するので、たぶん、6〜12ヶ月ぐらいかかると思いますが、徐々に置き換えていきたいと思います。それが完成するまでこのブログで開発の実況中継をする予定です。 |
Today's Page Hits: 1097 |