よく、アプリケーションを使っていると、ファイルが他のプログラムで
変更されたことを検地する機能を持ったものがある。
これは、どうやってやっているんだろうかとぼんやりと思っていたのだけど、
必要に迫られることがなかったので、ずっと放置していたのだけども、
最近、ツールが作りたくなってこの機能があればスマートに実装できるので
ちょっと調べてみた。
すると、Delphiには、まさにそのためのコンポーネントがあるではないか。
それは、TShellChangeNotifierというクラス。
このクラスは、指定したフォルダ以下のファイルに変化があったら反応してくれる
コンポーネント。
下記が今回参考にしたサイトです。
http://www.geocities.jp/fjtkt/problems/2005_0008.html
2009年10月24日土曜日
2009年10月8日木曜日
シリアライズのテストプログラム
シリアライズをして復元するというようなプログラムをテストで
作ってみました。
いままではフレームワークで勝手にシリアライズしてくれるような部分で意識していなかった
部分だったのだけど、ちょっと自前で書いてみました。
Serializable なクラスをもつSerializable を作って
byte[]に格納した後に、そこからオブジェクトに復元してみる
というのを確かめたサンプルのソースコードです。
作ってみました。
いままではフレームワークで勝手にシリアライズしてくれるような部分で意識していなかった
部分だったのだけど、ちょっと自前で書いてみました。
Serializable なクラスをもつSerializable を作って
byte[]に格納した後に、そこからオブジェクトに復元してみる
というのを確かめたサンプルのソースコードです。
package SerializeTest;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
public class Main {
/**
* @param args
* @throws IOException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws IOException, ClassNotFoundException {
classA test = new classA();
// DocumentBuilder docbu = DocumentBuilder.get;
test.setLoginInfo(new LoginInfo("useree","passhhh"));
test.setVal1("かきくけこ");
test.setVal2("あいうえお");
System.out.println(test.toString());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream p = new ObjectOutputStream(baos);
p.writeObject(test);
p.writeObject("String");
p.flush();
byte [] bit = baos.toByteArray();
baos.close();
//
ByteArrayInputStream bais = new ByteArrayInputStream(bit);
ObjectInputStream ois = new ObjectInputStream(bais);
classA cla = (classA ) ois.readObject();
String str = (String ) ois.readObject();
System.out.println(cla.toString());
System.out.println(str);
}
}
============================
package SerializeTest;
import java.io.Serializable;
public class classA implements Serializable {
/**
*
*/
private static final long serialVersionUID = -345225844394172659L;
LoginInfo loginInfo;
String val1 ;
String val2 ;
public LoginInfo getLoginInfo() {
return loginInfo;
}
public void setLoginInfo(LoginInfo loginInfo) {
this.loginInfo = loginInfo;
}
public String getVal1() {
return val1;
}
public void setVal1(String val1) {
this.val1 = val1;
}
public String getVal2() {
return val2;
}
public void setVal2(String val2) {
this.val2 = val2;
}
public String toString(){
return loginInfo.getUserName()
+"/"+loginInfo.getPassword()
+"/"+val1+"/"+val2;
}
}
===============================
package SerializeTest;
import java.io.Serializable;
public class LoginInfo implements Serializable {
/**
*
*/
private static final long serialVersionUID = -8712859729005134670L;
private String userName;
private String password;
public LoginInfo(String string, String string2) {
userName =string;
password=string2;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2009年9月28日月曜日
EJBの仕組み概要
EJBって聞いたことはあるけどよく知らなかった仕組みなんで、
理解しようとしてみた。
初心者には、このページがわかりやすかった。
JBossで学ぶEJB入門
第二回までは、EJBの一般論が書かれているので、JBossでなくても
通用する話でした。
理解しようとしてみた。
初心者には、このページがわかりやすかった。
JBossで学ぶEJB入門
第二回までは、EJBの一般論が書かれているので、JBossでなくても
通用する話でした。
2009年9月19日土曜日
OracleでNotNull制約を解除する
先日、Oracleのテーブル定義でNotNull制約を解除するAlter文ってどう書くんだろう
ということではまってしまった。
ALTER TABLE XXXXXX MODIFY (YYYYYY VARchar(20))
とやってみてもNotNull制約は解除されない。正しくは、下記のように書くんですね。
ALTER TABLE XXXXXX MODIFY (YYYYYY VARchar(20) NULL)
ということではまってしまった。
ALTER TABLE XXXXXX MODIFY (YYYYYY VARchar(20))
とやってみてもNotNull制約は解除されない。正しくは、下記のように書くんですね。
ALTER TABLE XXXXXX MODIFY (YYYYYY VARchar(20) NULL)
2009年9月16日水曜日
DelphiアプリケーションのWindowsのダンプファイルの調査のしかた
Windowsファイルが出力するダンプファイルなんで今まで遠ざけていたのだけど、
ちょっとチャレンジしてみた。
まず、必要なものは、windbgというマイクロソフトの無料のツール
これは、下記から説明およびダウンロードができる。
http://www.microsoft.com/japan/whdc/devtools/debugging/debugstart.mspx
次にDelphiのアプリケーションからは、生成されないマップ情報を生成する必要が
あるのだけど、それは、下記のDelphiのmapファイルをdbgファイルに
変換してくれる便利なツール「map2dbg」があるようです。
参考になったサイトは下記のサイト(英文)です。
http://www.sandon.it/?q=node/45
これらを踏まえた上で、下記のサイトを見てwindbgを使ってみると、
スタックとレースを見ることが出来るという部分までが理解できた。
クラッシュダンプを読んでその原因を究明する
いろいろ見てみると、
STACK_TEXT:
という部分あたりに、関数の呼び出し履歴みたいなのが表示されるようです。
現実問題、これがわかるだけでも結構でかいなぁ....
昔、この本を読もうとして、ちょっとやめたのだけど、やっぱり読んでみようかな
とまた思い始めてみる。
Windowsダンプの極意 エラーが発生したら、まずダンプ解析! (大型本)
ちょっとチャレンジしてみた。
まず、必要なものは、windbgというマイクロソフトの無料のツール
これは、下記から説明およびダウンロードができる。
http://www.microsoft.com/japan/whdc/devtools/debugging/debugstart.mspx
次にDelphiのアプリケーションからは、生成されないマップ情報を生成する必要が
あるのだけど、それは、下記のDelphiのmapファイルをdbgファイルに
変換してくれる便利なツール「map2dbg」があるようです。
参考になったサイトは下記のサイト(英文)です。
http://www.sandon.it/?q=node/45
これらを踏まえた上で、下記のサイトを見てwindbgを使ってみると、
スタックとレースを見ることが出来るという部分までが理解できた。
クラッシュダンプを読んでその原因を究明する
いろいろ見てみると、
STACK_TEXT:
という部分あたりに、関数の呼び出し履歴みたいなのが表示されるようです。
現実問題、これがわかるだけでも結構でかいなぁ....
昔、この本を読もうとして、ちょっとやめたのだけど、やっぱり読んでみようかな
とまた思い始めてみる。
Windowsダンプの極意 エラーが発生したら、まずダンプ解析! (大型本)
2009年9月15日火曜日
XMLDocumentをStringにする
XML処理のデバッグなどをしていると、
XMLDocumentをStringにしてみてみたいなぁと思い、それをする方法を調べていたら
下記のページにたどり着いた。
Java Technology & XML - Re: how to transform a dom object to String?
これをほんのちょっとだけ、アレンジして下記のようなmethodを作ったところ
イメージどおりの動作をしてくれました。
これで、どこがおかしかったのかを突き止めることが出来ました。
XMLDocumentをStringにしてみてみたいなぁと思い、それをする方法を調べていたら
下記のページにたどり着いた。
Java Technology & XML - Re: how to transform a dom object to String?
これをほんのちょっとだけ、アレンジして下記のようなmethodを作ったところ
イメージどおりの動作をしてくれました。
private static String getStringFromDocument(Document doc){
String str=null;
try {
TransformerFactory tfac = TransformerFactory.newInstance();
StringWriter strWtr = new StringWriter();
StreamResult strResult = new StreamResult(strWtr);
Transformer trans = tfac.newTransformer();
trans.transform(new DOMSource(doc.getDocumentElement()), strResult);
str =strResult.getWriter().toString(); }
catch (TransformerException te) {
te.printStackTrace();
}
return str;
}
これで、どこがおかしかったのかを突き止めることが出来ました。
2009年9月5日土曜日
Google App Engine SDK 1.2.5リリース
Google App Engineのブログを見ていると新バージョンが出たというニュースが書かれていた。
App Engine SDK 1.2.5 released for Python and Java, now with XMPP support
今回の目玉新機能としては、
XMPP Support
ということだそうです。
XMPPなんてよく知らなかったけど、GoogleTalkなんかでも利用されている
メッセンジャー系の仕様みたいです。
XMPPとは 【eXtensible Messaging and Presence Protocol】
また、今回は初のPythonとJavagの同時リリースということみたいです。
いままでJavaは遅れてのリリースだったのでPythonだけしかない機能が結構あったけど、
これはうれしい知らせです。
また、いつの間にかGoogle Plugin for Eclipse がEclipse 3.5 (Galileo)に対応したようなので
eclipseも3.5に更新しておきました。
3.5ではsoftware updateのメニュー構成が若干変わっていて少々戸惑いました。
インストール方法は、下記のページに書かれています。
Installing the Google Plugin for Eclipse
App Engine SDK 1.2.5 released for Python and Java, now with XMPP support
今回の目玉新機能としては、
XMPP Support
ということだそうです。
XMPPなんてよく知らなかったけど、GoogleTalkなんかでも利用されている
メッセンジャー系の仕様みたいです。
XMPPとは 【eXtensible Messaging and Presence Protocol】
また、今回は初のPythonとJavagの同時リリースということみたいです。
いままでJavaは遅れてのリリースだったのでPythonだけしかない機能が結構あったけど、
これはうれしい知らせです。
また、いつの間にかGoogle Plugin for Eclipse がEclipse 3.5 (Galileo)に対応したようなので
eclipseも3.5に更新しておきました。
3.5ではsoftware updateのメニュー構成が若干変わっていて少々戸惑いました。
インストール方法は、下記のページに書かれています。
Installing the Google Plugin for Eclipse
登録:
投稿 (Atom)
-
AutoItとは、何かというと、人の入力なしにどんどんアプリケーションを 進めていくための仕組みといったところでしょうか。 といっても、かなり高度で、ほとんど開発言語と言ってもいいように思う。 今回は、AutoItで画面操作を記録する方法について書いて見ます。 AutoItのダウ...
-
AutoItでコンポーネントをクリックする命令を送る方法 仕様リンク: http://www.autoitscript.com/autoit3/docs/functions/ControlClick.htm AutitV3 WindowInfoのControlのAdv...
-
拡張子の変更を行いたいなと思ってちょこっと書いてみた サンプルプルプログラム 実際これだと、.の入ったファイル名の場合には、誤動作しそうですが、 書いてみるとこんな感じになるのだろうか。 Delphiだと、ChangeFileExtというダイレクトな関数があるのだけど、 Java...