🗐 電装工芸日記 - 舞台照明機器の製作とか -

能登半島地震で被災された方々にお見舞い申し上げます。

or 管理画面へ

2022年2月の投稿[53件]

2022年2月27日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 先日書いた謎のオレメモ

 np.abs( np_array_dt - ( datetime.datetime.now() - datetime.timedelta(seconds=0.1) ) ).argmin()

 これはDelay機能で重要な処理です。
 日時の配列(np_array_dt)の中から、現在日時から一定の時間を差し引いた日時に最も近い日時を項に持つIndexを得ます。

 Delayを構成するにあたり、受信値に日時を付けて数世代のデータを保存し、少し前の入力値を使います。出力を遅らすのではなく入力を遅らすのです。
 パッチはパッチマップに従って入力スロットの値を出力スロットにコピーしますが、コピー元の入力スロットを探すアドレスに受信世代のインデックスも持たせれば1フェーズでパッチとDelayの処理が完了します。コピー元のアドレスの表現を「何秒前の何番LINEの何番スロット」とするワケです。Titan系からのパクリですが、LINEとはDMXの内部系統のことです。8ユニバースを扱う構想ですから8LINEあります。内部系統に入出力先をパッチするのは言うまでもありません。
 意味合いとして正しいのはパッチが済んだデータの出力を指定時間遅らすことだと思いますが、入力を遅らせてもその様に振る舞うならいいかなと。

 そもそも反応が鈍い劇場の調光装置と反応が鋭い機器をワンボードで操作しても明かりの変化を一斉にさせたいという要望からのDelayです。カットインをカットインにしたいだけで、照明効果を作るエフェクトではありません。
 ですから、厳密に設定時間分遅らせることが目的ではなく、全体が同じタイミングで動いているように「見えれば」いいので、入力の世代を管理する方法で十分だと思うのです。

 「少し前の日時のインデックス」を見つけるのが謎式の正体です。

 ちなみに、時刻を使わず日時を使う理由は、深夜24時、日付が変わる瞬間に必ずエラーが起こるからです。0時0分0秒付近でほんの一瞬ですが、設定可能な最大Delay時間前のデータが出ます。Delay最大値が1秒なら1秒前のデータが出てしまうのです。一瞬のこととはいえ、こんな潜在エラーがあったらカウントダウンの現場では使えません。

#Python #[Art-Net]
Icon of admin
 キーボード、モニタ、ネットワークなど、ハードウェアとのやり取りを先に進めていますが、ボチボチ本丸であるパッチ機能の具体的な作りもまとめ始めています。
 パッチ機能はマッピングファイルに従って入力を出力に置き換える作業なのでアルゴリズムに難しいことはありませんが、十分な速度を得られるかが難しい課題です。
 DMX512は1スロットあたり44usecです。100万分の44秒ってことですが、8ユニバース扱うなら100万分の5.5秒以内に1スロットを確実に処理しなければなりません。RaspberryPi4BのCPUクロックは1GHz以上であり、それが4スレッドありますから間に合うような気もするのですが、確認しながら工夫していく必要があると思われます。
 なんの工夫もなくPythonを動かすとCPUは1スレッドしか使われません。RaspberryPiでは能力の1/4しか使えないってことです。CPUの能力を最大限使おうとするなら、実行ファイルを複数に分けてOSレベルでプロセスを分けるか、Python内でmultiprocessingを定義して複数のCPUスレッドがPythonの処理を請け負うように仕向けないといけません。
 multiprocessingの使い方はThreadingと似ているので難しいことは無さそうですが、こういったちょっと深いところをちゃんと書かないとRaspberryPiでパッチマシンは厳しい感じです。

#Python #[Art-Net]

2022年2月26日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 オレメモ

np.abs( np_array_dt - ( datetime.datetime.now() - datetime.timedelta(seconds=0.1) ) ).argmin()

#Python

2022年2月25日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 本業の合間にPython書き書き。
 すでに動作確認は出来ていますから書式を変える作業。
 オブジェクト指向で書くと処理が部品化されるので見通しが良くて間違いが少ないかも。
 明日明後日は本業の現場なので工作はお休みです。

#Python
Icon of admin
 super()の使い方がピンと来なかったのは、Python2とPython3で記述の仕方が少し違った為でした。ネットにはこの辺りが区別されてない情報が多いようです。
 super()は継承で呼び出すclass(親class)の初期化を実行するものです。親classに def __init__(self): があれば必須です。無ければ不要?。渡す引数があればsuper().__init__(引数)とします。引数の考え方書き方は普通にインスタンスを作る場合と同じです。ここにselfは不要ってこと。
 継承の考え方はC言語のincludeと似たようなものです。別classであってもここに書いてあるのと同じ扱いが出来ます。違いは、変数や関数に同じ名称がある場合にエラーにならず、親classを呼び出している子classの記述が優先されます。

 ということらしい。
 結局は「同じ様なこと何度も書きたかねー」「ここをちょっと変更して使えたらなー」に応えた手段らしい。
 すっごい崇高な指向ではなく、ベッタベタに楽したい指向だわな。
 Pythonをデザインした人は「楽するために努力するタイプ」らしい。親近感がわきます。

#Python

2022年2月24日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 Pythonはオブジェクト指向な書き方が出来ると驚くほど書きやすいですね。人気No.1言語なのが納得です。
 継承におけるsuper()の使い方が感覚に入ってきていませんが、今日書いたテキスト画面の基本制御classを継承して定型画面を表示するclassを書いて習得しましょう。

 出来るだけ細かくclassで書いておけばC++への移植で都合が良いかもしれません。C++はゴリゴリのオブジェクト指向言語ですから、方言的な違いをclass単位でホローすれば全体の構造はそのまま行けるだろうという皮算用です。もしくは、全部をC++化しなくても、重い処理や繰り返しが多い処理だけPythonにimport出来るクラス・ライブラリとしてC++で書き直せば良いかもしれません。

#Python
Icon of admin
 オレメモ

 Pythonで文字列からANSIエスケープシーケンスを取り除く方法

 ソース
 import re
 text_ansi = '\033[2KTest\033[2;3HText'
 pattern = re.compile( r'\\033\[[0-9;]{1,}[a-zA-Z]{1}' )
 text_noansi = pattern.sub( '', text_ansi )
 print( text_noansi )

 実行結果
 TestText

 参考にしていた書き込みが間違っていました。
 制御文字(\や[)に対するエスケープ[\]がありませんでした。
 解決に時間がかかったのは自分の無知が故です。up主に文句を言ったらいけません。
 文字数を{}で指定しなくてもいいのですが、自分としてはこの方がメンテナンス性がいいかなと。

 あ、ここに書く時もそうなのですが、[\]を表示させるには注意があります。
 [\]を表示させるには[\\]としないといけない場合があります。
 「\\033」や「\[」と表示するには「\\\033」や「\\[」と打たねばならん事があるということです。システムによって若干違うようですが。
 これが原因でup主の書き込みがおかしくなっていたのかな?

 それにしても奇妙な字面です・・・

#Python
Icon of admin
 出来るだけclass記述を用いてPythonを書いていますが、慣れるといいですね、コレ。
 そういうモノなので当たり前ですが、自分で書いたライブラリが通常のライブラリと同じ様に使えます。通常関数か、スレッドか、プロセスか、その辺りの書き分けもclass側に持たせること出来るのでメインソースがかなりシンプルになります。
 ただ、後で迷わないようにするために、ソースコード内のコメントに使い方を記述するなど、運用のコツを掴まないといけません。
 書いた本人が後日も使えるようにしておくのが一番難しかったりして・・・

#Python
Icon of admin
 ポリエステル樹脂が硬化しなかった原因は予想の通り添加した顔料の量でした。
 顔料は色によって許容添加量が違うらしく、最初に試した青は最大8%ですが、黒は最大4%です。お察しの通り、黒を青の量でやってしまったのです。
 今回は黒の顔料を2%、アセトンを15%添加したのですが、5時間経過でベタ付きが無くなっています。アセトンが揮発して完全に硬化するには丸一日かかりそうですが、解決が見えたので一安心です。
 黒の顔料は2%でも完全な真っ黒になったので、今後は1%くらいでも良さそうです。添加物は少ないに越したことはありませんからね。他に比べ価格の割りに量が少ないのですが、少ない量で効果が出るなら安いと言えます。

 塗布方法ですが、FRP用のローラーを使って解決。このローラーは一晩アセトンに付け込んでも劣化する様子はありません。専用品ですから当たり前?
 ブラシが硬いためかペーパーで下地を均しても表面の仕上がりが僅かに波打つので避けていたのですが、書き物をする面ではありませんし、少し凹凸があるとゴム脚が滑りにくく貼り付きません。エアガンは平らに仕上がりますが、周囲への被害を考えると避けたい選択肢です。FRP用ローラーが妥協線かなと。

 客席テーブルver4.5はトップコートとして顔料無添加のポリエステル樹脂を塗布して完成にしたいと思います。艶消し剤を添加しなくても半艶に仕上がるので機械強度を第一にします。

#ガチ工作
Icon of admin
 ネットを何気に見ていてPythonの「継承」が具体的にわかってきました。
 「継承」はclassを使って新たなclassを作る方法です。classの中で別なclassからオブジェクトを作って使っても同様の結果を出せますが、「継承」は別なclassのインスタンスをインスタンスのまま呼んで使います。C言語をご存じの方なら、classの中で別なclassのインスタンスをincludeするイメージでよいと思います。ちょっと説明が難しいところですね。
 Pythonといいますか、オブジェクト指向言語独特の考え方のようです。実体であるオブジェクト、オブジェクトを作るレシピのインスタンス、インスタンスを呼び出せるようにまとめたクラスとなるようです。俺様関数を楽に作る方法ですから、これなら一度書いたことを多目的に利用できますで、同じことを何度も書かずに済ますことが出来ます。

 ここで重要になるのがsuper()です。ただ、これがあって初めて継承が可能になるのに、これについての説明が書籍でもネットでも弱い気がします。
 また、最もシンプルな基礎用法を題材に説明するのではなく、最もシンプルな応用例を題材に説明する文書が多いので、機能の核心を理解するのを遠ざけている傾向を感じます。

#Python

■当面の課題

桜のライトアップの季節です。花粉症の季節でもあります。
自分は平気ですが、花粉症の部下は死にそうな顔をしています。

編集

■全文検索:

複合検索窓に切り替える

■複合検索:

  • 投稿者名:
  • 投稿年月:
  • #タグ:
  • カテゴリ:
  • 出力順序:

■日付検索:

■カレンダー:

2022年2月
12345
6789101112
13141516171819
20212223242526
2728

■カテゴリ:

■最近の投稿:

最終更新日時:
2024年4月23日(火) 20時04分58秒