Pandora Pocket

IT系と日常系の備忘録。三日坊主。

Visual StudioでのASP.NET Core開発時のスマホ検証用にlocalhost外のアクセスができるようにする

Visual StudioASP.NET Coreの開発をする際、開発マシンでの検証だけでなく、iPhoneAndroidでの表示を確認したい時があります。

標準だと localhost で指定されており、そのままでは外部からアクセスはできないため、設定する必要があるのでメモ。

前提

ファイアーウォールで該当ポートが解放されていること。

launchSettings.jsonでの指定

launchSettings.json のapplicationUrlは初期設定ではlocalhostになっているので、ここを開発マシンのプライベートIPアドレスに変更。

この方法、なぜかlaunchBrowserをtrueにしてるのに起動しない謎。

appsettings.jsonでの指定

こちらのほうがおすすめ。

appsettings.jsonまたはappsettings.Development.jsonurlshttp://*:5000;https://*:5001 を指定。
こちらだとホスト名がlocalhostだろうが開発マシンのIPアドレスだろうが行けるので便利。

そのほか

CreateHostBuilderUseUrlsに指定する方法があるんですが、ソースコードに書くのはちょっと・・・。

Azure Functions v3でCosmosDBの基本処理を実行するためのサンプルプロジェクト

せっかくAzureでCosmosDBの無料枠ができたので、使わない手はないなと思って基本的な挙動確認用のプロジェクトを作成してみました。

CosmosDBのデータベース、コンテナ作成から登録更新検索削除の一通りの基本処理をAzure Functionsのv3環境で実装しています。

学習がてらDI実装。Azure CosmosDB Emulator をインストールすればローカル実行可能です(というよりはまだAzure上で確認してない)。

あくまでサンプルなので異常系の対応とかは特に入ってません。

余談

当初せっかくv3環境なのでNewtonsoft.Jsonを用いず、System.Text.Jsonを利用しようと考えていたのですが、うまくいかず断念しました。
プロパティ名は頭を大文字にするため、Newtonsoft.Jsonだと JsonProperty を用いて別名を指定するわけですが、同じ挙動をするはずのSystem.Text.JsonJsonPropertyName だと

The input content is invalid because the required properties - 'id; ' - are missing

というエラーが出てしまい実行に失敗してしまいます。
どうもCosmosDBのv3SDKはまだNewtonSoft.Jsonにがっつり依存しているため、System.Text.Jsonを使いたいならv4までまて、ということのようです。

余談の追記

Version 3.1.2からSerializerOptionsでcamelCase指定ができるようになってたようです。
これを設定しておけばそもそもJsonPropertyの指定も不要ですね。

参考サイト

RaspberryPiにDHCPサーバーを構築する

一般家庭ならDHCP機能はルーターが受け持ってくれるので、DHCPサーバーなんて立てる必要がないです。

が、一般の家庭じゃない我が家としましては、DHCPサーバーもルーターとは別に管理したいな、と。
NURO光ルーター(F660A)だと、固定アドレス割り当てがやりにくくて・・・。

今回は以前SoftEtherをインストールしたRaspberryPiに構築することにしました。

続きを読む

Surface Pro他タブレットPCでディスプレイの電源を切るとスリープになる問題の対応

前回こんなアプリを作ったわけなんですが、

実際に使いたかったSurface Pro3でこのアプリを使ってディスプレイの電源を切ると、ディスプレイのみならず本体自体がスリープモードに入ってしまい、意味をなさないことが判明しました。

原因

これはWindowsの機能であるInstantGo(旧Connected Standby)によるもの。
ディスプレイを閉じた場合や電源ボタンを押して画面を消した状態でもWiFiの接続を維持し、メール等の受信をできるようにする機能なんですが、私の用途だと邪魔な機能。

InstantGoが有効かどうかはコマンドプロンプトpowercfg /a を実行し、 スタンバイ(S0低電力アイドル)ネットワークに接続されています と表示されていたら有効と判定できます。

対策

InstantGoは画面から無効化できないので、レジストリをいじる必要があります。

HKEY_LOCAL_MACHINES\SYSTEM\CurrentControlSet\Control\Power 配下に CsEnabled という値があるので、これを1から0に値変更し、再起動することでInstantGoが無効化されます。

Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power
Entry: CsEnabled
Type: REG_DWORD
Data: 0 ( 無効)1 ( 有効)

なお、Surface Pro3をUSBリカバリメディアで初期化し、Windowsバージョンが1511の状態で上記レジストリをいじった後、1911にアップグレードした段階で設定がクリアされていたので、Windowsのアップグレードを行った場合はこの設定を再度行う必要がありそうです。

また、この設定をしたうえでディスプレイの電源を切り、タイマー等でディスプレイの電源をオンにした際、ロック画面が表示されることがありますが、こちらに関してはグループポリシーの コンピューターの構成 > 管理用テンプレート > コントロールパネル > 個人設定 > ロック画面を表示しない を有効にするか、レジストリから HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization のNoLockScreenの値を1に設定することでロック画面が無効化されます。

Key: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization
Entry: NoLockScreen
Type: REG_DWORD
Data: 0 ( ロック画面有効)1 ( ロック画面無効)

参考サイト

ParcelでバンドルしたJavaScriptの関数を直接呼び出すときの方法

HTMLのフォームにonSubmitでJavaScriptを呼ぶように実装してたんですが、HTMLファイルに直接JavaScriptを記載していたり、生のJavaScriptファイルを読ませていた時はうまく動くのに、Parcelを通したJavaScriptファイルだと Uncaught ReferenceError となってしまい、実行されない問題が発生。

ググったところそれっぽい情報を発見。

生のJavaScriptファイルがこんな感じの内容だったとして、

Parcelを通すとこんなファイルが生成されます。

モジュール化されることでメソッドがグローバルに定義されなくなるので、onSubmit="hogehogeMethod()"と呼んでも失敗すると。

であればグローバル下に引きずり出してやればいいと。

というわけで、

こんな感じで、

window.メソッド名 = メソッド名;

というようにグローバルに定義してやればonClickやonSubmitといったイベントハンドラから呼び出すことが可能。