2012年03月16日のツイート

2012年03月15日のツイート

guava-librariesソースコードリーディング2回目

http://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained

このドキュメントを見る限り、Optionalって、ScalaのOptionと同じかな?
Scalaはちょっと触っただけで放置中なので、断言できないけど。

まあ、ソースを見てみるか。

Making an Optionalの3メソッド
Optional.of(T)、Optional.absent()、Optional.fromNullable(T)
を見てみる。

最初は、Optional.of(T)。
public static Optional of(T reference) {
return new Present(checkNotNull(reference));
}

checkNotNullって?
public static T checkNotNull(T reference) {
if (reference == null) {
throw new NullPointerException();
}
return reference;
}
ふむ。nullチェックですか。

Presentって?
private static final class Present extends Optional {
ふむ。Optionalのサブクラスね。


お次は、Optional.absent()。
public static Optional absent() {
return (Optional) Absent.INSTANCE;
}

private static final class Absent extends Optional {
private static final Absent INSTANCE = new Absent();

最後は、Optional.fromNullable(T)。
public static Optional fromNullable(@Nullable T nullableReference) {
return (nullableReference == null)
? Optional.absent()
: new Present(nullableReference);
}
ふむ。nullならAbsentを、nullじゃなければPresentを返す。

ということは、
AbsentはNullオブジェクトであり、ScalaのNoneにあたる。
Presentは、必ずnullじゃない値を持っていて、ScalaのSameにあたる。
って事か。

guava-librariesソースコードリーディング1回目

WEB+DB PRESS Vol.63の再考するJava【第1回】コレクションライブラリの再考……基本ノウハウ,guava-librariesの活用
を読んで、
googleのguava-librariesに興味津々、ということで
久しぶりに、ソースコードリーディングをやってみる。

仕事でならjakarta-commonsのソースとか、日常的に読んでるけど、
趣味でソースコードリーディングするのは、久しぶり。何年ぶりだろう?

まずは、
http://wiki.fdiary.net/maven2/?CookBook
を参考に、maven2でjarをダウンロード。

mvn -Declipse.workspace="C:/Users/hoshinom/Dropbox/workspace" eclipse:add-maven-repo
mvn archetype:create -DgroupId=hoshinom78 -DartifactId=toy-guava




com.google.guava
guava
[11,)


junit
junit
[4,)
test

mvn -DdownloadSources=true eclipse:eclipse

それから、ドキュメントが
http://code.google.com/p/guava-libraries/
で、
Javadocが、
http://docs.guava-libraries.googlecode.com/git-history/v11.0.2/javadoc/index.html

とりあえず、今日はここまで。

log4j.propertiesで参照できるのはシステムプロパティであって、環境変数ではない

Log4Jでログファイル名やメールのSubjectに、
コンピュータ名や日付を埋め込む方法を調べた。

  • 結論

javaの-Dオプションで、環境変数システムプロパティに渡す。
そのシステムプロパティを、
log4j.propertiesで、${システムプロパティ名}の形式で参照する。

javaの-Dオプションの例

java -Dcomputername=%COMPUTERNAME% -Dtoday=%date:/=% -cp .;.\lib\log4j-1.2.16.jar Log4jEnvToy

log4j.propertiesの例

### direct log messages to stdout ###
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 %5p %c{1} - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender

#環境変数java.lang.System.getenv)は参照してくれない!
#log4j.appender.file.File=mylog-${COMPUTERNAME}-${%date:/=%}.log

#参照するのはシステムプロパティ(java.lang.System.getProperty)
#java -Dcomputername=%COMPUTERNAME% -Dtoday=%date:/=% -cp .;.\lib\log4j-1.2.16.jar Log4jEnvToy
log4j.appender.file.File=mylog-${computername}-${today}.log

log4j.appender.file.Append=true
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %5p %c{1} - %m%n

log4j.rootLogger=info, stdout, file

実行例(コンソール)

C:\Users\hoshinom\Dropbox\java\log4jtoy>echo %COMPUTERNAME%
KITT

C:\Users\hoshinom\Dropbox\java\log4jtoy>echo %date:/=%
20111023

C:\Users\hoshinom\Dropbox\java\log4jtoy>java -Dcomputername=%COMPUTERNAME% -Dtoday=%date:/=% -cp .;.\lib\log4j-1.2.16.jar Log4jEnvToy
2011-10-23 13:26:35,610 INFO Log4jEnvToy - info log.
2011-10-23 13:26:35,615 WARN Log4jEnvToy - warn log.
2011-10-23 13:26:35,617 ERROR Log4jEnvToy - error log.
2011-10-23 13:26:35,620 FATAL Log4jEnvToy - fatal log.

C:\Users\hoshinom\Dropbox\java\log4jtoy>

実行例(mylog-KITT-20111023.log)

2011-10-23 13:26:35,610 INFO Log4jEnvToy - info log.
2011-10-23 13:26:35,615 WARN Log4jEnvToy - warn log.
2011-10-23 13:26:35,617 ERROR Log4jEnvToy - error log.
2011-10-23 13:26:35,620 FATAL Log4jEnvToy - fatal log.

  • 参考文献

バッチ・ファイル中で日付をファイル名に使用する
http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html

SystemクラスのJavadoc
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/System.html#getProperties()

Javaリソース・プロパティーメモ(Hishidama's Java resource/property Memo):
http://www.ne.jp/asahi/hishidama/home/tech/java/resource.html#h2_SystemProperty

2011年10月23日のツイート

2011年10月22日のツイート