投稿

pkg: sqlite error while executing grmbl in file update.c:154: NOT NULL constraint failed: packages.path

pkg updateで突然下記エラーが出るようになったときの覚書。 Gemini 3 Pro Previewと対話。 環境: FreeBSD 14.3-RELEASE-p7 arm64 (Mac mini上のVMware Fusion仮想マシン) 1. pkgエラー発生 エラーの内容。 # pkg update Updating FreeBSD repository catalogue... Fetching meta.conf: 100%    179 B   0.2kB/s    00:01 Fetching data.pkg: 100%   10 MiB  10.4MB/s    00:01 Processing entries:  99% pkg: sqlite error while executing grmbl in file update.c:154: NOT NULL constraint failed: packages.path pkg: sqlite error while executing grmbl in file update.c:154: NOT NULL constraint failed: packages.path pkg: sqlite error while executing INSERT OR REPLACE INTO packages (origin, name, version, comment, desc, arch, maintainer, www, prefix, pkgsize, flatsize, licenselogic, cksum, path, manifestdigest, olddigest, vital)VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17) in file update.c:158: not an error Processing entries:  99% Unable to update repository Fre...

PHPのCacheToolをインストール

AIにサーバー稼働状況を分析レポートとして報告させるバッチを作成しているときの覚書。 Gemini 3 Pro Previewと対話。 環境: FreeBSD 14.3-RELEASE-p7, PHP 8.3.23, CacheTool 10.0.0 PHP OPcacheの統計情報を下記コマンドで取得できるかと思ったけど、PHP-FPMで実行されるOPcache統計情報ではなくPHP CLIのOPcache統計情報だった。 # php -r 'print_r(opcache_get_status(false));' 2>/dev/null ちゃんとPHP-FPM経由で「opcache_get_status」を実行させる必要がある。 opcache-guiをインストール済み。 これをcurlコマンドで読み取っていいと思う。 参考:  amnuts/opcache-gui: A clean, effective and responsive interface for Zend OPcache CacheToolというツールをGemini先生にお勧めされたのでインストールしてみた。 1. CacheToolをインストール Phar 拡張モジュールをインストール。 # pkg search phar # pkg install php83-phar 公式ドキュメントの通りにインストール。 参考:  CacheTool - Manage cache in the CLI | cachetool # curl -sLO https://github.com/gordalina/cachetool/releases/latest/download/cachetool.phar # chmod +x cachetool.phar /usr/local/bin に移動しつつ、名前を 'cachetool' に変更。 # mv cachetool.phar /usr/local/bin/cachetool 確認。 # cachetool --version CacheTool 10.0.0 2. OPcache統計情報を取得 コマンドリストを表示。 # cachetoo...

PHP APCuをインストールしてWordPressのobject-cache.phpを配置

PHPのAPC, APCu, OPcacheに関しての知識を整理したときの覚書。 Gemini 3 Pro Previewと対話 環境: FreeBSD , PHP 8.3.26, WordPress 6.9.0 1. APCuとは? APCu は、PHPで動くインメモリの key-value ストア。 APCu(APC User Cache) は APC(Alternative PHP Cache)からOPcach機能を除いたもの。 参考:  PHP: はじめに - Manual APCからAPCuになるまでの経緯 PHP 4.x 〜 PHP 5.4: APCがOpcode Cache(コードのキャッシュ)とUser Cache(データのキャッシュ)の両方の機能を担う。 PHP 5.5: 2013年にコードのキャッシュ(Opcode Cache)はPHP本体に標準で組み込まれる。 PHP 5.5以降 : APCから不要になったOpcode Cache機能を削除し、User Cache機能(データ保存)だけを切り出して軽量化・最新化したAPCuへ。 サーバーをクラスター構成で運用している場合は、ValkeyやRedisを利用する。 ValkeyやRedisを使うよりAPCuの方が通信のオーバーヘッドがないので圧倒的に高速。 2. APCuとWordPressの関係 WP_Object_CacheとWP Transients APIの関係。 WP_Object_Cache: ページ生成中の一時的なデータ保持。 スレッドメモリに保存しページ表示後に破棄される。 APCuを導入すると共有メモリに保存しページ表示後に破棄されず再利用可能。 WP Transients API: 有効期限がある長期間のデータ保持。 データベース(wp_options)に保存。 APCuを導入するとWP_Object_Cache経由でデータ取得保存するようになる。 object-cache.phpはWP_Object_Cacheクラスを上書きして、データを保存する際にapcu_*関数を使って共有メモリに保存する。 WordPressはwp-includes/load.php:wp_start_object_cache()でobject-cache....

One-Hot エンコーディング/疎行列/コサイン類似度/協調フィルタリング/共起

病院施設基準のデータ分析をGemini先生と対話している中で分からない単語を調べているときの覚書。 Gemini 3 Pro Previewと対話。 機械学習(特にレコメンデーションシステム)の基礎。 One-Hot エンコーディング データベース上の「回復期リハビリテーション」といった文字列のままでは、数学的な計算(類似度の判定など)ができない。 そこで、病院を「行」、施設基準を「列」とする巨大な表を作り、持っている場所に「1」、持っていない場所に「0」を立てる。 これで数学の問題として計算できるようになる(ベクトル化ともいう)。 参考:  カテゴリデータ: 語彙とワンホット エンコーディング  |  Machine Learning  |  Google for Developers 参考:  One-hot - Wikipedia 疎行列(sparse array) 疎行列(スパース行列/sparse array)とは、要素のほとんどがゼロで構成される行列。 One-Hot エンコーディングを行うと「0」ばかりの巨大な行列になる。 「0」をすべてメモリに乗せるのは無駄なので、「どこに『1』があるか(行番号, 列番号)」だけを記録する形式をCSR形式(Compressed Row Storage)と呼ぶ。 参考:  疎行列 - Wikipedia コサイン類似度(Cosine Similarity) 2つのベクトル(矢印)が、どれくらい同じ方向を向いているかを測る指標。 まったく同じ方向を向いているときに最大値1になるのでコサイン(cos)を使う。 サイン(sin)とタンジェント(tan)は0になる。 参考:  コサイン類似度 - Wikipedia ちなみにサインは(sin)は「どれくらい離れているか(距離)」。 タンジェント(tan)は傾き を計算するときに使う。 協調フィルタリング(Collaborative Filtering) 「あなたと似た人は、これも持っています」という推薦アルゴリズム。 Amazonの「この商品を買った人はこんなものも買っています」や動画サイトの「おすすめ」機能などで広く使われている。 あるユーザと嗜好の類似した他のユーザの情報を用いて自動的に推論を行う...

AIでサーバーの稼働状況分析レポート

サーバーのパフォーマンス情報をAIに与えて、稼働状況レポートをCronでメール報告させようとしたときの覚書。 Gemini 3 Pro Previewと対話。 環境: FreeBSD 14.3-RELEASE-p7 このサーバーは主にWordPressウェブサーバー。 1. サーバー情報の収集 収集するサーバーのシステム情報一覧 systat(パフォーマンス統計情報) 参考:  FreeBSDのsystatとcollectdでリソース情報を取得 collectdで収集した情報 参考:  FreeBSD14 + collectd + RRDtoolをportsからビルドしてインストール Nginx VTS (Virtual Host Traffic Status) 参考:  NginxのVTSモジュール でパフォーマンス分析(Netdataのインストールは失敗) OPcache GUIの情報 参考:  FreeBSD14 + PHP8.3 + OPcache ファイヤーウォール(pfとfail2ban)のログ情報 参考:  FreeBSD14 + Nginx + fail2banで不正なアクセスを自動ブロック MariaDBのパフォーマンスViewとslow_log 参考:  MariaDB Serverのチューニング設定(2025年8月版) PHPのエラーログとphp-fpm-slow.log 参考:  FreeBSD14 + Nginx + PHP8.3 + WordPress 6.8.2で起きた原因不明のPHPエラー /var/log/maillogと/var/log/messages 2. Cronジョブ生成 Gemini先生と対話してシェルスクリプトを生成。 必要なツールをインストール。 jqはJSONのコマンドライン処理ツール(デフォルトでインストール済みだった)。 # pkg install bash curl jq Gemini先生へ渡した初期プロンプト 生成AIにサーバーの稼働状況の情報を与えて、分析レポートをCronで毎日報告させるバッチを考えています。 収集するサーバー情報が増えてもメンテナンスしやすいシェルスクリプトを教えてください。 環境: FreeBSD...

MariaDB Serverのslow_log設定

slow_logを見てみたら300万行あったので設定を見直したときの覚書。 Gemini 3 Pro Previewと対話。 環境: FreeBSD 14.3-RELEASE-p7, MariaDB Server  10.11.14 1. slow_log設定 現在のslow_log設定。 # less /usr/local/etc/mysql/conf.d/server.cnf # Slow Query Log slow_query_log                = ON long_query_time               = 3 log_output                    = TABLE # インデックス未使用のクエリをログに記録し、ボトルネックを特定しやすくする log_queries_not_using_indexes = ON # 指定した行数以上の行をスキャンしたクエリのみをログに記録する min_examined_row_limit        = 5000 log_queries_not_using_indexesはWordPressを利用しているとインデックスを使わない軽量なクエリが大量に発生するためOFFにする。 min_examined_row_limitもコメントアウト。 # less /usr/local/etc/mysql/conf.d/server.cnf # Slow Query Log slow_query_log                = ON long_query_time               = 1 log_output          ...

短縮URL「shlink」を3.5.1から4.6.0にアップデート

独自ドメインで短縮URLを生成できるオープンソースshlinkをアップデートしたときの覚書。 Gemini 3 Pro Previewと対話。 環境: CentOS Stream 10, PHP 8.3.26, shlink 3.5.1 -> 4.6.0 shlinkの現在のバージョンを確認。 # /home/httpd/shlink/bin # ./cli -V Shlink 3.5.1 shlinkのQRコード機能は4.5.0から非推奨。 参考:  Shlink — The URL shortener — Documentation v4系からは条件に応じて飛び先を変える機能が実装。 デバイス別リダイレクト: iPhoneならApp Storeへ、AndroidならGoogle Playへ、PCならWebサイトへ、といった振り分けが可能。 言語別リダイレクト: ブラウザの言語設定(日本語、英語など)に応じて、表示するページを切り替え可能。 クエリパラメータ転送: 短縮URLの後ろにつけたパラメータ(?utm_source=twitterなど)を、飛び先URLに引き継ぐかどうかの制御が柔軟。 1.shlinkアップグレード 公式サイト通りにアップデートする。 念のためデータベースのバックアップを取っておく。 参考:  Shlink — The URL shortener — Documentation shlinkディレクトリをリネイムして最新のソースコードを設置。 参考:  Releases · shlinkio/shlink distでないとvendorディレクトリが含まれていないので注意。 # cd /home/httpd/ # mv shlink/ shlink-old # curl -LO https://github.com/shlinkio/shlink/releases/download/v4.6.0/shlink4.6.0_php8.3_dist.zip 解凍後のディレクトリ構成を確認して解凍。 # unzip -l shlink4.6.0_php8.3_dist.zip # unzip shlink4.6.0_php8.3_dist.zip リネイムしてdataディレク...

セミナー時にリアルタイムでコメントを見える化するシステムをAIで作る

イメージ
セミナーイベントを企画しているときに「講師への質問などをリアルタイムで表示するシステムがあったら面白い」という意見があったときの覚書。 Gemini 3.0 Pro Previewと対話。 1.商用サービス調査 商用サービスはプレゼン資料と同じディスプレイに出したりと高機能。 Slido-イベントの参加者との意思疎通を活性化 /無料100人まで LiveQ - リアルタイムアンケートやQ&A機能で授業やセミナーを盛り上げる /無料100人まで リアルタイムに参加者の声を可視化 ライブアンケートツール イマキク - イマキク /無料50人まで 2.無料で自作する Google FormとGoogle Sheetsを利用すれば無料で作れそうだと思い、実際に作ってみた。 ほぼGemini先生が作っている。 最初はエラーがあったけど対話しながらブラッシュアップした。 セミナー会場での運用 講師のプレゼン資料のディスプレイとは別のディスプレイに表示。 会場ではQRコードを配布。 最初の案内で説明とテスト送信してもらう。 スクリーンショット 機能一覧 文字を入力し送信すると一覧に表示(上限:140文字)。 3秒ごとに自動更新。 データはGoogle Sheetsに保存。 匿名で誰でも投稿可能。 作成手順 Google Formを新規作成し、質問を1つ(例:「コメント」)だけ作成。 「回答」タブから「スプレッドシートにリンク」をクリックし、回答用のスプレッドシートを作成。 作成されたスプレッドシートを開き、メニューの 「拡張機能」 > 「Apps Script」 をクリック。 コードエディタが開くので、もともと入っているコードを消して、サーバー用コード.gsを記述。 コード.gs:  Gist 「ファイル」の横の「+」アイコン > 「HTML」を選択し、ファイル名を Index。 Index.html:  Gist Apps Script画面右上の 「デプロイ」 > 「新しいデプロイ」 「種類の選択」の歯車アイコン > 「ウェブアプリ」  設定:次のユーザーとして実行:自分 設定:アクセスできるユーザー:全員 「デプロイ」ボタンをクリック。 初回は「安全ではないページ(詳細)」→「(スクリプト名)に移動」をクリックして許...

WindowsのコマンドラインでGoogle Cloud Strageにアップロード

年末のバックアップ処理でGoogle Cloud Storageにブラウザでアップロードしたら失敗したので、コマンドラインでやってみたときの覚書。 Gemini 3 Pro Previewと対話。 環境: Windows 11, Google Cloud SDK 550.0.0 1. ファイルをアップロード Google Cloud SDKのバージョン確認。 PS> gcloud version ログインする。 PS> gcloud auth login 生成されたURLをブラウザに貼り付けて認証。 プロジェクトIDを設定。 PS> gcloud config set project hoge-backup バケット内の一覧を表示。 PS> gcloud storage ls gs://svn-backup.hoge.jp/20251221/ 移動してアップロード。 PS> cd D:\Downloads PS> ls PS> gcloud storage cp .\repo-hoge_20251217.tgz gs://svn-backup.hoge.jp/20251221/ 確認。 PS> gcloud storage ls gs://svn-backup.hoge.jp/20251221/ ファイルサイズが大きいほど、gcloud storage コマンドの方が圧倒的に速く、かつ安全らしい。 またgcloud storage コマンドは失敗しても途中から再開できる。 (ブラウザの場合は最初からやり直し) Gemini先生に作ってもらったワンラインコマンド。 (開始時間/終了時間/所要時間を表示) PS> $s = Get-Date; Write-Host "開始: $s"; gcloud storage cp .\repo-hoge_20251217.tgz gs://svn-backup.hoge.jp/20251221/; $e = Get-Date; Write-Host "終了: $e"; Write-Host "所要時間: $($e - $s)" 2.ストレージクラスの確認 アップロードする際に下記メッセージが表示される...

XServer VPSにCentOS Stream 10 + MariaDB + Nginx + PHP + Postfixを設定(2025年版)

XServer VPSを試したときの覚書。 Gemini 3 Pro Previewと対話。 環境: CentOS Stream 10 1.初期設定 VNSコンソールを起動する。 日本語キーボードになっているので英語配列に変更。 確認してus配列を読み込む。 # localectl status # localectl list-keymaps # loadkeys us コンソールの設定ファイルを変更。 XKB* 変数は Xorg/キーボード設定用なので無視してOK。 # less /etc/vconsole.conf KEYMAP=us YUMアップデートして、ホスト名変更。 # dnf update # hostnamectl set-hostname xserver01.hoge.jp # hostnamectl status Location確認。 # timedatectl status IPアドレスとネットワークインターフェースを確認。 # ip a SSHの設定の確認。 # less /etc/ssh/sshd_config VPSパネルでパケットフィルタを設定。 SSH, WEBを追加する。 Windows TerminalからSSHでログインできるか確認。 SELinuxを確認して無効化する。 # getenforce # less /etc/selinux/config SELINUX=disabled 再起動 # reboot どんなサービスが起動しているか確認。 # systemctl list-unit-files -t service Gemini先生に聞いて、不要なサービスを停止する。 「cloud-*」はVPS環境では必須らしい。  bluetooth.service: Bluetooth機器用。 smartd.service: HDD/SSDの物理的健康状態(S.M.A.R.T)を監視。 udisks2.service: 外付けディスクやUSBメモリなどを自動マウント・管理するためのデーモン(主にデスクトップ環境向け)。 multipathd.service: 複数の経路でストレージに接続する冗長化構成(SANなど)用。 libstoragemgmt.s...