Java
WEB+DB PRESS Vol.60で、「fastutilとsuxによる大規模データ処理」と題して、プリミティブコレクションライブラリのfastutilと、簡潔データ構造ライブラリのsuxを紹介する記事を書きました。WEB+DB PRESS Vol.60作者: まつもとゆきひろ,西尾泰和,山田憲晋,城…
GWTのRPCでは、com.google.gwt.user.client.rpc.RemoteServiceを継承したサービスインタフェースとその対になる非同期インタフェース、そしてcom.google.gwt.user.server.rpc.RemoteServiceServletを継承したサービス実装の3点セットが必要になります。GWTア…
WEB+DB PRESS Vol.57作者: 今村謙之,遠藤正仁,浜本階生,uupaa,増井俊之,大沢和宏,伊藤直也,村瀬大輔,塙与志夫,中島拓,中島聡,角田直行,cho45,はまちや2,新里祐教,塚田翔也,ミック,関治之,れさく,加藤幹生,原悠,WEB+DB PRESS編集部出版社/メーカー: 技術評論…
Java Cloud Meeting Tokyo 2010で、『Google Web Toolkitのすすめ』と題して発表を行いました。スタッフの皆さま、お疲れ様でした。発表中に、Google PluginでGWTアプリをGAEにデプロイする予定だったのですが、Eclipseで謎のエラーが出てしまいました。そこ…
TopHatenarとBlogopolisでは現在、全文検索用途にApache Solr 1.3を使っていますが、去年11月にSolr 1.4がリリースされたので、近いうちに1.4に移行したいと思っています。そこで、1.3と1.4の検索パフォーマンスにどのくらい差があるのか、TopHatenarで収集…
先日、TopHatenarが全ドメイン対応したことで、任意のブログURLを登録できるようになりましたが、そこで画像認証が必要だったので、JCaptchaというライブラリを使用しました。JCaptcha overviewJavaのCAPTCHAライブラリには他にもSimpleCaptchaなどあります…
JGraphTJGraphTは、Javaのグラフライブラリです。グラフの描画ではなく、グラフ理論のモデルとアルゴリズムの方にフォーカスしています。とても使いやすかったので、紹介してみます。 無向グラフ UndirectedGraph<String, DefaultEdge> g = new SimpleGraph<String, DefaultEdge>( DefaultEdge.class); </string,></string,>…
前回、Lucene 2.4と2.0でインデックス構築速度の比較をしたので、ついでに検索速度の比較もしてみました。前回のエントリーでは、以下のようにインデックスを作成しました。 データ: 日本語版Wikipediaのダンプから先頭20万記事 インデックス形式: 記事タイ…
Luceneは、こちらのベンチマークなどを見る限り、Sennaなど他の全文検索エンジンに比べて相当遅いとされているようです。上記ページのベンチマークではLucene 2.0が使われています。僕も数年前にLucene 2.0を使ったことがあって、それ以降はLuceneに触れてい…
Javaアプレットが載ったHTMLページを開くと、こういうスプラッシュ画像が出てきます。この画像が目に入った瞬間、反射的にページを閉じる習慣が身に付いてしまっているユーザは、僕を含めて多いと思います。Java SE 6 Update 10でサポートされたimageパラメ…
Javaでコレクションクラスを作ってそのイテレータを実装する場合、Javaにはクロージャが無いので、外部イテレータを使うことがほとんどだと思います。例えばint値のコレクションとイテレータを自作するときは、まず以下のようにIntIteratorとIntIterableを用…
各種ブログのRSSのようなWeb上のXMLリソースをdom4jやJDOMなどで読み込むと、パースに失敗するケースがとても多いです。というのも、こういうXMLは基本的に、validであることをあまり期待できないからです(エスケープ漏れがあったり、"
Tokyo Cabinet, QDBM, Lux IOなど、DBM同士のパフォーマンス比較はWebで良く見かけるのですが、MySQLのような普通のRDBMSをKey-Value Storage的に使用した場合、DBMと比べてどれくらい差が付くものなのかイメージが湧かなかったので、実際に計測してみました…
訂正: 整数中に立っているビット数ではなく、立っているビットの最左位置を求める方法でした。 java.util.BitSetのソース中で、整数中に立っているビット数を数えるメソッドが面白かったので載せてみます。二分探索をベタ書きしていて、最大6回の比較でビッ…
各種RDBMSのJDBCドライバがダウンロードできるURLと、ドライバのクラス名と、POMのdependency(現時点の最新バージョン)を表にしてみました。Mavenのセントラルリポジトリからドライバが見つからなかった場合は、POMの欄をN/Aにしてあります。 DB / Downloa…
http://sourceforge.net/projects/ovanttasks上記のOrangevolt Ant Tasksは、17個の便利なAntタスクが詰め合わせになってるんですが、その中にjnlpタスクというものがあります。 Java Web StartアプリはJARファイルの数が多くなりがちで、それを1つ1つJNLPフ…
Swing製のアプリで、ファイルダイアログでファイル名が正しくソートされないという報告を受け確認すると、JFileChooserの表示がこんな風になってました。文字コード順で言ったら正しいのはこっちだけど、エクスプローラでもMacのFinderでも、連番ファイルは…
メソッドがプリミティブ型の引数 / Object型の引数でオーバーロードされている そのメソッドに数値ラッパ型のオブジェクトを渡す という場合、渡された数値オブジェクトがUnboxingされるよりも先に、Objectであることが優先されて、Object引数の方のメソッド…
以前のエントリで、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) {…
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で書き出し→読み込みすれば、どんなオブジェクトでもディープコピーできるんだなあ。 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は静的型付け言語とはいえ、リフレクションがあるので、その気になれば動的型付けだって簡単に実現できるよなと思いました。例えば、以下のようにユーティリティクラスを書いておけば、 package test; public class Dynamic { private static final Map<Class<?>,</class<?>…
JREのコアになるrt.jarが、Javaのバージョンアップと共にどんどん大きくなってることに気付きました。JRE 1.4.2の時点でrt.jarは22MBなんですが、1.5.0になると33MB、1.6.0だと42MBに増えています。その内訳がどうなっているのか、HDD使用状況分析ツールのOv…
EclipseではserialVersionUIDが明示されていないSerializableなクラスに警告が表示されますが、今までは具象クラスのみが対象でした。Eclipse 3.4ではそのポリシーが変わって、クラスがabstractな場合にも警告が表示されるようになっています。Eclipseのこれ…
Javaには、1つのメソッドのコード長が65535バイトを超えられないという制限があり、64KB以上のメソッドを含むコードはコンパイルエラーになります。ということは、JVM上で動くLLにも、この制限が課される可能性があるわけです。例えば以下のコード、Pythonで…
Rubyのselectとかcollectみたいなものって、Javaでも匿名クラスで一応実現できるけど、それだとどうしても冗長になります。クロージャの部分にLLの力を借りたらすっきりするかなと思って、Java+Groovy版のコレクションクロージャメソッドを書いてみました。J…
JavaでWindowsのショートカット(lnkファイル)を作成したかったので、この前のエントリに書いたNLinkを使おうかと思ったんですが、この辺のShell機能にはCOMが絡んでくるので、Win32APIを使うにしても結構面倒臭い。ショートカットをメソッド一発で作成でき…
形態素解析エンジンSenを改良したGoSenというライブラリがあります。 Significantly improved text analysis speed http://itadaki.org/wiki/index.php/GoSen と書いてあるので、どの程度速くなったのかなと思ってSenと比べてみたんですが、逆にSenより遅い…