2020/12/31

アプリ実行エイリアス

Microsoftストアにアプリを出すときに、app package manifestで「アプリ実行エイリアス」というものを指定できます。この効能はストアからインストールしたアプリ(デスクトップアプリを含む)をコマンドプロンプトからファイルパスなしのファイル名だけで起動できるというものです。 一応OSの設定にも出てきます。 ストアからインストールしたアプリの実行ファイル等はOSが管理するので、アプリの起動は基本的にスタートメニューに作成されるアイコンからか、自動起動に登録するか以外にはできませんが、そのコマンドプロンプト向けの救済策のようなものです。

これだけならコマンドプロンプトを使わせたいケース以外には関係ない話ですが、Hash Padを開発しているときに別の利用法があるのを見つけました。すなわち、これを宛先に指定することでアプリを起動するショートカットを自由に作成できます。

このアプリ実行エイリアスは以下のパスに自動的に作成されるようです。
C:\Users\[ユーザー名]\AppData\Local\Microsoft\WindowsApps

タネ明かしとしては、PATHを一覧表示するとこのパスが入っているので、それでパスなして起動できるというわけですね。

これはフルパスとしては以下のコードで取得できます。 これ自体はエイリアスというかシンボリックリンクみたいなもので、実体のあるファイルではないですが、これから直接アプリを起動できるほか、ショートカットのターゲットパスに指定してアプリを起動することもできます。

もう一つ重要な点は、WinRTのAPIにはパッケージされたアプリからしか利用できないものがありますが、これから起動するとパッケージからの起動になることです。実行ファイルを探し出して直接起動した場合はパッケージからの起動にならないので、この点は大きな違いです。

というわけで、アプリ実行エイリアスを使うことでストアにアプリを出すときの難点の一つを解決できます。Hash Padでは、これによりコンテキストメニューの「送る」フォルダーにショートカットを作成しています。

2020/10/14

GitHubのWikiブランチへのアクセス

特に難しい話ではないですが、GitHubのレポジトリでWikiを作成すると、wikiというブランチが作成されます。このブランチにリモートのWindowsからアクセスする方法としてはGitHub Desktopが手軽ですが、ぱっと見では分からなかったので、メモです。

初めにパスとしては、そのレポジトリのパスの.gitの前に.wikiを挿入したものになります。したがって、自分のMonitorianを例にとると、レポジトリ自体は
https://github.com/emoacht/Monitorian.gitなので、
https://github.com/emoacht/Monitorian.wiki.gitとなります。

後はGitHub DesktopのAddからClone repositoryを選んで、URLのタブで直接指定してしまいます。

これでクローンしてしまえば、後は普通のレポジトリと同じです。

GitHubの機能や他のサービスを活かしたレポジトリは機能的でいいのですが、それぞれノウハウがあってなかなか面倒です。

2020/06/12

Lenovo 500 FHD Webcam

数少ないWindows Hello対応のUSBカメラの新製品であるLenovo 500 FHD Webcamが到着したので、レビューします。この製品に関しては、Lenovo公式から以外の情報があまりないので。

1. 外観


パッケージをLogicool C920sと並べたところ。店頭陳列用に派手なデザインのLogicoolに対して、色もサイズもおとなし目です。

最初にこの製品の名称ですが、Lenovo公式では「Lenovo 500 Full HD Windows Hello対応 Webカメラ」という、どこまでが製品名でどこからが機能説明なのか分からない表記になっていますが、パッケージにある表記が本来の名称なのでしょう。というわけで、「Lenovo 500 FHD Webcam」です。

Windows Hello対応のUSBカメラとしては、長らくマウスコンピューターのCM01とその後継のCM02が実質的に唯一の選択肢で(Logicool Brio Webcamはこれだけのためには高すぎ)、ようやく選択肢が増えたことになります。

DellのU2720QMの上に設置したところ。C920sはカメラ本体が台座の前にあるのに対して、500 FHDは台座の上にあるので、カメラの位置は少し奥になります。

デザイン的には、レンズとマイクのモチーフが盛り込まれたC920sとは対照的に、500 FHDは余分な装飾も凹凸も一切ないミニマルなデザインになっています。

高さはC920sは本来もっと低いのですが、台座のモニターの前に掛ける爪が長く、そのままだと表示域(縁から6mmぐらい)にかかってしまうので、3mmのゴムを挟んで上に上げています。これはC920sの元設計が古くてベゼルレスのモニターが考慮されてないのでしょう。500 FHDの方は台座の爪が短く、そのままで問題ありません。ちなみに、台座の幅はどちらもきっかり45mmです。

首振りは上下のみのC920sに対して、500 FHDはボール雲台式で自由度は高いです。ただ、C920sは俯角が大きく取れるようになっているので、それには及びませんが、台座自体の設置角でも調整幅は増やせるので(油気圧サスペンションの戦車の如く)、問題にはならないかなと。

上面にはLenovoのロゴがうっすら入っています。これは表面仕上げの違いでロゴだけツヤを付けて見せているだけなので、角度によって見えることがあるという程度です。

USBケーブルはC920sが直出しなのに対して、500 FHDはUSB-Cコネクタに挿す形式(USB-C to USB-Aケーブルが付属)で、この方が自由度は高いですが、ケーブルが宙を走ることになって収まりが悪い面もあり、良し悪しという気がします。

2. 機能


カメラには4つ窓があって、中央から左側に向かって普通のカメラ、赤外線カメラ、赤外線ライト、プライバシーライトです。右側にも何かありそうに見えますが、ここには中にプライバシーシャッターがあるので、センサーはないです。

このシャッターは上のつまみを押さえて横にスライドさせると、中のシャッターも動く仕組みです。

シャッターには赤丸があるので、よく見れば閉じているのが分かります。ただ、カメラに赤丸は一般的には録画中を示すサインなので、閉じている状態を示すにはUI的にどうかなという気がします。つまみの大きさから見て、頻繁に変えるというより念のために付いている感じですが。

普通のカメラの撮影中はプライバシーライトが点灯します。

Windows Helloの認識中は、赤外線ライトが点滅します。色はSurface Proと同じく赤ですが、光はもっと強いです。認識はうまく行けば一瞬なので、Surface Proと変わりません。

画質


500 FHDの普通のカメラは、基本スペックとしてはFull HD(1920×1080)で、C920sの1080pモード、Surface Pro 4のフロントカメラと変わりません。

画質については……自分ではそれほど差が分からないというのが実際のところです。C920sはさすがに自動調整がうまく効いているぐらいは分かりますが……一番古いSurface Pro 4のカメラでも映りは悪くないと感じるので。試していて気づいたのは、むしろ映りにダイレクトに影響するのは、カメラというより照明の方かなと。

なお、LogicoolのLogi Captureのようなカスタマイズソフトは付属しません。余談ですが、Logi Captureは、使ってみるまで知らなかったのですが、カメラの設定ソフトではなく、それ自体がカメラ入力を受けて画像をリアルタイムに加工して他のソフトに出力するもので、当然リソースを結構使うのですよね。カメラ入力は他のソフトで直接受けられるので、画像にこだわりがなければ使わなくていいかなと。

互換性


試した範囲では、Microsoft Teams、Cisco Webex、Zoomで入力元に使えるのを確認しました。

なお、C920sとは違ってマイクはありませんが、個人的には別に求めていないので問題ありません。

3. Windows Helloカメラの切換え


自分は数年来、Surface Pro 4に外部モニターを接続して使っていますが、そのときにはSurface Pro 4の画面に被せる形にするので、Surface Pro 4に内蔵のWindows Helloカメラは使えなくなります。これが500 FHDを購入した理由ですが、実はWindows 10には複数のWindows Helloカメラを切り替える機能がないらしく、500 FHDを接続してもそのままではWindows Helloに内蔵カメラを使おうとします。

対処療法として、内蔵カメラをデバイスマネージャーで無効にしてしまえば、代わりに500 FHDが使われるようになるのが分かったので、500 FHDの有無に応じてこれを自動化するツールとしてHello Switcherを作成しました。 注意点として、OSのサインイン前には動作できないので、前回サインアウト時の最後の状態は次回サインイン前には変更できません。具体的なケースで言うと、前回サインアウト時に500 FHDがある状態だった場合、内蔵カメラは無効化されているので、次回サインイン時に500 FHDがない場合は、有効なWindows Helloカメラが存在しないことになり、Windows Helloが使えません。こういう場合はPIN認証などでサインインして下さい。サインイン後にこのツールが実行された際に内蔵カメラは有効化されます。

4.評価


まとめると、良い点は以下のとおりです。
  • ミニマルですっきりしたデザインがとても良い。
  • Windows Helloカメラとして問題なく使える。
  • 普通のカメラとしても使える。
個人的に悪い点はないですが、一般的な注意点としては以下のとおりです。
  • カスタマイズソフトは付いてこない。
  • マイクはない。
以上です。

2020/05/01

スマートフォンのモニター用マウント

スマートフォンをウェブカメラの代用としてモニターに固定する方法を思案して工作したところ、これが意外といい出来だったので残しておきます。

モニターはDellのU2720QMで、これにキングジムのDB-200から工作したマウンタを置いて、moto g7を固定したところ。
  • DB-200の前面にある小物入れというか樋部分は、狭額縁のモニターだと表示域にかかり(サイトの説明では5mmとなっているが、実物は6.5mmあった)、かつ間に挟んで上にずらしても庇みたいになって邪魔なので、3mmぐらい残して切除。
  • スマートフォンのカメラの位置をなるべく下げたかったので、g7に合わせて現物合わせで穴を開けて嵌め込むようにした。
  • 固定はg7の軟質ケースの弾性による。
工作自体は単純ですが、経験的には、DIYではどうせ精度は出せないので、工作は単純なものほど結果はよいです。

穴はg7がモニターの筐体のアールに合う位置にしてありますが、これは先に試して、このアールに合わせると角度的に丁度いいことが分かっていたので。

DB-200の足は角度を無段階に調整できるように見えますが、実際は中にラッチが仕込まれていて無段階ではなかったので、ゴムワッシャーを間に挟んで自由に調整できるようにしています。これでカメラの角度を多少調整することも可能という見込み。

正面からはこんな感じ。

カメラのモニター上端からの距離は22mm程度なので、ボール雲台式のウェブカメラと同程度です。位置をこれ以上下げるとカメラの視界にDB-200の前端が入ってくるので、DB-200を削る必要が出てきます。

なお、この状態でもあらかじめアイコンが上に出るよう配置しておけば基本的な操作は可能。

これでスマートフォンの固定自体は満足できる状態になりましたが、実際に使っているとスマートフォンを代用することによる遅延が気になってきたので(DroidCamXを720pで使用)、注文してあるウェブカメラが到着すれば使用終了の予定。

2020/01/13

Gitのcore.autocrlfの設定

改行コードはWindowsアプリでは便宜的にCrLfに揃えることにしていて、.gitattributesでは「* text=auto」はコメントアウトし、.editorconfigでは「end_of_line = crlf」と設定していますが、にもかかわらず自分が認識しないところでLfに変わっていることがあり、さらにCrLfに修正してVisual Studio上でStageしようとするとStage対象に移動しないまま消える、という問題がしばらく前から起こっていて、少々困っていました。

Git絡みの問題であろうことは想像できましたが、VSの問題か、GitHub Extension for Visual Studioの問題か、Git自体の問題かよく分からず、Gitの設定にある「core.autocrlf」が関係ありそうな気がする一方、説明を読んだ限り関係なさそうに思えたので特に触らずにいました。

それが、まとまった数のファイルをCrLfに修正してcommitした後、PowerShellのCUIからそのcommitを含めてrebaseし、VSでリロードしたら全部またLfに戻っていたという問題が発生したので、思い切って以下のコマンドを実行。
git config --global core.autocrlf false

そうしたら、変な動作が全部消えました。

この設定を意識してtrueにした記憶はないものの、Git環境の構築は何度もやり直してるので、正確なところは不明。Gitの設定への理解不足といわれればそうかもしれませんが、こういう問題が起こるとは想像し難いものがあり、謎動作されるぐらいなら切っておいた方が面倒がないと思われます。

HDDの波形の変化

HDDが性能的にSSDに置いて行かれて久しい現在、それでも3.5インチHDDにはぼちぼちと進化が見られるが、2.5インチHDDには目ぼしい進化は見られない(と思う)。それは仕方ないとして、特に変化は期待せずNAS用のHDDを更新したら、HDDの「波形」について発見があったのでメモしておく。

HDDの「波形」というのは、HDDの速度を計測すると現れる位置固定のパターンのことで、記録面の記録密度に由来するものと個人的に考えているもの。基本概念は以下参照。
購入したのは東芝の2TBのMQ04ADB200。店はいつものように秋葉原のArk。

9.5mm厚なのでプラッタは2枚で記録面は4。東芝以外も含めて4TBのモデルは存在するが、どれも厚みは15mmのようなので、プラッタは4枚と推測され、したがってプラッタ当たり容量は同じと思われる。

2台のうち1台目のDisk Gazerの結果。上に出ている水色のグラフが最外周(先頭)100GiB、下の黄色が最内周(末尾)100GiBを示す。

まず計測幅が100GiBなのは、初めは先頭10GiBで計測したら水平線だけで波形が出てこなかったので、広げたから。水色の方だけではやや迷うが、黄色の方を見れば特徴的な4つの水平面の波形が分かる。これには注目すべき点が2つあって、
  • 先頭の水平面の長さは約19GiBで、これは以前のHDDより桁違いに長い。4つの水平面を合わせると約71GiBにもなる(水平面ごとの長さは同一ではない)。末尾の4つでも約27GiBとなる。
  • 同じ記録面のものと推測される水平面でも高さが微妙に異なるので、完全に同じ波形の繰り返しではない。
次に2台目のDisk Gazerの結果。こちらも上の赤紫色が最外周100GiB、下の黄色が最内周100GiB。

こちらも同じ特徴を示しているが、赤紫色の方でも4つの水平面の波形が分かりやすい。

これらが何を意味するか。一番シンプルな解釈は、あるゾーンの記録面(この場合は4つある)中のトラックを移動するのに、以前のHDDのように1つの記録面のトラックをある程度使ったら別の記録面に次々に移っていくという、記録面を小刻みに切り替える使い方ではなく、1つの記録面のトラックは(そのゾーンに属する)全トラックを最初から最後まで使った後に次の記録面に移るという、記録面をゾーンの途中で切り替えない使い方になっていることが考えられる。
  • 4つの水平面が1つのゾーンを構成するとして、1台目のように最初のゾーンの容量を71GiB、最後のゾーンの容量を27GiBとし、この間で容量が一定幅で減っていく(正確には2次関数的に減ると思うが)と仮定すれば、1863GiBは38ぐらいのゾーンに分割できる。この数はゾーン数としてあり得なくはない。
  • 水平面ごとに同じ記録面でもゾーンが違うとすれば、高さ=速度=記録密度が違うのは普通。概ね末尾に行くにつれ同じ記録面でも微妙に高さが下がる=速度が遅くなるのは、ゾーンが変わっていると捉えれば自然な推移(同じ記録密度であっても末尾(内周)に行くにつれ線速度が遅くなるので、アクセス速度も遅くなる)。
この記録面の使い方の違いがユーザーにとって何か意味があるかといえば、別に何もないが、個人的には波形の健在を確認できた。

なお、過去には専らHGSTのHDDを見てきたので、ベンダーによる違いも考慮すべきではあるが、過去の東芝のHDDの波形は他社のHDDと基本的には変わらなかった。いずれにしても、そもそも2.5インチHDDの存在自体いつまで続くのか分からないし、ベンダーの違いにこだわる話でもない気がする。

[追記]

今更気づいたが、このMQ04 シリーズは公式スペックによれば、Drive-Managed SMR (瓦記録) 技術とのこと。

ということは、水平面が長いことはSMRと関係がありそうではある。また、SMRだとキャッシュの影響があるかもしれないが、Disk Gazerはリードだけなので関係ないか。