Pandora Pocket

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

MQTTのクライアント側処理サンプル(.NET Core 汎用ホスト版)

個人的に作ってるアプリで必要だったので調べた成果。

MQTT BrokerはBeebottleを想定しつつ、一応汎用的に動くはず。

Beebottleの場合、アカウントIDにトークンを指定してください。

内部的にはMQTTのライブラリとして MQTTnet を使用しています。

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の指定も不要ですね。

参考サイト

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

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

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

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

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

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

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

というわけで、

こんな感じで、

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

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

指定時間にディスプレイの電源をオンオフするだけのミニツールを作るなどした

普段テーブルの端にSurface Proを置き、Twitterクライアントを常時起動させつつ、音楽を再生したりしています。
朝起きた時に夜中のツイートもささっと流し読みしたいので24時間電源を入れっぱなしなのですが、使っていない時間ずっとディスプレイがつきっぱなしなのは電気代がもったいない。かといって電源設定でディスプレイの電源を切る時間を設定すると、普段見たいときにいちいち画面タップするなりしないといけないので面倒。

というわけで、指定した時間にディスプレイの電源をオンオフするだけの機能を持ったタスクトレイ常駐アプリを作りました。

続きを読む