- HTC EVO WiMAX ISW11HT (1円)
- サンディスク micro SDHCカード 32GB
2011年11月20日日曜日
2011年3月20日日曜日
[java][swing][netbeans] GUIフレームワークを探していてハッと
こんにちは
Swing API を使ってNetBeans IDE みたいなアプリケーションを作りたいけど、
以前、Eclipse RCP で一本作ったことがあるけど、あれと
ノリ一緒なんじゃ。
そこでNetBeans プラットフォームで作られたプロダクトを眺めてみます。
NetBeans Platform Showcase(英語)
http://netbeans.org/features/platform/showcase.html
そうそう、こういうのを作りたいわけです。
NetBeans プラットフォーム(日本語)
http://netbeans.org/features/platform/index_ja.html
Eclipse RCP にしない理由
Swing API を使ってNetBeans IDE みたいなアプリケーションを作りたいけど、
- いちからSwingレベルでゴリゴリするのも飽きたし、手間だし
- 将来のエクステンションの差込口のデザインも面倒だし、
- GUIのクラス設計って悩ましいわりに良さが出にくいし、
- 先人の教えと成果物に全面的に頼りたいもんだわ。
以前、Eclipse RCP で一本作ったことがあるけど、あれと
ノリ一緒なんじゃ。
そこでNetBeans プラットフォームで作られたプロダクトを眺めてみます。
NetBeans Platform Showcase(英語)
http://netbeans.org/features/platform/showcase.html
そうそう、こういうのを作りたいわけです。
NetBeans プラットフォーム(日本語)
http://netbeans.org/features/platform/index_ja.html
Eclipse RCP にしない理由
- Swing(つうかPure Java )にこだわってみた
- GUIビルダのことがスキダカラー(ナレテルカラー)
- Java Web Start としてまとめあげるのが面倒くさそうな予感(あるいは無理か)
- Java Web Start で起動できるかな。
- 開発環境の準備に色々ダウンロードできない職場なんだけど、大丈夫だろうか。
- アプリケーションのサイズが大きくなりすぎないだろうか。
- 他のプログラマにとって天国だろうか地獄だろうか。学習コストの評価。
- NetBeans のバージョンにものすごく左右されるんだろうか。
6.8で始めちゃうけど。
ではまた。
2011年3月6日日曜日
先人の教え - UNIX哲学
UNIX哲学 - Wikipedia
http://ja.wikipedia.org/wiki/UNIX%E5%93%B2%E5%AD%A6
UNIX哲学とは、ソフトウェア開発に関する文化的な規範と哲学的アプローチのまとまりであり、
UNIX OSの先駆的な開発者たちの経験に基づいている。
http://ja.wikipedia.org/wiki/UNIX%E5%93%B2%E5%AD%A6
UNIX哲学とは、ソフトウェア開発に関する文化的な規範と哲学的アプローチのまとまりであり、
UNIX OSの先駆的な開発者たちの経験に基づいている。
週末に目を通して、デトックスするようにしています。たまに忘れます。
UNIXに限らず、あらゆる場面で有効な(というか必須な)デザインパターンだと思います。
自分の経験に照らしても、一個一個が「だよね」連発です。
どうして時代も地域も対象領域も違うのに、こんなに共感できるの、ってぐらい。
日曜日にこれを読むと、自分がそう間違っていない気持ちになれます。
そして木曜日にはほぼ見失い、この逆の発想の信者になっています。
それが現実だからこそ、こういったものが尊ばれるわけですが。
2011年2月27日日曜日
[ant][dtd][macrodef] antstructureタスクを例としたantをforkするマクロ
Antのantstructureタスクは、ビルドファイルで使える要素と属性を定義する
DTDを生成してくれます。
ですが、ヒトクセあるこのタスクは、実行時に外部のjarが必要で、Ant実行時に
クラスパスに追加してやる必要があるのです。そこで、こんな試み。
---
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="default"
xmlns:tomorrowscode="http://tomorrowscode.blogspot.com/">
<target name="default" depends="init">
<!--
AntのDTDを生成します。
antstructureタスクに必要なライブラリをMavenリポジトリからダウンロードします。
ダウンロードしたライブラリを別のVMのクラスパスを加えて処理します。
-->
<tomorrowscode:antfork target="invoke-antstructure"
classpath="${lib.dir}/commons-net-2.2-ftp.jar"/>
</target>
<macrodef name="antfork" uri="http://tomorrowscode.blogspot.com/">
<!--
このマクロは、ビルドファイルを別のVM上で実行するタスクを定義します。
JavaからAntを起動する方法は、ここが参考になります。
http://ant.apache.org/manual/running.html#viajava
Antの組み込みプロパティの説明は、ここが参考になります。
http://ant.apache.org/manual/properties.html
-->
<attribute name="basedir" default="${basedir}" description="Optional"/>
<attribute name="target" default="NOT SET" description="Required"/>
<attribute name="antfile" default="${ant.file}" description="Optional"/>
<attribute name="classpath" description="Optional"/>
<sequential>
<java classname="org.apache.tools.ant.launch.Launcher"
fork="true" failonerror="true"
classpath="${ant.core.lib}/../ant-launcher.jar;@{classpath}">
<arg value="-f"/>
<arg file="@{antfile}"/>
<arg value="-Dbasedir=@{basedir}"/>
<arg value="@{target}"/>
</java>
</sequential>
</macrodef>
<target name="init">
<!--
Mavenリポジトリから必要なjarファイルをダウンロードします。
jarの場所は、http://mvnrepository.com/ から検索できます。
-->
<property name="lib.dir" location="lib"/>
<mkdir dir="${lib.dir}"/>
<get
src="http://repo1.maven.org/maven2/commons-net/commons-net/2.2/commons-net-2.2-ftp.jar"
dest="${lib.dir}" usetimestamp="true"/>
</target>
<target name="invoke-antstructure">
<!--
AntのDTDを生成します。クラスパスにcommons-netが必要です。
-->
<antstructure output="ant.dtd"/>
</target>
</project>
---
リポジトリにもコミります。リポジトリからブラウズした方が読みやすいです。
ではでは。
---
追加 2011-3-25
依存するライブラリcommons-net を取得するのに、上ではgetタスクを使いましたけど、
Maven Ant Tasks を使えばもっとステキにできそうです。
http://maven.apache.org/ant-tasks/index.html
DTDを生成してくれます。
ですが、ヒトクセあるこのタスクは、実行時に外部のjarが必要で、Ant実行時に
クラスパスに追加してやる必要があるのです。そこで、こんな試み。
- 必要なjarをダウンロードする。
- 配布元にはMavenのリポジトリを使う。
- ダウンロードしたjarをクラスパスに追加して、別のvmでAntを走らせる。
- そこでantstructureタスクを使う。
---
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="default"
xmlns:tomorrowscode="http://tomorrowscode.blogspot.com/">
<target name="default" depends="init">
<!--
AntのDTDを生成します。
antstructureタスクに必要なライブラリをMavenリポジトリからダウンロードします。
ダウンロードしたライブラリを別のVMのクラスパスを加えて処理します。
-->
<tomorrowscode:antfork target="invoke-antstructure"
classpath="${lib.dir}/commons-net-2.2-ftp.jar"/>
</target>
<macrodef name="antfork" uri="http://tomorrowscode.blogspot.com/">
<!--
このマクロは、ビルドファイルを別のVM上で実行するタスクを定義します。
JavaからAntを起動する方法は、ここが参考になります。
http://ant.apache.org/manual/running.html#viajava
Antの組み込みプロパティの説明は、ここが参考になります。
http://ant.apache.org/manual/properties.html
-->
<attribute name="basedir" default="${basedir}" description="Optional"/>
<attribute name="target" default="NOT SET" description="Required"/>
<attribute name="antfile" default="${ant.file}" description="Optional"/>
<attribute name="classpath" description="Optional"/>
<sequential>
<java classname="org.apache.tools.ant.launch.Launcher"
fork="true" failonerror="true"
classpath="${ant.core.lib}/../ant-launcher.jar;@{classpath}">
<arg value="-f"/>
<arg file="@{antfile}"/>
<arg value="-Dbasedir=@{basedir}"/>
<arg value="@{target}"/>
</java>
</sequential>
</macrodef>
<target name="init">
<!--
Mavenリポジトリから必要なjarファイルをダウンロードします。
jarの場所は、http://mvnrepository.com/ から検索できます。
-->
<property name="lib.dir" location="lib"/>
<mkdir dir="${lib.dir}"/>
<get
src="http://repo1.maven.org/maven2/commons-net/commons-net/2.2/commons-net-2.2-ftp.jar"
dest="${lib.dir}" usetimestamp="true"/>
</target>
<target name="invoke-antstructure">
<!--
AntのDTDを生成します。クラスパスにcommons-netが必要です。
-->
<antstructure output="ant.dtd"/>
</target>
</project>
---
リポジトリにもコミります。リポジトリからブラウズした方が読みやすいです。
ではでは。
---
追加 2011-3-25
依存するライブラリcommons-net を取得するのに、上ではgetタスクを使いましたけど、
Maven Ant Tasks を使えばもっとステキにできそうです。
http://maven.apache.org/ant-tasks/index.html
2011年2月6日日曜日
[postgresql] PostgreSQL 8.4.7 Windows Installer のダウンロード
PostgreSQL 8.4.7 Windows Installer のパッケージを
レジストレーションをすっとばして最速で落とすリンクはこちら。
http://get.enterprisedb.com/postgresql/postgresql-8.4.7-1-windows.exe
いきなりダウンロードが始まりますから、そのつもりで。
以下に説明するまっとうな手順できちんとレジストレーションすれば
期待通りのものが手に入ります。
正しい(そして長い長い)操作手順
----------------------------------------
本家ポスグレでここまではたどりつくと思います。
PostgreSQL 》Downloads 》Windows packages
http://www.postgresql.org/download/windows
ここで Download the one click installer をクリック。
すると後述する面倒なサイトに飛びます。
EnterpriseDB 》Download PostgreSQL
http://www.enterprisedb.com/products-services-training/pgdownload#windows
Installer version Version 8.4.7 の WINDOWS をクリック。
ちなみにこのページはサイトのトップからはたどれないらしい。
ちょっとした隠しページ。細かく調べていませんが、見つからなかった。
User Login/Registration に飛びます。
ここであなたの貴重な個人情報を入力して送信してください。
パスワードが発行されてメールが届きます。
すぐにログインしてパスワードを変更した方がいいですね。
マイページっぽいページに↓を見ることができたらラッキー。
You have successfully logged in, click here to access your requested page.
"click here"をクリックしてください。ページが遷移して
ダウンロードが始まります。"click here"が出てこない場合は、
ログインした状態でここからやり直してください。
EnterpriseDB 》Download PostgreSQL
http://www.enterprisedb.com/products-services-training/pgdownload#windows
想像ですけど、以前は本家ポスグレから自由にダウンロードさせていたが、
なんかレジストレーションさせたくなっちゃったと。
でも、本家にそんな仕組みがないので、EnterpriseDBにそこを頼んだ。
一方そこはそこで自分らの有償製品(及び評価版)をダウンロードする
画面遷移しかなかった。なので少々強引に流れを作った。のかな。
私の経験した謎の現象
----------------------------------------
以前ダウンロードした(あるいはしかけた)ファイルのダウンロードが、
全然関係のないタイミングで始まってしまう。
8.4.7が欲しいのに、しかもレジストレーションしていないのに8.3.14が
落ちてきたり、知らないもの(チュートリアル用のパッケージとか)が
落ちてきたりする。
こんなときは上のショートカットURLを使うか、堂々レジストレーション
してください。もちろん後者ですよね。はい。
ではでは。
レジストレーションをすっとばして最速で落とすリンクはこちら。
http://get.enterprisedb.com/postgresql/postgresql-8.4.7-1-windows.exe
いきなりダウンロードが始まりますから、そのつもりで。
以下に説明するまっとうな手順できちんとレジストレーションすれば
期待通りのものが手に入ります。
正しい(そして長い長い)操作手順
----------------------------------------
本家ポスグレでここまではたどりつくと思います。
PostgreSQL 》Downloads 》Windows packages
http://www.postgresql.org/download/windows
ここで Download the one click installer をクリック。
すると後述する面倒なサイトに飛びます。
EnterpriseDB 》Download PostgreSQL
http://www.enterprisedb.com/products-services-training/pgdownload#windows
Installer version Version 8.4.7 の WINDOWS をクリック。
ちなみにこのページはサイトのトップからはたどれないらしい。
ちょっとした隠しページ。細かく調べていませんが、見つからなかった。
User Login/Registration に飛びます。
ここであなたの貴重な個人情報を入力して送信してください。
パスワードが発行されてメールが届きます。
すぐにログインしてパスワードを変更した方がいいですね。
マイページっぽいページに↓を見ることができたらラッキー。
You have successfully logged in, click here to access your requested page.
"click here"をクリックしてください。ページが遷移して
ダウンロードが始まります。"click here"が出てこない場合は、
ログインした状態でここからやり直してください。
EnterpriseDB 》Download PostgreSQL
http://www.enterprisedb.com/products-services-training/pgdownload#windows
想像ですけど、以前は本家ポスグレから自由にダウンロードさせていたが、
なんかレジストレーションさせたくなっちゃったと。
でも、本家にそんな仕組みがないので、EnterpriseDBにそこを頼んだ。
一方そこはそこで自分らの有償製品(及び評価版)をダウンロードする
画面遷移しかなかった。なので少々強引に流れを作った。のかな。
私の経験した謎の現象
----------------------------------------
以前ダウンロードした(あるいはしかけた)ファイルのダウンロードが、
全然関係のないタイミングで始まってしまう。
8.4.7が欲しいのに、しかもレジストレーションしていないのに8.3.14が
落ちてきたり、知らないもの(チュートリアル用のパッケージとか)が
落ちてきたりする。
こんなときは上のショートカットURLを使うか、堂々レジストレーション
してください。もちろん後者ですよね。はい。
ではでは。
2011年1月15日土曜日
[netbeans][maven] 恐る恐るのmaven体験
mavenを使えない現場で、Javaプロジェクトのディレクトリ構造を
mavenライクにしてやって来ましたが、リアルmavenを使って
ハッとしたことのメモ。
発端
--------------------------------------------------
Antの<script>タスクを調べていました。<script>タスクは、
AntでAnt以外のスクリプトを書けるようにするやつ。
JavaScript以外の言語を特に何も調達せずに使えるかなと。
beanshellってのが使えるとAntの中にJavaを書けていいなと。
BeanShell
http://www.beanshell.org/
<script>タスクはant-apache-bsf.jarが実体なので、それをAntのlibで探していたら、
ant-apache-bsf.jar の隣に ant-apache-bsf.pom があるじゃないですか。
Antがmavenで作られていた!?
類似
・タワーレコードの店員がAmazonで実は買っている。
・エコカーの開発者がガソリン車で通勤している。
mavenってWEB-INFとか出て来るWebアプリケーションの開発の
イメージ(勝手な)がありました。そうではないらしい。使ってみますかさっそく。
調達と設定
--------------------------------------------------
NetBeans 6.9.1
Apache Maven 3.0.2
NetBeans ≫ ツール ≫ オプション ≫ Maven
外部 Maven ホーム:J:\Program Files\apache-maven-3.0.2
ローカルリポジトリ:J:\java\repository
※Cドライブに空きがないので。
プロジェクトを作る
--------------------------------------------------
NetBeans ≫ ファイル ≫ 新規プロジェクト ≫ Maven ≫ Mavenプロジェクト
Maven原型:Mavenクイックスタート原型(1.0)
あとは適当に。。
デフォルトでいきなり困ったこと
--------------------------------------------------
・コンパイルのレベルが1.3だった。
プロジェクトプロパティ ≫ ソース
ソース/バイナリ形式:1.6
・JUnitが3系でできあがっちゃった。
pomを書き換え。
---
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
---
いまさら知ったこと(ぽかーん)
--------------------------------------------------
・必要なライブラリが勝手にダウンロードされるのは知っていたけど、
mavenのプラグインも同じく。そこは意識できていないから
ネットからクローズした自社リポジトリを作るのは難易度高そう。
・今までプロパティファイルをデフォルトパッケージに置いていたけど違った。
×:src/main/java/log4j.properties
○:src/main/resources/log4j.properties
確かにプロパティファイルはJavaではないです。
・targetディレクトリがsvn無視だった。コミット対象外。
・targetディレクトリにclassesとtest-classesが出来ていた。
binじゃないのね。
・targetディレクトリにビルドしたjarが置かれていた。
distじゃないのね。
・ローカルリポジトリにjarやらpomやら一式がコピーされていた。
そっか。他のプロジェクトが参照するjarになり得るものね。
targetがsvn無視なのは、こういうことか。
・ビルドしたらテストケースが動いた。テストスィート書いてないのに。
これうれしい。
・ビルドするjarの名前はpomに記述した情報から自動的に付けられる。
プロジェクト名.jar ではない。これうれしい。今はリネームしている。
・pomにバージョンを書ける。これうれしい。
今はインストーラを作るAntに書いている。
・pomもリリース対象。これうれしい。
このjar何モノ?ってね。情報が欲しい。依存ライブラリとかバージョンとか。
※ファイル名・ディレクトリ名がグレーなヤツがsvn無視です。
※nb-configuration.xmlを無視にしたのは私。IDE依存な情報なので除外に。
1時間ぐらいだったけどすんごい勉強になりました。
ではまた。
mavenライクにしてやって来ましたが、リアルmavenを使って
ハッとしたことのメモ。
発端
--------------------------------------------------
Antの<script>タスクを調べていました。<script>タスクは、
AntでAnt以外のスクリプトを書けるようにするやつ。
JavaScript以外の言語を特に何も調達せずに使えるかなと。
beanshellってのが使えるとAntの中にJavaを書けていいなと。
BeanShell
http://www.beanshell.org/
<script>タスクはant-apache-bsf.jarが実体なので、それをAntのlibで探していたら、
ant-apache-bsf.jar の隣に ant-apache-bsf.pom があるじゃないですか。
Antがmavenで作られていた!?
類似
・タワーレコードの店員がAmazonで実は買っている。
・エコカーの開発者がガソリン車で通勤している。
mavenってWEB-INFとか出て来るWebアプリケーションの開発の
イメージ(勝手な)がありました。そうではないらしい。使ってみますかさっそく。
調達と設定
--------------------------------------------------
NetBeans 6.9.1
Apache Maven 3.0.2
NetBeans ≫ ツール ≫ オプション ≫ Maven
外部 Maven ホーム:J:\Program Files\apache-maven-3.0.2
ローカルリポジトリ:J:\java\repository
※Cドライブに空きがないので。
プロジェクトを作る
--------------------------------------------------
NetBeans ≫ ファイル ≫ 新規プロジェクト ≫ Maven ≫ Mavenプロジェクト
Maven原型:Mavenクイックスタート原型(1.0)
あとは適当に。。
デフォルトでいきなり困ったこと
--------------------------------------------------
・コンパイルのレベルが1.3だった。
プロジェクトプロパティ ≫ ソース
ソース/バイナリ形式:1.6
・JUnitが3系でできあがっちゃった。
pomを書き換え。
---
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
---
いまさら知ったこと(ぽかーん)
--------------------------------------------------
・必要なライブラリが勝手にダウンロードされるのは知っていたけど、
mavenのプラグインも同じく。そこは意識できていないから
ネットからクローズした自社リポジトリを作るのは難易度高そう。
・今までプロパティファイルをデフォルトパッケージに置いていたけど違った。
×:src/main/java/log4j.properties
○:src/main/resources/log4j.properties
確かにプロパティファイルはJavaではないです。
・targetディレクトリがsvn無視だった。コミット対象外。
・targetディレクトリにclassesとtest-classesが出来ていた。
binじゃないのね。
・targetディレクトリにビルドしたjarが置かれていた。
distじゃないのね。
・ローカルリポジトリにjarやらpomやら一式がコピーされていた。
そっか。他のプロジェクトが参照するjarになり得るものね。
targetがsvn無視なのは、こういうことか。
・ビルドしたらテストケースが動いた。テストスィート書いてないのに。
これうれしい。
・ビルドするjarの名前はpomに記述した情報から自動的に付けられる。
プロジェクト名.jar ではない。これうれしい。今はリネームしている。
・pomにバージョンを書ける。これうれしい。
今はインストーラを作るAntに書いている。
・pomもリリース対象。これうれしい。
このjar何モノ?ってね。情報が欲しい。依存ライブラリとかバージョンとか。
※ファイル名・ディレクトリ名がグレーなヤツがsvn無視です。
※nb-configuration.xmlを無視にしたのは私。IDE依存な情報なので除外に。
1時間ぐらいだったけどすんごい勉強になりました。
ではまた。
[java][log] 使うか使わないかcommons-logging
自分には log4j-1.2.x がデファクトで、コード中でしっかりimportしています。
が、それはいかがなものかというコンセプトの commons-logging を使ってみました。
commons-loggingを使うと、どうもこういうことらしい。
自分のPCを探してみると結構 commons-logging は使われていました。
(正確に言うと同梱していました。)
◆Javaコード:App.java
-----------------------------
package com.hisagisoft.tomorrowscode.logger;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class App {
private static final Log log = LogFactory.getLog(App.class);
public static void main( String[] args ){
log.info("this is log.");
System.out.println( "Hello World!" );
}
}
-----------------------------
◆プロパティファイル:commons-logging.properties
-----------------------------
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
-----------------------------
◆プロパティファイル:log4j.properties
-----------------------------
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c(%L) - %m%n
log4j.appender.null=org.apache.log4j.varia.NullAppender
log4j.rootLogger=debug, null
log4j.logger.com.hisagisoft=debug, stdout
-----------------------------
◆これらの配置
◆実行(NetBeans上で、です)
------------------------------
run:
2011-01-15 20:41:30,062 [main] INFO com.hisagisoft.tomorrowscode.logger.App(15) - this is log.
Hello World!
構築成功 (合計時間: 0 秒)
◆結論
手に入るときは使うようにします。
ではまた。
が、それはいかがなものかというコンセプトの commons-logging を使ってみました。
commons-loggingを使うと、どうもこういうことらしい。
- Loggerの実装(例えばlog4j)の選択を後回しにして、でもアプリケーションの実装には着手できます。
- プロパティファイルの変更(など)だけで、Loggerの実装を変更できます。
自分のPCを探してみると結構 commons-logging は使われていました。
(正確に言うと同梱していました。)
- Oxygen XML Editor
- DITA Open Toolkit
- Ant
◆Javaコード:App.java
-----------------------------
package com.hisagisoft.tomorrowscode.logger;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class App {
private static final Log log = LogFactory.getLog(App.class);
public static void main( String[] args ){
log.info("this is log.");
System.out.println( "Hello World!" );
}
}
-----------------------------
◆プロパティファイル:commons-logging.properties
-----------------------------
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
-----------------------------
◆プロパティファイル:log4j.properties
-----------------------------
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c(%L) - %m%n
log4j.appender.null=org.apache.log4j.varia.NullAppender
log4j.rootLogger=debug, null
log4j.logger.com.hisagisoft=debug, stdout
-----------------------------
◆これらの配置
◆実行(NetBeans上で、です)
------------------------------
run:
2011-01-15 20:41:30,062 [main] INFO com.hisagisoft.tomorrowscode.logger.App(15) - this is log.
Hello World!
構築成功 (合計時間: 0 秒)
------------------------------
◆結論
手に入るときは使うようにします。
ではまた。
登録:
投稿 (Atom)