2022年2月 この範囲を時系列順で読む この範囲をファイルに出力する
キーボード、モニタ、ネットワークなど、ハードウェアとのやり取りを先に進めていますが、ボチボチ本丸であるパッチ機能の具体的な作りもまとめ始めています。
パッチ機能はマッピングファイルに従って入力を出力に置き換える作業なのでアルゴリズムに難しいことはありませんが、十分な速度を得られるかが難しい課題です。
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]
パッチ機能はマッピングファイルに従って入力を出力に置き換える作業なのでアルゴリズムに難しいことはありませんが、十分な速度を得られるかが難しい課題です。
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]
オレメモ
np.abs( np_array_dt - ( datetime.datetime.now() - datetime.timedelta(seconds=0.1) ) ).argmin()
#Python
np.abs( np_array_dt - ( datetime.datetime.now() - datetime.timedelta(seconds=0.1) ) ).argmin()
#Python
本業の合間にPython書き書き。
すでに動作確認は出来ていますから書式を変える作業。
オブジェクト指向で書くと処理が部品化されるので見通しが良くて間違いが少ないかも。
明日明後日は本業の現場なので工作はお休みです。
#Python
すでに動作確認は出来ていますから書式を変える作業。
オブジェクト指向で書くと処理が部品化されるので見通しが良くて間違いが少ないかも。
明日明後日は本業の現場なので工作はお休みです。
#Python
super()の使い方がピンと来なかったのは、Python2とPython3で記述の仕方が少し違った為でした。ネットにはこの辺りが区別されてない情報が多いようです。
super()は継承で呼び出すclass(親class)の初期化を実行するものです。親classに def __init__(self): があれば必須です。無ければ不要?。渡す引数があればsuper().__init__(引数)とします。引数の考え方書き方は普通にインスタンスを作る場合と同じです。ここにselfは不要ってこと。
継承の考え方はC言語のincludeと似たようなものです。別classであってもここに書いてあるのと同じ扱いが出来ます。違いは、変数や関数に同じ名称がある場合にエラーにならず、親classを呼び出している子classの記述が優先されます。
ということらしい。
結局は「同じ様なこと何度も書きたかねー」「ここをちょっと変更して使えたらなー」に応えた手段らしい。
すっごい崇高な指向ではなく、ベッタベタに楽したい指向だわな。
Pythonをデザインした人は「楽するために努力するタイプ」らしい。親近感がわきます。
#Python
super()は継承で呼び出すclass(親class)の初期化を実行するものです。親classに def __init__(self): があれば必須です。無ければ不要?。渡す引数があればsuper().__init__(引数)とします。引数の考え方書き方は普通にインスタンスを作る場合と同じです。ここにselfは不要ってこと。
継承の考え方はC言語のincludeと似たようなものです。別classであってもここに書いてあるのと同じ扱いが出来ます。違いは、変数や関数に同じ名称がある場合にエラーにならず、親classを呼び出している子classの記述が優先されます。
ということらしい。
結局は「同じ様なこと何度も書きたかねー」「ここをちょっと変更して使えたらなー」に応えた手段らしい。
すっごい崇高な指向ではなく、ベッタベタに楽したい指向だわな。
Pythonをデザインした人は「楽するために努力するタイプ」らしい。親近感がわきます。
#Python
Pythonはオブジェクト指向な書き方が出来ると驚くほど書きやすいですね。人気No.1言語なのが納得です。
継承におけるsuper()の使い方が感覚に入ってきていませんが、今日書いたテキスト画面の基本制御classを継承して定型画面を表示するclassを書いて習得しましょう。
出来るだけ細かくclassで書いておけばC++への移植で都合が良いかもしれません。C++はゴリゴリのオブジェクト指向言語ですから、方言的な違いをclass単位でホローすれば全体の構造はそのまま行けるだろうという皮算用です。もしくは、全部をC++化しなくても、重い処理や繰り返しが多い処理だけPythonにimport出来るクラス・ライブラリとしてC++で書き直せば良いかもしれません。
#Python
継承におけるsuper()の使い方が感覚に入ってきていませんが、今日書いたテキスト画面の基本制御classを継承して定型画面を表示するclassを書いて習得しましょう。
出来るだけ細かくclassで書いておけばC++への移植で都合が良いかもしれません。C++はゴリゴリのオブジェクト指向言語ですから、方言的な違いをclass単位でホローすれば全体の構造はそのまま行けるだろうという皮算用です。もしくは、全部をC++化しなくても、重い処理や繰り返しが多い処理だけPythonにimport出来るクラス・ライブラリとしてC++で書き直せば良いかもしれません。
#Python
オレメモ
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
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
出来るだけclass記述を用いてPythonを書いていますが、慣れるといいですね、コレ。
そういうモノなので当たり前ですが、自分で書いたライブラリが通常のライブラリと同じ様に使えます。通常関数か、スレッドか、プロセスか、その辺りの書き分けもclass側に持たせること出来るのでメインソースがかなりシンプルになります。
ただ、後で迷わないようにするために、ソースコード内のコメントに使い方を記述するなど、運用のコツを掴まないといけません。
書いた本人が後日も使えるようにしておくのが一番難しかったりして・・・
#Python
そういうモノなので当たり前ですが、自分で書いたライブラリが通常のライブラリと同じ様に使えます。通常関数か、スレッドか、プロセスか、その辺りの書き分けもclass側に持たせること出来るのでメインソースがかなりシンプルになります。
ただ、後で迷わないようにするために、ソースコード内のコメントに使い方を記述するなど、運用のコツを掴まないといけません。
書いた本人が後日も使えるようにしておくのが一番難しかったりして・・・
#Python
ポリエステル樹脂が硬化しなかった原因は予想の通り添加した顔料の量でした。
顔料は色によって許容添加量が違うらしく、最初に試した青は最大8%ですが、黒は最大4%です。お察しの通り、黒を青の量でやってしまったのです。
今回は黒の顔料を2%、アセトンを15%添加したのですが、5時間経過でベタ付きが無くなっています。アセトンが揮発して完全に硬化するには丸一日かかりそうですが、解決が見えたので一安心です。
黒の顔料は2%でも完全な真っ黒になったので、今後は1%くらいでも良さそうです。添加物は少ないに越したことはありませんからね。他に比べ価格の割りに量が少ないのですが、少ない量で効果が出るなら安いと言えます。
塗布方法ですが、FRP用のローラーを使って解決。このローラーは一晩アセトンに付け込んでも劣化する様子はありません。専用品ですから当たり前?
ブラシが硬いためかペーパーで下地を均しても表面の仕上がりが僅かに波打つので避けていたのですが、書き物をする面ではありませんし、少し凹凸があるとゴム脚が滑りにくく貼り付きません。エアガンは平らに仕上がりますが、周囲への被害を考えると避けたい選択肢です。FRP用ローラーが妥協線かなと。
客席テーブルver4.5はトップコートとして顔料無添加のポリエステル樹脂を塗布して完成にしたいと思います。艶消し剤を添加しなくても半艶に仕上がるので機械強度を第一にします。
#ガチ工作
顔料は色によって許容添加量が違うらしく、最初に試した青は最大8%ですが、黒は最大4%です。お察しの通り、黒を青の量でやってしまったのです。
今回は黒の顔料を2%、アセトンを15%添加したのですが、5時間経過でベタ付きが無くなっています。アセトンが揮発して完全に硬化するには丸一日かかりそうですが、解決が見えたので一安心です。
黒の顔料は2%でも完全な真っ黒になったので、今後は1%くらいでも良さそうです。添加物は少ないに越したことはありませんからね。他に比べ価格の割りに量が少ないのですが、少ない量で効果が出るなら安いと言えます。
塗布方法ですが、FRP用のローラーを使って解決。このローラーは一晩アセトンに付け込んでも劣化する様子はありません。専用品ですから当たり前?
ブラシが硬いためかペーパーで下地を均しても表面の仕上がりが僅かに波打つので避けていたのですが、書き物をする面ではありませんし、少し凹凸があるとゴム脚が滑りにくく貼り付きません。エアガンは平らに仕上がりますが、周囲への被害を考えると避けたい選択肢です。FRP用ローラーが妥協線かなと。
客席テーブルver4.5はトップコートとして顔料無添加のポリエステル樹脂を塗布して完成にしたいと思います。艶消し剤を添加しなくても半艶に仕上がるので機械強度を第一にします。
#ガチ工作
ネットを何気に見ていてPythonの「継承」が具体的にわかってきました。
「継承」はclassを使って新たなclassを作る方法です。classの中で別なclassからオブジェクトを作って使っても同様の結果を出せますが、「継承」は別なclassのインスタンスをインスタンスのまま呼んで使います。C言語をご存じの方なら、classの中で別なclassのインスタンスをincludeするイメージでよいと思います。ちょっと説明が難しいところですね。
Pythonといいますか、オブジェクト指向言語独特の考え方のようです。実体であるオブジェクト、オブジェクトを作るレシピのインスタンス、インスタンスを呼び出せるようにまとめたクラスとなるようです。俺様関数を楽に作る方法ですから、これなら一度書いたことを多目的に利用できますで、同じことを何度も書かずに済ますことが出来ます。
ここで重要になるのがsuper()です。ただ、これがあって初めて継承が可能になるのに、これについての説明が書籍でもネットでも弱い気がします。
また、最もシンプルな基礎用法を題材に説明するのではなく、最もシンプルな応用例を題材に説明する文書が多いので、機能の核心を理解するのを遠ざけている傾向を感じます。
#Python
「継承」はclassを使って新たなclassを作る方法です。classの中で別なclassからオブジェクトを作って使っても同様の結果を出せますが、「継承」は別なclassのインスタンスをインスタンスのまま呼んで使います。C言語をご存じの方なら、classの中で別なclassのインスタンスをincludeするイメージでよいと思います。ちょっと説明が難しいところですね。
Pythonといいますか、オブジェクト指向言語独特の考え方のようです。実体であるオブジェクト、オブジェクトを作るレシピのインスタンス、インスタンスを呼び出せるようにまとめたクラスとなるようです。俺様関数を楽に作る方法ですから、これなら一度書いたことを多目的に利用できますで、同じことを何度も書かずに済ますことが出来ます。
ここで重要になるのがsuper()です。ただ、これがあって初めて継承が可能になるのに、これについての説明が書籍でもネットでも弱い気がします。
また、最もシンプルな基礎用法を題材に説明するのではなく、最もシンプルな応用例を題材に説明する文書が多いので、機能の核心を理解するのを遠ざけている傾向を感じます。
#Python
客席テーブルにポリエステル樹脂を上塗りをしたのですが、顔料を入れて過ぎたためか硬化不良になってしまいました。要は固まらない。
完全に硬化反応したポリエステル樹脂はアセトンでほぼ溶けないようです。硬化が怪しい時はアセトンで拭いてみるとわかるのかもしれません。
このままでは使えないのでアセトンで拭き取ってやり直しです。
#ガチ工作
完全に硬化反応したポリエステル樹脂はアセトンでほぼ溶けないようです。硬化が怪しい時はアセトンで拭いてみるとわかるのかもしれません。
このままでは使えないのでアセトンで拭き取ってやり直しです。
#ガチ工作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131