web本棚のソースコード公開

今まで、スクリプトのソースコードを晒すことはしてなかった。
いや、ぶっちゃけ、自分で見ても酷いありさまで、とてもひと様に見せるようなシロモノじゃないから。
そんなものを公開したところで、誰のためにもならない・誰の役にも立たない。
…ということなんだけど。
還暦も過ぎるといろいろ終活を考えなきゃいけない。
先日のエントリ 「web本棚」 でも終活の一環でサービス終了ということを書いていて、ちょっと考え直した。
書き散らかしてきたスクリプトを晒したところで誰のためにもならないけど
「晒すことで自分のやってきたことを自分でふりかえることになる」
のは、自分のためになる。単純に面白い。
ということでちょっとずつ晒してみようかとホームページに新コーナーを作った。
「On Golden Pond」
まずはweb本棚のソースコードを公開
「web本棚のソースコード::On Golden Pond」 
もう20年ほど前に作って、改築増築改修をしてきたもの。
SQLもまだ覚えたてみたいな時で、今だったらjoinしてgroupingしてとかSQLだけで済ませられるようなことも、ひとつずつ抽出して、抽出した結果をperlで処理してる。
なかなか恥しいシロモノなんだけど、怪我の功名というかSQLが単純なので処理の切り分けがperlのところで済むので簡単に改修できる。
とはいえ問題がjavascriptとスタイルシート。
javascriptはjQueryなんか使っててそのままだし、スタイルシートがjQueryべったりで、スマホ対応が無理。これは諦めた。
・本棚を眺めてるというのにページ遷移なんかで読みこみが入るとうっとーしーからアクションを起こしてもその場から極力動かずに済むように
・没頭してると時間を忘れそうだから時計表示は必須だろうし
などなど、どうしても(当時としては)jQueryが必要だったんだよなあ。失敗だった。
ソースコードを公開するなら、今どきなら、プログラマ御用達のgithubやcodebergを使うんだろうけど、わたしはただの素人でプログラマではない。
それに不具合やリクエストが飛んできても対応できない…というか、その気もない。
文字通り、素人のクソコードを本職のプログラマが利用するようなサイトに掲載する度胸もないしね。
なので、自分のホームページでそっと公開することにした。
自分のホームページなら、何をするにしてもすべて自分の管理下、ほかの誰かに迷惑をかけることもないという気楽さもあるしね。
» ローカル環境で電子書籍を作る、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」
フェディバースのプロフィールページ

フェディバース用のプロフィールページの見た目をちょっとだけいじった。
おひとり様自作実装のActivityPubサーバーでフェディバース=SNSに投稿したり流れてくる投稿を読んだりしてる。
ローカルのタイムラインは、自分ひとりの壁打ち、自分の投稿が並ぶだけ。
ということもあって、デザインもくそもない、昭和平成の掲示板風味のローカルタイムラインだ。
そもそも、おひとり様の投稿は、フォロワーさんのいるリモートサーバーに投げられて、リモートサーバー側で表示される。投稿を表示するリモートサーバーの種類ごとに表示のレイアウトやデザインは違うものとなる。
さらに、リモートサーバーでは過去投稿もキャッシュされるので、たとえば、わたしの投稿一覧もリモートサーバーがキャッシュした範囲で表示される。
てことは、わたしの投稿を見るために、わざわざウチのおひとり様サーバーに飛んでくる必要はない。自分以外に見るひともいないページとなれば、そりゃ手抜きで十分、放置ということになる。
とはいえ、リモートサーバーの方にある「元のページで表示」などのリンクで、ウチに飛んで来られることもないこともない。
最低限の見栄え見た目を整えてみた。
て、「border-radius」で囲みの罫線の角を丸めただけなんだけど、角が丸いだけで、なんかそれっぽい見た目になって満足して…はいけないんで、プロフィールに文言追加、リンク追加。
ベースを白にして、コントラストを低めにするのがオサレなんだけど、それは目に優しくない。
昔、視覚に問題を抱えるひとたちのサポートをするNPOに関わってたこともあって、ちょっとだけ意識するところ。
なので、黒ベースのコントラストはっきり系にした。
ほとんど見られることのないページのURLはこちら
https://tokoroten.doncha.net/t2aki
フェディバースのSNSは面白いですよ!
Xやスレッズ、ブルースカイに疲れたらフェディバースのSNSを試してみましょう!
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
ホームページの生存証明

更新情報を生存証明とも言ってますよね。
個人ホームページは1ページずつ「ページを作る」ことになるので、毎日なにか放流してるSNSや、月に何度か(の予定の)ブログと違って、停滞してしまう。
なもんで、SNSやブログの最新情報を取得・表示させるようにしている。
このブログ「ひまつぶし雑記帖」はRSSを配信してる。
RSSは1.0系と2.0系があるけど、モノはXMLなのでやることは
1)RSSを取得する
2)XMLを解析する
3)必要なものを表示させる
の3段階。
RSSは枯れた仕様なのでGETでXMLを取得したらXML::SimpleあたりでXMLを解析して必要なもの「タイトル/リンク/概要」を引っ張り出してHTMLに整えて表示するだけ。
SNSのおひとり様ActivityPubサーバーはRSSなど配信していない。
ActivityPubの仕様にoutboxコレクションというのがあって、これはアクターの投稿を順番に並べたもの。新着順なので、これを取得すれば更新情報として使える。
1)アカウント情報からOUTBOXのURLを探す
2)OUTBOXのJSONを取得する
3)JSONを解析する
・OUTBOXがページャーだけだったら1ページめを取得する(2に戻る)
4)必要なものを表示させる
webfingerから辿ってアクター情報(アカウント情報)の中にあるoutboxのURLにGETリクエストを投げる。mimetypeを「application/activity+json」にすればJSONが返ってくる。
JSONを解析して必要なもの「タイトル/リンク/概要(投稿を文字数でトリム)」を引っ張り出してHTMLに整えて表示する。
こちらはRSSよりもひと手間かかる、かな。
ActivityPubのoutboxはRSSと同じように更新情報に使えるけど、発想や仕組みは別もの。
RSSの場合は広く告知するためにRSSを配信してるサイトならページのどこにでもRSSを取得取得できるリンクの記載があって、RSSリーダーに登録してね、と。
outboxの方はSNSで利用するためのもので、どこにあるのかわからない。アカウント情報→プロフィールページでわかるとはいえ、それ単体であちこちにリンクがあるわけではない。
outboxを要求された時にJSONを返すのかHTMLを返すのかリクエスト次第というのもRSSとは違うところ。
outboxについては個人ホームページの 「On Golden Pond」 のActivityPubページに追加する(予定)
今さらまた「ねこあつめ」2
このゲーム、猫と過ごしたことのあるひとが開発にいるよなあ。
猫は「そこにいてくれてありがとう」なんだよーーー
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
SNS・ブログ・ホームページ

SNSとブログとホームページの棲み分け、というか自分的整理。
同じようなことをここに何度も書いてきてるんだけど、その都度その都度で環境も変わってるんでエントリとして残す意味は少しはあるかと。
先月、個人ホームページを改めてというか、ふたたびみたび、また作った。
これが面白い(今のところ)ので、棲み分けを意識しないとわやくちゃになりそうだ、ということでメモ。
・SNS
言葉を投げるもの。リアルタイムで言葉のキャッチボール
・ブログ
言葉を定着させるもの。言葉を蓄積されている場所。
・ホームページ
ページをひとつずつ「作って」いくもの。言葉だけじゃ足りない。
てな色分けでいいような気がする。
いま、このエントリも、思いついてなんとなくSNSに投げたものが最初。特にリアクションなど期待はしてなくて、思いついた言葉をそのまま投げただけ
それが自分的に発火点となって、いま、こうやってブログのエントリを書いてる。記録しておこうという動機がそこにできたわけで、投げっぱなしのSNSに意味はあった。
で、ホームページ。
たぶん、この手のことをこのブログ(ひまつぶし雑記帖)にだらだら書き殴ってると思うんで、そのうちまとめてページに起こそうと思う。ページを「作る」感覚ということになるかな。
SNSとブログ、ホームページの仕組みとも密着していて。
SNSは自作実装のActivityPubサーバー。
びっくりしたのが、何をするにしてもリクエストを飛ばすし、リクエストが飛んでくる。その回数が予想を遥かに超えていた。
言葉を投げる、言葉のキャッチボールというのはまさにこのことだなあ、と実感。
ブログは自作のブログっぽいCGI
ブログって何が必要なんだろうと既存のブログサービスを眺めて実装したんだけど。
言葉、データの蓄積がその本体。蓄積されたデータからどうやって引っ張り出すか表示させるかどんなふうに見せるか、というのが基本の仕組み。タグ付けなんかはまさにそれ。
ホームページは手作業作成
それこそ1ページずつコンセプト、テーマがあって、それに沿って「ページを作る」
SNSやブログとはレイヤーが違うシロモノ。1ページで完結させるし、1ページごとに動線を作って誘導する必要がある。
てな感じで棲み分けていこうと思う。
ホームページは「ページを作る」という意識が、SNSやブログと比べるとちょっとハードルが高いなあ、とも。
ちなみに各URL
・SNS「ため池::ところてん」 https://tokoroten.doncha.net/t2aki
・ブログ「ひまつぶし雑記帖」 https://t2aki.doncha.net
・ホームページ「On Golden Pond」 https://www.doncha.net 
ネットは言葉で溢れかえってるなあというのを埴輪集団の画像で。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」

