プログラムdeタマゴ

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

2010-01-01から1年間の記事一覧

Gupta-Sproullアルゴリズムの実装

ちょっと実装を行わないといけないことになったので、実装してみました。言語はJAVAです。今回、アルゴリズムで使用した色のテーブルはGURGE.COMのAdam Doppelt氏が作成したのを利用しました。読みやすさ優先の為、高速動作とかは特に考えていません。また、…

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

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

二つの数の正負が同じかどうかを判定する

二数a,bの正負が一致しているかどうかは数学的にはで与えられる。 しかし、プログラム的にはこれではうまくいかないことがある。aとbの絶対値がそれなりに大きな値の時だと、オーバーフローを起こしてしまうからだ。 バグってたところがそれが原因だった。う…

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さんの古い記事が検索トップ…

正数以上の最小の2のべき乗数を探す

JOGLのテクスチャで、ある値以上の最小の2^nを求める必要が出た。私が直感的に実装したソースは以下。 int c;//目的の値。 int ret;//結果を格納 if(c<2)ret=c; else{ int shift=16; int add=8; for(int i=0;i<4;i++){ if(c != 1 << shift){ shift =(c > 1 <…

KeyEventを全部横取りする

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

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

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

NoClassDefFoundErrorを回避する。

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

Perl6登場

Perl 6登場、"Rakudo Star" ようやく出る出る詐欺のPerl6が登場したようです。強力な構文を備えていますが、まぁ、流石に普及はないでしょう。どんな事が出来るかはここが分かりやすい それで Perl 6 の何がすごいんだと思ったあなた。ここがすごいんです。P…

StrictMath?Math?何が違うんだ?

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

Harmony

こんな記事がありました Harmony スケッチ風のお絵描きができるオンラインペイントHarmonyというHTML5のCanvasを利用したペイントソフトです。 ちょっと変わった書き味のペイントソフト。線を引いた近くにそれまでに引いた線があると、そことの間にラインを…

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型の配列が出来た様…

Eclipse 3.6 Helios ついに出た!

というわけで、今日から一般にもEclipse3.6Heliosが公開されました。 ダウンロードページ 主な新しい機能とかは いよいよEclipse3.6(Helios)がやってくる。 ■[Eclipse]Eclipse 3.6 Helios × Subversive こちらの記事を参照されるとよさげ。 そこまで私がHeli…

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

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

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

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

BufferedImageについて

さて、今日はBufferedImageについて。BufferedImageはデータをビット単位で我々が直接弄ることの出来るImage。 BufferedImageの作り方は表示用なら、コンポーネント内から BufferedImage img = getGraphicsConfiguration().createCompatibleImage(width,heig…

間違いを正しく間違って描画する

@Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f)); g2.drawString("俺に任せろー!バリバリー!",0,20); } …

scala弄ってみた

scalaはJAVAで実装されたJAVAVM上で動く関数型言語です。こちらのサイトからダウンロードして適当なフォルダに展開、そこにパスを通せばOKです。(JAVAがあれば)インストール不要なので手軽に弄れるのも魅力。 簡単な使い方はここでも参照して下さいな。 さ…

親コンポーネントは描画されるとは限らない

ところで、先ほどの間違ったソースを実行すると結果の様に表示されるのは一瞬で、次からはこんな風にきちんと描画されていたりしませんか? (何故か正しく描画される間違ったソースの図) 場合によっては最初からこう描画されるかも知れません。 何故なんで…

Graphicsの設定を弄るべからず

今日はJAVA内部にまで踏み込んだ画面描写についての濃い内容を書こうかなと思っています。Synth Look and Feelとかについては私も分からないので触れません。 結構濃い内容だから投稿を数回に分けると思ふ。JOGLについては、数ヶ月後に悶々書き並べることに…

JAVAで透明ウィンドウ

Java7でやり方が変わりました。記事 この記事はJRE1.6での内容になります。 知らなかった。JAVAのJFrameは半透明にならないってずっと思っていたよ。 上の図はJDialog(を拡張したクラス)を半透明で表示したところです。 シンプルだけど格好よくね?ただ、W…

Java 末尾再帰VS普通の再帰

ちょっと気になったんで、実験してみた。Lispの方言の一つschemeを使い始めてからは、基本的に私は再帰呼び出しの書き方が末尾再帰で書く様になったんだけど、よくよく思い返してみればJavaでデバッグするときにスタック破棄されてない様な……。スタックが破…

JavaAppletとかで、データをブラウザ上に残しておく方法

しぃペインターとかってさ、ブラウザを戻るとかやってももう一回戻ってきたらデータ残ってたりするじゃん?Javaはappletにしろ、JavaWebStartにしろ、セキュリティーを保持するためにローカルディスクなんかにはアクセスできない様になっている。要するに、…

1の個数を数えよう

数値の中にある1の数の数え方について。プログラム中でint型を32個のboolean型が入った物だと考えてプログラムを組むところがあって、trueの数を数える必要があったのでこんな記事を書くことにしました。数える値がaの時int sum=0;for(int i=0;i<32;i++) sum…

超今更なことで、あ〜るぇ〜?

そろそろ、JAVAをさわり初めて一年がたとうとしている今日この頃、何と私ようやく無名配列なる物を知りましたwww恥ずかしいっ( >д<)というのも、プログラム中で、変数を配列化して返すだけの関数を作るときpublic int get(){int a = {x,y,z};return a;}っ…