Skip to content

Java (Scala) で言語判定

Java (Scala) で言語判定 published on Java (Scala) で言語判定 へのコメントはまだありません

やりたい事

  • Java (Scala) で、ある文字列が何語(日本語、英語、など)なのかを判別する
  • 入力文字列は以下の2通り
    • ユーザーから入力された検索文字列(1単語、数文字〜数単語、数十文字)
    • 検索対象となる文章(数十単語〜数十ページ程度)
  • 対応する言語
    • 当初は日本語と英語
    • 今後は5言語程度

なぜこれをやりたいかは、以下のエントリーを参照。

Elasticsearch多言語化その2 – K blog

Continue reading Java (Scala) で言語判定

java.lang.NoClassDefFoundError: org/jdesktop/layout/GroupLayout$Group

java.lang.NoClassDefFoundError: org/jdesktop/layout/GroupLayout$Group published on java.lang.NoClassDefFoundError: org/jdesktop/layout/GroupLayout$Group へのコメントはまだありません

This is just a small personal note.

I needed a tool that can generate database specifications out of an existing database, and was trying out SchemaSpyGUI, which is a wrapper for SchemaSpy.

When I ran it, I got the following error:

$ ./schemaSpyGUI.sh  
starting SchemaSpyGUI
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/jdesktop/layout/GroupLayout$Group
        at schemaspygui.Main$1.run(Main.java:29)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:226)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:673)
        at java.awt.EventQueue.access$300(EventQueue.java:96)
        at java.awt.EventQueue$2.run(EventQueue.java:634)
        at java.awt.EventQueue$2.run(EventQueue.java:632)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:108)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:643)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
Caused by: java.lang.ClassNotFoundException: org.jdesktop.layout.GroupLayout$Group
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
        ... 15 more

I needed to add swing-layout to the class path, and the problem was resolved.

Linuxerの為のFreeBSD入門(2)

Linuxerの為のFreeBSD入門(2) published on Linuxerの為のFreeBSD入門(2) へのコメントはまだありません

前回、基本的な設定とかを行ったので、今回は必要なパッケージを入れていく。

ちなみに環境はFreeBSD 8.1

・emacs

/usr/ports/editors/emacs がそれ。ちなみにバージョンは23系。/usr/ports/editorsの下にはemacs22とemacs21というのもあり、古いバージョンを使いたい場合はそちらを使用すると良さそう。

sudo make installをすると、色々なオプションが選択できるけど、画像表示やらフォントがとかのオプションが多い。SSH経由でしか使わない人は、X関連はオフにしたい。その場合、/etc/make.confに以下の行を追加すればよい。

WITHOUT_X11=yes

Continue reading Linuxerの為のFreeBSD入門(2)

UbuntuにJava入れた

UbuntuにJava入れた published on UbuntuにJava入れた へのコメントはまだありません

■背景

Scalaを触り始めて1ヶ月位経つが、殆ど勉強が進んでいない。言い訳をすると、開発環境が整わないと勉強のスピードが上がらないタイプ。

sbtの使い方は少し分かってきたので、あとはコードを書く環境を整える必要がある。Eclipse + Scala pluginに挫折したのでEmacsのプラグインであるensimeなるものを試してみることにした。

Windowsでやってもいいけど、Emacs使いの大半はUNIX系で使ってるだろうから、Windows固有の問題とかがありそうなのでパス。じゃLinuxでと思ったが、ensimeの前提としてemacs 22か23が必要。CentOSに入っているemacsは21で、バージョンアップも面倒そうなのでUbuntuが入っているVPSを使う事にした。

で、そもそもScalaを動かすにはJavaが必要なので、UbuntuにJavaを入れる必要がある。

とまぁかなり長い前振り。

■やること

たった1行だけ…

apt-get install sun-java6-jdk

ちなみに、Javaはsun-java6-jdkと、オープンソースライセンスのopenjdk-6-jdkの2種類がある。

 環境:Ubuntu 9.0.4

Continue reading UbuntuにJava入れた

MySQL&Javaでタイムゾーンを正しく扱う

MySQL&Javaでタイムゾーンを正しく扱う published on MySQL&Javaでタイムゾーンを正しく扱う へのコメントはまだありません

タイトル通り。
色々試行錯誤したけど、結論としては
更新系のクエリーの場合

  1. JavaでDateクラスのインスタンスに正しいタイムゾーンを設定
  2. それをStatement#setObjectでセットして普通に実行するだけ

基本的にデータベース内部ではエポックからのミリ秒とかで管理してるはず。
で、SELECTクエリーの場合、ResultSet#getDateとかgetTimestampで返ってくるオブジェクトはローカルのタイムゾーンになってるので、必要に応じて適切なタイムゾーンを設定する。
基本的な事として、Dateオブジェクトに違うタイムゾーンを設定しても、内部的な時間が変更になるわけではない、はず。東京の午後1時とシンガポールの正午は内部的には同じ時間。文字列として表示した時に13:00となるか12:00となるかの違い。
慣れてしまえば、それ程難しくはないと思うけど、結構面倒。
MySQLのタイムゾーンの扱いについてはこのページが詳しい(この文書の和訳)。
JDBCドライバのオプションでタイムゾーン関係のがいくつかあるけど、試してない(マニュアルページ)。

EJBでのクラスパス

EJBでのクラスパス published on EJBでのクラスパス へのコメントはまだありません

Javaやっててclasspath関係で一度もハマった事無い人はモグリだと思う。
以前のプロジェクトでEJBを使ったときにクラスパスでちょっと不明な事があった。EJBって実体はjarファイルだけど、EJBが他の暮らすやライブラリに依存している時ってどうすればいいのだろう?
JavaHouseのこのスレッドが参考になった。

JBoss 4.0 + JBoss IDE 2.0

JBoss 4.0 + JBoss IDE 2.0 published on JBoss 4.0 + JBoss IDE 2.0 へのコメントはまだありません

今のプロジェクトでJBossを使った既存のシステムに機能追加をしてる。
結構戸惑った点があった。
1.JBoss、Eclipseってバージョンによって使える機能やフレームワークが違ったりして、Webの情報をそのまま真似するってのは中々難しい。例えば、EJB3とそれ以前の開発なんて随分違う。EJB3に慣れちゃうとXDocletですら面倒で使ってらんない。
2.Tomcatは今までボチボチ触ってたけどJBossはそれ程でもなかったし、同じ設定ファイルでも微妙に違う事があった。
3.JBossの設定は色々情報が見つかるけど、Eclipse上での開発環境の構築は情報が少なくて正直かなり手間取った。
と言うことで、いくつか気になった点をメモ書き。
とりあえず環境から
・JBoss 4.0.3 SP1
・Eclipse 3.2 (Web Tools Platform 2.0.1)
・JBoss IDE 2.0.0 Beta2
・JDK 5

Continue reading JBoss 4.0 + JBoss IDE 2.0

実行可能なjar

実行可能なjar published on 実行可能なjar へのコメントはまだありません

jarファイルをダブルクリックするだけでJavaアプリケーションを起動させるための方法。
必要な物はjarファイル内にMETA-INF/MANIFEST.MFというファイルを用意するだけ。
例えばこんな感じ。

Manifest-Version: 1.0
Main-class: tv.kazu.sample.jar.AppMain

あとはjarファイルをダブルクリックすればAppMainが実行される。
基本的な情報はきしださんのこのページとかを参考に。
さて、Javaで開発をしててclasspath関係で一度も悩んだこと無い人はいないと思う。
では上記のAppMainが他のjarファイル(以下外部jarファイルと呼ぶ)に依存しているとする。JDBCドライバーだったりLog4jだったり。その場合にはどういう解決方法があるだろうか。

Continue reading 実行可能なjar