Power Automate の式で property doesn’t exist となるのを解消する

Power Automate (旧 Microsoft Flow) で式を記述して実行した時、以下のようなエラーに遭遇することがある。

The template language expression '*' cannot be evaluated because property '*' doesn't exist, ...

特によく遭遇するのが、 HTTP トリガーでヘッダーを参照するときだ。

例えば、 Slack のイベント購読を HTTP トリガーで受ける時に、

triggerOutputs()['headers']['X-Slack-Retry-Reason']

のようにしてヘッダーの情報を参照しようとすると、 このヘッダが存在しない初回の実行時に上述のエラーが発生してしまう。

contains(triggerOutputs()['headers'], 'X-Slack-Retry-Reason') のように、プロパティの有無のチェックの and 論理演算を加える方法 などが紹介されているが、実はもっと簡単な方法がある。

それは、 疑問符演算子 "?" を使うことだ。
(C# で言う Null 条件演算子 のようなもの)

これを使って、

triggerOutputs()['headers']?['X-Slack-Retry-Reason']

と記述すれば、

if(contains(triggerOutputs()['headers'], 'X-Slack-Retry-Reason'), triggerOutputs()['headers']['X-Slack-Retry-Reason'], null)

と等価になる。

各プロパティがオプショナルなものかどうかは、ヘルプを見ればある程度わかるものだが、メンバーアクセス演算子やインデクサー演算子を使う場合は、常に疑問符演算子を併せて使うのがよいのかもしれない。
Power Automate のドキュメント内の "条件付きの式を使用する" などのサンプルでも、常に疑問符演算子がつけられているので。


Power Automate のバックエンドは、 Azure Logic Apps となっているらしく、 式で使える 演算子式関数 、そして 組み込みのトリガー などに関するリファレンスが、 Azure Logic Apps のドキュメントにしか存在しない。

また、 コネクタのリファレンス も、 Power Automate のドキュメントとは別になっている。

同じ情報が二重三重に書かれて内容に同期が取れないような状態になるよりはマシだが、欲しい情報が探しにくいのが辛いところだ。。。

Pandoc の Portable Windows バージョンを作る

Pandoc は、 HTML や、 Markdown, Textile, LaTeX などはじめとした、豊富な各種マークアップ形式を、別の形式に変換できるコマンドラインツールだ。

例えば、 textile → markdown 変換 とか、 HTML → markdown 逆変換 といったようなことができる。

何ができるかは、 Pandoc ユーザーズガイド あたりを参照してほしい。

さて、 この Pandoc の Windows 版は msi のインストーラ形式でしか配布されていない。

このインストーラでインストールすると、 ユーザディレクトリの %LOCALAPPDATA%\Pandoc\ (もしくは %ProgramFiles(x86)%\Pandoc\) に実行ファイルを展開して、 PATH を通してくる。
どうやら、システムディレクトリにファイルを置いたりしないようなので、 正直これだけのためにインストーラを実行して、 PATH や レジストリを汚すようなことをしたくない。

ということで、 msi インストーラから、 インストールをせずに実行ファイルだけ取り出して、 Portable 版を作成してみよう。

続きを読む

System.Data.SQLite の NuGet パッケージ のうち どれをインストールするべきか

この記事は、(この記事が初公開された日を基準にして) 4年前に投稿された

の記事のフォロー記事だ。

Visual Studio 2012 に標準で含まれて以降、 NuGet を使ってライブラリパッケージをインストールすることが標準的になった。
しかし、 System.Data.SQLite に於いては、 NuGet パッケージの方も相変わらず多くのパッケージが公開されているので、 これらについてもどれをインストールすべきか解説してみようと思う。 160620_1

Entity Framework Core について書いたひとつ前の記事の

とは異なり、 こちらの記事は Full .NET で SQLite を使う場合で、 特に Entity Framework 6.x と組み合わせる際に有用な内容となっている。
(残念ながら、 System.Data.SQLite は .NET Core では使えないのだ。)

公開されている NuGet パッケージ

続きを読む

PDF のページを好きなサイズの png 画像に変換する たった1つのステップ

document.location = document.getElementById('page1').toDataURL();

Firefox で PDF 開いて任意のサイズで表示し、 開発者コンソール (F12キー) で上記のコード実行すれば、png 画像になって表示される。
あとはその画像を「名前をつけて保存」すればいい。

続きを読む

64bit 環境で AutoHotkey の ThumbRemap を動かす

タッチパッドの革新的な操作感を提供する、 ThumbSense というソフトがあるのだが、これには中クリックを実現できない欠点があった。
そこで、AutoHotkey を利用して、スクリプトで自由にキーを割り当てつつ、 ThumbSense の機能を実現してしまおうという、 ThumbRemap.ahk というものが存在する。
(オリジナルの配布もとは既に無くなっており、ミラーサイトで配布中 → 残念ながら、ミラーサイトからは拾えなくなってしまったようだ。 ただ、 元サイトの Wayback Machine で拾える模様

これ自体もなかなか古く、最新の 64bit OS で 普通に AutoHotkey を導入してしてもおそらく動かないだろう。

続きを読む

System.Data.SQLite でどれをインストールするべきか

ちょっとした宣伝:

NuGet パッケージマネージャを使う場合については、別途

の記事にまとめている。

以下、本題。

メモ: 内容が 2012 年当時のものなので、 引用元の文章がすでになくなっていたりするが、 内容的には問題ないはずだ。

System.Data.SQLite を導入する

SQLite の ADO.NET アダプタである、System.Data.SQLite。
単なるラッパではなく、SQLite 自体もパッケージに持っているので、別途 SQLite をパッケージに含めなくても良いのが利点。
しかも、ライセンスが Public Domain であるのが、非常に使い勝手が良い。

注意: 詳しくは System.Data.SQLite の 著作権表記 を読んでほしいが、"System.Data.SQLite.Linq" と "System.Data.SQLite.EF6" については、ソースコードの一部が Ms-PL ライセンスとなっている。
Ms-PL ライセンスとなっている SQL Generation ディレクトリ のソースは、public domain と明示されているものをのぞくと、すべて copyright (c) Microsoft Corporation と書いてある。 ビルド済みバイナリには Microsoft の著作権表記などが出てこないため、バイナリ配布であれば Public Domain と書かれたライセンスに従えば良いので、特に何も気にする必要はなさそうだ。 ソースコードを配布する場合は、上記ソースコード先頭などに書かれているの著作権表記等の部分をそのまま消さずに表示しなくてはならない点に注意すべきだろう。

さて、いざ使おうとダウンロードページに飛ぶと、それはもうすごい数のパッケージが配布されている。

続きを読む

音量をノーマライズ(ゲイン調整)して、ATRAC 形式で取り込む

いつもとはちょっと違う話題を。

WALKMAN や LISMO! で、ギャップレス再生をさせるために ATRAC 形式で取り込ませたいのだが、x-アプリ からの取り込みでは、音量の均一化をできない。
MP3Gain や、AACGain などのように、ロスレスで音量を均一化するソフトがあればよいのだが、残念ながら、ATRAC には存在しない模様。
どうせ取り込む前の1回だけなのだから、1回ぐらい不可逆変換してもいいじゃん、と言うことで、WaveGain を使って、 Wav の段階で音量を均一化して、x-アプリに取り込ませる方法をご紹介。

# ちなみに普段は、Nero 使って aac に変換し、AACGain でノーマライズしてから、x-アプリ に取り込ませている。あとからほかのツールに移行する可能性を考えると、直接CDからツールの独自形式で取り込ませるのはできるだけ避けたいから…
# ちなみに、WALKMAN 側に「ダイナミックノーマライザ」という機能もあるが、これは曲中の強弱までノーマライズしてしまうのでかなりイマイチ。

続きを読む

Intel Data Migration Software は RAM Disk と相性によってフリーズ

Intel Data Migration Software がアンインストールできなくなった根本の原因は、こいつをインストール直後に起動したら、snapman.sys のエラーでブルースクリーンになったせいなのだが、いろいろ試したところ、このツールがRAM Diskと相性が悪いご様子。
Dataram RAMDisk を入れていたのだが、これをアンインストールした後、Intel Data Migration Software を実行したところ、ブルースクリーンにならずうまく実行できた。

久々にブルースクリーンから抜けられなくなって焦った。
使い終わったら、intel data migration software をアンインストールしてから、RAMDisk 入れることをおすすめする。

まぁ、起動時につながってるドライブ走査するから、そんときにRAMDiskがあるとエラーになるんだろう。

Intel Data Migration Software がアンインストールできない

インストールに失敗して、Intel Data Migration Software がアンインストールできなくなってしまった。
どうやら、インストールに失敗した上、アンインストーラ用のmsiが登録されなかったようだ。
「プログラムの機能」からアンインストールしようにも、IntelDataMigrationSoftware.msi が見つからないとエラーになる。
続きを読む

SetPoint をローカルでインストール

Logicool マウスを使うのに、SetPoint 等のマウスツールが欠かせない。
私はサイドキーの手前をダブルクリック、奥をエンターに割り当てるのが好きだ。

ところで、このSetPoint、バージョン5以降は、インストール時にインターネットに繋がっていないとエラーになってしまう。
「インストールを完了することができませんでした。インターネット接続を確認してもう一度実行してください。」
セットアップにオンライン環境が必須とか…
しかも最近のマウスにはインストーラCDすらついていない。
そして最大の問題点は、今時「プロキシに対応していない」と言うことだ。
続きを読む