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

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

or 管理画面へ

2023年8月 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 本業がイイ感じに忙しいのでプログラム作業は思った程進みません。仕方ありませんけど。
 LTC Player は音楽プレーヤー機能が一応組めたので、LTC の送出部を本格的に進めます。

 どういった構造にしましょうかね。
 クラスライブラリの書き方も体に入ってきましたので、本格的なドライバっぽい書き方に挑戦してみようと思います。LTC Generator は LTC Player と別な時間軸で動かさないといけませんのでマルチスレッドを使うことはマストだと思われます。LTC Generator は import する別ファイルとし、LTC Player とやりとりする部分はクラスとして記述し、そのクラスからスレッドを立ち上げてシリアル通信を制御するのです。これならLTC Player からはシンプルな関数にしか見えませんので構造的に美しく如何にもドライバって風味になりますw シリアルポートのリストを得る関数も別枠で作り、LTC Generator のインスタンスを起こす際にシリアルポートを指定するようにすれば複数の LTC Generator を扱えます。実際には音声信号を分ければいいので複数扱う必要はないのですが、ドライバとしてならこうあるベキかもしれません。

#Python
Icon of admin
 Python の VLC ライブラリで mp3 を再生するとタイムオーバーします。長さ30秒の音源が32秒くらいまでカウントされて終わるのです。mp3 はデータの前後関係から復号する圧縮データのためでしょうか。
 再生ポイントがズレてのことかと思いましたがお尻に無音が付くだけの様子。VLCの再生が終了していなくても再生秒数が長さ分になったことで終了と同じ扱いにしました。
 付け焼刃な対策ですが、wav などの非圧縮データでは起こらないことですから、厳密を求めたいなら mp3 などの圧縮データを使わなければいいだけ、、、とします。
 条件を織り交ぜた Play List で一晩連続再生しましたがエラーはありません。今後は頻繁な操作を続ける試験が必要です。

20230807085604-admin.jpg

#Python
Icon of admin
 現場が立ち合いだけだったので LTC Player を書き進めることが出来、音楽プレイヤーとして搭載予定の機能はほぼ入りました。この後は動作確認しつつバグ取りです。
 LTC を送出する LTC Generator の組み込みも考えましょう。LTCが組み込めれば全機能成立です。

#Python
Icon of admin
 LTC Player はかなり良い仕上がりです。機能をもう数種類搭載すれば音楽プレーヤーの部分は終わりかなと。
 主な課題は構造の整理ですが、細かいバグを潰しているためか負荷が減っています。特定の操作をするとファイルのアサインがおかしいバグがあったのですが、これを潰したところタスクマネージャー上の負荷が8%前後から4%前後に半減。余計なコマンドを1行消しただけなんですけど、重要な変数に破綻はさせないけどおかしな値を与えるものでした。プログラムは量じゃないと感じた一瞬ですね。

#Python
Icon of admin
 PySimpleGUI ですが、ウェジットの更新がかなり重い様子。
 大したことやってないハズなのに重いなぁ~と以前から思っていたのですが、内容が更新されていないウェジットまで毎フレーム書き直しをしていたことが原因でした。進捗の時間表示もありますので毎フレーム書き換えるウェジットはありますが、かといって全部やるこたありません。
 ウェジットをグループに分けて内容が更新された時だけ書き換えを行う様にしたところ劇的に軽くなりました。当然っちゃ当然なんでしょうけど、ナルホドなぁ~ってことでした。フラグを立てまくりですから書き直しは面倒でしたが、これだけ軽くなるなら手間の分の価値はアリです。
 気になってどうしても確認したかったのですが、オカゲで本業が遅れております。これはこれでヤバイ。

#Python
Icon of admin
 自作のポップアップウィンドウを作っています。
 汎用もあるのですが、ちょっと違うなぁ~って思いまして。

 ウィンドウを表示するだけなら簡単ですが問題は表示位置です。通常はモニタのセンターに表示されますが、ポップアップウィンドウは親ウィンドウの中央に表示したい。
 モニタのサイズ、親ウィンドウの位置やサイズは取得出来ますのでポップアップウィンドウのサイズがわかれば左上の位置は計算で出せますが、

 ・表示するとプログラムから表示位置の変更が出来ない。
 ・表示しないとウィンドウのサイズを得られない。

 といった制約のためナカナカ難しい。

 ならばと閃いたのが、テキトウな位置に表示してサイズを取得してすぐに消し、位置を計算して再表示するというもの。サイズ取得のための表示はタイムアウトを10msecくらいにすれば全く気になりません。
 進捗表示などはメインルーチンで進捗の更新しないといけませんが、関数側で表示まで行い、ウィンドウのステータスをメインルーチンに戻して進捗表示を進めます。処理が終わればメインルーチン側で close() を実行です。ウィンドウのステータスをポインタで返しているんですね。

 ついでに、親ウィンドウがモニタからハミ出した場合にはフルサイズになるようにもしてみました。

#Python

2023年7月 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 オフの今日は LTC Player のソースコードを整理しております。
 出来るだけ class 化しているのですが、慣れれば平文で書くのと大差ありません。書き上がったコードはむしろ読みやすい。VSCodeは折り畳みが出来たり、自分なりにわかりやすいと思えるコメント文を入れているのものありますけどね。
 メインのウィンドウの描画の再現まで完了しましたのでデザインの手直しにかかります。変更というよりは書いていなかったパラメータの追加が主な作業です。
 明日からは山積みの本業に手を付けないといけませんので進むかな?

#Python
Icon of admin
 バレエ発表会で道具だけ。転換は休憩の時だけなので緩い現場です。

 Python の記述エディタを VSCode に変更しました。
 インストールするべき拡張機能は次の通り。
1)Japanese Language Pack for Visual Studio Code(VSCodeを入れたらまず入れるべき拡張機能)
2)Python Extension Pack(拡張機能が3つ6つ入る。この中のPythonだけでもいいらしいけど、全部入れた方が便利だと思う)
 こんだけでいいならもっと早く使えばよかったなと。

 VSCodeはいいっすね。「オイラ便利だろ!」という主張がほぼ無くサラッと便利。
 軽いし、無駄な装飾は無いし、わかりやすいし、こんなバランスが良くてスマートなツールが microsoft 発祥とは意外だったりして。
 VSCode はお勧めです。

 LTC Player のソースコードを整理しようとしていますが、import した自作ファイルの変数の有効範囲などを改めて確認しています。スマートな記述のためには大事なことです。
 試してシミジミ実感したのですが、出来るだけ class で記述した方が可読性が高いですわ。

#Python
Icon of admin
 まだまだ途中ではあるものの使えるっちゃ使える LTC_Player で本業の音源チェックをしています。
 思いっきり自画自賛ですが、コレ、便利です。
 作った本人だからってのが81%くらいありそうですけど、こうやって実務で使うと完成イメージが具体的になります。
 今は設定変更のロックを機能別にしていますが、Play_Mode という括りで良さそうです。本番モード、リハモード、机上作業モード、プレイリスト編集モードって感じです。各種設定のロックの組み合わせがモードの違いとなりますが、機能単位でロックを掛けられるようにしていますので変更するのは簡単です。

 私のプログラムの書き方を整理しますと「状態を把握」「処理の振り分け」「パラメータとフラグの設定」「パラメータとフラグを見て最終処理」ってのを1フェーズ単位にして管理しています。バグが多く発生する書き方は処理を振り分ける際に一部の最終処理までしてしまう書き方だったので、幾重にも重なったふるいにかけて粉を落とすイメージでフラグを立て、最後に落ちて来たフラグを見て最終処理をするのです。その都度結果を求めると整合性を取るのが大変になり、それこぞバグの原因になるのでした・・・私の場合ですけどね。完全独学ですから王道の書き方なんて知りませんが、一本筋の処理フェーズしかないPICのアセンブラで染みついた構築の仕方です。ガチガチで汎用性が狭い感じがしますが、発展させると疑似的なマルチスレッドも構成出来ます。PICではタイマー1個でポーリングによる複数の時間分岐を得る書き方をレギュラー化していますが、これって精度は低いけどRTOSっぽくね?とか思いながら使っています。タイムスレッドと勝手に呼称している書式ですが、余程のレスポンスを求めないなら割込みを使わずタイムスレッドとモジュールの割込みフラグによるポーリング処理で複数の処理をPICの中で実現出来ています。特別なレスポンスを求める要素にだけ割込みを使い、高級言語で言うところの sleep を絶対に使わない方針です。
 ソフトウェアは時間の管理が一番大事だと思う今日この頃。適切に時間が管理されていればインプットもアプトプットも整合性を持って管理出来ます。

#Python #PIC
Icon of admin
 Table のカラム幅の自動調整で少し悩む。
 初期サイズからウィンドウ枠をドラックするサイズ変更を1回でもやれば問題ないのですが、初期サイズからいきなり最大化(フルスクリーン)するとカラム幅が期待値にならない。一見良いのですが全体的に平均的な幅になろうとします。
 ウィンドウサイズが初期値以下になると初期値に戻る機能を付けていたので、サイズ変更後にこの機能が1回余計に発動する騙しを入れたところ解決。上記のウィンドウ枠をドラックしてサイズ変更することが自動的に起こる様にしたワケ。ウィンドウサイズを変更をした後の画面復帰が少し遅くなりますが、頻繁に行われる操作ではないのでいいかなと。フラグを使えば起動後一回だけの動作に出来るので書き換えてみます。
 PySimpleGUI はこういった騙しみないなのを入れないと期待値を得られないことがあるようです。

 あと、列ごとに左寄せ、センタリング、右寄せの指定が出来ないのがシックリこない。
 調べたところ次のバージョンのPySimpleGUIでは対応するとのこと。GitHubにあるバージョンを手動インストールすれば今でも出来るらしいですが、pipで入手するにはもう少し待たなければならないようです。
 フォントの指定も列ごとに出来るといいのですけどね。

#Python

■当面の課題

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

編集

■複合検索:

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

■日付検索:

■カレンダー:

2023年8月
12345
6789101112
13141516171819
20212223242526
2728293031

■カテゴリ:

■最近の投稿:

最終更新日時:
2024年4月26日(金) 20時14分22秒