2008年8月8日金曜日

プログラミングコードの貼り付け(3)

前記事:プログラミングコードの貼り付け(2)

現在はこれに落ち着いてます。
pre.code {
background: #eee;
border: 1px solid #ddd;
width: 95%;
padding: 5px;
font-size: 85%;
white-space: -moz-pre-wrap; /* Mozilla */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: pre-wrap; /* CSS3 */
word-wrap: break-word; /* IE 5.5+ */
overflow: auto;
}

2008年8月7日木曜日

ant-velocity

どもー。

静的コンテンツだけのページを作るとき、どーしてもヘッダフッタをコピペで何度も書きたくないので調べたところ、Apache Jakarta プロジェクトから次の 2つのプロジェクトを見つけました。

・Apache Velocity Anakia
・Apache Velocity Texen

どちらも、Velocity というテンプレートエンジンを使って Ant のカスタムタスクを提供しています。それぞれすばらしいツールなんですが、ちょっと気に入りません。

Apache Velocity Anakia ... XML をソースとして、vsl を記述する必要がある。
Apache Velocity Texen ... コントロールファイルを記述する必要がある。

Ant と Velocity 使うならもっとシンプルにできそうなのに。。そう考えて作っちゃいました!

ant-velocity-1.0.0

もっともシンプルな Ant ビルドファイルはこんな感じ。カスタムタスクを定義して、todir、fileset を指定するだけ。tmpl ディレクトリ以下の html ファイルを Velocity テンプレートとして評価し、htdocs に出力します。
<taskdef name="velocity" classname="org.jarx.ant.VelocityTask"
classpathref="classpath" />
<velocity todir="htdocs" encoding="UTF-8">
<fileset dir="tmpl" includes="**/*.html">
</velocity>

変数を指定したい場合はこう。
<velocity todir="htdocs" encoding="UTF-8">
<fileset dir="tmpl" includes="**/*.html">
<parameter name="baseurl" value="http://jarx.org/" />
</velocity>

変数をプロパティファイルに記述したい場合はこう。
<velocity todir="htdocs" encoding="UTF-8"
propertyFile="resource.properties">
<fileset dir="tmpl" includes="**/*.html">
</velocity>

ボーダーテンプレートを使いたい場合はこう。
<velocity todir="htdocs" encoding="UTF-8"
borderTmplFile="tmpl/border-template.html">
<fileset dir="tmpl" includes="**/*.html">
</velocity>

ボーダーテンプレートはこんな感じ。#parse(${path}) の部分に fileset で指定したテンプレートの内容が入ります。
<html>
<head><title>border template example</title></head>
<body>#parse(${path})</body>
</html>

2008年8月4日月曜日

こういうの作りたかった - キャリー[独立]

まだ会社に勤めてたころ、空いた時間を有効活用してプログラムのバイトしたいなーなんて思ってた時期がありました。イメージはメソッド1つ単位からバイトできるサービスです。

この キャリー[独立] というサービスは、主にフリーのエンジニアのためのもっと大きな単位(人月)の案件を紹介しています。これでもいいかなーなんて思います。
http://f-engineer.jp/search/

困ったら使おうw

こういうの作りたかった - コード*(なにがし)

プログラムに行き詰ったら誰かに相談したい。そう思うことは良くあります。

私がずっと作りたかったものにすごく近いイメージのサービスを発見。
http://code.nanigac.com/

ちょっと前からウォッチしてますが、よさそう。今度投稿してみよう。

そろそろ案件管理が大変に。。

そろそろ案件管理が大変になってきた。

会社設立してから今までは Excel で管理してたけど、来月から仕入れも発生するし。。何かいい ASP とかないかなー。

こういうとき、プログラマあがりの私は「つくろうかな」という思考になっちゃうので自重しなければ。。

2008年8月1日金曜日

svn:ignore にハマった

svn:ignore が有効になるのは、「SVN 管理下にないディレクトリ・ファイル」に対してなんですね。ちょっと勘違いしてました。

2008年7月3日木曜日

jar ファイルの場所を見つける方法

自作の jar ファイルに含まれたクラスを使うとき、その jar のパスやディレクトリを知りたいと思ったことありませんか?

かなり昔に作った自作ライブラリの一部ですが、最近、思い出したように使ってみて便利だったので紹介します。
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLDecoder;
import java.security.ProtectionDomain;
import java.security.CodeSource;

public class ClassUtils {

public static URL findClassLocation(Class c)
throws SecurityException {
Package p = c.getPackage();
String className;
if (p != null) {
className = c.getName().substring(p.getName().length() + 1);
} else {
className = c.getName();
}
URL location = c.getResource(className + ".class");
if (location == null) {
// NOTE: 昔 Tomcat の WEB-INF/lib とかの jar を探すときはこの
// 処理に入ったのだが。。。今は不要かも。
ProtectionDomain domain = c.getProtectionDomain();
CodeSource source = domain.getCodeSource();
if (source != null) {
location = source.getLocation();
}
}
return location;
}

private static File findBaseDirectory(URL classLocation)
throws IOException {
if (classLocation == null) {
return null;
}
String file = classLocation.getFile();
if (classLocation.getProtocol().equals("jar")) {
int i = file.lastIndexOf('!');
if (i != -1) {
file = file.substring(0, i);
}
return findBaseDirectory(new URL(file));
}
File dir = new File(URLDecoder.decode(file,
System.getProperty("file.encoding")));
if (!dir.isDirectory()) {
dir = dir.getParentFile();
}
return dir;
}

public static File findBaseDirectory(Class c)
throws SecurityException, IOException {
return findBaseDirectory(findClassLocation(c));
}

public static void main(String[] args) throws Exception {
System.out.println(findBaseDirectory(java.lang.String.class));
}
}


これがあれば xxx.home などのシステムプロパティ渡さずに済むことが多々あると思います。
sen などもこれに対応してくれればなぁ。。。