パソコンや設備の更新時期

先日、お客様から連絡があり、古いPC-98のパソコンが壊れて動かなくなったとのこと。

症状を聞きながら色々と試して貰うと、HDDは大丈夫なようで、別の使っていないPC-98にHDDだけ入れ替えてソフトが起動できるようになりました。

OSがWindowsではなくMS-DOSで、もう20年くらい前のソフトを今も使っているようです。

今回は使っていないパソコンが余ってたので良かったですが、またいつ壊れるか分からない危険な状態です。

特注の検査装置のソフトなので、簡単にパソコンを更新する訳にもいかないのは分かるのですが、問題が発生したときのリスクを考えると、数年単位に更新の検討をするべきだと思いました。

開発側も更新時期をお客様に提案し、危険を回避できるように動いた方が良さそうです。

WPF

今仕事でWPFを使用しています。

いつも仕事ではWindowsFormを使用しており、馴れているためWPFに移行出来ていませんでした。

実際使用してみると一長一短ではあるものの、今後はWPFでも良いかと思っています。理由は以下。

1.予想よりも移行が簡単である。もっとWindowsFormとのギャップがあるかと考えていたが、それほどでも無い。事前にXAMLやVMMVを理解していたからかもしれないが。

2. 予想よりもWindowsFormと共存ができる。いままで社内ライブラリで使っていた共通のWindowsFormがWPFのプロジェクトで使えたり、WindowsFormsHostコントロールを使用してWindowsFormコントロ-ルが使えたり。

3.自由度が高い。さすがWPFと思えるところ。今まで簡単にできなかったことができるようになる。逆に今まで簡単にできたことが多少面倒になっている部分もある。

4.UWPの布石として。 正直、WPFがWindowsFormに置き換わることは無く、その前にデスクトップアプリが無くなりUWPに移行すると思われる。UWPのUIもXAMLなのでWPFに馴れておいた方が良い。 

他社ソフト会社のソースコードについて

今までに他社ソフト会社が作成したソフトの改造依頼などで色々なソースコードを見てきましたが、まともなソースコードはほとんど見たことがありません。

制御系ソフトという業界は、どの会社もソフト開発スキルが低いです。電気やメカについても学習しないといけないため、相対的にソフト開発スキルが下がるのだと考えています。

手前味噌ではありますが、インフォテックは制御系のソフト会社では 他社と比べスキルが高く、業界ではかなり珍しいと思います。

そんな他社制御系ソフトについて、最近とても出来の良いソースコードと出会いました。事前に設計をしているというのが分かるクラス構造や、デザインパターンへの理解がある実装など。他社ソフトでこんなに出来の良いソースコードは初めてです。しかも、ソフト専門の会社ではなく、お客様社内のソフト開発部が作成されたソフトでした。

来週の現調で開発された方にお会いするのが楽しみです。

FileMappedList

インフォテックで作成するソフトでは、1日分などの長期間の時系列測定データを処理する場合などが良くあります。

さすがに全てのデータをRAMメモリ上に確保するのは現実的ではないので、 バイナリファイルにデータを保存し、必要なデータだけを読み込んで使用できるようにするのが良いのですか、データを使用する側の実装が複雑になるのは避けたいところ。

ですので、バイナリファイル内のデータをListのように扱えるFileMappedListクラスを作成しました。このクラスを使用すると、インデクサを使用して指定したインデックスの値だけをバイナリファイルから取得したり、指定したインデックス範囲について間引きを行って値を取得するなどが行えます。データの型はジェネリックで指定可能です。

200行程度の小さいクラスですが、使ってみた結果はとても良いです。

null条件演算子 (?.演算子)

VS2015で追加されたnull条件演算子(?.演算子)について、今日初めて使ったので覚え書き。

この演算子を使用すると、 Maybeモナドのようにオブジェクトがnullかどうかを気にせずに実装を行えるようになります。

例1:
var control = form?.ActiveControl;
フォームオブジェクトからアクティブなコントロールを取得します。
フォームオブジェクトがnullの場合、controlはnullになります。

例2:
var color = form?.ActiveControl?.BackColor;
フォームオブジェクトからアクティブなコントロールの背景色を取得します。
フォームオブジェクトやアクティブコントロールがnullの場合、colorはnullになります。
なお、null条件演算子を使用しているため、colorの型はNullable<Color>になります。

例3:
var color = form?.ActiveControl?.BackColor ?? Color.White;
フォームオブジェクトからアクティブなコントロールの背景色を取得します。
フォームオブジェクトやアクティブコントロールがnullの場合、colorはWhiteになります。
colorの型はColorになります。

例4:
form?.ActiveControl?.Refresh();
フォームオブジェクトのアクティブなコントロールのRefreshメソッドを実行します。
フォームオブジェクトやアクティブコントロールがnullの場合、Refresh()メソッドは実行されません。

残念なのはプロパティやインデクサへのSetには使用できないこと。(自分が使い方を分かっていないだけかも)以下のようなコードは書けません。
form?.ActiveControl?.BackColor = Color.Black;
(frm?.ActiveControl?.BackColor).Value = Color.Black;

バージョン管理ソフト

弊社で使用しているバージョン管理ソフトはいまだにVSSです。
いい加減に更新しないと駄目だと思いつつも、手をつけることができずにいました。

開発ソフトもVS2012からVS2015に移行したいのですが、VS2015+VSSの相性が悪く、VSSを止めないとVS2015に移行できない。ですので、いやでもVSSを止めて別のバージョン管理ソフトに移行する必要があります。

今までVSSだっったのでTFSに移行するのが楽だと思うのですが、世の中のはやりがGitですし、マイクロソフトもGit推しで今後のTFSの動向が不安なため、Gitにしようと考えています。

WEBに繋がずローカルネットワークでと考えているので、まずはGitLabを試してみようと思います。

モバイル用キーボード

たまにタブレットで文章を書きたいときにキーボードが欲しくなるので、モバイル用のキーボードを購入しました。

今回のキーボード選びのポイントは2つ。
1.キーボードを使用したい時に持っていなければ意味が無いので、常にカバンに携帯しても邪魔にならない折りたたみ式であること。
2.タブレットのUSBポートが1つしかないのでBluetoothで
あること。

悩んだ結果、ミヨシのTOR-BT02にしまし。ですが、正直り気には入っていません。ほかの折りたたみ式の中ではましかと思ってこれに決めました。

 

 

 

10年前に使用していたVAIO TypeUについていた折りたたーボードのできが良く、これと比べてしまうため、どうにも見劣りしてしまいます。このキーボードは折りたたみでありながらキー配置やサイズが通常のキーボードと遜色なくキー入力ミスが少ないです。また、ポインティングデバイスも付いているのでマウスも不要です。残念なのは有線であることだけ。これと同機能でBluetoothのものが販売されたら即購入すると思います。

C#のソースコードを実行時にコンパイル

先日、アプリの実行時に入力した任意のC#ソースコードの値をロギングして、グラフ表示するコントロールを作成しました。

CSharpCodeProviderクラスを使用してC#ソースコードをコンパイルできるのは分かっていましたが、使用するのは初めてです。使い方が分かってしまえば、とても簡単に実装できました。

この実行時コンパイルの機能を利用して、アプリにマクロ機能を実装したり、実行時に任意の処理を注入したり色々と遊べそうです。 

画像処理ライブラリの機能追加

今月も色々と社内画像処理ライブラリに機能追加を行いました。

1.演算に使用する値や論理値を式入力できるようにする。また式で使用できる関数を色々と実装。これにより値操作がとても楽になりました。

2. 配列の作成や連結を行うタスクを追加。

3.画像処理評価ソフトのデザイン変更。今までよりスッキリし、ノートパソコン等の小さい画面でも操作しやすくなりました。

画像案件

12月頃から開発を進めていた画像案件がもうすぐ一段落します。
今回の装置屋さんはとても優秀で、指示したとおりカメラと照明の微調整が行いやすいように作成してくれました。
おかげで現地調整が効率良く行え、今後の保守も行いやすそうです。
他の装置屋さんもこれくらい良い仕事をしてくれると助かるのですが・・・。