SQLの窓

2010年06月29日


ブラウザ毎の type=file フィールドの微妙な違い

File_ie

File_firefox

File_chrome


Chrome の ファイル参照ボタンが左側なのは少しびっくりしました。
フィールドの背景が灰色なのは、解りやすいようにスタイルで設定
しているからですが、IE は最初から灰色です。

問題は、Firefox で スタイルの width: が動かなかった事で、同じ
長さに揃えるのに size 要素が必要でした。
<input
	name="target"
	type="file"
	style='width:400px;background-color:#C0C0C0;'
	size="65"
>

以下は、size=65 を削除した結果です

File_firefox2



タグ:トラブル
posted by lightbox at 2010-06-29 15:54 | WEBブラウザ | このブログの読者になる | 更新情報をチェックする

2010年06月28日


VB.net : クライアントが送ったヘッダを表示するだけの HTTPサーバーU

2010/06/28 : 更新

POST(ファイルアップロードを含む) 処理に対応しています。単純な処理だと二つ問題が出たので、POST でうまく動かない場合がありました。

IE はヘッダ部分とデータ部分を分けて送信するようなのですが(必ずではありませんが、高い確率でそうなるようです)、ヘッダ部分が短い為、次のStream の読み込みでデータが残っているのに取得できないと言う現象が起こりましたので、二回目以降の Stream の読み込みの前で Sleep を追加しました。

また、データが完全に無いのにも関わらず、Stream を読んでしまうと戻って来ないので、読む前にデータが存在するかどうかをチェックするようにしました。これは、データの完全な終了は、やはり Content-Length を使う事でしか確実にならないと言う事も解りました。

※ このアプリケーションでは、Content-Length を使用していません
※ cURL を使用してアップロードする場合は、以下のオプションを設定して下さい
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Expect:'));

以下は cURL でファイルをアップロードしたところです

Easy_server_post

切りのいいところで受信バイトが変化していますが、必ずこうなるわけではありませんし、クライアントのアプリによっても違います。

関連する記事

ファイルアップロード



以下は通常の呼び出しです。ブラウザから呼び出すと、たびだびサイトのお気に入りのアイコンを読み出そうとしますので注意して下さい。

Vb_tcplistener

ブラウザでダウンロード
VB.net : クライアントが送ったヘッダを表示するだけの HTTPサーバー( TcpListener )
では、スレッドを使ったり表示部分に無駄が多かったりしたので、修正して機能追加しました

ソースコード

VB.net : クライアントが送ったヘッダを表示するだけの HTTPサーバーU


2010/06/23 更新分

※ Expires: -1 でキャッシュ制御( ブラウザ用 )
※ データ表示を受信全体から一気に表示
※ バッファを 1024 から 4096 に変更
※ 使用ポートを第一引数に指定可能
※ サーバーがすべてのネットワークインターフェイスで
※ クライアントによるネットワーク利用を待機する


posted by lightbox at 2010-06-28 20:59 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

テキストファイルとキャラクタセットの処理


VB.net : テキストファイルとキャラクタセット
通常は、バイナリを意識せずにテキストを相互変換します。 一旦メモリ上の UNICODE に変換すると思えば良いでしょう。 Byte 配列は、他の処理からそういう形でしか用意されない場合に使用 しますが、結局大差はありません。エンコード指定は同じですし、ただ バイトとしての長さを意識するくらいです。 ※ FileStream に読み込む場合、長さを指定しないと 0x00 が1バイト付加されてしまいました キャラクタセット ■ SHIFT_JIS ■ UTF-8( BOM あり ) ■ UTF-8( BOM なし ) ■ EUC-JP ■ UNICODE ■ JIS
posted by lightbox at 2010-06-28 08:37 | VB.NET : ベーシック | このブログの読者になる | 更新情報をチェックする

2010年06月27日


プログラマがぶちあたりそうな TCPDF の誤解


TCPDFに関する3つの誤解
デザイナさんにとっては、フォントはデザインの一部なので、作成したとおりにどこでもその状態が再現される必要があるので、フォントは埋め込む必要があります。 つまり、以下のようなお話 PDFフォント○×チェッカーについて - PDFフォント○×チェッカー しかし、プログラマの立場からすると、同じ環境である事を前提にして、複数の作業者にとってよりよい環境を作る事が「システム開発」ですから、フォントは埋め込まれたら困るわけです。 で、TCPDF は、そもそも FPDF から来ているわけですから、非埋め込みが本筋です。昔、フォントを埋め込んで、重い PDF 配布するような事を誰も考えませんし、ライセンスの問題もあります。 ( デザイン系はそのライセンスの問題はフォント購入時にクリアされています ) 結論から言えば、TCPDF は非埋め込み型です。サンプルに付いている日本語フォントは全て、非埋め込み型なのです
VBScript : TCPDFで MSフォントが使えるようにする全自動スクリプト
関連する記事 TCPDF 利用前の注意事項
posted by lightbox at 2010-06-27 15:59 | 記録 | このブログの読者になる | 更新情報をチェックする

2010年06月25日


XPモード + DB2 : Express-C 9.7 / 外部からの接続

Express-C 9.7 を XPモードへインストールして、仮想PC名を変更した後、
外部としてのWindows7 から ODBC ドライバで接続する為の手順

レジストリの変更

以下のキーの中にあるPC名部分を全部で4箇所変更する
HKEY_LOCAL_MACHINE\SOFTWARE\IBM\DB2\GLOBAL_PROFILE
HKEY_LOCAL_MACHINE\SOFTWARE\IBM\DB2\InstalledCopies\DB2COPY1\GLOBAL_PROFILE
最大注意点

データベースの作成を行った後、コントロールセンターでテーブルを所有する
ユーザ名を確認して、Windows7 からはそのユーザでログインしますが、パス
ワードは その名前を持つ XPモードの Windows のユーザーものを使用します

インストールした PC では、ユーザーとパスワードを入力しない場合、Windows
でインストールしたユーザを使うようです。
( XPモードのユーザのパスワードを変更したら、Windows7 の ODBC で前の
パスワードでログインできなくなりました )

そのユーザでデータベースを作成する事になるので、所有者はそのユーザである
為、ODBC から db2admin でログインしても、テーブルを参照できません。


ODBCドライバのみのダウンロード

IBM - DB2 9.7 Fix Pack 2 for Linux, UNIX, and Windows

Windows 32-bit, x86 => IBM Data Server Runtime Client
=> fix pack: DSClients-nt32-rtcl-9.7.200.358-FP002


ODBC DSN 作成

Db2_odbc_dsn

初めての作成時は、「追加」で、接続先の登録をします。これはあとから変更が
できなかったので注意して下さい。ポートは 50000 です。
( ※ 2回目以降は既存の接続先を選択できます )

この TCP/IP のタブで入力した内容は後から変更できません。この入力内容は
バイナリデータに保存されるようで、変更の手段がみつかりません。最悪は、
ODBC ドライバをアンインストールして再度インストールするしかありません

Db2_odbc_tcp

データベースは、実際の DB名で、別名は ODBC を作成している PC にとっての
別名のようで、後から 詳細タブの DBAlias で対象を変更できるようです。
( これは、TCP/IP タブの内容に対しての関連付けを行うもののようです )


Db2_odbc_cli


タグ:トラブル DB2
posted by lightbox at 2010-06-25 15:20 | 記録 | このブログの読者になる | 更新情報をチェックする

XPモード + PostgreSQL / 外部からの接続

Windows7 の XP モードでデータベースをインストールしておいて、
他の PC にコピーして利用する時に正しく動作する為の条件です

※ 但し、これは、一つの環境例であって、他の環境を否定するものではありません。

Windows

XPモードの仮想PCが固定IP である事
その Windows7 の設定で、XPモードが外部へのIPを持っている事
XPモードをコピー後、XPモードの仮想PCを固有のPC名に変更する事


PostgreSQL のバージョン

PostgreSQL 8.4.3, compiled by Visual C++ build 1400, 32-bit


pg_hba.conf
--------------------------------------------------------------
host    all         all         192.168.25.0/24          md5
host    all         all         127.0.0.1/32          md5
--------------------------------------------------------------


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

2010年06月22日


VB.net : クライアントが送ったヘッダを表示するだけの HTTPサーバー( TcpListener )

最新版はこちらです
VB.net : クライアントが送ったヘッダを表示するだけの HTTPサーバーU

クライアントからサーバーへ送られる送られる生データを確認
したかったので作成しました。コマンドブロンプトなので、CTRL+C で
強制終了しますが、ブラウザから http://127.0.0.1:50000/quit で正式に
終了します
ブラウザでダウンロード
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.Diagnostics
Imports System.Threading

Module MyModule

' ********************************************************
' 
' ********************************************************
Sub Main()

	' スレッド開始   
	Dim ThreadServer As New Thread(AddressOf ThreadEntry)
	ThreadServer.Start() 
	ThreadServer.Join()
	Console.WriteLine("処理は終了しました")

End Sub

Sub ThreadEntry()   

	Dim server As TcpListener = Nothing
	Dim header As String = _
		"HTTP/1.1 200 OK" + ControlChars.CrLf + ControlChars.CrLf + "response:OK"
	Try
		' 50000 番ポート使用
		Dim port As Int32 = 50000
		' ローカル
		Dim localAddr As IPAddress = IPAddress.Parse("127.0.0.1")

		' サーバーのインスタンスを作成
		server = New TcpListener(localAddr, port)
		' サーバー開始
		server.Start()

		' 読み込みバッファ
		Dim bytes(1024) As Byte
		' コマンドワーク
		Dim data As String = Nothing
		Dim bEnd As Boolean = False

		Do While True  

			' 接続待ち
			Console.WriteLine("Waiting ... ")

			' 待機( 接続されると次の行へ )
			Dim client As TcpClient = server.AcceptTcpClient()
			' 受信したので処理開始
			Console.WriteLine("Connected")
			Console.WriteLine("-----------------------------")

			data = ""  

			' 受信用ストリーム   
			Dim stream As NetworkStream = client.GetStream()   

			Dim i As Integer
			Dim cd As Integer = 0

			' **************************************************
			' ストリームからデータを取得( 初回 )
			' bytes : 1024
			' **************************************************
			i = stream.Read(bytes, 0, bytes.Length)

			Do While i <> 0
	
				' 最大1024バイトの処理
				cd = 0
				For idx As Integer = 0 To i - 1
	
					' Windows 改行の1バイト目
					If bytes(idx) = &HD Then
						' 改行数
						cd += 1
					End If
	
					' 改行後の最初
					If cd = 0 Then
						data += _
						 Encoding.ASCII.GetString(bytes, idx, 1)
					End If
	
					' Windows 改行の2バイト目
					If bytes(idx) = &HA And cd = 1 Then

						' 改行区切りでコマンドを取得
						Console.WriteLine("{0}", data)

						Dim Command As String() = data.Split(" ")
						If Command(0) = "GET" Then  
								data = Command(1).Substring(1)
						end if

						' quit で終了
						If data = "quit" Then
							bEnd = True
						End If
	
						' 行単位の処理の為の初期化
						cd = 0
						data = ""
					End If
				Next

				' 受信ヘッダ完了
				If data = "" Then  
					' OK を返す   
					Dim msg As Byte() = _   
					 Encoding.GetEncoding(932).GetBytes( _   
					 header)   
					stream.Write(msg, 0, msg.Length)   
					Exit Do  
				End If  
				' 残っているデータをストリームから取得
				i = stream.Read(bytes, 0, bytes.Length)
	
			Loop

			' 処理終了で接続解除してサービス終了
			client.Close()

			' quit で終了
			If bEnd Then
				Exit Do
			End If

		Loop

	Catch ex As SocketException
		Console.WriteLine("SocketException: {0}", ex)
	Finally
		server.Stop()
	End Try

End Sub

End Module



posted by lightbox at 2010-06-22 00:36 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

2010年06月21日


Python3.1 : URLを読み出して、バイナリのままファイル出力する

このサンプルでは、キャラクタセットの処理の一つとして使用していますが、
ファイルのダウンロードに使用します
0005.py ( utf8n )
#! /usr/bin/env python3.1

import urllib.request
import http.cookiejar

# Cookie handling for HTTP clients
# python312.chm::/library/http.cookiejar.html
cj = http.cookiejar.MozillaCookieJar()
opener = urllib.request.build_opener(
			urllib.request.HTTPCookieProcessor( cj )
		 )

# 最初の呼び出し
# ※ cookiejar を設定した opener で読みだす
try:
	print( "このヘッダーが送られます :" , opener.addheaders, end="\n\n" )
	response = opener.open("http://localhost/web/test/sv1.php")

# URL 関係のエラー処理
except urllib.error.URLError as e:
	print(e)
	exit()
# 一般のエラー処理
except Exception as e:
	print(e)
	exit()

# サーバーからの http ヘッダ
print( response.info() )

# バイナリとしての HTML ページを取得
html = response.read()

# html の キャラクタセット に合わせて decode して
# 文字列として取り込む
html_shift_jis = html.decode("shift_jis")

# そのまま、コマンドプロンプトへ出力
print( "-------------------------------------------------" )
print( html_shift_jis )
print( "-------------------------------------------------" )

# キャラクタセットを変換して出力
# ※ テキストのみ
print( html_shift_jis, file=open("html_shift_jis.txt","wt") )
print( html_shift_jis, file=open("html_euc_jp.txt","wt", encoding="euc_jp") )
# utf8n で出力されました
print( html_shift_jis, file=open("html_utf_8.txt","wt", encoding="utf_8") )

# バイナリの表示
print( "-------------------------------------------------" )
print( html )
print( "-------------------------------------------------" )

# バイナリのまま保存
# ※ キャラクタセットが解らない場合のファイル化
html_org = open("html_org.txt", mode='wb') 
html_org.write( html )

# クッキーを保存
# ※ cj.load( "ファイルのパス" ) が可能です
cj.save( "cookie_100621.sav", ignore_discard=True, ignore_expires=True )
Python3.1 マニュアル
The Python Standard Library ≫ 20. Internet Protocols and Support
20.22.2. FileCookieJar subclasses and co-operation with web browsers

The Python Standard Library ≫ 7. String Services ≫
7.6.3. Standard Encodings


posted by lightbox at 2010-06-21 16:08 | Python | このブログの読者になる | 更新情報をチェックする

Chrome5 でローカルファイルを開くと Frameへ の target が使えなくなっていますので

--allow-file-access-from-files という引数を使います

Flex の SDK や Java の SDK をローカルで表示するのに使っています。
ですから、ショートカットを以下のように変更します
"C:\Documents and Settings\lightbox\Local Settings\Application Data\Google\Chrome\Application\chrome.exe"  --allow-file-access-from-files "C:\user\doc\flex3jp_documentation\langref\index.html"
参考

Google Chrome 公式ヘルプフォーラム


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

2010年06月20日


Python3.1 : クッキーを保持して二つの URL にアクセスする

保存されるクッキーの形式は、「関連する記事」の、PHP でテストした cURL が保存する
形式とほぼ同じでした

▼ Python3.1
------------------------------------------------------------------------------------
    # Netscape HTTP Cookie File
    # http://www.netscape.com/newsref/std/cookie_spec.html
    # This is a generated file!  Do not edit.

localhost.local	FALSE	/web/test	FALSE		data	1234
localhost.local	FALSE	/web/test	FALSE		lightbox	winofsql

▼ PHP の cURL
------------------------------------------------------------------------------------
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

localhost	FALSE	/web/test/	FALSE	0	data	1234
localhost	FALSE	/web/test/	FALSE	0	lightbox	winofsql
------------------------------------------------------------------------------------

urllib.request.build_opener には、複数のハンドラを設定できます。
必要に応じて追加していく形になります( BASIC 認証や プロキシ等 )

HTTP ヘッダーの追加は、マニュアルにこっそり書かれていますが、
User-Agent: Python-urllib/3.1 は常にセットされるらしく、追加は
append メソッドで行います

関連する記事

VBScript/PHP クッキーデータが自動的に受け渡しされる事のテスト
VB.net : HttpWebRequest と HttpWebResponse でクッキーのやり取り
Python3.1 : mixi ボイスへ投稿
0004.py ( utf8n )
#! /usr/bin/env python3.1

import urllib.request
import http.cookiejar

# **********************************************************
# Cookie handling for HTTP clients
# python312.chm::/library/http.cookiejar.html
# **********************************************************
cj = http.cookiejar.MozillaCookieJar()
opener = urllib.request.build_opener(
			urllib.request.HTTPCookieProcessor( cj )
		 )

# **********************************************************
# 最初の呼び出し
# ※ cookiejar を設定した opener で読みだす
# **********************************************************
try:
	response = opener.open("http://localhost/web/test/sv1.php")
except urllib.error.URLError as e:
	print(e)
	exit()

html = response.read()

# **********************************************************
# サーバーからの http ヘッダ
# **********************************************************
print( response.info() )

# **********************************************************
# 内容
# **********************************************************
print( html.decode() )



# **********************************************************
# 2回目の呼び出し
# ※ cookiejar を設定した opener で読みだす
# ※ ヘッダーの追加は、opener.addheaders
# **********************************************************
opener = urllib.request.build_opener(
			urllib.request.HTTPCookieProcessor( cj )
		 )
try:
	opener.addheaders.append(('test-header', 'Python3.1'))
	response = opener.open("http://localhost/web/test/sv2.php")
except urllib.error.URLError as e:
	print(e)
	exit()

html = response.read()

# **********************************************************
# サーバーからの http ヘッダ
# **********************************************************
print( response.info() )

# **********************************************************
# 内容
# **********************************************************
print( html.decode() )

# **********************************************************
# クッキーを保存
# ※ cj.load( "ファイルのパス" ) が可能です
# **********************************************************
cj.save( "cookie_100620.sav", ignore_discard=True, ignore_expires=True )




posted by lightbox at 2010-06-20 19:34 | Python | このブログの読者になる | 更新情報をチェックする
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 ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり