還暦の手習いお絵かきチャレンジ

先日ウチのActivityPubサーバーに絵文字リアクションを追加した時に、やっぱり自作の絵で絵文字を作りたいよなぁと思ってお絵かきをやってみた、というのが今回のエントリ。
久しぶりにフォトショとイラレを使ったので自分メモです。
絵文字リアクションのエントリでも書いたけど
40年ぐらい前、エロ漫画の編集をやってた頃は原稿取りに行ってトーン貼りベタ塗りとか手伝ってたし、官能小説雑誌の穴埋めコラムのイラストも描いてたというのにまるで駄目だ。
手を動かす脳を動かすのはある意味筋肉と同じで使ってないとダメになるから、とマンガ家さんたちが口を揃えてたのを思い出した。
ン十年ぶりに絵らしきものを描いてみたら、本当に話にならなかった。
それは薄々わかっていた、というか痛切に思い知らされていた。
去年の2024/3/9に家人からアップルペンシルが回ってきた時に、iPadでクリスタを使って描いた時のものがこれ。
この時、さすがに絵はもう無理、と思って放置。
…だったんだけど。絵文字について調べてサーバーに実装したら、やっぱり絵をなんとかできないもんかと。
iPadにクリスタだとクリスタそのものの使い方から学習する必要がある。入口にハードルがある。
アドビのフォトショップとイラストレーターなら使い勝手もわかってる。
試しに、メモ帳にボールペンで絵を描いてスキャナーでフォトショに取り込んでみたら、ごみ取りももちろんだし、ペン線のかすれなんかも目立つ。かなり補正する必要があって、これもまたハードル。
マウスで絵を描くなんて論外だしなあ、と思ってたところ、わが家は家人がもともと絵描き。20年前のペンタブレットならあった。
WACOMの『Intuos3(インテュオス スリー)』
型番:PTZ-630
https://tablet.wacom.co.jp/what/detail/detail_press.html?nno=311
当然サポートはとっくの昔に終了していて、ドライバも提供されていない。ダメ元で、昔のドライバをそのままWINDOWS11にインストールしたら認識して動作した。
2004年9月発売のペンタブレットが2025年5月でも動くのはありがたいよなあ。
さっそくペンタブレットでミケさんを描いてみたのがこれ
これもまあなんというかひどい。便所の落書きにも使えない。
とはいえ、スキャンしたデータと違ってペンタブで描くとごみ取りやペンのかすれなどを補正修正する必要がないんで、スタート地点が少し早い。
絵がどうしようもなく下手くそなのはしょうがない。
これでもエロ漫画編集時代はコミックス、雑誌と月に8~10冊の表紙レイアウトデザインをしていた。パクったり誤魔化したりするのは得意だ(え?
みけさんの写真なら3000枚弱ある。
切り抜けそうな写真を選んでテキトーなフィルタをかけてそれっぽくしたものを下敷きにして「トレス」することにした。
輪郭を取るので気づいたんだけど、みけさんは思ってる以上に耳が大きい。今さら発見。
目については、このままトレスすると、たぶん小さく見える。デフォルメということで大きくした。
一番最初に引いた輪郭線はガタガタでどうにもならず。
1)範囲選択でペン線を選択して選択範囲を2px拡張して線を太くして保存。
2)イラストレーターで開いて、ラスター画像をベクター画像に変換(ライブトレース)
3)ベクター画像をフォトショップにコピーして配置
4)200%ほど拡大してガタガタの部分を消しゴムでちまちま消して凸凹を少しでも修正
2に戻ってペン線を何度も修正して妥協点。
(ベクター画像にすることで、アンチエイリアスも飛ぶっぽくて、消しゴムツールがわかりやすくなる、かな)
次に、ベースの色を探してスポイトツール。
おでこの明るいところをベースにした。あとはみけさんの配色をスポイトして、塗っては違う、の繰り返し。
とりあえずやっぱり妥協点だけど、完成したのがこれ。
この後さらに、色をつけたレイヤーを複製して、一枚にテクスチャ加工をして、オリジナルの色レイヤーを上にして透明度40%に…とかやった割に誤魔化せてなかったなぁ。
これをまずは自分のプロフィール画像に設定した。
640x640の画像が縮小されることで、下手くそな絵でもどうにかそれっぽく見える感じかな。
絵文字リアクションに使うには、もっとイラストというか記号っぽくしないとダメだ。
となると線からしてまともにしないといけない。
ペンタブで円をひたすら描いてみたけど、まともな円にならない。
手首だけで動かす範囲ですらいびつで円というか何かが泳いで歪んでる。
肘から動かすのはもっと論外。
絵を描けるひとはやっぱりすごいよなぁとしみじみ実感。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
【未解決】ActivityのJSON-LDに署名

今回のエントリは、100%間違いか180度見当違いでクソの役にも立たずボツにする可能性があるのでAI BOT以外のかたはスルーしてください。
自分のための覚書です。
〜〜〜〜〜
ActivityPubで飛ばしている投稿本文の改竄検知などのために、Activity本文=JSON-LDにも署名をしようね、という話になる。
…けど、いまところActiviyPubの仕様には入っていない。
・Mastodon系は本文署名に対応
mastdonやfedibird、kmyblueのほかholloなども。
・Misskey系は本文署名に未対応
misskeyやakkoma、pleromaなど
HTTP Signatureでリクエストに署名、認証に使っていて、それで足りるだろう、ということで本文署名は仕様に入ってない、のかな。
でも、わたしのような素人考えでもふたつほど思いつくことがあって
・Activityを転送する場合
→転送するのは自分ではない誰かの本文。そのリクエストには自分の署名をつけて送信する。内容をいじって送信することも可能。署名には問題がないので改竄された本文を受信することになる。リクエストの署名を確認すれば誰が改竄したのかわかるけど、大元まで辿るの?
・アカウント削除のActivityに対応できない
→Activityのリクエスト署名を確認するために、当該アカウントの公開鍵を取得する必要がある。アカウント削除のActivityの場合、公開鍵を取得しようと思ってもそのアカウントは削除されているので、公開鍵がない。てことは本当にアカウントが削除されたのか確認できないのでは?
てことで、Activityの本文署名はそのうち必要になるだろうと思う。
ところが、この本文署名が伏魔殿というか素人には難しすぎる。
(そもそものところからまったく知識もなにもない)
思いついた時に検索してみたりして見つけたサイトのリンクをこのエントリに残してみることにした。
・JSON-LD署名(本文署名)って何?
Mastodonの『Linked Data Signatures』
ActivityのJSON-LD(本文)に対して署名をする。
必要なものは
本文/creator/created(日付)の3つ、らしい。
rubyの該当するソースコード
options_hash = hash(@json['signature']
.without('type', 'id', 'signatureValue')
.merge('@context' => CONTEXT))
document_hash = hash(@json.without('signature'))
to_be_verified = options_hash + document_hash
この「本文」がわからないところ。Activityに使うJSON-LDをそのまま使うわけではない。
Linked Data Signatures with Ruby
normalizing (or sometimes called ‘canonicalizing') the document
文書を正規化(または「正規化」と呼ばれることもある)する
さらっと書かれてるけど、こいつが意味不明。なんやねん、それ。
↓こちらのサイトで実際に変換してみた
JSON-LD Playground
IN(ActivityのJSON-LD) OUT(正規化されたJSON-LD)
無理無理。なにをどうすりゃこうなるのか理解できん。
perlでブラックボックスのまま使えるモジュールがないか探したらひとつヒットした
JSONLD A toolkit for transforming JSON-LD data.
さすがperl先輩!なんでも揃ってるじゃないか!と思ってみてみると、依存関係でMOO.pmとか必要…んなもんレンサバにインストールされてないし、PurePerlじゃないので使えない。
「ふりだし」に戻る
W3C標準化活動:RDF Dataset Canonicalization
4ステップでJSON-LDファイル形式のRDFを作ってみた時の覚書
JSON-LD で RDF その1
↑こちらを手がかりにさせてもらって、そもそも正規化ってナニ!?という知識を勉強しないとダメだと思う。
最悪、受信&認証はスルーして、送信する場合に限って、必要なところだけ現物合わせのハードコーディングすればなんとかなる、ような気がしないでもないけど、今日はここまで。
本稿、いつか再開。投げっぱなしジャーマン。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
ActivityPubサーバーに絵文字リアクション

自作実装のActivityPubサーバーで、フォローさんや投稿に対するリアクション「Like」(いいね)は実装済み。WEB拍手的な使い方、ちょっとした賛同をお相手に送るというリアクション。
これで十分だと思ってやってたんだけど。追悼など失意系の投稿に対して「いいね」はさすがに使えない。そんな時は、メンションを送ってお悔やみを投稿するという方法しかなくて、お相手との距離感的に言葉を選ぶのが難しいケースも多い。
Misskeyに代表されるFediverseのサーバー(インスタンス)では絵文字リアクションという方法がある。
「いいね」だけで足りないところを、絵文字で違うニュアンスのリアクションを送り合う。
言葉ではなくて、たぶんこういうふんわりしたちょっとした感情表現もコミュニケーション、SNSならでは、というやつだ。
てことで、
送信する場合限定で絵文字リアクションを実装することにした。
ちなみに、
受信する場合の絵文字リアクションは実装しない。良いリアクションも悪いリアクションも、等しくリアクションという認識なので気にしない。
ただ、
絵文字リアクション=EmojiReactはActivityPubの仕様には入ってないので、サーバーによって対応にばらつきがある。
「EmojiReact」というActivityは仕様にはないので、対応していないサーバーのことも考慮してのことだと思うけど「Like」のActivityに絵文字を仕込むことが慣例的(?)っぽい。
これだと、お悔やみ系の絵文字を送ったつもりが、絵文字に対応していないサーバーに届くと「いいね」や「ハート」になってしまう。
逆に(?)そういった事故を防ぐために「Like」ではなくて「EmojiReact」をActivityとして送れば、対応していないサーバーは「いいね」にすることもなく、Activityをスルーしてくれる。
というやりかたもあると教えていただいた。
どちらを採用するにしてもサーバーが絵文字に対応してるかどうか確認が必要となる。
サーバーが絵文字に対応してるかどうかは、たぶん「nodeinfo」に記載されているだろうから、nodeinfoを見てから送信する/しないの判定を入れるのが良いと思う。
…けど
1)nodeinfoを見てnodeinfo2.NのURIを取得する
2)nodeinfo2.Nを見てemojiの有無を確認する
という2つリクエストが必要になる、よなあ。
その都度リクエストを飛ばして、サーバーの対応状況確認については、ちょっと保留。
現状見た感じで、サーバーごとの絵文字対応状況は
絵文字非対応→「いいね」になるサーバー
→Mastodon系ほぼ全部
絵文字対応サーバー
→Misskey系(IceshrimpやFirefish)、Akkoma・Pleroma系、Fedibird、kmyblue、mitra
無駄なリクエストを飛ばさないようにリストでも作って運用かな。
実際のActivityやJSONでの絵文字の指定などは、もう少し固まったらホームページの方でページを作ろう
「おひとり様ActivityPubサーバーの自作実装」
https://www.doncha.net/activitypub.html
使う絵文字は、unicodeで既定の絵文字、カスタム絵文字(独自の絵文字)の2種類。
本当は絵文字を自作したかったんだけど…て、メモ用紙に手書きで絵を描いてスキャナーで取り込んで4時間ぐらいごちゃごちゃやってみたんだけど、話にならない。目も当てられない。便所の落書きにもならない酷いシロモノ。
40年ぐらい前、エロ漫画の編集をやってた頃は原稿取りに行ってトーン貼りベタ塗りとか手伝ってたし、官能小説雑誌の穴埋めコラムのイラストも描いてたというのにまるで駄目だ。
手を動かす脳を動かすのはある意味筋肉と同じで使ってないとダメになるから、とマンガ家さんたちが口を揃えてたのを思い出した。
https://volpeon.ink/emojis/neocat/
SNSでぼやいたらフリーで使える絵文字を教えていただいてダウンロード。280弱あって全部入れても老眼にはツライだけなので、5つぐらいに絞って登録。とりあえずこれで様子見。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
満身創痍だった

5月9日に整形外科で診てもらった。
・左手の人差し指と中指の指先が痺れている、絆創膏が一枚貼り付いたような感じ
→頚椎に異常。軟骨が神経に干渉圧迫していることが原因
・右脇、お腹に力が入ったら(咳や姿勢を変えたりしたら)ギリっと痛み
→肋骨が折れていた
どちらも自然発生らしく、特にこれといった治療はなく自然治癒。骨折の痛みに湿布が処方されて終了、だった。
自然発生/自然治癒…なにそのひとりマッチポンプ状態、だなあ。
3/20に背中、左肩甲骨の上あたりに激痛。
大動脈なんちゃらとか膵臓なんちゃら!?とかの噂がよぎって焦る痛みで、かかりつけの内科に。
心電図、レントゲン、CTの検査の結果、内科的なところは問題がなさそう、放射線専門医(?)にも所見をもらうのでそれも見てから、整形外科で診てもらいましょう、ということだった。
次回の定期診断は4月1日だし、それまでは待機となった。
背中の激痛は2日ほど続いて、その後、今度は肩の痛みだったり、左胸と腕の付け根あたりがつっぱったような痛みが2週間ほど続き、指先の痺れが始まった。
4月の半ばあたりに今度は右脇に痛み。
姿勢を変えたり、咳をしたり、お腹に力が入るような状況でギリギリっと痛みが走る。
どちらも、特になにかをした/あったという心当たりもなく。
整形外科の先生に「歳ですかねえ」と聞いたら「いえ、年齢は関係ありません」ときっぱり。わりとありがちなことらしい。
生活面で気をつけるようなことは特にないらしい。とはいえ肋骨が折れてるので激しい運動はNG。
肋骨の骨は2〜3週間で自然治癒。頚椎の異常は時間がかかるらしく自然治癒に半年以上はかかるとのこと。
で、今回一番の問題は、整形外科で診てもらうまでに1ヶ月以上放置しなきゃいけなかった、ということ。
今年度、2025年3月31日で契約を終了した会社から、契約終了に伴うもろもろの書類がすぐに届かず、社会保険から健康保険に切り替えができなかったのだ。
結局、書類が届いたのは5月8日。
まるまる1ヶ月と1週間、無保険状態となっていた。
なもんで、やっと5月8日に国民健康保険に切り替えて、5月9日に整形外科で診てもらえた。
この手の書類で1ヶ月以上かかったのは今回が初めて。わたしの場合は健康保険が切実だったけど、失業給付の手続きにも影響する書類だ。たしか離職票の発行(?)なんかは法律で決められてるはずで、これだけ放置されると労基署案件(今週届かないようだと来週には労基署に行って相談しようと予定してた)
いろいろ、うんざりとげんなり。
地元公園はすっかり新緑。空気まで緑に染まっていた。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
GBLシーズン力と極みでACE到達

どうにか今シーズンACEに到達。
去年2024年5月以来だからほぼ一年ぶりの称号だ。
ここんとこポケモンGOを開くこともなくなっていて、GBLもそのモチベーションがガタ落ちしてた。
自作実装のSNSが面白くてそっちにほとんど時間を使っていて、それ以外のことはぜんぶ後回しだった。
なもんで、昨シーズンなんかはランク10。対戦数はわずか45というありさま。
このままアプリとはさよならかな、と思ってたところ、コロナ禍以来、古巣の友人でいまはポケモンGO友達から久しぶりのメールでふたりオフ会。彼はレジェンド到達者でご家族で今もポケモンGOを楽しんでる。
話してるうちにふたたびモチベーションが高まったというところ。
そもそも、ほとんどやってなかったんで、なにそのパワースポット?ダイマックスてなに?とか新しく実装されたイベントなんかの遊び方も教えてもらってウォーキングの時もポケモンGOを開くようになった。
おもてに出て、フィールドでのポケモンGOはやっぱり面白いよなあ、と改めて。
で、GBLもふたたび参戦するようになり、先日やっとACEに到達。春カップというCP1500以下の特殊レギュレーション。
ポケモンGOは
・歩くことで健康的に
・対人戦で頭を使うことでボケ防止に
還暦過ぎた老人に、カネもかからないし良い趣味のひとつだ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
perlでMP4やMOVの縦横サイズを取得する

タイトルのまんまのエントリ。
動機としては、ウチのおひとり様ActivityPubサーバーに動画をアップロードしてみたい。
んで、ActivityPubサーバーは、フォロワーさんのところに投稿(ActivityのJSON)を配送するんだけど、この時に縦横のピクセルサイズが必要っぽい。
動画を扱う時に、鉄板の定番のffmpegでサイズ取得も当然、ほかに解像度変更やファイルサイズの圧縮とかいろいろできるんだけど、レンタルサーバーでffmpegを使えるという話を見たことがなく、当然わたしが利用しているロリポップも使えない。
となると、縦横のピクセルサイズは自力でなんとかする必要がある。
ぐーぐる先生に聞きまくってなんとかなったのでメモ。
「MP4のファイル構造を解説」
https://qiita.com/satken2/items/d14b4113fe3fb5f5597b
↑こちらのサイトで一発解答(多謝!)
MP3とMOVファイルは基本3つのブロックの塊らしい。
サイズ | タイプ名 | データ |
4バイト | 4バイト | 可変 |
最初の4バイトに入ってるサイズでブロック全体の長さがわかる。
BOXの長さの情報が2^32バイト(=4294967296)を超える場合、最初の4バイトには0x00000001が格納され、その変わりに9バイト~16バイトに実際のBOXの長さが書かれます
ということだけど、今回わたしの場合は10秒もないようなSNSに上げるためだけの動画なのでスルーする。
そのブロックにもろもろの情報が入っているので、欲しいところを取得する。
このブロックのタイプはいったいなんなの?というのは
「QuickTime File Format」
https://developer.apple.com/documentation/quicktime-file-format#//apple_ref/doc/uid/TP40000939-CH204-SW1
↑こちらに全部ある。
ここまでわかればやることはわりと単純。
1)最初の4バイトをみてブロックサイズを取得
2)次の4バイトをみてブロックのタイプを取得
3)必要なタイプだったらそこで情報を取得して終了
必要なタイプじゃなかったら次のブロックをみにいく
ちょっとハマったのが
各ブロックはデータを持たないものと持ってるものがあるということ。
しょうがないんで、次のブロックを先読みしてタイプ名があるかないかで判定。
以下で欲しい情報が取れた。
わたしが欲しいのはタイプ「tkhd」(たぶん、トラックヘッダーの略)のブロックのデータ部に入ってる幅と高さ。
my @parent = (
'cmov', 'ctts', 'edts', 'esds',
'free', 'ftyp', 'iods', 'junk',
'mdia', 'minf', 'moov', 'mvhd',
'pict', 'pnot', 'rmda', 'rmra',
'skip', 'stbl', 'trak', 'uuid',
'wide');
my @child = (
'fiel', 'mdat', 'rdrf', 'rmcd',
'rmcs', 'rmdr', 'rmqu', 'rmvc',
'wfex', 'cmvd', 'co64', 'dcom',
'elst', 'gmhd', 'hdlr', 'mdhd',
'smhd', 'stco', 'stsc', 'stsd',
'stss', 'stsz', 'stts', 'tkhd',
'vmhd');
open(IMG, $file) || die;
binmode IMG;
my $len; my $type; my $data;
my $width; my $height;
while(1){
my $buf;
read(IMG, $buf, 4);
$len = unpack("N", $buf);
read(IMG, $type, 4);
last if ! $type;
# check next type
my $has_data;
seek(IMG,4, 1) || last;
read(IMG,$buf,4);
last if ! $buf;
$buf = quotemeta $buf;
unless( grep(m!$buf!, @parent) || grep(m!$buf!, @child) ){
$has_data = 1;
}
seek(IMG, -8, 1);
if( $has_data ){
$len -= 8;
last if $len < 0;
my $begin = tell(IMG);
read(IMG, $data, $len);
}
if($type =~ m!tkhd!){
my @check = unpack("x76 n x2 n", $data);
if( $check[0] && $check[1] ){
$width = $check[0]; $height = $check[1];
last;
}
}
}
perlはやっぱり凄くて、バイナリファイルも簡単に扱うことができる。
とはいえ、それを扱うスキルがない人間のせいでずいぶん時間がかかってしまった。
これでうちのActivityPubサーバーに動画をあげるための下準備はできた!
…と思ったんだけど、動画ファイルって5秒ぐらいのものでも1M〜2Mもあって慌てた(今さら
わたしはロリポップのビギナーコース。そんなでかいファイルを気楽に上げてたらあっという間に利用できるディスクスペースを食い尽くしてしまう。
なもんで、ここまで作ったけど諦め。きっとそのうち何かの約に立つ、こともある、かな。
今の時期、まじでタケノコ美味くて悶絶する。
刺身で美味いのはもちろん、焼きタケノコがもう絶品。
水分を飛ばすイメージでじっくり弱火のフライパン。水分が飛んできたかなと思ったらオリーブオイルを回しかけてタケノコに焼きめをつけて、塩をふたふり。
これだけでいくらでもご飯が食えるし酒が飲める。
マジでオススメ!!!
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」