布団が俺を呼んでいる

丘山大一のぶろぐ

.Net Core で GetObject したいのですが

どうすればいいざんしょ?


経緯

.Net Core がWPF 対応したことだし、手元の古いアプリの移行可能性を検討しようと思い立つ。
で、そのアプリはサードパーティのComライブラリを呼び出している。
で、既存の動きに合わせてMicrosoft.VisualBasic.Interation からGetObjectを呼び出そうとしたら……あれ、無い?
ドキュメントにあたると、たしかに.Net Core の記述がない。


調査する

でがらし会で情報を持っている人募集。で、この人https://twitter.com/kowillmから情報がくる。

実装自体は進んでいるような感じ。
ただ、Not Tested ともある通り、完成していない感じはある。

実装もある程度進んでいる雰囲気はある。

しかし手元の.Net Framework の dllの中身と比較すると実装が異なる、というか足りない感じ。
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.VisualBasic.dll


さてどうしよう

VisualBasic.dll の実装自体は(こう言ってはなんですが)意外と活発に見えます。
しかし最新のパッケージが2018/12/3と一年以上前であり、リリースできる状態までこぎつけていないのか、あるいはリリースを一時中断する理由があるのか判別がつかない。
というのも、ない理由が「仕掛りなだけ」ならいいのですが、「他のdllにメソッドを移植した」「.Net Core では別実装を検討中」「問題が見つかった」「.Net Coreで実装すべき機能ではない」などの理由だと(検証的に)困っちゃうんですよね。
.Net Core へのVB関連の取り組みがあまりされていない感じもあり、またWinFormに依存する部分は含めない的な方針もあるようで……Windowsのための実装のcom系に使われる機能はどういう取り扱いになるのか不透明&不透明。
Marshal.GetActiveObject がないから、というのも理由の一つな気もしますが。

無ければ作ればいいじゃないの精神で、必要な部分だけ引っこ抜いて個別実装してもいいのですが、「まだ無い」理由が分からないと徒労に終わる可能性も高いので、なかなか踏ん切りがつきません。
該当部分は.Net Frameworkで作れ! が正しいとも考えられますし。

どういう状況なんでしょ。

PackageManagement に挑戦その3

前回から大分間があいた。


更新について

apt update && apt upgrade 的な、プロバイダ経由で入れたパッケージの更新ってどうやるんでしょう?
Update-Package のようなコマンドがあるかと思いきや、見つからなかったのでゴリ押しました。


Get-Package -ProviderName ChocolateyGet
で取得した名前をもとにインストールかけてみました。うーん、これはやり方間違っている感。
あと、これだとインストールの度に「Y」を入力しなければならないです。
諸々、正しいやり方をだれか教えてください。探してもよく分からなかったんです……


それでな?

今更気が付いたんですが……


なぜKBがChoco経由でインストールされている……??

入れた覚えサパリないんですが。
https://chocolatey.org/packages/KB2919442
https://chocolatey.org/packages/KB2919355
たしかに公開されてはいるんですけど、なぜ入っている??


う~ん。分かりませぬ。
PackageManagement は導入部分の記事は多いんですけど、運用している人の記事をあまり見ないんですよね……
運用しなくなってしまったか、秘蔵のタレがあるのか、簡単すぎて記事にしないの3ケース。
……最後のケースのような気がするな……しくしく。

やっぱPowerShell も本を買って調べなおさないとダメですね……むむ。
↓の本はまだ買えていない((+_+))




PowerShell実践ガイドブック ~クロスプラットフォーム対応の次世代シェルを徹底解説~

新品価��
¥3,974から
(2019/3/14 11:30時点)

Windows 10 Mobile Windows Update 後の再起動ににかかる時間(10.0.15063.483)

視界の隅で再起動していることに気が付き、慌てて計測開始。


今回はこんな感じ

アップデートファイルのダウンロードや更新自体は済。再起動にかかる時間だけです。
合計15分程度で更新が完了しました。
状況によって時間は大きく前後すると予想されますので、目安の一つとして。


バージョン

端末はNuAns Neoです。
本日時点の各バージョンは、
バージョン:1703
OSビルド:10.0.15063.483
ファームウェアリビジョン番号:1028.020.001.95
ハードウェアリビジョン番号:1.0
無線ハードウェアバージョン:1.0
チップSOCバージョン:8952


私の端末で残っている不具合

Windows 10 Mobile の Minecraft PE、大分前から起動しなくなってしまったのですが、今回も直りませんね。
やっぱりゲーム側の問題なのかな?
Continum も、一日経過すると接続できなくなるという現象があるのですが、こちらも直っていないようです。
(再起動することで再説できるようになるが、超面倒)
Adapter のファームウェアアップデートがあったから期待したんですが・・・・・・。



mouse SimフリーWindowsPhone (Simフリー/Windows10 Mobile/Office Mobile/大画面 6型フルHD/3GBメモリ/保護シート付) MADOSMA Q601

新品価格
¥20,175から
(2017/6/18 00:01時点)

ブルスク!(NVIDIA)

BSODをアニメのタイトルぽくして、絶望感を緩和してみる。


ネタバレ

主原因はNVIDIA グラフィックドライバのUpdate?


経緯

4月初旬、Creaters Update によりウィルスバスターが入らなくなる。
6月1日、そろそろ改善されたかなー、と思ってウィルスバスターを入れる。
     合わせて、裏でUpdateが走っていた。
6月3日、やたらとWIndows が落ちる。下手すると起動後10分くらいで落ちる。
6月頭、 直近でやったことってなんだっけ?と考えて、ウィルスバスター停止。それでもすぐ落ちる。
     アンインストールし、安定するように。
6月初旬、安定したといったな、あれは(略)
     起動後40~100分ほどでBSODするようになる。
     主にキーボード操作中にBSODする。


調査開始

ブログ書いている途中で落ちるならともかく、コード書いている途中に落ちるんじゃ何もできんわ。
というわけで、イベントログを覗くもめぼしいものは見つからず。
んで、メモリダンプを見てみたら、ちょくちょく「nvlddmkm.sys」で死んでいる模様。
どうやら、というか名前のままなのだがNVIDIA 関連。
調べてみると6月1日にUpdate が走っていた。
ここでウィルスバスターにマシンをバスターされたと思っていたが濡れ衣だった可能性に気が付く。
ごめんよバスター。
(でもバスターアンインストールしたらちょっと安定したのも事実なんだよなー)

一度ドライバをアンインストールしようかと思ったが、先に最新版のドライバを手動で入れなおしてみた。
ちょっと安定したものの、3時間ほど起動していたら死亡した。

こりゃだめだ、と日を改めて、NVIDIA のドライバーを片端からアンインストール。
アンインストール後、ちょっと放っておけばWindows Updateでもう一度キレイにドライバが入ります。
すると、なんということでしょう、LANケーブルを引っこ抜いただけでBSOD。
意味が分かりません。

といわけで、再びNVIDIAドライバを全削除。
今度はWindows Update を一時停止してドライバが落ちてこないようにしました。
3日ほど様子を見ましたが、安定しているようです。
犯人はこの子ということで。

今後

どうしようかなあ、と悩み中。
Updateもいつまでも止められないし、止めたくない。
アプリの整理もできていないし、そろそろOSごとクリーンインストールして仕切り直したいところ……。


濡れ衣への、お詫びがてらの広告↓

ウイルスバスター クラウド | 3年 3台版 | Win/Mac/iOS/Android対応

新品価格
¥10,603から
(2017/6/11 21:32時点)

Delphi プロジェクトファイルのコードの中で無名メソッドを使うとメモリリークが発生する

なんか Delphi 話多いなー。
無名メソッド、anonymous methods とか言われるヤツです。
正直、可読性が落ちると思っているのですが、サクッと書くときに便利なのでちょいちょい使います。

現象

下記のようなコードを書くと、メモリリークが発生します。
program Project1;
uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
var
  b :Boolean;
begin
  ReportMemoryLeaksOnShutdown := True; // メモリリークを検出
  b :=
    (function : Boolean
    begin
      Result := True;
    end
  )();
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

対応

無名メソッドを使わないようにするしか思いつきませんでした……
program Project1;
uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
function hoge : Boolean;
begin
  Result := True;
end;
var
  b :Boolean;
begin
  ReportMemoryLeaksOnShutdown := True; //メモリリークを検出
  b := hoge;
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

原因予想

全然分かりません。
・Delphiの無名メソッドはインターフェースでどうたかこうだか、
・インターフェースは参照カウントがどうたかこうだか、
・でもってインターフェースの破棄のタイミングはEnd 節の実行時でどうたかこうだか、
・でもプロジェクトファイルにあるのは「end.」(ピリオド)であって「end;」(セミコロン)じゃないなー
とか妄想してみた。

似たような事例はStackoverflow で見かけるので、きちんと探せば原因が分かると思うのですが。
探すのめんどい(ぇ)

若干ですが仕様という名のバグじゃないか疑惑もあったりなかったり。

え、無名メソッドを使うなって?

だって楽なんだもん。
特にメソッド名を考えなくて済むあたりが楽。
……命名苦手なんよ……


Firebird Embededのお勉強 ISQLの使い方 スクリプトファイルのSQLを実行できない

解決? まで3時間ほどかかりました。

結論!

ISQL.exe で「-i」オプションをつけて読み込ませるファイルには、BOM (Byte Order Mark) をつけてはいけないらしい。

細かい話

isql.exe - i hogehogeScript.fmq -user SYSDBA -password masterkey -charset UNICODE_FSS 'HOGE.FTB';
とやったら、何回やっても最初のクエリの実行で失敗する。
接続する文字セットを変えたらうまくいくかな? と思いましたが、それでも失敗。
「最初だけ失敗する……?」
「最初にだけあるもの/ないもの ってなんだ……?」
「BOMだ!」
「とりあえずBOM外せ!」
「なんか知らんが動いたぞちくしょー」

根拠

やってみてダメだった、BOM外したらうまくいった……というだけです。
根拠となるドキュメントを発見できていません。

・私の検索能力が低い説。
・そもそもISQL の使い方間違ってんだよ説。
・BOM がダメなんて常識だろ説。
・Windows でスクリプト系ファイルを書く情弱なんて、我々Firebird 業界にはいらんのだよ説。
・はぁ? 何言ってんの? お前の環境おかしいよ説
etc. 

諸説ありますが、とりあえず誰か正解を教えてください。

思うに

BOMがダメだとしたら、MS信者、WIndows 万歳な人間には辛い仕様だぜよ。


Firebird 徹底入門

新品価格
¥4,104から
(2016/8/31 20:45時点)

Windows Phone (Windows Mobile) edge は shift jis 未対応?

文字化けじゃー(ぎゃー)

要約

会社から送られてきたhtmlファイルをedgeで開いたら文字化けした。
エンコードの設定をいじればいいだろ、と思ったら見つからず。
クライアントデスクトップのedgeでは文字化けしないんですけどね。

解決策

htmlファイルのヘッダーをいじってshift jis から utf-8 にしたら表示できた。

……全然解決策になっていない!


どうすればいいんでしょうね?

そもそもhtmlファイル自体、最初から文字コード指定を utf-8 なり16なりにしてくれよ、と思うわけですが、わざわざshift jis になっていたのは、おそらく人名や住所が入っている自動生成のhtmlファイルだからだと思われます。
utf-8 で表現できない漢字などに対応するためでしょう、たぶん。
文字コードの闇に深く立ち入るつもりは全くないので、この辺りは考えないことにする(逃げた)
MSさーん、対応してよー……といいたいですけど、対応してもあんまり旨みが無いよなあ……



(無料電話サポート付)できる Windows 10 Mobile FREETEL KATANA 01/02 対応 (できるシリーズ)

新品価格
¥1,080から
(2016/5/7 12:51時点)

SDKの更新の影響で(?)UWPのプロジェクトとXAMLのプレビューが開けなくなった

直接の原因不明や解決策は不明。
現象としては複数ありますが、面倒なので一つのエントリにまとめますw

現象1:UWPアプリが開けなくなった

まず、VS2015をupdate2に上げました。
次に、使わなくなっていたVS2013関係をアンインストールしました。
上記二つを行った後、UWPのプロジェクトを開こうとすると、「SDKの更新が必要です」のようなメッセージが出るようになりました。
(どちらの操作がトリガーかは不明)
案内に従ってSDKを更新しましたが、開けるようにはなりませんでした。

現象1-対応:プロジェクトファイルの書き換え

プロジェクトファイルを直接メモ帳で開いてみると、「Version=10.0.10586.0」がターゲットになっているようでした。
ここを、「10.0.10240.0」に書き換えると、とりあえずビルドとデバッグは通るようにはなりました。

現象2:XAMLエディターのプレビューができなくなった

XAMLエディターを開くと、プレビューができなくなってしまっていました。
これは、以前作ったアプリでも、新規に作成したアプリでも同様。

現象2-対応:色々入れ直し

下記を順番に実行しました。
・VS2015をコンパネから「修復」 → 直らず
・Windows SDK の「修復」  → 直らず
・Windows SDK の「アンインストール」 → 直らず
・Windows SDK の再インストール → 直った!
結果的に、Windows SDK のアンインストール&インストールが正解だったような気がしますが、何分検証できていません。

その後

プロジェクトを開きなおすと、アプリケーションのターゲットバージョンが
・Windows10(10.0;ビルド10240)
・Windows10(10.0;ビルド10586)
の二つが選択できるようになっていました。
で、ためしに Windows10(10.0;ビルド10586) にして、保存してみると、VSが落ちました。
再度開くと、また上記現象1のような状態に……。
仕方ないので、またプロジェクトを直接修正して、10240に戻すと、開けます。

つまりこういう状況みたい

新規にプロジェクトを作成した段階で、10586を選択すると「プロジェクトはプラットフォームSDK(UAP.10.0.10586.0)が必要ですが、インストールされていません。」のエラーになってしまう。
どうやら、SDKのインストール自体が壊れてしまっているみたい。
VSのインストーラー、コンパネ、ダウンロードファイルいずれの修復・インストールでも直らないので、諦めることにしますw
次のバージョンでは直っているといいなあ……。



XAMLとC#によるUniversal Windows Platform アプリ開発

Continuum を試してみた

ただし変則的な構成で。

構成っ!!

・Nuans neo
・Actiontec ScreenBeam Mini2 Continuum
・サンワサプライ モバイルプロジェクター PRJ-3
・cheero Power Plus 10400mAh DANBOARD Version 大容量 モバイルバッテリー
 (通称ダンボーバッテリー)

なぜにそんな変な構成に?

プロジェクタに関しては、単純にHDMI接続できる手頃なモニタが無かったからです。
HDMI接続可能なものはPCに接続してあって外しづらいし、部屋にテレビは無いし。
モバイルバッテリーを使っているのは、モバイルプロジェクターを使うならモバイルバッテリーで動くかどうか確かめたいなーと思ったからです。

接続の仕方

簡単です。
まずプロジェクタとScreenBeam Mini2 を接続。
ScreenBeam Mini2 はダンボーの1Aの方に接続。
フツーに電源を入れます。
しばらくすると接続待ち受け状態になります。
今度は、Nuans neo を操作し、プリインストールアプリの中の「CONTINUUM」を起動。
あとは流れにそっていけば起動できます。
1Aで足りるかな?と思いましたが杞憂でした。
「もっさりしている」という記事をよく見ましたが、思いのほかサクサク。
ちょっとビックリしました。

あれ、フツーのMiracastでの投影は?

さて、ここまで書いておいてなんですが、個人的には Continuum は正直使う気がありませんw
なぜなら、なんぼPCのように使える、といっても、シングルモニタ環境で何かを生産する作業をしたくないからです。
普段使っているメインPCがマルチモニタの4枚環境。
会社でも3枚。
シングルモニタでは表示領域が狭くて、何か作る気にはなれません。(閲覧・表示だけならいいんですけどね)
今回はスクリーン投影しているので、まあ表示領域に関しては広いのですが、結局スクリーン投影しながら作業ってしにくいです。
と、いうわけで、色々アプリが制限されてしまうContinuum より、単純に Miracast による投影をしたかったわけです。
というわけで、さっそく……アレ?

やり方が分からない……

「デバイス」には画面出力に関する設定が無いし、
「接続」を選んじゃうとContinuum で繋がっちゃう……

ど、どうやればいいんだ……

というわけで、タイトルの「Continuum を試してみた」はできたのですが、フツーのMiracast 接続のやり方が分かりませんw
個人的にはコッチの方が問題。

モニタへの接続方法は他にもあった

正確にはPCへの接続、ですけど。
これは後日また書きます。

【正規代理店品】Actiontec ScreenBeam Mini2 Continuum(スクリーンビームミニ2 コンティニュアム) SBWD60MS01JP

新品価格
¥10,581から
(2016/3/9 22:24時点)

サンワサプライ モバイルプロジェクター PRJ-3

新品価格
¥42,800から
(2016/3/9 22:25時点)

Microsoft アカウントと紐づけられた Skype プロフィールが修正できない

全然知らなかったのですが、Microsoft アカウントを作った時点でSkypeアカウントができているのですね。
ずっとSkypeアカウントを使っていたので知りませんでした。

しかーし。Microsoftアカウントのプライマリのメールアドレスは、どっちかといえば業務チックな使い方をしています。
友人たちとの連絡では使わないことにしています。
そーすると、プロフィール欄に出ているアドレスを変更する必要があるわけです。

プロフィールの変更場所

OneDriveとかを開いて、右上のアカウント名をクリック - 「プロフィールの編集」 - 「Skypeプロフィールの編集」。

しかし保存できない!

保存時にパスワードが求められるのですが、これが通じません。
ログインできるパスワードを入力しているのにダメとはコレいかに……。
Skypeの質問掲示板にも「Microsoftアカウントで編集したプロフィールを保存できません」というものがあるくらいなので、地味に発生しているようですね。

うーん、困った(汗)


Skype Credit(スカイプ クレジット) 1000円 [オンラインコード] [ダウンロード]

新品価格
¥909から
(2016/2/8 01:48時点)