string型プロパティの複数行入力

TextBoxコントロールのTextプロパティなどはプロパティウィンドウで複数行入力が可能です。
以下の画面のように右端の下矢印ボタンクリックで複数行用の入力ウィンドウがポップアップします。

今回、これと同じ挙動を自作のプロパティで行いたく、調べた結果、以下のように属性指定すると複数行入力が行えることがわかりました。


        [Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(System.Drawing.Design.UITypeEditor))]
        public string Text {
            get => _Text;
            set {
                ...
            }
        }

PGに数学が必要か否か

こんにちは mtjです。

自分の親にプログラムは誰でもできると話したら数学ができないと難しいと返されたので表題に書いてある通りの事を考えました
個人的には数学は必要なとこは必要だけど、基本必要無いと思います。

計算を作ってコードを作る部分はありますが、基本はそこまで高度な計算は考えません。
大体出来合いのライブラリ側が計算はやってくれます
もちろん動作を理解する上ではできることに越したことはありませんが、数学が苦手だからプログラムを諦めているような人は一度プログラムを触ってみることをおすすめします。

自分は商業科、専門学校出なので数学Ⅱ、数学Ⅲなんて触ったことすらありません
それでもプログラムは普通に書けるので正直学校の成績とプログラムは結びつけるべきではないと思っています。

勉強するやる気とパソコン関係が好きならプログラムは誰でも書ける物と思っています。

初めまして。

今年の4月からインフォテック株式会社に入社しましたmasugiでございます。
これからよろしくお願い致します。

現在私は研修として、C#を用いたソフトウェアの開発の練習を行っています。
その際、要求仕様に関する不明点を質問しなかったり、要求仕様を(実際には正しく理解していないのに)正しく理解していると思いこんで実装を進めた結果、実装したソフトウェアの機能が要求仕様と違う、ということがありました。
練習だから良かったものの、これが実務だとお客様からお叱りを受ける、ということになりかねません。
このことから、要求仕様を正しく理解するために、どんなに些細なことでも不明点の質問や確認事項の確認を怠らないようにすることが大事だと感じました。

また、開発に関して悩んでいることがあったら、最適解が思いつくまで自分で悩み続けるよりも上司や先輩に相談した方が早いことがあることも学びました。

最後になりますが、研修で開発ツールの使い方やコーディングの仕方をしっかりと習得して実務に臨みたいと思います。

開発のトレーニング

こんにちは mtj です。

ゲームをよくする手前 購入した人にダメージをあたえる いわゆるクソゲーとなるものを購入する頻度は高い

購入したお金はもうどうしようもないが そこから友達と何故これが産まれたかを話し合うのはとても面白い
またプロジェクトで自分がこういう物を作らないようにするためのトレーニングにもなります。

ゲームは様々な要素が組み合わさってできています
・コントローラーでの操作性
・UI等のデザイン(配置等も含む)
・ゲームとして面白さ
・シナリオとして面白さ
・3D等グラフィック
それ以外にもジャンルによっては様々ありますが ゲームの内容によって何が足りないか
何故足りなくなったがだいたい想像できます

そういった要素ごとに色々考えながらマネージメントの本を読むとマネージメント力が上がると思います
また、ここからどうやったら面白くなる、改善案等も考えることでそのような製品開発のトレーニングにもなります。

是非マネージメントをやったことが無い人はクソゲーをクリアしてトレーニングしてみてください。
いい勉強代になると思います。

USBドライバインストール時エラーの対処

先日、USBカメラを接続するためにドライバのインストールを行ったのですが、
その際に以下のエラーが発生し、インストールに失敗しました。
「このハードウェアのデバイスドライバーを読み込むことができません。
 ドライバーが壊れているか、ドライバーがない可能性があります。(コード39)」

結論から言うとWindowsセキュリティ設定が原因で、

Windowsセキュリティ->デバイスセキュリティ->コア分離->メモリ整合性をオフに変更

により解決しました。
以下、解決までの過程です。

1. 試行錯誤
次のようなことを試したのですが、解決も原因特定もできませんでした。
・カメラやケーブル、接続ポートを変更
・メーカーHPにてドライバの対応OS, CPUの確認
・ドライバを最新のものに更新

2. PC初期化
社内の他のいくつかのPCでは問題なく成功しており、
PC自体に原因がありそうだったのでPCの初期化も行いましたが、
それでもインストールは成功しませんでした。

3. メーカー問い合わせ・解決
にっちもさっちも行かなくなり、メーカーさんに問い合わせたところ、
次の手順でWindowsのセキュリティの設定を緩めれば良いと教えていただき、
無事解決しました。
スタート->設定->更新とセキュリティ
 ->Windowsセキュリティ->デバイスセキュリティ
  ->コア分離->コア分離の詳細
   ->メモリ整合性をオフに変更

原因となったメモリ整合性、PCによっては出荷段階で既にオンになっているようなので、
ドライバのインストールに失敗した際には確認してみると良いかもしれません。

その後、本件について補足情報などないか検索していたところ、
エラーメッセージ+エラーコードがタイトルの記事に解決策が掲載されているのを発見しました。
プログラミングの際はエラー発生の初期段階でエラーメッセージの検索をするのですが、
今回は失念していました。今後は気を付けたいです。

VisualStudioの起動が遅い

弊社で開発している、ある案件のVisualStudioソリューションを開くのが異常に遅い問題があり、
てっきりプロジェクト数が100個くらいあるのでしかたがないと諦めていたのですが、
原因がわかり速くなりました。

問題は「Microsoft Visual Studio Installer Projects」で作成したインストーラプロジェクトでした。
インストーラプロジェクトを含んでいるとVisualStudioソリューションを開いていからマウス操作がまともに行えるようになるまで1分くらいかかっていたのですが、
インストーラプロジェクトを省くとマウス操作が数秒で行えるようになりました。

今は、ソリューションに空のダミーインストーラプロジェクトを含むようにし、インストーラを作成するときだけソリューションファイルを置換してダミーインストーラプロジェクトから本番インストーラプロジェクトに切り替えるようにしました。

もっと早くに気づけばよかった。

PGの作りが良いか

こんにちは mtj です。

PGの作りが良いか悪いかこれがわかるようになるかは勉強するだけではわからないことが多いと思います。
実際に良い作りがわかるのはそのソフトを改造、保守する、別の誰かが改造するときにわかりやすいものです。

改造、保守等がしやすいなら基本良いプログラムだと思われます。

コードを書くだけであれば現状のコードをコピペしたり、メソッド等に分けずに書いた方が早い場合があります。
メソッドに分けるために頭を使わないのでその時は速くなります。
コピペも現状の動作が繰り返されるならそれで問題もなくなります。

しかし上記のコピペ等にバグ、変更等を行った場合 コピペした箇所を全部探したり
メソッド分けもされていないような長いコードを読んで影響範囲を調査したり不都合な事が多く発生します。

PGは本を読んでの座学だけでなくアウトプットが必要という話がよくあるのは作らないとわかないことが多いためだと思います。
新しい事を学んだら頭の中でも仮想でもいいのでアウトプットすることを心がけるとPGのレベルアップが早くなるかもしれませんね。

Reflectionによるプロパティ名の取得

先日、クラスの持つプロパティ名をExcelファイルに列挙すると言った作業を行うことになりました。
対象となる複数のクラスから特定の条件を満たすプロパティの名前のみを列挙する必要があり、
始めは手作業で地道にコピーしていたのですが、途中でReflectionを用いれば自動で列挙可能だと気付きました。
プロパティには列挙条件を示す属性が付与されていたのですが、
属性を取得できることを失念していました。

取得には以下のようなコードを使用しました。
※正確に再現したコードではないのでミスなどあるかもしれません


private static List<string> GetHogeIsHugaPropertyNames(Type type) {
    return type.GetProperties()
               .Select(p => (p, Attribute.GetCustomAttribute(p, typeof(HogeAttribute)) as HogeAttribute))
               .Where(x => x.Item2 != null && x.Item2.IsHuga)
               .Select(x => x.p.Name)
               .ToList();
}

これに気付かなかったため時間を少し溶かしてしまいました。
何か作業する際は開始前に作業手順を確認し、
繰り返し手作業を行う必要があるようならどうにか自動化できないかを考えるようにしたいと思います。