日常雑感

その時々のできごとや思ったことはリアルタイムWEBのSNS(フェディバース)に放流。
あとから参照することもありそうなことは蓄積型のこのブログに積み上げ。
という大雑把な棲み分けをするようにしてるつもり(SNSのなかった昔はともかく)
…なんだけど、ここ最近みたニュースがもうほんと未来に来ちゃってスゲー! ので、こっちに。
「核融合 小さな太陽を造る壮大な実験「ITER」は人類のエネルギー危機を救えるか?」
https://natgeo.nikkeibp.co.jp/atcl/news/25/102100578/
「核融合発電の技術開発で日本がリード、最終実証装置の建設に着手」
https://monoist.itmedia.co.jp/mn/articles/2510/29/news037.html
核融合なんて、太陽を手に入れるようなもので、人類には無理、と言われてたと思う。
まさかその太陽が手の届くところまできてた。びっくりするしかない。
イカロスになりませんように、だなあ。
核融合が実現すると、核廃棄物、地球温暖化CO2問題なんかが解決する、らしい…生きてるうちに知りたい世界だよなあ。
「HTV-X1号機、軌道制御マヌーバを完了し、油井宇宙飛行士によって把持(キャプチャ)されました」
https://humans-in-space.jaxa.jp/htv/mission/htv-x1/news/detail/005078.html
宇宙ステーションが地球の周回軌道にいて、そこに滞在する宇宙飛行士がいるだけで、それいつのSF?という世界で改めて胸熱なのに、地上から打ち上げた貨物宇宙船で荷物を届ける世界だ。
計算通りということだろうけど、いったいどれだけの距離がある? どんなスピードで地球上を周回してる? それをピンポイントでドッキングとか。
JAXAやNASAの動画を見るといま自分はどんな世界にいるのかくらくらしてくる。
いやまじで未来。
先日上げたエントリの続きも少し。
「ブログのアクセス制限」
たぶんA.I.のクローラー。その連続アクセスがちょっと行儀が悪くてアクセス制限をかけた。
かなり雑にやっちゃったもんで、クローラーじゃない「ひと」も巻き込んでしまった。
ということで少しずつ様子を見ながら制限することに。
↑クローラーと思しきアクセスはこのページに案内するようにした。
A.I.も未来なんだけど、なんか不幸な生い立ちになりそうだなぁ
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
テキトーフェッチメール

プロバイダのメールを取得表示するperlスクリプトをでっちあげた。
今まではgoogleのGmailでプロバイダのメールを取得して、WEBやアプリのGmailでメールを確認してたんだけど、GmailがPOPのサポートを終了という話。
「Gmail、POPのサポートを2026年1月に終了へ」
となると、迷惑メール=SPAMメールが面倒くさくなる。
Gmailを使ってる一番のメリットは迷惑メールの振り分け。迷惑メールフォルダは中を確認することもなくそのまま全削除してた。
これが使えなくなる。
WEBサービスを公開してたり、ブログで仕事受注していたこともあって、プロバイダのメールアドレスはオープンにしてた…なもんで、お問い合わせやプロモーションなどのメール以外、残り95%ぐらいは迷惑メール。
GmailのPOPサポートが終了となってから慌てても、空白期間が生じるんで、今のうちに対応しておこうというところ。
やることは単純で。
・pop3でプロバイダのメールサーバーにログイン
・届いてるメールを取得してログアウト
・メールの中身を確認、解析
・迷惑メールは削除
・迷惑メール以外は表示
これだけ。
Net::POP3を使ってメールサーバーにログイン、取得。
MIME::Base64とMIME::QuotedPrintを使ってメールのエンコードされている部分(本文やSubject、From)をデコード。
メールのヘッダーを解析するためにMIME::Emailというモジュールがあるんだけど、レンサバのロリポップにはインストールされていないので、ここは自作実装。
問答無用のスパムリスト
sub list_spam{
my $self = shift;
my $args = shift;
my @list = (
'[spam]','bizocean','visa','JACCS','ETC',
'日本郵便','楽天会員','楽天カード','東京電力','セゾンカード','宝くじ公式','メルカリ','マネックス',
'大和証券','クロネコ','ソースネクスト',
'マイル','マイレージ','お客様サービスセンター','入金','分割・リボ','統計調査','即日',
'裏ワザ','サービス停止','セキュリティ警告','無料でもらえる','ガス料金'
);
map {$_= quotemeta($_)} @list;
return join('|', @list);
}
プロバイダのメールで登録していない銀行やサービスは明らかにスパムだし、それ以外の「裏ワザ」「即日」といった文言を使うようなもの、「サービス停止」だのプロバイダのメールアドレス宛に飛んできそうにないものを列挙羅列して、SubjectやFromに含まれていたら削除。
このほか、ワードの組合せや本文中に含まれるリンクなんかでも判定を入れたので迷惑メールはほぼほぼシャットアウトできたと思う。
また、これらの判定の前にホワイトリストを通すようにしてるんで、必要なメールを削除するようなことはないだろう。
gmailをありがたく便利に使わせてもらってるんだけど、いつかのSPFレコードうんぬんの時も、gmailの仕様変更(?)は、影響が大きいんだよなあ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
ブログのアクセス制限

去年あたりから、たぶんAIがらみでのコンテンツ収集と思うんだけど、クローラーやBOT=人間以外のアクセスが増えている。
当ブログのエントリを秒刻みで地引き網してるんで、さすがにそれどうなの?ということで今月からアクセス制限することにした。
今日時点でブログのエントリ数は3000ちょっとで、さらに個別、年月日別、カテゴリ別等々、リンク数はエントリ数の何倍かは多い。同じエントリなのに、リンクが違うといちいちアクセスすることになる。
この程度のボリュームで負荷どうこうはないはずだけど、レンタルサーバーに間借りしてる立場だし、ちょっと意識したほうがいいよなあ、と。
てことで。
アクセスのremote addrからhostnameを引いて、ドメインが取得できないもの、ccTLD(国別のドメイン)で日本語話者ではなさそうな国のドメインなど、かなりがっつり制限をかけた。
それらのアクセスはすべてホームページ 「On Golden Pond」 へ、301リダイレクト。
ホームページの方は、各ページが全部ペラ一枚の静的ページだし、アクセスが集中したところで表示速度に影響が出るようなこともないだろうし。
AIにコンテンツを収集されることに対して、特に問題とは思ってなくて、むしろ、ウチのイイ加減なデタラメをどっさり食べて、元気に育っておくれ、なんだけど!
アクセス頻度というかアクセスのやりかたを考えていただけませんかねえ。
» ローカル環境で電子書籍を作る、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」
おひとり様ActivityPubサーバーの詳細

先月、ウチのおひとり様ActivityPubサーバーの全体像、実際やってることはホームページに個別ページを作って掲載した。
あらためて、こっちのブログでもその告知。
ブログとホームページの棲み分けというか、以前、SNSに投げた通り
1)SNSで思いつきをちらほらメモ
2)ブログで自分のSNSを見ながら動機や経緯を整理
3)1と2を経て、ホームページに完結した個別ページとして掲載
各Activityを実装するにあたってのブログのエントリとそれを完結させた個別ページはあるけど、サーバー構成について完結させた個別ページはあるけどブログのエントリはなかった。
上記の棲み分けでいうと、2)→3)ではなく3)→2)が今回のエントリ。
おひとり様ActivityPubサーバーの構成::On Golden Pond
https://www.doncha.net/activitypub/activitypub013.html
↑ホームページ掲載はこちら
大雑把にやってることは
・htaccessでリクエストのリダイレクト設定
・リダイレクトされたリクエストをスクリプト1で処理
・ActivityPubの仕様通りにスクリプト2で対応
ウチの構成を丸裸…こういうページを作ることで、自分でも未確認だったり再確認することがいろいろ出てきてびっくり。
昔からよく言われるように「ひとに教えるのは自分に教えることになる」というやつか。
自作実装したのは「自分のわかる範囲で片付ける」ため。
仮にMastodonなど定評のあるActivityPubサーバーソフトウェアをめちゃくちゃ頑張って導入/設定したとしても、何か問題が出た時に、自分のスキル/知識では解決できるとは思えない。管理運用するサーバーの種類も多いし、それらを操作する言語もひとつじゃ済まないし。
おひとり様でサーバーを立ててFediverseに参加できても、すぐに退場することになるんじゃ困る・面白くない。
てことで
・ドメイン取得済み
・レンタルサーバー契約済み
・perlならどうにか手癖で書ける
・apacheなら少しわかる
・データベースも少しはわかる
・htmlとcssは手書きできる
という現状環境と自分のスキル/知識の範囲内。
ActivityPubの仕様、というか決められてる「約束事」は最低限のリクエストのやりとりだけだし、上記程度のスキルで対応できる。
仕様を実装した上で、気をつけたのはひと様の投稿の扱いだけで、それ以外はいろいろがっつり省いた。
だいたい、フロント側はアクセスしたらタイムラインを表示するだけ。もちろん、ページ更新は手動で再読み込みというチープな作りだ。
それでも十分面白いし、自分のタイムラインにどっぷりハマってる。
現状環境、スキル/知識の範囲内でいうとphpやrubyを使えるひとが多いだろうし、phpやrubyでwebというひとはデータベースも使えるだろう。ドメインやレンタルサーバーなんかは外食2回分ぐらい。
やってみると、思っていたよりもFediverse参加のハードルは低い。
おひとり様サーバーを作って参加してみませんか!?
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
年金請求手続きに行ってきた

今日、初めての年金請求手続きをしてきた。
エントリにするほどではないんだけど、いつなにをやったか自分で見返すためのメモ。
地元の年金事務所。相談に行くにあたっては事前に予約が必要で、2/7に電話相談窓口に電話して予約が取れたのが今日3/14。1ヶ月以上先の予約でびっくり。それだけ混み合ってる。
電話をしたときに年金請求申請書の記入箇所でわからないこと聞きまくってとりあえず埋めておいた。
当日、というかまさに今日、請求手続きに必要なものは
・マイナンバーカード
・振込先銀行の通帳かキャッシュカード
・雇用保険番号の記載された紙
の、3つ。
事前に調べてたら戸籍謄本が必要だとか住民票が必要だとか言われてたけど、
・本人のマイナンバーカードがある
・申請書の配偶者のマイナンバーを記入する欄が埋まっている
であれば、謄本も住民票も不要。
わからなかったのが配偶者加給だったけど、とりあえず記載しておいたらそれもOKだった。
…ていうか、相談窓口に予約を入れて来所すれば、そこで事細かく説明があって、その場で記入して完成するから杞憂だった。
ということで、満額じゃないけど64歳からの特別支給老齢年金の受給が始まることとなった。
40年以上働いていて、厚生年金、国民年金を払い続けてきたんで、今度は受け取る側になった、ということだ。
支給されるという、そこに示されてる金額、
を!すげー!40年も働いただけはあったな!と一瞬思ったんだけど、それは「月額」じゃなくて「年額」という現実。
アルバイト、パートもやってかないとなあ。
金額はともかく。
一定した収入が確保できる状況というのはいろいろありがたいもんだなあ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」

