Flex3のステート機能について

今回はFlexのStateに関して、自分がつまずいた所を整理。

まず、Stateというのは、一つの画面で複数のレイアウト変更等を行う際に、利用するととても便利な機能です。
例えば、何かのアンケートで基本は一緒だけど、男性と女性で少し違う項目になるとか言うときに、
基本となるものを初期ステートして作成して、男性だけの項目は男性ステートを作成し、そこに作る。
女性だけの項目は女性ステートを作成して、そこに作る。
画面遷移時にステートを判断すればいいので、無駄に画面を増やしたり、項目のVisible等を細かく設定する必要もなくなります。

ステートの指定は


this.currentState = "hogeState";

このような感じで指定します。
デフォルトのステートは、空文字かnullを指定することで使用できます。


とても便利なのですが、つまずいた点があります。
ステート変更時にコンポーネントを作成した際の動きです。
これがとても不安定で、ステート変更時にコンポーネントが作成される前に、データのセットなどが行われ、
ぬるぽが起きたりしてしまいました。

ステートを利用する際は、このようなことがあるので、設計部分をしっかりしないといけません。

ですが、少々ややこしいので、逆転の発想で解決しました。

デフォルトステートに、男性用・女性用の項目を非表示で作成してしまうのです。
そして、ステート変更時に非表示→表示にすれば、コンポーネント自体は最初に作成されているので、
ステート遷移でも安定した動きとなります。


実際、これが正しいかと言われれば、もっと設計をしっかりして、なんでぬるぽが起きるのか、
原因を突き止めないといけないのですが、そもそも、最初から全て作っておくほうが、無難かなと思いました。

Windows Server 2008 のパスワード無期限設定

セキュリチィ云々言われている時代、Microsoftさんも色々厳しくセキュってますね。

今日は、WindowsServer2008でのパスワード無期限化について紹介します。

上記サーバーでは、デフォルトでパスワードが42日で期限切れになるようにされています。

期限が切れると、色々問題が起きたりします。

そこで、定期的なパスワードの変更が推奨されます。

ただ、実際定期的に変更するなんて面倒で、忘れがちです。
なので、構築時にパスワードの無期限化をすると、この問題から解放されます。

無期限化は簡単で、以下の箇所で行います。

管理ツール

ローカルセキュリティポリシー

アカウントポリシー

パスワードポリシー

パスワードの有効期限

このパスワードの有効期限がデフォルトで42になっています。
そこを0に変更すると、無期限化することができます。


以上!
簡単なので、お試しアレ。

※最近はoracle等もパスワード期限があるので、心配な方は調べてみることをオススメします。

ORA-01036

ORA-01036 変数の名前/ 数が無効です。

が発生しました。
理由不明。
SQL的には普通に実行できる。
色々消したりしてわかったこと。
SQLコメントアウトされている部分があるとアウト。

where
 hoge.hoge1 = 1
 hoge.hoge2 = 2
-- and hoge.hoge3 = 3

的な感じで。
そういうの消したら動くようになった。
もげろおおおおおおおおおおおおおおおおおおおお
全然意味分からんちん。

Linqを使った重複チェック

ある配列に重複した値があるかどうかチェックしたい。
そんなときに使えそうなLinqを使った重複チェック方法です。

チェック方法は簡単。

元の配列の要素数 = 元の配列から重複をなくした配列の要素数

これだけ。

Linqを使うとこんな感じ。


// 元の配列の要素数
int baseCount = list.count;
// 元の配列から重複要素を無くした配列の要素数
int distinctCount = (from x in list select x).Distinct().Count();

if (baseCount == distinctCount)
{
 //重複要素なし!
} else
{
 //重複要素あり!
}

Linq使わなくてもいけますが、シンプルになるので。
ハッシュとか別の方法もありますが、今回はこういう方法を紹介しました。

なぜ、中蓋を外さないのか・・・

今日は技術的なことなど一切関係ないネタです。
最近、インスタントコーヒーをよく飲むようになりました。
他の方のをおすそ分けしてもらう時もあるのですが、その時に、ビンの中蓋にちょっとだけ穴をあけて使っている方が多い気がします。
自分の母親も実は、中蓋にちょっと穴をあけて使っていました。

自分は、いつも躊躇なくはずすので、なんで中蓋を残しているのか疑問でした。
気になったので、家の中で色々見てみると、コーヒー以外にもヨーグルトやアイスなども中蓋が中途半端についたままでした。
実際に、何故か聞いてみると、コーヒー等は密封されている感があるからという意見が多く、ヨーグルトなんかは清潔だとか・・・。

じゃあ、外蓋いらないじゃん。

なんのための外蓋か。
外蓋があるんだから外蓋を信じてあげないと。

というのは、軽い冗談で、実際は、中途半端に中蓋を残すと、
中途半端な密封状態になって、全部剥がした時よりも悪い環境になるみたいです。
なので、中蓋はさっさとはずしましょう。
自分は、中蓋が中途半端に残っているものを見かけたらはずしてます。
もちろん、自宅ですけどね

ラジオボタンが押された時、チェック状態を確認を取ってから変える方法

ラジオボタンで選択された内容によって、入力のフォーマットを変えたい。
でも、今編集中の場合は、ラジオボタンが押された時に、編集内容が放棄されることを確認してから、
フォーマットを変更させたい。

こんなとき、ラジオボタンのCheckedChangedイベントでやろうとすると、既に、チェック状態は変わってしまっているから、コード内でチェック状態をもどさないといけない。
そうすると、またCheckChangedイベントが発生して無限ループに・・・
Clickイベントでやろうとしても、チェック状態が先に変更されてしまい、同じことに・・・
変数をいくつも用意すれば、できなくもないけど、変数とかあまり増やしたくない・・・

そういったときに、ちょっと力技ですけど、コードは分かりやすくつくる方法がありました。
まず、ラジオボタンのAutoCheckプロパティをfalseにします。
これがそもそも、チェック状態を自動で変えていたから、面倒だったのです。
こうすると、GUIからはチェック状態を変更することができなくなります。

そしたら、次にClickイベントで編集内容の放棄の確認を取ります。
そこで、OKならコード内で自力でラジオボタンの状態を変更します。
そうすると、CheckedChangedイベントが発生します。
後は、そこでフォーマットの変更なんかの処理を書けばいいのです。

※イベント名などはC#を元に書いています。