Today アクセスカウンター Yesterday アクセスカウンター

ホワット・ア・ワンダフル・ワールド

私は知識に何ものかを付け加え,また他の人々がより多くのものを付け加える手助けをした --- G.H.ハーディ

全記事一覧 << 2008/07 12345678910111213141516171819202122232425262728293031 2008/09 >>

プロフィール

あろは (alohakun)

  • Author:あろは (alohakun)
  • 若槻俊宏 (WAKATSUKI toshihiro)

    連絡先 : alohakun ___at___ gmail.com
    mixi : http://mixi.jp/show_friend.pl?id=182927
    twitter : http://twitter.com/alohakun

    abstract

    プログラミングという人間の知的行為を体系化し,単なる職人芸ではなく,サイエンスにするための研究をしています.

    具体的には,等価変換計算モデルに基づいた,仕様記述からのプログラム合成の研究をしています.

    もっと噛み砕くと,プログラムの正しさをどのように定式化し,どのような枠組みで,どのように変換を進めていけば,正しさを保証したまま,効率的なプログラムを手に入れることができるのか,ということについて研究しています.

    キーワード : equivalent transformation, computation model, programming paradigm, formal specification, program synthesis













    あわせて読みたい


    この日記のはてなブックマーク数


    スカウター : ホワット・ア・ワンダフル・ワールド


    Map









    FC2 BLOG RANKING

FC2カウンター

ブロとも申請フォーム

この人とブロともになる

Java3D で四角を表示してマウスで回したりドラッグしたりできる最低限のサンプル

2008/03/17(月) 01:10:45

私が最低限と言ったら本当に最低限なので,コンストラクタと main しかありません.



import javax.swing.JFrame;
import javax.vecmath.Point3d;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.BoundingSphere;
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.behaviors.vp.OrbitBehavior;
import com.sun.j3d.utils.behaviors.mouse.MouseTranslate;

public class T extends JFrame {
  public T() {
    getContentPane().setLayout(new BorderLayout());
    GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
    Canvas3D canvas = new Canvas3D(config);
    getContentPane().add(canvas, BorderLayout.CENTER);
    OrbitBehavior orbit = new OrbitBehavior(canvas, OrbitBehavior.REVERSE_ALL);
    orbit.setSchedulingBounds(new BoundingSphere(new Point3d(0, 0, 0), 100.0));
    SimpleUniverse universe = new SimpleUniverse(canvas);
    universe.getViewingPlatform().setNominalViewingTransform();
    universe.getViewingPlatform().setViewPlatformBehavior(orbit);
    BranchGroup root = new BranchGroup();
    TransformGroup tg = new TransformGroup();
    root.addChild(tg);
    tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
    tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    MouseTranslate trans = new MouseTranslate(tg);
    BoundingSphere bounds = new BoundingSphere();
    bounds.setRadius(5.0);
    trans.setSchedulingBounds(bounds);
    tg.addChild(trans);
    root.addChild(new ColorCube(0.1));
    root.compile();
    universe.addBranchGraph(root);
  }
  public static void main(String[] args) {
    T t = new T();
    t.setBounds(10, 10, 400, 400);
    t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    t.setVisible(true);
  }
}



ひどいコードですが,一応これで動くと思います.なんか警告が出てるな…


~/work/java/j3d$ ~/jdk1.6.0_05/bin/javac T.java
~/work/java/j3d$ ~/jdk1.6.0_05/bin/java -cp . T
Java 3D WARNING : reported GLX version = 1.2
GLX version 1.3 or higher is required
The reported version number may be incorrect. There is a known
ATI driver bug in glXQueryVersion that incorrectly reports the GLX
version as 1.2 when it really is 1.3, so Java 3D will attempt to
run anyway.
JAVA 3D: OpenGL 1.2 detected; will run with reduced functionality


次はオブジェクトの動かし方と,複数のオブジェクトを協調動作させる方法だなぁ… ようするに ToPoLo クローンみたいなのを作りたいわけです.伸び縮みとか曲がったりとか,いろいろな動くブロックをくっつけて,動く積み木を作るゲーム.
JAVA/VMTB:0CM:0 このエントリーを含むはてなブックマーク | livedoorクリップ livedoorクリップ BuzzurlにブックマークBuzzurlにブックマーク newsing it!

JDK 6 を Debian/GNU linux にインストール

2008/03/16(日) 12:10:27

ついでに Java 3D も試してみる.

SUN の Java SE Downloads から jdk-6u5-linux-i586.bin と,Java 3D のサイトから java3d-1_5_1-linux-i586.bin と動作確認のための j3d-examples-1_5_1-src.zipを取ってくる.ant はインストール済みとする (Debian の場合は apt で入ります).途中で,文字化けを防ぐために,適当な日本語 truetype font にシンボリックリンクを作ってます.

$ chmod +x src/jdk-6u5-linux-i586.bin
$ ./src/jdk-6u5-linux-i586.bin
$ chmod +x src/java3d-1_5_1-linux-i586.bin
$ cd jdk1.6.0_05/jre/
~/jdk1.6.0_05/jre$ ../../src/java3d-1_5_1-linux-i586.bin
~/jdk1.6.0_05/jre$ ls lib/ext
j3dutils.jar j3dcore.jar vecmath.jar ...
~/jdk1.6.0_05/jre$ ls lib/i386/
libj3dcore-ogl-cg.so libj3dcore-ogl.so ...
~/jdk1.6.0_05/jre$ cd lib/fonts
~/jdk1.6.0_05/jre/lib/fonts$ mkdir fallback
~/jdk1.6.0_05/jre/lib/fonts$ ln -s /usr/share/fonts/truetype/kochi/kochi-* fallback/
~/jdk1.6.0_05/jre/lib/fonts$ ls fallback/
kochi-gothic-subst.ttf kochi-mincho-subst.ttf
kochi-gothic.ttf kochi-mincho.ttf
~/jdk1.6.0_05/jre$ cd ../../work/java/j3d/
~/work/java/j3d$ unzip j3d-examples-1_5_1-src.zip
~/work/java/j3d$ cd j3d-examples
~/work/java/j3d/j3d-examples$ export JAVA_HOME=/home/aloha/jdk1.6.0_05/

~/work/java/j3d/j3d-examples$ ant
Buildfile: build.xml

init:

init-compile:

compile:
[javac] Compiling 148 source files to /home/aloha/work/java/j3d/j3d-examples/build/classes
[javac] 注:一部の入力ファイルは推奨されない API を使用またはオーバーライドしています。
[javac] 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。
[javac] 注:入力ファイルの操作のうち、未チェックまたは安全ではないものがあり ます。
[javac] 注:詳細については、-Xlint:unchecked オプションを指定して再コンパイルしてください。
[copy] Copying 48 files to /home/aloha/work/java/j3d/j3d-examples/build/classes/org/jdesktop/j3d/examples/resources
[copy] Copying 44 files to /home/aloha/work/java/j3d/j3d-examples/build/classes/org/jdesktop/j3d/examples

jar:
[mkdir] Created dir: /home/aloha/work/java/j3d/j3d-examples/dist
[jar] Building jar: /home/aloha/work/java/j3d/j3d-examples/dist/j3d-examples.jar

BUILD SUCCESSFUL
Total time: 7 seconds

~/work/java/j3d/j3d-examples$ ~/jdk1.6.0_05/bin/java -classpath build/classes org.jdesktop.j3d.examples.hello_universe.HelloUniverse

Java 3D WARNING : reported GLX version = 1.2
GLX version 1.3 or higher is required
The reported version number may be incorrect. There is a known
ATI driver bug in glXQueryVersion that incorrectly reports the GLX
version as 1.2 when it really is 1.3, so Java 3D will attempt to
run anyway.
JAVA 3D: OpenGL 1.2 detected; will run with reduced functionality


四角形がぐるぐる回ってるデモが出ればインストール成功です.ついでに JOGL も入れておきましょう (前回の記事を参考に,既に jogl-1.1.0-linux-i586.zip が ~/work/java/jogl に展開済みであったとします)

~/work/java/j3d$ cd ../jogl
~/work/java/jogl$ cp jogl-1.1.0-linux-i586/lib/* ~/jdk1.6.0_05/jre/lib/ext/
~/work/java/jogl$ ls ~/jdk1.6.0_05/jre/lib/ext
dnsns.jar jogl.jar libjogl_cg.so sunpkcs11.jar
gluegen-rt.jar libgluegen-rt.so localedata.jar vecmath.jar
j3dcore.jar libjogl.so meta-index
j3dutils.jar libjogl_awt.so sunjce_provider.jar
~/work/java/jogl$ ~/jdk1.6.0_05/bin/java -classpath jogl-demos.jar demos.gears.Gears
INIT GL IS: com.sun.opengl.impl.GLImpl
Chosen GLCapabilities: GLCapabilities [DoubleBuffered: true, Stereo: false, HardwareAccelerated: true, DepthBits: 24, StencilBits: 8, Red: 8, Green: 8, Blue: 8, Alpha: 8, Red Accum: 0, Green Accum: 0, Blue Accum: 0, Alpha Accum: 0, Multisample: false ]
GL_VENDOR: VIA Technology
GL_RENDERER: Mesa DRI UniChrome (KM400) 20060710 x86/MMX+/3DNow!+/SSE
GL_VERSION: 1.2 Mesa 7.0.3-rc2

もうかれこれ 5 年ぐらい前に買ったビデオカードがオンボードの PC なので,環境の貧弱さがモロバレ.とりあえずデモ程度ならば問題なく動きます.
JAVA/VMTB:0CM:0 このエントリーを含むはてなブックマーク | livedoorクリップ livedoorクリップ BuzzurlにブックマークBuzzurlにブックマーク newsing it!

JOGL (Java bindings for OpenGL) を使ってみる

2008/03/15(土) 23:01:30

みなさんは 1996 年 12 月にアートディンクから発売された PlayStation の 「ToPoLo (トポロ)」 というゲームをご存知でしょうか ?

いや,私もついさっきまでタイトルすら忘却の彼方だったのですが,ふと思い出してしまって気になって wikipedia のプレイステーション全ゲームタイトルを最初から虱潰しに探して,ようやく思い出しました (当時は小学生〜ギリギリ中学ぐらいだったと思ったので,初期のゲーム,ということだけは記憶にあった) 完全にタイトル忘れていたうえ,漫然と膨大なリストを眺めていただけなのにピタッと目が止まるあたり,人間の脳のフィルタリング能力ってほんと凄いですね.

まぁ,このゲームにはすごい期待していて,発売日に気合い入れて購入したような気がするのですが,そんなに記憶に残ってないってことは,たぶんすぐに投げ出してしまったのでしょうね.なんかいろいろな意味で操作性が悪かった記憶があります.広告とかだけ見てると,ものすごく面白そうだったのに,当時ですら全然話題にならなかったもんなぁ…

# 現在では,Google 先生に聞いても,ここここの2件しかヒットしません.どんだけマイナーなんだ ! アートディンクって会社は,太陽のしっぽとか THE ATLAS とか,妙に子供心をくすぐり,後々まで記憶に残る変なゲームばかり作っていた気がします.

そんなこんなで,3 D プログラミングがやりたい病が発症したので,JOGL を何となく試してみました.

とりあえず,jdk が入っているのは前提として (私の環境の場合は ~/jdk1.5.0_11 が JAVA_HOME) JOGL のサイトから環境に合わせて jogl-1.1.0-linux-i586.zip などと jogl-demos.jar を取ってきて,展開して出てきた中身の lib 以下を JAVA_HOME/jre/lib/ext にコピーして,デモが動けば OK です.

~/work/jogl$ unzip jogl-1.1.0-linux-i586.zip
~/work/jogl$ ls jogl-1.1.0-linux-i586
CHANGELOG.txt LICENSE-JOGL-1.1.0.txt Userguide.html
COPYRIGHT.txt README.txt lib
~/work/jogl$ cp jogl-1.1.0-linux-i586/lib/* ~/jdk1.5.0_11/jre/lib/ext/
~/work/jogl$ ~/jdk1.5.0_11/bin/java -classpath jogl-demos.jar demos.gears.Gears

歯車が回っているのを,マウスでグリグリ動かせるはず.

この記事の続きを読む…
JAVA/VMTB:0CM:0 このエントリーを含むはてなブックマーク | livedoorクリップ livedoorクリップ BuzzurlにブックマークBuzzurlにブックマーク newsing it!

java 1.5 ランタイム環境で文字化け

2007/10/28(日) 01:05:52

とある java アプリケーションを実行したところ,文字が全部豆腐になってしまった.

どうやら,フォントが jre のデフォルトパスに無いのが原因らしい.

http://java.sun.com/j2se/1.5.0/ja/relnotes.html#linux

Linux 使用時の注意

Red Hat Linux のバージョンには JIS X 0201 用の TrueType フォントをデフォルトで持たないものがあり、フォント設定ファイルに JIS X 0201 の定義がありません。回避策として TrueType JIS X 0201 フォントを J2RE の lib/fonts/fallback ディレクトリにインストールしてください。

というわけで,とりあえずテキトーにそれらしいフォントを探してみると,うちの Debian の場合

$ mkdir -p ~/jdk1.5.0_11/lib/fonts/fallback
$ ln -s /usr/share/fonts/truetype/kochi/kochi-mincho.ttf jdk1.5.0_
11/jre/lib/fonts/fallback/
$ ln -s /usr/share/fonts/truetype/kochi/kochi-gothic.ttf jdk1.5.0_
11/jre/lib/fonts/fallback/
$ jdk1.5.0_11/bin/java -jar mj.jar

てな感じに,フォントにシンボリックを張ったら直った.これでようやく東風荘ができる (笑)

しかし,せっかく起動したんだけど,やっぱり Java 版はイマイチ信頼できない感じ.Windows 版の方が良いね.

# あれれ,おかしいよね.僕は大学の研究室マシンしか Windows 機は持ってないはずなのに…

まぁ,alohakun っていう人を東風荘で見かけたら,おてやわらかにお願いします.

麻雀歴自体は,小学校の頃なんとなく親戚の人がやっていたのを見て興味を持って,蛭子能収さんのマンガ麻雀入門でルールを覚えて (良い本でした), 「哲也」 のマガジン連載をきっかけに中学時代の悪友たちも始めてそれなりに打ち初めたので,もう10年以上ですが,そんなにたくさんやってないので弱いです.もう 6 年ぐらいまともにやってないので,付計算もとっさにできないしなぁ.70 符 2 ハンって何点よ… さすがに google 電卓も答えてくれないね (当たり前.ちなみに,70符 は 2300/4500 点.3 ハンで満貫なので,2345 だけ覚えておけばおk.親は 3468)

戦術書や麻雀劇画は脳味噌が腐るほどたくさん読みましたが.たぶん,余裕で麻雀劇画は 100 冊以上読んでると思う.ちなみに,よく麻雀しに行った友人宅に,ジョジョや男塾が全巻あったのが,僕の人格形成に多大な影響を与えていると思います.抜け番の時,もう何回読んだかわかんないぐらい読んだな.

というか,僕は中学時代と高校時代,本当に麻雀しかやってないので.もう少し実りのある,青春らしい青春を送りたかったなぁと未だに後悔しております.あまりにも勉強しなさすぎて,高校受験も全然ダメで,近所のほどほどの進学校にさえ行けなかったし (大学からは,それなりに勉強しましたが.地方の小さな大学ですが,いちおう主席で出て,学長賞も貰いました.過去の栄光).

なんで急に麻雀がどうしたとか言っているかというと,さっき古本屋で 「根こそぎフランケン」 を立ち読みしてて,高校時代ぐらいの悪い血が騒いだというか (笑)

あと,たまたま札幌に,高校時代の同級生が 2 人いることが最近わかって,ちょくちょく打ったりしてたりというのも.まさか札幌で再開して,(当時は打ったこと無いメンツなのに) 麻雀して遊んでるとか,人生ってのはわかんないものです.

そういえば,なんか札幌には,レート 0.2 でゲーム代 300 円とかの店もあるそうですね.

僕は田舎者なんで雀荘って行ったこと無いんですが (田舎の雀荘ってのは… ねぇ,ホント (笑) 常連さんしかいないし,そのスジの御方もいる,おっかねーところですよ.おまけにリャンピンに赤5焼き鳥ご祝儀アリスだの),そのうち行ってみようかしらね.

朝の 9:00 〜 12:00 はゲーム代が安いらしい.なんと健康的で清潔な.時代も変わったものです.
明日早起きして行ってみるかな…
JAVA/VMTB:0CM:2 このエントリーを含むはてなブックマーク | livedoorクリップ livedoorクリップ BuzzurlにブックマークBuzzurlにブックマーク newsing it!

時代は XML だよねっと

2007/08/15(水) 17:36:52

この間作った JVM のクラスファイルのコンスタントプールをダンプするプログラムを,DOM 経由で XML を吐くようにしてみた.

$ javac ClassFileDumper.java
$ java ClassFileDumper ClassFileDumper.class > ClassFileDumper.xml

とかすると,こんな感じの XML ファイルが出力される.

なんか,JDK 1.5 だと DOM を変換する時に XML の整形が上手く行かない感じらしい

// JDK 1.5 だと上手く行かないらしい…
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, "yes");

一回 DOM (木構造) を作ってるんだから,これをもうちょっとがんばれば,クラスファイルを編集する,jvm golf 用エディタとか作れるかも (まぁ,それ系のツールは既にたくさんありそうですが).
XML から Java のクラスファイルを出すってのはそんなに難しく無いと思うし (面倒だけど).ちゃんと XML と Java のデータ型をマッピングするようにすれば凄く簡単になると思うけど,今のところ全部いいかげん.

というか,そもそも DOM の仕様を全然知らない.コンスタントプールの要素間のリンク構造とかって,どうやって表現すればいいんだろ ?

以下,いろいろ残念な感じのコード.

この記事の続きを読む…
JAVA/VMTB:0CM:0 このエントリーを含むはてなブックマーク | livedoorクリップ livedoorクリップ BuzzurlにブックマークBuzzurlにブックマーク newsing it!

最近のコメント

リンク

このブログをリンクに追加する

最近のトラックバック

人生の残り日数

日本人男性の平均寿命は 28700日.

RSSフィード

カテゴリー