HTTP 301

新サーバー移行で実は結構問題があった。
解決までの無駄な過程を書いてもしょーがないので結果だけ。

このブログ (WordPress) の RSS が取得できなくなっていた。
どうやらパーマリンクの設定を変更したのがいけなかったようで。

WordPressでRSS配信がされないのは、head内にRSSのURL指定が正しくされていないのでは? | 便利なデジタル生活

マジでこれだった、archive 付きの URL に変更。
それだけで WordPressのURL/feed/ にて普通に取得できるように戻った。
元に戻しただけで進歩は何も無いんですけどね。

まて、本サイトにて RSS の内容を表示していた所が空っぽのままだ。
RSS に直接アクセスは普通に読み込めるようになったのに何故だ?

既存のソースを殆ど変えずにfile_get_contents()をcURLにする │ Webty Staff Blog

RSS 取得はネットでよく見かけるこのコードを使っていたんですけど。
ローカルで色々試すと HTTP Status 301 が戻っていた。
http://localhost で試すとゼロしか戻らないので PHP コードのみでやって。

PHPのcurlやfile_get_contentsでリダイレクトに対応する方法

解説感謝、そういうことかリダイレクトなのか。
移行前のサーバーでは問題なく取得できていたけど同じじゃないのね。

<?php
// localhost(192.168.***.***) や macOSname.local では読み込まない
if ($hostname == "localhost" or preg_match("/^192/", $hostname) or strpos($hostname, ".local") ) {
    echo "RSS";
} else {
    $url = "https://palepoli.skr.jp/wp/feed/";
    // cURL
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    // HTTP Status 301 対策
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
    $result = curl_exec( $ch );
    $status = curl_getinfo($ch);
    curl_close( $ch );
    if ($status['http_code'] === 200) {
        $rss = simplexml_load_string($result);
        $i = 0;
        foreach ($rss->channel->item as $item) {
            if( $i++ == 5 ) { break; }
            $link = $item->link;
            $title = $item->title;
            $date = date('Y.m.d', strtotime($item->pubDate));
            $desc = $item->description;
            echo <<< __EOS__
<dt><a href="$link" target="_blank">$title</a>&nbsp;($date)</dt>
<dd>$desc</dd>
__EOS__;
        }
    } else {
        echo "<p>HTTP Status " . $status['http_code'] . "</p>";
    }
}
?>

Status 200 (OK) 時のみ表示させるように変更。

やっと表示できるようになった、長かった。
あれこれ試す過程で PHP を 7=>8 にしたのが原因かと疑ったり。
無駄なコードを散々書いたり、ただの勉強不足でした。

しかしコレについて言及している人少ないね。
Wordpress を使っているだけで自前コードの人って少ないんだろうか。

Node.js: ESM

Node.js って令和になってから全然話題にならないよね。
と思っていたら v20 になっていた。

Node.js ? Run JavaScript Everywhere

ちょっとまて、require は import に変わっていたの?
拡張子が mjs みたいなんですけど、これ何だ?

CJS, UMD, ESMとは?その違い。 | milestones

変わったのではなく標準に合わせて拡張したってことみたい。
でもトップページが ESM ってことは今後はこっちを使えなんだろうな。
ちなみに以下のコードを書いた時はたしか v6 だか v8 だったような。

Gjs, JXA, Node.js – Paepoi

標準である import に合わせたのは Gjs だけじゃなかったのね。
JXA は Apple がやる気ゼロだから今後も放置だろうけど。
書き換えしなきゃ、使わないと解っているけど確認のため導入。

node

うん Fedora 29 の dnf も v20 ですね。
とりあえず readline を試してみよう。

Readline | Node.js v21.7.1 Documentation

スイッチを CJS から ESM に切り替えると import のコードに変わる。
モジュール変数は UpperCamelCase 推奨だったけど小文字推奨に変わった?
無名関数ではなく promises を使えなの?とにかく書いてみる。

#!/usr/bin/env node

/** CJS
const readline = require('readline');
const tty = require('tty');

let rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    terminal: false
});
let [prpt, prefix] = tty.isatty(0) ? ['何か入力して return :', '端末入力'] : ['', 'パイプ'];
rl.question(prpt, (line)=> {
    console.log(`${prefix}から ${line} が渡されました`);
    rl.close();
});
*/
// ESM (extention as 'mjs')
import * as readline from 'node:readline/promises';
import * as tty from 'node:tty';
import { stdin as input, stdout as output } from 'node:process';

let rl = readline.createInterface({ input, output, terminal:false });

let [prpt, prefix] = tty.isatty(0) ? ['何か入力して return :', '端末入力'] : ['', 'パイプ'];

let line = await rl.question(prpt);
console.log(`${prefix}から ${line} が渡されました`);
rl.close();

test.mjs

拡張子は mjs にしないと動かなかった。
Gjs は -m オプションだけど合わせてくるかな。
シバンを書いても問題なく動作しますね。

node

ぶっちゃけ ESM でも process は import せず使えるし無名関数でも動く。
とはいえ公式サンプルががこうなので今後はこうさせたいのだろうと思う。
promises を使うと上級者って感じでかっこいい、ような気がする。
もう少し調べて四月までに tips ページは書き換えよう。

さくらインターネットサーバー移行ツール

さくらインターネットからサーバー移行ツールの案内が。
FreeBSD が 11.2 から FreeBSD 13 へ、HDD から SSD になる。
先週メールが届いていたんだけどそろそろやろうかと。
筆者のように自前設置の WordPress でも全自動で移行できるらしい。
移行完了までアクセス不能らしいけど夜中にやれば別にいいか。

num

思っていたより容量使っていた、事実上写真ブログ化しているし。
とはいえ 300GB まで使えるからまだまだ余裕あるな。
午前一時くらいに移行開始、おやすみなさい。

起きたら午前三時くらいに移行完了とメールが届いていた。
サイトもブログも問題なく表示できている、うん。
本当に自前設置の WordPress でも普通に移行できた。

SFTP の設定を変更しないといけないのでコンパネへ。
398 番サーバーから 2108 番サーバーへ移行だったようだ。
どこに割り当てかは決められないので移行後にコンパネで確認。

login

Nautilus から SFTP でログイン、久々に見たな。
Linux は GVFS で普通のファイルのように使えるから便利だよね。
サーバーや macOS を持っていないのに Linux 使うバカはいないよね。
てかスゲェアクセスが早くなった、流石 SSD だね。

ところでついでなのでこのブログの URL ですが。
本日より日付と投稿名から数値ベースに移行します。
いや日付と投稿名でもアクセスできますが新規リンクから。
だって今まで通りだと日本語タイトルをつけ辛いんだもん。

macOS Python3 Upgrade

macOS に入れた Python3 がいまだに 3.10 のままだった。
Fedora みたいに実用にはさほど使っていないしそんなもんだ。
まあ 3.12 にアップグレードしておこう。

Python Release Python 3.12.2 | Python.org

macOS 用はユニバーサルバイナリのみになったのね。
brew だかを使えばもっと簡単アップグレードなんだろうけど。
それ以外に使い道がないアプリをわざわざ入れるのもなぁ。
てか php を macOS に入れたい人専用だよね。

とにかく pkg を展開して上書きインストール。

open /Library/Frameworks/Python.framework/Versions

dir

古いパッケージは消してくれないんかい。
手動で削除、認証が必要だった。

zprofile

$HOME/.zprofile もパス通しが残っている。
自分で消す、令和の macOS なのに何もかも手動だなぁ。

pipのアップデート方法メモ(pip3コマンドは古いので使っちゃダメ)2023/2/10 – min117の日記

しらない間に pip がこんなことになっている。
今は pip を別個でアップグレードする必要がないんだね。

python3 -m pip install pillow
python3 -m pip install pyobjc

3.12 は別ディレクトリなので新たに入れ直す。
これ以外に何か使っていたっけ?まあ必要時に。

多分これでアップグレードは完了だけど一つだけ。
Fedora は python コマンドに 3 を付ける必要がもう無いんだよ。
macOS ではいまだに python3 と打つ必要があるのが違和感。

alias python=python3

$HOME/.zshrc にコレ定義しちゃえ!
たった 1 文字だけどなんかスッキリした。

Umejiro 2024

毎年恒例、本日は小牧山でウメジロー。
OM-1 なので鳥認識で連写という超イージーモードで。

umejiro

前枝問題も連写してりゃどれかが当たる、II 型いらないぜ。
そもそも去年までは一点 AF だけでやってきたんだい。

umejiro

ウメジローなので梅の花も綺麗に撮れたのを選んで。
メジロを順光にすると花が逆光になったりで結構ムズい。

umejiro

とはいえメジロへピント合わせはカメラがやってくれる。
後は連写して良さげなのを選ぶだけ、簡単でした。

ume

同じ位置から 9mm でパシャリ、画角差トンデモネェな。
この木に 30 匹くらいのメジロが群がっていました。

ume

パナライカ 9mm はレンズが当たるくらい寄れるので接写。
二線ボケ酷いな、使い方が違うとはいえダメだこりゃ。

しかしサブ機が G99 だとカメラバッグが重い。
E-M5 より少し重いだけなのに何故か肩にズッシリくる。
グリップのデカさによる重量配分のせいだろうか。
S5II + 150-600 をマジで検討していたけどヤメにしよう。
メイン機だけであの重量なんて筆者の撮影スタイル的に無理。