Chromeの自動更新
Chromeの自動更新をADのグループポリシーで行っている。
を参考に設定したが、更新されない。 以下の設定を追加で変更したところ、うまく動作するようになった。
- [Google Update]-[Application]-[Google Chrome]
- Allow installation: 未構成 → 有効
- [Google Update]-[Preferences]
- Auto-update check period override: 1400 → 60
Excelでオプションボタン
利用者が使い慣れたExcelでアンケートシートを作ろうとした際のこと。
どれか1つを選択してほしい場合は、オプションボタンを使う。開発タブにあり、フォームコントロールとActiveXの2つがある。
フォームコントロール
- フォントの見た目がActiveXと比べればマシ。
- グループ化するのに、グループポックスを使用しないといけない。
- 行や列の追加・削除でグループボックスに入ったり外れたりすると挙動が想定外となる
- レイアウト上、グループボックスが不要な場合は非表示にしないといけない。が、非表示にするとどこにあったかわからなくなる。
- 誤ってグループボックスが重なったりするとやはり想定外の挙動となる。
-
- グループ化するのにグループ名を指定できるので、フォームのように想定外の動作をすることはない
- フォントの見た目がひどい。クリックしたときとそうでないときで大きさが変わる?
- 項目Aを選択し、項目Bを選択してさらに項目Aを選択...と繰り返すと、どんどんフォントが大きくなる(致命的)
- プロパティ上のフォントサイズは変わっておらず、コントロールのサイズを変更すると直る。
- 当方では2013で発生。MSも認識はしているらしいが、対応作なし... https://support.microsoft.com/ja-jp/help/417966
ActiveXのフォントが大きくなる不具合は致命的なので、グループボックスの位置に注意しながらフォームコントロールを使うことにした。 どちらの場合もだが、オプションボックスをセル内に収まるようにしないと、セルの追加で配置がずれてしまうので注意。
NECのEXPRESSSCOREのJavaアプレットが動かない
当社ではNEC製サーバを導入しているのだが、NECサーバではサーバのステータス確認や設定変更にEXPRESSSCOREというWebコンソールが利用できる。 これが、一部機能がJavaアプレットで動く仕様になっている、今時...
BIOS等の更新が出ているので適用しようと思い、現在のバージョンを確認しようとすると、このアプレットか、サーバを再起動して起動画面で確認するしかない...
今時Javaアプレットが動くのはIEかSafariくらい。JREは8までしかサポートしない。 Windows 7 のIEでなんとか動かそうとするのだが、反応しない。
通常のブラウザで確認できる画面にsshの項目があり、これを有効にしたところsshでログインできた。ほしいバージョン情報も取得できた。 ただ、このまま開放しとくのも気持ち悪いので、必要なときだけsshを有効にする運用とした。
Bootstrapper().Run() 実行時にFileNotFoundException
WPFでPrsimを習得しようと日々格闘中です。
ふとしたタイミングで、Bootstrapper().Run()実行時に
"ファイルまたはアセンブリ 'System.Runtime, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'、 またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。 ":"System.Runtime, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
なるエラーが表示されて進まなくなってしまいました。 シンプルなShellのみ起動するように修正してもダメ。NuGetですべてのライブラリを一旦アンインストールし、最小限のみとして前に正常に起動した状態に戻してもダメ。
どうやら、app.configとターゲットバージョンにより発生(自分のプロジェクトでは4.7.2)するらしい。
.NET Standard issues on .NET Framework 4.7.1 · Issue #567 · dotnet/standard · GitHub
Workaroundsにあるようにapp.configのdependentAssemblyタグをすべて削除し、ターゲットバージョンを一旦4.0にして再度4.7.2に戻したところエラーが消えて動作するようになった...
Visual Studio CodeでMarkdownのPreviewカスタマイズ
はまった。
Windows上のVisual Studio CodeでMarkdown Previewをcssでカスタマイズすることがどうしてもできない。指定した cssファイルがないと言われる。
cssを絶対パスでは指定できないことは認識しており、Markdownファイルと同じパスにcssを置き、setting.jsonでファイル名のみ指定してもダメ。各種記事を見てそのままやってみたつもりでもうまく行かない。 markdown-pdf.styles で指定してPDF出力する分には問題ないのだが。
結論としては、ファイルサーバにおいてあるファイルの場合はダメなよう。ネットワークドライブを設定してもダメ。 ローカルに持ってきたら普通に動作した... 半日無駄にした... なお、ファイルサーバに置いていると画像も表示されない。Visual Studio CodeのMarkdown編集はファイルサーバ上のファイルとは相性が悪いと認識した。
WPFのMVVMについて考える
最近、Windows FormをやめてWPFのプログラムを書き始めている。
WPFは正直必要となる知識レベルが高く難しいというイメージで手が付けにくかった。今もそうだが。 何が難しいかといえば、MVVMの考え方をどこまで徹底するかに尽きるのではないかと思う。
MVVMについてまだまだ分からないことも多いが、今の認識をまとめる。
- MVVMは、ModelとViewの間にViewModelという層を挟み、ModelとViewの依存関係を疎にするモデル
- WPFの場合、ViewとViewModelの間でデータを複雑なコード不要でやりとりするBindingという機構があるので、うまく記述すればViewとViewModelの間も疎にできる
- そうすると、Model, ViewModelは変えずにViewだけ差し替えることも可能となる。
- Windows Formの場合は、Viewの一部であるコードビハインドに処理もがっつり書いてしまうため、Viewだけ差し替えるということはできず結構な書き換えが必要となる。
- Windows Formもそうだが、何も考えずに書くとどうしてもViewに処理を書いて肥大化しがち。そこで、ViewはViewModelの処理の呼び出しのみにする方が良いとされ、コードビハインドには極力コードを書かない方が良いとされる。
- 逆にViewModel側もViewに依存してしまうと別のViewに差し替えることができなくなるので、Viewに関するコードは書かない方が良いとされる。
- MessageBoxのようなダイアログや、別のWindowを直接起動する処理すら良くないとされる。
- じゃあどうするんだというと、Blendと言う部品や直接呼び出さずにInterface経由とすることで直接依存を避ける手段を取るべきとされる。これが初心者には超絶難解だと思う。
- MessageBoxのようなダイアログや、別のWindowを直接起動する処理すら良くないとされる。
- 逆に、上記のようなViewを差し替える事態がそもそも考えなくて良いのであれば、今まで通りコードビハインドにコードを書いても問題はない。それでもWindows Formより洗練された部品が使えるのでメリットはある。
さしあたって、すぐに直面するのはViewModelからMessageBoxのような利用者への通知処理をどう行うか。行いたいのはMessageBoxを出すことではなく利用者にメッセージを伝えることと抽象化し、ShowMessageのようなメソッドをもつInterfaceを定義してこれを利用する形とする方法をとっている。以下のページが参考になった。
このパターンは、コンストラクタに引き渡す処理に気をつければViewModelからのViewの呼び出しが簡単にできるため、よく使っています。