プログラムdeタマゴ

nodamushiの著作物は、文章、画像、プログラムにかかわらず全てUnlicenseです

JAVA

パッケージ内のクラスを取得する

JavaCompilerからJavaFileManagerを取得するやり方が簡単だ。 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); JavaFileManager fm = compiler.getStandardFileManager( new DiagnosticCollector<JavaFileObject>(), null, null); Set<JavaFileObject.Kind> kind = new HashSet<JavaFileObject.Kind>();</javafileobject.kind></javafileobject.kind></javafileobject>…

気をつけろ、javax.swing.TimerはEDTで動くぞ!

どーもアプリケーションの応答が思わぬところで悪くなる。原因を探っていたら、なんとjavax.swing.Timerが原因だった。 javax.swing.Timerはjava.lang.Timerに比べてシンプルで使いやすいので、よく使っていたのだが、なんと、javax.swing.TimerはEDT(Event …

Java7で透明ウィンドウ、非矩形ウィンドウの作り方が変わってた。

驚きですね。なんと、 window.setBackground(new Color(0,0,0,0)); で背景が透明なウィンドウが作れるようになってました。jre1.6ならcom.sun.awt.AWTUtilitiesのsetWindowOpaqueでなんかなぁ、的な感じで透過していたのに。そのほか、ウィンドウ全体の不透…

複合長方形を長方形で分割

どうも、一ヶ月ぶりです。月に一度の更新は目指していますが、書く内容がない(もしくは、書くのが面倒すぎる)という状況だったので放置してました。いや、JavaFX2.0(beta)でiTunesとかmacとかで画像を表示するときみたいな画像ビューアを作ったのをネタに…

AffinTransform

いっつも分からなくなるのでメモ。 A = A×Bにしたいとき A.concatenate(B) A = B ×Aにしたいとき A.preConcatenate(B) Rθをθ(rad)の回転行列とする A = A×Rθとしたい場合 A.rotate(θ) A=Rθ×Aが欲しいとき 手段無し。 (A.preConcatenate(AffineTransform.get…

高速フーリエ変換(FFT)の解説。実装編

前回のソース2を再帰呼び出しからループに変換してみる。例えば前回のように2097152個のデータを突っ込むと21階層もの再帰呼び出しになる。したがって、これをループに変換するってのは重要なことだ。

高速フーリエ変換(FFT)の解説。理論編

私はあまり画像を波長空間でフィルタリングとか言うことをやらないので、実のところ、今までFFTどころか離散フーリエ変換(DFT)すらしたこと無かった。というわけで、ちょっと調べてみたのでまとめてみようと思う。かなり長い記事になるよ。

画像のデータを格納する型は何が良い?

私は画像処理屋なのですが、ハードウェアに頼らず、Java側で画像処理をするとき漠然と「8bitならint型に詰め込む、16bitならlong型に詰め込む」とやってきていました。それってどれほど正しいのか?というわけで、ふいに思い立ったので計ってみた。 後述する…

読み込み中の画像を表示させる

↑というのがググっても出てこなかったのでやってみた。 Toolkit.createImageやApplet.getImageなどで画像を読み込むと非同期で読み込んでくれる。 この読み込み状況はGraphics.drawImageやImage.getWidthなどを呼び出して、ImageObserverを登録することで逐…

パッケージ外では実装できないインターフェースがあったらなぁ

インターフェースが無修飾関数を宣言できない点はJAVAのいけてない点の一つだと思っている。 もちろん、インターフェースは宣言された関数が実装されていることを保証するための物だから、そのインターフェースで宣言された関数は全てに見えなくてはならない…

GeneralPathとPathIteratorの諸注意

去年の10月に書いた記事マウスをShape(PathIterator)の形にドラッグ(移動)させようでNI-Lab.さんの記事をdisったら、まさか本人さんからうんこ喰らえやゴルァと………、すいません、嘘です 別にCloseするときに移動しなくても正しい結果出てね〜、と言われ…

いつかこうなったらいいなぁ…

コメントを残してきて、ふと思ったのでメモ。 Javaにはオートボクシングという機能があります。 私的にはJavaの失敗の一つだと思っていますけど。 オートボクシングは非常に中途半端なのです。 私はプリミティブか、ラッパークラスのどちらかを無くすべきだ…

クラスのFQCNな文字列-別解

id:ttmmrrさんがFQCNな文字列の取得法という実に真っ当なやり方をd:id:ttmmrr:20110220で解説なさっていたので、実はもっと簡単に邪道な方法で取得できるんじゃね?と FQCNはFully Qualified Class Nameだそうです。はじめてこの単語は知りました。 ちなみに…

オブジェクト指向初心者にありがちな後に後悔しない為の7の事inJAVA

私はプログラム歴2年と半、オブジェクト指向プログラミング(以下OOPと略記)歴1年とちょっとというかなり浅いプログラマーである。 私が一年前、OOP初心者時に書いたプログラム(1万行ぐらい)を現在誠意修正作業中なのだが、全く持って読めた物ではない。 こ…

final半端主義

final原理主義id:takahashikzn:20110122という記事があったので、私もだぁ〜と記事にしたくなった。 私も多々final宣言をする。 その中でも一番重要なメリットは、『意図していない代入を自動的にチェックできる』ということ。 賛成です。が、私はあまりこう…

バイナリーデータから画像の種類を判別する

というの↑が意外にもググっても出てこなかったので、ヘッダだけから種類を調べる簡易関数を作ってみた。 ImageType.java 対応フォーマットは JPEG PNG GIF BMP TIFF PICT です。関数は 関数 説明 getFormat(byte[] b) b:バイナリデータ getFormat(InputStrea…

AtomicIntegerを追ってみた

Atomic〜とか中身でsynchronizedしてるだけじゃね〜(´・∀・`) なんて思ってた。で、試す機会が来た。 import java.util.concurrent.atomic.AtomicInteger; public class Test{ //走らせるスレッドの数 static final int thread = 1000; //1つのスレッドの中で…

JAVA for-each文でカウント

ふらふらネットサーフィン(死語)をしているとひしだま氏のイテレーターでループするときに何度目かのループか?を知りたいときにどうするか、というトピックでこう書いてあった。 Java駄目メモ パターン3: これなら、素直にfor-each構文に変換することも可…

JAVAの嘘本当 配列メモリの確保は速い?

配列なんかで、JAVAはそもそもJVMで確保したメモリを配置するだけなんだから、メモリの確保は速いんだー、どんどん生成して使えば良いんだー、という意見を時々見る。というわけで、調べてみた。当方CPUはi5の3.2GHz,メモリはDDR3の何かだ。細かいことは忘れ…

JavaでGOTOライク

指定したところへ一気に飛べるgoto文はプログラミングにおいて禁じ手とされている。可読性が下がるからだ。 そのため、Javaにははじめからgoto文というものは存在しない しかし、こんな場合はどうだろう。読みにくい。 if(〜){ boolean b=true;//以降の処理…

java.nioのBufferは速い?

java.nioのByteBufferについてちょっと調べてみた。 ByteBufferにはダイレクトバッファーと非ダイレクトバッファーの2種類がある。 ダイレクトバッファーはJVMの外の領域にメモリを確保し、非ダイレクトバッファーはメモリをJVM内に取る。 話ではダイレクト…

マウスをShape(PathIterator)の形にドラッグ(移動)させよう

今日はShape等の形に合わせてマウスを動かす話です。 マウスを複雑な形に動かしたり、ドラッグさせるにはShapeを使うのが簡単です。 あと、わざわざ記事にしたのは [Java]PathIterator を Point2D 配列へ変換する というNI-Lab’.sさんの古い記事が検索トップ…

KeyEventを全部横取りする

今更だけども、ようやくKeyEventをフォーカスのあるコンポーネントに関係なくアプレットでも奪取する方法が分かったので、メモ。 Toolkitを使って奪取する方法なら知ってたんだけど、これはアプレットじゃ使えないから困ってた。 KeyEventを横取りするにはKe…

Enum型でシングルトンパターン

ちょっと見つけたので、メモ。 クラスの唯一のオブジェクトを作り、それ以外は作らせたくない場面というのは多々ある。そういうときに一般的に使われているのはシングルトンパターンという物だが、enumを使うとそれの代貸となる。 以下のように、値を一つし…

NoClassDefFoundErrorを回避する。

NoClassDefFoundErrorは基本的に起こしてはいけないのだが、ライブラリがインストールされているかどうかに依存していてどうしても起きるかどうか分からないと言うこともある。それを回避する話です。 NoClassDefFoundErrorは以下の3つの読み込めないクラス…

StrictMath?Math?何が違うんだ?

Mathのソースコードを見てみるとほとんどがreturn StrictMath.******となっている…… え?Mathっているのこれ? 実というと、MathとStrictMathの違いは結果が環境依存か否か、という所にある。 Mathの関数は環境に依存した計算をする。実行環境に高速に演算を…

Generic配列の作り方(追記的なあれ)

前回のは引き値を増やさずに何とか配列を作れないか、とやってみた結果です。 どうしてもジェネリック型の配列を作りたいときはTのClassを渡すことで実装します。 import java.lang.reflect.Array; public class Generic { @SuppressWarnings("unchecked") p…

JAVAでジェネリック型の配列を作って返したい(´・ω・`)

JAVAのジェネリクスではジェネリック型の配列は作れないけど、何となく作りたい場面があった。 良くあるのはObject型で作っておいて、後で返すときとかにキャストという方法。でも嫌ジャン。 T t = (T) new Object[obj.length]; で、一見T型の配列が出来た様…

JAVAのコンパイラを信用するな

追記 なんかディスられてたのでお返事しましたいやぁ……。今日初めて驚愕の事実を知ったわ。 昨日の検証で分散処理できそうな所はコア数分に分散した方が早い、という事が分かったから画像拡大回転処理の部分もコア数分に分散処理する様にしたんですよ。(sca…

JAVAの並列処理を調べてみた

単純に別な処理をしながら、本処理に関係ないから次の処理にも移りたい、というぐらいのことでしかThreadを使ったことがなかった。 せっかく並列処理が大きな力を生む波シミュレートプログラムを作ったので、並列処理がどんな効果があるのか実際に調べてみた…