Java

言語が思考を制限する

Javaのアノテーションは元々インタフェースの糖衣構文であり、例えば@Hogeというアノテーションは以下のようなJavaソースコードとしてコンパイルされる。 interface Hoge extends Annotation {} であればアノテーションも継承により型階層を構成できれば良い…

久しぶりにJava6動かした

AndroidプロジェクトであってもJavaSDKと互換性のあるクラスをJUnitを使ってテストすることができる。 無論Androidのクラスを使っていないことが条件だが、対象のテストクラスを選択して 「実行>2 JUnitテスト」で起動すると以下のように「優先ランチャーの…

GoogleはJavaOne 2010をキャンセルする

ジョシュア・ブロックが投稿している。 "So we’re sad to announce that we won't be able to present at JavaOne this year." An update on JavaOne - Google Code Blog 常識的に考えて、自分たちを訴えた会社が主催するイベントに出席する(させる)わけない…

今度はおまえだ

オラクル、「Android」によるJavaの特許侵害でグーグルを提訴 - 企業情報 - ZDNet Japan私が最初にAndroidアプリケーションに触れた時、まず思ったのは「JavaのようでJavaじゃないというけど、これってSunに対して(Oracleに対して)大丈夫なの?」だった。 Dal…

柳の下にどじょうはいるか

GoogleはOracleのパテント訴訟を根拠レスと一蹴, オープンソースいじめの悪行と呼ぶ今し方原文を読んでいたので邦訳記事は凄く助かるなぁ。Oracleはライセンスで金を取ることがもう限界に来ていることを理解しているに違いない。でもそれに拘るしかないんだ…

#define ORACLE _T_ECLIPSE("Oracle")

Eclipse と Java 6u21 の問題 - infoQ/jp ->source :Eclipse and Java 6u21 problems - infoQ企業名という、変わるはずのない?文字列で重要なVMパラメタ(MaxPermSize)の設定を行っていることが原因で、最新のVMでは起動に失敗するという話。 まさか、Javaか…

愚痴

ご存じCalendarクラスの月の仕様。 Calendar cal = Calendar.getInstance(); int month = cal.get(Calendar.MONTH) + 1;. //月は0オリジン(0∼11が返ってくるので+1する) こうやってコメントしていても、暫くすると忘れて結局加算するのを忘れる。本当に嫌な…

Helios

Eclipse Helios Annual Release Train Has Arrived Eclipse DownloadsEclipseのメジャーバージョンアップである3.6(Helios)が一般にリリースされた。 私の場合、現在はAndroidの開発ができれば良い最小構成の環境で良いので、Helios本体以外は Subversive 2.…

生誕15年

Happy 15th! On a New Road25日でJava生誕15年だったんだ。 長いような、短いような。感慨深いな。一つの言語が長きに渡って使われ続けること、元の形をシンプルに保ち続けることがどれだけ困難なことなのかが解る15年だった。かなりの時間をJavaのコードと…

ZXing

ZXing ("Zebra Crossing")ZXingはクロスプラットホームで動作するオープンソースのバーコードイメージ処理ライブラリィ。 1D/2D barcodeをサポートしており、普通の用途で使う分にはほぼこれで間違いがない完成度だ。特にAndroidで使う場合は、配布されてい…

祭日判定

CalendarViewでは日本で使用する場合においてのみ、日本独自の祭日が判るように描画したい。例の如く、最初はカレンダーを見ながら祭日を棚卸しして、自分でこつこつ作ろうと思ったのだが止めた。祭日判定のロジックといえばここだろう。 AddinBox(祝日マク…

Beans Validation Source Code

アノテーションだけならJavadoc見ながら書いても良いのだが、できれば既に誰かが書いたコードを手本としたいところ。 幸いにも実装は既にいろいろな所で手に入るが、最も完成度が高いのは恐らくはHibernateのだろう。Hibernate Validator - JBoss CommunityJ…

AndroidのためのValidation

本格的な開発に向けてデータバインドの戦略が決まったので、バリデーションの仕組みも考えておかなくては。JSR 303: Bean Validation元々バリデーションの仕組みはJava/Swing用、.NET C#/Windows Forms用と共用してきた使い慣れたものがあるので、それを再利…

ジェネリクスなリストから配列に変換する

以前に日記でも採り上げたことのある、Predicateを使うFindAllのJava版だがAndroid環境に移した所、コンパイルが通らない。 findAll (Java6版) public interface IPredicate { boolean evaluate(T input); } public static final T findAll(final T array, I…

ParaNamer

Paranamer - IntroductionthoughtworksのParanamerはJavaのメソッド(コンストラクタ)のパラメタ名を取得するためのライブラリィ。 リフレクションでメソッド(コンストラクタ)パラメタの個数と型は取得できるものの、パラメタの名前は取得できない(ランタイム…

Dedexer

Dedexer user's manualこの博多弁のような名のDedexerはDalvikVMで使用されているDEX形式の中間コードを逆アセンブルするためのソフトウェア。 Dedexer自体全てJavaで書かれているので、DEX形式ファイルのフォーマットをJavaで操作する良い手本となるし、DEX…

AndroidとJavaBeans

Android SDKはJavaBeansをサポートしていない。JavaにおけるJavaBeansとは再利用可能なソフトウェアコンポーネントを書く際の規約であり、仕様や規格ではない。なのでJavaBeansに準拠していなくてもそれは大したことではないと考えるだろうが、そうでも無い…

思わぬ所でバグ発覚

Java 6 Update 18(jump先がSunではなくOracleのロゴになっているのが....)早速アップデートしてみたが、いきなりアプリケーションが例外を吐くようになってしまった。箇所は今回のアップデートで変更の対象になっているStAX。 XMLStreamReader reader = fact…

Java 6 Update 18

infoq Sun Releases Java 6 Update 18 With Significant Performance Improvements and Windows 7 Support久々に気合いが入っているアップデートだな。 特に目を見張るのがNUMA(Non Uniform Memory Access)アーキテクチャ上での最適化だろう。あと、 More ga…

XmlResourceParserにおける属性値の読み込み

Android SDKでXMLリソースを読み込むために使用しているプル・パーサ(XmlResourceParser)だが、XML属性の読み込み結果が予想と違い困惑している。 <constraint value="[\u0000-\u001F\u007F]"/>このように記述されているXML要素を読込む際、属性valueの値をダンプした結果だが XMLStreamReader(Java6 StA</constraint>…

邪魔者扱い?

Eclipse(3.5)を複数起動した場合に、IMEによる日本語入力のモード(カナ入力)が最後に起動したEclipseしか有効にならない事に気がついた。1. Eclipse 起動 (インスタンスAとする) カナ入力で日本語入力開始 2. Eclipse 起動 (インスタンスBとする)こちらも日…

ちぐはぐ

JSDK1.6を使用して開発していると、当然ながらコンパイル時にはチェックできないんで、こりゃあデフォルトのJSDKは1.5に変えないと駄目かもしれん。 Eclipseからプロジェクト固有のJREとしてJSDK1.5を指定したが、するとインタフェースに付いている@Override…

未検査のキャスト

JSDK1.4互換で開発していた頃は気がつかなかったが、Java6で総称型にキャストするとこの警告が出る。 SoftReference soft_ref = (SoftReference)this.hash.get(key); 型の安全性VからSoftReferenceへの型キャスト Javaお得意のコンパイル時の安全な型チェッ…

JNAが欲しい

Androidアプリケーションが動いている下で、プラットホームは抽象度の高い順に アプリケーションフレームワーク 各種オープンソースライブラリ + Android ランタイム(Dalvik VM) Linux カーネル の3層で構成されており、アプリケーションフレームワークの層…

オーバーエンジニアリング

Railsを使って既存のJavaアプリケーションを書き直しているのだが、当時自分たちでで書いたプログラムに対して標題の言葉が浮かんでしまう。当時、既にEJB(EJB1.1)に見切りをつけて独自のDAO(今のように立派なものではなくハッシュに属性を格納しただけのシ…

Ganymede(Eclipse3.4)下で実行するJVMでレジストリキーのオープンに失敗する

早速移行したGanymedeだが、奇妙な現象に遭遇している。担当しているシステム中にはプリファレンスストア(java.util.prefs.Preferences)を読み書きする初期処理であるのだが、こいつのキーの読込に失敗するのである。 Caused by: java.lang.SecurityExceptio…

エウロパからガニメデへ

久しぶりにJavaネタ(というかEclipseネタか)別途インストールした最新のTortoiseSVNとSubversiveがコンフリクトを起こしているのか、Europa(Eclipse 3.3)でSVNリポジトリとの同期に失敗するようになったのでSubversiveを更新したのだが、旧版とメニューが重…

Java7でこないもの

Java 7 Update from Mark Reinhold at Devoxx Javalobby The featues not in 7 (some of them, anyway the list is actually infinite) Closures - No consensus around single proposal Reified generics 1st class properties Operator overloading BigDec…

Java SE 6 Update 12

jdk6 Java SE 6 Updates Early Access JavaSE6u12、待望の64ビットプラグインとWindows 2008対応 エンタープライズ マイコミジャーナル64ビットJavaプラグイン対応っての感慨深いなあ。

Subversive+SVN Kit+Proxy認証=NG

会社のネットワークの変更でSVNリポジトリに接続する際にもプロキシを介する必要が出てきたので、Eclipse SubversiveプラグインからSVNのロケーションプロパティを変更。 これで良いはずなのだが、上手くいかない。繋がったり繋がらなかったり不安定だ。Wind…