Java

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

senでwiki辞書を使う

以下で紹介されてる方法でできるらしい
http://d.hatena.ne.jp/nodchip/20090309/1236615706

形態素解析

これまで、形態素解析にcabochaを使ってたわけですが、javaでMecabを実装したとかいうのがあったみたいで…。
http://ultimania.org/sen/

つーかYahoo!がそういうのしてくれるAPIを公開していたらしい。アンテナは大きく広げておかないといかんもんだなぁ…
http://developer.yahoo.co.jp/webapi/jlp/da/v1/parse.html
下のサイトはサンプル公開してる。
http://www.nilab.info/zurazure2/001036.html

形態素解析の辞書

ChasenとMecabの辞書として使えるものだそうな。公開されてる精度がよすぎてびっくり。
http://www.tokuteicorpus.jp/dist/

Java使う人にはとてもよい


Stringの文字エンコーディング

普通にプログラムするには大して問題にならないファイル名の文字コード。
webでデータ公開するとかなるとなんかこれをよくミスる。

で、見つけたよさげなサイト。参考に
http://hp.vector.co.jp/authors/VA017148/java/encoding.html

デーモンスレッド

使えれば使う


GC overhead limit exceeded

調べてみたら、ガベージコレクションに時間かかりすぎやから止まった、ってことらしい。
ガベージコレクション自体はメモリの自動解放とかしてくれるけど、メモリ使用量が多いとかでスワップが多くなったりすると処理がかかるみたいだ。
で、その時間がかかりすぎるとエラー吐いて止まるってのが上のメッセージらしい。
解決にはメモリをしっかり確保すればいいってのは当たり前だが、どうしても頻発する場合などには実行時の引数に以下のものを加えるといい。
-XX:-UseGCOverheadLimit


MySQLと連携

javaのコードからMySQLを使う場合に、JDBCドライバが必要になる。
これはMySQLのサイトからダウンロードができる。
Javaとの連携なので、downloadの中の「Connector/J」をダウンロードする。
ダウンロードしたファイルを解凍すると、いろいろ入っているが、その中にjarがある。
名前は、「mysql-connector-java-5.0.8-bin.jar」だ。
これのクラスパスを通せば、あとはjavaのファイルの中で適切なコマンドを使っていけばいい。


MySQLからの日本語が文字化け


まだいろいろ試していないもののメモ。

文字化けなので文字コードに問題があることは明白。
この場合にするべきは、各所での文字コードの設定。

「MySQLのデフォルト設定」
「javaコード内でのurl指定時」

くらいだが、これでも文字化けする場合があるのだ。
これはMySQLのバージョンを下げればいいこともあるらしい。
この問題があるのは、4.1.7でらしい。これをバージョンダウンすれば解消されるとさ。

またちょっとしたコードの書き換えでもいけるらしい。
str = new String(str.getBytes("ISO-8859-1"), "JISAutoDetect");
みたまんま、コード変換するみたいだ。これを取得した値に対して行ってやると解消されるとか。
でも、バージョンを下げるとこんなもんは必要ないみたい。


javaをコマンドラインで

サーバーなどでjavaを動かすために覚えた。
しかし、コマンドを詳しく覚えているはずもなく…

パスを通す

.bashrcにjarファイルのパスをかたっぱしから通すように指定。
これぐらい重くもなんともないだろ!
実際に使ってるスクリプトは以下
jars=`ls /home/hiroyoshi/system/jar`
for jar in ${jars[@]}
do
export CLASSPATH=$CLASSPATH:/home/hiroyoshi/system/jar/$jar
done
やってることは簡単で、jarのファイル名を配列で全部とってきて、それにパスを当てはめてexportしてるだけ。
これでディレクトリjarにjarを追加するだけで、ログインするときに毎回読み込んでくれる。
もうパスを通す必要はない!便利!

コンパイル

使ったのは実際には以下のコマンド
javac -sourcepath XX/src -d XX/bin/ XX/src*/*.java
XXはディレクトリ名(プロジェクト名とか)
javac:javaのコンパイルコマンド
-sourcepath:ソースファイルの場所指定オプション
-d:クラスファイルの出力場所指定オプション
これで、srcに保存されいるパッケージでまとめられているjavaソースファイルをきちんとコンパイルできる。
また、このコンパイル時にbin内にパッケージも作られる。
ただし、srcとbinは事前に作っておく必要があるのは言うまでもない。

実行

ちょっと泥臭い方法になってしまったというか、メモるほどの事ではないが一応。
java -Xmx1g main/Main
これをbinで行う。ほんとはプロジェクトのホームで実行したかったけど仕方ない…。
ファイルなどを生成するのでも、プログラム内でディレクトリ指定すればbin内には作らなくて済むので。


RSSリーダー

研究でブログを扱っているので作ってみたところのメモ。
ほとんどコピペやけど、プログラムってそんなもん。

使ってるライブラリ

ROME:本プログラムのキモ。RSSを扱うためのメソッドが揃ってるみたい。
基本はこのROMEで処理します。依存とかの関係で
  • ROME-Fetcher
  • JDOM
も必要です。JDOMはxmlを扱うライブラリで、これがないとROMEは動かない。

それぞれのライブラリはバイナリをダウンロードする。
JDOMは圧縮形式でダウンロードでき、解凍するとディレクトリができる。
この中からjdom.jarを見つけ出す。

サンプル
public class RSSReader {

 @SuppressWarnings("unchecked")
 public static void main(String[] args) {

   //rdfでもxmlでもOK
   String url = "http://blog.livedoor.com/xml/article_ranking.rdf";

  try {

  URL feedUrl = new URL(url);
  SyndFeedInput input = new SyndFeedInput();
  SyndFeed feed = input.build(new XmlReader(feedUrl.openStream()));

  ArrayList<SyndEntry> entries = (ArrayList<SyndEntry>) feed.getEntries();

  System.out.println("Blog Title:" + feed.getTitle());
  System.out.println("=======================");

  Iterator<SyndEntry> it = entries.iterator();
  SyndEntry entry;
  while(it.hasNext()) {
  entry = it.next();
  System.out.println("Title:" + entry.getTitle());
  System.out.println("Date:" + entry.getPublishedDate());
  System.out.println("Link:" + entry.getLink());
  System.out.println("URI:" + entry.getUri());
  System.out.println("Description:" + entry.getDescription().getValue());
  System.out.println("---------------------");
  }

  System.out.println("size = " + entries.size());

  } catch (FeedException e) {
  e.printStackTrace();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
}


正規表現

すごく便利な正規表現。でもすごくわかりにくい正規表現。
そんな正規表現のメモ。

(特にJavaで使えるというものです)


全角記号

[^ぁ-んァ-ヴ一-龠0-90-9a-zA-Zー〜、]
総当たりではあるが、使えるのでよし。
意味は「ひらがなとかカタカナとか以外」

半角記号

\p{Punct}
javaのAPIで定義されているものそのまま。
ただし、使うときにはこれをこのまま書くだけだと、「エスケープシーケンスは…」と怒られるので、こいつをエスケープしてやる。
つまり、
line = line.replaceAll("\\p{Punct}","");
ってすると、line内の半角記号は一掃される。

半角カタカナ

[。-゚+]
そのまま文字コードにのっとったもの。つまり、意味は
ー。「」、・ヲァィゥェォャュョッタアイウエオカキクケコサシスセソミチツテトナニヌネノハヒフヘホマムメモヤユヨラリルレロワン゙゚
です。


また、正規表現の[a-z]のような「-」(ハイフン)の範囲表現はASCIIコードに準じたものをなっている。(参考URL参照)
例えば、コード表によると「!」から「/」を続けて範囲指定([!-/])できるが、「?」までする([!-?])と数字も選択されてしまう。


ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。