Java

fastutilの注意点

WEB+DB PRESS Vol.60で、「fastutilとsuxによる大規模データ処理」と題して、プリミティブコレクションライブラリのfastutilと、簡潔データ構造ライブラリのsuxを紹介する記事を書きました。WEB+DB PRESS Vol.60作者: まつもとゆきひろ,西尾泰和,山田憲晋,城…

S2GWT的なもの

GWTのRPCでは、com.google.gwt.user.client.rpc.RemoteServiceを継承したサービスインタフェースとその対になる非同期インタフェース、そしてcom.google.gwt.user.server.rpc.RemoteServiceServletを継承したサービス実装の3点セットが必要になります。GWTア…

WEB+DB PRESSで『つながるJava』の連載を始めました

WEB+DB PRESS Vol.57作者: 今村謙之,遠藤正仁,浜本階生,uupaa,増井俊之,大沢和宏,伊藤直也,村瀬大輔,塙与志夫,中島拓,中島聡,角田直行,cho45,はまちや2,新里祐教,塚田翔也,ミック,関治之,れさく,加藤幹生,原悠,WEB+DB PRESS編集部出版社/メーカー: 技術評論…

Java Cloud Meeting Tokyo 2010: 『Google Web Toolkitのすすめ』発表資料

Java Cloud Meeting Tokyo 2010で、『Google Web Toolkitのすすめ』と題して発表を行いました。スタッフの皆さま、お疲れ様でした。発表中に、Google PluginでGWTアプリをGAEにデプロイする予定だったのですが、Eclipseで謎のエラーが出てしまいました。そこ…

Solr 1.3と1.4の検索パフォーマンス比較

TopHatenarとBlogopolisでは現在、全文検索用途にApache Solr 1.3を使っていますが、去年11月にSolr 1.4がリリースされたので、近いうちに1.4に移行したいと思っています。そこで、1.3と1.4の検索パフォーマンスにどのくらい差があるのか、TopHatenarで収集…

JCaptchaによる画像認証

先日、TopHatenarが全ドメイン対応したことで、任意のブログURLを登録できるようになりましたが、そこで画像認証が必要だったので、JCaptchaというライブラリを使用しました。JCaptcha overviewJavaのCAPTCHAライブラリには他にもSimpleCaptchaなどあります…

グラフ理論ライブラリのJGraphTを使ってみた

JGraphTJGraphTは、Javaのグラフライブラリです。グラフの描画ではなく、グラフ理論のモデルとアルゴリズムの方にフォーカスしています。とても使いやすかったので、紹介してみます。 無向グラフ UndirectedGraph<String, DefaultEdge> g = new SimpleGraph<String, DefaultEdge>( DefaultEdge.class); </string,></string,>…

Lucene 2.4とLucene 2.0の検索速度比較

前回、Lucene 2.4と2.0でインデックス構築速度の比較をしたので、ついでに検索速度の比較もしてみました。前回のエントリーでは、以下のようにインデックスを作成しました。 データ: 日本語版Wikipediaのダンプから先頭20万記事 インデックス形式: 記事タイ…

Lucene 2.4とLucene 2.0のインデックス構築速度比較

Luceneは、こちらのベンチマークなどを見る限り、Sennaなど他の全文検索エンジンに比べて相当遅いとされているようです。上記ページのベンチマークではLucene 2.0が使われています。僕も数年前にLucene 2.0を使ったことがあって、それ以降はLuceneに触れてい…

アプレットを開いたユーザに拒絶感を与えない方法

Javaアプレットが載ったHTMLページを開くと、こういうスプラッシュ画像が出てきます。この画像が目に入った瞬間、反射的にページを閉じる習慣が身に付いてしまっているユーザは、僕を含めて多いと思います。Java SE 6 Update 10でサポートされたimageパラメ…

外部イテレータと内部イテレータ

Javaでコレクションクラスを作ってそのイテレータを実装する場合、Javaにはクロージャが無いので、外部イテレータを使うことがほとんどだと思います。例えばint値のコレクションとイテレータを自作するときは、まず以下のようにIntIteratorとIntIterableを用…

エラーを含んだXMLをルーズにパースする

各種ブログのRSSのようなWeb上のXMLリソースをdom4jやJDOMなどで読み込むと、パースに失敗するケースがとても多いです。というのも、こういうXMLは基本的に、validであることをあまり期待できないからです(エスケープ漏れがあったり、"

RDBMSをKey-Value Storageとして使う場合のパフォーマンス計測(H2, MySQL編)

Tokyo Cabinet, QDBM, Lux IOなど、DBM同士のパフォーマンス比較はWebで良く見かけるのですが、MySQLのような普通のRDBMSをKey-Value Storage的に使用した場合、DBMと比べてどれくらい差が付くものなのかイメージが湧かなかったので、実際に計測してみました…

整数の中で立っているビット数を求める方法

訂正: 整数中に立っているビット数ではなく、立っているビットの最左位置を求める方法でした。 java.util.BitSetのソース中で、整数中に立っているビット数を数えるメソッドが面白かったので載せてみます。二分探索をベタ書きしていて、最大6回の比較でビッ…

JDBCドライバまとめ

各種RDBMSのJDBCドライバがダウンロードできるURLと、ドライバのクラス名と、POMのdependency(現時点の最新バージョン)を表にしてみました。Mavenのセントラルリポジトリからドライバが見つからなかった場合は、POMの欄をN/Aにしてあります。 DB / Downloa…

JNLPファイルの作成を支援してくれるAntタスク

http://sourceforge.net/projects/ovanttasks上記のOrangevolt Ant Tasksは、17個の便利なAntタスクが詰め合わせになってるんですが、その中にjnlpタスクというものがあります。 Java Web StartアプリはJARファイルの数が多くなりがちで、それを1つ1つJNLPフ…

連番ファイル名のソート順

Swing製のアプリで、ファイルダイアログでファイル名が正しくソートされないという報告を受け確認すると、JFileChooserの表示がこんな風になってました。文字コード順で言ったら正しいのはこっちだけど、エクスプローラでもMacのFinderでも、連番ファイルは…

可変長引数ではAuto Unboxingが優先される?

メソッドがプリミティブ型の引数 / Object型の引数でオーバーロードされている そのメソッドに数値ラッパ型のオブジェクトを渡す という場合、渡された数値オブジェクトがUnboxingされるよりも先に、Objectであることが優先されて、Object引数の方のメソッド…

OpenNLP Toolsによる英語の解析: 構文解析編

以前のエントリで、Javaの自然言語処理ライブラリOpenNLP Toolsを使った英語の品詞解析(POS tagging)について書いたんですが、構文解析についても方法を知りたがっている方が多いようなので、手順を簡単に説明します。1. OpenNLP Toolsのダウンロード以下…

暗黙型変換の適用条件

以下のプログラムの出力結果がどうなるか、自信を持って答えられませんでした。 public class Test { static void print(short n) { System.out.println("short"); } static void print(int n) { System.out.println("int"); } static void print(float n) {…

高速なPNG出力ライブラリ: ObjectPlanet PngEncoder

TopHatenarとHatenarMapsとEatSpotは、PNGエンコード処理がボトルネックという共通点があります(HatenarMapsの場合は、システム利用時のボトルネックではないですが)。TopHatenarのブログパーツユーザが増えてきたこともあって、この3つのサービスで使って…

主要コレクションライブラリの機能比較

Javaで有名と思われる、以下のコレクション拡張ライブラリを比較してみました。 Commons Collections Google Collections Library Commons Primitives Trove fastutil Commons Collections Google Collections Library Commons Primitives Trove fastutil Ve…

XStreamを利用して簡単にディープコピー

XStreamで書き出し→読み込みすれば、どんなオブジェクトでもディープコピーできるんだなあ。 import com.thoughtworks.xstream.XStream; public class CopyUtils { public static <T> T deepCopy(T obj) { XStream xs = new XStream(); return (T) xs.fromXML(x</t>…

Javaで動的型付け的なこと

Javaは静的型付け言語とはいえ、リフレクションがあるので、その気になれば動的型付けだって簡単に実現できるよなと思いました。例えば、以下のようにユーティリティクラスを書いておけば、 package test; public class Dynamic { private static final Map<Class<?>,</class<?>…

Javaのランタイムコアrt.jarの内訳

JREのコアになるrt.jarが、Javaのバージョンアップと共にどんどん大きくなってることに気付きました。JRE 1.4.2の時点でrt.jarは22MBなんですが、1.5.0になると33MB、1.6.0だと42MBに増えています。その内訳がどうなっているのか、HDD使用状況分析ツールのOv…

abstractなSerializableクラスにもserialVersionUIDが必要な理由

EclipseではserialVersionUIDが明示されていないSerializableなクラスに警告が表示されますが、今までは具象クラスのみが対象でした。Eclipse 3.4ではそのポリシーが変わって、クラスがabstractな場合にも警告が表示されるようになっています。Eclipseのこれ…

Javaのメソッドコード長制限とLLへの影響

Javaには、1つのメソッドのコード長が65535バイトを超えられないという制限があり、64KB以上のメソッドを含むコードはコンパイルエラーになります。ということは、JVM上で動くLLにも、この制限が課される可能性があるわけです。例えば以下のコード、Pythonで…

Javaでコレクションクロージャメソッドっぽいこと

Rubyのselectとかcollectみたいなものって、Javaでも匿名クラスで一応実現できるけど、それだとどうしても冗長になります。クロージャの部分にLLの力を借りたらすっきりするかなと思って、Java+Groovy版のコレクションクロージャメソッドを書いてみました。J…

JavaからWindowsのレジストリ項目やショートカットを作成できるRoxes Win32 for Java

JavaでWindowsのショートカット(lnkファイル)を作成したかったので、この前のエントリに書いたNLinkを使おうかと思ったんですが、この辺のShell機能にはCOMが絡んでくるので、Win32APIを使うにしても結構面倒臭い。ショートカットをメソッド一発で作成でき…

SenよりGoSenの方が遅い?

形態素解析エンジンSenを改良したGoSenというライブラリがあります。 Significantly improved text analysis speed http://itadaki.org/wiki/index.php/GoSen と書いてあるので、どの程度速くなったのかなと思ってSenと比べてみたんですが、逆にSenより遅い…