2022-06-28 (火)
なんだか疲れている.あと,時間が欲しい.
この日記はフィクションです.登場する人名・団体名・地名・職業などはぜんぶ架空のものです. なので実際のものとは何も関係がありません. それから,写真のように見える画像はCGもしくは念写によるものです.
なんだか疲れている.あと,時間が欲しい.
喉が痛いけど,風邪なのか,単に久しぶりにたくさん話をしたせいなのか分からないな.
だいぶ前に深センに行ったときに買ったLEDディスプレイ付きのバックパック,そのうち触ろうと思ってたのだけど,WiFi無いと何もできない上に当たり前のように技適マークも無いので,日本で合法的に電源を入れることができない...
2年以上放置してたけど,何もせず捨てるのももったいないのでESP32で動かしてみる.
パネルの裏側.
LEDはSM16207SとTC7258というICで光らせているっぽい.他にはSM245TSというのが見えるけど,ただの3ステートバッファだった.
データシートや回路を見ながら調べると,HUB75というLEDディスプレイパネルで使われる一般的なインターフェイスだった.簡単に使えそう.
「HUB-75規格」という説明たくさん見つかるけど,規格の仕様書や,そもそも誰が策定した規格なのかよくわからない.
コントローラっぽい基板を剥がす.CPUはGD32F105という Cortex-M3 が載っていた.思ったよりハイスペック.WiFiモジュールは,AFW121Tというやつ.こっちも Cortex-M4 が入っている...遊びたいけど日本で使えないのが残念.
剥がした基板の代わりにESP32をつなぐ.
HUB75のパネルはフレームバッファ的なものは持ってない単純なものなので,駆動するためにはデータを送り続ける必要がある.ESP32でもWiFi通信しながらだと厳しい.何か良い方法がないか探してみたらI2SのDMAを使ってHUB75のパネルを光らせてるライブラリが見つかった.
https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA
動いた.一箇所欠けているように見えるけどLEDが壊れてるわけじゃなかった.青色だけずれやすいので信号のタイミングがまずいのかも.
調べながら試行錯誤したのもあるけど,光らせるだけで2時間近くかかってしまった...
すごく久しぶりにオフィスに行くなどする.
LinuxのACLの仕組みよく知らないのだけど,ファイルのアクセス権をACLで設定していると,dockerコンテナ内からホストのディレクトリを参照したときにACLの情報読めないっぽい?.許可されているUIDのプロセスでもパーミッション情報自体が読めないみたいで,root以外で動いているプロセスがファイルにアクセスできないことがある...chmodしておけばよさそうだけど避けたい.
日付を扱うコマンドは TZ=JST-9 形式のタイムゾーンを指定ができること多いけど Go のtimeパッケージはいきなり /usr/share/zoneinfo/ 以下のファイルを読みに行って,見つからなければ問答無用でUTCになる.小さいDockerイメージだとほとんどの場合は/usr/share/zoneinfo/とか無くてタイムゾーンを変更できなくて困る.
tzdataをimportしておくか,サマータイムとか分単位の時差とか気にしないなら,適当な場所でtime.Localを設定してしまうのが手っ取り早いのだけど...
fixedtz := os.Getenv("FIXED_TZ") // e.g. "JST-9" if p := strings.LastIndexAny(fixedtz, "+-"); p >= 0 { offset, _ := strconv.Atoi(fixedtz[p:]) time.Local = time.FixedZone(fixedtz, -offset*3600) }
風邪っぽい.
Google Apps時代からずっと無償版を使っていたGoogle Workspace,今後有料プランだけになるから支払情報を入力してってメール来てたけど,個人利用だと今後もまだ無料で使えるのか.ただ,2つあったドメインのうち,あまり使ってないほうのアカウントを先月消してしまったばかりだった…….
cron+適当に作ったWebUIで色々実行している処理をどうにかしたくて,ワークフローエンジン探してみる.たくさん見つかって迷うけど,試しにDaguを使ってみる.
最近はAirflowを使っておけば無難みたいな雰囲気があるけど,あまりPython書きたくないのとAirflow自体が大きすぎて躊躇していた.いろいろな事情でクラウド上で実行しにくい処理を部屋のNASの片隅で動かしていたりするのも移行したいのだけど,メモリ2GBしかないのでメモリを数GB使うようなやつは困る.
DaguはGoで実装されたシングルバイナリのツールでメモリもあまり食わなそうなのが良さげ.
まだ様子見中だけど,本格的に使うには足りないものが多いような気もする.ただ作りもシンプルなので,カスタマイズやデバッグはしやすそう.
Docker内で動かすので,REST API経由で操作したいけどREST APIからはワークフローにパラメータ渡せなかった.これは簡単に対応できそうなので適当に書き換えて使う.
一つのyamlファイルが1つのワークフローに対応していて,他のワークフローを呼び出したりできないように見えるけど,タスク内でdagu startコマンドを実行すれば良さげ?
悩ましいのが,1つのワークフローは同時実行できない.複数起動したり,前回の処理の完了を待たずに実行したいのだけど,前回の処理が動いていると単に失敗するのでポーリングしないといけない.
20時過ぎに寝る生活をしている..
https://github.com/binzume/modelconv
glTFでunlit以外のmaterial extensionsを使いたくなったので対応しておく.ついでにvolumeやiorも入れたけどthickness mapの生成は面倒くさそう.早くリアルタイムレイトレーシングが主流になってほしい.
Visual Studioのソリューションを生成するとき,Premakeを使ってるのだけど,依存しているものをインターネットからダウンロードしてきてzip内の特定のファイルを特定のディレクトリに配置するみたいなのは,あまりシンプルに書けないな…….CMakeの代わりとして使うには良いのだけど.
Goのpackage,importしただけでinit()内でパッケージ外に何か影響を与えるものがあるので困る.
例えば,画像のデコーダとかをimportすると自動的にimage.RegisterFormat() されるものが多いけど,image.Decode() に影響を与える上に Unregister はできないっぽい.単純にデコーダだけ使いたいときはRegisterFormatしないパッチを当てたパッケージを作るしかなくて,https://github.com/ftrvxmtrx/tga に対する https://github.com/blezek/tga とかを探すはめになる.