SVX日記
2004-08-26(Thu) シリアル通信……停止中
こーゆー日記で、毎日チョコチョコと作業報告なんぞを書いていると、いわゆる「工作作業日報」や「プログラミング実況中継」みたいな感じになってくる。まぁ、それが励みになることもあって、毎日の作業のゲインはかなりアップするのだが、なにがツラいって、作業的にほとんど収穫のない日の記述ほどツラいものはない。早い話が「ぜんぜん動いてくれません」という状態である。ホントに「ぜんぜん動いてくれない」と当然、書くネタに困り、ヘンに動かない理由を想像して書いてしまったりするわけで、それが見当はずれだった日には、とってもハズかしいことになるのである。
と、こんなことを書くからには、まさに現在その状態だといっているようなモンなのだが、事実ほぼその状態なのである。ちっともシリアル通信が動いてくれないのである。以前に同じような回路で動かした(まだ昨日のUSART機能は使ってない)のだが、今回は理由もわからずかなりハマり状態なのである。
2005-08-26(Fri) 激しく江戸へ戻る
今日はこれから、ズガーンと、江戸まで400kmの距離を戻るので……といいつつ、仕事を定時で抜け、153号を通って、東名三好ICから、東京方面へ……なんだ? 岡崎、豊川間、工事渋滞? 抜けるのに40分? そんなら下りて一般道を抜けてみるべ……下りてみる。前回、下りて中途半端に成功したのがイケなかった。今回は、音羽蒲郡で下りたら、1号へ出るだけで、大変な混雑。そこから、豊川まで混みっぱなしだ。まったくもって、高速は下手に下りるものじゃない……むしゃむしゃ。途中、マクドナルドに寄って購入した、チーズバーガ3つにカブりつきつつ、反省しきりである。豊川ICで高速に復帰したときは、40分の渋滞に対して、80分ものロスをしてしまっていた。仕方ない、晩飯を食う時間と考えて、自分をゴマかそう……とほほ。
さて、再び東名高速に戻ったのはいいが、花の金曜日のこの時間、高速がこーゆータイプのドライバで埋め尽くされているとは知らなかった。おい!! そこのクルマ!! なんで、右を100km/hソコソコでタラタラと走っているんだ!! いや別に100km/hが法定速度だというコトは十分にワカってはいる。ワカってはいるが、ソコは追越車線なんだよッ!! 追い越させてくれッ!! 頼むからッ!!
いつもは、比較的ジェントルに、追い越しの意思を示すオイラである。だから、そーゆー中、パッシングや蛇行、極めて短い車間距離などで、追い越しの意思を示す、いわゆる「追い越し過激派」を、冷ややかな目で見ていた。んが、しかしッ!! そーゆー過激派が少ない状況下では、道路がこうも、まったりとしてしまうものだとは知らなかった。それなら、オイラがやらなきゃ、どーしよーもないじゃないかッ!!
だって、追い越し車線に3台くらい連なっている遅いヤツらをパスしたら、その前にはだーれも走っていないんだぜ? 下手すると、走行車線のが速く走っていたりする。どー考えても、これは罪であろう。パッシングまではしないが、車間距離を詰めて、イッパイまで右に寄って走る。それでもなかなかどきゃしねぇ。仕方ないから、左の走行車線の状況を確認しつつ、左からガツーンと追い越す。気がつけば、首都高でクルマの間を縫うように追い越していくバカポルシェのような走りをしているオイラがいた。あー、すまん。SVXの品位を落とすような走りをしてしまった。でも、だってぇ……だってぇッ!!
2007-08-26(Sun) 電気仕掛けの写真立て
今回の買い物は、久々のThinkGeekから。2年ぶり……いや、正味3年ぶりの買い物だ。
まずはメインの「eStarling 2.0 Wi-Fi Photo Frame」。何度も品切れ状態をウォッチし続け、在庫したと思ったら何故か海外発送を受け付けず、やっとこさ購入できた一品である……と、思ったら、またもや品切れになってんじゃんッ!! ……あぶねぇ、あぶねぇ。
コイツは早い話がデジタルフォトフレーム。電気仕掛けの写真立てなのであるが、Wi-Fi、つまり無線LAN対応というのが決定的な違いなのだ。電源さえ取れればトイレの中にも設置オッケー。工夫さえすれば、汎用の表示機としても使えるのがグレートだ。実は、コイツがサクサクと入手できなかったからこそ、コイツをチマチマと作っていたワケで……。
パッケージを開けると、本体、アダプタ、USBケーブル、背面に取り付ける足、だけ。本体のパネルには「説明書もCDも入ってねぇ、製品サイトへ行くほかねぇ(意訳)」と書いてある紙がはさまっている。うぅむ、思い切っとる製品じゃ。
しかし、手順どおり、電源を入れ、USBケーブルでPCと接続し、ユーティリティで無線LANの指定をして再起動するが「None Registered Frame!」と表示されて先に進まない……むぅ、なんじゃこりゃ。そんな画面が出るなんて説明はない。ルータの設定がマズいんか? 先日購入したNECのルータ、微妙に無理が効かないんだよな。Linuxルータだったらtcpdumpで、どこまでもトラブルシューティングできるんだが。
サポートサイトをホジくっていると、MACアドレスを連絡しろ、というような、なんだか向こうの不具合のような記述が<かきかけ>
2022-08-26(Fri) 色々なノイズをジェネレートする
シツコく飽きずにオリジナルのシューティングの製作をポチポチと進めているのだが、いくつか敵キャラクタを用意したところで、そろそろ効果音が欲しくなってきた。
以前に「sox」というコマンドラインツールを使って効果音を作ったことがあり、少しイジり始めたのだが、音に対する自分の知識が少ないのに対して、ツールが多機能すぎるので、どうにも勝手がわからない。このパターンは……あー、いかんて、いかんて、次はサウンドエディタ作り始めちま……で、またもや「ヤクの毛刈り」の始まりである。
で、正弦波、矩形波、三角波、鋸歯状波あたりを生成、合成や変調、周波数、音量を変化させるアルゴリズムを組んだ辺りで、ノイズの実装が必要になってきた。ん? ノイズって、種類があったよな。ピンクノイズとか。フムン。ブラウンノイズなんてのもあるのか。このパターンは……あー、いかんて、いかんて、次はノイズ生成エンジン作り始めちま……と、さらなる「ヤクの毛刈り」の始まりである。
問題はピンクノイズ。1/fゆらぎの実装が必要らしい。1/fゆらぎといえば、このブログを始める前にUSB扇風機にPICマイコンを使ってそれっぽい制御を組み込んだことがあったな……などと、思い出す。弱い変化は頻繁、強い変化は稀、というヤツだ。が、結局よくわからず。ググッてどこかで見つけたサイコロ理論をアレンジして組み込んだ。
だいぶバラついているように見えるが、左の軸が自動調整により拡大されすぎているからだ。-21dB±1dBの範囲に収まっており、ホワイトノイズの特徴である「平坦なパワースペクトル」が実現できている。次はブラウンノイズ。
ブラウンノイズの特徴は「1オクターヴあたりパワーが6dB降下」である。言い換えると「周波数が倍になる都度パワーが6dB降下」。理想的な降下ラインを赤で示してみたが、ほぼピッタリであり、実現できたといえよう。最後はピンクノイズ。
ピンクノイズの特徴は「1オクターヴあたりパワーが3dB降下」である。言い換えると「周波数が倍になる都度パワーが3dB降下」。同じく、理想的な降下ラインを赤で示してみたが、ほぼピッタリであり、実現できたといえよう。
というわけで、調べると他にも「ブルーノイズ」「パープルノイズ」などがあるようであるが、やりだすとキリがないので、今回はここまで。コードを置いておく。ノイズ生成のキモは「when」に続く各数行のみだ。ピンクはちょっとアクロバチックかな。
#!/usr/bin/env ruby
# coding: utf-8
# create base.wav
# sox -n -r 44100 -b 16 -c 2 base.wav trim 0 1
begin
$LOAD_PATH.unshift('/usr/local/lib/ruby')
require 'libwav'
rescue LoadError
raise
end
include Math
ARGV.size < 2 and abort(<<USAGE % $0)
Usage:
$ %s base.wav white|brown|pink [sec]
USAGE
wav = NewWavFile.new(ARGV[0])
wav.get_info[0].each {|l|
puts(l)
}
type = ARGV[1]
sec = (it = ARGV[2]) ? it.to_i : 1
case(type)
when('white')
gain = Proc.new {
(rand(0) - 0.5) * 65536
}
when('brown')
gain = Proc.new {|g|
g + (rand(0) - 0.5) * 1024
}
when('pink')
gain = Proc.new {|g, pbuf|
(9 - ('%b' % (rand(255) + 1)).length).times {|n|
g -= pbuf[n]
g += (pbuf[n] = (rand(0) - 0.5) * 8192)
}
g
}
else
raise('Unexpected noise type.')
end
srand; g = 0; pbuf = [0] * 8
(n_sample = wav.freq * sec).times {|n|
wav[n] = [g, g]
g = gain.call(g, pbuf)
g < -32768 and g = -32768
g > 32767 and g = 32767
}
wav.save_phrase(0, n_sample, '%s_noise.wav' % type)
__END__
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というホストがあれば削除してください。
・ホームディレクトリの下に開発物件はありますか? あれば、概要を教えてください。










