SQLの窓

2009年09月03日


JavaScript : オブジェクトとインスタンスとプロパティの継承

Object オブジェクトは、JavaScript の全てのオブジェクトの元となるオブジェクトですが、
JavaScript はオブジェクトに対してプロパティを自由に追加できます。

Object.myData = 20090903;
Object.myFunc = function() {
alert(this.myData);
};

しかし、このプロパティは Object から参照した時に利用できますが、インスタンス化
したオブジェクトからは参照できません

Object.myData = 20090903;
Object.myFunc = function() {
alert(this.myData);
};
obj = new Object();
.
.
.

<INPUT type=button value="実行1" onClick='Object.myFunc();'>
<INPUT type=button value="実行2" onClick='obj.myFunc();'>

※ 実行1は、20090903 が表示される
※ 実行2は、エラー

重要
インスタンスからも利用できるようにするには、prototype プロパティにセットします。
この場合、同じ名前でセットされていた値は、prototype にセットされた内容で上書き
されます( ローディング後に上書きされるようです )

Object.myData = 20090903;
Object.myFunc = function() {
alert(this.myData);
};
Object.prototype.myData = 20091231;
Object.prototype.myFunc = function() {
alert(this.myData+"/prototype");
};
obj = new Object();
.
.
.

<INPUT type=button value="実行1" onClick='Object.myFunc();'>
<INPUT type=button value="実行2" onClick='obj.myFunc();'>

※ 両方とも 20091231/prototype が表示される

さらに、インスタンスにもプロパティを追加できます
Object.myData = 20090903;
Object.myFunc = function() {
alert(this.myData);
};
Object.prototype.myData = 20091231;
Object.prototype.myFunc = function() {
alert(this.myData+"/prototype");
};
obj = new Object();
obj.myFunc2 = function() {
alert(this.myData+"/インスタンス");
};
obj2 = new Object();

この場合、obj のみに追加され事になります( obj2 にmyFunc2 はありません )

重要
そして、結果的に、Object.prototype に追加されたものは、他のオブジェクトで
使用できる事になります

String.myFunc();
"abc".myFunc();
x = new String();x.myFunc();

いずれも同じ結果となります



posted by lightbox at 2009-09-03 11:13 | JavaScript オブジェクト | このブログの読者になる | 更新情報をチェックする

JavaScript : グローバル変数を使わずに、window オブジェクトのプロパティを使う

ECMAScript の仕様は良く解りませんが、ちょっと調べてみても グローバルな変数は、
window の名前空間で参照されますが、列挙できません。
だったら最初から window に登録すればいいのですが、他とのつりあい上少し注意
する必要があります。
window.myData = "123";

window.isDate = function (str) {
	if ( str == "" ) {
		return true;
	}
	if ( !str.match(/^\d{4}\/[\d]+\/[\d]+$/) ) { 
		return false; 
	} 
	var parts = str.split( "/" );
	var nYear = Number(parts[0]); 
	var nMonth = Number(parts[1]) - 1;
	var nDay = Number(parts[2]);
	// 月,日の妥当性チェック 
	if ( 0 <= nMonth && nMonth <= 11 && 1 <= nDay && nDay <= 31 ) { 
		var dt = new Date(nYear, nMonth, nDay); 
		if( isNaN(dt) ) { 
			return false; 
		}
		else if(
					dt.getFullYear() == nYear &&
					dt.getMonth() == nMonth &&
					dt.getDate() == nDay ) {
			return true;
		}
		else{ 
			return false;
		}
	}
	else{ 
		return false;
	}
};

String.prototype.isDate = function () {
	var str = this.valueOf();
	if ( str == "" ) {
		return true;
	}
	if ( !str.match(/^\d{4}\/[\d]+\/[\d]+$/) ) { 
		return false; 
	} 
	var parts = str.split( "/" );
	var nYear = Number(parts[0]); 
	var nMonth = Number(parts[1]) - 1;
	var nDay = Number(parts[2]);
	// 月,日の妥当性チェック 
	if ( 0 <= nMonth && nMonth <= 11 && 1 <= nDay && nDay <= 31 ) { 
		var dt = new Date(nYear, nMonth, nDay); 
		if( isNaN(dt) ) { 
			return false; 
		}
		else if(
					dt.getFullYear() == nYear &&
					dt.getMonth() == nMonth &&
					dt.getDate() == nDay ) {
			return true;
		}
		else{ 
			return false;
		}
	}
	else{ 
		return false;
	}
};

window はそもそも、JavaScript のプラットホームですから特殊です。
prototype を使うとIEではエラーは出無いのですが、なんかおかしくなります。
IE 以外ではエラーですし。

String は、JavaScript のオブジェクトなので、普通に prototype 経由で登録します。

何れも、for( a in window )、for( a in String.prototype ) で参照可能です

関連する記事
prototype.js で、$(id) 関数が name 属性のみの場合 IE 以外で使え無いのを
とりあえず使えるようにする




posted by lightbox at 2009-09-03 01:14 | JavaScript オブジェクト | このブログの読者になる | 更新情報をチェックする

prototype.js で、$(id) 関数が name 属性のみの場合 IE 以外で使え無いのをとりあえず使えるようにする


// *********************************************************
// 関数
// *********************************************************
function doAction( strValue ) {

	($$("INPUT")).each(function(Element){Element.setAttribute("id",Element.name)});
	($$("TEXTAREA")).each(function(Element){Element.setAttribute("id",Element.name)});

	var str = "";
	for (variable in window) {
		str += ( variable + "\n");
	}

	alert( isDate($("inField").value) )
	$("inText").value = str;

	return true;
}

9/1 で、prototype.js が、1.6.1 になっていますが、この部分は変わらないようです。

IE では、name 属性の記述のみでも、id 属性は自動的に作成されて( 逆も同じ )常に $(id) 関数は使えるのですが、Mozilla ではそうはいかないので、とりあえず、全ての入力関係の name を id にセットします。( 実際は、select 要素も必要ですが )

とは言うものの、殆ど使う場面は無いと思いますが、いろいろテストする時に、少しは楽になると思います。


タグ:prototype.js
posted by lightbox at 2009-09-03 00:58 | prototype.js | このブログの読者になる | 更新情報をチェックする

2009年09月02日


PHP : 暗号化と複合( libmcrypt )

VB.NET でやるのも少し面倒そうだったので。バッチ処理でパスワードがバレバレになるのを防ぐ為に、まずは暗号化のテストです。途中の暗号化された文字列をbase64 でエンコードして取り出して使用します。
( こんな感じ : YjAbG+kJK/Lf4DL+0vlStkAk0cKP8+VZBZ6kIQ== )
<?
// phpinfo() で確認できたアルゴリズム
// cast-128 gost rijndael-128 twofish arcfour cast-256 loki97 rijndael-192
// saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish 
// enigma rc2 tripledes 

// php_mcrypt

	// 暗号モジュールをオープンします
	// マニュアルのディレクトリ指定は動作しませんでした
	// おそらく、libmcrypt.dll は、php と同じ場所で動作するようです
	// php 4.4.4 では全て同じディレクトリに入れて動きました。
	$td = mcrypt_module_open('rijndael-256', '', 'ofb', '');

	// mcrypt_enc_get_iv_size($td) で取得できる長さの文字列
	$iv = "12345678123456781234567812345678";
	$ks = mcrypt_enc_get_key_size($td);

	// キーを作成します
	$key = substr(md5('とても大事なキーです'), 0, $ks);

	// 暗号化処理を初期化します
	mcrypt_generic_init($td, $key, $iv);

	// データを暗号化します
	$encrypted = mcrypt_generic($td, 'とてもとても大事なデータです');

	// 暗号化ハンドラを終了します
	mcrypt_generic_deinit($td);

	// 復号用の暗号モジュールを初期化します
	$iv = "12345678123456781234567812345678";
	mcrypt_generic_init($td, $key, $iv);

	// 暗号化された文字列を復号します
	$decrypted = mdecrypt_generic($td, $encrypted);

	// 復号ハンドルを終了し、モジュールを閉じます
	mcrypt_generic_deinit($td);
	mcrypt_module_close($td);

	// 文字列を表示します
	echo trim($decrypted) . "\n";

?>


プログラムではそれを複合して元に戻して使おうというわけです。$iv は、モジュールを初期化する文字列でなんでもいいみたいなので、PHP マニュアルのサンプルで使用されていた関数を使用せずに適当な文字列を使用しています。しかし、この文字列と秘密のキーと二つ無いと復号はできません。

動作環境は、けっこう適当でバグ持ちのようで、WEB で古い記事を見ると前からそんな感じみたいです。Windows モジュールってけっこうこういうのは多いみたいですね

php5 でテストした後、php4.4.4 でもテストしています。これは、Bambalam PHP EXE Compiler を使って秘密のキーを隠蔽しようと思ってるからなんですが、テストはこれからです


タグ:PHP
posted by lightbox at 2009-09-02 23:24 | PHP | このブログの読者になる | 更新情報をチェックする

Seesaaのリンク用HTMLテンプレート

今使っているものですが、タイトルの画像を変えると雰囲気も変わります
http://winofsql.jp/image/h5.png

これは、GIMP で作ったものですが、グラデーションを塗っただけです
※ GIMP2 は、ポータブル版(USBメモリ用にチューニングされたもの)がおすすめです

行単位の横三角も同様です
http://winofsql.jp/image/sab.gif

<style type="text/css"> 
.btitle {
	font-size:12px;
	font-weight:bold;
	padding: 0 0 0 10px;
	padding-left:10px;
	line-height:26px;
	height: 26px;
	color:black;
	border-style:solid;
	border-width:1px;
	border-color:#9192A3;
	text-align:left;
	width:98%;
	background:url(http://winofsql.jp/image/h5.png) repeat-x 0px 0px;
}

.btitle a {
	color:navy;
}
</style> 

.btitle a は、タイトル内にリンクを置いた時の色を設定しています
<br><br>
<div class="btitle"><% content.title %></div>
<% content.header -%>
<div class="side">
<table>
<% loop:list_link -%>
<tr><td style='vertical-align:text-top;'><img style='position:relative;margin-right:4px;top:2px;' src="http://winofsql.jp/image/sab.gif" border="0"></td><td><a style='font-size:12px;' href="<% content_link.url %>" <% if:content_link.target %>target="_blank"<% /if %>><% content_link.title %></a></td></tr>
<% /loop -%>
</table>
<% content.footer -%>
</div>




Seesaa独自タグ簡易リファレンス

タグ:Seesaa
posted by lightbox at 2009-09-02 10:09 | Seesaa プログ管理支援 | このブログの読者になる | 更新情報をチェックする

2009年09月01日


【更新】laylaClass バッチ処理支援パッケージ

2009/09/01 : Vista で動かすと多少不具合があったので修正しました

2009/08/27 : コマンドを追加しました
cur    : 現在のディレクトリをタイトルに表示する
pl     : パス環境変数の内容を分解して表示
inst_dirpopup
※ ディレクトリのポップアップメニューに
※ ユーザーコマンドプロンプトの起動コマンドを登録します
uninst_dirpopup
※ ディレクトリのポップアップメニューから
※ ユーザーコマンドプロンプトの起動コマンドを削除します
Usercmd

ブラウザでダウンロード
インストールディレクトリは、Program Files と同じドライブに
laylaClass\bin を作成し、バッチファイルや vbs をダウンロード
してこのディレクトリを ユーザの PATH 環境変数の最後にセットします。

インストール後は、ファイル名を指定して実行で c と入力すると、
専用のコマンドプロンプトが表示されますので、h と入力してコマンド
の一覧を確認して下さい。

どれも単純なものなので、参考にして自分専用のコマンドが作れます。

( 複雑なのは、httpget.vbs と dump_c.vbs のみです )
h      : この一覧を表示
-------------------------------------------------------
new    : 新しいコマンドプロンプト( 同一ウインドウ )
q      : new で実行したコマンドプロンプトの終了
-------------------------------------------------------
p      : プロンプトをシンプルに
pr     : 通常のプロンプト
dt     : 現在の日付と時間
dirall : 隠しファイルも全て表示( 引数可 )
ip     : ipconfig /all を実行
fcb    : ファイル比較の バイナリオプションを指定済
cur    : 現在のディレクトリをタイトルに表示する
pl     : パス環境変数の内容を分解して表示
-------------------------------------------------------
join 結合するファイル 結合するファイル 結果ファイル
※ 二つのファイルをバイナリ結合する
-------------------------------------------------------
bak コピー元ディレクトリ コピー先ディレクトリ
※ xcopy で新しいファイルのみをコピーします
※ コピー先ディレクトリは存在しない場合は作成されます
-------------------------------------------------------
cols [n]
※ 引数無しでカラムを80に/ 指定した場合はそのサイズ
-------------------------------------------------------
httpget url [savepath]
※ URL のダウンロード( 2 〜 3 メガバイトまで )
-------------------------------------------------------
dump ファイルのパス
※ 一般的なフォーマットでダンプ出力します
※ 大きなファイルは more にパイプで渡すのが一般的です
-------------------------------------------------------
tr
※ tracert の別名
-------------------------------------------------------
hosts
※ メモ帳で hosts ファイルを開きます
-------------------------------------------------------
以下は windows のコマンド
cls    : 画面クリア
exit   : コマンドプロンプトの終了
ver    : バージョン表示
set    : 環境変数の一覧
-------------------------------------------------------
コマンド履歴は F7
日本語入力は ALT+半角/全角
-------------------------------------------------------
inst_dirpopup
※ ディレクトリのポップアップメニューに
※ ユーザーコマンドプロンプトの起動コマンドを登録します
uninst_dirpopup
※ ディレクトリのポップアップメニューから
※ ユーザーコマンドプロンプトの起動コマンドを削除します
-------------------------------------------------------
関連する記事
laylaClass バッチ処理支援パッケージのアンインストール
laylaClass バッチ処理支援パッケージにおける書庫解凍の手法


タグ:バッチ処理
posted by lightbox at 2009-09-01 16:51 | フリーソフト | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり