27-Jul-2026
[折角なので]

以前作ったkisstun/sliptunの、スレッド処理に問題がないかGoogleのAIモードにレビューしてもらいました。pthread_cancel(3)を使うのは止めておけという話もありますが、kisstun/sliptunについてはこれを使わざるを得ないために使います。また、今まではtun/tap→シリアル/ソケット側だけスレッド化していましたが、シリアル/ソケット→tun/tap側の処理もスレッド化して、do_main()ではどちらかのスレッドが止まったら処理を抜けるという作りに変えようとしています。

pthreadによるスレッド分け、μITRONにおけるタスク分けとは違った癖がありますね。考え方は近いとはいえ、用意されている同期・通信用APIが違うので(μITRONのように豊富に用意されている環境に慣れてしまっていると)「どうやるのこれ…」と悩んでしまいます。

頭を抱えることといえば、NB100(いつも仕事場に置いてあって、昼休みに電信の受信練習で使っている)、液晶のバックライトが壊れたのかまともに使えない状態になってしまいました。マシンを持ち帰って液晶のコネクタを刺し直したら動くようになったのは良いのですが、交換用の液晶、オークションで買っちゃったんですよね。どうしましょう、これ…56.7kg(22:45)

20-Jul-2026
[特に意味は無いのですが]

最近の電信の受信練習、使うんだか使わないんだか分からない機能を使っています。謎機能はトーンの周波数に対しても有効なので、-t 600,900とすると600〜900Hzの間の適当な周波数で鳴ります。練習の度に周波数が変わるので飽きないんじゃないかな、多分。こうなると波形のタイプをランダムにする機能も実装したくなるのですが、これについては種別の指定が面倒そうなので(全種類の中からランダムでも良いのかもしれません)現状では何もせず、鋸波の音に飽きた時にどうするかも考えます。

文字間は、135msを目安にして練習しています。25WPMなら2.8点、22WPMなら2.5点くらい。基準となる、短点の長さが同じでもだいぶ速く感じますし、一分間当たりの文字数もちょっと増えます。これが効果的な練習になるかは分からないものの、現実において送信者がきちんと文字間3点を守ってくれる保証もないので、多少詰まった符号でも怯えない訓練は必要かなと。

最近は、欧文がボロボロになりがちです。特に、実際の文字の出現率に合わせた乱文において。なんというか、文字間を短くしたところで文字に反応できても、符号の鳴っている間に文字を書き切れないとかうっかり書き間違えた場合は消している間に数文字落とすとか、そういう状況です。出現率一定の5文字暗語でもその傾向が多少減る程度で、まだ和文の方が取れている?感じです(同じ短点長でも符号構成の関係で相対的に遅くなるからなのですが)。とはいえ、和文についても文字の出現率に応じた乱文を作成した場合はどうなることやら。

OpenBSDでrtl-tcpがちゃんと動いていない、どうも受信データを流すbulk pipeが動きまくっていると周波数変更等のコマンドを送るcontrol pipeが詰まるみたいだ、ということでrtl-tcpの再実装(rtl_tcp_sync)を勢いに任せてやってしまいました。とはいえ、Experimenting with RTL-SDR on NetBSD 10という先行事例、あったんですね。これはrtl-tcpにパッチを当てて、rtlsdr_read_sync()の後にrtlsdr_callback()を呼び出すworkerスレッドを作ることでうまくsync read化しています。sync readの隙間にrtlsdr_set_center_freq()等の制御を挟み込ませてもらえるかは分かりませんが、多分大丈夫なのでしょう。コードを書く前に、最初にこっちを試せば良かったか。

rtl_tcp_syncは、rtl_tcp.cを参考に書き直した物をGoogleのAIモードに食わせてレビューしてもらうというスタイルで作っています。反生成AI派からすれば、レビューしてもらおうがAIにコードを書かせようが、AIを関わらせる時点でお前の手で作った物じゃねえだろと恰好のサンドバッグになりそうですが、そもそもrtl_tcp_syncはrtl-tcpの焼き直しなので最初っから自分の物ではありません。自分にしては珍しくGPL-2.0にしているのも、rtl-tcpのライセンスに従ったからです。

AIのレビューは本当に強力で、不慣れなpthreadの扱いについての意見をもらえるとか(実は13-Jul-2026の日記もこれに絡んだものだったりします)、rtl-sdrが有名なOSSということもあり原典との比較もやってもらえるのは非常に助かりました。これ、自分一人だと目視のチェックだけで相当の時間を使ってしまいますし、スレッド絡みの厄介なバグを作り込んだかもしれません。

ただし、AIを使うならAIではなく「自分で」書いたコードを主体にしたいと思っています。AIにコードを書かせるとしたら、std::scoped_lock lock{m_mutex}をデッドロックさせるサンプルコードのような、ちょっとした動作検証用の物を任せたいです…そのコードが何をやっているか、自分自身で把握したいというのがありますから。コードを書くことが仕事ではなく趣味になったからそう言えるのかもしれませんけどね。

20日ないし21日恒例の、JMHの電波予報。前回は21-Mar-2026。周波数はいつもの13MHz帯。

t20260720.jpg

一年前の20-Jul-2025と比べると、00:00〜03:00, 15:00〜18:00(JST)の状況が少し異なっています。57.4kg(22:15)

13-Jul-2026
[うむむ]

GoogleのAIモード、対話していると結構時間を吸われますね。自分の立ち位置がどの辺にあるのか、AI(が集めてきた種々の情報)越しに見つめるのはなかなかに面白い。とはいえ、そればっかりやっている訳にもいかないのです…

OpenBSDでDeskflowが動かなくなっていた問題、std::scoped_lock lock{m_mutex}の範囲を見直すPRを投げて無事マージされました。これに絡んで、以前作ったsliptun, kisstunのスレッド回りの見直しをしています。

どうもイマドキの(マルチプロセッサ環境における)プログラムのお作法では、複数スレッドで共有するフラグの操作を行う際はメモリバリアをうまく使わないとダメだそうで、全然そうなっていない以上は何とかしないといけないかなと。C++なら<atomic>を使えば良いようですが、Cなのでposix_mutex_lock()/〜unlock()の便法で逃げることを考えています(<stdatomic.h>の使用はちょっと不安なので)。57.2kg(22:30)

05-Jul-2026
[LM Studio触ってみました]

ここのところ、Wordleの反省会を日夜GoogleのAIモード(Gemini系ではないと言われているのでこう書くのが適当そうです)相手にやっています。これと会話をしているうちに、手元のマシンでLLMを動かせるのかどうかが気になってきたので何か試してみることにしました。

手元にあるのはIntel Arc A770の8GB物。この程度でロクなものは動かないだろうと諦めていたのですが…LM Studioを起動した際にお勧めされたGemma4 E4B(gemma-4-E4B-it-Q4_K_M.gguf)が割とイイ感じに動きます。速度も30token/secとかなり快適です。GPUの支援を切ると3.5token/secまで遅くなりました。

サイズが小さく速度も速いと言われる、LFM2.5-1.2B-JP-202606(LFM2.5-1.2B-JP-202606_Q8_0.gguf)も試しています。ごくごく簡単な問いであればこれでも十分に役立つ場面があるかもしれません。速度も140token/secと速いです。こちらはGPU抜きだと24token/secくらい。

昨年末からHP OmniBook 5 16-ag(AMD Ryzen AI 5 340/RAM 16GB)が家にあるので(自分が使うマシンではありません)、こちらでも試してみました。LM Studio + Gemma4 E4Bで、GPU支援ありで6token/sec。LM Studioの代わりにLemonadeを使うことで12token/secまで上がりましたが、残念なことにどちらもNPUは使ってくれません。

Copilot+PCの要件にNPUが挙げられているとはいえ、幅広いアプリケーションでNPUを活用するようになるまであと1〜2年くらいの時間が必要そうに思いました(根拠の無いただの想像なので、どこまで当たるかは分かりません)。あと、VRAM 16GBを載せたGPUでもう少し大きなモデルを動かしてみたくなります…流石にメモリ価格の高騰もあり、手出しはできませんけど。57.0kg(22:10)