説明する力と顧客の理解

こんにちはmtjです。

最近は日本でもDevOps等の用語が聞かれるようになってきました。

よくある手法開発の発注側から作成して欲しいシステムの依頼を出し完成品を納品するですが
DevOpsは上記の数ある機能をまとめて納品するというよりは機能1つ1つを作っては公開という作り方になります。

上記の方法は様々な利点があるのですが、開発、発注側(運用側)どちらにも知識が必要なことが難しい事だと思われます。
特に運用側の協力は先に上げた完品の納入に比べてかなりの労力が必要となります。
・次の機能の策定
・優先順位の策定
・必要な機能等の情報収集。

そして自分たち開発側もコスト、期間、難易度等を説明する能力が必要になると思われます。
また完品と比べて頻繁に既存コードの改造が入るのでリファクタリング等の時期を定めないと大変なことになることでしょうか。

上記の労力等を考慮してもなかなか利点の多い開発手法なので自分ももっと流行りを勉強して様々な事に対処できるようになりたいと思っています。

使いやすい携帯端末

電話とメール専用に「Xperia SX」という端末を使っています。
ディスプレイは3.7型で、本体も95gのかなり小さな端末です。
いつか後継機が出たら買い替えようと思いつつ、6年が過ぎてしまいました。

バッテリーも待ち受けだけなら昔のガラケー程度は持つし、
何よりポケットにも無理なく収まるので、お気に入りなのです。
ちなみにその前に使っていたものは「Xperia ray」という端末で、
これも3.3型の小型のものでした。

スマートフォンの機能がどんどん多様化・複雑化する中で、
アドレス帳やスケジュールやメールなどの個人情報、
それに鍵やお財布などの重要な機能は、
その他の雑多なアプリを含む端末とは切り離して所持したいと思っています。

ただ私のような考えはあまり一般的ではないのでしょうか、
小型の端末が発売される気配すらありません。
そろそろ新しいバッテリーの入手が難しくなりそうです…
小型のスマートフォンの発売を切に願っています。

「建設業の足元にも及ばない、IT業界は最も遅れた労働集約型産業だ」について

今朝見た日経XTECHの以下の記事が面白かったです。
「建設業の足元にも及ばない、IT業界は最も遅れた労働集約型産業だ」

我々IT技術者が良く比喩に使う建築業よりも遅れた業界だったとは!

私はこの業界に入ってソフト開発会社2社に勤めましたが、どちらもSIer無しの1次受けで、自社内での受託開発でしたので、この記事に書いているような多重請負でのIT土方な現場には関わったことがなく(関わりたくないですが)、驚くとともに技術者が可哀想になります。

このような現場では、志が高い技術者が入ったとしても、続かないか腐っていきます。結果、知的技術者はいなくなり、労働者だけしか残らいない技術者デフレスパイラルになってしまう。もったいない。

私は、志が高い技術者はベンチャー系会社に入ったほうが幸せだと考えています。
いまの日本のソフトウェア業界では、やりがいがあり・技術力が身につき・成果が収入になるのはベンチャーだけです。

つまり何が言いたいかというと、「インフォテックはベンチャー系なので、やる気のある技術者はぜひ面接に来てください」ということです。

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系は様々な要素技術の集まりなので役割分担がしやすく作りやすくなると思います、その分根幹部分の技術者の需要も上がっていくと思うので自分はそういうところを詰めて行けるといいかなと感じます。