プログラマメモ2 - programmer no memo2

iReportで作成してjasperファイルで、UnsupportedClassVersionErrorがでた場合には。 2006/11/30

オープンソースの帳票作成ツールのJasperReports(iReport)で設定についてです。

.jasperファイルを読み込んで下記のようにUnsupportedClassVersionErrorがでる場合、iReport上でjasperファイルをコンパイルの設定を変えることで、うまくいく場合があるようです。


java.lang.UnsupportedClassVersionError: xxxxx_1164868376577_653107 (Unsupported major.minor version 49.0)


たとえば、iReportは、jdk5の環境で動作させて、jasperファイルを作成します。その作成されたjasperファイルをjdk1.4の環境で動作させる場合におきるようです。



iReport上で使用するcompilerをJava compilerではなく、JasperReports(default)を使用するといいようです。

中途半端なtipsでした。

iReport1.2.8 eclipse plugin 2006/11/28

mac osx上での動作は少し満足しないところがありますが、windows上でのiReport1.2.8のeclipseプラグインに今のところ満足しています。

eclipse上で使用する場合に、知っていたほうがよいことがらとして、iReport上でコンパイルするjasperファイルの位置がiReportのホームディレクトリになっています。

これを防ぐためには、iReport上の設定で行います。メニューのOptionsのオプションで行います。





デフォルトで編集しているjrxmlファイルのバックアップファイルが作成されます。これは、メニューのOptionsのオプションで抑制できます。



jasperreports + ireport 今後も注目していきたいオープンソースプロダクトですね。

旧ブログからの引っ越し その2 blogger(GoogleAPI) 2006/11/26
2008/04/05

旧ブログからデータを移行させる試みです。

旧ブログからgoogleApiを使用して、一気にデータを取得する方法をみつけきれなかったので、ちょっと工夫して取得してみました。
短いコードですが、ここまでたどりつくのに、時間がかかってしまいまいた。

実行すると簡単にデータを移行できました。

工夫した点:apiを利用してデータを取得する場合、取得する上限あるようにみえるの(25?)なので、時間指定(min,max)を使用して細かくデータを取得する方法をとった。

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import com.google.gdata.client.GoogleService;
import com.google.gdata.client.Query;
import com.google.gdata.data.DateTime;
import com.google.gdata.data.Entry;
import com.google.gdata.data.Feed;
import com.google.gdata.data.Person;
import com.google.gdata.util.ServiceException;

public class TestBlogger5 {

public static void main(String[] args) throws IOException, ServiceException {
newBlog(getAllEntry());
}

public static List<entry> getAllEntry() throws IOException,
ServiceException {

URL feedUrl = new URL("http://www.blogger.com/feeds/old-blog-id/posts/full");
Query query = new Query(feedUrl);
GoogleService service = new GoogleService("blogger", "getAllEntry.app");
service.setUserCredentials("blogger id", "password");

DateTime min = DateTime.parseDateTime("2005-12-31T23:59:59");
// DateTime max = DateTime.now();
DateTime max = DateTime.parseDateTime("2006-10-24T23:59:59");
List<entry> returnList = new ArrayList<entry>();
do {
query.setUpdatedMin(min);
query.setUpdatedMax(max);
Feed resultFeed = service.query(query, Feed.class);

if (!(0 <> list = resultFeed.getEntries();
for (Entry entry : list) {
// thid code need?
max = new DateTime(entry.getPublished().getValue());
System.out.println(entry.getId());
System.out.println(max);
}
returnList.addAll(list);

} while (true);
return returnList;
}

public static void newBlog(List<entry> list) throws IOException,
ServiceException {
URL postUrl = new URL("http://www.blogger.com/feeds/new-blog-id/posts/default");

GoogleService myService = new GoogleService("blogger",
"add.new.blog.app");
myService.setUserCredentials("google-id", "password");
Person author = new Person("your name", null, "google-id");

int cnt = 0;
for (Entry entry : list) {
entry.getAuthors().add(author);
Entry insertedEntry = myService.insert(postUrl, entry);
cnt += 1;
System.out.println("o_o>>" + cnt);
}
}
}


いまさらながら、apiが公開されているのは便利ですね。

旧ブログから引っ越し blogger API(google api)を使ってみました。 2006/11/25

利用しているブログサービス(blogger)がいろいろ変更があって、旧ブログ(blogger)から新ブログ(beta blogger)に移行してみました。
大きな変更は、投稿にラベルが付けれるようになりました。これは正直うれしいです。

この時点では、まだ完全にプログラマメモからのデータを移行しきれていません。


現時点で、どういうふにデータを移行したかを記しておきます。
はじめに、bloggerが全てのユーザに移行方法を提供していないので,
何か外部のツールでできないかなと考えてectoというツールを使用してみました。旧ブログからデータを取り出すことをできたのですが、どうやって新ブログにデータうつすのかで行き詰まりました。

いちいち手ではやってられないので、一括処理ができないと困ります。

次に、よくよく考えたら、blogger はAPIを公開していたはずだということで、いろいろ調べてみました。
情報源はここから、
http://code.google.com/apis/gdata/blogger.html
java用のライブラリをダウンロード

現在、bloggerはgoogleなので、google apiになっているんですね。

というわけで、旧bloogerから新bloogerに移行するためのコードをお手軽で書いてみました。

import java.io.IOException;
import java.net.URL;
import java.util.List;

import com.google.gdata.client.GoogleService;
import com.google.gdata.data.Entry;
import com.google.gdata.data.Feed;
import com.google.gdata.data.Person;
import com.google.gdata.util.ServiceException;

public class TestBlogger3 {

public static void main(String[] args) throws IOException, ServiceException {
newBlog(getFromFeed());
}

public static Feed getFromFeed() throws IOException, ServiceException {
URL feedUrl = new URL("http://www.blogger.com/feeds/xxxxblogidxxxx/posts/full");

GoogleService myService = new GoogleService("blogger", "myAppli");
myService.setUserCredentials("blogger id", "password");
Feed resultFeed = myService.getFeed(feedUrl, Feed.class);
return resultFeed;
}

public static void newBlog(Feed fromFeed) throws IOException,
ServiceException {
URL postUrl = new URL("http://www.blogger.com/feeds/blogid/posts/default");

GoogleService myService = new GoogleService("blogger",
"myAppli");
myService.setUserCredentials("google id", "password");
Person author = new Person("publisher", null, "google id");

int cnt = 0;
List list = fromFeed.getEntries();
for (Entry entry : list) {
entry.getAuthors().add(author);
Entry insertedEntry = myService.insert(postUrl, entry);
cnt += 1;
System.out.println("o_o>>" + cnt);
}

}

}

現時点で、すべての投稿を取得することができなかったので、上記のコードで完全に移行はできませんでしたが、25の投稿は移行できました。何かこの数字はAPI上の制限なのかちょっとわかりません。

ATOMとかの構造をわかると何やらhappyになれそうな感じがしました。
いまさらながら、APIを公開しているのはよいですね、web2.0って便利ですね。

フロー - Wikipedia 2006/11/25
2006/11/25

最近、どうやったら効率的に楽しく、プログラムに関わっていけるかを考えています。



プログラマでなくても、自分の関わっているタスクでフローな状態になれるかどうか、を考えてみるのはよいことではないかと思います。



フロー - Wikipedia



実は、このフロー状態になるためには、対象となるものが必ずしも自分が好きであるものではなくてもよいのではないかということに気がつきました。はじめは、いやいやだが、やりはじめると没頭してしまう、という感じのほうが、うまくいくような気がします。振り子が振れた状態からその逆に向かっていくイメージです。



プログラムに貴賤はないと思う今日この頃ですが、プログラマは自分のフローな経験を信じ邁進していきたいものですね。

[java]使わないデータ型 2006/11/25
2006/11/25

プログラムする領域によって変わると思いますが、javaにおいて、使わないプリミティブなデータ型がいくつかあります。

僕の場合は、float,shortはまず使わないです。

charは意識しては使ってないです。Stringを操作するさいに若干意識する程度です。
byteはネットワーク周り、ファイル処理とかでよく使ってます。

floatは、たまにGUI周りで、あっでてきたという程度です。

shortを使った記憶が皆無です。

参考:

Cプログラミング診断室/キャストが好き/float型対double型

[java][jasperreport][ireport][osx]eclipse pluginからの起動 2006/11/25
2006/11/25

jasperreportsは便利でいいと思う。
eclipseとiReportが分離して面倒だなぁと思っていたのだが、よくよくiReportのインストールフォルダをみると、eclipseというフォルダがあって、flashムービがあった。eclipseにプラグインをインストールする方法だった。

使い方は、はじめにiReportを起動したのちに、eclipse上のireport用のボタンを押すという手順のようだ。
あと、newでjasperreportsのファイルを作成できる。

windowsではこれでOKだったが、mac osxでこのプラグインが使えなかった。
何度やってもだめ。


何故だろうと思って、プラグインのソースをみていたら、なにやら、ローカルホストの2100ポートにアクセスしていた。

iReport側のソースをみて、
Report-1.2.8-src/src/it/businesslogic/ireport/rmi
にrmiサーバを起動する部分があった。

起動時にキックする部分は、
it.businesslogic.ireport.gui.MainFrame.java
にあった。

で、そこでの判定が、

if (MainFrame.getMainInstance().getProperties().getProperty( "enableRMIServer" ,"false").equals("true") ||
(args.get("embedded") != null && args.get("embedded").equals("true")))

とあった。

で、mac osxで実行した場合に、なにやらここを通っていなかったぽいので、
iReportの起動シェルにを動かすときに、

iReport.sh -embedded

としたら、pluginからキックすることができた。

とりあえず、osxででもプラグインからiReportを使えるようになった。


javaでコーディングする際に、windowsとmacで両方でeclipseが動こいてくれないと落ち着かないものですね。

[java]ヒープサイズはへる 2006/11/24
2006/11/25

[php]preg_split 2006/11/20
2006/11/25

普段使い慣れない言語はつらいですね。まずフロー(コーディングのいい感じ)を得るまで時間がかかります。



preg_splitはperl互換の正規表現で文字列を分割する関数です。

array preg_split ( string pattern, string subject [, int limit [, int flags]] )

patternにマッチした境界で分割した subjectの部分文字列を有する配列を返します。


だそうです。



さて

preg_split('/\s+/', $word, -1, PREG_SPLIT_NO_EMPTY);

これは何をしてくれるでしょうか?

あとで書く 2006/11/20
2006/11/25

IN BOOLEAN MODEとは何か。

ResourceSorterがない その2 2006/11/16
2006/11/25

fatjarプラグインがeclise3.3Mxで動作しない件について続き



sourceforgeのプロジェクトページをみると、誰かが、Bugとして投稿してあった。



で、 ResourceSorterクラスがないだけなら、含めたJarをつくりなおして、Eclipse3.3Mxにしてしまえば、臨時に使えない問題は解決するのではないかと考えた。

結論からいうと、動いた。

単純に、3.2のjarから ResourceSorterをとりだして、3.3Mxのjarをつくればよかった。

もちろんこの方法は、自己責任のもと、強引な方法。



使用した道具

JarPlug: Say Goodbye to File Explorer!

というのが紹介されていたので、ためしに利用してみた。

Eclipseのプラグインで、jarを解体して再構築できたりするプラグイン。



対象にしたファイル

org.eclipse.ui.ide_3.2.1.M20060915-1030.jar

org.eclipse.ui.ide_3.3.0.I20061031-2000.jar



org.eclipse.ui.ide_3.2.1.M20060915-1030.jar.$work/org/eclipse/ui/internal/ide/dialogs/ResourceSorter.class

org.eclipse.ui.ide_3.3.0.I20061031-2000.jar.$work/org/eclipse/ui/internal/ide/dialogs/



3.2.1から3.3.0にコピーして、jarを再構成する。



eclipseを再起動すればfatjarプラグインがいつもどうりに使えた。



こういうトリックって、あきらかにバッドなノウハウに入りますね。



以前使えていたが、いま使えなくなってしまって、工夫して使えるようにすると、ちょっとだけうれしいですね。でも徒労って感じもしますが。

ResourceSorterがない 2006/11/14
2006/11/25

Eclipse3.3M3

でfatjarプラグインを使用するとすると、下記のエラーが発生。

java.lang.NoClassDefFoundError: org/eclipse/ui/internal/ide/dialogs/ResourceSorter




Eclipse3.2 3.3にあがるさいに削除された模様。

org.eclipse.ui.ide_3.2.1.M20060915-1030.jar

は存在していたが、

org.eclipse.ui.ide_3.3.0.I20061031-2000.jar

にはなかった。



これってどうすればよいのだろう。Orz。

J2SE 5.0 における Java Web Start の機能拡張 2006/11/13
2006/11/25

いまさらながら、jnlp.jarはjava5から開発者向けパッケージとして提供されているのではなく、既に統合されている模様。



J2SE 5.0 における Java Web Start の機能拡張

@IT:Insider's Computer Dictionary [BTW] 2006/11/13
2006/11/25

BTW はby the way 「ところで」の略だそうです。



@IT:Insider's Computer Dictionary [BTW]

EclipseZone - Replacing JARs on the Build Path ... 2006/11/13
2006/11/25

Springの名前の起源 2006/11/12
2006/11/25

以前からDIコンテナのSpringは何故、春なのだろうと思ってました。



Interface21 Team Blog » Spring Framework: The Origins of a Project and a Name



the fact that Spring represented a fresh start after the “winter” of traditional J2EE.

Interface21 Team Blog » Spring Framework





Springという名前は個人的に好きです。

ネーミングのバックグラウンドがわかるとますますその製品が好きになりますね。

面倒なのでローカライズ版は使わない。 2006/11/12
2006/11/25

以前は、ローカライズ(メニューが日本語化)されていないとそのアプリケーションを使いませんでしたが、いま、ローカライズをまちません。というよりも、ローカライズは使いません。



ローカライズされていないばかりに、最新の機能にアクセスできないのはちょっと悲しいですね。

F3 via てんぷらメモ@はてな 2006/11/12
2006/11/25

これは将来性があると思いました。もしかして将来のjavaに統合されるのではないかしら、というと大げさでしょうか。

まだリリースされていないようです。



開発者のブログ F3

Via てんぷらメモ@はてな - F3(Form follows function): JavaのGUIプログラミングを簡単に



javascriptっぽい定義しているっぽいんですが、ほんとのところはよくわかりませんが、わかりやすそうです。



引用:

F3 is actually a declarative Java scripting language with static typing for good IDE support and compile-time error reporting (unlike JavaScript...), type-inference, declarative syntax, and automatic data-binding with full support for 2d graphics and standard Swing components as well as declarative animation. You can also import java classes, create new Java objects, call their methods, and implement Java interfaces.

http://blogs.sun.com/chrisoliver/date/20061108







話かわって、

javaで書かれたフルブラウザ(FireFoxぐらいのレベル)がでてこないかなぁと夢想したりしてます。

Java SE 6 Mustang新機能 2006/11/12
2006/11/25

なんだかんだいっていまのところjavaが好きですね。

時間みつけて、SmalltalkやLispあたりの勉強してみたいです。



java6の新機能がまとめられていました。

Java SE 6 Mustang新機能



画面周りがどうかわっているのか興味あります。



現時点でjava1.4で開発しなければいけないのは、ある意味不幸かもしれませんね。

SFTP Plug-in for Eclipse 2006/11/11
2006/11/25

eclipseでphpの開発を行って、サーバにアップロードしたいなという状況になりました。ftpではなく、sftpでアップロードです。



SFTP Plug-in for Eclipseを使ってexportでサーバにファイルをアップできます。更新のチェックを行うので、更新したファイルのみアップロードしてくれます。



実はワンクリックでアップできたらもっといいなと思いました。



開発元のjcraftは英語のページしかみつけれなかったのですが、contactをみると日本に連絡先がありました。



もっとすばやく開発したいものですね。