SQLの窓

2010年02月28日


JavaScript : prototype.js(1.6.1) の Try.these と XMLHttpRequest

var Try = {
	these: function() {
		var returnValue;

		for (var i = 0, length = arguments.length; i < length; i++) {
			var lambda = arguments[i];
			try {
				returnValue = lambda();
				break;
			} catch (e) { }
		}

		return returnValue;
	}
};

XML の HTTP 通信を行う為のオブジェクトを取得する為のメソッドとしてしか
使用していないようなのですが、使い方としては引数に無名関数を並べて、
その中でオブジェクトを新規作成するコードを書いて return させています。
その結果、最初に存在するオブジェクトを返すという処理になります。

実際は以下のように使われています
var Ajax = {
	getTransport: function() {
		return Try.these(
			function() {return new XMLHttpRequest()},
			function() {return new ActiveXObject('Msxml2.XMLHTTP')},
			function() {return new ActiveXObject('Microsoft.XMLHTTP')}
		) || false;
	},

	activeRequestCount: 0
};

一つ目は、Mozilla 系のブラウザ用で、二つ目が IE 用。
三つ目は相当古い Windpos 用でほぼ使われないはずです。
ですから、自分で XML の HTTP 通信のオブジェクトを取得
したい場合は、IE かそうでないかで普通に取得すればいいと思います


posted by lightbox at 2010-02-28 18:34 | prototype.js | このブログの読者になる | 更新情報をチェックする

2010年02月27日


古いシステムメンテの為に古〜いPCに再び命を吹き込む

そもそも、Access2000 で作られた mdb のアプリケーションの変更の為に
1年以上電源も入れなかった、Windows2000 に再び灯を入れて、まずする事
はセキュリティ関係のアップデート。

そのPC(ソーテック)が眠る前には無かった脅威に対する処理。

1) Flash を最新に

更新そのものは問題は無かったですが、PC が非力な為、というかマウスや
ディスプレイが一つしか無いので UltraVNC 経由の作業は時間かかりすぎ。
さらにいつものように更新直後はキャッシュのかげんで最新表示はされません。
ソフトウェアの追加と削除で最新である事を確認して IE 再起動。

2) Acrobat Reader の更新

これは 8 が入っていたので、そのまま更新したら再起動を求めるダイアログ
が2回目の更新の後に出続けたので、もう使わないので削除。後その原因となる
レジストリも削除。

3) Windows Update

通常無効にしてあるので、自動にして起動してから Microsoft にアクセスして
カスタムで内容を一応確認してから大量の更新。全て UltraVNC で難なく終了。


その作業をしながらメインの XP で、Access 2003 によるロードテストは、
セキュリティを「低」にすると動作しているもよう。コーディングとテスト
はこちらでも可能なようですが・・・・ Access2000 の mde は動きません



タグ:トラブル
posted by lightbox at 2010-02-27 01:28 | 記録 | このブログの読者になる | 更新情報をチェックする

2010年02月19日


JavaScript : ブックマークレットに必要な戻り値を戻さない処理の実装方法

一般的な方法として void(0) があり、処理の最後が値を戻さないようにする必要があるので、通常以下のように記述されます。
javascript:処理;void(0);

※ javascript:処理;undefined という記述方法もあります
しかし、void メソッドは引数に処理を引き渡せて、戻り値を戻さないので以下のようにも書けます
javascript:void(処理);

最後の処理が戻り値を返さないメソッドならいいので、void(0) で無く例えば alert("文字列") でもかまいませんが、以下のような書き方もあります
javascript:(function(){処理})();



タグ:javascript
posted by lightbox at 2010-02-19 21:25 | ブックマークレット | このブログの読者になる | 更新情報をチェックする

2010年02月18日


サーバーのログからインジェクションらしきものを選択する正規表現

以下はそれほど厳密ではありません。
%20 がポイントで、これが ? 以降に含まれると怪しいです。

ツールは JGREP2 を使っています。
GET \/\S+\.\S+\?\S+%20


posted by lightbox at 2010-02-18 00:57 | 記録 | このブログの読者になる | 更新情報をチェックする

2010年02月11日


PHP : 良く使うオンラインマニュアルのリンク

基本的な事ばかりですが、初心者的では無く、
開発上基本的なリンクです。

オンラインマニュアルはいざ探すとなると苦労します。
CHM のページで検索で探して、ページを取り出して .html を
.php に変えるとすぐ見つかります。

以下のリンクからダウンロードできる CHM は少し古いですが、
リビルドしているので日本語は化けていません。


タグ:PHP
posted by lightbox at 2010-02-11 20:35 | 記録 | このブログの読者になる | 更新情報をチェックする

JavaScript : HTMLの要素内のイベント記述で複雑な処理を書く方法( 関数を定義したく無い場合 )

良く使う INPUT 要素のボタン内の onClick イベントのサンプルですが、
他の要素でも同じです。onClick='' のシングルクオート内は、改行が
あってもスクリプトなので、(function(){})() という記述で変数もローカル
扱いで処理できます。

但し、'' 内で '' を使う場合は、&#39;&#39; というように書く必要が
あります。また、(function(){})() 内に要素自身を渡したい場合は、
(function(obj){})(this) で、obj で参照できます。
<INPUT type="button" value="IFRAME追加" onClick='
(function(){
	var str="";
	str+="<IFRAME \n";
	str+="	src=\"http://winofsql.jp/\" \n";
	str+="	name=\"myframe\" \n";
	str+="	frameborder=\"no\" \n";
	str+="	scrolling=\"no\" \n";
	str+="	width=\"590\" \n";
	str+="	height=\"800\" \n";
	str+="></IFRAME> ";
	var txt = document.getElementsByName("txt03")[0].value;

	if ( txt != &#39&#39 ) {
		txt = txt + "\n";
	}

	document.getElementsByName("txt03")[0].value = txt + str;
})();
'
>



タグ:javascript
posted by lightbox at 2010-02-11 16:21 | JavaScript オブジェクト | このブログの読者になる | 更新情報をチェックする

JavaScript : 最後にクリックしたテキストフィールドを保存する

onClick では、左クリックのみ対象ですが、右クリックが必要な場合は、
onMousedown を使うといいと思います。変数や関数は window オブジェクト
に lbox20100211 というプロパティを作成して登録しています。保存される
オブジェクトは、lbox20100211.cur にセットされます。
// window オブジェクトにグローバルな名前空間を作成
// ※ lbox20100211
window.lbox20100211 = {};

// クリック時のイベント
// lbox20100211.cur に最後にクリックされたフィールドを保存する
lbox20100211.clickEvent = function(e) {

	var userAgent = window.navigator.userAgent.toLowerCase();

	// クリックされたフィールドを保存
	if (userAgent.indexOf("msie") > -1) {
		window.lbox20100211.cur = window.event.srcElement;
	}
	else {
		window.lbox20100211.cur = e.currentTarget;
	}

}

// ページロード時のイベント
lbox20100211.registClickEvent = function() {

	var userAgent = window.navigator.userAgent.toLowerCase();

	var obj = document.getElementsByTagName("INPUT");
	var len = obj.length;
	var i,str;

	// INPUT 要素を全て取得
	for( i = 0; i < len; i++ ) {

		// type が text のみ取得
		str = obj[i].getAttribute( "type" )
		if ( str == null ) {
			str = "TEXT";
		}
		if ( str.toUpperCase() == "TEXT" ) {
			if (userAgent.indexOf("msie") > -1) {
				obj[i].attachEvent('onclick', lbox20100211.clickEvent);
			}
			else {
				obj[i].addEventListener('click', lbox20100211.clickEvent, false);
			}
		}
	}

}

// ページロードが終了した時に実行する処理を登録
if (window.attachEvent){
	window.attachEvent('onload', lbox20100211.registClickEvent);
}
else {
	window.addEventListener('load', lbox20100211.registClickEvent, false);
}



タグ:javascript
posted by lightbox at 2010-02-11 01:18 | JavaScript DOM | このブログの読者になる | 更新情報をチェックする

2010年02月06日


Mechanize : クラスのメソッドをオーバライドしてヘッダーを送れるようにしてiPhoneとしてサーバに認識させる

このサンプルの処理では、iPhone である必要は無いのですがあくまで
サンプルとして処理されています。実際は、Seesaa の自分のブログを
呼び出して、iPhone 用のページが返される事を確認しました

post メソッドは元々のメソッドのコードからファイルアップロード
の機能を省いてヘッダーを渡すようにしただけです。

post_form は、元々ヘツダーを渡せるのですが、プライベートメソッド
なのでこのような使い方になります。
#!/usr/local/bin/ruby
print "Content-type: text/html; Charset=shift_jis\n\n"

# エラーを出力する為の処理
$stderr = $stdout

# Ruby 本体をWEBアプリとして使う時の為の定義
# ( ここでは使っていません )
require "cgi"
cgi = CGI.new
require 'uri'

# さくらインターネットで WWW::Mechanize をインストールして
# 利用するのに必要だった定義
ENV['GEM_HOME']="/home/lightbox/gems"
$LOAD_PATH.push('/home/lightbox/lib')

require 'rubygems'
require 'mechanize'
# **********************************************************
# 処理本体
# **********************************************************

# WWW::Mechanize の post メソッドをオーバーライド
# ※ ファイルのアップロードは使わないので削除しています
# ※ カスタムヘッダーを渡せるようにしています
class WWW::Mechanize 
	def post(url, query= {}, headers = {}) 
		node = {} 
		# Create a fake form 
		class << node 
			def search(*args); []; end 
		end 
		node['method'] = 'POST' 
		node['enctype'] = 'application/x-www-form-urlencoded' 
 
		form = Form.new(node) 
		query.each { |k,v| 
			form.fields << Form::Field.new(k.to_s,v) 
		} 
		post_form(url, form, headers) 
	end 
end 

agent = WWW::Mechanize.new

# 呼び出しタイムアウト設定
# ( \ で継続行 )
agent.open_timeout \
	= 60 * 10
# ( = 演算子で継続行 )
agent.read_timeout =
	60 * 10

url = 'WEBアプリケーションのURL'
fld = {}
fld['SendButton'] = '一括'
fld['CommandField'] = 'パスワード'
fld['mid'] = 'CprogBase'

custom_header = {}
custom_header['User-Agent'] = 
'Mozilla/5.0 ' \
'(iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us)' \
' AppleWebKit/528.18 ' \
'(KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16'

page = agent.post(url, fld, custom_header)

print "ok"

関連する記事

Ruby : 自作WEBアプリケーションの呼び出しに使って機能を拡張する




タグ:ruby Mechanize
posted by lightbox at 2010-02-06 16:40 | Ruby | このブログの読者になる | 更新情報をチェックする

Ruby : 自作WEBアプリケーションの呼び出しに使って機能を拡張する

Ruby の Mechanize を使って自分が作った WEBアプリケーションの機能拡張を比較的簡単に実装できます。この例のアプリケーションの処理がある分類毎なので、それをある程度一括で処理してしまおうというものです。運用上の処理として、対象が多くなると手作業では大変になりますので、利用してみました。

注意するのは、この場合サーバから Perl の cgi を呼び出すので、あまり大量の処理を行うとサーバーに負荷をかけすぎる事になるので、注意して数を調整する配慮は必要となります。

ここで指定しているタイムアウトは、CPU の負荷では無く、一回の呼び出しがネットワークなのでそのタイムアウトになります。

ここで利用している agent.post は、標準のメソッドですが、これを拡張する方法もあります。

※ 以下のサンプルコードでは、継続行の使い方のガイドラインも示しています
#!/usr/local/bin/ruby
print "Content-type: text/html; Charset=shift_jis\n\n"

# エラーを出力する為の処理
$stderr = $stdout

# Ruby 本体をWEBアプリとして使う時の為の定義
# ( ここでは使っていません )
require "cgi"
cgi = CGI.new
require 'uri'

# さくらインターネットで WWW::Mechanize をインストールして
# 利用するのに必要だった定義
ENV['GEM_HOME']="/home/lightbox/gems"
$LOAD_PATH.push('/home/lightbox/lib')

require 'rubygems'
require 'mechanize'
# **********************************************************
# 処理本体
# **********************************************************

agent = WWW::Mechanize.new

# 呼び出しタイムアウト設定
# ( \ で継続行 )
agent.open_timeout \
	= 60 * 10
# ( = 演算子で継続行 )
agent.read_timeout =
	60 * 10

# ループ処理用配列
mid = [ 
'CprogBase' \
,'CommonSpec' 
]

# 以下だと継続行はいりません
mid = [ 
'CprogBase',
'CommonSpec' 
]

p mid
print "<br>"

# 配列の要素ぶんの繰り返し処理
(mid.length).times { |i|
	agent.post('WEBアプリケーションのURL', 
		{ 
			'SendButton' => '一括', 
			'CommandField' => 'パスワード', 
			'mid' => mid[i] 
		})
	print "#{mid[i]}<br>"
}

print "ok"

関連する記事

Mechanize : クラスのメソッドをオーバライド
してヘッダーを送れるようにしてiPhoneとしてサーバに認識させる




タグ:ruby Mechanize
posted by lightbox at 2010-02-06 15:19 | Ruby | このブログの読者になる | 更新情報をチェックする

2010年02月03日


JavaScript : CSV 形式のデータのフィールド分割

正規表現でどうするか質問されたので、ちょっと調べてみると正規表現で無理しているものしか見当たらなかったので作りました。運用した事無いので多少の調整は必要かもしれませんが、これなら誰でも改造できると思います
// 対象文字列
var x = 'a,"b,b",",,,",c';

// まず、" で挟まれた文字列を取り出す
var a = x.match(/"[^"]+"/g);

// " で挟まれた文字列をデータ上存在しない文字で置き換える
var b = x.replace(/"[^"]+"/g,String.fromCharCode(0x1a));

// その文字列をカンマで分割
var y = b.split(",");

// 分割されたフィールドに置き換えられた文字列を戻す
var n = 0;
for( i = 0; i < y.length; i++ ) {
	if ( y[i] == String.fromCharCode(0x1a) ) {
		y[i] = a[n];
		n++;
	}
}

// 結果の確認
str = "";
for( i = 0; i < y.length; i++ ) {
	str += y[i]+"\n";
}
alert(str)



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

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

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

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

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


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

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

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

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

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


Windows
container 終わり

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

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
PHP正規表現チェッカー
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり