Java

TopHatenarはRails並の軽さで作られている

TopHatenarにみる「Javaの復活」 - yvsu pron. yas Java好きな僕としては、TopHatenarが、Javaでも(Seasar2ファミリーを使えば特に)スピーディーなWeb開発ができることの実証例になれば良いなあと思っています。ただし、HOT deployが使えない場合はさすが…

JavaからWin32 APIを簡単に呼べるnlinkを使ってみた

Windowsのファイルにhidden属性を付けたかったんですが、Pure Javaではそのようなことができないので、JavaからWin32 APIを呼び出せるnlinkを使ってみたら、ものすごく簡単でした。これは便利!以下のようにするだけで使えます。 MSDNとかで、呼びたいAPIの…

EclipseでAnt設定ファイル選択ダイアログ表示を止める

EclipseでAntを実行するとき、いつ頃からか以下のような選択ダイアログが出てくるようになってしまって邪魔だったんですが、消し方が分からなくて放置してました。これ、Run -> External Tools -> Open External Tools Dialog... で消せるんですね。今日まで…

SunはもっとGUIを大事にしてほしい

SwingのJFileChooserは、OSネイティブのファイルダイアログと比べた場合、どうしても違和感が目立ちます。そこで、ファイル選択時のみ、ピンポイントでAWTを使ってみようかなと思ってjava.awt.FileDialogを調べてみたら、信じられない仕様でした。 getSelect…

JavaからWindowsのUSBデバイスにアクセス

WindowsのUSBデバイスにJavaからアクセスしたかったので、方法を調べてみました。JavaのUSBサポートってJSR-80に上がってるんですけど、Windows用のまともな実装は出ていないみたいです。JSR-80以外で情報量の多いのがjUSBですが、これもWindows向け実装がい…

POIのOOXMLサポート

今年の第二四半期に、OOXMLをサポートしたPOIが正式リリースされるようですが、諸事情で早急にxlsxファイルを読み込む必要があったので、以下のSVN branchを覗いてみました。 http://svn.apache.org/repos/asf/poi/branches/ooxml次期POIでは、OOXMLのExcel…

OGNLとMVEL

MVELはOGNLに比べて『多少』速いものだと思っていたけど、こことかここのベンチマークを見ると、多少なんてレベルではなく『圧倒的に』速い模様。新規プロジェクトで式言語を使うなら、もうMVELで決まりだろうなあ。Click Frameworkでは、内臓のOGNLをMVELに…

Genericsが邪魔

Closures and Preserving the Feel of Java このエントリの中に『Genericsは失敗だった』という話が出てきます。この『失敗』の文脈からは外れるかもしれませんが、Beans Bindingを使っていると、Genericsを邪魔に感じることが非常に多いです。Beans Binding…

JAMWikiでWikipedia記事をパースする

JAMWikiというJava版MediaWiki実装があります。以前はコンポーネント間の結合が強くて利用しづらい印象だったんですが、0.6.xからはコアエンジンが分離されたり、mavenizeされたりと使いやすくなっているようです。JAMWikiのパーサにWikipediaの記事を読ませ…

Bean Validation Early Draft Preview

JSR 303のBean ValidationにEarly Draft Previewが出たとのことで、早速目を通してみました。個人的に面白いと思った機能を挙げていきます。 Multi-valued constraints 以下の例のように、同一種類のアノテーションを配列で複数指定できるようです。 public …

java-ja第七回行ってきた

java-ja初参加しました。羽生さんやid:t_yanoさんやid:gothedistanceさんとお話しできて嬉しかったです。いろいろ面白いことが聞けたんですが、一番印象的だったのは、懇親会で羽生さんが語っていた、『日本のSIは世界一わがままな日本の顧客が相手。だから…

newInstanceできないクラスを無理やりインスタンス化する

newInstanceで汎用的にインスタンス化できないクラスがあります。例えば以下のようなクラスです。 public class HardToCreate { public HardToCreate(int code) { if (code != 123456789) { throw new IllegalArgumentException(); } } public void hello() …

JavaでWindowsアプリ

Windowsアプリ開発にVisual Studio以外の選択肢は無いと思い込んでいたけど、Javaにも Launch4jのようなexeファイルラッパ NLinkのようなネイティブリンカ があるし、 SubstanceのようなクールなL&F JIDEのようなリッチなSwingコンポーネント も揃っているか…

フレームワークと制約

インターフェースの押しつけはフレームワーク設計者のエゴだ - y-komori’s diary 2008-02-13 トラックバックをいただいて、いろいろ考えを深めることができました。文章化できるほど考えがまとまっていないので、思いつくまま箇条書きにします。 大前提とし…

POI 3.0.2で読めないExcelファイル多数

Apache POIに3.0.2-FINALが出ていたのでアップデートしてみたら、いろんなExcelファイルで読み込み失敗するようになった。OpenOfficeで保存したExcelファイルの読み込みに失敗する可能性が高い気がするけど、詳細不明なので3.0-FINALに戻した。

インターフェイスかアノテーションか、それとも規約か

フレークワークが特定の状況下でユーザクラスのインスタンスにメッセージを通知したい場合、ユーザクラスに何らかの形で「印」を付けることを強制して、どのメソッドを呼び出すのか決定する必要があります。その「印」として考えられるのは、基本的に次のい…

無引数のメソッドとGenericsの謎

public class Test { public static void main(String[] args) { String s; s = Test.<String>foo(); // (a) s = foo(); // (b) bar(Test.<String>foo()); // (c) bar(foo()); // (d) } static <T> T foo() { return null; } static void bar(String s) { } } (a)(b)(c)はコンパ</t></string></string>…

JavaBeansクラスのBeans Binding対応自動化

Beans Binding(JSR 295)でJavaBeansを監視できる条件は、クラスがPropertyChangeEventをサポートしていることです。つまり public class MyModel { private String name; public String getName() { return name; } public void setName(String name) { this…

SkipListのベンチマーク

要素の挿入、削除、ランダムアクセスが全部高速なリストを作った - kaisehのブログ上記エントリに書いたSkipListとSkipListSetのベンチマークを取ってみました。数値の単位はミリ秒、CPUはCore Duo 1.66GHzです。 タスク ArrayList LinkedList SkipList Skip…

要素の挿入、削除、ランダムアクセスが全部高速なリストを作った

スキップリスト(Skip List)は1990年に発表された比較的新しいアルゴリズムで、要素の挿入や削除、検索を平衡木と同等のパフォーマンスで実行可能なリスト構造です。Skip Listは連結リストの多層構成になっています。路線に例えると、最下層のリンクは各駅…

主要コレクションクラスの内部メモリ消費量一覧

Javaの主要コレクションクラスの内部メモリ消費量を、一覧表にまとめてみました。メモリ消費量がコレクションの要素数に対して線形増加すると見なした場合の、実測を基にした推定値です。表を見ると、TroveのTHashMapとTHashSetのメモリ効率が非常に優秀だと…

形態素解析するときは未知語の扱いに注意

僕が全文検索システムを作るときに使っている方法は、 Senでテキストを形態素に分解して、FULLTEXTインデックスを張ったMySQLのMyISAMテーブルに突っ込む。 LuceneにJapaneseAnalyzer(Sen)を組み合わせて使う。 のどちらかです。MySQL+FULLTEXTよりLuceneの…

JWNLを使ってJavaからWordNetにアクセスする方法のメモ

OpenNLPに続いて、NativeChecker関連ネタを書いてみます。NativeCheckerでは、WordNetをオンメモリ展開して、スペルミスチェックと類義語検索に使っています。ここで利用しているのがJWNLです。僕がJavaのWordNetライブラリをいくつか試した中では、JWNLの出…

バリデーションメッセージのラベル部を国際化

OValのようなアノテーションベースのバリデーションを採用する場合、ラベル部(「○○の入力は必須です」の○○の部分)の国際化をどうするかという話の続き。gettext風に、プロパティファイルを自動生成(または差分マージ)するツールを作る方法が現実的かなあ…

OVal - the object validation framework

OVal - the object validation framework for Java™ 5 or later –これ、いいなあ。こんな感じで使えそう。 DTOにアノテーションを書いておく。 Logicに渡された引数の中にDTOがあれば、自動的にバリデーションを実行するInterceptorを用意。S2JSFの場合、エ…

JavaのWikiパーサ実装

Javaで書かれたWikiパーサ実装を探しています。これまで試した海外のプロダクトは以下。 JAMWiki CMSと密結合していますが、何とかパーサだけ取り出して使えなくもないという感じです。 Acegi Securityに依存しているので、Acegi SecurityとSpring Framework…

BufferedImageを画素加工処理付きで高速描画

イメージに明度の変更など加工処理を加えた上で高速転送する方法の備忘録。 まずBufferedImageのgetRaster().getDataBuffer()メソッドを呼び、イメージのラスタデータを取得します。次に、そのラスタ配列要素から順に画素を取り出し、演算を行っていきます。…

OpenNLP Toolsによる英語の品詞解析

英文校正サイト [NativeChecker] では、入力した英文の各単語の品詞表示を行っています。 この品詞解析処理には、自然言語処理プロジェクト群であるOpenNLP中のOpenNLP Toolsを使っています。 OpenNLP Toolsによる品詞分析について、Web上に日本語の資料があ…