最近の出来事

2026/06/07

AM中に起床。

掃除したり洗濯したり。

Emacs 31.1向けにパッチの内容を思い出したり。 何気に1年ほど前から対応を始めていたので、色々忘れてしまっています😓。

2026/06/06

AM中に起床。

転院手続きにお出かけ。ほどなく完了。

そういえば Fedora44 へのアップグレードの案内が出てたなと思い出したり。 Emacs 31は Fedora43 には来ないかもな?と思ったので VirtualBoxの Fedora43を 44にアップグレードしてみたり。 時間がかかったのは 43のイメージを念のためクローンして 44のベースを作ってからアップグレードする このクローン実行だったりしましたが。さておき、ほどなくしてアップグレード終了。

すっかり忘れていたのですが、Emacs 31では *.elに 「; -*- lexical-binding: t -*-」というコメント内 キーワードが無いとワーニングメッセージが出ます。Cygwinでビルドしている Emacs 31向けには対応したのですが (以前のメモ)、これやらなくちゃダメなのか.....。 面倒くさかったので、シェルスクリプトを作って対応してみたり。一回使ったら終わりなので効率が悪い🥺。

全く気付いていなかったのですが、VirtualBoxのFedoraから環境変数DISPLAYを設定して、 ローカルPCの VcXsrv で画面を出そうとしたところ、gimpコマンドがPATHに無いなぁ?と思ったり。 VirtualBoxのグラフィック画面のアプリメニューには存在するし、起動もできるのでどうなってんだ? と思い、GoogleAIに聞いてみたら 「Fedoraでは標準的にインストールされるGIMPはFlatpak版(コンテナ化されたアプリ)であることが多く、 通常のコマンドとは実行方向が異なります。」という回答が返ってきました。 「flatpak run --env=DISPLAY=ローカルPCのIPアドレス:0 --socket=x11 org.gimp.GIMP」 みたいな感じで実行すれば良いらしいのですが、VirtualBoxのGUIコンソールからはログアウトしておかなくては ならないみたい。GUIコンソールでログインしていると、DISPLAYで画面を出す先を指定しているにも関わらず、 GUIコンソール側に画面が出てしまうようです。なんでだよ?🤔 「flatpak list --app」でflatpakアプリの一覧を表示する事ができるようです。

2026/06/05

テレワーク。早めに終了。

Emacs 31.0.90 pretestがリリースされていたり (Emacs 31.0.90 pretest is available)。 なんか今回は早い気がする。

31.0.60のパッチをあてて 31.0.90をビルド。特に問題なくビルド完了。ちょろっと触ったところでは問題無し。 まあ、31.0.60で問題無かったのだから問題無くて当たり前かもしれませんが。 29の時は29.0.90からは順調に3ヶ月くらいでリリースされたので、それくらいで出る事を期待したいです。 ただし、29はブランチができてから29.0.90が出るまでにめちゃくちゃ時間がかかりましたが。

2026/06/04

テレワーク。早めに終了。

Ollama。今日見たらv0.30.4が出てたのでアップデートしてみたのですが、 やはりqwen3.6:35bは無理やりGPUで動こうとしている為か、全く反応できる様子も無ければ Windows全体がスローダウンしている感じになるのも変わらず。 他のモデルだとGPUで動けたり、CPUで動いたりとなっているようなので、今のところqwen3.6:35bだけが 変になっているように見えます。

GoogleAIに gptelで ollamaにGPUの使用をコントロールする方法を聞いてみたら、 「:request-params '(:options (:num_gpu N))」というプロパティを追加すればコントロールできるという回答が 得られました。Nの値を0にすればGPUを一切使用しない動きになるのですが、1以上の値のレイヤーを GPUに割り当てるという動きになるそうな。qwen3.6:35bは 40レイヤーあるらしいのですが、 半分よりもちょっと減らした18くらいにすると、GPUのメモリをちょっと手加減した割り当て量で動作するようです。 ともあれ、応答無し状態&スローダウン状態にならずに応答が返ってくるようになったので、 しばらくこれで様子見しようと思います。 qwen3.6:27bもこれで調節すれば動くようだったので、一応調節して使えるようにしてみたり。

2026/06/03

テレワーク。早めに終了。

Ollamaの更新が3週間ほど無かったのですが、v0.30.0がリリースされたと思ったらv0.30.2が直ぐに リリースされてました。また高頻度リリースに戻るのかな?
v0.30.2にアップデートしたところ、qwen3.6:35bはこれまでCPUで動いている感じだったのですが、 無理やりGPUで動こうとしているようで、画面操作に影響が出るようになりました🥺。 これまで、qwen3.6:27bがGPUで動こうとして画面操作に影響が出る感じで使い物にならなかったのですが、 安定していたqwen3.6:35bでダメになったのが辛い。

2026/06/02

テレワーク。早めに終了。

台風。順調に向かっているな。明日の関東地方は一日荒れそう。 ところで台風の絵文字「🌀」ですが、Windows11の Fluent Emoji はデザインが雑過ぎない?

2026/06/01

テレワーク。早めに終了。

Emacsのartist-modeのメニューにSquareという正方形を書くと思われる描画ツールがあるのですが、 マウスで使ってみると 長方形を描くRectangleと同じ挙動をしたので なんだこれ?と思ったり。 キーボードでカーソル移動すると始点座標と終点座標との差で幅か高さの大きい方が採用されて 確かに正方形描画っぽく動くようです。マウス指定時のバグだろうか? あと、正方形とは言っても文字数で数えた時のサイズなのですが、フォントは縦長なので 「3桁×3行」という正方形を描いたつもりでも見た目は正方形ではありません😓。これはこれでいいのか?

どうやら Rectangle描画で、Shiftキーを押しながらマウスドラッグすると Squareモード の挙動(長い辺を採用する)になるようです。メニューにわざわざ足すんなら、Shiftキーを押した 挙動にすべきなようには思います。因みに、直線ツールや円ツールでもShiftキーを押すと 挙動が変わるようなのですが、それらについてはメニューには追加されていません。 なぜ正方形だけメニューに追加しているのか謎。

2026/05/31

AM中に起床。

掃除したり。エアコンのフィルターを掃除してテスト稼働....というか本番稼働だな😓。

調べごとをしたり、実験をしたり、ぐうたら過ごして終了。

2026/05/30

AM中に起床。

通院。

再変換。合字の絵文字を含んでいた場合に再変換が変になる場合があったのを修正してみたり。 再変換に食わせる事ができる文字列の長さには上限があるのですが、上限の境界に合字の途中や サロゲートペアがまたがるような場合に変にならないようにしたつもり。

Emacsのmasterブランチを git pullしてみたら、artist-mode用にツールバーアイコンが登録されているようだったり。 普段はツールバー表示していないのですが、表示してみたらグラフィックツールのような感じで表示されました。 でもこれ、Emacs 32.x 向けになるんだよなぁ。新しい機能だけど全体に影響する訳ではなく、 互換を損なうようなものでなくても、恐らく何か更新されるわけでも、厳重にテストされるわけでもないまま、 2年くらい ただ寝かされるだけって感じになるだろうと思うのですが、「それって何の時間?」と毎度思います。 単に、ある新機能がいつ頃コミットされたか知っているからそう感じるだけなのだろうか?🤔

2026/05/29

テレワーク。早めに終了。

Copilot Keyboardのアップデートが来たり。4月に正式リリースされてから更新頻度が下がるかな? と思ったのですが、今回はまだ1ヶ月のリリースサイクルにあるようです。 という訳で入れてみたり。再起動が必要なのはこれまでと変わらず。
Windows Blogsには更新情報が公開されているようです (Copilot Keyboard — GA 後はじめての大型アップデートをお届けします)。

前回から変わった点や新規追加案件、思ったことをメモっておこうと思います。


マウスによる予測候補の削除がサポートされたのですが、サポート前に キーボード操作でできる事を知った (以前のメモ) 今となってはそちらの方が便利になっています😅。 あと、クリップボードにコピーするとキャラクターがそのことを知らせるようになった? 反応するものとしないもの/反応する場合としない場合があるみたい。 ただ、吹き出しをクリックするとクリップボードの内容をWeb翻訳しようとするので、 セキュリティー的な点は気を付ける必要があるかもしれません。 設定で無効化することはできないみたい。

2026/05/28

テレワーク。気持ち早めに終了。

「クジマ歌えば家ほろろ」のアニメ。おもしろくて観てしまいます。 クジマの独特のしゃべり方は あまりにもハマり過ぎているように思うのですが、 漫画原作を知っている人にはどう聞こえているのだろうか?

そういや、「数独」って解けるのかしら?と思い、Emacsのsudokuアプリで生成した問題を gptel+Ollama(qwen3.6:35b)に食わせてみました (思い付きで実行したので、時間は結構かかりましたが具体的にどれくらいかは見てませんでした😓)。

* ** 以下の「数独」問題の答えを考えてください。
+---------+---------+---------+
| -  -  3 | 8  9  - | -  4  5 |
| -  4  - | -  -  - | -  -  - |
| -  -  2 | 3  4  1 | -  7  - |
+---------+---------+---------+
| 2  -  6 | 5  -  - | 9  -  - |
| -  1  9 | 4  -  8 | 5  6  - |
| -  -  4 | -  -  3 | 7  -  2 |
+---------+---------+---------+
| -  9  - | 7  5  6 | 4  -  - |
| -  -  - | -  -  - | -  9  - |
| 4  8  - | -  3  9 | 1  -  - |
+---------+---------+---------+


ご依頼の数独パズルの解答は以下の通りです。

#+begin_src
+---------+-----+-----+
| 1  7  3 | 8  9  2 | 6  4  5 |
| 9  4  8 | 6  7  5 | 2  3  1 |
| 5  6  2 | 3  4  1 | 8  7  9 |
+---------+-----+-----+
| 2  3  6 | 5  1  7 | 9  8  4 |
| 7  1  9 | 4  2  8 | 5  6  3 |
| 8  5  4 | 9  6  3 | 7  1  2 |
+---------+-----+-----+
| 3  9  1 | 7  5  6 | 4  2  8 |
| 6  2  5 | 1  8  4 | 3  9  7 |
| 4  8  7 | 2  3  9 | 1  5  6 |
+---------+-----+-----+
#+end_src

各行・各列・各3x3のブロックに =1〜9= が重複なく配置されており、数独の条件を完全に満たしています。お役に立てば幸いです。

直ぐに正解か分からなかったので、実際に答えを入力してみたら、ちゃんと正解でした。

+---------+---------+---------+
| 1  7  3 | 8  9  2 | 6  4  5 |
| 9  4  8 | 6  7  5 | 2  3  1 |
| 5  6  2 | 3  4  1 | 8  7  9 |
+---------+---------+---------+
| 2  3  6 | 5  1  7 | 9  8  4 |
| 7  1  9 | 4  2  8 | 5  6  3 |
| 8  5  4 | 9  6  3 | 7  1  2 |
+---------+---------+---------+
| 3  9  1 | 7  5  6 | 4  2  8 |
| 6  2  5 | 1  8  4 | 3  9  7 |
| 4  8  7 | 2  3  9 | 1  5  6 |
+---------+---------+---------+


           YOU WIN!

ほぅ....。「数独を知ってるんだ」という、少し前ならそれだけで驚くところが 当たり前になっているのは置いといて、それにしても統計的結果で解けるものなのか?と思ったので聞いてみました (そのまま貼り付けると読みにくかったので、手で整形しています)。

* ** この数独パズルをどのようにして答えを導いたのですか?

数独は「直感」や「試し書き」ではなく、*論理的な候補の絞り込み(削除)*によって解かれます。
私が答えを導いた過程は、人間が紙で解く標準的な数独の解法と全く同じです。主な手順と考え方を以下に整理します。

---
*** 🔹 1. 基本の処理原則
各行・列・3×3ブロックに =1〜9= が重複なく入るため、以下を繰り返します:
- *既に入っている数字を基準に、「そこには入らない数字」を削除する*
- *候補が1つだけ残ったセルを確定する*
- *確定した数字が周囲の行・列・ブロックへ波及し、さらに候補が削れていく*

このように「部分的な確定」が連鎖的に起こることで、最終的に全体が一意に決まります。

---
*** 🔹 2. 主要な論理テクニック(このパズルで使われたもの)
|------------------------------------------+-------------------------------------------------------+-------------------------------------------------|
| テクニック名                             | 内容                                                  | 例(概念的)                                    |
|------------------------------------------+-------------------------------------------------------+-------------------------------------------------|
| *隠れた唯一(Hidden Single)*            | ある数字が「行・列・ブロック内で入る場所が1か所だけ」 | 「5」という数字がこの3×3ブロックに入る位置が、 |
|                                          | になるまで候補を削り、確定する                        | 他の候補を削った結果1カ所に絞られた             |
|------------------------------------------+-------------------------------------------------------+-------------------------------------------------|
| *裸の唯一(Naked Single)*               | あるセルに入る候補が1つだけ残った時点で確定する       | 行・列・ブロックの条件を合計して、そのセルに    |
|                                          |                                                       | 他の数字が一切入らない                          |
|------------------------------------------+-------------------------------------------------------+-------------------------------------------------|
| *クロスハッチング(線・ブロックの排除)* | 既に入っている数字の通る列や行が、他のブロックに入る  | 上段に =8= が既に入っているため、中段・下段の   |
|                                          | 候補から除外される                                    | 同じ列には =8= を候補から削除                   |
|------------------------------------------+-------------------------------------------------------+-------------------------------------------------|

このパズルは中級程度の難易度であり、上記の基本的な論理推論(候補の削除+一意確定)だけで解くことができます。

---
*** 🔹 3. AIとしての処理の仕組みについて
私は「人間のように一歩一歩考えていく」のではなく、*制約充足問題(Constraint Satisfaction Problem)*として
数値的に処理しています:
1. 各セルに初期候補 =1〜9= を割り当てる
2. 既に入った数字の行・列・ブロックから、その数字を候補リストから削除
3. 「候補が1つだけ残ったセル」を確定し、その影響を再帰的に周囲に波及
4. 矛盾なく全セルが埋まるまで上記を繰り返す

このアルゴリズムの過程は、人間が論理パズルを解く際に頭の中で行う「候補の頭書け・削り・確定」の連鎖と完全に
同一です。したがって、答えは必ず論理的に導かれる唯一解となります。

---
*** 🔹 4. 具体的な絞り込み過程を追いたい場合
「どのセルがまず確定したか」「〇行〇列の数字がどう絞られたか」など、特定の箇所やステップを指定していただけ
れば、その部分の*候補の推移と確定理由を1つずつ図式化してお示しします*。必要に応じてお気軽にお申し付けください。


という事らしい。本当かどうかは別にして、統計的に答えに近いものを探し当てたとか そういう事では無さそうです。
以前、「計算ってどうやってんの?」を聞いたら単純な計算は 統計的な結果から答えを導き出している(なので桁が多いとか単純じゃない場合は間違える)という感じだったのですが、 一意のアルゴリズムで解けるパズルが解けるのであれば、計算も統計的なものに頼らなくても答えを 出せるんじゃないの?とは思ったりも。まぁ、筆算するよりも電卓使った方が速いし正確とは思うので、 それはAIでも同じなのかもしれません。

2026/05/27

テレワーク。早めに終了。

なにげにChatAIで sedの使い方の事を調べていたら、「sed 'N,M!d'」という 書き方があるのを知ったり。「!d」で範囲外の行を削除するという事で、 「sed 'N,Mp;d'」と同じ結果になりますが、「!d」の方が一文字少なくて済みます😅。

2026/05/26

テレワーク。早くもなく遅くもなく終了。

Eatでの chafa表示でハング状態に陥る件。何かしらターミナルの幅が2倍に解釈されているような ふるまいだったので、反応しそうなところを当てずっぽうで値を弄ってみたところ、 反応した上に所望の動きになったような気がしたり。 ただ、Sixel表示がイマイチになったのですが、そちらとうまく合わせる方法が分からず、 Sixelの方はスケール指定が可能だったので、スケールを変更して見た目合わせしてみたり。

Emacs Eat で chafa表示バリエーション

以下のようにパッチしてみました。

$ diff -u eat.el.orig eat.el
--- eat.el.orig 2026-05-22 23:58:57.729732200 +0900
+++ eat.el      2026-05-27 00:38:58.483654200 +0900
@@ -184,7 +184,7 @@
                 (function :tag "Function"))
   :group 'eat-eshell)

-(defcustom eat-sixel-scale 1.0
+(defcustom eat-sixel-scale 0.9
   "Scale Sixel images by this amount."
   :type 'number
   :group 'eat-ui
@@ -3870,7 +3870,7 @@
                (>= width 1)
                (>= height 1))
       ;; Update state.
-      (setf (eat--t-disp-width disp) width)
+      (setf (eat--t-disp-width disp) (* width 2))
       (setf (eat--t-disp-height disp) height)
       (setf (eat--t-term-scroll-begin eat--t-term) 1)
       (setf (eat--t-term-scroll-end eat--t-term)
@@ -7009,7 +7009,7 @@
           ;;          (while (= size (buffer-size))
           ;;            (sleep-for 1))
           ;; I hope 1 second is enough!
-          (sleep-for 1)
+;          (sleep-for 1)
           (goto-char (point-max))
           (insert-file-contents startfile)
           (process-send-string


sleep-forのコメントアウトは C-g でキャンセルできるようになった件です。 何かしらの幅を2倍にしたら良い感じなったけど、何故これでイケるのかがよくわかってません😓。 eat-sixel-scaleを0.9にしたのは見た目合わせです。御参考まで。

今気づいたのですが、30.2と mainブランチで それぞれEatを動かしたところ、mainブランチの方は なんだかもっさりしてるな?🤔

2026/05/25

テレワーク。気持ち早めに終了。

そういえば、ここ2週間ほど Ollama の更新が無いな? 下手すれば毎日更新されてた感じだったので、 更新が無いと何かあったのか?と思ってしまいます。

Eatでの chafa表示でハング状態に陥る件。 ハングそのものの話は一旦置いといて、ターミナルの幅の扱いが変なのではないか?と思って 調べていたところ、Unicode文字の幅が見た目の倍あるようなカーソルの動きをしているように思ったり。 例えば「echo "▄"」と入力する場合、「echo "」まで入力した後に別のバッファから「▄」だけをコピペ したのですが、カーソルの移動や表示が変な感じになりました。文字の幅の扱いが変な予感がするものの、 なぜEatの中だけ?とかよくわかりません。 ただ、ターミナルのアスペクト比が2:1以上だとハングらないような気もします。

2026/05/24

AM中に起床。

掃除したり洗濯したり。

Eatでの chafa表示でハング状態に陥る件。フレーム内を二つのウインドウに分割しておいて、 片方をeatで開いた後、「chafa -f symbols --symbols half img.png」で表示するとハングしませんでした。 何故かうまく表示できたりハングしたりするようです。全く表示できない訳では無さそうなので、 何かしら直す方法はあるんじゃないか?とも思ったのですが、思っただけです。

chafaは 「--symbols half」の時、どのように表示しているのだろう?と思って、eat終了後の残骸バッファ から表示された文字群を見てみたり。どうやら「▄」や「▌」といった文字を巧みに使って、 フォアグラウンドの色とバックグラウンドの色を分けて表示する事で見かけの解像度を上げているようです。 なので、色が付いていないと全く何の絵か分かりません。 メガデモの Oldskoolデモ とかで使われてそうな方法かも。

Eatでの chafa表示でハング状態に陥る件を少し調べてみたり。 キー入力は受け付けられなくなるのですが、gdbからC-zで SIGSTOPを送ると一応止まるので、 動いてはいるようでした。どうもkeyboard.c:timer_check_2() という関数の中で calln()という関数を呼び出しているのですが、これが返ってこない感じになっているようです。 ただこれ、バイトコードのインタープリタ実行に入っているようなので、何を実行しているのかが分からず。 Eatの中のコードにループしてそうな所があるのかも知れませんが当たりが付かず。

どうやら ELISPの関数timer-event-handler をcalln()で呼び出しているようだったので、 timer-event-handlerの中で無限ループになる可能性を疑ったのですが分からず。 ダメ元で gptel(qwen3.6:35b)で timer-event-handler で無限ループする可能性があるか?を聞いてみたところ、 無限ループする事は無いが、タイマー関数の実装によってはハングしたように見える可能性があるとの事で、 sit-forとかsleep-forを使うのはダメって事が記されていました。eat.elの中で一か所だけsleep-forを 使用していたので、それをコメントアウトしてみたところ、表示されないことがあるのは変わらないのですが、 C-gで停止できるようになりました。C-gで止めて、eatを起動し直したりしていると表示できたりできなかったり するのですが、操作不能に陥るのが個人的には一番困るので、ひとまずこれで様子見してみようかと思います。

なんとなくウインドウ表示のアスペクト比が、横長だと大丈夫だけど縦長だとダメなんじゃないか? という予感がしてみたりも。

2026/05/23

AM中に起床。

単行本100巻到達の特別再放送でアニメの弱虫ペダルの第1話が放送されてるをの見たり。 一番最初ってこんな感じでしたっけ? 「弱虫ペダル (アニメ)」の Wikipedia によると、第1話が放送されたのは 2013年10月8日だったらしいので 13年近く前になるのか。 単行本100巻到達の18年3ヶ月は最速らしい。

EmacsのEatでフルカラー表示されていないようなので調べてみたり。 どうやら GUI Emacsの場合でも起動時に COLORTERM=truecolorを指定しておかないと、 Eatはtruecolor対応可能と認識されないようです。

ターミナルでの画像表示について調べていたら、 Chafaというコマンドラインツールの存在を知ったり。 Cygwinのパッケージにもなっているようです。 さておき、ターミナルサイズを見ているようなので、画像のサイズによっては 良しなに縮小表示したり、アニメーションGIFも表示できるようです。 アニメーションGIFは Eatだとイマイチでしたが、minttyでは問題無く表示されました。
screenコマンドを挟んでいる場合、img2sixel は-P オプションを付ける必要がありますが、 chafaも「--passthrough screen」というオプションを付ければ大丈夫そうです。 良しなにサイズを調節してくれる chafaの方が使い勝手が良いと思ったのですが、 --passthroughには短縮オプションは無いようなので bashのaliasなどを使って対応するのが良さそうです。
minttyはSixel対応なので、デフォルトでは画像で表示されるのですが、 chafa自体は文字を使ったアスキーアート表示とかも行なえるようです。 例えば「chafa -f symbols --symbols block image.jpg」 とか「chafa -f symbols --symbols ascii -c none image.jpg」とかオプション指定すれば良いみたい。 フォントによっては幅が合わなかったりするようなので、どのターミナルではどれを使うのが良いかは 試してみないと分からない感じがします。ただ、Eatで試していると --symbols block や --symbols half などの指定で、Emacs本体がハングってしまうみたい。
vtermでは「--symbols half」にすれば良い感じに(と言っても解像度は下がりますが)表示される ようです。

Emacs Eat で chafa表示バリエーション Emacs vterm で chafa表示

2026/05/22

テレワーク。早めに終了。

再変換で色々起こる件。 再変換以外の動作には問題無いのに、再変換を発動したときだけ色々起こるのは いくらなんでもおかしくないか? と思い、Lisp_Objectに触れないような実験コードにしてみたり。 ちょっと試した範囲では落ちることは無さそうなので、触れないようにした所をうまく対応すれば 大丈夫なんじゃないか?という気も。

WCHARの文字列を取得するのに一時置きとして make_buffer_string()で生成したLisp_Objectを 使用していたのですが、それらを排除するように直してみたところ、安定して再変換できるようになった気も。 再現方法は「再変換」と「確定」を繰り返すだけだったのですが、10回に満たない繰り返し回数で 色々起こってました。もうしばらくテストするとしても、これで大丈夫なんじゃないか?という感じです。

MS-IMEで、いきなり再変換を発動すると初回の変換窓が開かない件も、ついでに直らないか? と期待したのですが、こちらは変わらず。むぅ。

Emacs内で使用可能なターミナルアプリとしてvtermを使っています。 Sixelは流石にダメだよな(以前のメモ)と思った記憶がありました。 何気に「Emacs内で使用可能なSixel対応のターミナルアプリ」で検索したら、 Eatってターミナルエミュレーターが Sixelに対応しているというAI回答があったのでちょろっと試してみたり。

Emacs Eat で Sixel表示

マジでか😮。ターミナルとしてSixel表示しているので、当たり前ですが、ssh接続した先で img2sixelを使って標準出力にぶちまけても表示できます。 TRAMPで繋いでいるならそれで表示しても良いかもですが、ファイルに保存せずに画像データを 見るのに良いかも知れません。画像表示可能なターミナルの一つになりそうです。 そう言えば、minttyではフルカラーでJPEGやPNG画像を表示する機能があるのですが (以前のメモ)、 それと同じような方法でSixelじゃなくても表示するようなターミナルエミュレーターって あまり無いのかしら?「ターミナルで画像表示する==Sixelを使う」って感じにも思えたので。

2026/05/21

テレワーク。早めに終了。

再変換。再変換を発動しては確定を繰り返しているとSIGABRTを受けたりSegFaultで死んだりする模様。 ただ、何故かCygwinのメモリ解放でエラーしたり挙動が不審。

どうも「SAFE_FREE()」からのfree()で何故か変になっているようでした。 SAFE_ALLOCA()とSAFE_FREE()というEmacsコード内のメモリアロケータで、 確保するサイズが大きい場合はalloca()ではなくてmalloc()を使うというものらしい。 free()が呼ばれているという事はmalloc()が使われたという事なのだろうか?という感じなのですが、 切り分けの為に malloc()とfree()を使って様子を見たり。すると違う場所でSegfaultするようになり 様子が少し変ったり。でも、ずっこけ場所が違うもののやっぱり SAFE_FREE() に起因しているようです。 malloc()/free()に簡単に置き換えられない場合があって困ったり。 それにしてもスタックがぶっ壊れているのかしら?🤔

2026/05/20

テレワーク。早めに終了。

再変換。普通に使っていると発動する場面が無いので、意識的にテストケースとして発動させるのですが、 それだと大丈夫そうだなぁ.....と思って油断していると、急にハングが再現したりするのですが、 急に来るのと特別なことをしてるつもりが無いので契機が分からない😓。

何気なく「記者が汽車で貴社に帰社した」の「汽車」を再変換したら、絵文字の候補として「🚃」が出てきた のですが、これは電車だよなと思ったりも。因みに「電車」を変換すると随分沢山の絵文字候補が出てくるなぁ? とは思ったりも。

2026/05/19

テレワーク。早めに終了。

Web巡回して終了。

2026/05/18

テレワーク。早くもなく遅くもなく終了。

Emacsのmasterブランチは32系になっている模様。

2026/05/17

AM中に起床。

掃除したり、洗濯したり。

MS-IME時の再変換イベント。今のところ、Emacsの外側で半角/全角キーを押してIMEをON/OFFすれば、 いきなり再変換を発動させても大丈夫そうです。 しかし、Emacs内からIMEをON/OFFした後、何かしら文字入力して変換窓が開くようなことを行った後に、 再変換を発動させても 変になります(変換窓が開かずキーイベントが掴まれてしまう)。 つまり、事前に入力して変換窓を開いても再変換時の状態が修正される様子は見られませんでした。 ただ、インクリメンタルサーチを起動し、その中でIMEをONにして、なにかしらの文字をいれて確定させた後、 インクリメンタルサーチを終了してから 再変換を発動すればうまく変換窓が開くというパターンを一つ見つけました。 この手順の中に何かしら状態を初期化する要素が含まれているのではないか?と考えたのですが、 それが何なのかまでは突き止められず。 インクリメンタルサーチではミニバッファにカーソルが移動するので、その時にカーソル位置やフォントが 変更される事で位置情報が修正されるのだろうか?と思ったのですが....?🤔

そういや日本語文字じゃない文字列を再変換したらどうなるだろう?と思い、 Emacsの view-hello-file の中からアラビア語だとか適当に選んでみたところ、 表示はされるけど文字としての認識だったり(絵文字もそんな感じ)、トーフになったり、 場合によってはハングするみたいです。因みに試したのはCopilot Keyboardのみです。

2026/05/16

AM中に起床。

Emacsの再変換コード。デバッグコードを取り払ってみたり。 また、いくつかコードを有効にするか否かを切り替えるdefineがあったのですが、 今となっては使用できないと思われる切り替えも取り払ってみました。 かなり盛大に弄ってしまったのと、まだMS-IME時にいきなり再変換したときの不具合も残っているので、 しばらくテストと実験が必要かも。

MS-IME(新しい方)やCopilot Keyboardでは、変換キーや無変換キーの挙動を変えられるようになっています。 現在、無変換キーをIME-オフに、変換キーをIME-オンに設定しているのですが、 再変換のことを調べていて、そういえば変換キーはもともとは再変換に割り当たっていたなぁ? と思い出しました。割り当てを変えるくらいなので、再変換は全く使ったことなかったのですが、 実際に使っている人ってどれくらいいるのだろうか?とは思ったりも。 というのも、誤変換を直すことよりも誤入力を直すことの方が圧倒的に多いため、 再変換を使って誤入力の修正を行うよりも、結果的に入力し直した方が早いという場面しかない ように思えるからです。Webで検索してみると「仕事術的な活用で時短がなんとか....」みたいな 記事で紹介されている例が多いように思うのですが、効率アップになるのかは甚だ疑問に思います。 それよりも間違えずにキーボード入力できる方が良い (言い換えるとキーボード入力で間違いまくるのはそもそも効率が悪い)とは思います。

MS-IME時の再変換イベント。Emacsを起動した直後、ウインドウ(フレーム)を動かさずに そのまま再変換を発動すると大丈夫だけど、ウインドウを一旦動かしてから再変換を発動するとダメに なるっぽい。 随分前に、ウインドウを一旦動かさないとIMEがオンにならない という話がありました。その後、 事象が緩和されたので対処療法を入れてましたが、更にその後に行われた Windows10のアップデートで 事象自体が自然消滅したことがありました。 今回はウインドウを動かすとダメという事で、前とは逆ですが似たような話があるのかなぁ?という感じです。 ウインドウを動かした場合でも、「半角/全角キーでIMEをONにしてから再変換をすれば大丈夫(以降も問題無し)」なので、 MS-IME内の何かしらのフォーカスが失われているのが原因だろうとは思うのですが、 それをどうにかする方法が見つかっていません。 ピンポイントな事象なので、最悪原因不明のままでも対処療法が見つかればラッキーなのですが。

そういえば、「以前のバージョンのMS-IME」での再変換はどうか?と思い確認してみたところ、 (便宜上)現在のMS-IMEで起こっている、いきなり再変換すると変になる現象は発生しませんでした。 結局変なのは現在のMS-IMEだけで、以前のMS-IMEもCopilot Keyboardも問題無しという模様が付いてます。 久しぶりに以前のバージョンのMS-IMEを使用したのですが、やっぱりShiftキー単押しで英数とローマ字が 切り替えられるのは便利です。現在のMS-IMEでは開かなくなった辞書登録も、 以前のMS-IMEでは開くことができるのも変わらず。 現在のMS-IMEは唯一変換候補窓に絵文字がカラーで表示される点だけが良いのですが、 Copilot Keyboardではモノクロ表示に退化してしまっているのはなぜなのだろう?と思わなくはありません。

Emacs31。まだソースアーカイブがリリースされる状況ではなさそうなので、 gitリポジトリの31系ブランチにパッチをあてておいたり。ソースアーカイブがリリースされるようになるまでは、 時々pullしてビルドや動作確認する感じで。実験は別にクローンしたディレクトリ下で行なうようにしてみたり。

2026/05/15

テレワーク。早めに終了。

再変換。ひとまず余計な実験コードをバッサリ削除して整理してみたり。

MS-IMEの時にいきなり再変換を行うとハング状態に陥るように見える件。 少し前のメモの通り、最小化→元に戻す 操作で復帰はするのですが、 この時の作りでは再変換対象文字列が失われてしまうので、EmacsのUndoで失われた文字列を 復旧させる必要がありました。 今回、再変換の発動時に対象文字列を一時的に保持しておく方法にした事により 「もう一度再変換を発動させる」ことで、ハング状態に陥った風に見える時の変換対象文字列 の再変換窓が開き、操作が行なえるという復旧が可能になりました。 とはいえ、なんとかならんかなぁ?と思うのでもう少し反応する要素が無いかを探ってみたい と思います。因みに、Copilot Keyboardではいきなり再変換を発動しても今のところ問題は無さそうです。

そういえば先日、再変換の処理で変換が確定してから元のデータを削除するような実験を行ったとき、 変換編集窓の表示位置が「これじゃない」感じになりました。変換窓の開く位置はカーソル位置になるため、 範囲選択した領域を再変換するようなケースを考えると、選択領域の最初の位置では無く、カーソルのある 最後の位置になる為、位置がこれじゃないという感じになりました。 再変換を発動した時に選択の始点と終点を入れ替えて、カーソル位置を始点に移動できれば解決 できるんだけどなぁ?と思って位置を交換する方法が無いかをGoogleAIに聞いたら、 位置交換の方法の一つに「exchange-point-and-mark」というのがあって「C-x C-x」に割り当たっている というのを初めて知りました。領域選択した所で「C-x C-x」を押せば始点の位置にカーソル移動できるとともに、 選択開始位置も変更できるので、開始位置を間違えた場合に選択し直す手間が無くなるなぁと いう発見がありました。矩形選択の時も使えるのでなかなか良いかも。

2026/05/14

テレワーク。早めに終了。

再変換。ひとまず「msg=WM_IME_REQUEST, wp=IMR_RECONVERTSTRING」メッセージが届く可能性がある 期間はバッファのデータは更新せず、変換確定したら削除するようにしてみたところ、 挙動不審にはならなくなったような気が。でも、変換編集窓の表示位置がこれじゃない感。
もっと雑に、初回に生成した RECONVERTSTRING構造体の内容と文字列を 一時メモリに保持しておいて、 Emacs側からはデータを削除、二回目以降は一時メモリに保持した内容を丸コピーでいいんじゃないか?と 思って試してみたり。イケたような気がしたけどハングるな....🤔。 でも、挙動不審に思えていたのも、そういうものだという事が分かったので、やりようがあるように思えてきました。

2026/05/13

テレワーク。早めに終了。

全く気付いていなかったのですが、Inkscape 1.4.4がリリースされていたらしい (アナウンス)。 バグフィックスがメインみたい。

再変換。 「msg=WM_IME_REQUEST, wp=IMR_RECONVERTSTRING, lp==0; 必要なメモリサイズの問い合わせ」が二回送られてきたり、 「msg=WM_IME_REQUEST, wp=IMR_RECONVERTSTRING, lp!=0; 再変換対象文字列の問い合わせ」が二回送られてきたりすることが、 最小コードでも発生するようだったので、そんなことがあり得るのか?というのをGoogleAIで聞いてみたら 「あり得る」という回答で えー!?🥺 と思ったり。 「必要なメモリサイズの問い合わせ」の方はもう面倒臭いので、再変換を受け付ける文字数はどうやら50文字まで のようなので、それを最大と想定して常に最大サイズを要求する事で対応できると思うのですが、 「再変換対象文字列の問い合わせ」の方は今の再変換の実装だと1回目の問い合わせで元の文字列を 削除してしまうので、もう一度問い合わせられたら同じ文字列を再設定できないという感じになっています。 面倒臭いのは再変換の確定は WM_IME_COMPOSITION で送られてくる、つまり再変換がトリガとなって 指定された文字列を変換したのか、キーボード入力がトリガとなって指定した文字列を変換したのかが 区別がつかない為、後で元の文字列を削除するというのが簡単にはできません。 因みにMS-IMEは「必要なメモリサイズの問い合わせ×2, 再変換対象文字列の問い合わせ×1」なので、 今の再変換の実装でうまく動くのですが、 Copilot Keyboardは「必要なメモリサイズの問い合わせ×1, 再変換対象文字列の問い合わせ×1だったり×2」だったり するため、「再変換対象文字列の問い合わせ×2」だった場合におかしなことになっているという感じです。 単純に「なにこれ?面倒臭い」という感じに思えます。
複数回通知される事はMicrosoftのドキュメントに記されてるのか?と聞いてみたら「暗黙の仕様」なのだそうな🥺。 確かに、「lp==0とlp!=0の それぞれの場合に どうしなくてはならない」は記されていますが、 それぞれ1回しか通知しないとは言ってないし、このメッセージをトリガにして他の処理(例えば元の文字列を削除しておく)を 入れてステートフルにしても問題無いとも言っていない......と、いわれればそうなのですが、モヤっとはします🤔

2026/05/12

テレワーク。早めに終了。

再変換。先日 MS-IMEの時にいきなり再変換を行うとハング状態に陥ると記しましたが、 確かに固まるものの一度Emacsをタスクバーなどから最小化→元に戻すという操作を行なうと 復帰するようです。雰囲気的に再変換の候補ウインドウが何かしらの理由で開かないのですが、 それによりフォーカスが固定されてハング状態っぽくなるものの、最小化などを行なうと フォーカスが復帰し、ついでに再変換も可能になるという感じに見えます。 何かしら初期化を行なえば良いのか?とも思ったのですが、反応する方法を見つけられず。
Copilot Keyboardの方は先日も記した通り、何故か再変換イベントが二回発生する事があり、 こちらも原因が分かっていません。むーん🤔

2026/05/11

テレワーク。早めに終了。

再変換。カーソル位置が変になら無さそうにはなったものの、 MS-IMEの時に日本語文字を入力した後、再変換を行うとハング状態に陥る現象に見舞われています。 再変換を行なう前に「半角/全角キー」でIMEを一度ONにしてから再変換を行なうと大丈夫っぽい。 Emacs側からIMEをONにしてもダメ。Emacs側からのIMEをON/OFFは ImmSetOpenStatus()を実行する事で 行なっていますが、これでダメというのには困った....🤔。 でも、Copilot Keyboardでは大丈夫。急に形勢が逆転してしまってます😓。

弄っていると何故か再変換イベントが二回発生するケースがあり、1回目に選択した領域が 消滅して動きが変になったりしています。なんでこんなに挙動不審になるのかよくわからない。

2026/05/10

AM中に起床。

掃除したり。

再変換。MS-IMEの方もサイレント落ちしたりと微妙な感じだったので、まずはそちらが安定して 動作してから Copilot Keyboardの方を見た方が良いかなと思ったり。 絵文字を食わせるとダメになったり、長い文字列を再変換しようとすると動きが変になったりしたのを 直してみて安定してきた感じにはなりつつあるのですが、Copilot Keyboardで同じ事をやるとやっぱりダメ。 うーむ🤔。

実験用の最小コードでリコンバージョンを試してみたところ、少し反応が見られたり。


うーん、なんか正解がよくわからない。

Emacsで処理を潰しながら何が影響しているのかを見ていたら、急に MS-IME も Copilot Keyboard も 再変換が動くようになったり😓。 まず、「msg=WM_IME_REQUEST, wp=IMR_RECONVERTSTRING, lp!=0」の組み合わせが、 なぜか2回以上発生する件。処理自体は w32_get_ime_reconversion_string() という関数で行なっているのですが、 ここでは Emacs上でマークされた再変換対象文字列を取り出して、lpで渡されてくる RECONVERTSTRING* の領域を設定&再変換対象文字列のコピーを行なった後、Emacs上の再変換対象文字列を削除しておく というのが大まかな流れになります。 元のコードでは ここで更に ImmSetCompositionString()で SCS_SETRECONVERTSTRING で lpで渡されてくる RECONVERTSTRING*をセットする処理が行なわれていたのですが、どうやらこれを実行 すると 「msg=WM_IME_REQUEST, wp=IMR_RECONVERTSTRING, lp!=0」の組み合わせを通知してしまうようで、 見かけ上再帰的に実行されてしまう事になっているようでした。これが Copilot Keyboardではダメなようですが、 MS-IMEでは何故か大丈夫なようです。 GoogleAIで IMR_CONFIRMRECONVERTSTRING の処理について聞いてみても、再変換文字列に関する情報を セットして「return reconv->dwSize;」するだけという事だったので、余計な処理を削ってみたら なんとなくMS-IMEもCopilotKeyboardも 再変換が機能するようになった.....という感じです。 ただ、カーソル位置が変になることがあるので、まだダメです🥺

2026/05/09

AM中に起床。

IMEパッチのコードで再変換を行う RECONVERTコードってそういや有効にしてビルドしていないなぁ? と思い、少し前のEmacs masterブランチでRECONVERTを有効にしてビルドしてみました。 以前、31系で大量のワーニングが出るようになったのを 直したのですが、RECONVERTの部分は直していなかったので大量のワーニングが出るままになっていたり。 ワーニングはさておき、そのまま実行してみたら再変換を発動するのと同時にサイレント落ちしたので 原因を調べて直してみたり。 で、MS-IMEではどうにか動くようになったものの、Copilot Keyboardでは挙動が不審な状況です。
挙動が不審というのは、再変換を発動すると変換候補窓が一瞬現れてすぐに消えてしまい、 何かしらキー入力は受け付けるのですが、Emacsに突き抜けている感じになります。 ESCキーで脱出すると変な編集結果が反映されてしまいます。変になるパターンがいくつかあるようなのですが、 弄っているとサイレント落ちする場合もあります。 一応、メモ帳などでは Copilot Keyboardによる再変換は機能するようなのですが、 何か足りないか、何かしら余計なことをしているか、Copilot Keyboardのバグなのか..... 今のところアテがありません。

先週、「おこなって」は「行なって」は許容で「行って」が本則の 書き方だというのを知りました。そういや「かわって」は「変わって」と「変って」とだとどうなんだ? と思って調べたら「変って」が許容で「変わって」が本則らしい。

| 読み       | 本則     | 許容     |
|------------+----------+----------|
| おこなって | 行って   | 行なって |
| かわって   | 変わって | 変って   |

「行って」はそれだけ見ても「いって」と「おこなって」の区別が付かない方が本則になっているのに、 「変わって」は、より読み違いにくい方が本則になっています。単純になんでだ?と思います。
因みに「変って」はEdgeもVOICEVOXも「へんって」とは読まれず。 でも、「この状況は変って思いました」はEdgeもVOICEVOXも「このじょうきょうはかわっておもいました」 となり「このじょうきょうはへんっておもいました」とはなりませんでした。

再変換。色々反応を見てみるもこれといったものは掴めず。それよりもMS-IMEでもちょいちょい サイレント落ちする場合があって、何がなんだかよくわからなくなったりも。

2026/05/08

テレワーク。早めに終了。

予定通りEmacs-31のブランチが作成された模様 (アナウンス)。

調べごとをして終了。

2026/05/07

テレワーク。早めに終了。

調べごとをして終了。

2026/05/06

AM中に起床。

随分前に取り溜めていた録画を消化。

2026/05/05

AM中に起床。

先日の捨てられているメッセージ。 どんなメッセージが捨てられていたのだろうか?と思い、デバッグprintを仕込んでみたところ、 以下のようなメッセージが捨てられていたようでした。


挙動から察するに 0xc05a が捨てられていた事が Copilot Keyboardで Copilotの回答(Copilot Answer) が開かなかった原因だろうと考えられるのですが、 GoogleAI回答によれば HWNDが0のメッセージは そもそも DispatchMessage() では処理されないもの とされているようです。 しかし、実際には DispatchMessage に食わせることで Copilotの回答 が開くようになったのは 挙動としてなんかおかしくね?という気がします。

Emacsのsrc/w32fns.cを git log で遡ってみたところ、記録上は最初にコミットされた1995年11月7日時点で 既に以下のような構造だったようです。

:以下抜粋
+DWORD
+win_msg_worker (dw)
+     DWORD dw;
+{
+  MSG msg;
+
+  /* Ensure our message queue is created */
+
+  PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE);
+
+  PostThreadMessage (dwMainThreadId, WM_EMACS_DONE, 0, 0);
+
+  while (GetMessage (&msg, NULL, 0, 0))
+    {
+      if (msg.hwnd == NULL)
+       {
+         switch (msg.message)
+           {
+           case WM_EMACS_CREATEWINDOW:
+             win32_createwindow ((struct frame *) msg.wParam);
+             PostThreadMessage (dwMainThreadId, WM_EMACS_DONE, 0, 0);
+             break;
+           case WM_EMACS_CREATESCROLLBAR:
+             {
+               HWND hwnd = win32_createscrollbar ((struct frame *) msg.wParam,
+                                                  (struct scroll_bar *) msg.lParam);
+               PostThreadMessage (dwMainThreadId, WM_EMACS_DONE, (WPARAM)hwnd, 0);
+             }
+             break;
+           case WM_EMACS_KILL:
+             return (0);
+           }
+       }
+      else
+       {
+         DispatchMessage (&msg);
+       }
+    }
+
+  return (0);
+}
:

現在はもっと処理するメッセージが増えていたり DispatchMessageAと DispatchMessageWを 使い分けていたりしますが、msg.hwnd==NULL での switch (msg.message) の default:無し は今も同じです。パッチとしては default:で DispatchMessage()を実行するという感じに したのですが、見る人によっては「なにこのパッチ、意味あんの?」って思われるかも知れません。
そもそも HWNDが0のメッセージはスレッドメッセージとして扱うしか無いのですが、 あずかり知らないものは処理できないし、DispatchMessage()で処理されないのであれば、 捨てられても問題になってはならないと思われます。 やっぱり Copilot Keyboard 側のバグじゃないかなぁ? 少なくともアプリ側で対応が必要なのは普通はダメだと思います。 ワークアラウンドとしてパッチがあてられるのはEmacsのようなOSSに限られる訳ですし。

先日、Copilotの回答が表示されるようにはなったのですが、長い文章では単語を調べる感じにはならない と記しました。MS-IMEとCopilot Keyboardでは以下のような違いがあるからかもしれません。

MS-IMEとCopilot Keyboardの辞書表示の違い

MS-IMEでは例えば「保証」に助詞をつけたり動詞化した場合でも、辞書表示が行われるのですが、 Copilot Keyboardでは単語変換でしか辞書表示が行われません。長文中の文節変換で 「これで合っているんだっけ?」の確認ができないので、あらかじめ調べておくか一旦文章作成を中断して 調べる必要があります。「ほしょうできない」を文節の長さを変更して「ほしょう」と「できない」に してから「ほしょう」を変換すれば辞書表示されますが、そういうことではないよなぁ?とは思います。 MS-IMEではできていたことなので、Copilot Keyboardでもできるようになるのを期待したいです。

2026/05/04

AM中に起床。

掃除したり。

Emacsで Copilot Keyboard の Copilotの回答(Copilot Answer) が表示されない件を調べたり。 そもそも IME制御を行う最小コードだと、メッセージを処理するWndProcの中に ウインドウを閉じる為だけの WM_CLOSE, WM_DESTROY の処理だけを入れれば、 インライン表示にはなりませんが、IMEのエディタは別ウインドウで表示され、 Copilotの回答も表示されます。そこで、Emacsの方でメッセージを処理している w32fnc.c内の関数w32_wnd_proc()を極限まで削ってみたのですが、それでも Copilotの回答 は表示されず。えー?🤔
もっと上位のメッセージループは 関数w32_msg_pump()の中にあるのですが、 GetMessage()で取得した メッセージ の msg.hwndが NULLか否かで処理が分かれていました。 で、NULLだった場合はいくつかある WM_EMACS_* という自前のメッセージを処理している ようだったのですが、どれでもない場合はそのままループを抜けるようになっていました。 もしかしてこれってメッセージを捨ててることにならない?と思い、DispatchMessage()すると Copilotの回答が表示される事が分かりました。デバッグコードを剥がして修正を適用してビルドしたところ、 所望の動作を行うEmacsになりました😄。 因みにIMEパッチは関係無くてオリジナルのコードの不具合(かどうかはまだ不明)です。 この為、Cygwinパッケージのemacs-w32バイナリ(恐らく公式のWindows用バイナリも)でも Copilotの回答 は表示されませんでした。

EmacsでCopilotの回答表示に成功

実験は Emacsのgitリポジトリの masterブランチで行ったのですが、30.2も同じなので対応。 しばらく普段使いで動作確認してみます。

ところで、Copilotの回答が表示されるようにはなったのですが、長い文章を入力していると 単語を調べる感じにはならないなぁ?とは思ったりも。

Copilotの回答で🔍ボタンを押すと Bingの検索が行われるのですが、キャラクターのチャットの方に 流し込む方法は無いのだっけ?と思ったりも。 単語ではなく文章で入力しなくてはならないので、 長文を特別なキーバインドで決定&流し込み実行する必要はあるかもしれませんけれども。 今のところ、Copilot Keyboardはスキンがキャラクターの見た目と連動しているだけで、 IMEとAIキャラクターが「連携」はしていないなぁ?とは改めて思ったりも。

2026/05/03

AM中に起床。

VOICEVOXの読み方&アクセント辞書登録。 単純な単語の登録は非常に簡単に行えるのですが、前日の「行って」みたいな、どうしようもないのが いくつかあるなぁ?と思ったり。「行」を「くだり」と読まれたり、「値」を「ね」と読まれたりするのは、 「くだり」や「ね」を封印する事にして「ぎょう」や「あたい」を登録したり、 「行末」を「ゆくすえ」と読まれたのは そっちかぁー と思いながら封印したりしてみました。 自分が作成した文章以外を読ませると、ボロボロになるかもしれないな....😓

2026/05/02

AM中に起床。

Ollamaで音声解析ってできるんだっけ?と思ってちょろっと検索してみたところ、 方向は逆ですがテキスト読み上げを行う VOICEVOXという音声合成ソフトの存在を知りました。 GUIを介してテキスト入力や読み上げの編集を行えるのですが、それとは別にREST-APIサーバーとしても 動作するようで、Cygwinだとbashコマンドラインからcurlを介して音声を再生するところまで実行 可能なようです。

| 原文         | ソースを弄ったEmacsをCygwin上で野良ビルドすると大分使いやすくなりました。                    |
|--------------+----------------------------------------------------------------------------------------------|
| Edge読み上げ | そーすをもてあそったいまくをさいぐいんうえでのらびるどするとおおいたつかいやすくなりました   |
| VOICEVOX     | そーすをいじったいーまっくすをしぐうぃんじょおでのらびるどするとだいぶつかいやすくなりました |

知らない単語はともかくとして、Edgeは結構読み違える事があるのですが、 VOICEVOXは読み違いが少ない印象です。 それでもEdgeでは大丈夫な「準備を行ってみました」は「じゅんびをいってみました」になったり、 「読み違える」は「よみたがえる」になったりしました。

VOICEVOXを試すのにCygwinのbashスクリプトで雑に以下のようなのを作成してみました。

#!/bin/bash

speaker_id=2

str=$(printf '%s\n' "$1" | sed 's/ //g')
IFS='。' read -r -d '' -a lines_arr < <(printf '%s\0' "$str")

for line in ${lines_arr[@]}; do
    printf "%s\n" $line
    echo -n $line \
        | curl -s -X POST --get --data-urlencode text@- \
               "localhost:50021/audio_query?speaker=${speaker_id}" \
        | jq '.speedScale=1.3|.volumeScale=2.0' \
        | curl -s -H "Content-Type: application/json" -X POST --data @- \
               "localhost:50021/synthesis?speaker=${speaker_id}" \
               > /dev/dsp
done

exit 0

単純にパイプで繋いでいるだけですが、Cygwinでは/dev/dsp(今となってはレガシーなデバイスファイルのようですが) が使えるので.wavをそのままリダイレクトして再生しています。途中で速度とボリュームをjqで変更しています。 あと、クエリパラメータのspeakerは audio_queryと synthesisの両方に必要みたいです。 気づかず audio_queryの方だけを変えていたのですが、微妙に変化はあるものの思った声の選択になってないような? となりました。

VOICEVOXで読みの辞書登録を試してみたのですが、「行ってみました」は「いってみました」と「おこなってみました」 のどちらになるかは助詞や文脈によります。 手前の助詞が「を」だと「おこなって」の可能性がかなり高いですが、 「と」だと「いってみました」か「おこなってみました」かは近接する助詞だけでは判断が難しく 「旅行に彼と行ってみました」と「準備を彼と行ってみました」の読み分けを 単語登録だけで行うのは無理があります。で、確率の高い「を行って」を「をおこなって」と登録してみたのですが 採用されず。助詞の「を」は後ろの単語とは組にならず手前の単語と組になるようなので、「を行って」には マッチしないという結果になりました。「行って」を「行なって」と記せば「おこなって」にはなるものの、 現代日本語では「行って」と記すのが一般的になっているようです (参考記事)。 よりによって読み方の判断が難しい方が一般的になってしまっているのは機械泣かせだなぁと思うと同時に、 センス無いなぁとも思います。 これまで、誤変換については色々な問題に遭遇することはありましたが、個人的に読み上げを使う場面は無かったので、 今回のように漢字を使っていたとしても、読み方の難しい場面があるとはあまり想像してませんでした。 AIで一旦読みに変換すると精度が上がる例かもしれません。

試しにOllama+qwen3.6:35bで「旅行に彼と行ってみました」と「準備を彼と行ってみました」のそれぞれの 読みを聞いたところ、以下のような回答になりました。

* ** 以下の日本語の読み方を示してください。
- 旅行に彼と行ってみました
- 準備を彼と行ってみました


ご提示の文の読み方は以下の通りです。

- 旅行に彼と行ってみました
  → *りょこうに かれ と いってみました*
- 準備を彼と行ってみました
  → *じゅんびを かれ と いってみました*

---
💡 *補足(より自然な表現について)*
日本語の語順やコロケーション(語の結びつき)の観点から、以下の点をご参考までに申し上げます。

1. *旅行に彼と行ってみました*
   文法的に間違いではありませんが、ネイティブは通常主語や関連する名詞を先に持ってくるため、
   =彼と旅行に行ってみました=(かれと りょこうに いってみました)の方が自然です。

2. *準備を彼と行ってみました*
   「準備を行う」は正しい表現ですが、「〜と行ってみる」という組み合わせは少し不自然に響く場合があります。文脈にもよりますが、以下のように言い換えるとより自然です:
   - =準備を彼としてみましたが=(試した結果、何か分かった・わかった)
   - =準備を彼としましたが=(ただの共同作業)
   - =準備を彼と揃えました/共同しました=(文脈次第)

必要に応じて文脈を教えていただければ、より適切な表現にご提案できます。

「じゅんびを かれ と いってみました」になっているようです😓。 「行ってみる」を「いってみる」と解釈しているので不自然と言っているようにも思えますが、 言い換え方は「おこなう」の意味のようなので、意味が分かっているならば読みの方も 「おこなってみました」にはならないものなのだろうか?とは思ったりも。 ともあれ、読み違いの起こらない文章にするのが手っ取り早いようです。 という訳でAIにしても精度が上がりませんでしたという話でした😅。因みにEdgeの読み上げは正しく読んでくれます😄。

2026/05/01

AM中に起床。

gcc-16.1がリリースされている模様(アナウンス)。 でも、Rustのフロントエンドについては特に記述が見当たらず。

Emacsのgitリポジトリを眺めていたら w32image.cをMinGWビルドでは常に有効にするという 変更が入ったようなのですが、Cygwinのw32ビルドの事を無視した #ifdef 切り替えを行っているようなので、 忘れないうちに対応しておくことにしたり。 WINDOWSNTというdefineで(よく考えずに他は対応されていないので関係無しとして)切り替えようとする 変更が入ったときは注意が必要です。

w32ビルドの Cygwin Emacsで yank-mediaの動作確認を行ってみたのですが、何やらうまく動かなくなっていたり。 クリップボードから画像ファイルへの保存は問題無くできているのですが、 orgモードで貼り付けた画像へのリンクが、いつの間にか 「[[attachment:clipboard-20260501T123947.png][clipboard-20260501T123947.png]]」のように記される ようになったようです。しかし これだと画像を見つけられずインライン表示されません。 以前と同じく「[[attachment:clipboard-20260501T123947.png]]」とすればインライン表示できました。 このリンク文字列の生成って誰がやっているんだっけ?🤔

GoogleAIで「[[fileパス][説明]]」と「[[fileパス]]」とでは意味が違うのだっけというのを聞いてみたら、 意味が違っているらしくて前者の場合はインライン表示できないという回答がありました。 で、標準のリンク挿入では自動的に説明が入るとも回答があったのですが、 少なくとも以前確認したときは説明は付かなかったし ハマった記憶も無いので、ここ最近のorg-modeのアップデートで余計な事をされるようになったと いう感じなのでしょうか? 対応策としては手動で編集する方法の他に、 アドバイスを使うという案が提示されました。

(defun my/org-yank-media-no-description (orig-fun &rest args)
  "yank-mediaで挿入されるリンクから説明文を省くアドバイス"
  (cl-letf (((symbol-function 'org-link-make-string)
             (lambda (link &optional description)
               ;; 説明文(description)を無視してリンクを生成する
               (concat "[[" link "]]"))))
    (apply orig-fun args)))

(advice-add 'org--image-yank-media-handler :around #'my/org-yank-media-no-description)

アドバイスの書き方が未だによくわかっていないので、そのまま適用してみたのですが 所望のとおりに説明文なしのリンク文字列が貼られるようになりました。ほぅ....。 それにしても今のデフォルトの挙動は誰得なんだ?

どうやら Emacs-31 のブランチが来週作成される事になったらしい (The emacs-31 branch will be cut in one week)。 新しいガベージコレクタは31には含まれないようですが、 効果のほどは微妙みたいなので 個人的には含まれなくてもまぁ良いかなと思います。 それよりもWindowsビルドでのカラー絵文字表示対応がやっと公式にリリースされる事の方が大きいです。 2024年10月に対応が入ってから、恐らく31.1がリリースされるのは 早くても今から半年後になると思われるので、約2年間寝かされてる感じになる訳で。 ほんと、このリリースサイクルはなんとかならないのだろうか?と思わなくもありません。

「上伊那ぼたん、酔へる姿は百合の花」のアニメ。ちゃんとは見ていなかったのですが、 先週観たときはこういう作風だったっけ?と思うくらいに絵が荒れてた記憶があったのですが、 今回は普通のアニメの絵だなぁ?と思ったり。違うアニメを見てたのだろうか? と思ったくらいなのですが、検索してみたら先週の3話が特別だったもよう。


TOP

古いの
2026.04 2026.03 2026.02 2026.01
2025.12 2025.11 2025.10 2025.09 2025.08 2025.07 2025.06 2025.05 2025.04 2025.03 2025.02 2025.01
2024.12 2024.11 2024.10 2024.09 2024.08 2024.07 2024.06 2024.05 2024.04 2024.03 2024.02 2024.01
2023.12 2023.11 2023.10 2023.09 2023.08 2023.07 2023.06 2023.05 2023.04 2023.03 2023.02 2023.01
2022.12 2022.11 2022.10 2022.09 2022.08 2022.07 2022.06 2022.05 2022.04 2022.03 2022.02 2022.01
2021.12 2021.11 2021.10 2021.09 2021.08 2021.07 2021.06 2021.05 2021.04 2021.03 2021.02 2021.01
2020.12 2020.11 2020.10 2020.09 2020.08 2020.07 2020.06 2020.05 2020.04 2020.03 2020.02 2020.01
2019.12 2019.11 2019.10 2019.09 2019.08 2019.07 2019.06 2019.05 2019.04 2019.03 2019.02 2019.01
2018.12 2018.11 2018.10 2018.09 2018.08 2018.07 2018.06 2018.05 2018.04 2018.03 2018.02 2018.01
2017.12 2017.11 2017.10 2017.09 2017.08 2017.07 2017.06 2017.05 2017.04 2017.03 2017.02 2017.01
2016.12 2016.11 2016.10 2016.09 2016.08 2016.07 2016.06 2016.05 2016.04 2016.03 2016.02 2016.01
2015.12 2015.11 2015.10 2015.09 2015.08 2015.07 2015.06 2015.05 2015.04 2015.03 2015.02 2015.01
2014.12 2014.11 2014.10 2014.09 2014.08 2014.07 2014.06 2014.05 2014.04 2014.03 2014.02 2014.01
2013.12 2013.11 2013.10 2013.09 2013.08 2013.07 2013.06 2013.05 2013.04 2013.03 2013.02 2013.01
2012.12 2012.11 2012.10 2012.09 2012.08 2012.07 2012.06 2012.05 2012.04 2012.03 2012.02 2012.01
2011.12 2011.11 2011.10 2011.09 2011.08 2011.07 2011.06 2011.05 2011.04 2011.03 2011.02 2011.01
2010.12 2010.11 2010.10 2010.09 2010.08 2010.07 2010.06 2010.05 2010.04 2010.03 2010.02 2010.01
2009.12 2009.11 2009.10 2009.09 2009.08 2009.07 2009.06 2009.05 2009.04 2009.03 2009.02 2009.01
2008.12 2008.11 2008.10 2008.09 2008.08 2008.07 2008.06 2008.05 2008.04 2008.03 2008.02 2008.01
2007.12 2007.11 2007.10 2007.09 2007.08 2007.07 2007.06 2007.05 2007.04 2007.03 2007.02 2007.01
2006.12 2006.11 2006.10 2006.09 2006.08 2006.07 2006.06 2006.05 2006.04 2006.03 2006.02 2006.01
2005.12 2005.11 2005.10 2005.09 2005.08 2005.07 2005.06 2005.05 2005.04 2005.03 2005.02 2005.01
2004.12 2004.11 2004.10 2004.09 2004.08 2004.07 2004.06 2004.05 2004.04 2004.03 2004.02 2004.01
2003.12 2003.11 2003.10 2003.09 2003.08 2003.07 2003.06 2003.05 2003.04 2003.03 2003.02 2003.01
2002.12 2002.11 2002.10 2002.09 2002.08 2002.07 2002.06 2002.05 2002.04 2002.03 2002.02 2002.01
2001.12 2001.11 2001.10 2001.09 2001.08 2001.07 2001.06 2001.05 2001.04 2001.03 2001.02 2001.01
2000.12 2000.11 2000.10 2000.09 2000.08 2000.07 2000.06 2000.05 2000.04 2000.03