MECHATROLINK-Ⅲ

KV-XH16MLを使いました。
但し、SV2は1台も接続していません。
IAIのPCON(6軸)とORIENTALのAZ(6軸)です。
FBとフローを使用してラダー回路もシンプルになりました。
素晴らしいのは、後に「PCONとAZを別な物に置き換えても
プログラムを変更する必要がない」というところです。
※分解能が変わる場合は電子ギアの設定値が変わります。
Ethernet/IPも初めて使いましたがCC-Linkのような
配線間違いも無く順調にデバッグできました。
いつも時間のシワ寄せがラダーマンに襲い掛かりますが
このようなシステムは大変ありがたいです。

設計は単純なときから

mtjです。

誰かが改造した、自分が改造した問わずにソースの見直しは小さいところから行うべきだと感じました。

小さい時の変なコードもその小さな組み合わせが大量に貯まり全体で見るとかなり保守をしにくい状態になる場合がありました。
小さい内に気にしていれば後に機能改造を行った場合に把握、改造がしやすいと感じました。

自分が作成していたものは気をつけていたのですが、他人のコードになるとチェックが甘いところがあるのでそういった箇所を気をつけ
他人のコードであろうが巻き込んでリファクタリングしたほうがいいと感じました。

RS-232C

産業界ではまだまだRS-232Cは現役です。
通信内容が単純でノイズにも強く、扱いやすい為です。

COMポートの通信内容を詳細に調べる必要があったので、
Microsoft純正のCOMポート監視ソフト「Portmon」を使いました。
残念ながら普段使用している64bit環境のOSには対応しておらず、
別の開発環境を準備して確認する事となりました。

少し前なら当たり前のようにできていた事が、
最新の開発環境では使い慣れたものが使えなかったり、
逆に不便だったりすると、とても残念な気持ちになります。

タプル戻り値の要素数を増やす方法

C#7で追加されたタプル(ValueTuple)によって戻り値を複数返すことが出来るようになりました。


■タブルを使用した戻り値の例

public (bool b, string s) GetTuple() {
    return (true, "AAA");
}

public void Sample() {
    var (b, s) = GetTuple();
}

ここで1つ疑問が出てきました。機能追加によってGetTupleメソッドの戻り値を1つ増やしたいが、GetTupleメソッドを使用しているコードを変更したくない場合、どうすれば良いのか。

まず、バイナリ互換性を維持するのであれば、オーバーロードで複数のGetTupleメソッドを作成する方法が思いつきます。


■GetTupleメソッドのオーバーロード例 ビルド出来ません。

public (bool b, string s) GetTuple() {
    return (true,"AAA");
}

public (bool b, string s,string s2) GetTuple() {  
    return (true, "AAA","BBB");
}

public void Sample() {
    var (b, s) = GetTuple();
}

しかし、これではうまく行かないです。
C#は戻り値違いによるオーバーロードは出来ないからです。
引数を変えるか、メソッド名を変える必要があります。

次に、タプル(ValueTuple)を分解する拡張メソッドを作成し、3要素のタプルから2要素だけ分解する方法を考えました。


■分解拡張メソッド(Deconstruct)の例 ビルド出来ません。

public (bool b, string s,string s2) GetTuple() {
    return (true,"AAA","BBB");
}

public void Sample() {
    var (b, s) = GetTuple(); 
}

↓この分解拡張メソッドはstaticクラスに実装
public static void Deconstruct<T1, T2, T3>(this System.ValueTuple<T1, T2, T3> tuple, out T1 v1, out T2 v2) {
    v1 = tuple.Item1;
    v2 = tuple.Item2;
}

分解拡張メソッドは複数実装できるはずなのですが、なぜか追加した分解拡張メソッドは呼び出されませんでした。

結果、どの方法もうまくいきませんでした。
.netで標準的に要素数の少ない分解が出来るようになってほしいと思うのですが、出来ないということは何かリスクがあるのでしょうかね。

タブレット

mgcです。

今年も梅雨の季節がやってきましたが
皆様いかがお過ごしでしょうか?

最近タブレットを購入しようとあれこれ見ているのですが
どれが良いのかいまいちわからなく困っております。

現場等でメモ書きをするとすぐにぐちゃぐちゃになり
何を書いていたのか分からなくなることが多々あり
それをまとめることが出来ればと購入を考えております。
ただ、現場では迅速な対応が求められるので
いちいちタブレットを開いて覚書という風にはいかない気もします。

便利ですが現場で使用となるとどうなのでしょうか。。
少し悩みどころです。

デスクトップアプリからWEB系

こんにちはmtjです

現在のプログラムはWEB系のアプリがメインになりつつあります。

デスクトップアプリに比べて様々なOSで動くことがメインだと思われます。
一時期に比べてWindows一強状態ではなくアンドロイド、IOSのタブレット等が流行っているので当然の流れだと思われます。

IT関連技術者もこれからWEB系についていける人が残っていくのではないのでしょうか。
WEB系は様々な要素技術の集まりなので役割分担がしやすく作りやすくなると思います、その分根幹部分の技術者の需要も上がっていくと思うので自分はそういうところを詰めて行けるといいかなと感じます。

書籍による学習の大切さ

書籍を買ってC#を勉強しています。
インターネットでも多くの情報が手に入る時代ですが、
断片的ではなく、系統立てて学習するには書籍が必要だと感じます。

C#は時間をかけて成熟してきた言語ですので、
今はあまり使われない古い記述方法や作法などもあります。
インターネットでザッピングして情報を集めると、
同じ内容でも様々な記述方法が混在してしまうので、
整理して、自分なりのコードに変換できる能力が必要だと思いました。

それにしてもC#の本はどれも重いです…
電子書籍は購入も持ち運びも手軽ですが、実際の書籍に比べると使いにくいです。
慣れれば、もっと便利に使いやすくなるのでしょうか?

iOS用の社内ライブラリ

iPhone用アプリの開発でWindows用社内ライブラリに入っているクラスを使うことになり、せっかくなのでiOS用社内ライブラリを作成しました。

以前UWP用社内ライブラリを作成したときに共通化できそうなソースコードは共有プロジェクトに移動したので、今回は簡単にiOS用社内ライブラリが出来上がりました。
Xamarinの互換性の高さに驚きです。

親の年齢

自分の両親の年齢を答えられない人が増えたような気がします。
当然のことながら、その人達は両親の生年月日を知りません。
これは「元号離れ」も一つの要因でしょうか?
それでも自分の生年月日は「元号」or「西暦」で覚えているでしょうから両親のそれも覚えられると思うのですが・・・。
「覚えてどうすんですかぁ~?」と言われたら、何と答えますか?