2019年8月28日

Visual Studio 2019で「定義にジャンプ」するとカーソルが消える問題への対処

Visual Studio 2019を使っていて「F12」キーでカーソル位置の関数や変数の定義にジャンプする機能をよく使うのですが、最近、これで飛んだ先のエディタ画面でカーソルの表示が消えてしまうことがよくあり、困っていました。

検索したらやはり同じく困っている人達がいて、こちらにIssueが上がっていました。
https://developercommunity.visualstudio.com/content/problem/625201/disappearing-cursor-in-text-editor-vs-2019.html


ただあまり優先度が高くないみたいで、開発チーム側からは「60日以内に対応するかもね~」みたいな感じの返答がされていました。


この機能では飛び先(定義元)が「まだ明示的に開いていないファイル」にあった場合にデフォルトで「プレビューウィンドウ」という特別な状態のタブで開かれるのですが、どうもこの「プレビューウィンドウ」に問題の原因があるような感じです。


試しに設定画面からプレビューウィンドウを使わないように設定してみたら、問題が解消しました。






 


2019年5月7日

初めてElmで何か作ってみた。- エニグマ(風)暗号機

最近子どもが学校の図書館かどこかで暗号に関する本を読んだらしく、

 「お友達のAちゃんと秘密のメッセージを交換したいの。エニグマみたいなので。」

とせがまれました。

いきなりエニグマ暗号機の名前が出てきたのでびっくりしましたが、

 「よし、エニグマ(風)暗号機を作ってあげよう!」

ということになりました。




この際なので、以前から試してみたかった、Elmを使うことにしました。

出来たモノはこちらに公開してあるのでもし良ければ試してみて下さい。

https://mysecretmsg.mikehi.now.sh/




伝えたいメッセージを打ち込んでEnterキーを押すと、「暗号化キー」の入力画面になります。



ランダムな4桁の数字を入力してもう一度Enterキーを押すと、暗号化されたメッセージが表示されます。



これを相手に伝えます。

暗号化されたメッセージを受け取った相手は、同じアプリを開いて暗号文を打ち込み、さっきと同じ4桁の「暗号化キー」を入力すると復号化されたメッセージを見ることが出来ます。


暗号化されたメッセージを同じキーで再度暗号化すると元の平文に戻る(暗号化と復号化のプロセスが同じ)」、というのが「エニグマっぽい挙動」ということになるかと思います。


これをどうやって実現しようかと考えて少し悩みました。

単純に文字コードのXORを取れば出来そうなのですが、それだと結果が文字として表示出来ない値になってしまう事があるので、別の方法を考えました。

その結果、

- 入力可能な文字を2つのグループに分けて、2文字単位で「置換ペア」を予め決めておく。
- このような置換ペアのテーブルを10種類作っておく。
- 「暗号化キー」の各桁(0〜9の数字)を置換ペアのテーブルに対応させて、順に置換する。

という簡単な方法で実装してみました。


このアプリを使って秘密のメッセージを送る際には、メッセージとキーは別々の方法で伝える必要があります。(キーだけは事前に合意しておく、メッセージはメール、キーは口頭で伝える、など)

メッセージ本文と暗号化キーの両方を知っている人は誰でも復号化して元のメッセージを見ることが出来るので、キーを秘密にしておくことはとても重要です。(当たり前ですが。)


今回のソースコードはこちらにあります。

https://github.com/mikehibm/mysecretmsg




さて、完成したアプリを子どもに使わせて見たところ、予想外の感想が返って来ました。


「やっぱり...本物のEnigmaが欲しい!」



追記:

Elmを初めて使った感想を何も書いていなかったので思い出しながら書きます。

- 最初慣れるまでは結構大変。アプリケーションのひな形も Sandbox, Element, Document, Application とあってどれを使ったら良いのか迷った。

- 特にキー入力をどうやって処理するのか、ドキュメントを見てもよく分からず。Githubのサンプルとにらめっこして何とか動かせた。Decoderとか今でも完全には理解してません。笑

- 関数の集まりとしてアプリケーションが宣言的に定義出来てしまうというのは、やはり目からウロコ的な体験で面白かった。

- 上位レベルの関数から順に追っていけばプログラム全体が見通せるので、誰が書いてもそこそこ読みやすくなりそうな気がする。

- parcel + Elmの組み合わせでホットリローディングが出来るので、これはオススメ。








.

2019年4月4日

Visual Studio 2019をインストールしたらASP.NET Webアプリケーションが動かなくなった問題のとりあえずの対応方法


Visual Studio 2019が正式リリースされたとのことで、早速インストールしてみました。


AIによるサジェスト機能とかはあまり期待していないですが、全体的に動作が軽くなるそうで、もし本当ならそこは嬉しいです。


Visual Studio 2017 (15.9.11)がすでに入っている環境に、追加で入れました。


インストール完了後、既存のASP.NET Webアプリケーションをデバッグ実行しようとすると、次のエラーが出て実行出来なくなってしまいました。

Could not load file or assembly 'Microsoft.VisualStudio.Web.PageInspector.Loader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.


このエラーメッセージをそのままGoogle検索して、下のページに解決策を見つけました。


https://developercommunity.visualstudio.com/content/problem/398640/could-not-load-file-or-assembly-microsoftvisualstu-7.html



まずは Visual Studio Installer を起動して、Modifyボタンを押し、Installation locationsのタブを表示して、ダウンロードキャッシュを有効にする必要があるようです。





その後、MoreボタンからRepairをクリックして修復インストールを行います。



さらに、修復インストールが完了したあと、

C:\ProgramData\Microsoft\VisualStudio\Packages\Microsoft.VisualStudio.AspNetDiagnosticPack.Msi,version=16.0.12311.10635

のフォルダ内にある、AspNetDiagnosticPack.msi のファイルを右クリックして「Repair」を実行します。


以上の手順で無事復活しました。


パッチが出るまではおそらく同じ問題にぶつかる人がいると思いますので、メモしておきます。




追記:

今日から2019をメインで仕事に使っていますが、この記事に書いた問題以外は特に問題もなく今のところ普通に使えています。

2017と比べて特に軽くなった感じはしないので何が良くなったのかほとんど分からないのですが(笑)。