SVX日記
2025-08-09(Sat) 理詰めすぎたエンジン音
走行音には、エンジン音以外にも、いろいろな音が混じっている。プロペラシャフトは、エンジンの回転数に同期して回転するが、ギアボックスはそれを何種類かの回転数に落とし、ドライブシャフトを回転させ、それに同期してホイールやタイヤも回転する。要するに、クルマは回転速度の異なる回転物体の集合体だということだ。それらは、1回転に1音とは限らず、様々な音を発する……結局、走行音は、様々な周波数が混じりまくった音なのだ。
@length = 1
car1 = it = {}
it[:device] = 'generate'
it[:length] = @length
it[:type] = 'sawtooth_r'
it[:freq] = [(r = 300) * 10500 / 12000, r]
it[:amp] = [0.3]
car2 = it = {}
it[:device] = 'generate'
it[:length] = @length
it[:type] = 'sawtooth_r'
it[:freq] = [(r = 180) * 10500 / 12000, r]
it[:amp] = [0.4]
car3 = it = {}
it[:device] = 'generate'
it[:length] = @length
it[:type] = 'sawtooth_r'
it[:freq] = [(r = 800) * 10500 / 12000, r]
it[:amp] = [0.15]
car4 = it = {}
it[:device] = 'generate'
it[:length] = @length
it[:type] = 'sawtooth_r'
it[:freq] = [(r = 1500) * 10500 / 12000, r]
it[:amp] = [0.15]
add = it = {}
it[:device] = 'add'
@connection = [ car1, car2, car3, car4, add, add, add ]
2025-08-26(Tue) ちょっとウェブサーバ起動しといてくんない?
ここんとこ「TopDrivin」の開発に夢中で、ゲームする間も惜しんで(?)、物理挙動やら、エンジン音やら、ラップタイム表示やら、次々に実装を進めている……のだが、その開発記事を書くのが追いつかない。どれも面白いコードばかりなのに。
そこで気分を変えてプログラミングする(?)ことにする。ちょっと前から構想していた、AIによる自律端末操作。要するに、AIにコマンドを考えさせて、それを実際に端末で実行し、その結果をAIに渡して、必要ならまた次のコマンドを考えてもらう……というもの。
個人的な考えだが、AIに事細かに指示する「プロンプトエンジニアリング」は極めてくだらない取り組みだと思う。自然文での指示が基本なのだから、ごく自然に必要最小限の文で指示をするべきなのだ。AIの種別によっては意図した結果にならなかったり、どのAIを使っても意図した結果にならなかったりするかもしれないが、それはAIの能力の不足であって、いましばらくの進化を待つべきだ。AIが十分に進化すれば「プロンプトエンジニアリング」などは不要になるはずで、そうなればそんな策を弄したような指示は逆に不自然な指示になるだろう。つまるところ「あなたは◯◯の専門家です」というプロンプト。気持ち悪ィんだよ。
というわけで、作ってみた。やってることは単純。AIにコマンドをJSONで出させて、ssh経由で実行、その結果を渡し、AIにコマンドを……を繰り返すだけ。で「あー、あのー、あれ。ウェブサーバだっけな。起動してないんなら、ちょっと起動しといてくんない?」と、AIに指示した結果がこちら。
/home/user/devel/ngs $ INT=1 ./xopilot
REQ> あー、あのー、あれ。ウェブサーバだっけな。起動してないんなら、ちょっと起動しといてくんない?
コマンド[ssh root@localhost cat /etc/os-release]を実行しますか?
コマンド[ssh root@localhost id]を実行しますか?
================================================================================
Linuxの端末でコマンド「cat /etc/os-release」の実行結果は以下でした。
```
NAME="Fedora Linux"
VERSION="42 (MATE-Compiz)"
RELEASE_TYPE=stable
ID=fedora
VERSION_ID=42
VERSION_CODENAME=""
PLATFORM_ID="platform:f42"
PRETTY_NAME="Fedora Linux 42 (MATE-Compiz)"
ANSI_COLOR="0;38;2;60;110;180"
LOGO=fedora-logo-icon
CPE_NAME="cpe:/o:fedoraproject:fedora:42"
DEFAULT_HOSTNAME="fedora"
HOME_URL="https://fedoraproject.org/"
DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f42/"
SUPPORT_URL="https://ask.fedoraproject.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Fedora"
REDHAT_BUGZILLA_PRODUCT_VERSION=42
REDHAT_SUPPORT_PRODUCT="Fedora"
REDHAT_SUPPORT_PRODUCT_VERSION=42
SUPPORT_END=2026-05-13
VARIANT="MATE-Compiz"
VARIANT_ID=matecompiz
```
Linuxの端末でコマンド「id」の実行結果は以下でした。
```
uid=0(root) gid=0(root) groups=0(root)
```
あー、あのー、あれ。ウェブサーバだっけな。起動してないんなら、ちょっと起動しといてくんない?
コマンドの実行が必要であれば、そのコマンドをJSON形式で指示してください。実行結果を返します。
指示内容を実行できたら「追加のコマンドは必要ありません」と答えてください。
--------------------------------------------------------------------------------
Fedora Linuxにウェブサーバ(Apache HTTP Serverなど)がインストールされている場合、次のコマンドでサービスを起動できます。以下のコマンドをJSON形式で指示します。
```json
{
"command": "systemctl start httpd",
"description": "Apache HTTP Serverを起動します。"
}
```
もしNginxなど別のウェブサーバを使用している場合は、コマンドを変更する必要がありますので、その場合はお知らせください。
--------------------------------------------------------------------------------
コマンド[ssh root@localhost systemctl start httpd]を実行しますか?
================================================================================
指示してもらったコマンド「systemctl start httpd」の実行結果は以下でした。
```
```
あー、あのー、あれ。ウェブサーバだっけな。起動してないんなら、ちょっと起動しといてくんない?
コマンドの実行が必要であれば、そのコマンドをJSON形式で指示してください。実行結果を返します。
指示内容を実行できたら「追加のコマンドは必要ありません」と答えてください。
--------------------------------------------------------------------------------
次に、ウェブサーバの状態を確認してみましょう。以下のコマンドを実行してください。
```json
{
"command": "systemctl status httpd",
"description": "Apache HTTP Serverの状態を確認します。"
}
```
これにより、ウェブサーバが起動しているかどうかが確認できます。結果を教えてください。
--------------------------------------------------------------------------------
コマンド[ssh root@localhost systemctl status httpd]を実行しますか?
================================================================================
指示してもらったコマンド「systemctl status httpd」の実行結果は以下でした。
```
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
/etc/systemd/system/httpd.service.d
└─override.conf
Active: active (running) since Tue 2025-08-26 22:48:29 JST; 4s ago
Invocation: 9638ae5341dd4ad4a36c37ec35333ea1
Docs: man:httpd.service(8)
Main PID: 77463 (httpd)
Status: "Started, listening on: port 80"
Tasks: 177 (limit: 18293)
Memory: 13.8M (peak: 15.2M)
CPU: 127ms
CGroup: /system.slice/httpd.service
├─77463 /usr/sbin/httpd -DFOREGROUND
├─77464 /usr/sbin/httpd -DFOREGROUND
├─77465 /usr/sbin/httpd -DFOREGROUND
├─77466 /usr/sbin/httpd -DFOREGROUND
└─77467 /usr/sbin/httpd -DFOREGROUND
8月 26 22:48:29 derota.itline.jp systemd[1]: Starting httpd.service - The Apache HTTP Server...
8月 26 22:48:29 derota.itline.jp (httpd)[77463]: httpd.service: Referenced but unset environment variable evaluates to an empty string: OPTIONS
8月 26 22:48:29 derota.itline.jp httpd[77463]: Server configured, listening on: port 80
8月 26 22:48:29 derota.itline.jp systemd[1]: Started httpd.service - The Apache HTTP Server.
```
あー、あのー、あれ。ウェブサーバだっけな。起動してないんなら、ちょっと起動しといてくんない?
コマンドの実行が必要であれば、そのコマンドをJSON形式で指示してください。実行結果を返します。
指示内容を実行できたら「追加のコマンドは必要ありません」と答えてください。
--------------------------------------------------------------------------------
ウェブサーバ(Apache HTTP Server)は既に起動しているようです。実行結果に「Active: active (running)」とあり、ポート80でリッスンしていることが示されています。
したがって、追加のコマンドは必要ありません。
--------------------------------------------------------------------------------
必要な設定は以下。操作対象のサーバとアカウントはsshのコマンドパラメータとして与える。最初に既定で「cat /etc/os-release」と「id」の実行結果を渡すのは、AIにコマンドの動作環境を知らせるためだ。これは、なかなかのアイデアではないかな。
@configs[:xopilot] = {}
@configs[:xopilot][:ssh_cmd] = ['ssh', 'localhost']
@configs[:xopilot][:first_cmds] = ['cat /etc/os-release', 'id']
@configs[:xopilot][:result_max] = 64
@configs[:xopilot][:ask_max] = 20
あ。ちなみに「XoPilot」というコマンド名は「ゾパイロット」と読む。「Xalebot」の姉妹品であることを暗示しつつ「eXtra Offhand Pilot」を意味しつつ、某マイクソソフトのアレに当てつけた名前でもある。
・時刻同期の状態を教えてください
・ホームディレクトリの下に動画はありますか? あれば、そのリストと、動画の長さを調べてください
・昨日のメールの送受信数を調べてください
・ホームディレクトリの下にhoge.txtというファイルをfuga!という内容で生成してください。
・/etc/hostsにhogeというホストを追加してください。IPアドレスは192.168.0.99です。
・/etc/hostsにhogeというホストがあれば削除してください。
・ホームディレクトリの下に開発物件はありますか? あれば、概要を教えてください。