2009年10月30日金曜日

正規表現で全角、半角、半角カナチェック

今回必要だったから作った。
簡単にテストしてみたけど、とりあえず使えそう。


/**
* 全角チェック
*
* @param String
* str チェック元文字列
* @return boolean true:全角
*/
public static boolean checkZenkaku(String str) {
if (str == null) {
return false;
}

return str.matches("^[^ -~。-゚]+$");
}

/**
* 全角と空白文字チェック
*
* @param String
* str チェック元文字列
* @return boolean true:全角と空白文字
*/
public static boolean checkZenkakuWithSpace(String str) {
if (str == null) {
return false;
}

return str.matches("^([^ -~。-゚]|\\s)+$");
}

/**
* 半角チェック
*
* @param String
* str チェック元文字列
* @return boolean true:半角
*/
public static boolean checkHankaku(String str) {
if (str == null) {
return false;
}

return str.matches("^[ -~。-゚]+$");
}

/**
* 半角と空白文字チェック
*
* @param String
* str チェック元文字列
* @return boolean true:半角と空白文字
*/
public static boolean checkHankakuWithSpace(String str) {
if (str == null) {
return false;
}

return str.matches("^([ -~。-゚]|\\s)+$");
}

/**
* 半角カナチェック
*
* @param String
* str チェック元文字列
* @return boolean true:半角カナのみ
*/
public static boolean checkHankakuKana(String str) {
if (str == null) {
return false;
}

return str.matches("^[ア-ン゙゚]+$");
}

/**
* 半角カナと空白文字チェック
*
* @param String
* str チェック元文字列
* @return boolean true:半角カナと空白文字
*/
public static boolean checkHankakuKanaWithSpace(String str) {
if (str == null) {
return false;
}

return str.matches("^([ア-ン゙゚]|\\s)+$");
}

Ubuntu 配布サーバ切り替え

Ubuntu9.10をインストールして必要なアプリを入れようとすると

'jp.archive.ubuntu.com' を解決できませんでした

というエラーが発生した。

解決方法を探してみるとパッケージ配布サーバを切り替えればできるらしい。

https://wiki.ubuntulinux.jp/UbuntuTips/Others/SwitchArchiveMirror

簡単にいうと[システム] - [システム管理] - [ソフトウェア・ソース] から配布サーバを指定すればできる。

2009年10月20日火曜日

JasperReportでパスワード付きPDF生成

JasperReportでパスワード付きPDF生成してみた。
テストしたコードはこれだ。

try {
File jasperFile = new File("/test/test.jasper");

if (!jasperFile.exists()) {
System.out.println("not found file");
return;
}

Map params = new HashMap();
params.put("p1", "aaa");
params.put("p2", "bbb");

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperFile.getPath(), params);

// Exporterの生成
JRPdfExporter exporter = new JRPdfExporter();

// 出力オブジェクトの設定
exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT, jasperPrint);

// 出力先の設定
exporter.setParameter(JRPdfExporterParameter.OUTPUT_FILE_NAME, "/test/test.pdf");
// パスワード保護を有効にする
exporter.setParameter(JRPdfExporterParameter.IS_ENCRYPTED, Boolean.TRUE);
// パスワードの設定
exporter.setParameter(JRPdfExporterParameter.USER_PASSWORD, "1234");
exporter.setParameter(JRPdfExporterParameter.OWNER_PASSWORD, "4321");

// 出力の実行
exporter.exportReport();
} catch (JRException e) {
e.printStackTrace();
}


実行してみたら、

java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1OctetString

エラーが発生した。( ´д`)

足りないライブラリを探してみたら、どうやら「www.bouncycastle.org」で提供するライブラリらしい。

現時点の最新バージョン(1.44)を落とした。
http://www.bouncycastle.org/latest_releases.html

クラスパスに追加してテストしてみると、成功!(´∀`)


2009年10月19日月曜日

Unauthorized sender

App Engineのメール送信機能を使ってみた。

送信者がアプリケーション開発者に登録されていないといけないことをしらならず、
ただ、グーグルのアカウントならいけると思ってずっと「Unauthorized sender」エラーが発生した。

登録してあるデベロッパーメールアドレスで送信すると問題なく動く。

当然だけど、悪戯メールとかはダメだな。。

次は受信処理も試してみよう!

2009年10月15日木曜日

Google App Engine 1.2.6の起動時エラー

EclipseのApp Engine Pluginを1.2.6にアップしたら
既存プロジェクトの起動がエラーになってしまった。こんな。。

java.lang.RuntimeException: Unable to locate the App Engine agent. Please use dev_appserver, KickStart,  or set the jvm flag: "-javaagent:<sdk_root>/lib/agent/appengine-agent.jar"
....
Caused by: java.lang.ClassNotFoundException: com.google.appengine.tools.development.agent.AppEngineDevAgent
....

エラー内容に書いてあるとおりに
vmオプションに"-javaagent:<sdk_root>/lib/agent/appengine-agent.jar"を付けってやると動くようになった。


これはプラグインのバグなのか?( ´д`)

2009年10月13日火曜日

MD5 for java



import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
* @author BABUKUMA
*/
public final class Digest {
public static byte[] md5(final String data) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] dat = data.getBytes();
md.update(dat);
return md.digest();
}

// MD5 ハッシュ関数
private static String hashByte2MD5(byte[] hash) {
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
if ((0xff & b) < 0x10) {
hexString.append("0" + Integer.toHexString((0xFF & b)));
} else {
hexString.append(Integer.toHexString(0xFF & b));
}
}

return hexString.toString();
}

public static String md5String(final String data)
throws NoSuchAlgorithmException {
return hashByte2MD5(md5(data));
}
}

2009年10月6日火曜日

Web WorkerとCanvasを試してみた。

HTML5の勉強でWeb WorkerとCanvasを利用して
簡単なアニメーションを作ってみて。( ´(エ)ヒソ(´(エ)`)ヒソ(エ)` )
Canvasを人が歩き続くアニメー。。。。
タイトルは。。勝手につけた。Babukuma canvas walker。。
walkerがworkerと発音が似てて、人が歩くから。。(ノ∀`)'`,、'`,、'`,、'`,、'`,、

一応FireFoxとGoogle Chromeは動く。
IEとOperaはダメだった。

Babukuma canvas walker demoはこちら

HTML5面白いね。(^(エ)^)

2009年10月2日金曜日

Web Workersを試してみた。

今回、Web Workersを試してみた。
JavaScriptで簡単にスレッドが使えるのが便利だったけど、
まだ、スレッドに引数はどうやれば渡せるのかがわからなくて、ちょっと不便なところもあった。


### test.html ###

<!DOCTYPE HTML>
<html>
<head>
<title>babukuma web workers event test</title>
</head>
<body>
<table border=1>
<tr>
<th>thread 1</th>
<th>thread 2</th>
</tr>
<tr>
<td><ul id="result1"></ul></td>
<td><ul id="result2"></ul></td>
</tr>
</table>
<script>
var worker1 = new Worker('worker.js');
worker1.onmessage = function (event) {
var liTag = document.createElement("li");
var textNode = document.createTextNode(event.data);
liTag.appendChild(textNode);
document.getElementById('result1').appendChild(liTag);
};

worker1.onerror = function (event) {
var liTag = document.createElement("li");
var textNode = document.createTextNode("message : " + event.message);
liTag.appendChild(textNode);
document.getElementById('result1').appendChild(liTag);
};

var worker2 = new Worker('worker.js');
worker2.onmessage = function (event) {
var liTag = document.createElement("li");
var textNode = document.createTextNode(event.data);
liTag.appendChild(textNode);
document.getElementById('result2').appendChild(liTag);

if(event.data == 6) {
worker2.terminate();

var liTag = document.createElement("li");
var textNode = document.createTextNode("terminate");
liTag.appendChild(textNode);
document.getElementById('result2').appendChild(liTag);
}
};

worker2.onerror = function (event) {
var liTag = document.createElement("li");
var textNode = document.createTextNode("message : " + event.message);
liTag.appendChild(textNode);
document.getElementById('result2').appendChild(liTag);
};
</script>
</body>
</html>


### worker.js ###

var index = 0;

var babukumaThread = function() {
if(index == 8) {
throw 'babukuma error!!!';
}
postMessage(index);
index++;
setTimeout(babukumaThread, 1000);
}

babukumaThread();


IEとOperaではまだWebWorkersが使えないみたいで、試せなかった。
FireFoxとGoogle Chromeでテストしてみたけど、
なぜかちょっと結果が違う。
Chromeではonerrorイベントが発生してないみたい。。
俺が何か間違ったのかな?


後でShared Workersも試してみよう。

いつも忘れてしまうOracle起動方法

oracleユーザで入って、


$ cd $ORACLE_HOME/bin
$ sqlplus /nolog
SQL> connect / as sysdba
SQL> startup
ORACLE instance started.

Total System Global Area 536870912 bytes
Fixed Size 1220460 bytes
Variable Size 155189396 bytes
Database Buffers 373293056 bytes
Redo Buffers 7168000 bytes
?????????????????
?????????????????
SQL> select status from v$instance;

STATUS
------------
OPEN

SQL> exit

$ ./lsnrctl start
$ ./lsnrctl status <確認