動画『メイキング・オブ・HatenarMaps』を作ってみた

ここのところ、はてな村勢力地図『HatenarMaps』のデバッグのために、地図生成途中の計算結果を画像ファイルにトレースしていました。その画像をぱたぱたアニメみたいにして眺めていたら、領土がうねうね動いて面白いなと思ったので、少し気合いを入れてムー…

可変長引数では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) {…

MacのNetBeansは不安定?

この前参加させていただいたWicket勉強会で、id:t_yanoさんがMacでライブコーディング中にNetBeansがフリーズしていましたが、僕のMacの環境でもNetBeans 6.1が頻繁に固まります。Javaファイルをダブルクリックで開くとき、応答しなくなることが多いみたいで…

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

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

飲食店地図検索サイト『EatSpot』をiPhone対応にしました

EatSpotは、任意の地点を中心として「半径○○メートル以内」の口コミ上位の飲食店検索ができるので、外出中にiPhoneを使って、今いる場所の近くの美味しい店を探すのには最適だろうと思っていました。ただ、PC用のEatSpotをそのままiPhoneで使っても重くて不…

iPhoneの強制終了とアドエスのハングアップ

iPhoneのSafariは本当に頻繁に落ちるけど、アプリが強制終了するだけでOSは生きているので、単にSafariを再起動すれば済む話です。iPhoneを買う前はアドエスでOperaを使っていたけど、この時は酷かった。ちょっと重いサイトを閲覧すると、すぐOS自体がハング…

飲食店地図検索サイト『EatSpot』をリニューアルしました

去年1月に価格.comのコンテストで最優秀賞をいただいたあと、放置気味になっていた飲食店検索サイトのEatSpotですが、今回久々に更新しましたのでお知らせします。レストラン検索サイト [EatSpot]EatSpotは、食べログ.comの飲食店DBを、HeartRailsの路線DBと…

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

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

iPhone買った

朝から並んで、16GBホワイト購入できました!一通り使って気になった点は、Safariがアドエス並に良く落ちること。重いサイトを開くと、かなりの確率で強制終了します。で、Safariを再起動すると、落ちたページを勝手に復帰するんですが、mixiだと足あとが2回…

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>…

LDRのAPIがFastladderでも使える件 / TopHatenarをFastladder対応に

Count API - Live Dwango Reader (旧livedoor Reader)まとめサイト上記ページにあるように、以下のようなURLでLDRのフィード購読者数を取得できるんですが、 http://rpc.reader.livedoor.com/count?feedlink=http://d.hatena.ne.jp/kaiseh/rss => 105試し…

Javaで動的型付け的なこと

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

Think ITにTopHatenarとHatenarMapsの記事を執筆しました

TopHatenarとHatenarMapsのDB! | Think IT(シンクイット)データベース特集の連載第1回として、TopHatenarとHatenarMapsのDB周りについて記事を書かせていただきました。初執筆です!両アプリケーションのテーブル設計と、S2JDBCによるDBアクセス手法を紹…

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

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

Cocoaで最も名前が長いメソッドベスト10

ここのところObjective-Cを勉強中なんですが、まず最初にびっくりしたのがメソッド名の長さです。Objective-Cでは、メソッドの呼び出し時に引数の名前を明示するので、「このメソッドの2番目の引数は何の意味だっけ?」などと悩む必要がなくなる反面、メソッ…

うまい棒を大量に買い占めてみた

うまい棒の工場が火事になったそうです。この工場では、たこ焼き味を製造していたとのこと。今後、たこ焼き味が品不足になったら大変なので、そうなる前に近所のコンビニで買い占めてきました。本当に一箇所で買い占めてしまうと他のお客さんがかわいそうな…

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より遅い…

頑張って作ります

うわ、Seasar-user MLでid:koichikさんがS2Swingに言及している!(大汗S2SwingをSandbox申請したのは5ヶ月近くも前なのに、仕様についてあれこれ悩んでいるうちに時間が経ってしまい、未だリリースに至っていません。本当に情けないです。最近になって、よう…

TopHatenarのブックマークレット

閲覧中のはてなダイアリーユーザのTopHatenarページに移動するブックマークレットです。 javascript:if(location.href.indexOf('http://d.hatena.ne.jp/')==0){location.href='http://tophatenar.com/view/'+location.href.replace(/http:\/\/d\.hatena\.ne\…

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

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

マウスイベントを親コントロールに透過させる

SwingコンポーネントはsetOpaque(false)で背景を透明にできますが、その場合でもマウスイベントはコントロール領域内で捕捉されます。マウスイベントも透過させたい場合は、以下のようにすれば良いようです。これを応用すれば、不定形のコントロールを作って…

HatenarMaps更新しました

HatenarMapsのユーザ抜け問題と、不当な面積比率の問題を修正しました。この修正の影響と、毎日はてブが更新されていく影響で、クラスタの位置や所属が変化しています。せっかくネタ湾とか地名を付けていただいたのに、申し訳ないです…。はてな村の厳しい世…

HatenarMapsの外形はDQ3のランシールです

HatenarMapsに想像以上の反響を頂けて嬉しいです。はてな村の外形に「オーストラリア?」というコメントが多かったですけど、ドラクエ3のランシールだと気付いてくれた方は少なかったですね。ランシール自体、オーストラリアを真似た大陸ではありますが。ラ…

はてな村の地図『HatenarMaps』を公開しました

『はてな村』のアナロジーを本当に地図にできたら面白いだろうなと思って、週末を潰して作ってみました。TopHatenarが蓄積しているDBを一部活用したサービスになっています。 Blogopolis このサービスを簡単に説明すると、はてなダイアリーのユーザに、獲得…