超簡単に大量の nanaco ギフトを自動登録するツール GUI 版

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

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

(以下略)

この記事は、以前紹介した以下のツールの GUI 版を紹介するものだ。
nanaco ギフトのなんたるかは、以下のページをご参照をば。

端的に言うと、 税金や公共料金をお得に支払える nanaco ギフトだが、 1,000 円単位で提供されることが多く、 大きな額の支払いだとチャージ作業が非常に面倒になるので、 それを自動入力してしまおうという話だ。

前回は、 PowerShell 版を作成して個人的にはこれで完全に事足りていたのだけれど、 ブログの記事にして公開したら、どうやら敷居が高かったらしく 「素人には難しい」とか「Excel で公開して」とかメールやらコメントやらを、いくつもいただいた。
確かに、昨年私が PowerShell 版の記事を出した頃、同じような時期に同じ目的の記事がいろんなブログで書かれるようになった気がするが、どれもこれも、いわゆる「プログラマ」なら簡単に使えるものの、それ以外の人には厳しそうなものばかりだった。

そこで、 専門的な知識がなくても使える、 みんなに易しい GUI (グラフィカルユーザーインターフェイス) で動くツールとして作り直してみたのが、今回のお話。

当初は、 PowerShell版 を流用して簡単に作れるかな~ とかもくろんでいたのだけれど、色々うまくいかず、 結局イチから作り直している。

booth で販売中

続きを読む

Raspberry Pi で作るネットワークエミュレータ

明けましておめでとうございます。

この記事は、 Raspberry Pi Advent Calendar 2020 24日目の記事だ。
…遅刻すぎるのもいいとこだわ。


さて、ネットワーク回りの仕事をしていると、意図的にネットワークの遅延やパケロスを発生させて、検証したくなる状況がままある。

対象のサーバーにネットワークを遅延させるようなモジュール入れるようなやり方も考えられるが、もっと手軽に、 LAN ケーブルの間に挟むだけで、そこを通る通信が全て遅延するみたいな、そんな機材が欲しくなる。

もちろん、そのような需要があれば、それに応える製品があるわけで、それらは一般的に「ネットワークエミュレータ」として売られている。
しかし、高いものでは数百万を軽く超え、安くても数万円はするものばかりだ。

なんか安く作れないかなぁ…
Raspberry Pi あたりで。

…ということで、 Raspberry Pi 4 を使って、遅延とパケロスを制御できる、お手軽ネットワークエミュレータを作ってみよう。

先駆者

そもそもなのだが、そのものズバリなことを実践している先駆者様がいらっしゃった。

この記事の Raspberry Pi には、小型ドットマトリックス LCD ディスプレイや、様々な物理キーが GPIO に繋がっていて、 THE IoT という仕上がりになっている。

かっこいいと思う。
でも、電子工作するのめんどくさいよね。

GUIで手っ取り早く作る

そんな複雑 (…というほど複雑でもないけど) な電子工作しなくても、 RasPi にタッチパネルディスプレイつけちゃえばいいじゃん。
…ということで、 Amazon で割と評判のよい、 OSOYOO の 2,980円 タッチスクリーン付き LCD を取り付けて、めっちゃ簡単な UI をつくってみよう。

OSOYOO(オソヨー) HDMI 3.5 インチ LCD ディスプレイ IPS モニター IPSタッチスクリーン 1920x1280ハイビジョン Raspberry Pi 4 3 2 Model B に対応 (3.5" HDMI LCD+クリアケース)

もはや、 IoT 感を感じるのが難しくなってしまっているな……

続きを読む

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

簡単に使用できる GUI 版を作成したので、そちらの記事も参照 。


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

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

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

  • ベネフィット・ステーション
    • 福利厚生型の会員制割引サービス。
    • 2020年4月現在、 毎月 10万 円分まで 額面の 2% OFF で nanaco ギフトを購入できる。
    • 所属組織による団体加入か、 「ベネフィット・ステーション プライベート」 や 「デイリーPlus」などといった個人向けの有料サービス、 「(JACCS カードの) J’s コンシェル」などの付帯サービスで利用できる。
  • 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 のドキュメントとは別になっている。

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

    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 側に「ダイナミックノーマライザ」という機能もあるが、これは曲中の強弱までノーマライズしてしまうのでかなりイマイチ。

    続きを読む