Java

携帯アプリにおけるマルチスレッディング(2)

自分が組んだ、マルチスレッドでの振動プログラム。 class Library extends Canvas implements Runnable{ private int vibTime; private boolean bVibrate = false; public void vibrate( int time ){ vibTime = time; if( vibTime > 0 ){ if( !bVibrate ){ …

携帯アプリにおけるマルチスレッディング

携帯は、アプリの容量制限がきついので、出来る限り容量を少なくするようにコーディングする必要がありますけど、その方法の一つとして、クラスの数を減らすというのがあります。 自分の場合は基本的に、IApplicationやMIDletクラスを継承した実行クラス、Ca…

高速矩形交差判定

自分はいつも、 private boolean isCross(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2) { return ((x1 + w1 > x2) && (x1 < x2 + w2) && (y1 + h1 > y2) && (y1 < y2 + h2)); } こうやって書いていたんですが、これより速い判定方法が…

JoGa

Javaの圧縮ツールに、こんなのが出来たらしい。 http://www.nq4.de/ 今度どれぐらい圧縮できるか実験してみます。

Javaの左シフト

Javaでビット操作をするマクロを書いていたんだけど、すげーことに気が付いた。 1これの結果、なんだと思いますか? 答えは、1です。 どうやら、シフトでintの上限を超えるとロールしてしまうらしい(;´Д`) つまり、 1は2になるし、 1は8になった(;´Д…

ProGuardバッチファイル

@echo off set pro_jar="c:\proguard3.2\lib\proguard.jar" set injar=test set outjar=test2 set app_base_class=CApp set doja_dir=C:\DOJA30 set library1=%doja_dir%\lib\classes.zip set library2=%doja_dir%\lib\doja_classes.zip echo -injars %injar…

drawImageの内部クリッピング

最近気が付いたんですが、 g.drawImage( img , 10000 , 10000 , Graphics.LEFT | Graphics.TOP ); こういった、明らかにスクリーンの外にあると思われる画像を描画したとします。 普通に考えると、drawImage()の内部で、転送前にクリッピングを行い、転送す…

キー入力

Winのゲームみたいに、秒間60フレームとかなら、毎フレームごとにキーの更新をすれば事足りるが、携帯だとそうはいかない。 なんか、「携帯は速度が遅いからキーの反応が悪いのは仕方の無いことだ」とか言ってくる奴がいた。 そんな訳はない。 キーの入力…

Vector

CLDCにはVectorがあることを最近知りました。 で、ちょっと使ってみようと思ったのだけれど、こいつ、インデックスアクセスが出来ないみたい(;´Д`) setするときにはインデックスを指定出来るのに、取得はインデックスからだと不可能という訳の分からない…

スーパークラスのコンストラクタ呼び出し

Javaであれば、 class Base{ private int hoge; private Base(){} //privateにする public Base( int hoge ){ this.hoge = hoge; } } class Inherited extends Base{ public Inherited( int hoge ){ super( hoge ); } } これだけでいいのですけど、C++で、 c…

斜め移動

なんか、等速で斜め移動をする為には、sin,cosを使わなければならないと言ってくる人がいました。 その人のやろうとしている斜め移動は、移動元と移動先が(移動中は)固定されているので、斜めの距離を速度で割った値が移動回数なので、Xの距離とYの距離を…

new

あるbyte配列に文字列データが格納されていて、その文字列のパスにDataOutputStreamからデータを書き込む場合。 DataOutputStream dos = new DataOutputStream( new FileOutputStream( new File( new String( buf ) ) ) ) ; こういうのを見ると(;´Д`)ハァハ…

J2SE programing(2)

自分が使ってるバージョンは1.4なんですけど、これのImageIO.read()が微妙な動作をします(;´Д`) Image img = ImageIO.read( new File( "sample.png" ) ); これ、なぜかArrayIndexOutOfBoundsExceptionが出ることがあります。 しかも、必ず出るというわけ…

J2SE programing

ちょっとしたエディタを作成する為に、J2SEを使って組んでみました。 でもこれAPI多すぎ(;´Д`) 確かに綺麗に分けられてるとは思いますが、1つ1つが独立しているので、あるAPIから目的のAPIを見つけることが非常に困難になってます。 例えば、Imageクラ…

MIDPでの画像の切り出し方(2)

前回、コメントで、 # kanoke 『一部の機種でseClipが即座に適応されませんよ。確認した中ではA5301Tかな。』# melpon 『それだとちょっと困るので、ちょっと実験してみました。 setClip()が即座に適応されないということは、一瞬だけクリップする前の画面…

MIDPでの画像の切り出し方

protected void drawImage( Graphics g , int dstX , int dstY , Image src , int srcX , int srcY , int width , int height ){ int x = g.getClipX(); int y = g.getClipY(); int w = g.getClipWidth(); int h = g.getClipHeight(); g.setClip( dstX , dst…

にゅー開発環境(7)

バッチファイルでフォルダの作成は、 mkdir folderとすれば、folderという名前のフォルダが作成されます。 もし、同名のフォルダが存在する場合は、 サブディレクトリまたはファイル folder は既に存在します。とエラー表示されますが、エラー終了はせず、次…

にゅー開発環境(6)

昨日は、 set a=%1 set a=%a:^&=^^^^^^^&% set a=%a:"=% echo AppParam = %a% というバッチファイルを使って、AppParamに&が付いていても構わないようなバッチファイルを作りました。 で、Makefile側からこいつをcallすればいいだけなのですけど、こんなこと…

にゅー開発環境(5)

DoCoMoのADF(.jamファイル)には、AppParamというのがあり、このパラメータには、任意の文字列を設定することが出来ます。 例えば、 AppParam = hogeApp http://.../check.php?id=7&appname=と書かれていた場合、スペースで区切られた、2つのパラメータが…

にゅー開発環境(4)

まず、make.exeを実行するバッチファイルを、1つに纏めてしまいます。 REM DoJa20.bat set kind=DOJA20 set execution=all call make.bat /k %kind% /e %execution%REM DoJa30.bat set kind=DOJA30 set execution=all call make.bat /k %kind% /e %executio…

にゅー開発環境(3)

次は、Makefileを呼び出す側について考えてみます。 BCCのmake.exeを使用するので、当然、 C:\borland\bcc55\bin\make.exe allと書いたバッチファイルを用意すれば、自動的にMakefileが呼ばれ、all:と書いたところからコンパイルをしてくれます。 しかし、こ…

にゅー開発環境(2)

この新しい環境を作る目的は、パソを変えても、簡単にコンパイルができるようにすることです。 今までのMakefileはこんな感じになっていました。 JAVA_HOME = C:\jdk1.3.1_15 JAVA = $(JAVA_HOME)\bin\java.exe JAVAC = $(JAVA_HOME)\bin\javac.exe BORLAND …

にゅー開発環境

現在、新しい開発環境を構築中です。 社内の全員の環境を、この環境にして、どのパソに移動させても簡単に動作させられるようにすることが目的らしいです。 で、その開発環境の設定やら新しい発見やらを書いていこうと思います。 DoCoMoのADF(.jamファイル…

コンパイルメモ

Javaでコンパイルする際、エラーが多すぎて、上の方のエラーが見えなくなる場合があります。 これを何とかファイルに出力できないかなぁと探してみたところ、どうやら、oldjavac.exeを使って、コンパイルオプションに -J-Djavac.pipe.output=true と付けるこ…

JAVAの最適化(7)

今日は例から最適化をしてみます。 public void foo( int a , int b ){ int i,j,k; for( i = 0 ; i < a ; i++ ){ for( j = 0 ; j < b ; j++ ){ for( k = 0 ; k < 10 ; k++ ){ something( i , j , k ); } } } } という関数をいろいろと弄ってみましょう。 ま…

JAVAの最適化(6)

90度回転アルゴリズムを、もう少し考えてみました。 0 1 2 3 4 5 これを、90度回転させると、 4 2 0 5 3 1 になるのだけれども、左下の4から上方向に移動していっているので、計算が少し重くなっています。 これを、Y反転させてやると、 4 5 2 3 0 1 と…

プリプロセッサ(__FILE__と__LINE__)

VCのプリプロセッサには、__FILE__と__LINE__があるのだけど、これがまた便利。 #define test() System.out.println( "check : " + __FILE__ + " : " + __LINE__ ) test(); こうすれば、test()は、 System.out.println( "check : " + "source\\test.cpp" + "…

JAVAの最適化(5)

昨日の回転アルゴリズム、めちゃめちゃ遅い。 実機で計測してみると、新しいイメージをnewで作った場合と比べて、10倍もの時間がかかってます(;´Д`) もちろん最適化はしてます。ただ純粋に計算回数が多いだけみたいですね。 ガーベジコレクタを動作させ…

JAVAの最適化(4)

今日は90度回転のアルゴリズムについて考えてみます。 通常であれば、新しいイメージをnewして、そこに回転した画像を置いていきます。 public rotate90( ){ byte[] newbuf = new byte[ width * height ]; int sp = width * height - width; int spi = 0; …

プリプロセッサ(#)(2)

ついでにこんなのも考えてみました #define arVar(s) \ for( int arvar = 0 ; arvar int[] aHoge = { 10 , 20 , 30 , 40 , 50 }; arVar(aHoge); 配列表示バージョンヽ(´ー`)ノ