Linux や Windows で大量の nanaco ギフトを自動登録して、オトクに税金を支払う

突然だが、自動車税や固定資産税などの税金を、どのように払っているだろうか?
支払う額も大きくなりがちなので、なるべくお得に支払いたいのではないだろうか。

そこでオススメなのが nanaco ギフト だ。

クレジットカードで直接納税したり nanaco 残高にチャージする場合、手数料がかかったり、ポイントがたまらなかったりと、あまりお得にならない。
しかし nanaco ギフトであれば、お得に購入する手段が知られている。

  • ベネフィット・ステーション
    • 福利厚生型の会員制割引サービス。
    • 2020年4月現在、 毎月 10万 円分まで 額面の 2% OFF で nanaco ギフトを購入できる。
    • 所属組織による団体加入か、 「ベネフィット・ステーション プライベート」 や 「デイリーPlus」 といった個人向けの有料サービスで利用できる。
  • Kiigo (廃止)
    • 以前はクレジットポイントを貯めながら nanaco ギフトを購入できたのだが、 2019年 に nanaco ギフトの取り扱いがなくなってしまった。

また nanaco 残高と違ってセンターお預かりへのチャージなので、 チャージ残高の上限が非常に高く (50万円以上も可能らしい)、 nanaco 残高のチャージ上限である 5万円を超えるような金額の支払いでも使える大きなメリットがある。

nanaco ギフトでのお得な納税の話は、他のサイトでもっと詳しくわかりやすく書かれているだろうから、これくらいにしておく。

nanaco ギフトの登録がめんどくさい

さて、 ここからが本題だ。

そんな nanaco ギフトにもひとつ 大きな欠点がある。
それは、 1,000 円単位で提供されることが多い ということだ。

例えば 10万円分 チャージしようとすると、 100 回も nanaco ギフトID のコードを入力しなくてはならないのだ。

更に、 nanaco ギフトの登録を行う UI が、大量のギフト登録に とても優しくない
1回 コードを入力する毎に nanaco にログインしたり、 コードを 4文字 ずつテキストボックスに入力しなくてはならなかったりと、 数をこなすのにとにかく手間がかかるのだ。

10万円 の納税で 2,000円 得するために、 2,000円分 相当以上の手間をかけるのでは愚の骨頂だ。
こうなったら、自動入力させるしかない。

続きを読む

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 のドキュメントとは別になっている。

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

タスクトレイで指令を待ち続ける健気な PowerShell スクリプト

この記事は PowerShell Advent Calendar 2019 の 23日目 の記事だ。
日程が埋まりきっていなかったので、適当な内容で埋めていこう。

あなたは、 PowerShell の短いコードを、 デスクトップのアイコンをクリックするのも億劫なほど、手軽に実行したいと思ったことはないだろうか?

ないって?
私はある。

例えば、ブラウザなどでコピーして WYSIWYG エディターにペタリと貼り付けるときに、クリップボード内の装飾情報を削除したいとか。

(Get-Clipboard -TextFormatType UnicodeText -Raw) -replace '^[ \r\n\t]*|[ \r\n\t]*$','' | Set-Clipboard

PowerShell なら上記のような一行コード実行すれば済む話だ。 しかし、 ウィンドウをシェルに切り替えたり、 ショートカットクリックするのも面倒。 タスクトレイのアイコン一つクリックして実行できたらいいのに。

はい、それを叶えます。

続きを読む

C# REPL GUI Shell, Mono gsharp を Ubuntu に入れようとすると発生するエラーを回避する

.NET Core の登場で大分影が薄くなったものの、 まだまだ Xamarin でガンガン使われている Mono。
この Mono には, gsharp という C# GUI Shell が存在する。

CUI 版の Shell と比べると、 グラフがプロットできるとか、 画像が手軽に表示できるといったメリットしかないが、タブ補完も効くし、まぁ便利っちゃ便利なツールだ。

しかし Windows で gsharp を動かしたくても、 Windwos 用の Mono インストーラには gsharp が入っていないため、そのままでは gsharp を使えない。
このため、 WSL の Ubuntu に gsharp をインストールして、 VcXsrv などの X Server を使って動かすのが手っ取り早い。

以下の記事が詳しい。

ところが、 この gsharp などを含む、 Mono 拡張 GUI ツールを、 WSL を含む Ubuntu ベースのディストリビューションにインストールしようとすると、エラーになってしまう。

今回は、 その暫定的な回避策について。

TL;DR

早く mono/mono#16322 の不具合直した Mono パッケージを出してくれ。

続きを読む

Python pipenv で pywin32 をインストールするとエラー

11/10 頃から、 Python でpypiwin32 や pywin32 パッケージや、それらに依存しているパッケージを pipenv にてインストールしようとすると、

AttributeError: module 'site' has no attribute 'getsitepackages'

とエラーが出て失敗するようになった。

10/22 追記: pywin32 v227 で問題は修正された。
"there's nothing wrong with PyWin32, it's just a fix applied on PyWin32's side to work around a VirtualEnv bug." と、修正コメントで強調されている。 わかるよ、その気持ち。
追記ここまで

原因

直接的な原因は、 pipenv ではなく virtualenv にある。

続きを読む

AWX をインストールした後の Server Error を解決したかった話

この記事は、 Ansible AWX をインストールしたときに、 Server Error に なったりならなかったりする 問題に対処したときのポエムだ。

はじめに断っておくが、最終的に AWX 8.0.0 で解消しているっぽいものの、 原因や正確な条件などは不明なままである。
また後述するが、 (タイトルに反して)おそらく Ansible AWX の問題ではなく、 postgres:9.6 の docker イメージの問題ではないかと思われる。

発生した問題の状況

続きを読む

プロキシ環境下で Ansible AWX をインストールする Playbook を作る

構成管理ツール (いわゆる Infrastructure as Code(IaC)) の中でも比較的易しいと言われる Ansible。
その Ansible の運用を省力化してくれるツールとして Ansible Tower というものがあり、そのコミュニティ管理版 (OSS版) が AWX だ。

その AWX がインストールされたサーバを作成する Playbook を作ろうとしたら意外と手間取ったので、そのメモ。

なお、インストール先は CentOS 7 である。
AWX のインストールは、 公式ビルド済み docker イメージを Docker Compose を使ってコンテナ化する方法 を使った。

11/21: 追記

docker-compose の PyPI (pip) パッケージが 1.25.0 に更新後、 CentOS 7 (正確には、 Python 2 系を使っている環境) で docker-compose のインストールや実行がうまくいかなくなった。
(commit:719a1b0 で) subprocess32 に依存するようになり、 gcc 等のビルド環境のインストールが別途必要になったためだ。

それに加え、たとえ gcc をインストールしても、依存パッケージの python2 対応が不十分なようで、 docker-compose 実行時にエラーになってしまう。

docker/compose#7030 の Issue には挙がっているが、修正されるかどうか不明なため、一つ前の 1.24.1 を使うことで回避するように、コードを修正した。

python2 ツラい。。。
しかし、 2020年にサポート切れになった後も、 CentOS 7 が生きているしばらくの間はこの辛みと付き合わなければならないようだ。
ツラい。。。

追記ここまで

最終的な Playbook

続きを読む

Proxy 下で vscode の WSL 上の他の拡張機能のインストールに失敗する

プロキシ環境下の vscode で、 WSL 上で拡張機能を動かしたいのに、 インストールインストールに失敗する問題を解決するメモ。

前回の↓の記事は、 『Remote – WSL 拡張が有効にできない』問題だったが、今回は『Remote – WSL 拡張 を有効にした後、その環境上で他の拡張機能がインストールできない』問題なのでちょっと違う点に注意。ややこしいね。

遭遇した問題

Visual Sutdio Code (以下、 vscode) へ 無事に Remote – WSL 拡張機能 の "VS Code Server for WSL" のインストールが完了し、 Windows 上から 快適に WSL の環境にアクセスできるようになった。
しかし、 いくつかの vscode の拡張機能は、 Windows 上の環境とは別に WSL 上の環境で改めてインストールしなくてはならない。

そこで、 UI 上の案内に従って各拡張機能で "Install in WSL" を行ったところ、 プロキシ環境下だと以下のエラーが発生してインストールに失敗する問題に遭遇した。

Failed to install extension

パネル上の OUTPUT タブで "Log (Remote Server)" の情報を見ると、以下のようなエラーが発生しているのがわかる。

[remoteagent] [error] Failed to install extension: {拡張機能ID} connect ECONNREFUSED 13.107.6.175:443

settings.json ではプロキシの設定しているし、更には WSL 上の環境変数 (http_proxy, https_proxy) にだってプロキシを入れている。
更には(前述の)前回の記事に倣って、 WSL のコンソール上から code . の立ち上げまで行ってみた。

それでも解消しない。何故だ。

なお、試した vscode のバージョンは、 August 2019 (version 1.38.1) だ。

"Remote [WSL]" 用の設定ファイルを書き換える

続きを読む