この記事は、IchigoJam Advent Calendar 2020 の 10 日目です。
きっかけ
IchigoJam のプログラムをブラウザ経由で Kidspod に投稿する際、自分は MixJuiceでKidspod;と通信しよう!のページの以下のような記述
(パソコンのブラウザでは絵文字を表示できないので、IchigoJamの場合は「(#数字)」、IchigoLatteの場合は「#」という形で表示されます。)
を読んで、「ああ、絵文字は (#数字)
と入力すれば、うまく置き換えてくれるんだな」とか勝手に思い込んでいました。
そんなうまい話はあるハズもなく、実際 Mixjuice で取り込もうとすると、
という具合に、入力したものがそのまま出てきてしまうわけですよ。(当たり前)
う~ん、本物の MixJuice を持っていない自分は、絵文字込みのプログラムをどうやって投稿すれば良いのか…
で、どうするか
いろいろ調べてみたところ、実際のところは単純な HTTP のやり取りをしているだけだということが分かったので、curl コマンドを使える環境であれば、IchigoJam 投稿用の URL に対し、
curl kidspod.club/mj/nnnn:XXXXXX --data-binary @source.bin
という具合に HTTP リクエストを投げれば OK です。
source.bin
はプログラムの生データのファイルで、カタカナや各種絵文字が仕様に基づいた 1 バイトコードになっている前提です。改行コードは LF で。
うむ。イイ感じですな。
戯言
ん? そもそもプログラムに絵文字をそのまま入力するのは行儀が悪いって?
まぁ、そのへんはいろいろ思想や主義主張があるとは思うのですが、かつてのベーマガでは当たり前にやられていたように記憶しています。
当時、目からウロコだったのは、以下のような方法で、一回の PRINT 文で複数行のキャラクタを出力するというテクニック。
LOCATE X,Y:PRINT " A ↓←←←IOI"
このテクニックを使っているプログラムは、機種によってはリストを印刷すると空白で出力されるので、ベーマガの紙面に載せる際、編集者の方が手書きで矢印を書き加えてくださったりしていたんですよねぇ。
IchigoJam でも仕様的には同じことができるのですが、キーボードで (#1C)
~ (#1F)
を入力することができない上に、「リストで出力する時は制御コードではなくキャラクタとして出力する」ということができないので、あまり実用的ではありません。
あと、この記事を書くにあたって、curl コマンドに --data-binary
というオプションがあるのを知ることができたのが思わぬ収穫でした。
はじめは -d
オプションを指定して、改行が自動的に取り除かれてしまうので、何故だ何故だと小一時間悩んでしまったのですが、もともとそういう仕様だったんですね…
参考: curlのオプション--data, --data-binary, --data-raw, --data-urlencodeの違い