全年全月10日の投稿[40件]
2026年5月 この範囲を時系列順で読む この範囲をファイルに出力する
C言語での ncurses みたいに、Rust で画面にテキスト表示するなら crossterm だそうです。キーボード操作も扱えます。
あるのか無いのかの確認をしただけですが、あるなら問題ありません。
C言語ベースで処理段取りの整理を随分やってきましたので、Rust の勉強が進めば Art-Net 関連を書き始められそうです。
#Rust #[Art-Net]
あるのか無いのかの確認をしただけですが、あるなら問題ありません。
C言語ベースで処理段取りの整理を随分やってきましたので、Rust の勉強が進めば Art-Net 関連を書き始められそうです。
#Rust #[Art-Net]
合間に Rust の勉強をしています。
今は「所有権」について整理していますが、変数は内容を保存するメモリ、そのアドレスとメタデータを保存するインデックスで構成されていると捉えれば自然に理解出来ます。ソースコード上での使い方は別問題ですが、「所有権」の譲渡と貸出はこの構成から見ればいいだけでした。挙動の表面だけで理解しようとすると何がどうなっているか、どうしてこんなことをするのか理解し難いようですけど。
ただ、「所有権」という言葉には疑問があります。私の理解では「変数へのアクセス権限」となりました。この言葉のまんまですが、「所有権」は変数の内容にアクセスできるかどうかですから、持っているかより権限があるかが重要だと思うのです。この場合の「所有権」はこういう意味の言葉だと扱えばいいだけですが、「所有権」と言われると「所有者」は?と聞きたくなり、「所有物」は何?とも聞きたくなります。「所有権」の説明では「所有者」も「所有物」も変数だとする物が多く、当初は何のこっちゃいと感じたものです。「所有者」は変数であり、「所有物」は変数の内容が書かれたメモリとなります。あくまでイメージですけど、「変数の内容が格納されたメモリのパーミッション」だとも思えます。
#Rust
今は「所有権」について整理していますが、変数は内容を保存するメモリ、そのアドレスとメタデータを保存するインデックスで構成されていると捉えれば自然に理解出来ます。ソースコード上での使い方は別問題ですが、「所有権」の譲渡と貸出はこの構成から見ればいいだけでした。挙動の表面だけで理解しようとすると何がどうなっているか、どうしてこんなことをするのか理解し難いようですけど。
ただ、「所有権」という言葉には疑問があります。私の理解では「変数へのアクセス権限」となりました。この言葉のまんまですが、「所有権」は変数の内容にアクセスできるかどうかですから、持っているかより権限があるかが重要だと思うのです。この場合の「所有権」はこういう意味の言葉だと扱えばいいだけですが、「所有権」と言われると「所有者」は?と聞きたくなり、「所有物」は何?とも聞きたくなります。「所有権」の説明では「所有者」も「所有物」も変数だとする物が多く、当初は何のこっちゃいと感じたものです。「所有者」は変数であり、「所有物」は変数の内容が書かれたメモリとなります。あくまでイメージですけど、「変数の内容が格納されたメモリのパーミッション」だとも思えます。
#Rust
2025年9月 この範囲を時系列順で読む この範囲をファイルに出力する
LED-PAR の防水を確認するために仮組みをしようとしたのですが、なんと LED 基板側にたっぷり水が入っていました。
カバーを開けて乾かし、LED 基板を外して掃除です。
現場への復帰は急ぎではありませんが手間がかかりそう。
この機体は中身を総取り換えです。
#器具の修理
カバーを開けて乾かし、LED 基板を外して掃除です。
現場への復帰は急ぎではありませんが手間がかかりそう。
この機体は中身を総取り換えです。
#器具の修理
2025年6月 この範囲を時系列順で読む この範囲をファイルに出力する
C言語のポインタには面白い機能(使い方?)がありました。
関数の呼び出しをポインタ化するのです。なんのこっちゃ?って話ですねぇ~。
ソースコードの大半はそのままに、条件分岐で関数を差し替えるイメージです。オブジェクト指向の一歩手前?
もちろん、構造体を含む変数もポインタを介して差し替えられます。
DMXの場合、受信中のスタックから読み出すことは避けなければなりません。パケットの中身に不整合が起こるからです。例えばアドレス100までは最新の受信内容、101以降は1フレーム前の受信内容や全てゼロになるのです。2スロット構成のアトリビュートがアドレス100と101にまたがったらよろしくないことが起こります。リトルエンディアンだったら目も当てられません。
この対策は2つのスタックを交代しながら使います。片方は受信に、1フレーム前のデータを持ったもう片方を出力処理に使い、条件が整えば役割を交代するのです。この場合どちらをどちらに使うかをポインタで指定出来れば全体の処理はスマートになります。ピンと来る方が少ないのはわかっていますが、ソースコードを書く上ではとても合理的な方法です。今の常識からしたら万分の一の処理能力のハードウェアしかなかった時代にC言語をデザインした人は本当の天才だと思います。勉強すればするほど「天才」って言葉が身に沁みます。自分はその成果に甘えるだけで感謝々々です。
C言語を学ぶ上でポインタは難解な要素の筆頭ですが、自分の様にアタマの半分がPICマイコンのアセンブラで占められている者には案外すんなりと理解出来ました。メモリのアドレスを直接扱う方法だからです。当初は高級言語でメモリのアドレスを直接扱うなんてイメージはありませんでしたので躓きましたが、C言語が値渡ししか出来ない(参照渡しが出来ない)ことも含めるとポインタは合理的であり、C言語は高級言語ではなく汎用化を目指したアセンブラ言語と思えばイイらしいと思った次第。正しくはなくても私にはこの理解が自然でした。
自分は PC8001(PC6001)-BASIC → Z80アセンブラ(当時小学生、挫折しました) → (20年空いて) → PICアセンブラ → Python → C言語(今) と進んできました。小学生の時分に論理演算、16進数、2進数を本能に焼き付け、成果は出せずともZ80アセンブラに挑んだことが今に活きているようです。小学生当時、戦前産まれの父母は数百円の漫画本は買ってくれませんでしたが高価な技術書やその筋の雑誌(月刊マイコンやBASICマガジンなど)は買ってくれました。100歳まであと数年のカウントダウンなのに林業を生業とし登山やスキーを楽しむ父と米寿間近で父の3倍は元気な母に絶大な感謝をする今日この頃。
自分の今の最大の不安は三途の川の向こう岸で父母をお迎えすることです。あと100年くらいは部下や後輩に迷惑をかけずに現役をやってやろうと思っていますけど(笑
#C言語 #雑記
関数の呼び出しをポインタ化するのです。なんのこっちゃ?って話ですねぇ~。
ソースコードの大半はそのままに、条件分岐で関数を差し替えるイメージです。オブジェクト指向の一歩手前?
もちろん、構造体を含む変数もポインタを介して差し替えられます。
DMXの場合、受信中のスタックから読み出すことは避けなければなりません。パケットの中身に不整合が起こるからです。例えばアドレス100までは最新の受信内容、101以降は1フレーム前の受信内容や全てゼロになるのです。2スロット構成のアトリビュートがアドレス100と101にまたがったらよろしくないことが起こります。リトルエンディアンだったら目も当てられません。
この対策は2つのスタックを交代しながら使います。片方は受信に、1フレーム前のデータを持ったもう片方を出力処理に使い、条件が整えば役割を交代するのです。この場合どちらをどちらに使うかをポインタで指定出来れば全体の処理はスマートになります。ピンと来る方が少ないのはわかっていますが、ソースコードを書く上ではとても合理的な方法です。今の常識からしたら万分の一の処理能力のハードウェアしかなかった時代にC言語をデザインした人は本当の天才だと思います。勉強すればするほど「天才」って言葉が身に沁みます。自分はその成果に甘えるだけで感謝々々です。
C言語を学ぶ上でポインタは難解な要素の筆頭ですが、自分の様にアタマの半分がPICマイコンのアセンブラで占められている者には案外すんなりと理解出来ました。メモリのアドレスを直接扱う方法だからです。当初は高級言語でメモリのアドレスを直接扱うなんてイメージはありませんでしたので躓きましたが、C言語が値渡ししか出来ない(参照渡しが出来ない)ことも含めるとポインタは合理的であり、C言語は高級言語ではなく汎用化を目指したアセンブラ言語と思えばイイらしいと思った次第。正しくはなくても私にはこの理解が自然でした。
自分は PC8001(PC6001)-BASIC → Z80アセンブラ(当時小学生、挫折しました) → (20年空いて) → PICアセンブラ → Python → C言語(今) と進んできました。小学生の時分に論理演算、16進数、2進数を本能に焼き付け、成果は出せずともZ80アセンブラに挑んだことが今に活きているようです。小学生当時、戦前産まれの父母は数百円の漫画本は買ってくれませんでしたが高価な技術書やその筋の雑誌(月刊マイコンやBASICマガジンなど)は買ってくれました。100歳まであと数年のカウントダウンなのに林業を生業とし登山やスキーを楽しむ父と米寿間近で父の3倍は元気な母に絶大な感謝をする今日この頃。
自分の今の最大の不安は三途の川の向こう岸で父母をお迎えすることです。あと100年くらいは部下や後輩に迷惑をかけずに現役をやってやろうと思っていますけど(笑
#C言語 #雑記
現場ですが、簡単なひな壇を組むだけの現地道具なので終演までヒマです。
ArtNetPatch の ap_transmitter の構造を構造体配列を元に整理したのですが、割り切って構成したら案外軽い処理になりました。メモリの節約など考えず、条件分岐や計算を出来るだけ減らし繰り返しをヒトまとめにする方針だからでしょうか。
実際に組んで実行時間を計測しなければなりませんが、パッチ処理の後にもディレイやプロファイルカーブの処理を入れられそうな予感がします。
receive(受信)、bind(入力ユニバースを内部Bus(ユニバース)にパッチ、ここで数値をマージしてHTPミキサーとします)、pre-delay、pre-profile-curve、patch、post-delay、post-profile-curve、transmit といった流れで考えています。
ついてはモジュール構成を少し変えます。
ap_transmitter の中の数値操作と Art-net の出力を分割します。
fps はともかく、すべてのユニバースを連続して送るのは避けた方がいいかなと思うので、ユニバース毎にインターバルを持たせるためです。
1)アプリの起動部とし、共有物を設定して以下のモジュールを呼ぶ「ap_main」
2)画面表示やユーザー操作を司る「ap_console」
3)Art-Netを受信する「ap_receiver」
4)受信値や設定値から出力値をまとめる「ap_effect」
5)Art-Net を出力する「ap_transmitter」
6)データのタイムアウト管理をする「ap_timeout」
今後はタイムラグを減らす工夫を考えてみましょう。
出力の目標は 30fps 以上、出来れば 36fps ですが、1/36秒以内に処理を一巡出来るなら遅れても1フレームとなります。無理ならスレッド的なアプローチで考えて出来るだけ遅れを少なくしましょう。
何にしても、試作をして処理時間と処理負荷の計測が必要です。
こんな複雑なシステムは10回くらい書き直すつもりで試すしかありません。素人の私が結果を完全に予測するなんで無理ですもん。
#[Art-Net] #器具の製作 #C言語
ArtNetPatch の ap_transmitter の構造を構造体配列を元に整理したのですが、割り切って構成したら案外軽い処理になりました。メモリの節約など考えず、条件分岐や計算を出来るだけ減らし繰り返しをヒトまとめにする方針だからでしょうか。
実際に組んで実行時間を計測しなければなりませんが、パッチ処理の後にもディレイやプロファイルカーブの処理を入れられそうな予感がします。
receive(受信)、bind(入力ユニバースを内部Bus(ユニバース)にパッチ、ここで数値をマージしてHTPミキサーとします)、pre-delay、pre-profile-curve、patch、post-delay、post-profile-curve、transmit といった流れで考えています。
ついてはモジュール構成を少し変えます。
ap_transmitter の中の数値操作と Art-net の出力を分割します。
fps はともかく、すべてのユニバースを連続して送るのは避けた方がいいかなと思うので、ユニバース毎にインターバルを持たせるためです。
1)アプリの起動部とし、共有物を設定して以下のモジュールを呼ぶ「ap_main」
2)画面表示やユーザー操作を司る「ap_console」
3)Art-Netを受信する「ap_receiver」
4)受信値や設定値から出力値をまとめる「ap_effect」
5)Art-Net を出力する「ap_transmitter」
6)データのタイムアウト管理をする「ap_timeout」
今後はタイムラグを減らす工夫を考えてみましょう。
出力の目標は 30fps 以上、出来れば 36fps ですが、1/36秒以内に処理を一巡出来るなら遅れても1フレームとなります。無理ならスレッド的なアプローチで考えて出来るだけ遅れを少なくしましょう。
何にしても、試作をして処理時間と処理負荷の計測が必要です。
こんな複雑なシステムは10回くらい書き直すつもりで試すしかありません。素人の私が結果を完全に予測するなんで無理ですもん。
#[Art-Net] #器具の製作 #C言語
子プロセスを使う場合は親プロセスが落ちたらこれらも落とさないといけません。ゾンビとして残ってしまうからです。
一般的にはメインから「終わりにしなさい」って指示を受けて落としますが、開発途中ではそうもいかないことがあります。
ならば、「続けなさい」って指令が無ければタイムアウトすることにしましょう。親の存在確認をする方法もありますが、この方法なら管理が楽かも。
#C言語
一般的にはメインから「終わりにしなさい」って指示を受けて落としますが、開発途中ではそうもいかないことがあります。
ならば、「続けなさい」って指令が無ければタイムアウトすることにしましょう。親の存在確認をする方法もありますが、この方法なら管理が楽かも。
#C言語
ArtNetPatch の構成イメージが見えてきました。
この後は「ap_transmitter」の具体化でしょうか。これが ArtNetPatch の核であり一番重い処理です。
モジュール間を繋ぐ構造体配列が見えればその他のモジュールを作ることは可能ですし、画面表示とか作って手ごたえを感じたいってのはありますが、最終的にデータを取りまとめる「ap_transmitter」が見えませんと構造体配列を決めることが出来ません。
#[Art-Net] #器具の製作
この後は「ap_transmitter」の具体化でしょうか。これが ArtNetPatch の核であり一番重い処理です。
モジュール間を繋ぐ構造体配列が見えればその他のモジュールを作ることは可能ですし、画面表示とか作って手ごたえを感じたいってのはありますが、最終的にデータを取りまとめる「ap_transmitter」が見えませんと構造体配列を決めることが出来ません。
#[Art-Net] #器具の製作
2025年4月 この範囲を時系列順で読む この範囲をファイルに出力する
Antari F1-FAZER は目詰まり。
ツンデレを越え、気持ちが折れ始めております。
と、Antari の他機種(主にX-530)のマニュアルを読みまくったところ、洗浄水は精製水と「白酢(しらす・ホワイビネガー)」を混ぜるらしい。酢は酢でも米酢とか穀物酢ではないらしい。
なんと~!
ならばと白酢を使ってみるかと近所のスーパーを巡ったのですが無い。業務スーパーにはあるような気がしますが閉店時間でした。
仕方ないので amazon でポチリ。
これを試してダメなら F1 は不燃ゴミにします。NG品は部品取りと思っていましたが、発煙器がダメになるだけで他は壊れないので倉庫の肥やしにしても意味がありません。
追記
白酢が届いたので早速呑ませてみました。精製水8:白酢2です。
数時間ですから解決には至りませんが、液の吸い込みが若干早くなりました。
しばらく続けてみましょう。
#器具の修理
ツンデレを越え、気持ちが折れ始めております。
と、Antari の他機種(主にX-530)のマニュアルを読みまくったところ、洗浄水は精製水と「白酢(しらす・ホワイビネガー)」を混ぜるらしい。酢は酢でも米酢とか穀物酢ではないらしい。
なんと~!
ならばと白酢を使ってみるかと近所のスーパーを巡ったのですが無い。業務スーパーにはあるような気がしますが閉店時間でした。
仕方ないので amazon でポチリ。
これを試してダメなら F1 は不燃ゴミにします。NG品は部品取りと思っていましたが、発煙器がダメになるだけで他は壊れないので倉庫の肥やしにしても意味がありません。
追記
白酢が届いたので早速呑ませてみました。精製水8:白酢2です。
数時間ですから解決には至りませんが、液の吸い込みが若干早くなりました。
しばらく続けてみましょう。
#器具の修理
夏の花火大会でスピーカーを9ヶ所に組むとのこと。それぞれに電源が必要。
最寄りに発電機を置いて C型30A を2-4個付けたいらしいのですが、C型30Aの6回路箱を作っては費用と手間がかかり過ぎる。
数年前のライトアップで小さなウォルボックスをやたらと使って倉庫の肥やしになっているので再利用することにしました。
こんな感じです。C型30A先バラの屋外タイプって感じです。

C型30Aコンセントは20度傾けた状態で取り付けます。

取付台座は3Dプリンタで製作です。

#器具の製作
最寄りに発電機を置いて C型30A を2-4個付けたいらしいのですが、C型30Aの6回路箱を作っては費用と手間がかかり過ぎる。
数年前のライトアップで小さなウォルボックスをやたらと使って倉庫の肥やしになっているので再利用することにしました。
こんな感じです。C型30A先バラの屋外タイプって感じです。

C型30Aコンセントは20度傾けた状態で取り付けます。

取付台座は3Dプリンタで製作です。

#器具の製作