投稿

PDFの1ページ目を画像で一括出力

 PPDFの1ページ目をJPEG画像で一括出力したときの覚書。 Gemini 3 Flash Previewと対話 環境: FreeBSD 14.3-RELEASE-p8 avifencのバージョン確認。 # avifenc --version Version: 1.3.0 (dav1d [dec]:1.5.3, aom [enc/dec]:3.13.1) libyuv : available (1903) 1. AVIF変換が失敗する PDFを開いて画像出力してAVIF変換してみたら下記エラー。 # find . -name "*.jpg" -print0 | xargs -0 -I {} sh -c 'f="{}"; avifenc -q 40 -s 4 -y 420 "$f" ${f%.*}.avif"' Unsupported color conversion request Cannot read input file: ./202307.jpg ImageMagfick(7.1.2-16)をインストールしてAVIF変換してみたら、その画像がWindows 11の画像アプリでは見れるけど、Chromeブラウザで閲覧できない謎現象。 2. PDFから一括で画像出力 問題はJPEG画像にありそうなので、ツールでPDFから画像出力してみる。 pdftoppmコマンドで出来るそうなのでインストール。 # pkg install poppler-utils 試しに変換。 「-f 1」: 開始ページ 「-l 1」: 終了ページ # pdftoppm -f 1 -l 1 -jpeg "202307.pdf" "202307" avifencでavif画像変換。 # avifenc -q 40 -s 4 -y 420 202307.jpg 202307.avif Chromeブラウザでも表示できたので一括変換。 PDFから1ページ目だけJPEG画像出力。 # find . -name "*.pdf" -print0 | xargs -0 -I {} sh -c 'f="{}"; pdftoppm -f...

ウェブサイト(ホームページ)を一括スクリーンショットして保存

ウェブサイトをリニューアル前に旧サイトを保存しておく方法を調査。 Gemini 3.1 Pro Previewと対話。 環境: Windows 11, GNU Wget2 2.2.1 wgetで保存 Scoop経由でインストールしたwget2をまず試す。 PS:> cd D:\Downloads PS:> wget2 --mirror --convert-links --adjust-extension --page-requisites --no-parent --output-file="download_log.txt" "https://www.hoge.com/" Cyotek WebCopy wget2でレイアウトが崩れる場合は、「Cyotek WebCopy」を試す。 参考:  Cyotek WebCopy - Copy websites locally for offline browsing • Cyotek スクリーンショットを手動で取得 ブラウザの標準機能を使う。 Chrome: DevToolsで「Capture full size screenshot」。 Firefox: 右クリックで「スクリーンショットを撮影」。 もう少ししたら自律型AIエージェントで出来るようになる気がする。

wp-cliで登録されたcronジョブを一覧表示

WordPressのcronジョブに関して調査しているときの覚書。 Gemini 3.1 Flash Liteと対話。 環境: PHP 8.3.29, WordPress 6.9.1 wp cronコマンド一覧 現在予約されているタスク(cronイベント)を表示。 $ wp cron event list 即時実行(詰まっているタスクの消化)。 $ wp cron event run --due-now 特定のフックだけを指定して実行(実行予定時刻が過ぎている場合のみ)。 $ wp cron event run (フック名) 特定のフックだけを指定して実行(実行予定時刻に関係なく今すぐ実行)。 $ wp cron hook run (フック名) 実行スケジュールの削除。 $ wp cron event delete (フック名) ▼ 関連記事 WP-CLIのwp core updateがobject-cache.phpを置くと出来なくなる WP-CLIをInstallしてWordPressのVersion管理

WP-CLIのwp core updateがobject-cache.phpを置くと出来なくなる

WordPressのWP-CLIを使ってwp core updateをしても更新しなくなったので調査したときの覚書。 Gemini 3.1 Pro Previewと対話。 環境: FreeBSD 14.3-RELEASE-p8, php 8.3.29 wp-cliのバージョン確認。 # wp cli version WP-CLI 2.12.0 1. object-cache.phpがあると失敗する理由 WP-CLI環境ではAPCuキャッシュが使えないため、せっかく取得した最新のアップデート情報がなってしまう。 wp core updateしたときの挙動 WP-CLIが起動すると、object-cache.php が存在するため、WordPressは「アップデート情報をデータベースではなく、APCu(APC User Cache)に保存するモード」に切り替わる。 WP-CLIが WordPress.org のAPIに問い合わせて「新バージョンがある」という情報を取得。 取得した情報をAPCuに保存しようとするが、CLI環境のAPCuは無効化されているため、コマンド終了と同時にメモリごと消滅。 結果として、「新バージョンがある」という情報がDBにも保存されず、メモリ上からも消え去るため、何度 wp core update を実行しても「アップデート情報がない=すでに最新版である」と誤認し続けてしまう。 2.開発環境ではCLI環境でもAPCuは有効化 object-cache.phpが存在すれば、WordPressはAPCuモードになるため、設定で対応する。 iniファイル確認。 # php --ini Configuration File (php.ini) Path: /usr/local/etc Loaded Configuration File:         /usr/local/etc/php.ini Scan for additional .ini files in: /usr/local/etc/php Additional .ini files parsed:      /usr/local/etc/php/ext-10-opcache...

プログラミング言語Rustとは?

PythonやPhpよりRustでバッチ処理を作った方が圧倒的に早いので、ちゃんと学ぼうとしているときの覚書。 Gemini 3 Pro Previewと対話。 1. プログラミング言語Rustとは? 一言で言えば、 C/C++と同等のパフォーマンス を持ちながら、コンパイル時に メモリ安全性を保証 するシステムプログラミング言語。 「最も愛されるプログラミング言語」で長年1位を獲得し続けている。 参考:  Rust (プログラミング言語) - Wikipedia 2006年:Mozillaで開発がスタート。 2015年:安定版となるRust 1.0がリリース。 2022年:Linux Kernel 6.1 にて、C言語に次ぐ「第2の公式言語」としてRustがマージ。 2025年:Microsoftは2030年までに自社の主要コードベースからCおよびC++を全面的に排除し、Rustへ移行する長期方針。 2. Rustの技術的特徴 ① 所有権システム(Ownership & Borrowing) ルール : 値には必ず「所有者(変数)」が1つだけ存在する。 所有者がスコープを抜けると値は破棄(ドロップ)される。 借用(Borrowing) : 参照渡しのような機能。 「不変の参照は複数作れる」が、「可変の参照は同時に1つしか作れない」というルール(RWLockのような概念)をコンパイル時に強制する。 効果 : これにより、GCなしでのメモリ解放を実現し、さらにデータ競合(Data Race)をコンパイルエラーとして検出する。 例えると、メモリ上のデータは「1冊の貴重な本」。 プログラミング言語の世界(C++やJavaなど)では、この本をコピーしたり、みんなで同時に書き込んだりできるが、Rustの世界は物理法則に忠実。 所有権(Ownership)と ムーブ(Move) : 本を持てるのは、常に世界でたった一人だけ。 最後に本を持っていた人が責任を持って捨てる(メモリを解放)。 借用(Borrowing) : 見るだけなら、何人でも同時に貸していい。 貸している間、所有者も本を捨てたり書き換えたりできない(読んでいる人が困るから)。 可変の借用(Mutable Borrowing) : 書き込みたいなら、貸せるのは「たった一人」だけ。...

FreeBSD14でRustのビルド環境を整える

Rustのビルド環境を構築しているときの覚書。 Gemini 3 Pro Previewと対話。 環境: FreeBSD 14.3-RELEASE-p8 arm64 1. Rustをインストール ARM64の環境ではrustupは提供されていない。 pkg経由で検索。 # pkg search rust Rust開発支援ツール rust-analyzer: Rust言語用の「言語サーバー(LSP)」。 rust-mode: テキストエディタ Emacs 用のプラグイン。 rust-script: Rustのコードを、PythonやShellスクリプトのように「コンパイル手順なしで」実行できるようにするツール。 C言語連携ツール(高度な開発用) rust-bindgen-cli: C言語(および一部C++)のヘッダーファイル(.h)を読み込み、Rustから呼び出せるようにするためのバインディングコード(ラッパー)を自動生成するツール rust-cbindgen: 上記とは逆で、RustのコードからC言語用のヘッダーファイル(.h)を生成するツール ユーティリティ(Rust製コマンド) rust-coreutils: GNU coreutils(ls, cp, mv, cat など)をRust言語で書き直すプロジェクト(uutils)の成果物。通常はインストール不要。 rust-findutils: GNU findutils(find, xargs, locate)をRust言語で書き直したもの。通常はインストール不要。 ビルドするだけなので、rustだけインストール。 # pkg install rust 確認。 # rustc --version rustc 1.92.0 (ded5c06cf 2025-12-08) (built from a source tarball) # cargo --version cargo 1.92.0 (344c4567c 2025-10-21) (built from a source tarball) 2.Rustツールの解説 コンパイラ・基本ツール rustc: Rustコンパイラ本体。 通常は cargo build や c...

またSpamhausのCSSブロックリストに登録された(IPv6)

またSpamhausのCSSブロックリストに登録されてサーバーからメール送信できなくなったので調査したときの覚書。 Gemini 3 Pro Previewと対話。 環境: FreeBSD 14.3-RELEASE-p7 amd64, Postfix 3.10.6 Postfixのバージョン確認。 # postconf mail_version 1. 送信メールがブロックされた理由 maillogを確認。 # less /var/log/maillog jp.mail.protection.outlook.com[2a01:...::] said: 550 5.7.1 Service unavailable, Client host [2400:...:135] blocked using Spamhaus. To request removal from this list see https://www.spamhaus.org/query/ip/2400:...:135 AS(1440) [OS3PEPF0000003E.JPNP286.PROD.OUTLOOK.COM 2026-01-31T20:00:10.242Z 08DE60A93EBF9B50] (in reply to RCPT TO command)) maillogのURLにアクセスすると下記メッセージ。 CSS Blocklist - Why is this IP address listed? Your IP address is either exhibiting suspect behavior, is misconfigured, or has a poor sending reputation. As a result, this IP is listed in the CSS Blocklist (CSS) Click on More Info to see if you can request a delisting from this blocklist. This will also display any further information we have relating to this listing. Less Info Why is 2400:...

Windows11の環境にRustをScoop経由でインストール

バッチ処理が遅いのでRustだったら早くなるかなと試した時の覚書。 Gemini 3 Pro Previewと対話。 環境: Windows 11 Pro 25H2, rustup 1.28.2 1. Scoopで検索してインストール Scoopで検索してみる。 PS:> scoop search rust それぞれの解説 rustup: Rustのインストーラー兼バージョン管理ツール。nodejsでいうところのnvm。 rustup-msvc / rustup-gnu: rustupの内部で使われるABI(Application Binary Interface)の違い。基本的には無印のrustupを選べばOK。 rust: コンパイラ単体 rust-msvc / rust-gnu: 上記のMSVC版(Microsoft Visual C++互換)とGNU版(MinGW互換)。 rust-analyzer: エディタ(VS Codeなど)でコード補完やエラー表示をするための裏方ツール。 rustupをインストール。 PS:> scoop install rustup Notes ----- This package defaults to using the MSVC toolchain in new installs; use "rustup set default-host" to configure it (existing installs may be using the GNU toolchain by default) According to https://doc.rust-lang.org/book/ch01-01-installation.html#installing-rustup-on-windows Microsoft C++ Build Tools is needed and can be downloaded here: https://visualstudio.microsoft.com/visual-cpp-build-tools/ When installing build tools, these two components should be selected:...

SSL証明書はSAN拡張で「wwwあり/なし」を1つの証明書を取得できる

今更ながらSSL証明書を取得するときにwwwあり・なしを1つの証明書(ワイルドカード証明書ではない)で取得できることを知った時の覚書。 環境: CentOS Stream 10,  nginx 1.28.0, certbot 4.2.0 1. SAN証明書(Subject Alternative Name certificate)とは? 昔はマルチドメインと呼んでいたSSL証明書の機能。 昔のSSL証明書は「1つのドメインにつき1つのコモンネーム」が基本だったが、現在は1枚の証明書で複数のドメインをカバーするのが一般的。 Google Chrome バージョン58(2017年3月リリース)では、「コモンネーム(CN)を無視し、SANの記述のみを評価する」という仕様変更を行った。 これにより、現在のすべてのSSL証明書はSANに対応していることが必須となった。 2017年までは各ブラウザが「SANがなければコモンネーム(CN) を見る」という順序で確認していた。 参考:  Public key certificate - Wikipedia Let's Encryptはサービス開始当初(2015年)から対応。 SSL証明書の規格(X.509 v3)自体が1999年頃に策定されており、OSやブラウザはそれに追随してかなり早い段階で対応していた。 つまり筆者がSANを知らなかったのは単なる勉強不足。 昔はマルチドメイン証明書は高額な追加費用で買っていた。 2. certbotの疎通確認(HTTP認証) 例えば「hoge.com」と「www.hoge.com」のSSL証明書を取得する場合、certbotは次のアドレスへアクセスし、両方のドメインが載った証明書を発行する。 http://hoge.com/.well-known/acme-challenge/トークンA http://www.hoge.com/.well-known/acme-challenge/トークンB 3. 既存のSSL証明書を切り替える ドメインのDNS設定で、wwwが名前解決できるか確認しておく。 Nginxの設定でserver_nameを server_name  .hoge.com; のように変更しておく。 Windowsからアクセス確認。 PS:>...

MariaDB serverを10.11から11.8にアップグレード

MariaDB serverをアップグレードしたときの覚書。 Gemini 3 Pro Previewと対話。 環境: FreeBSD 14.3-RELEASE-p7 1. MariaDB 10系と11系の違い 主にWordPressを複数運用するウェブサーバー向けにGemini先生にまとめてもらった。 オプティマイザ(頭脳)の刷新 : 11系ではSQLの実行計画を決めるロジックが「コストベース」に完全刷新されており、複雑な商品検索(WooCommerce等)が高速化する可能性がある反面、統計情報が古いと単純なクエリでインデックスを使わなくなるなどの「判断ミス」による急激な速度低下リスクが高まっている。 書き込み性能の向上: 11系は内部的なログ処理(Redo Log)が改善されており、複数のWordPressサイトから同時にアクセスや記事更新が発生するような高負荷時のディスクI/O効率が良く、書き込み待ちが起きにくくなっている。 サポート期間と安定性: 10.11は「旧設計の完成形」として2028年2月までサポートされる最も枯れた安定版(LTS)ですが、11系は新設計のため挙動が異なり、現在のLTSは11.4となっている(11.8は将来のバージョン)。 古いプラグインの互換性リスク: 11系では古いMySQL時代から残っていた非推奨機能や曖昧な設定が削除されているため、長年更新されていない古いWordPressプラグインがエラーを起こして動作しなくなる可能性が10系より高い。 JSON処理の高速化: 最近のWordPressプラグインやブロックエディタが多用する「JSON形式」のデータ処理能力が11系で強化されており、関連する処理が軽くなる傾向がある。 統計情報管理の厳格化: 11系の新オプティマイザはデータの「統計情報(件数や分布)」に非常に敏感なため、アップグレード後や記事大量追加後に ANALYZE TABLE を実行して情報を最新に保たないと、10系よりもパフォーマンスが劣化しやすくなる。 メンテナンス性の向上: 11系はテーブル構造の変更(Instant DDL)機能が強化されており、巨大なテーブルへのカラム追加などを、サービスを停止させずに瞬時に行える範囲が広がっている。 リソース効率: 11系の方がメモリ管理や一時テーブルの扱いが効率...