投稿

e-Tax: このアプリは作成コーナーの画面内でご利用いただくものです。直接クリックして起動することはできません

イメージ
e-Tax(with マイナンバーカード + IC カードリーダー )を macOS Big Sur で使おうとして、最後の最後の段階の、データを国税庁に送信する段階になって「このアプリは作成コーナーの画面内でご利用いただくものです。直接クリックして起動することはできません」というエラーに陥った。 macOS で、それも Big Sur に早々と更新するような勢で、さらにマイナンバーカードを IC カードリーダーを使って確定申告しようというような酔狂者は少ないのか、検索してもあまり事例を見付けることができない。辛うじて Twitter には このような国税庁の Mac 対応不足を指摘するものを発見したのみ。 上記ツイートにより、このエラーが自分だけではないことがわかったのはいいのだが、実は、この「Mac 対応不足 → Windows なら ok」という認識は誤っていて、むしろ余計に皆が Windows に逃げようとする流れを是認・助長してしまっている。実際のところ、全然、Mac でも ok(後述)。決して e-Tax ヘルプデスクに「ゴルァ電」して、混雑に拍車をかけないように。 旧バージョンの e-Tax をアンインストールしろ! この重要なポイントが、なぜか、e-Tax のホームページで見つけられず(つまりググっても辿り着けない)、インストール時の jizenMac.dmg(仮想ディスクイメージ)の中の「インストールマニュアル.pdf」の説明の一部として「旧バージョンの e-Tax をアンインストールしろ」と書かれている。 これをやらないと、e-Tax の開始時では「正常にセットアップされています」と認識されているのに、最後の最後の国税庁にデータを送信する段階で「直接クリックして起動することはできません」エラーに陥いる。 ほとんど罠のような話。これでは「Mac 対応不足 → Windows なら ok」という認識を皆が抱いても仕方がないのかもしれない……。 ともかく、macOS Big Sur とマイナンバーカードと IC カードリーダー( ACR1251DI-NTTCom )で今年も e-Tax はできている。Mac ユーザーの皆様には、めげずに貫き通して欲しい。

Python プログラムの .exe 化

Python で組んだ自前のプログラムを人に使わせる必要が生じたので、Python をわざわざインストールさせずに済むように、.exe ファイル化してみた。 pyinstaller Windows 限定の話だが、pyinstaller を使う(pip でインストールするなりする)。 pyinstaller myprogram.py --onefile おまけ:エスケープシーケンスを有効化 .exe 化はできたのだが、Windows のコマンドプロンプトはデフォルトではエスケープシーケンスにすら対応していない(WSL だ何だと言っても、所詮はポーズなのか?)。.exe 化したプログラムは出力にエスケープシーケンスを利用しているので、どうせならそこもちゃんと表示できるようにしたい。調べてみると、簡単にできることがわかった。 レジストリー( HKEY_CURRENT_USER\Console )に VirtualTerminalLevel = 1 を追加するだけ。 次の内容のテキストファイルを VirtualTerminalLevel.reg として保存したものを使って、レジストリーエディターから統合してもいい: Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Console] "VirtualTerminalLevel"=dword:00000001

宮崎正弘『明智光秀 五百年の孤独』

イメージ
YouTube でたまたまこちらの動画 を見かけたのがきっかけで興味を持って読んだ、宮崎正弘『 明智光秀 五百年の孤独 』(徳間書店、2019)。 動画の印象では「織田信長によって日本がキリスト教化の危機にあり、それを憂えた明智光秀による義挙が本能寺の変の真相である」ということで、「明智光秀と反キリスト教化」「織田信長とキリスト教」を結び付ける説に新鮮味を感じたので、どういうことなのかと思ったわけである。 織田信長とキリスト教の関係 まず、「織田信長とキリスト教」の関係について。これは特に期待したようなものではなかった。織田信長がキリスト教に寛容だったことや、一方で一向宗や比叡山と対立していたことはなどは従来から知られている話である。信長は宗教に興味があったわけではなく、鉄砲等の実益からキリスト教の宣教師たちに寛容だっただけ。基本的にイデオロギーには無頓着な信長だっただけで、キリシタン大名のように、特に日本をキリスト教化しようと意欲していたわけでもない。動画の印象では、実は信長もキリシタン大名だったという隠れた事実を説いているのかと思ったが、実際はそうでもなく、著者の宮崎の説に何ら目新しいものはない。 織田信長とキリスト教の関係 一方、著者の宮崎は、明智光秀の本を書いても、結局は著者自身は(保守右翼系の)イデオロギーの人である。明智光秀を国粋主義的イデオロギーの人として捉え、評価するというのがこの本の主旨と言っても過言ではないだろう。実際の明智光秀の歴史的考証が主旨というより、ともかく、明智光秀を通して国粋主義的イデオロギーを説くのが、この本の主旨のような印象を受けた。 つまり、信長は天皇を頂点とする日本の精神文化というイデオロギーに無頓着で、結局は、織田家の権力を伸張すればいいという感覚だった。しかしその一方で、キリスト教が日本人の精神に浸潤し、一方で万世一系の皇室がないがしろにされることに対しても、信長はこれといった禁忌感は抱く性質の人間ではなかったし、そのような危険人物であると、明智光秀や細川藤孝、公家・皇室は思った。であるから、暗殺・クーデター等の手段に訴えてでも、未然に阻止せねばならない。つまり、明智光秀の本能寺の変は、大塩平八郎や西郷隆盛に類せられる義挙であると。 つっこみどころ 宮崎は、義挙の人として、大塩平八郎

MVVM と Fat View(その 2)

10 ヶ月前の記事「 LVMC (a.k.a. MVVM: ViewModel + DataBinding) と Fat View 」でも、Activity からコードを追い出すのに夢中になっているうちにいつの間にやら Fat View になってしまった話をしたが、最近また同じ症状に陥ってしまった。 今回の場合は、「Activity からコードを追い出す」という状況ではなかったせいもあって、当初気付かなかったのだ。 ImageView に Glide を使ってネットワークから画像を読み込む機能を追加した自前のライブラリーモジュールを作っていて、ViewModel から DataBinding を通じて url 文字列さえ与えれば、ImageView が url から読み込んで表示する。そんな風な設計にしていたのだが、「ライブラリーだし、色々なプロジェクトで使い回す場合に、少しでもコードを省けるように」と、Glide を利用したネットワークからの読み込み処理の部分を、ImageView を継承したカスタム ImageView に追加で盛り込んだ。 しかし、正解としては、ViewModel から DataBinding を通じて与えるのは、url ではなく、Bitmap の方が良い。というのも、そうすれば、ImageView は、それがネットワーク上の画像なのか、ローカルにあるリソースなのか、を意識せず、ただ、layout.xml の app:bitmap="@{viewModel.bitmap}" を見て反応すればいいだけである。url 文字列ならダウンロードする、ローカルなら setImageResource() する、などと処理を分岐させる必要がないのである。 当初 url で実装した時には、わざわざ loadImageUrl() なる専用のメソッド・プロパティを用意して動作するように実装したが、後でローカルの画像を使おうとした場合に setImageResource() と使い分けなけばならないことに気付いて、url 文字列ではなく Bitmap をデータバインドして ViewModel と連絡すべきだと気付いたのである。 もちろん、そうなると、ViewModel 側で Glide を使ってネットワークから画像をダウンロードする部分

Android Studio Wi-Fi デバッグ

イメージ
巷では既に出回っている情報かと思ったが、基本的に「ADB コマンドを使ってムニャムニャする」ものばかりだったので、そうではなくて「コマンド不要の Android Studio 上の操作一発で可能」な方法があるので、紹介する。 ADB Wi-Fi プラグインを使う Preferences の Plugins から ADB Wi-Fi プラグイン をインストールすると、右側のタブに ADB Wi-Fi が追加されるので、この中から、USB で有線接続したデバイスを選んで、Connect するだけ。一旦繋がれば、USB ケーブルを外してよい。 ※もちろん、PC と端末は同じ Wi-Fi ネットワークに接続している必要がある。

Android API Threshold

item min Android note Dark Theme 29 10 Adaptive Icons 26 8.0 Java 8: OffsetDateTime 26 8.0 ✅ desugar Java 8: Instant 26 8.0 ✅ desugar Java 8: forEach 24 7.0 ❌ desugar AnimatedStateListDrawable 21 5.0 AnimatedVectorDrawable 21 5.0

ACR1251DI-NTTCom と macOS Big Sur

イメージ
そろそろ確定申告の時期を迎えて、e-Tax に関して、 M1 Mac の IC カードリーダーの対応が鬼門だ と国税庁が注意を喚起した件について、あちこちで記事になっている。 自分は M1 Mac ではないのだが、そもそも Big Sur にアップデートしてしまったので、その影響もあるのかどうか、既にアップデートしてしまってから気になってきた。 Mac で e-Tax を安心してできるようにと、わざわざ NTT コミュニケーションズのフラッグシップモデルである ACR1251DI-NTTCom を入手したくらいなので、それが迂闊な OS アップデートで差し障りが生じてしまうというのはちょっと残念過ぎる。JPKI(公的個人認証サービス)によると Big Sur はサポート対象外 である。不安が煽られる。 早速、ACR1251DI-NTTCom を MacBook に接続し、JPKI の利用者クライアントソフトを立ち上げてみた。 問題なく立ち上がる。動作チェックをしてみる。 動作チェックも無事終了する。念のため、マイナンバーカードの電子証明書を読み取らせてみたが、正常に機能した。 M1 Mac はともかく、どうやら Big Sur については(ACR1251DI-NTTCom に関する限り)問題ないようだ。

Inkscape on macOS Big Sur

イメージ
迂闊にも macOS Big Sur にアップデートしてしまって、元からインストールしていた MacPorts 版 Inkscape が使えなくなっていることに気付いた。改めてインストールし直そうとしたが…… sudo port install inkscape poppler のビルドエラー しかし、poppler のビルドの失敗で先に進めなくなった。結構、アチコチで報告されている現象のようだ。 poppler のエラーについては、 #61901 poppler 20.12.1: Failed to build (macOS 11.1 Big Sur) の報告がドンピシャで、正解に辿り着けた。 sudo port -f uninstall cctools sudo port -v install cctools +xcode cctools のデフォルトでのインストールの仕方に問題があるらしく、一旦アンインストールして、+xcode オプションを付けてインストールし直せばよい。これで poppler のビルドが通るので、inkscape のインストールがその先に進み、インストールできた。 ただし、注意点があり、従来のように inkscape コマンドから X11 が自動で立ち上がらないので、先に手動で X11 を立ち上げた状態で inkscape コマンドを実行する必要がある。

GIMP on macOS Big Sur

イメージ
迂闊にも macOS Big Sur にアップデートしてしまって、元からインストールしていた GIMP が重くて使い物にならないことに気付いた( GIMP 公式 でも認識されている問題)。改めて最新版をダウンロードしてきてインストールしても改善せず。 そこで代わりに MacPorts 版の GIMP をインストールしようと思いついた。 sudo port install gimp poppler のビルドエラー しかし、poppler のビルドの失敗で先に進めなくなった。結構、アチコチで報告されている現象のようだ。 poppler のエラーについては、 #61901 poppler 20.12.1: Failed to build (macOS 11.1 Big Sur) の報告がドンピシャで、正解に辿り着けた。 sudo port -f uninstall cctools sudo port -v install cctools +xcode cctools のデフォルトでのインストールの仕方に問題があるらしく、一旦アンインストールして、+xcode オプションを付けてインストールし直せばよい。これで poppler のビルドが通るので、GIMP のインストールがその先に進むようになる、 MacPorts 版だからなのかはわからないが、これは X11 アプリとして動く。そのため、macOS の UI との連携性はイマイチで、フォルダー(Documents / Downloads / Desktop が駄目。Pictures なら ok)を開いたりすることができない。一応、画像ファイルから開くアプリを選んで GIMP を立ち上げることはできるが、一旦立ち上がった GIMP からファイルを開くことができないので、2 枚目以降の画像をレイヤーで開いて合わせて利用するようなことができない。究極的には、公式版の Big Sur 対応の改善を待つしかない。

Model-ViewModel-View の最近のイメージ

イメージ
以前にも MVVM について 記事にしたことがあった が、最近のイメージについて整理してみる。 基本的には、Model-ViewModel-View の 3 段構成である点については前の記事の通りなのだが、それぞれの部分において、抽象的ではなくより具体的な性質の違いが見えてきた。絵にすると次のような感じ: Model Model 部分はミキサーに材料を入れてジュースにするようなイメージで、最終的にひとつの結果の出力に到る。Perl や Python 等で手続志向のコンソールプログラミングをする時のようなイメージ。Web スクレイピング等で、データを加工するその複雑な処理過程をプログラミングすることになるが、時間の流れとしては一方向で、またデータオブジェクトも、成果物としては一つである(ミキサーの絵のように、入力される側の要素は、複数でも構わない)。 流れ的には一直線であるが、データの加工工程そのものに重要性がある。 ViewModel ViewModel 部分は時間の流れ的には一方向ではあるものの、Model に生じた更新を伝播させて複数の View 用の LiveData オブジェクトに帰着させる流れを定義する。ここでは伝播が分岐したりし、さらに、オブジェクト同士の依存関係から、前後関係に留意しなければならないので、Model 部分よりは安易ではない。 例えば、View 側にさらすための LiveData オブジェクトが、あるリストとインデックスとそこからリストとインデックスに依存して取り出す一つの要素だったとする。何も考えずにバラバラにそれぞれを LiveData として定義しただけだと、インデックスが最後尾にあった場合に、リストが伸び縮みすると、要素を取り出す時に IndexOutOfBound エラーを引き起してしまう。そのため、まずはリストを更新し、インデックスが新しいリストのサイズに対して問題ないかをチェックして必要な場合は修正し、それからリストとインデックスに従って要素を取り出すという順序になるようにコードを記述する必要がある。つまり、1) リスト 2) インデックス 3) 取り出す要素 という 3 者の先後は必ず守らなければならないものであることがわかる。 View ViewModel で非同期的な部分は吸収できてい