C# プロパティスコープの変数

C#7の機能追加のお話です。

C#7ではプロパティのスコープ内のみで使用できる変数が定義できるようです。
これにより以下のように実装できるようになります。

■今までの実装
private string _myField;
public string MyProperty {
 get { return _myField; }
 set {
  _myField = value;
  NotifyOfPropertyChange(nameof(MyProperty));
 }
}

■C#7での実装
public string MyProperty {
 string myField;
 get { return myField; }
 set {
  myField = value;
  NotifyOfPropertyChange(nameof(MyProperty));
 }
}

今まではクラス外からは_myFieldが隠蔽できていましたが、クラス内では自由にアクセスでき、隠蔽できてませんでした。
今回の機能追加により、プロパティのGetとSetからしかアクセスできない変数が定義できるようになり、完全な隠蔽ができるようになります。
VB6のころからこの機能が欲しいと思っていたので、とてもうれしいです。

ラダーで変数名を使う

ラダー改造の案件で変数名を使いました。
変数名を使わない場合はデバイスの実アドレスが主になります。
シフト命令を使ってステップシーケンスを作る場合、ステップを割り込ませるには
一括置換が必要になります。
変数名を使うと名前が主になるので実アドレスを変えても名前は変わりません。
ラダーは「回路」から「言語」へと変わっていくのでしょうか。

Entity Framework コードファースト開発

こんにちは、mtjです。

現在DBの開発を行っており、今回はEntityFrameworkを使用して開発しております。
これで便利なのが、コードファーストなので接続先のDBさえあれば勝手にテーブル、
リレーションなども作成してくれます。

テーブル定義もコード上に記載するので確認も容易です。
通常ではテーブル定義を書いて、データベースを開いてなどコード上では面倒の多い事がありません。

データベース検索もSQLを発行することなくLinqでアクセスできます。
TestCont.TestEntity.Single(x=>x.Id == id);
のような感じで容易にアクセスできます。
テーブル定義の変更もコード上のクラスの定義を変更するだけでMigrationが変更を検知し
自動でDB書き換えのコードを作成してくれます。

ソフト開発者としてはSQLサーバーを気にせずアクセスできるのは大変便利な事です。
通常だと変更があったらDBの定義を変更するコードを書いたり、それに伴ってコード上のテーブル定義
などの修正も行う必要がありますが、このフレームワークの場合はコードを気にしているだけでいいという感じです。

またテスト環境を容易に構築できる利点もあるので今後DBはこのフレームワークを使っていくと思います。

C# タブインデックス(タブオーダー)の自動設定

先週、C#ソフトのタブインデックスを久しぶりに自分で設定しました。
いつもは誰かにして貰っていたのですが、自分でするとものすごく面倒くさい。
これは人のする作業ではないと考え、自動化する方法を検討。
結果、ネットの情報を元に以下の拡張メソッドを作成しました。

public static void RefreshTabIndex(this Control ctl) {
 //子コントロールのタブインデックス更新
 foreach (Control child in ctl.Controls) {
  if (child.Controls.Count <= 0) continue;
  child.RefreshTabIndex();
 }
 //子コントロールの位置をもとにソートする
 var children = new List<Control>();
 foreach (Control child in ctl.Controls) {
  children.Add(child);
 }
 children.Sort((x, y) => {
  if (x.Top == y.Top) return x.Left.CompareTo(y.Left);
  return x.Top.CompareTo(y.Top);
 });
 //タブインデックスを設定する
 for (int i = 0; i < children.Count; i++) {
  if (children[i].TabIndex == i) continue;
  children[i].TabIndex = i;
 }
}

フォームのコンストラクタなどで、this.RefreshTabIndex()を実行すると、
コントロールの配置をもとに自動でタブインデックスが設定されます。

まだ使い始めた所なので、この方法ではうまくいかない場合があるかも知れませんが。
概ね思っている動作をしており、作業が楽になりました。

 

国会議事録

現在、通常国会では速記ではなく音声自動認識が使われているという話をラジオで聞き驚きました。また、その翻訳精度は98%ということでさらに驚きました。
国会のような専門用語が飛び交うところで高精度に音声を文字変換するシステムは京都大学とNTTが開発したらしいです。
そして、速記者の募集はとっくの昔に終了していたという事も知りました。
技術の進歩で人の職業がなくなってしまう。しかも、単純作業ではなく、速記という高等技術さえも不要にしてしましました。

kindle Voyage買いました。

mtjです。

自分は漫画でも文庫本でもよく読むのでkindleを買いました。
大体漫画でも全巻買えば段ボール1箱程度、文庫本2冊でも結構場所を取りますよね。
そのスペースを6インチタブレット1つにできるなら買おうと思って購入しました。

大抵文庫本というのは気が向いたらもう一回読みますが大抵文庫のスペースは
遅いので本棚を探すか、押し入れを探すかになってしまいますが
これはデータがAmazon上にあるので探す手間も保管しておく場所も必要ありません。

さらに、電池の持ちも良いので読んでいて充電がストレスになることはあまりありません。
自分の読む速度なら漫画6冊程度読んでも半分以上電池がある状態です。

欠点を言うならマイナー作家などの本がないこと、文庫のジャンル毎に分けられていないこと
できればホラーとか色々分かれていた方が本屋で歩いて探すような楽しさがあって良いのですが。
本屋で歩いて探して、kindleで買えばいいだけなんですけどね、あれば。

というわけで、概ね満足です。
タブレットで一番の欠点の電池の持ちを考えれば良い買い物したなと思います。

廃盤品

この世界にいると「廃盤品」に泣かされます。
お客さんが長年使っていただいた機器が故障しても中の部品が「廃盤」になっています。代替え品があれば良いですが8ピンで3種類の周波数が出るクロックモジュールなどはどうにもできません。
しかしながら、レコード針には驚きました。25年以上も前に廃盤になっているレコード針が現在も製造販売されています。(もちろん、オリジナルではありませんが)
やはり、今でも需要があるのでしょうね。
これで私も安心してレコードが聴けます。

雪。

こんにちはmtjです。

今回の年末は予想以上に雪がすごい年でした。
昼に雪かきを行い夜に出かけるということになり外を見ると、雪かきした量と同じような量の雪が積もっている
という状態でした。

京都に帰るときも電車が雪下ろしで停車する程度でした。
毎年、ある程度は白い景色ですが、今年のように長い間真っ白は久しぶりに見た気がします。

家のベランダが雪の落下で一緒に抜けた時ほど降ってはいませんが、最近では珍しいほど
降りました、これぞ雪国という雰囲気でした。

また、名物の土産の水羊羹は案外賞味期限が短かったので注意しましょう。
いつも、買ってすぐ食べるものだったので気にしていませんでした。