2026年 02月 01日

builderscon::3DP #1

からくりすとさん来るぞというので、ビタビタのターゲティングを勝手に感じ取り絶対に行くぞと思い行ってきた。大変良かった。

カメラ付きでアラート出すプリンタとか、マルチカラーのプリンタとか羨ましいと思いつつ、まあそこまで今のプリンタに不満ないんだよなという……


Fusion の派生機能を知らなかったので試してみたい。エクスポートしたときどうなるのか不安に思ったけど個別に書かれるらしい。


転職ドラフトのビールスポンサーすごいなと思った。なんとなく世の中景気悪いイメージだったけど少人数(5人から)から支援しているとのこと。

会場のアンドパッド案内板がおしゃれだった。関係ないけどビルのエレベーターがうちのリビンクの広さぐらいあり、でかすぎて怖かった。


からくりすとさん、よく知らないCADを使ってるなと思ってたけど、 Rhinocerosらしい。ある程度シミュレーションしてるのかな?と思ってたけど、「動かせないCADなのでからくり作るには向かない」と言っていてびっくりした。なんとなく動くだろうい頭のなかでやってるらしい。天才すぎる。

動画にはなってない実用品の3Dプリントも格好良くて良かった。ますますファンになった。

あとよく軸に使っている虫ピンみたいなの、なんだろうなと思ってついに直接訊いてみたら、真鍮釘とのこと。釘で調べたことなかった


あと小さい3Dプリンタの話、3Dプリンタは「大は小を兼ねない」という感じの話もしていて良かった。完全に同意見です。自分もVoron0.1気に入ってる。

2026年 02月 02日

Ossanのキマグレパーティ

Ossan.fm & キマグレエフエム 合同ファンミーティングに参加してきた。楽しくおしゃべりしました。

もともと ninjinkun の企画らしい。あいかわらず行動力たかくてすごい。

渋谷のタワレコのしばらくぶりに行ったけど雰囲気は変わらない感じ。1Fは推し活エリアみたいになってたけど。

というかとにかく渋谷がこわすぎて、ちょっと早めについたら居場所がなさすぎてタワレコに逃げ込んだという感じ。

アニメのポップアップストアとかアニメタイアップとかも多くて、なんかこのへんの融合がすすんでるなと思った

とにかく出不精が極まっていて、病的なというぐらいかもしれない。builderscon もファンミも行って酒飲むまで気がむちゃくちゃ重い。そして帰ってきてからしばらく気が重い。

イベントは行けば楽しいことはわかっていて、実際ほとんど杞憂なんだけど、この前後の気の重さがなあ……

2026年 02月 03日

続 Conformer モールスデコーダ

-11dB(2500Hz BW) ぐらいまで90%、-15dB で50%デコードぐらいまではきたけどもういいかな……

モデル構造もちょっと変えた。Signal Head とかを Conformer の途中から出すようにして、2層分の Conformer をCTC Head だけに使うようにしてみた。ただあんまり意味があるのかは…… Conformerの層ごとの寄与度的なやつを出してみたけど、ほぼ Conv。Attn が意外に最初のほうで使われていてよくわからない。

あと内部の次元数も半分(256→128)にした。あんまり変わらないみたい。もっと減らして深くしたほうがいいのかも。わからない。

200ms 分の推論がスマフォ(Pixel7)で20ms前後。ちゃんと実用的に10バッチ同時にやるとかできたら格好いいかもだけどそこまでのモチベがなし……


人間だと -15dB (2500Hz BW) までは完コピできるみたいな論文?がでてくるんだけど、絶対盛ってるだろと思う。100Hz のフィルタ入れて 15wpm ならなんとか多少聞き覚えのある単語がわかるぐらい。CQはわかるけどコールは聞きとれない。https://cho45.github.io/morse-decoder-2026/demo.html で -15dB 設定して聞いてみてほしい。

2026年 02月 05日

だいぶ体調が悪い

AGENTS.md 書くより README.md ちゃんとしろよという話じゃないか? と思っている…… 別にエージェント特有の指示とかじゃなくね?

ScreenToGifで最新のffmpegを使う

ScreenToGifはffmpeg同梱してるが、v4.4.1 とだいぶ古い。

PS C:\Users\cho45> C:\ProgramData\ScreenToGif\ffmpeg.exe
ffmpeg version 4.4.1-full_build-www.gyan.dev Copyright (c) 2000-2021 the FFmpeg developers

winget install ffmpeg

winget install ffmpeg

で簡単に入れられるので、フルパスしらべて

(base) PS C:\Users\cho45> Get-Command ffmpeg

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     ffmpeg.exe                                         0.0.0.0    C:\Users\cho45\AppData\Local\Microsoft\WinGet\Packages\Gyan.FFmpeg_Microsoft.Winget.Source_8wekyb3d8bbwe\ffmpeg-8.0.1-full_build\bin\ffmpeg.exe

これを ScreenToGif の設定画面で指定してあげる。

animated avif

Animated AVIF の出力選択はあるのだけど、ffmpeg が古いせいか avif への出力に失敗したので新しくした。

animated avif と AV1 +webm って何がちがうのかという感じはするが (コンテナが違うというのはそうだけど)

Claude の契約が切れてました。しばらく z.ai バックエンドで Claude 使ったり Kilo Code 使ったりしてみる。ただ GLM 4.7 は 100kぐらいコンテキスト使った時点でかなりアホになる上に頑固なのがつらい

hackrf-sweep-webusbの更新

盆栽。地味に自分でも定期的に使っており、自分で作ったやつの中では使用頻度が高い。ということで盆栽がて、いろいろ古かったのでなおした。

ひさしぶりに見たらHackRF One だいぶ高いね…… とおもった。

やったこと

Rust 環境アップデート・コードをまともに

  • edition 更新
  • テスト (rust レベル + node )
  • 実装修正
    • ゼロアロケーションに

JS側

  • Vue2 やめて Vue3 に
  • Vue Material やめて Vanilla CSS に
  • バンドプリセット

Google Antigravity使いはじめてみたけど、Gemini CLI とはレートリミットが別みたい。意味わからんかった

2026年 02月 06日

Google Antigravity がシェル履歴を汚染する

Antigravity はなんか普通にインタラクティブなシェルを起動するのだが、シェルの履歴がめちゃくちゃ混ざってうざいので以下の設定をいれた

if [[ "$TERM_PROGRAM" == "vscode" ]]; then
    HISTFILE=~/.zsh_history_vscode
fi
2026年 02月 07日

Android Chrome で WebSerial うまくいかなかった。Bluetooth 経由のシリアルポートは見えるのに、USBで接続したデバイスがなぜか一切表示されない。そして WebUSB 経由で自力で USB-CDC すれば接続できる。USB-CDC デバイスをOSで自動的に握ってないのか?

このあたりプラットフォームごとの差異がまだ大きくて普通につらさが多い。Windows は COM ポートとして完全にOSが排他的に握るので WebUSB 経由で USB-CDC はできない。macOS は open するまでは排他ではないようで WebSerial でも WebUSB でも接続できる。

教えてもらいました…… なんか当然サポートされているものだと思っていたけど、そもそも現状では Android で USB 経由の WebSerial はサポートされていないみたい。

耳は、鼓膜と耳小骨がテコと面積比を用いて音圧を約22倍に増幅することで、空気の振動を「液体(リンパ液)に浸かった神経回路」へ反射させず効率よく流し込み(インピーダンス整合)、過大音には筋肉でブレーキ(意図的なインピーダンス不整合)をかける、生体用の信号変換インターフェースです。

Dendrite/SQLite + Element を試す

セルフホストで Slack 的なものがほしくなったらどういう選択肢があるのか調べていた。なにやらよくわからないが Matrix (protocol) + Element (client) という選択肢をためした

サーバサイドは Dendrite https://github.com/matrix-org/dendrite という golang 実装をつかってみた。適当に起動して_matrix/ をリバースプロキシすれば使えた。

Dendrite/SQLite

ただ適当に Dendrite を起動するのが割とだるい。postgresql を強く推してくるので、SQLite で起動させようとすると結構大変。すごく細かくコンポーネントが分かれているけど、これらすべて同一DBファイルにできないらしいので個別に設定する必要がある。

--- dendrite-sample.yaml	2026-02-07 18:34:03.311159499 +0900
+++ dendrite.yaml	2026-02-07 19:26:53.227362555 +0900
@@ -10,12 +10,12 @@
 # Global Matrix configuration. This configuration applies to all components.
 global:
   # The domain name of this homeserver.
-  server_name: localhost
+  server_name: _.lowreal.net
 
   # The path to the signing private key file, used to sign requests and events.
   # Note that this is NOT the same private key as used for TLS! To generate a
   # signing key, use "./bin/generate-keys --private-key matrix_key.pem".
-  private_key: matrix_key.pem
+  private_key: /data/matrix/dendrite/matrix_key.pem
 
   # The paths and expiry timestamps (as a UNIX timestamp in millisecond precision)
   # to old signing keys that were formerly in use on this domain name. These
@@ -40,11 +40,11 @@
   # this section is populated then you can omit the "database" blocks in all other
   # sections. For monolith deployments using SQLite databases,
   # you must configure the "database" block for each component instead.
-  database:
-    connection_string: postgresql://username:password@hostname/dendrite?sslmode=disable
-    max_open_conns: 90
-    max_idle_conns: 5
-    conn_max_lifetime: -1
+#  database:
+#    connection_string: postgresql://username:password@hostname/dendrite?sslmode=disable
+#    max_open_conns: 90
+#    max_idle_conns: 5
+#    conn_max_lifetime: -1
 
   # Configuration for in-memory caches. Caches can often improve performance by
   # keeping frequently accessed items (like events, identifiers etc.) in memory
@@ -84,7 +84,7 @@
 
   # Disables federation. Dendrite will not be able to communicate with other servers
   # in the Matrix federation and the federation API will not be exposed.
-  disable_federation: false
+  disable_federation: true
 
   # Configures the handling of presence events. Inbound controls whether we receive
   # presence events from other servers, outbound controls whether we send presence
@@ -127,7 +127,7 @@
 
     # Persistent directory to store JetStream streams in. This directory should be
     # preserved across Dendrite restarts.
-    storage_path: ./
+    storage_path: /data/matrix/dendrite
 
     # The prefix to use for stream names for this homeserver - really only useful
     # if you are running more than one Dendrite server on the same NATS deployment.
@@ -149,6 +149,9 @@
 
 # Configuration for the Appservice API.
 app_service_api:
+  database:
+    connection_string: "file:/data/matrix/dendrite/app_service_api.db?_cache=shared&_journal_mode=WAL"
+
   # Disable the validation of TLS certificates of appservices. This is
   # not recommended in production since it may allow appservice traffic
   # to be sent to an insecure endpoint.
@@ -167,9 +170,12 @@
 
 # Configuration for the Client API.
 client_api:
+  database:
+    connection_string: "file:/data/matrix/dendrite/client_api.db?_cache=shared&_journal_mode=WAL"
+
   # Prevents new users from being able to register on this homeserver, except when
   # using the registration shared secret below.
-  registration_disabled: true
+  registration_disabled: false
 
   # Prevents new guest accounts from being created. Guest registration is also
   # disabled implicitly by setting 'registration_disabled' above.
@@ -177,16 +183,16 @@
 
   # If set, allows registration by anyone who knows the shared secret, regardless
   # of whether registration is otherwise disabled.
-  registration_shared_secret: ""
+  registration_shared_secret: "foobar"
 
   # Whether to require reCAPTCHA for registration. If you have enabled registration
   # then this is HIGHLY RECOMMENDED to reduce the risk of your homeserver being used
   # for coordinated spam attacks.
-  enable_registration_captcha: false
+  enable_registration_captcha: true
 
   # To use hcaptcha.com instead of ReCAPTCHA, set the following parameters, otherwise just keep them empty.
@@ -221,6 +227,9 @@
 
 # Configuration for the Federation API.
 federation_api:
+  database:
+    connection_string: "file:/data/matrix/dendrite/federation_api.db?_cache=shared&_journal_mode=WAL"
+
   # How many times we will try to resend a failed transaction to a specific server. The
   # backoff is 2**x seconds, so 1 = 2 seconds, 2 = 4 seconds, 3 = 8 seconds etc. Once
   # the max retries are exceeded, Dendrite will no longer try to send transactions to
@@ -274,8 +283,11 @@
 
 # Configuration for the Media API.
 media_api:
+  database:
+    connection_string: "file:/data/matrix/dendrite/media_api.db?_cache=shared&_journal_mode=WAL"
+
   # Storage path for uploaded media. May be relative or absolute.
-  base_path: ./media_store
+  base_path: /data/matrix/dendrite/media
 
   # The maximum allowed file size (in bytes) for media uploads to this homeserver
   # (0 = unlimited). If using a reverse proxy, ensure it allows requests at least
@@ -302,11 +314,17 @@
 
 # Configuration for enabling experimental MSCs on this homeserver.
 mscs:
+  database:
+    connection_string: "file:/data/matrix/dendrite/mscs.db?_cache=shared&_journal_mode=WAL"
+
   mscs:
   #  - msc2836  # (Threading, see https://github.com/matrix-org/matrix-doc/pull/2836)
 
 # Configuration for the Sync API.
 sync_api:
+  database:
+    connection_string: "file:/data/matrix/dendrite/sync_api.db?_cache=shared&_journal_mode=WAL"
+
   # This option controls which HTTP header to inspect to find the real remote IP
   # address of the client. This is likely required if Dendrite is running behind
   # a reverse proxy server.
@@ -318,7 +336,7 @@
     enabled: false
 
     # The path where the search index will be created in.
-    index_path: "./searchindex"
+    index_path: /data/matrix/dendrite/searchindex
 
     # The language most likely to be used on the server - used when indexing, to
     # ensure the returned results match expectations. A full list of possible languages
@@ -327,6 +345,9 @@
 
 # Configuration for the User API.
 user_api:
+  account_database:
+    connection_string: "file:/data/matrix/dendrite/user_api.db?_cache=shared&_journal_mode=WAL"
+
   # The cost when hashing passwords on registration/login. Default: 10. Min: 4, Max: 31
   # See https://pkg.go.dev/golang.org/x/crypto/bcrypt for more information.
   # Setting this lower makes registration/login consume less CPU resources at the cost
@@ -378,4 +399,16 @@
   - type: file
     level: info
     params:
-      path: ./logs
+      path: /data/matrix/dendrite/logs
+
+room_server:
+  database:
+    connection_string: "file:/data/matrix/dendrite/room_server.db?_cache=shared&_journal_mode=WAL"
+
+key_server:
+  database:
+    connection_string: "file:/data/matrix/dendrite/key_server.db?_cache=shared&_journal_mode=WAL"
+
+relay_api:
+  database:
+    connection_string: "file:/data/matrix/dendrite/relay_api.db?_cache=shared&_journal_mode=WAL"

Element

「サインイン」すると matrix.org が表示されているが「編集」するとカスタムできる。

「他のホームサーバ」にはドメインじゃなくて https://xxx.lowreal.net/_matrix まで入れる必要があった。

2026年 02月 08日

気分が重すぎる。

エントリ最後に投げ銭リンクをつけてみた (github経由)。こんなものに意味ねーことはわかってる、わかってるが……

NanoVNA-Web-Client の更新

https://github.com/cho45/NanoVNA-Web-Client

これまた Vue2 + Vuetify という構成だったのを Vue3 + Vanilla CSS に改修した。普通に大変だった。

Android App サポート (Capacitor) は完全に削除した。PWAでいいし…… しかしAndroidでWebSerialがうまくいかなかったりして案外つらい。WebUSBサポートは切れなかった。

テストがなかったのでこれを期にかなり書いたけど、LLMに書かせると本当にひどいしまともに mock できるまでに時間がかかる。ESMのimportの巻き上げとかを理解してない。まじカス

vite でビルドして成果物を github pages で公開するという形にかえた。もともと公開していたURLにはリダイレクトするだけのHTMLを置いた。こういうビルドシステム本当に嫌いだけどまぁもういいや…… メンテ不能になるのが嫌なわけだけど、きっと次メンテ不能になるころにはLLMがなんとかしてくれるでしょ……

まーーじでこんな1円にもならないことしててどうすんの

Hacking Reality with JavaScript: 7 Ways to Control the Physical World from the Browser

『JavaScriptから現実世界に干渉する7の方法: ブラウザでハードウェアをコントロールする技術』という本を書いた。これの英語版もKDPで出してみた。『Hacking Reality with JavaScript: 7 Ways to Control the Physical World from the Browser』とちょっとタイトルかえた。翻訳自体は Gemini CLI。まぁないよりはいいだろう…… どうせ日本語版も対象読者が狹すぎて売れないし、あってもなくても同じならあったほうがマシだろう

本文中の図は基本的に全部 matplotlib で書いてあるので、そこも全部翻訳して生成しなおしつつ、サンプルアプリは簡易的な i18n 対応をした。

2026年 02月 09日

投げ銭もらった〜 ありがとう〜

追加で2冊ほど翻訳版をKDPに出した

https://github.com/cho45/pitch-detector をなおしてたけどだいぶ時間がかかった。LLMにアルゴリズム書かせるの無理じゃない?

確定申告をした。Gemini Pro にいちいち「ここはどうする?」と訊きながらやってみたが独りでやるよりはマシな程度か。普通に嘘つかれるから心配。

年末調整で iDeCo の処理をやってしまうとなんかややこしい気がしている。マイナポータル連携すると源泉徴収票と iDeCo がどっちも取り込まれるけど、そのまま何も考えずに全部チェックしてすすめると控除がダブルカウントされる。「源泉徴収票の社会保険料の修正+iDeCo XML」にするか「iDeCo XMLを取り込まない」の2択?

2026年 02月 10日

なんかチマチマいろんなことをしてるつもりだったけど金になりそうなことはまったくしてなくて悲しくなっちゃった

2026年 02月 11日

アンチグラヴィテーまったく日本語でやりとりしろという指示をきいてくれなくて疲弊する。毎タスクで指示しなおしてる…… つらい

モールスデコーダwpmによるSNRの悪化

まだいろいろいじってしまっていた。10-40wpm を学習するようにしたり (文字単位で学習頻度が一定になるような確率補正をいれている)、データジェネレータをリファクタリングしたり。

評価手段の1つとしてwpm(送信速度)ごとのSNRパフォーマンスを出すようにしてみた。今までは 15wpm 固定で評価していたので、学習の偏り (過学習) になっていないかちゃんと評価できていなかった。

理論的には速度が倍なら3dB分のディスアドバンテージがあるはずだけど、CER=10%の線を見ると、10wpmで-12dB、20wpmで-10dB、30wpmで-8dB、40wpmで-6dB程度となっている。

  • 10wpm → 20wpm は理論値より悪化がすくない (2dB)
  • 20wpm → 40wpm は理論値より悪化が多い (4dB)
2026年 02月 12日

アンチグラヴィテー、プラン立てさせたあとレビューしてるとき合意してないのに勝手に実装にすすむ……

モールスデコーダのストリームデコードテスト

チマチマ表示されると可愛い

2026年 02月 13日

深夜特急 (tayori)

最近ずっと聞いてる。

Invoker Commands API こんなんできてたんだ。Baseline 2025。カスタムコマンドはバブリングしつつ e.target が commandfor で示した要素になるのがうれしいかんじか

とにかく元気がでない

2026年 02月 16日

ONNX Runtime Web の `ort.env.wasm.proxy` と `numThreads` は軽い推論では効果が薄そう

軽量なモデルの推論だと ONNX Runtime Web のマルチスレッド化の恩恵は受けれないという理解してるけど、どうするのが正解か考えている。

ort.env.wasm.proxy で Worker 化しても Session が1つだと1コアしか使えないよな、と思ってなんかいろいろ複雑なこと考えていたけど、ふと思うと単に Session 複数にすれば一番重いところはオフロードしてできるのか? → これはできなそう。プロキシ用のワーカーはグローバルに1つしか作られないっぽい。numThreads に応じてそこからさらに分岐するっぽいが

ということで、基本的に ort.env.wasm.proxynumThreads は重い推論の分散化だから軽量なモデルの大量推論にはあまり有効ではなく、そういうことをするなら自力で複数 Worker + Session 分離の仕組みを作らなければならない。

リアルタイム推論での複数同時推論の設計の方向性

リアルタイム前提のモデルの場合、推論時間はリアルタイム性に対して十分余裕があるぐらい軽量に作ってあるはず (100ms分の推論が10msで終わるというような)。これを複数同時にCPUコアを活用して行いたい。

この場合 90ms 分が余裕時間なので、以下のようなのが理想の状態

  • ワーカー数 m: できるだけ少なく〜最大でコア数 (2〜4)
    • onnx の session の数になる = モデルのコピーが m 個分必要 = メモリ必要量の増加
  • 処理数 n: 1つのワーカーに複数のストリーム(推論リクエスト)をコンカレントに(多重に) 流し込む。
    • ジッターを考えるとどのぐらいが適切かわからないが 100ms 分が 10ms で終わるなら5つ(50ms = 50%) ぐらい詰めこんでもいいか?

ort の session の初期化は結構重いので、ワーカー数はあまり増やすと初期化のコストが全然無視できない。なので1つのワーカーでできるだけ多くのことをしたい。そして session 自体はステートレスなので別々の推論ストリームを流しても大丈夫 (モデルの入力としてステートを渡すのが普通なので)

ワーカー数でパラレルにしつつ、リアルタイム余裕分をコンカレントに実行させる。

memo

let proxyWorker: Worker はモジュールレベルで定義されて使いまわされている

numThreads SetGlobalIntraOpNumThreads(numThreads) numThreads は Intra-Op (演算内のオペレーション) の並列化

Python だと inter_op_num_threads があるようだ Web にはないっぽい。

interOpNumThreads 自体はあった。This setting is available only in ONNXRuntime (Node.js binding and react-native). なので Web では使えない。

月次の家計簿診断もLLMにやらせてみたら、Claude とか Adobe Photo Plan とかを事業経費に分類してたのが気にくわなかったみたいで「それで稼いでるわけじゃないんだろ? だったら趣味か教養だろ」と怒られた…… そんなひどいこと言わなくても……

モールスデコーダの並列推論

ONNX Runtime Web の `ort.env.wasm.proxy` と `numThreads` は軽い推論では効果が薄そう ということで独自にワーカー化して分散推論させるようなものにしてみた。動画だとメイン周波数 (シグナル履歴がでているやつ) で占有ワーカー1つ、ほかサブ周波数 (デコード結果だけでているやつ) が16本まで推論する。

↑ のエントリに書いた通りリアルタイム性としては余裕があるので、1つのSessionで複数の周波数のデコードを順次行う(コンカレント)のを、複数の Worker で同時に行う(パラレル)

  • ワーカーごとに ONNX Runtime の Session を持つ (モデルのコピーをもつ)
    • session 自体はステートレス
  • ワーカー内で「スロット」という概念で特定の周波数のデコード状態を持つ
    • attention とかもろもろ。外に出す必要がないのでワーカー内で閉じる

普通に実装するだけなら難しくないんだけど、クリックしたとき遡って再デコードという機能を入れた結果割と面倒くさい。結局再デコードを伴うという特殊性からメインの推論はこのワーカー分散の仕組みには入れず、単体で ort.env.wasm.proxy = true によるワーカー分離をしている。

2026年 02月 17日

LLMエージェント自体はめちゃくちゃいいのだけど「レビュー不要!」みたいな楽観的なやつ見ると意味わからんなと思う。出力されたコードが伝えた要求を満たしているか確認する能力がないだけでは? と思う。

いちいちすべてサボろうとするし実装をTODOみたいにコメントだけ書いて終わらそうとするし、設計能力は本当にないし、言わないとテストもろくに書かないし、些細な(まさに人間がやるような)変更漏れも多いのに? 本当にエージェント使ってんの? 何やらせてんの?

iijmio の契約をまとめようとしている

as-is:

  • 自分: 音声SIM (メイン)
  • 自分: SMS SIM (子ども用)
  • 妻: 音声 SIM (メイン)

で一切家族割の恩恵を受けられていない

to-be:

  • 自分: 音声SIM (メイン)
  • 自分: 音声SIM (子ども用) ← 音声SIM契約 & SMS SIM 解約
  • 自分: 音声 SIM (妻のメイン) ← 名義変更

で、子ども用の音声SIMの追加契約をしている。追加契約中だと名義変更の受け付けを拒否するようで順番にやる必要があるぽい。

住所にローマ数字が入っていると iijmio の本人確認アプリで住所不一致で失敗する

端的に: eKYC (ウェブ認証というやつ) でやれば良い

あとのメモ

本人確認の前提:

  • iijmio の本人確認アプリはマイナンバーカードを読みとるタイプ。
  • 登録住所とマイナンバーカードの住所を突き合せて完全一致(?)を見ている

特殊な前提:

  • 正式な住所 (マイナンバーカードに入っている) にローマ数字が入っている

問題点:

  • iijmio の登録住所にはローマ数字を入れることができない (バリデーション違反) なので Ⅴ vs V とか Ⅳ vs IV と「似てるけど違う表記」書く必要がある
  • 本人確認アプリを使うと住所不一致でハネられる。何度やってもだめ


eKYCのほうがそもそもアプリ入れる必要もないし、処理が遅いとかもないので、本人確認アプリ使うメリットがそもそもなさそう

2026年 02月 18日

uutransfer-tmux-v2

https://github.com/cho45/uutransfer/blob/master/uutransfer-tmux-v2

ちょっとだけ賢い v2 を作ってみた。

uutransfer とは何か

ごく稀に scp が直接通らないが ssh ができるホストからデータをひっぱってきたいときがある。(例: 多段プロキシなどややこしいホスト)

こういう場合に、既にある tmux セッションを利用して、ファイルを手元に持ってこようというのが uutransfer。scp よりかなり効率は悪いものの手軽にリモートファイルを手元に持ってこれる。要はコピペでがんばって転送するのを自動化している。

uutransfer-tmux-v2

従来は

  • uutransfer 1 で uutransfer の待受実行
  • openssql ... など適当なコマンドをリモートで手動実行

という2ステップ必要だったのを、単に

uutransfer-tmux 1 foobar.log

でいけるようにした。

やってること

  • tmux send-keys をより活用するようにした。ワンライナーをインジェクトするような感じに
  • 圧縮→base64 するようにした
    • メインの想定はログファイルとかなので効率良くなったはず