■閉鎖した昔のブログの記事復活
[2025/05/11] Oracle:ORA-28001 the password has expiredでユーザに接続不可 (No.393)
[2025/05/11] 頭がよくなる 青ペン書きなぐり勉強法 (No.392)
[2025/05/11] VB.NET:標準ラベルコントロールにグラデーションを追加したGradientLabelコントロール (No.391)
[2025/05/11] VB.NET:マーシャリングを使用した、構造体からバイト配列へのコピー (No.390)
[2025/05/11] VB.NET:マーシャリングを使用した、バイト配列から構造体へのコピー (No.389)
[2025/05/11] 頭がよくなる 青ペン書きなぐり勉強法 (No.392)
[2025/05/11] VB.NET:標準ラベルコントロールにグラデーションを追加したGradientLabelコントロール (No.391)
[2025/05/11] VB.NET:マーシャリングを使用した、構造体からバイト配列へのコピー (No.390)
[2025/05/11] VB.NET:マーシャリングを使用した、バイト配列から構造体へのコピー (No.389)
-
久々にOracleを動かそうとして、Oracle SQL Developerを起動し、データベースに接続すると接続エラーが発生しました。
エラーメッセージはORA-28001 the password has expired.
どうもパスワードの期限が切れているようです。
調べてみるとOracle11gではデフォルトでユーザのパスワードの期限が180日になっているそうです。
テストで動かすだけなので、SYSユーザでログインして、ユーザのパスワードを以下のコマンドで変更しました。
alter user 「USERNAME」 identified by 「PASSWORD」;
その後、以下のコマンドでロックを解除します。
alter user 「USERNAME」 account unlock;
これで、接続できるようになりました。
ただ「SQL*Plus」での接続では以下の図のようにエラーが表示されますが、
その後、新規パスワードの入力が促され、そこでパスワードを入力しなおせば再度接続されます。
SIDとしてはテスト用のDB「test」で、ユーザもテスト用のID/PASSを「test/test」して行いました。
オラクルサーバーへの接続文字列としては、@マーク以下「//192.168.1.207/」を頭に付けてローカルなLANのサーバマシンのIPを特定しています。
=====
2015/03/26:の時の情報
PR -
青ペン書きなぐり勉強法」でなにより重要なのは、達成感です。「ペンを1本使い切った」「今日1日でインクがこんなに減った」と、効果を「見える化」することにより、その量が「こんなにやった!」と自信に変わる。そうすると、義務感にかられての勉強が、「もっとやりたいもの」に変わります。さらに続けると「青ペンを握らないと調子が出ない」と“やみつきになる効果”があります。
「何もかも書く」がポイント
―社会人で、仕事のメモ術として役立てている方もいらっしゃるそうですね。
情報の整理に役立つという声は、よく聞きます。この勉強法は、もともとは授業内容を効率的に復習できる「再現性の高いノート」を作るための技でした。だから、「情報は取捨選択しないで何もかも書く」というのがポイント。当然、ビジネスシーンでも、そのまま使えます。ホワイトボードに書かれた内容や、渡された資料だけを見るのではなく、相手が話したことを「何もかも書く」。
ところがこれが、実際にやってみると、案外難しいのです。全部書こうと思っても、手が追いつかない。無理なことに気がつく。実は、この「気づき」がとても重要なんですね。意識しないと、私たちは自分の「主観」で勝手に情報の取捨選択をしてしまいます。でも、何が重要で、何が重要でないかなんて、通常、瞬時に判断できるはずがありません。だから効率よく復習したいと思ったら、まずは「全部書く!」と決める。そこから、再現性の高いノートが生まれるのです。
元塾生で、「青ペンで勉強していると、大切な試験の当日に、突然、文字が浮き上がって見えてくる」と言った生徒がいました。書きなぐっているときには気づかないのだけれど、いつの間にか脳に「しみ込んで」、ふとしたときに再現される、と。私はこの感覚は「第六感」に近いのではないかと思います。
目で見て声に出し、それを自分の耳で聞きながら、手を動かして記憶する――。五感をフルに活用して勉強すると、私たちの潜在能力が最大限に発揮されるようになるのではないでしょうか。
=====2015/03/18:の時の情報おすすめ本
-
VB.NETで標準ラベルコントロールから派生した、背景色をグラデーション描画するGradientLabelコントロールを作成しました。
このコントロールには以下の追加プロパティが備わっています。
プロパティ 概要 BackColor2
グラデーション終了色
(デフォルトのBackColorからBackColor2への色の変化)FrameColor
ラベルの枠色 GradientMode
グラデーションの方向(LinearGradientMode) GradientCount
グラデーションの回数
(回数は1から10に強制的におさえている)
バックグラウンド描画イベント処理にてグラデーション用ブラシでグラデーションの色と位置を設定し、内部を描画します。 さらに、枠色で枠を描画しています。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131Imports
System.ComponentModel
Imports
System.Drawing.Drawing2D
Public
Class
GradientLabel
Inherits
System.Windows.Forms.Label
''' <summary>
''' コンストラクタ
''' </summary>
''' <remarks></remarks>
Public
Sub
New
()
MyBase
.
New
()
MyBase
.BackColor = Color.Transparent
Me
._GradientMode = LinearGradientMode.Horizontal
End
Sub
''' <summary>
''' バックグラウンド描画イベント処理
''' </summary>
Protected
Overrides
Sub
OnPaintBackground(
ByVal
pevent
As
System.Windows.Forms.PaintEventArgs)
Dim
g
As
Graphics = pevent.Graphics
If
Me
.BackColor.A < 255
OrElse
Me
.BackColor2.A < 255
Then
MyBase
.OnPaintBackground(pevent)
End
If
'描画領域
Dim
rect
As
Rectangle =
New
Rectangle(0, 0,
Me
.Width,
Me
.Height)
'グラデーション用ブラシ
Dim
lgb
As
LinearGradientBrush =
New
LinearGradientBrush(rect, Color.Red, Color.Violet,
Me
._GradientMode)
'グラデーション用のColorBlendクラス
Dim
cb
As
ColorBlend =
New
ColorBlend()
'グラデーションの色と位置を設定
Dim
arrColors(
Me
._GradientCount)
As
Color
Dim
arrPos(
Me
._GradientCount)
As
Single
For
i
As
Integer
= 0
To
_GradientCount
If
(i
And
1) = 0
Then
arrColors(i) =
Me
._BackColor
Else
arrColors(i) =
Me
._BackColor2
End
If
arrPos(i) = i / _GradientCount
Next
cb.Colors = arrColors
cb.Positions = arrPos
lgb.InterpolationColors = cb
'複数の色による線形グラデーション定義
g.FillRectangle(lgb, rect)
'描画
'枠を描画する(取敢えず線の幅は2)
Using pen
As
New
Pen(
Me
._FrameColor, 2)
pen.DashStyle = Drawing2D.DashStyle.Solid
g.DrawRectangle(pen, rect)
End
Using
End
Sub
Private
_BackColor
As
Color
Public
Shadows
Property
BackColor()
As
Color
Get
If
Me
._BackColor <> Color.Empty
Then
Return
Me
._BackColor
End
If
If
Me
.Parent IsNot
Nothing
Then
Return
Me
.Parent.BackColor
End
If
Return
Control.DefaultBackColor
End
Get
Set
(
ByVal
value
As
Color)
Me
._BackColor = value
Me
.Invalidate()
'再描画
End
Set
End
Property
Private
_BackColor2
As
Color
<Category(
"Display"
), Description(
"グラデーション終了色"
)> _
Public
Property
BackColor2()
As
Color
Get
If
Me
._BackColor2 <> Color.Empty
Then
Return
Me
._BackColor2
End
If
If
Me
.Parent IsNot
Nothing
Then
Return
Me
.Parent.BackColor
End
If
Return
Control.DefaultBackColor
End
Get
Set
(
ByVal
value
As
Color)
Me
._BackColor2 = value
Me
.Invalidate()
'再描画
End
Set
End
Property
Private
_FrameColor
As
Color = Color.Black
<Category(
"Display"
), Description(
"枠色"
)> _
Public
Property
FrameColor()
As
Color
Get
If
Me
._FrameColor <> Color.Empty
Then
Return
Me
._FrameColor
End
If
Return
Color.Black
End
Get
Set
(
ByVal
value
As
Color)
Me
._FrameColor = value
Me
.Invalidate()
'再描画
End
Set
End
Property
Private
_GradientMode
As
LinearGradientMode
<Category(
"Display"
)> _
<DefaultValue(
GetType
(LinearGradientMode),
"Horizontal"
), Description(
"グラデーションの方向"
)> _
Public
Property
GradientMode()
As
LinearGradientMode
Get
Return
Me
._GradientMode
End
Get
Set
(
ByVal
value
As
LinearGradientMode)
Me
._GradientMode = value
Me
.Invalidate()
'再描画
End
Set
End
Property
Private
_GradientCount
As
Integer
= 4
<Category(
"Display"
)> _
<DefaultValue(
GetType
(
Integer
),
"4"
), Description(
"グラデーションの回数"
)> _
Public
Property
GradientCount()
As
Integer
Get
Return
Me
._GradientCount
End
Get
Set
(
ByVal
value
As
Integer
)
If
value < 1
Then
value = 1
If
value > 10
Then
value = 10
Me
._GradientCount = value
Me
.Invalidate()
'再描画
End
Set
End
Property
End
Class
このコントロールを使った例を以下に示します。
■GradientMode:Horizontal
左から右に向かってグラデーションされます。
BackColor⇒BackColor2の色変化のグラデーションです。
GradientCount=1の場合は、BackColor⇒BackColor2のみのグラデーションで
GradientCount=2の場合は、BackColor⇒BackColor2⇒BackColorのグラデーションとなります。
その後、GradientCountの値が増えるに従って、「BackColor2」「BackColor」が繰り返されます。
■GradientMode:Vertical
上から下に向かってグラデーションされます。
■GradientMode:ForwardDiagonal
左上から右下に向かってグラデーションされます。
■GradientMode:BackwardDiagonal
右上から左下に向かってグラデーションされます。
=====
2015/03/23:の時の情報おすすめ本
-
前回はバイト配列から構造体へのコピーでしたが、今回はその逆である、構造体からバイト配列へのコピーです。
例とする構造体は前回同様、4個のバイト配列変数を持った簡単な構造を例にとります。以下の様な宣言になります。 各変数は「MarshalAs」を使って、固定サイズ長を宣言してやります。
123456789101112'バイト配列分解構造体
<StructLayout(LayoutKind.Sequential, Pack:=1)> _
Private
Structure
ByteSplit
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> _
Public
A
As
Byte
()
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> _
Public
B
As
Byte
()
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> _
Public
C
As
Byte
()
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=64)> _
Public
X
As
Byte
()
End
Structure
この構造体からバイト配列に変換する関数を以下に示します。
12345678910111213141516171819202122232425262728293031Imports
System.Runtime.InteropServices
'これは先頭で宣言してください
''' <summary>
''' 構造体からバイト配列にコピーする
''' </summary>
''' <param name="byteSplit">構造体</param>
''' <returns>バイト配列を返す</returns>
Private
Function
ToByteArray(
ByVal
byteSplit
As
ByteSplit)
As
Byte
()
'構造体のサイズ
Dim
size
As
Integer
= Marshal.SizeOf(
GetType
(ByteSplit))
'ヒープ領域にサイズ分のメモリ確保
Dim
iPtr
As
IntPtr = Marshal.AllocHGlobal(size)
'構造体をヒープ領域にコピー
Marshal.StructureToPtr(byteSplit, iPtr,
False
)
'Byte配列の宣言
Dim
newBytes
As
Byte
() =
New
Byte
(size - 1) {}
'ヒープ領域からByte配列にコピー
Marshal.Copy(iPtr, newBytes, 0, size)
'ヒープ領域を解放
Marshal.FreeHGlobal(iPtr)
'バイト配列を返す
Return
newBytes
End
Function
'バイト配列を構造体にコピーするテスト
Private
Sub
Button4_Click(
ByVal
sender
As
System.
Object
,
ByVal
e
As
System.EventArgs)
Handles
Button4.Click
Dim
x
As
Byte
() =
New
Byte
() {&H10, &H11, &H20, &H21, &H22, &H23, &H30, &H31, &H32, &H33, &H40, &H41}
'前回の関数(バイト配列を構造体にコピー)を利用
Dim
xByte
As
ByteSplit = ToByteSplit(x)
Dim
x2
As
Byte
() = ToByteArray(xByte)
End
Sub
バイト配列の「x2」には20個分の配列として値が返されます。
=====
2015/03/20:の時の情報おすすめ本
-
VB.NETで通信制御プログラムを組んでいると、電文解析などが必要になります。電文はバイト配列で取得しますが、 その電文を分割して処理するにも、解析用の構造体を宣言しそちらにバイト配列からコピーできると便利です。
今回は、構造体に4個のバイト配列変数を持った簡単な構造を例にとります。以下の様な宣言になります。 各変数は「MarshalAs」を使って、固定サイズ長を宣言してやります。
123456789101112'バイト配列分解構造体
<StructLayout(LayoutKind.Sequential, Pack:=1)> _
Private
Structure
ByteSplit
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> _
Public
A
As
Byte
()
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> _
Public
B
As
Byte
()
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> _
Public
C
As
Byte
()
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=64)> _
Public
X
As
Byte
()
End
Structure
バイト配列からこの構造体に変換する関数を以下に示します。
■「clsSqlServer」のソース
123456789101112131415161718192021222324252627Imports
System.Runtime.InteropServices
'これは先頭で宣言してください
''' <summary>
''' バイト配列を構造体にコピーする
''' </summary>
''' <param name="bytes">バイト配列</param>
''' <returns>構造体を返す</returns>
Private
Function
ToByteSplit(
ByVal
bytes
As
Byte
())
As
ByteSplit
'作業用Byte配列(この時点でnewBytesの内容は全て0設定)
Dim
newBytes
As
Byte
() =
New
Byte
(Marshal.SizeOf(
GetType
(ByteSplit)) - 1) {}
'作業用Byte配列にコピー
Array.Copy(bytes, newBytes, bytes.Length)
'作業用Byte配列をガベージコレクタが移動できない様に固定
Dim
gch
As
GCHandle = GCHandle.Alloc(newBytes, GCHandleType.Pinned)
'構造体へコピー
Dim
result
As
ByteSplit =
CType
(Marshal.PtrToStructure(gch.AddrOfPinnedObject(),
GetType
(ByteSplit)), ByteSplit)
'固定ハンドルの廃棄
gch.Free()
'構造体を返す
Return
result
End
Function
'バイト配列を構造体にコピーするのテスト
Private
Sub
Button4_Click(
ByVal
sender
As
System.
Object
,
ByVal
e
As
System.EventArgs)
Handles
Button4.Click
Dim
x
As
Byte
() =
New
Byte
() {&H10, &H11, &H20, &H21, &H22, &H23, &H30, &H31, &H32, &H33, &H40, &H41}
Dim
xByte
As
ByteSplit = ToByteSplit(x)
End
Sub
処理ボタンをフォームに貼り付けてテストしていますが、「x」で12個のデータを宣言していますが、 構造体の「X」には「&H40, &H41」の部分しか設定されませんが、残りには&H0が埋められます。
=====
2015/03/19:の時の情報おすすめ本