書籍による学習の大切さ

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

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

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

iOS用の社内ライブラリ

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

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

親の年齢

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

ガラスフィルム

mgcです。

今年の1月にIphone10に機種変更し、約4か月がたちました。
落としても大丈夫なようにとガラスフィルムを同時に購入していましたが
早速落としてしまいガラスフィルムにヒビが入りました。

ただ、ガラスフィルムの頑丈さには驚かされます
フィルムにはヒビが入っていますが
本体は無傷。
少しケチってフィルムを張らなければ
落とした時の修理費が恐ろしいことになりそうですね。
まだガラスフィルムを張られていない方が居ればぜひ1度使用してみてください。

VSの出来

こんにちはmtjです。

kotlinでUIの作成等に手を出していますがVSの出来の良さを改めて感じます。
特にUI、イベント関連の出来がよく何も入れなくてもダブルクリックでボタンのクリックイベントを実装可能です。
イベントもdelegateの注入処理もなくデザイナーが勝手にしてくれます

開発者は用意されたメソッド内に処理を書くのみでUIアプリを作成可能です。

kotlinの方はライブラリ等を模索しながら作りやすいように調整中です。
調べるほうが面白くなり全然進んではいませんが。

WindowsFormsのコントロールの背景色やフォントが設定されているかを取得

最近、WindowsFormsのコントロールの背景色やフォントが設定されているかを取得する必要があったので、Controlについて調べてみました。
なお、背景色やフォントは親コントロールから継承されるので、普通にBackColorプロパティやFontプロパティでは設定されているかを調べられません。

以下のサイトでControlのソースコードを調べました。
Reference Source

結果、internalなRawBackColorプロパティとIsFontSetメソッドをリフレクションで実行すれば取得できそうです。

実装は以下のようになります。


public static class ControlExtension {
    private static Func RawBackColorDelegate { get; }
    private static Func IsFontSetDelegate { get; }

    static ControlExtension() {
        RawBackColorDelegate = typeof(Control).CreateGetPropertyDelegate<Func>("RawBackColor", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod);
        IsFontSetDelegate = typeof(Control).CreateMethodDelegate<Func>("IsFontSet", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod);
    }

    public static Color RawBackColor(this Control ctl) {
        return RawBackColorDelegate(ctl);
    }

    public static bool IsFontSet(this Control ctl) {
        return IsFontSetDelegate(ctl);
    }
}

public static class TypeExtension {
    public static TDelegate CreateGetPropertyDelegate<TDelegate>(this Type type, string name, BindingFlags flags) {
        var property = type.GetProperty(name, flags);
        var info = property.GetGetMethod(flags.HasFlag(BindingFlags.NonPublic));
        return (TDelegate)(object)Delegate.CreateDelegate(typeof(TDelegate), info);
    }

    public static TDelegate CreateMethodDelegate<TDelegate>(this Type type, string name, BindingFlags flags) {
        var info = type.GetMethod(name, flags);
        return (TDelegate)(object)Delegate.CreateDelegate(typeof(TDelegate), info);
    }
}

Controlの拡張メソッドにしましたので、全てのコントロールで使用可能です。
毎回リフレクションは遅いので、staticコンストラクタであらかじめデリゲートを作成しています。
ついでに、Delegate.CreateDelegateメソッドをラップする拡張メソッドも作成しました。

PLCの文字列制御

そもそもシーケンサで文字列を扱う事自体に無理があります。
シーケンサのワードデバイスは2バイトなので便利な命令がないメーカーのPLCの場合は苦労します。※文字数が偶数のときは文字列の最後が1/2ワードになります。

スクリプト

mgcです。

ある案件でスクリプトをよく使用しています。

レーザーマーカーやアライメント等PLCから特定の機器へのコマンドの送受信
又は、内部での複雑な演算などにとても便利な機能です。

キーエンスのスクリプトはラダー内に直接記述できるので
ラダーの流れに沿ってスクリプトを使用することが可能です。

モニタするとスクリプトが今どこまで走っているのかが
明確に見えないところが少し不便かなと思います。

技術とは

こんにちはmtjです

最近アンドロイドアプリの勉強しようと思いkotlinをしております。
開発環境が日本語でないので既に敷居は高いのですがなかなか新鮮であり、JAVAを元にしている事もあり懐かしくも思います。

こういった新しい言語の考え方、作り方を覚えるのも良い技術のトレーニングになると思いました。
自分たちの業界には大切なことと思います。

スプリッタコントロール

今月はC#のSplitterコントロールとSplitContainerコントロールの2つのスプリッタコントロールに機能追加を行いました。

スプリッタコントロールは以下の画面のように、2つの領域をマウス操作で可変にするコントロールです。
なお、この画面は弊社で作成している社内用の画像処理ソフトです。

追加したのは以下の機能
1.マウスオーバー時に色を変更する処理
2.ダブルクリックで一方の領域を最小化したり元のサイズに戻したりする処理

この機能追加を社内ライブラリにおこないましたので、今後のアプリではこの機能が簡単に使用できるようになります。

今回対応したのはWindowsFormsだけなので、いずれWPF用にも対応を行う予定です。