Hatena::ブログ(Diary)

しんさんの出張所 はてな編 このページをアンテナに追加 RSSフィード

カレンダー
2007 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 08 | 09 | 10 | 11 | 12 |
2015 | 02 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 |
2016 | 05 | 08 | 10 | 11 | 12 |
2017 | 01 | 02 | 06 | 08 | 11 |
2018 | 02 |

2011-06-30

[][]GC ゼルダの伝説トワイライトプリンセス クリア

GC版クリアした。

はまるポイントがいくつかあって、それらは説き方そのものがほとんど間違っていないにもかかわらず、うまく攻略できなくてあきらめそうになったりだめな部分が目立つ。特に序盤でこれやられるとはまりやすい。大地の汽笛もいくつかそういうのがあるが、このへんテストしてないんだろうなぁとか思ってしまった。


全体的にボスの難易度が総じて低いのが特徴。一方でダンジョンはどれも重め。弓の細かい操作を共用される場所があるが、一部つらいと思うところも。Wiiだとポインタだからそこは楽なんだろうなぁとか思ったり。



GC版ということで480i、ワイド画面なしという点がやはり弱い。Wiiを持ってるならWii版のほうがいいだろうね。

お話だが、これが結構悪い。特に最後。いきなりラスボスの名前がでてきて、そいつがなんで強いのかとか話は一切なく。序盤からの倒すべき相手として描かれてるキャラクターもラスボスの名前が出てきてから急に小物臭がしてくるなど、お世辞にもお話はいいとはいえなかった。時のオカリナがいまだに支持されるのもお話が丁寧に書かれているのが大きい。ラスボスを序盤から描くこと、未来ではそいつが世界を征服していること、逆に過去ではまだ平和な日常が描かれていて未来のひどさが目立つなど、とにかく話がうまかった。

「こいつを倒せば世界は救われる!」そしてそれに向けて努力する勇者やそれを手助けする人たちというところがぶれないで描かれている。

ダンジョンの完成度とかそんな半紙じゃないんだよね。

現時点での据え置きゼルダの最新作だが、あらためて時のオカリナのすごさを思い知ったとも。話的にはGCゼルダの伝説風のタクトのほうがいいと思う。海を動くのがたるいとかそういうのあるけど、世界はあっちのほうがよく描かれていたと思う。ゼルダのかわいそうなお話とか。姫を頼む・・・・かっこいい。

そういうのがトワイライトプリンセスは一切描かれていない。開発側はおそらくいろんな設定を知っているのだろうけど、プレイヤーはその辺を知らないため想像で補完するしかない。そして保管するだけの情報もほとんどない。


というわけでいつもの5段階評価。

 評価
システム★★★★−
シナリオ★−−−−
サウンド★★★★−
グラフィック★★★★−
総合評価★★★★−

やっぱり、GC用ソフトということでゼノブレイドラストストーリーパンドラの塔、マリオギャラクシー2などWiiのソフトと比べるとやや劣る感じがわかる。PS2では出せないグラフィックだと思うけど、Wiiはやっぱり進化してるんだなというのもよくわかった。

音楽はわりと好感触。

ゼルダとしての面白さはDS2作や風のタクトのほうが上かと。DS版をやる前に風のタクトはやっといたほうがいいと思うけどね。ゼルダということで機微閉めにつけてるが、おそらくほかのメーカーでほかのタイトルだったらこんなに厳しくつけてないかもとか。

2011-06-29

[]Wii/3DS バーチャルコンソールラインナップ

3DSは直近のしか出さないのでアレだけどまとめて書いておく。

Wii

FC
NEOGEO

3DS(前回かいてない22日分から)


FC2作が懐かしいですねぇ。

今回の注目は今日発表で今日いきなりダウンロード可能なレッドアリーマー。非常に完成度の高い作品です。元は魔界村の一敵キャラなのですが、1面で出てきてめちゃくちゃ強く、一番アーサーを倒したキャラだと思われます。いわば中ボスみたいな。個性のあるキャラだけに今でもシリーズ続けてもいいと思うくらいなのですが・・・。

2011-06-27

[][][]第37夜 Glassfish 3.1の埋め込みAPIからのさくさくEJB

JavaEEの構成要素で一番テストしにくかったものはなんだろう。おそらくEJBだ。

アノテーションによる注入をいち早く導入し、開発の容易さは大幅によくなったもののデプロイと実行が(環境によっては)手間だったかもしれない。

JavaEEではロジックをすべてPOJOにしてCDIEJBに注入することによって大幅に楽になった。が、EJBという形でもテストしたいことは多いだろう。

ある程度のサービスを結合したテストというわけだ。


EJBを作ってみる

まずはシングルトン、ステートレス、ステートフルEJBを作る。

package ejb;

import javax.ejb.Singleton;

@Singleton(name="calcSingleton")
public class CalcS {
    public int add(int a,int b){
        
        return a + b;
    }
}
package ejb;

import javax.ejb.Stateless;

@Stateless(name="calcStateless")
public class CalcSL {
    public int add(int a,int b){
        return a + b;
    }
}
package ejb;

import javax.ejb.Stateful;

@Stateful(name="calcStateful")
public class CalcSF {
    public int add(int a,int b){

        return a + b;
    }
}


テストコード

昨日のエントリのデプロイ後の部分に以下のコードを追加する。

{
    CalcS calc = (CalcS) InitialContext.doLookup("java:global/hoge/calcSingleton!ejb.Calc");
    System.out.println(calc +":"+ calc.add(1, 2) );
}
{
    CalcSL calc = (CalcSL) InitialContext.doLookup("java:global/hoge/calcStateless!ejb.CalcSL");
    System.out.println(calc +":"+ calc.add(1, 2) );
}
{
    CalcSF calc = (CalcSF) InitialContext.doLookup("java:global/hoge/calcStateful!ejb.CalcSF");
    System.out.println(calc +":"+ calc.add(1, 2) );
}

実行するとそれぞれインスタンスと足し算の結果の3が表示される。

EJBContainerを使う方法に比べるとよりシンプル・・・のようだ。カレントスレッドのクラスローダを表示すると「APIClassLoader」というのに変更されているのがわかる。取得したインスタンスのクラスのクラスローダを表示すると「WebappClassLoader (delegate=true; repositories=WEB-INF/classes/)」と表示される。

2011-06-26

[][][]第36夜 Glassfish 3.1の埋め込みAPIを使う

埋め込みGlassfishは過去に何回か書いてるが、実は3.0の初期からあったやつから大幅に改良されてる。ただ、Glassfishのページからたどり着くのができないくさいけど。

クラス名とか全部別物。改良というより一から作ったくさい。その代わり大幅にパワーアップしすぎ。

サンプルコード見てもらえばわかるはず。インポートも含めてまるごと。

サンプルコード

package glassfishtest;

import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Scanner;
import org.glassfish.embeddable.Deployer;
import org.glassfish.embeddable.GlassFish;
import org.glassfish.embeddable.GlassFishException;
import org.glassfish.embeddable.GlassFishProperties;
import org.glassfish.embeddable.GlassFishRuntime;
import org.glassfish.embeddable.archive.ScatteredArchive;

public class RunGlassfish {

    public static void main(String[] args) throws GlassFishException, IOException, URISyntaxException {
        String contextName = "hoge";
        
        //環境設定
        GlassFishProperties props = new GlassFishProperties();
        props.setPort("http-listener", 8080);

        //GlassfishServer起動
        long start = System.nanoTime();
        GlassFish glassFish = GlassFishRuntime.bootstrap().newGlassFish(props);
        glassFish.start();
        long end = System.nanoTime();
        System.out.printf("起動時間:%,dms%n", (end - start) / 1000 / 1000);

        //デプロイ
        File webRoot = new File("webContent");//Webコンテンツのルート
        File classRoot = new File("build", "classes");//クラスパスルート

        Deployer deployer = glassFish.getDeployer();
        ScatteredArchive archive = new ScatteredArchive(contextName, ScatteredArchive.Type.WAR, webRoot);
        archive.addClassPath(classRoot);//クラスパス追加
        //archive.addClassPath(new File("hoge.jar"));//適当なライブラリがあればjarも追加可能
        deployer.deploy(archive.toURI());

        //ブラウザ起動
        Desktop.getDesktop().browse(new URI("http://localhost:8080/"+contextName+"/"));

        //コンソールでEnterおすまでブロック
        Scanner scanner = new Scanner(System.in);
        scanner.hasNextLine();


        //停止
        glassFish.stop();

    }
}

この方式ならばNetBeansEclipseなどで自由にプロジェクトを作成してすぐに導入可能なのがわかると思う。

AP鯖起動時間は1秒くらい。ちょっぱや。


ほかにもデプロイ時にWEB-INF/の下に動的に追加したり、earのアーカイブも作れたり(その場合の参照はScatteredArchiveのインスタンスをとったりできるので非常に柔軟性が高い)、glassfishコマンドラインツールであるasadminのコマンドを発行することができるので、動的にデータソースの追加、httpコネクタの設定等ができる。すばらしい。

必要なjarはこれだけ。以下のどちらか1つ。webのほうがear扱えない軽いほう。

2011-06-25

[]そうび

久々に。今回は装備。基本DQ3のようなインターフェースだが、武器や防具の値を表示するようにしたり、最後の確認画面ですべての箇所が見えるように調整。

ここまでは同じ感じだが。

http://shin.cside.com/diary/2011/0625-01.png


ステータスに影響する値が見えるように。

http://shin.cside.com/diary/2011/0625-02.png


最後に確認。

http://shin.cside.com/diary/2011/0625-03.png

ここでAボタンを押すまで確定しない。Bボタンだと戻る。

2011-06-24

[][][]第35夜 Java SEのあたりをつける GUI

JavaGUIといったらSwingSwingの使い方を軽く。

利用するパッケージはjavax.swingパッケージ。さらにサブパッケージもある。

サンプルはクリックするたびにカウンタが増えるアプリ

今回の登場人物

サンプルコード

public static void main(String[] args) {
    //おまじない。
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            //ウインドウの生成
            JFrame frame = new JFrame("ウインドウタイトル");
            //閉じるボタンクリックしたときの動作
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            
            //ラベルの生成
            final JLabel label = new JLabel("クリックした回数表示するよ!");
            
            //ボタンの生成
            JButton button = new JButton("ボタン");
            button.addActionListener(new ActionListener() {
                int count=0;
                @Override
                public void actionPerformed(ActionEvent e) {
                    count++;
                    label.setText(count+"回 クリックしました");
                    
                }
            });
            
            //パネルの生成
            JPanel panel = new JPanel();
            //レイアウト 横方向にならべる
            panel.setLayout(new FlowLayout()) ;
            
            //パネルにコンポーネントを追加
            panel.add(label);
            panel.add(button);
            //パネルのサイズ設定
            panel.setPreferredSize(new Dimension(320, 200));
            
            
            frame.add(panel);//ウインドウにパネルを追加
            
            frame.pack();//ウインドウサイズの自動調整
            frame.setVisible(true);//ウインドウを表示
        }
    });
}

実行結果

http://shin.cside.com/diary/2011/0624-01.png

初期表示。


http://shin.cside.com/diary/2011/0624-02.png

ボタンをクリックするたびに数値が増えていく。


これでGUIアプリ作れるね!

2011-06-23

[][][]第34夜 Java SEのあたりをつける 印刷編

Javaはもちろん全方位な言語なので印刷はできる。いろんな方法があるが、おそらく一番手っ取り早いヤツということで。


印刷の登場クラス

基本はココ、java.awt.printパッケージだ。ココで大体そろう。

  • java.awt.print.PageFormat ページ情報。A4とか用紙。
  • java.awt.print.Printable 印刷の描画部分
  • java.awt.print.PrinterException 印刷時の例外
  • java.awt.print.PrinterJob 印刷の処理をしてくれる

手順としてはPrintableが実際に描画する処理で、ここで渡されるページ番号とGraphicsを利用して描画する。戻り値はそのページが存在するか、というもの。後述するサンプルではreturnのところを見て1ページだけ印刷しているのを確認してほしい。

PrinterJobがプリンタへの命令を行うところ。サンプルでは印刷前のダイアログを出して、OKが選択されたらそのプリンタと用紙に対して描画をしている。サンプルではクロスプラットフォームダイアログではなく、OSネイティブダイアログを出している。こちらのほうが使いやすい場合も多いので、クロスプラットフォームダイアログは利用しないというのもあり。「現実的にユーザーはWindowsなんだろ?」とわりきれば細かい指定ができるわけだし。


サンプルコード

PrinterJob job = PrinterJob.getPrinterJob();
Printable painter = new Printable() {

    @Override
    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
        if(pageIndex > 0){
            return NO_SUCH_PAGE;
        }
        
        graphics.setColor(Color.RED);
        graphics.fillRect(10, 20, 100, 200);

        graphics.setColor(Color.BLACK);
        graphics.setFont(new Font("MS ゴシック",Font.PLAIN , 24));
        graphics.drawString("印刷されていますか?", 100, 50);

        return PAGE_EXISTS;
    }
};
job.setPrintable(painter);

boolean print = job.printDialog();
if(print){
    job.print();
}

実行結果

http://shin.cside.com/diary/2011/0623-01.png

ダイアログ。キャンセルをすると何もしない。


http://shin.cside.com/diary/2011/0623-02.png

描画結果を表示したところ。神をケチるためmdiファイルに出力している。


これでもう伝票印刷は完璧だね!

2011-06-22

[][][]第33夜 Java SEのあたりをつける 画像ファイル編

せっかく前回画像処理を行えるようになったのに画像ファイルが読み書きできないというのも片手落ちなので今回は補足編みたいな。


画像ファイルを出力する

BufferedImageから画像ファイルを出力するのに使うのはjavax.imageioパッケージにあるImageIOクラスだ。

そのImageIO#writeメソッドを使う。

前回画像を書く処理を紹介したが、それに多少追加してみる。

    BufferedImage image = new BufferedImage(128, 128, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = image.createGraphics();
    
    g2.setColor(Color.YELLOW);
    g2.fillRect(0,0,image.getWidth(),image.getHeight());
    
    //赤い死角を描画
    g2.setColor(Color.RED);
    g2.drawRect(0, 0, 64, 64);
    
    //緑の円を描画
    g2.setColor(Color.GREEN);
    g2.drawOval(64, 64, 64, 64);
    
    g2.dispose();
    
    ImageIO.write(image, "png", new File("hoge.png"));
    ImageIO.write(image, "jpg", new File("hoge.jpg"));
    ImageIO.write(image, "bmp", new File("hoge.bmp"));

これで3種類の画像が生成される。ピクセルフォーマットによって出力できない場合もあるので注意。

ちなみに実行結果はこのようになる。

http://shin.cside.com/diary/2011/0622-01.png

画像ファイルを読み込む

こちらは逆にImageIO#readを利用する。


これでもうグラフィックエディタは作れるね!

2011-06-21

[][][]第32夜 Java SEのあたりをつける 画像編

昨日かいたとおり、JavaSEのあたりをつけるためのエントリを描いていく。

細かい解説はしないので、詳しくはJavadocを見ながらいろいろといじってもらいたい。あくまでも索引のようなエントリということで。

特別なぞるわけではないが、このへんを参考に。

「Javaが使えます」という人の基準


画像を扱う

画像を扱う基本となるクラスは名前ですぐ気がつくと思うが、Imageクラスだ。java.awtパッケージにある。画像のサイズを保持していたり、画像に対して実際に描画するグラフィックスコンテキスト(後述)を作成したりする。

ただし、このクラスは抽象クラスである。

実態は別にある。

特に一般的にユーザーが扱うImageを継承したクラスは2つ。

BufferedImageとVolatileImageである。これらはパッケージは変わってjava.awt.imageである。


BufferedImage

いわゆる普通のビットマップを扱うクラスである。画像をピクセル単位で扱う一般的なもの。Win32であればCreateDIBSectionとかそんなかんじのもの。データがメモリにあるため、オフスクリーンでレンダリングしたり、PngJPEGといったファイルの読み書きに利用したりするものである。業務アプリケーションでは一般的に使われるのがこいつだ。

普通にnewで生成するので非常に扱いやすい。

VolatileImage

一方、こいつはVolatile、つまり揮発性のメモリに格納される。具体的に言えばVRAMなど、直接メモリに対してCPUがやり取りが不可能な場合のものをさす。そのかわりハードウェアアクセラレーションがきくのをわりと期待している。ピクセルフォーマットがOSの設定等に左右される可能性があるというもの。いわゆるデバイス依存ビットマップである。扱いにくいが、早いものと覚えておけばよい。

JDKのバージョンがあがるたびにBufferedImageの描画が早くなってきており活躍の場は減っている。ハードウェアを意識的に使うならばOpenGLなどを積極的に利用したほうがいい体。ただし、高レベルな描画が扱えるという点でメリットはある。2Dゲーならこれで十分な場合も多い。

デバイス依存ということからわかるようにnewで生成するのではなく、VolatileImageを生成してくれる各種クラスから間接的に取得する。感覚的にはJava1.2までののImageと同じである。


グラフィックスコンテキスト

Imageクラスとその派生クラスにはgetGraphics()というメソッドがある。これがグラフィックスコンテキストを生成する命令だ。

こいつはjava.awt.Graphicsクラスのインスタンスを生成する。Graphicsクラス自体は抽象クラスである。

JavaDocを見てもらえるとわかるが、ここに実際に描画するメソッドがたくさんある。これで好き勝手に描画するとよい。

描画が終わったらGraphics#dispose()メソッドリソースを開放する。

また使いたくなたらImage#getGraphics()するとよい。


Java2Dへ

Graphics2Dというクラスがある。これはGraphicsを継承している。そして、JavaSEでのGraphicsを生成するメソッドはすべてGraphics2Dである。つまり、Image#getGraphics()したあとにキャストをすることによって扱えるようになる。

見るとわかるが、メソッドが大量に追加される上に、拡大縮小回転など非常に実用的な命令だらけである。2Dはこいつできまりだ。

また、キャストが面倒な人はBufferedImageやVolatileImageのcreateGraphics()メソッドを利用するとよい。中身は同じ、どちらもGraphics2Dを生成するクラスだ。



こんな感じで使う

//128*128、アルファ付32bitカラーのイメージを生成
BufferedImage image = new BufferedImage(128, 128, BufferedImage.TYPE_INT_ARGB);

//グラフィックスコンテキスト作成
Graphics2D g2 = image.createGraphics();

//赤い四角を描画
g2.setColor(Color.RED);
g2.drawRect(0, 0, 64, 64);

//緑の円を描画
g2.setColor(Color.GREEN);
g2.drawOval(64, 64, 64, 64);

//リソース開放
g2.dispose();

BufferedImageのコンストラクタの最初の2つが画像のサイズ、3つ目が画像のピクセルフォーマットだ。インデックスカラーとかもあるが、扱いが面倒なので今回はパレットなしのシンプルなやつにしてみた。モノクロとか16bitカラーとかもある。想定する速度に合わせて適切にピクセルフォーマットのサイズを小さくするのはありだ。が、インデックスカラーなど最近は余計に処理時間がかかったりすることもある。


とりあえず、

  • java.awt.Image
  • java.awt.image.BufferedImage
  • java.awt.image.VolatileImage
  • Graphics
  • Graphics2D

これらがわかればあとはそこからいろいろとたどれるはずだ。


もう、Javaで画像処理はマスターしたも当然だね!

2011-06-20

[]JavaFX 2.0はまだまだ実用的ではないので

先週はJavaFX 2.0強化週間だった。

が、APIを見ればわかるけど、まだまだ実用的になるには足りないことだらけ。せめてFlashAPIに多少追いついてるかと思ったらぜんぜんそんなことはなく。flash liteのほうがましなレベルだったりする。


2.0はとりあえずAPIJava言語から使えるようにしたというところ。正直Javaの初期のGUIライブラリで昨日が少ないAWTの半分以下の実用性だ。

そう考えるとSwingを置き換えるためには毎年バージョンが上がっていったとしてもまだ5年以上はかかりそうだ。



ダイアログとかいろんなAPIがFrameやWindowを引数にとることも多いので、SwingJavaFXを埋め込むというのが現実的なところだろうか。イベントディスパッチスレッドがどっちがどっちなのか意識する必要はあるが、自分でイベントループを処理するAWT-SWTよりはるかにましである。しかもあっちは動作不良起こしやすいし。


というわけで今後はSwingをはじめとしてJavaSEの一般的なAPIを浅く広く紹介していきたいと思う。JavaEE方面はいろんなところでみかけるので問題ないだろうし。

こういうことをやりたい場合、どういったクラスが必要かなどある程度の「あたり」さえつかめればあとはJavaDoc等を読んでいけば問題なく扱えるはず。JavaSEはJavaEEよりはるかに簡単なのだから。

2011-06-19

[]ここはまほうや

体調がすぐれなくて、ほとんど実装できず。魔法屋のみ。

http://shin.cside.com/diary/2011/0619-01.png


魔法は最初すべて購入するものという予定だったが、LVUPの楽しさということで、新しく覚える魔法はLVで習得、その習得済みの魔法を強化するために魔法屋で強化、という感じで。

魔法のバランス的には通常攻撃のかわりに弱いやつを常に使えるくらいにはしたいなと。感覚的にはDQ3ヒャドの消費が中盤以降MP1になるような感じで。

実装度としては25%程度。

2011-06-18

[]福島の現実

こっちにはリンクおいてなかったなぁと思って。

http://ameblo.jp/noukanomuko/entry-10926646707.html

とりあえず最後まで読んでください。福島の農家のお話です。



いっぽう、フランスへ輸出した静岡茶から基準を大きく超えるセシウムが検出されました。静岡といえば、知事が「静岡茶は絶対安全ですので放射性物質の検査はしない」と啖呵をきったことで有名ですが、まさか日本以上に神経質になってる海外向けで検査しないで出してたとか頭わいてるとしか。

これで静岡茶のブランドは地に落ち、日本そのもののブランドも地に落ちました。わざと日本を陥れるような動きがあるんじゃないかと勘ぐるぐらいひどい。


復興の財源もまさか海外へ流して海外企業がウハウハとかやらかしてるとは思いませんでしたし。まぁそこは与党民主党なので公約どおりなのでしょうが。

2011-06-16

[][]第31夜 JavaFX 2.0 の組み込みブラウザで遊ぶ その2

スターとブックマークいただいたので続きでも。

あいかわらずの小ねた。派手なものはないですが。


HTMLのタイトルを取得する

これは簡単。

WebEngine we = new WebEngine();
〜省略〜

System.out.println("タイトル:" + we.getTitle());

HTMLのロードが終わった後ならこれでおわり。簡単ですね。


HTMLを文字列で渡す

URLを常に渡す必要もありません。

we.loadContent("<html>ほげー</html>");

これはWebアプリのテストにつかえそうかな。わざわざポートあけることはせずにとか。


DOM操作

DOM操作ができるということは何でもいじれるということだ。

たとえば動的にJavascriptを生成してそれを実行とか。

//scriptタグを動的に作る
Element script = we.getDocument().createElement("script");
//子にがりがりといれこむ
Node func = we.getDocument().createTextNode(
        "function hoge(text){alert('パラメータ:'+text);}");
script.appendChild(func);

//id='body'の最後に追加
we.getDocument().getElementById("body").appendChild(script);

//実行!
we.executeScript("hoge('ほげ')");

JAXPでDOM操作。こんな変態的なものも動く。やりすぎじゃないかというくらいに。


現状ないけどほしいもの

今のところブラウザで埋め込んで表示とjavascriptの外部から実行くらいしかない。

つまり、ソースの取得やクッキーやヘッダを操作してのアクセスができない。最初のアクセスにPOSTを渡すこともできない。

この辺ができれば表示せずともJavaScriptを理解するHTTPクライアントとして使い物になるんだが。ここができればテストなどでもかなりの威力を発揮できるだろう。

が、Javascriptを動的に追加できるのでなんかいろんなことはできそうだ。

あとクリックイベントとかからJavaをよびたい。Alertとかはさめばそれっぽいのもできるけど。


足りないものだらけ。

ベータということで基本機能は確定だろうからJavaFX 2.5(?)とか次のバージョンに期待か?


WebEngineとは関係ないけど

あとWebEngineとは関係ないけどJavaFXコンポーネントは非常にプアで、簡単なことしかできない。これでいいならAWTでいいじゃないかというレベルのもの。Swingより簡単になったけど、Swingよりはるかに簡単なものしか使えない。つまり、業務系や真っ当なツールにはあいかわらずSwingは必須である。Swingがいらなくなるくらいに進化してほしいものだ。

とはいえ、1.xから方向転換をしてから非常に短時間でいいものができてきたと思う。今まではコンポーネント等のほかに言語そのものの開発とそれをサポートする環境が必要だった。言語をJavaにすることで好きなIDE使って開発ができるし、型の強さはGUIアプリで非常に有効なのだからこれはよい方針転換だったと思う。


JavaFXがらみのお話は続く…?

2011-06-15

[][]第30夜 JavaFX 2.0 の組み込みブラウザで遊ぶ

JavaFX 2.0ではWebEngineといういわゆる組み込みブラウザが登場した。コンポーネントとしてはWebViewという入れ物があって、この2つを組み合わせて扱う。実際のコードの大半はWebEngineを使うことになるだろう。


組み込みブラウザ利用の基礎

WebViewとWebEngineの使い方はコードを見てもらえばわかりやすいか。

WebEngine we = new WebEngine();
WebView wv = new WebView(we);
container.getChildren().add(wv);

we.load("http://www.yahoo.co.jp");

WebEngineに対して設定しているのがわかるはず。


Javascriptの実行

we.executeScript("hoge();");

これでhogeという関数が呼ばれる。簡単。

このメソッド戻り値はObjectである。というわけで式を評価させてみる。


{
    Object data = we.executeScript("'1' + '2'");
    System.out.println(data.getClass()+"/"+data);
}
{
    Object data = we.executeScript("1 + 2");
    System.out.println(data.getClass()+"/"+data);
}
{
    Object data = we.executeScript("1.0 + 2");
    System.out.println(data.getClass()+"/"+data);
}
{
    Object data = we.executeScript("1.5 + 2");
    System.out.println(data.getClass()+"/"+data);
}

実行

class java.lang.String/12
class java.lang.Integer/3
class java.lang.Integer/3
class java.lang.Double/3.5

3つ目の式が注目。浮動小数点と思わせて戻り値はInteger。


alertなどのダイアログ

we.executeScript("window.alert('あらーと?')");

この式を実行してもalertは表示されない。

ではどうするのか。


これはコールバックを設定することができる。


//コールバック
we.setOnAlert(new EventHandler<WebEvent<String>>() {
    public void handle(WebEvent<String> event) {
        System.out.println("alert:"+event.getData());
    }
});
we.executeScript("window.alert('あらーと?')");

これで標準出力に

alert:あらーと?

と表示される。

これを利用するとWebアプリからJava側を呼び出すことができる。JavaScriptSwing操作とかJavaSoundで音楽鳴らしたりできるわけだ。

プロンプトや確認ダイアログ等もコールバックメソッドが呼ばれるため、自動化ができるということだ。


好評なら続く・・・かも

2011-06-14

[]JavaFX 2.0ベータバグ その2

今回はCanvasを使ってみる。

        <script type="text/javascript">
            function paint1(){
                var canvas = document.getElementById("screen");
                var ctx = canvas.getContext('2d');
                ctx.fillStyle = "rgb(255,0,0)";
                ctx.fillRect(0, 0, 512, 384);
            }
            function paint2(){
                var canvas = document.getElementById("screen");
                var ctx = canvas.getContext('2d');
                ctx.fillStyle = "rgb(0,255,0)";
                ctx.fillRect(64, 64, 64, 64);
                ctx.fillRect(256, 256, 64, 64);
            }
        </script>

ボタンが2つあってクリックするとそれぞれpaint1、paint2を実行する。

paint1、paint2を順番にクリックするとFirefox4では以下のようになる。他のブラウザでも同じ。

http://shin.cside.com/diary/2011/0614-01.png

しかし、WebViewだと以下のようになる。

http://shin.cside.com/diary/2011/0614-02.png

2つの四角が収まる1つの範囲、つまりリペイントの範囲が背景色で塗りつぶされているようだ。

これは厳しい。リペイント周りはほかにもバグあるかも。


キーボード入力周りもバグあると思うけど、簡単なコード書いてみたらうまく再現できなかった。むぅ。

[]洗脳教育

http://bizmakoto.jp/makoto/articles/1106/09/news014.html

行政訴訟はがんばれとしか。

ただ、気になった点がひとつ。

言い換えると、原子力発電に反対する活動家の多くは、政府与党の政策であれば何であっても反対ばかり唱えている人々だったのです。彼らの多くは、1955年以降の日本政治における日本社会党日本共産党の支持者に典型的な、政治的に言えば少数的グループでした。そして、原発反対派の多くは「科学的にリーズナブル(合理的)な意見を述べたい」というより、「政治的な活動をしたい」と思っていた。その人々は政府与党の政策を批判することが目的だったので、とにかくどんな理由でもいいから批判の根拠を探し出して、「政府の政策が間違っている」と述べる傾向があったと私は考えていました。

 彼ら、昔から原子力発電の反対を唱えてきた人々によると、日米安全保障条約の締結と自衛隊の存在は憲法違反ですし、国連PKO活動への自衛隊派遣もまた憲法違反ということですし、市場における規制の緩和は常に弱者を切り捨てる策で、国際経済における農業貿易の自由化は貧しい農村の軽視であって、消費税の導入はアッパークラスの優遇にほかならないので、許さないと結論付けられてきました。「このようにいつも現実性を無視して政治的意見を主張している人々の意見は、耳を傾ける価値のないものだ」と私は考えていたのです。

あまりにもひどすぎる。完全に洗脳されてたんだね。もしかしていまのの若者はこの洗脳教育受けてたのかなと心配になってしまった。


最終処分方法が確定していない時点でみかけの安い電気の価格とかすべて詐欺そのものだし、何か問題があっても民間企業がコストを削減するために危険な状態に「わざと」するとか、あまりの金額が動くドル箱のためどんなに危険であっても現場レベルで廃炉を決定できないなど、このへんは子供でも知っていそうな内容だと思うんだけど。

ほかにも原発は必ず安全だから地元では避難訓練もしないし、ヨウ素剤を近くの家庭に配布していないとか、あまりに対応が幼稚すぎる。お粗末過ぎる。


ただ、何かがあったときおそらく国レベルで解決する方法があると自分は思っていた。現実はそれはなく、無線操作できるロボットすら持っていなかったことに驚いた。そんな危険な状態にはならないのでいらないといって、わざわざお高い値段だして開発したロボットを捨てていたのだ。

税金の無駄遣いだし、その多額の税金をもって運営されている原発の電気価格はみせかけ。もし他の発電方法に同様の金額が渡されていたらすさまじい発展を遂げていたかもしれない。もちろん、そういった場合、そっちが利権がらみでずぶずぶになっているだろうけど、少なくとも死人や体を壊す人がたくさんでたり、避難して自分の生まれ育った地を捨てなければならない、生きているうちに戻ることはかなわないという状況にはなりにくいだろう。


自殺者も何人か出ている。東電殺人者であるという事実はこの後歴史にどう描かれるんか。

2011-06-13

[]JavaFX 2.0ベータバグ

JWebPaneがバグ大量っぽい。

非常に複雑なJavascriptもきちんと動いていてすごいと思ったのだが(GoogleMapsやGWTのような複雑なヤツも問題なく動く)できているのだが、肝心のブラウザレンダリングを反映したり、キー入力周りのハンドリングなどに不具合が多い感じ。

まずはかるく、5分ですぐにぶつかるバグを。

よこのスクロールバーがうまく描画できない。

http://shin.cside.com/diary/2011/0613-01.png

スクロールバーそのものはこの場所に存在していて動かしたりできる。たまにレンダリングされることもある。

http://shin.cside.com/diary/2011/0613-02.png

レイアウトマネージャーが悪いかと最初思ったが、何を選択しても同じ結果に。上はVBOX使ってる。

2011-06-12

[]3DS 6月のヴァーチャルコンソール追加

3DSバーチャルコンソール、6月分が追加されてた。

ゲームボーイ

ゲームボーイカラー


なぜ最初の段階で一緒に発表しなかったのだろう。

目玉はクイックスゼルダの伝説夢を見る島DX。まさかはやばやとカラーがくるとは思わなかった。

基本、古臭くてボリュームも期待できないミニゲームみたいなのは300円、一般的なゲームボーイ用ソフトは400円、ゲームボーイカラーが600円という感じか。

かこむん蛇とかカーブノアとかでないかなぁ。あとは残像がきつくて遊ぶのがきついようなヤツとか。

[]東電は神様のように振舞った

http://sankei.jp.msn.com/world/news/110611/erp11061120230007-n1.htm

指摘っていろんなところからたくさんされてたのね。しかし、それをことごとく無視すると。

利益を求める営利企業が「もしも」に関して対策を意識して削ってきたのは当たり前なんだろうなぁ。原子力も安全基準を真っ当なものにしようとすると実はコストが太陽光並みらしいしね。

2011-06-11

[]ここはどうぐや

とりあえず軽く実装。

http://shin.cside.com/diary/2011/0611-01.png

道具は各キャラクターが8つまでもてるようにする。レトロ風RPGなのだから今風の道具共通なんてやってはいけない。共通にしないからこそDQ3の賢者の石のような強力なアイテムも運用可能なのだ。誰でもつかえるとなったらこんなアイテムは使いにくい。

キャラクターが道具を持つことによって購入時にも誰が持つかどうかの選択肢を入れないといけない。けど、まだいれてない。売却時だけ実装したけど。武器屋防具屋もそれを入れないといけない。


便利にはしないといいつつ、売却時の価格は常に表示していたり。あと、売ってもよいかの確認ウインドウも入れたほうがいいかもしれないな。このへんは明日あたりで。

2011-06-08

[][]任天堂 Wii U発表

UはYouとかけてるんですかね。MiiとかWiiとかそれぞれイメージする英語に近くしているとか。

TVなしでも遊べるということはリビングのTVの争奪戦はやはりきびしかったということだろう。ハイビジョン名TVが普及しているとはいえ、アナログ名TVと違い難題もある家は少ないだろう。それでいてリビングという場所は大事なのでは本体は移動させたくない。


今回のハードは1080pということで全うなHD機種。スペックは公開されていないけど、それなりにあがるだろう。


この機種のポイントは4つか。

1つ目は海外で重要だが、TVなしで遊べるということで、HDなTVがない地域にも売り出すことが可能ということ。TVに依存していては売れる地域が限られてしまうだろうし。発展途上国ではあそべるゲーム機として携帯機を勝手に輸入しているというのと無縁ではないはず。

2つ目は後ろめたいが国内向け。宗教上の理由でWiiを買わなかった人。Wiiのソフトも遊べるため、いまさらWiiはかえないが、Wiiで魅力的なタイトルを遊んでみたかった人。

3つ目はデバイスを多彩にすることによるコピー防止。よくある入力デバイスだけではPCで絵実行されて終わり。

4つ目は手元で使えるため、電子書籍等の使い方ができる。タッチペンを搭載したのもDS成功体験からだろうし、このサイズはipadなどパッド系が大量に出てきていてそちらに権勢または合流するためのもの。DS塗り絵も成功してたしね。なにより、目が悪いお年寄りや、目があんまりよくないながらもめがねをかけてない人(は結構多いと思う)が遊びやすくなるだろう。LLというあのでかいのが支持されていることも影響しているか。


などと妄想してみる。てもとにマイクとスピーカーがあるようなので、入力デバイスを考えると隠し玉でDSのソフトを遊べるというのもあるきもする。

2011-06-05

[]ならびかた

隊列の並び替えを実装。

http://shin.cside.com/diary/2011/0605-01.png

隊列の前ほど敵の攻撃を受けやすいという実装予定。前列は戦士や勇者、僧侶のような固めな職業にしよう。

とかそういうの。


小粒だけど、今回はこんなところ。リファクタリングもしつつ。

2011-06-03

[]3DSゲームボーイのソフトが300円から遊べる!

http://www.nintendo.co.jp/3ds/eshop/vc/index.html

やっと3DSVCがきます。

ロンチのラインナップは以下の通り。

くにおくんでてたのしらなかった・・・。

初代カービィだいすきです。このころはまだマイナーですけどね。

マリオランドも層ですけど、初代のGBは残像がすさまじく、スクロールするようなアクション系がきついんですよね。それがくっきりすると違う感覚で遊べそう。STGとかきつかったもんねぇ。ツインビーとかなにがなんだか。サガもフィールド移動がきつかった。

残像が大幅に減るのはかなり後で出たゲームボーイポケットをまつことになります。


聖剣伝説待ってる人も多そうですね。



ほかにもエキサイトバイクも無料で落とせるようです。

http://www.nintendo.co.jp/3ds/eshop/software/index.html

3DSウェアとか名前ついてるかと思ったのですが、ダウンロードソフトとしかかかれてないですね。難しそうな単語は省いたということかな。

ほかにも大量のラインナップのDSiウェアが遊べるようになるのもかなり大きいです。

Wiiウェアより一回り価格が安く、手軽に遊べるのがそろってます。

これでやっと邪聖剣ネクロマンサーの続編が遊べます。