SQLの窓

2010年06月10日


SQL : cross join でテストデータを大量に作成する

古い書き方は、from の後ろで 社員マスタ A,社員マスタ B です
select A.* from 社員マスタ A cross join 社員マスタ B

※ 50件のデータに対して、仮想的に 2500 件のデータを用意できます
( さらに結合すれば 50倍です )

テーブル名の後ろの A と B は別名で、一つの SQL 内で本来一つであるテーブルを区別する為に違う名称を設定して記述します
タグ:SQL
posted by lightbox at 2010-06-10 12:18 | 記録 | このブログの読者になる | 更新情報をチェックする

PHP : include_path の設定

注意事項

1) Windows と Unix で違う部分を吸収する為に PATH_SEPARATOR を使う
2) 既に設定されている include_path を上書きしない

※ 以下は TCPDF のライブラリ参照です
$path = "C:\user\lightbox\web\tcpdf_5_3_005";
set_include_path(get_include_path() . PATH_SEPARATOR . $path);



posted by lightbox at 2010-06-10 11:35 | PHP + 特記事項 | このブログの読者になる | 更新情報をチェックする

2010年06月07日


Ruby : 日本語の正規表現はバイナリで

Ruby 内で、日本語の正規表現を正しく動作させる為に、先頭に
#!/usr/local/bin/ruby -Ke

というような記述をすると良いと・・・言ってるのをみかけましたが、
対象文字列が SHIFT_JIS で書かれていて、ソースが EUC-JP ではどう
にもならなかったので、以下のように普通にバイナリ指定しました。

このほうが確実のような気がします。
というか、Ruby は飛び道具という認識しか無いので動作する事が
大前提で、WEB アプリケーションは他の言語にまかせたほうがいい
と思います。

以下は、Seesaa の投稿処理です。
# **********************************************************
# Seesaa 処理関数
# $agent はグローバル変数
# **********************************************************
def seesaaAction(blog_id,blog_nm,opt) 


	# ブログ選択
	page = $agent.get($seesaa_select_blog + blog_id)
	# アクセス解析デフォルトページ( ページ別 )
	page = $agent.get($seesaa_access_default)

	# 合計の 訪問者数 と ページビュー を取得する正規表現( m は "." が改行にマッチ )
	/log\-total\-text.+log\-total\-num">.+?>(.+?)<.+log\-total\-num">.+?>(.+?)</m =~ page.body
	# Ruby 側確認用表示
	$ucnt = $1
	$vcnt = $2

	if opt == '1' then
		# 実際のアクセス数の計算用
		page = $agent.get($seesaa_access_os)
		# SHIFT_JIS で不明の先頭コードである \x95 を処理
		/log\-total\-num">(.+?)<.+?\x95.+?align="right".+?nbsp;(.+?)</m =~ page.body

		$realcnt = ($1.to_i-$2.to_i).to_s
	else
		$realcnt = 0.to_s
	end

	print blog_nm + "   " +  $ucnt + "/" + $vcnt + "<br>\n"
	print "realaccess : " +  $realcnt + "<br>\n"

	# DB 更新用 php 呼び出し
	$agent.get($seesaa_dbupdate+blog_id+'&ucnt='+$ucnt+'&vcnt='+$vcnt+'&realcnt='+$realcnt)


end

# **********************************************************
# Seesaa 定数
# **********************************************************
$seesaa_select_blog	= "https://blog.seesaa.jp/pages/my/blog/home/?blog_id="
$seesaa_access_default	= "https://blog.seesaa.jp/pages/my/blog/access_log/report/index?log_type=file"
$seesaa_access_os	= "https://blog.seesaa.jp/pages/my/blog/access_log/report/index?log_type=os"
$seesaa_dbupdate	= "http://.../seesaa_create_log.php?blog_id="


関連する記事

Ruby+Mechanize : Seesaaアクセス解析情報


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

2010年06月05日


VB.net : 画像の上にテキストを半透明で出力する

単純出力( 半透明なし )

Winofsql_text1


半透明出力用の背景透明の画像

Text_on_img

半透明出力

Winofsql_text3
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Drawing.Text

Module MyModule

' ********************************************************
' 画像の上にテキスト
' ********************************************************
Sub Main()

	' 文字列の配列
	Dim argv As String()

	' コマンドラインの取得
	argv = System.Environment.GetCommandLineArgs()

	' 引数がある場合
	if System.Environment.GetCommandLineArgs.Length > 1 then
		Console.WriteLine(argv(1))
	else
		Console.WriteLine("変換するビットマップファイルを指定して下さい")
		Return
	end if

	' ********************************************************
	' 単純書き出し
	' ********************************************************
	' Bitmap をファイルのパスから作成
	Dim bmp As New Bitmap(argv(1))
	' キャンバス
	Dim gra As Graphics = Graphics.FromImage(bmp)

	' 書き出すテキストのフォントを作成
	Dim myFont As Font = New Font(FontFamily.GenericSansSerif, _
		20, FontStyle.Bold)

	' 白色で書きだす
	Dim myBrush As New SolidBrush(Color.FromArgb(255,255,255))

	' アンチエイリアス設定
	gra.TextRenderingHint = TextRenderingHint.AntiAliasGridFit

	' 書き出し
	gra.DrawString( "lightbox", myFont, myBrush, 70, 28 )

	bmp.Save((argv(1).Split("."))(0) + "_text1.png", Imaging.ImageFormat.Png)

	bmp.Dispose()

	' ********************************************************
	' 半透明書き出し
	' ********************************************************
	' Bitmap をファイルのパスから作成
	bmp = New Bitmap(argv(1))
	' キャンバス
	gra = Graphics.FromImage(bmp)

	' 同一サイズの Bitmap
	Dim bmp4Text As New Bitmap(bmp.Width, bmp.Height)
	' キャンバス
	Dim gra4Text As Graphics = Graphics.FromImage(bmp4Text)

	' 透明ブラシ
	Dim myBaseBrush As New SolidBrush(Color.FromArgb(0,0,0,0))
	' 塗りつぶし位置
	Dim rects As Rectangle() = {New Rectangle(0, 0, bmp4Text.Width, bmp4Text.Height)}
	' 塗りつぶして、透明のキャンバスにする
	gra4Text.FillRectangles(myBaseBrush, rects)

	' アンチエイリアス設定
	gra4Text.TextRenderingHint = TextRenderingHint.AntiAliasGridFit

	' 書き出し
	gra4Text.DrawString( "lightbox", myFont, myBrush, 70, 28 )

	' 途中経過
	bmp4Text.Save((argv(1).Split("."))(0) + "_text2.png", Imaging.ImageFormat.Png)

	' 半透明出力用属性
	Dim att As New ImageAttributes
	Dim cm As New ColorMatrix
	' 半透明
	cm.Matrix00 = 1		' R
	cm.Matrix11 = 1		' G
	cm.Matrix22 = 1		' B
	cm.Matrix33 = 0.5F	' A
	cm.Matrix44 = 1
	att.SetColorMatrix(cm)

	' 半透明書き出し
	gra.DrawImage( _
		bmp4Text, _
		New Rectangle(0, 0, bmp.Width, bmp.Height), _
		0, _
		0, _
		bmp.Width, _
		bmp.Height, _
		GraphicsUnit.Pixel, _
		att _
	)

	' 半透明書き出し結果
	bmp.Save((argv(1).Split("."))(0) + "_text3.png", Imaging.ImageFormat.Png)

	' Bitmap の解放
	bmp.Dispose()

End Sub

End Module



posted by lightbox at 2010-06-05 01:36 | VB.NET : テクニカル | このブログの読者になる | 更新情報をチェックする

2010年06月03日


Windows : 管理共有(C$等)とネットワーク接続とシステムエラー5(53)とSymantec Endpoint Protection


2010/06/03 : 更新
「簡易ファイルの共有を使用する」のチェックは外して下さい

エクスプローラのアドレスで \\PC名\共有名 と入力して他のPCのディスクを参照する事ができますが、これにはログイン済みのユーザとパスワードでその PC にログイン可能である必要があります。もし、接続できない場合は新たなユーザとパスワードでログインするようにダイアログが表示されます

Login

この時使用する共有名は通常接続先のユーザが作成した共有名を使用しますが、Windows には、「隠し共有または管理用共有」と呼ばれる共有名が存在します


隠し共有は、共有名の最後にドル記号 ($) が付いていることで識別されます。これらは、コンピュータ上の共有を参照する場合や、net view コマンドを実行した場合には、表示されません。Windows では、ネットワーク上のコンピュータ環境を管理するために管理者、プログラムおよびサービスによって使用される、管理用の隠し共有が作成されます。デフォルトでは、Windows では以下の管理用隠し共有を有効にすることができます。 

1) ルート パーティションまたはボリューム 
2) システム ルート フォルダ 
3) FAX$ 共有 
4) IPC$ 共有 
5) PRINT$ 共有 

※ ドキュメントには以上が書かれていますが、3) と 5) はここでは省略します。

ルート パーティションとボリュームは、ドライブ文字に $ 記号が付いた名前で共有されます。たとえば、ドライブ文字の C と D は、それぞれ C$、D$ という名前で共有されます。 

システム ルート フォルダ (%SYSTEMROOT%) は ADMIN$ という名前で共有されます。管理者はネットワーク経由でシステム ルートのフォルダ階層に簡単にアクセスできます。 

IPC$ 共有は、ネットワーク プログラム間の通信に名前付きパイプを使用する、クライアントとサーバーの間の一時接続で使用されます。net view \\PC名 で、システム エラー 5 が発生する時、この共有を使って以下のように接続する事で表示できるようになります。これは、GUI でダイアログでログインするのと同様の意味があります。

net use \\PC名\ipc$ /user:ユーザ名 パスワード

この処理が正常終了した場合、net view \\PC名で一覧が表示されるようになり、エクスプローラのアドレスで \\PC名\共有名 を入力する事が可能になります。

しかし、最初の段階で システム エラー53 が発生している場合は、接続先のPCで、Microsoft ネットワーク用ファイルとプリンタ共有サービスが有効になってないので有効にする必要があります

ただ、これは接続先に PC のセキュリティソフトの設定で遮断されている可能性が大きいので注意して下さい。Windows の Firewall の可能性もありますが、Symantec の Endpoint Protection の可能性もあります。この場合は設定が複雑な場合があるので、うまくいかない場合はこちらを参照して下さい。

同じ症状になっていたので、TCP[ローカルポート] に 88,135,139,445 を入力して対応できました。

Endpoint
※ IPv6 を遮断するというエントリが2つあり、Windows7 で両方を許可すると ping -6 が使えます
※ 遮断のまま使う場合は、ping -4 です。

コンピュータによって作成される管理用隠し共有 (ADMIN$ や C$ など) は管理ツールの「共有」から削除できますが、Server サービスをいったん停止して再開するか、コンピュータを再起動すると、コンピュータによって再作成されます。

起動時より作成しないようにするにはレジストリにエントリを追加する必要があります 
( IPC$ は削除されません )


関連する記事

UACが有効な状態で管理共有を有効にする



posted by lightbox at 2010-06-03 22:20 | Windows | このブログの読者になる | 更新情報をチェックする

2010年06月02日


VB.net : String、Char()、Byte() の相互変換

Byte はキャラクタセットとしての内部コードが必要な場合に使用します

ある値を(特定のキャラクタセットで) Char か 文字列で比較したい場合は Byte 配列の中に一つ数値をセットして、Encoding.GetChars か Encoding.GetString で変換して使用します
------------------------------------------------------
Dim ByteCr As Byte() = New Byte() { 13 }
Dim ByteLf As Byte() = New Byte() { 10 }
------------------------------------------------------
Imports System.Text

Module MyModule

' ********************************************************
' 相互変換
' ********************************************************
Sub Main()

	Dim base As String = "アイ"


	' **************************************************************
	' 文字列の "アイ" を Byte 配列に変換 : String => Byte()
	' ※ Byte 配列変換時は、キャラクタセットによって実体が変わります
	' **************************************************************

	Dim a_byte As Byte() = Encoding.GetEncoding("Shift_JIS").GetBytes(base)


	' SHIFT_JIS としてバイト変換しているので、B1 B2 となります
	Console.WriteLine( a_byte.Length )
	Console.WriteLine( a_byte(0).ToString("X") )
	Console.WriteLine( a_byte(1).ToString("X") )

	Console.WriteLine( "----------" )

	' 元に戻す

	Dim work As String = Encoding.GetEncoding("Shift_JIS").GetString( a_byte )

	Console.WriteLine( work )

	Console.WriteLine( "----------" )


	' **************************************************************
	' バイト配列(Shift_JIS) "アイ" を Char 配列(Unicode)に変換 : Byte() => Char()
	' ※ Byte 配列内のキャラクタセットに合わせて変換する必要があります
	' **************************************************************

	Dim a_char As Char() = Encoding.GetEncoding("Shift_JIS").GetChars( a_byte )

	Console.WriteLine( a_char )
	Console.WriteLine( a_char.Length )

	Dim b As Byte() = Encoding.Unicode.GetBytes(a_char)

	' Unicode として値を表示しています
	Console.WriteLine( b.Length )
	Console.WriteLine(b(0).ToString("X"))
	Console.WriteLine(b(1).ToString("X"))
	Console.WriteLine(b(2).ToString("X"))
	Console.WriteLine(b(3).ToString("X"))

	Console.WriteLine( "----------" )


	' **************************************************************
	' Char 配列(Unicode)を String に変換 : Char() => String
	' **************************************************************

	' Char 単位で変換して連結
	Console.WriteLine( a_char(0).ToString() & a_char(1).ToString() )

	' いったん Byte 配列に戻す(Unicode)
	a_byte = Encoding.Unicode.GetBytes(a_char)
	Console.WriteLine( Encoding.Unicode.GetString(a_byte) )

	' いったん Byte 配列に戻す(Shift_JIS)
	a_byte = Encoding.GetEncoding("Shift_JIS").GetBytes(a_char)
	Console.WriteLine( Encoding.GetEncoding("Shift_JIS").GetString(a_byte) )

	Console.WriteLine( "----------" )


	' **************************************************************
	' 文字列の "アイ" を Char 配列に変換 : String => Char()
	' **************************************************************

	a_char = base.ToCharArray()

	Console.WriteLine( a_char )
	Console.WriteLine( a_char.Length )

	b = Encoding.Unicode.GetBytes(a_char)

	' Unicode として値を表示しています
	Console.WriteLine( b.Length )
	Console.WriteLine(b(0).ToString("X"))
	Console.WriteLine(b(1).ToString("X"))
	Console.WriteLine(b(2).ToString("X"))
	Console.WriteLine(b(3).ToString("X"))

	Console.WriteLine( "----------" )

	' **************************************************************
	' Char 配列(Unicode)を Byte配列に変換 : Char() => Byte()
	' ※ Byte 配列変換時は、キャラクタセットによって実体が変わります
	' **************************************************************

	a_byte =  Encoding.Unicode.GetBytes(a_char)

	' Unicode として値を表示しています
	Console.WriteLine( a_byte.Length )
	Console.WriteLine(a_byte(0).ToString("X"))
	Console.WriteLine(a_byte(1).ToString("X"))
	Console.WriteLine(a_byte(2).ToString("X"))
	Console.WriteLine(a_byte(3).ToString("X"))

	Console.WriteLine( "----------" )


	' **************************************************************
	' バイト配列(Unicode) を String)に変換 : Byte() => String
	' ※ Byte 配列内のキャラクタセットに合わせて変換する必要があります
	' **************************************************************

	Console.WriteLine( Encoding.Unicode.GetString(a_byte) )

	Console.WriteLine( "----------" )


	' **************************************************************
	' 単一の文字列(String) を 単一の Char に変換 String => Char
	' **************************************************************

	Dim char1 As Char = Char.Parse("ア")
	Dim a_char2 As Char() = {char1,"イ"}

	Console.WriteLine( a_char2 )

End Sub

End Module


関連する記事

VB.net : 文字単位の ASCII と Unicode
VB.net と C# における KeyPress イベントの受け取り方
VB.net : テキストファイルとキャラクタセット


posted by lightbox at 2010-06-02 12:26 | VB.NET : ベーシック | このブログの読者になる | 更新情報をチェックする
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 終わり