さじは投げられた

プログラマーの戯れ言

MSX0のプログラム…始まらない

自分も古い人間なので、MSX0を楽しもうと考えています。

なので皆がいろいろやっているように、

  • HTTP経由でファイルを受信出来るようにして開発の足がかりを作ろう。
  • WEBサーバは慣れているC#でいいよね
  • 受信側は最初はBASICでいいや

と始めたのですが…

BASICのファイル命令だと、受信したファイルの保存に支障がでますね。
クセが強いのを忘れてたな。

MSX-DOSのプログラムにしないとダメなのか、でもその開発の為の最初のツールなんだが…

いやまて、テキストだけの受信ならいけるのか?
確認したいが、時間が取れぬ…

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 をおすすめする訳です。

  • 開発環境導入の容易さ
  • C#で書ける
  • windowsだけでなく、linux, mac osで動作する
  • C#で書ける
  • C#で書ける

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_CFLAGSBUILD_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

もっといい方法があればいいけど。