JsonPolymorphicないわー
System.Text.Json
便利です。よく使っています。
ただ C# は型付けの言語なので、きっちりとした JSON は使いやすいですが、自由奔放な形式のJSONは苦手です。
JsonNode で頑張るのは…出来れば避けたいですね。
そこで、JsonPolymorphic, JsonDerivedType属性の出番です。
決まったキーを基準にシリアアライズに対応するクラスの切り替えが可能になります。
System.Text.Json で派生クラスのプロパティをシリアル化する方法 - .NET | Microsoft Learn
全ては解決できませんが、かなり柔軟度が高くなります。
やったぜ。と思ったんですが…
Type metadata in JSON is apparently not honored if $type is not the first property in the object....
キーとなるプロパティはJSONの最初にないとパースできない?
え???
なんか自分が見落としてるんならいいんですけどね、これじゃぁ使えない…
asp.netはWEB開発の導入によいもの…ではなかろうか
WEB開発を勉強するのに何がよいか…自分としては asp.net をおすすめする訳です。
LAMPとか不要なんですよ。Visual Studio Community を入れれば完了です。すぐに開発とテストが行えます。
これは大きなメリットでしょう。
環境構築がラクなだけではなく、MVCやBlazor等の複数のパターンのWEB開発が可能で、Blazor や Blazor WASMを利用すれば react とか覚える必要も無くダイナミックなWebフロントが作れます。
APIサーバも asp.net で開発できるので、やりとりするJSONデータは同じクラスがそのまま使えますし、required属性などをうまく使えばAPI仕様変更が全てビルドエラーで検出できます。
もちろんデメリットもありますが、クライアントとサーバ側で同一言語で書けるメリットは最高でasp.netを使わない手がないと思うんですけどね。
しかも MAUI Blazor Hybrid を使えば、Blazorでアプリまで作れるという。
いや~こんなよいものそうそう無いんですけどね、なんで流行らないかな?
ImageMagick が Illegal instruction
ローカルのdockerでは動いていたのに、AWSのコンテナに持っていくと ImageMagick が動かない。
IMEI をDockerfile内でビルドするイメージなのだけど…半年前は問題無かったのになぁ。
調べるとローカルでビルドしているため、CPUに合わせた最適化 -march=native
が問題を起こしている様子。
imei.sh
は /.dockerenv
を見て、 -mtune=generic"
か、 -march=native"
の切り分けを行っているようなんだけど、docker buildだとこの判定が動かないのかな。
RUN touch /.dockerenv
を試しに入れてみたらAWSでも動くビルドになった。
とはいえ、この解法は少しもやもやとするので BUILD_CFLAGS
と BUILD_CXXFLAGS
を ARG で設定する方法にすることに。
こんな感じ。
ARG BUILD_CFLAGS="-O3 -mtune=generic" ARG BUILD_CXXFLAGS="-O3 -mtune=generic" RUN wget 'https://dist.1-2.dev/imei.sh' -qO ./imei.sh && bash ./imei.sh --im-version 7.1.1-18
もっといい方法があればいいけど。