2008年7月27日日曜日

認証システムに登録 鍵

*認証局では登録者の秘密鍵と公開鍵を作成

*作成した公開鍵を使用してディレクトリサーバーに公開カギ証明書を作成、認証サーバーの秘密鍵によりデジタル署名よりディレクトサーナーに公開カギを整理すうり

2008年7月26日土曜日

デジタル署名 秘密鍵(秘密カギ) 共通カギ(共通カギ)

*デジタル署名 (メール等のやりとりの場合)
 ・送信者側が秘密鍵で暗号化をする

 ・複合では公開鍵を使って誰もが確認できるようにする

*デジタル署名の暗号化
 ・お互いの共通鍵を使用して暗号化
 (例)上で作成したデジタル署名とメッセージを共通カギを使用して暗号化

*相手側の有効性の確認
 ・受信側の公開カギが有効かを確認する場合は認証システムがディレクトリサーバーから検索をする

*相手側の複合
 ・認証サーバーが相手の秘密鍵により、共通カギで暗号化された情報を複合する

*逆の立場の有効性の確認(相手側が送り主に対して有効性があるかの確認)
 ・認証システムがディレクトリサーバから検索をして送り主の有効性を確認

*改ざんの確認
 ・複合されたメッセージのハッシュ値とデジタル署名から送り手のデジタル署名から公開カギにより複合されたハッシュ値を比較

2008年7月17日木曜日

TERRA DI VERDE by T-SQUARE

TERRA DI VERDE (テッラ ディ ヴェルデ。・・・間違っていたら連絡下さい)
この曲の収録されたアルバムは 1996年なのだが、自分だけだろうか・・・

古くならない・・・


そう思うのは。

全般的に言えるのだが、T-SQUAREの曲は古くなった気がしないのだ。

中古CDなど見てみるのだがこの手はまず出ない。

曲をコピーしてはみてみたものの、T-SQUAREの様な音を出すには素人には無理です。まして、機材なども何千万かかるか・・・


そうは言ってみたものの前々から弾けたらいいなと思っていたTERRA DI VERDEに手を出してみた。

自分の家にはキーボードがあるが使っていなかったし、ピアノ自体弾けなかったがこの曲だけはとちょっと思い入れもあってやってみることにしたのが昨年の冬ごろのこと、1日10~30分の練習でようやく、何となく違うような気がするがとりあえずさまになってきた。(なんとかなるものです)

スコアの説明には誰でも弾ける・・・と。ほんとかいと思いつつ

これでさらに思い入れが強くなってしまった・・・そういうものが一つくらいあってもいいと思う。

リモートデスクトップをリモートでOFF

リモートデスクトップの使用後、リモートから抜けた場合通常はログイン画面が表示されたままになってしまう。

そこで、リモートから抜ける場合にあるコマンドを叩いてリモートを終了する方法がある



tscon 0 /DEST:Console /V
:pause

このコマンドでリモートから抜けられるのでbatファイルにしてしまう。

メモ帳を開いてこのコマンドをコピペし、ファイル名を適当にClose.bat等とつける。


出来たファイルをデスクトップに置いておき、リモートを抜けるときにこれをダブルクリックすると、リモートが終了して、相手のPCは何事も無かったようにデスクトップ画面が表示される。

2008年7月15日火曜日

VB2005 PrintDocument データ表示

PrintDocumentにデータベースからデータを取得して表示する場合は少し工夫がいるらしいということでまとめてみました。(SQLServer2000からデータを取得)

ボタンをクリックして印刷・・・

普通の動作である。しかし、PrintDocumentで特に改ページをする場合、次ページを表示する度にデータを取得してしまい動作が非常に遅くなってしまうのであった。

そこで

Public Class Form1 の直下にSQLconnectionとsqlcommandを宣言してしまう。そうすることでボタンクリックのイベントの外でもデータセットが有効になる

Public Class Form1
Dim rnum As Integer '改ページ制御フラグ
 Private pt_Cn As New System.Data.SqlClient.SqlConnection
Private pt_SQL As System.Data.SqlClient.SqlCommand
Private pt_ds As New DataSet
Private pt_dt As New DataTable

・・・以下省略

そしてクリックイベントで目的のデータを出力するSQL文を書き込む

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
Dim prv As New PrintPreviewDialog

Dim prv As New PrintPreviewDialog
Dim St As String
Dim ServerName As String = "サーバー名" 'サーバー名(またはIPアドレス)
Dim DatabaseName As String = "データベース名" 'データベース
Dim mySQL As String

St = "Server=""サーバー名"";"
St &= "integrated security=SSPI;"  'Windows認証
St &= "initial catalog = データベース名"

pt_Cn.ConnectionString = St
pt_SQL = pt_Cn.CreateCommand

mySQL = "SELECT SHOCD,SHONAME FROM SHOMASTER"

pt_SQL.CommandText = mySQL
pt_Cn.Open()

Dim sqlSelect As New SqlClient.SqlCommand(mySQL, pt_Cn)
Dim Adapter As New SqlClient.SqlDataAdapter(sqlSelect)

Adapter.Fill(pt_ds) 'FILL すべてのレコードを取得するメソッド
prv.Document = PrintDocument1
prv.ShowDialog()
pt_Cn.Close() '必ず閉じる。連続して実行した場合エラーが発生

End Sub


最後にPrintPageハンドラにソースを入力。ボタンクリックによりセットされたAdapter.Fill(pt_ds)の内容をLoopにより表示する

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim f As Font
'印刷開始位置
Dim x As Integer = 50
Dim y As Integer = 100
'行ピッチ
Dim pitch As Integer
Dim cnt As Integer = 0
Dim i As Integer
f = New Font("MS ゴシック", 16)
pitch = f.Height + 3
Dim P1 As New Pen(Color.Blue, 1)

Dim row_cnt As Integer = 0

i = 0

'row_cnt = ds.Tables(0).Rows.Count
Do Until rnum = pt_ds.Tables(0).Rows.Count
'Do Until rnum = row_cnt
'For i = 0 To row_cnt - 1
e.Graphics.DrawString(pt_ds.Tables(0).Rows(rnum)(0).ToString.PadRight(10) & _
pt_ds.Tables(0).Rows(rnum)(1).ToString.PadRight(10), f, Brushes.Black, x, y + (cnt * pitch))
e.Graphics.DrawLine(P1, x, y + (cnt * pitch), x + 600, y + (cnt * pitch))
rnum = rnum + 1
cnt = cnt + 1
If cnt = 20 Then
e.HasMorePages = True
Exit Do
End If
'Next
Loop

End Sub

改ページ用のフラグを初期化

Private Sub PrintDocument1_BeginPrint(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint
'初期化の注意事項
'PrintPageイベント内でカウントの初期化はしてはいけない
rnum = 0

End Sub

長いソースに見えるかもしれないが、展開してみると意外とそうでもなかったりする
これでデータベースに一度だけアクセスして内容をPrintDocumentに表示する内容となるはずである。
もし、このソースを使用するのであればそれで発生した不具合等の責任は負えませんのでご了承下さい。

2008年7月8日火曜日

DataGridviewの列にデータソースのフィールドを割り当て

VB.NETのExpress EditionではデータベースがSQLServer2000の場合、まったくと言っていいほどデータベースデザイナの恩恵を受けられない。

しかたがないのでソースを書くのだがなかなか情報にありつけない。

DataGridviewの列にフールドを割り当てる方法としてはこうだ。


Datagridviewの右上の小さい三角ボタンをクリックしてタスクを表示

列の編集のウインドウを開いてそのプロパティの中のデータ項目にデータベースのフィールド名をセット



DataPropertyName に表示するフィールド名を入力

すると

・・・・省略
Adapter.Fill(ds) 'FILL すべてのレコードを取得するメソッド

Datagridview1.DataSource = ds.Tables(0)

で取得したデータを個別に割り当てられる

2008年7月4日金曜日

JavaScript 1行おきに色をつける

1行おきに色を変えたい場合に単純に1行おきであれば簡単だが、ヘッダーが複数あり明細も複数行あった場合はそう単純にはいかないのでまとめてみようと思う。

まず、HTMLのbody部分にイベントを記載

<body onLoad="tableBgColor()">

明細を表示するtableタグの中のIDを id="ta1" と属性を指定します。
JavaScriptは下記の通り

function tableBgColor(){
var rows,rlen,rowsb;
//ta1は表示するテーブルタグ名
rows=ta1.rows;
rlen=rows.length;
for(num=0;num<rlen;num++){
//ヘッダー色の指定 numヘッダーセル行の色指定 今回は初め3行がヘッダー
if (num<3){
if (num==0){
rows[num].style.backgroundColor="white";
rows[num].style.color="black";
}else{
rows[num].style.backgroundColor="white";
rows[num].style.color="black";
}
//明細色のストライプ化 今回は1行置き num+1で複数行のストライプが可能
}else{
if(([num]/1)%2==0){
rows[num].style.backgroundColor="#DCDCDC"; //淡いグレー
rows[num].style.color="black";
}else{
rows[num].style.backgroundColor="white";
rows[num].style.color="black";
}
}
}
}

ポイントは[num]の部分が(num)として記載した場合IEでは作動するが、Firafoxでは作動しない。
IEの記述はかなりゆるいので手を抜きそうになるが、しっかりタグを書かなければあとで痛い目にあうことになるのであった。

Firefox enterでタブ移動 JavaScript

IEとFirefoxではJavaScriptのイベントの扱いがちがうらしい。
そのなかで、変数の扱いがIEではグローバルで扱うがFirefoxでは属性の中に記述しなければ取得出来ないということなので、JavaScriptの基本構造を変えねばならない事態に陥った。

<input type="text1" value="" onkeypress="test2,event.keyCode"/>
<input type="text2" value="" onkeypress="test1,event.keyCode"/>

テキストBOX1と2をEnterで行ったり来たりする

function nextFocus(nextObj,keyCode){
  if(keyCode==13){ //ここの処理はenterでtab移動を可能にする
  nextObj.focus();
  nextObj.select();
  window.event.returnValue = false;
  }
}

これはevent.keyCodeを第2引数として番号を属性の中で取得する方法となる。これはIEでは属性になくても取得してくれるので、こういう気の利いた(場合によってはおせっかい?)動きがつもり積もってIEは遅いということなのだろうか。

それにしてもFirefox を意識なければならない時期に来ているかもしれない

2008年7月3日木曜日

ERP導入の考え

コアのシステムとしてのERPを導入する為に考えられるアプローチ
ストレスを感じながら業務を(作業者にとって)している状況はやはり良くなく、それを押し付けるのでは業務改善もままならないということも多数見受けられると感じたことから


①用意されたベンダーのアプリが自社カスタマイズが可能かどうか

帳票のカスタマイズはもちろん、伝票、フォームまでに拡張が可能かどうかで次の入替えの際のコストを最低限に抑えることを目的。
また、マスタマイズ要望に対しての実現幅を増やす目的

②カスタマイズした旧バージョンの使用が可能か

カスタマイズ工数が多いメニューに対する業務の変化パターンを考慮し、変化が無ければ新データベースでそのまま運用することも考慮

旧システムに不満があるのであれば変更もやむなしとし、旧バージョンの対応カスタマイズと新システムのカスタマイズのコストを比較検討

③別アプリに対応するか

営業端末などでは販売管理自体はインストールされていない(ライセンスの関係で)場合が多い為、別アプリからの参照、入力等が発生する場合がある。その為販売管理自体に外部からのデータを取込む機構が必須となる。
入力するアプリは別で構築し、データのやり取りを可能にし機能の差別化を図る

私の場合はWebアプリを自社で構築し、データを吐き出しそのデータをERP販売管理に取込むことを実現している。

④データベースは堅牢か

実績参照には、多角的参照を必要とするので、別にデータサーバーを持つことがERP用のデータベースに負荷をかけずにすむし、ERP用のデータベースサーバーはベンダー側に変更不可の条件を提示される場合が多いと思う。

そこで、定期的にリレーション等でデータをコピーし、多角的データを用意する必要があるので、データベース接続に耐えられるかの保障を取る必要がある。
中には安定しないデータベースも存在するので。

⑤ソリューションは統一

特に自社開発アプリでいざ開発するときに言語がちがってしまっては全てに精通する人か、言語に特化した人間を配置することとなる。
OSや、マシンのスペックとも相談しながら決定しなければならないところでもあるので出来るだけ統一化を図る

⑥将来性

そのソリューション自体の存続がどうかを判断。やすかろう悪かろうではやはりかえって高くつく。取り扱いベンダーがソリューションの販売元と直接技術問合せをできるかどうかが、トラブル解決も最後の手段になる。新OSの対応も考えなければならない。(対応速度の今までの経緯など)

⑦ソリューション自体に保守があるか

OS等のパッチを当てなければならない状況で、それにより動作が不安定になったと予想された場合、採用したソリューションに対して保守契約を求められる場合がある。
初期の見積ではその項目はうたっていない場合が多い為、確認する必要がある。
私個人的にはそれはナンセンスと考えるので、初期の段階で確認をする

⑧全ての業務を止めなければならない処理がいくつあるか

基本的に業務中に殆どの処理をこなしたいところだが、夜間にやらなければならない処理が1つや2つあるものだが、それが相当数あるERPも存在する。
採用してから、夜間処理に付き合わない為に確認する必要がある

まだ注意する点があるのでまとまったら追加します。