タブレット

mgcです。

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

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

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

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

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

こんにちはmtjです

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

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

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

書籍による学習の大切さ

書籍を買って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から特定の機器へのコマンドの送受信
又は、内部での複雑な演算などにとても便利な機能です。

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

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